diff --git a/tencentcloud/acctest/basic.go b/tencentcloud/acctest/basic.go index b6bb891d6a..ea3a8c5bdc 100644 --- a/tencentcloud/acctest/basic.go +++ b/tencentcloud/acctest/basic.go @@ -227,12 +227,14 @@ const ( // Cloud monitoring grafana visualization const ( - DefaultGrafanaVpcId = "vpc-391sv4w3" - DefaultGrafanaSubnetId = "subnet-ljyn7h30" - DefaultGrafanaInstanceId = "grafana-dp2hnnfa" - DefaultGrafanaReceiver = "Consumer-nfyxuzmbmq" - DefaultGrafanaPlugin = "grafana-clock-panel" - DefaultGrafanaVersion = "1.2.0" + DefaultGrafanaVpcId = "vpc-391sv4w3" + DefaultGrafanaSubnetId = "subnet-ljyn7h30" + DefaultInternationalGrafanaVpcId = "vpc-dg21ckzx" + DefaultInternationalGrafanaSubnetId = "subnet-i5lq9vy4" + DefaultGrafanaInstanceId = "grafana-dp2hnnfa" + DefaultGrafanaReceiver = "Consumer-nfyxuzmbmq" + DefaultGrafanaPlugin = "grafana-clock-panel" + DefaultGrafanaVersion = "1.2.0" ) /* @@ -298,6 +300,7 @@ variable "cvm_international_subnet_id" { default = "` + DefaultCvmInternationalSubnetId + `" } + variable "vpc_id" { default = "` + DefaultVpcId + `" } diff --git a/tencentcloud/basic_test.go b/tencentcloud/basic_test.go deleted file mode 100644 index f1a490a59d..0000000000 --- a/tencentcloud/basic_test.go +++ /dev/null @@ -1,1210 +0,0 @@ -package tencentcloud - -import ( - "os" - "regexp" - "time" -) - -/* ---------------------------------------------------- -If you want to run through the test cases, -the following must be changed to your resource id. ---------------------------------------------------- -*/ - -var appid string = os.Getenv("TENCENTCLOUD_APPID") -var ownerUin string = os.Getenv("TENCENTCLOUD_OWNER_UIN") - -const ( - keepResource = "keep" - defaultResource = "Default" -) - -var persistResource = regexp.MustCompile("^(keep|Default)") - -// Check if resource should persist instead of recycled -func isResourcePersist(name string, createdTime *time.Time) bool { - createdWithin30Minutes := false - if createdTime != nil { - createdWithin30Minutes = createdTime.Add(time.Minute * 30).After(time.Now()) - } - return persistResource.MatchString(name) || createdWithin30Minutes -} - -// vpn -const defaultVpnDataSource = ` -data "tencentcloud_vpn_gateways" "foo" { - name = "keep-vpn-gw" -} - -data "tencentcloud_vpn_connections" "conns" { - name = "keep-vpn-conn" -} -` - -// cos -const ( - defaultCosCertificateName = "keep-cos-domain-cert" - defaultCosCertificateBucketPrefix = "keep-cert-test" - defaultCosCertDomainName = "mikatong.com" -) - -// clb -const ( - defaultSshCertificate = "vYSQkJ3K" - defaultSshCertificateB = "vYVlNIhW" -) - -const ( - defaultRegion = "ap-guangzhou" - defaultVpcId = "vpc-86v957zb" - defaultVpcCidr = "172.16.0.0/16" - defaultVpcCidrLess = "172.16.0.0/18" - - defaultCvmAZone = "ap-guangzhou-7" - defaultCvmInternationalZone = "ap-guangzhou-3" - defaultCvmVpcId = "vpc-l0dw94uh" - defaultCvmSubnetId = "subnet-ccj2qg0m" - defaultCvmTestingAZone = "ap-guangzhou-2" - defaultCvmTestingVpcId = "vpc-701bm52d" - defaultCvmTestingSubnetId = "subnet-1q62lj3m" - defaultCvmTestingImgId = "img-eb30mz89" - defaultCvmInternationalVpcId = "vpc-m7ryq37p" - defaultCvmInternationalSubnetId = "subnet-lwrsb7a0" - - defaultAZone = "ap-guangzhou-3" - defaultSubnetId = "subnet-enm92y0m" - defaultSubnetCidr = "172.16.0.0/20" - defaultSubnetCidrLess = "172.16.0.0/22" - - defaultInsName = "tf-ci-test" - defaultInsNameUpdate = "tf-ci-test-update" - - defaultDayuBgp = "bgp-000006mq" - defaultDayuBgpMul = "bgp-0000008o" - defaultDayuBgpIp = "bgpip-00000294" - defaultDayuNet = "net-0000007e" - - defaultGaapProxyId = "link-ljb08m2l" - defaultGaapProxyId2 = "link-8lpyo88p" - defaultGaapSecurityPolicyId = "sp-5lqp4l77" - defaultGaapRealserverDomainId1 = "rs-qs0h6wxp" - defaultGaapRealserverDomain1 = "github.com" - defaultGaapRealserverDomainId2 = "rs-qcygnwpd" - defaultGaapRealserverDomain2 = "www.github.com" - defaultGaapRealserverIpId1 = "rs-24e1ol23" - defaultGaapRealserverIp1 = "119.29.29.35" - defaultGaapRealserverIpId2 = "rs-70qzt26p" - defaultGaapRealserverIp2 = "1.1.1.5" - defaultHttpsDomainCertificateId = "cert-crg2aynt" - - defaultSecurityGroup = "sg-ijato2x1" - - defaultProjectId = "1250480" - - defaultTkeOSImageId = "img-2lr9q49h" - defaultTkeOSImageName = "tlinux2.2(tkernel3)x86_64" -) - -// Project -const defaultProjectVariable = ` -variable "default_project" { - default = ` + defaultProjectId + ` -} -` - -// EMR -const ( - defaultEMRVpcId = defaultVpcId - defaultEMRSubnetId = defaultSubnetId - defaultEMRSgId = "sg-694qit0p" -) - -const defaultEMRVariable = ` -variable "vpc_id" { - default = "` + defaultEMRVpcId + `" -} -variable "subnet_id" { - default = "` + defaultEMRSubnetId + `" -} -variable "sg_id" { - default = "` + defaultEMRSgId + `" -} -` - -// cvm-image -const ( - defaultCvmId = "ins-8oqqya08" - defaultDiskId = "disk-5jjrs2lm" - defaultSnapId = "snap-8f2updnb" -) - -const defaultCvmImageVariable = ` -variable "cvm_id" { - default = "` + defaultCvmId + `" -} -variable "disk_id" { - default = "` + defaultDiskId + `" -} -variable "snap_id" { - default = "` + defaultSnapId + `" -} -` - -// cvm-modification -const defaultCommonCvmId = "ins-cr2rfq78" -const defaultCvmModificationVariable = ` -variable "cvm_id" { - default = "` + defaultCommonCvmId + `" -} -` - -// cvm-reboot -const defaultRebootCvmId = "ins-f9jr4bd2" -const defaultRebootCvmVariable = ` -variable "cvm_id" { - default = "` + defaultRebootCvmId + `" -} -` - -// AS -const defaultAsVariable = ` -variable "availability_zone" { - default = "` + defaultCvmAZone + `" -} - -data "tencentcloud_instance_types" "default" { - filter { - name = "zone" - values = [var.availability_zone] - } - cpu_core_count = 2 - exclude_sold_out = true -} -` - -// ckafka -const ( - defaultKafkaInstanceId = "ckafka-vv7wpvae" - defaultKafkaVpcId = "vpc-njbzmzyd" - defaultKafkaSubnetId = "subnet-2txtpql8" - defaultKafkaInternationalVpcId = "vpc-ereuklyj" - defaultKafkaInternationalSubnetId = "subnet-e7rvxfx2" -) - -const defaultKafkaVariable = ` -variable "instance_id" { - default = "` + defaultKafkaInstanceId + `" -} -variable "vpc_id" { - default = "` + defaultKafkaVpcId + `" -} -variable "subnet_id" { - default = "` + defaultKafkaSubnetId + `" -} -variable "international_vpc_id" { - default = "` + defaultKafkaInternationalVpcId + `" -} -variable "international_subnet_id" { - default = "` + defaultKafkaInternationalSubnetId + `" -} -` - -// Tke Exclusive Network Environment -const ( - tkeExclusiveVpcName = "keep_tke_exclusive_vpc" - defaultTkeClusterId = "cls-ely08ic4" - defaultTkeClusterName = "keep-tke-cluster" - defaultTkeClusterType = "tke" - defaultPrometheusId = "prom-1lspn8sw" - defaultTemplateId = "temp-gqunlvo1" - clusterPrometheusId = "prom-g261hacc" - tkeClusterIdAgent = "cls-9ae9qo9k" - tkeClusterTypeAgent = "eks" - defaultAgentId = "agent-q3zy8gt8" -) - -// Cloud monitoring grafana visualization -const ( - defaultGrafanaVpcId = "vpc-391sv4w3" - defaultGrafanaSubnetId = "subnet-ljyn7h30" - defaultInternationalGrafanaVpcId = "vpc-dg21ckzx" - defaultInternationalGrafanaSubnetId = "subnet-i5lq9vy4" - defaultGrafanaInstanceId = "grafana-dp2hnnfa" - defaultGrafanaReceiver = "Consumer-nfyxuzmbmq" - defaultGrafanaPlugin = "grafana-clock-panel" - defaultGrafanaVersion = "1.2.0" -) - -/* ---------------------------------------------------- -The following are common test case used as templates. ---------------------------------------------------- -*/ - -const defaultVpcVariable = ` -variable "instance_name" { - default = "` + defaultInsName + `" -} - -variable "instance_name_update" { - default = "` + defaultInsNameUpdate + `" -} - -variable "availability_region" { - default = "` + defaultRegion + `" -} - -variable "availability_zone" { - default = "` + defaultAZone + `" -} - -variable "availability_cvm_zone" { - default = "` + defaultCvmAZone + `" -} - -variable "availability_cvm_international_zone" { - default = "` + defaultCvmInternationalZone + `" -} - -variable "availability_cvm_testing_zone" { - default = "` + defaultCvmTestingAZone + `" -} - -variable "cvm_testing_vpc_id" { - default = "` + defaultCvmTestingVpcId + `" -} - -variable "cvm_testing_subnet_id" { - default = "` + defaultCvmTestingSubnetId + `" -} - -variable "cvm_testing_image_id" { - default = "` + defaultCvmTestingImgId + `" -} - -variable "cvm_vpc_id" { - default = "` + defaultCvmVpcId + `" -} - -variable "cvm_subnet_id" { - default = "` + defaultCvmSubnetId + `" -} - -variable "cvm_international_vpc_id" { - default = "` + defaultCvmInternationalVpcId + `" -} - -variable "cvm_international_subnet_id" { - default = "` + defaultCvmInternationalSubnetId + `" -} - - -variable "vpc_id" { - default = "` + defaultVpcId + `" -} - -variable "vpc_cidr" { - default = "` + defaultVpcCidr + `" -} - -variable "vpc_cidr_less" { - default = "` + defaultVpcCidrLess + `" -} - -variable "subnet_id" { - default = "` + defaultSubnetId + `" -} - -variable "sg_id" { - default = "` + defaultSecurityGroup + `" -} - -variable "subnet_cidr" { - default = "` + defaultSubnetCidr + `" -} - -variable "subnet_cidr_less" { - default = "` + defaultSubnetCidrLess + `" -} -` - -const fixedTagVariable = ` -variable "fixed_tags" { - default = { - fixed_resource: "do_not_remove" - } -} -` - -const defaultInstanceVariable = defaultVpcVariable + ` -data "tencentcloud_availability_zones" "default" { -} - -data "tencentcloud_images" "default" { - image_type = ["PUBLIC_IMAGE"] - image_name_regex = "Final" -} - -data "tencentcloud_images" "testing" { - image_type = ["PUBLIC_IMAGE"] -} - -data "tencentcloud_instance_types" "default" { - filter { - name = "zone" - values = [var.availability_cvm_zone] - } - filter { - name = "instance-family" - values = ["S1", "S2", "S3", "S4", "S5", "SR1", "SA1", "SA2"] - } - cpu_core_count = 2 - exclude_sold_out = true -} -` -const defaultAzVariable = ` -variable "default_az" { - default = "ap-guangzhou-3" -} - -variable "default_az7" { - default = "ap-guangzhou-7" -} -` - -const defaultImages = ` -variable "default_img_id" { - default = "` + defaultTkeOSImageId + `" -} - -variable "default_img" { - default = "` + defaultTkeOSImageName + `" -} -` - -// default VPC/Subnet datasource -const defaultVpcSubnets = defaultAzVariable + ` - -data "tencentcloud_vpc_subnets" "gz3" { - availability_zone = var.default_az - is_default = true -} - -locals { - vpc_id = data.tencentcloud_vpc_subnets.gz3.instance_list.0.vpc_id - subnet_id = data.tencentcloud_vpc_subnets.gz3.instance_list.0.subnet_id -}` - -const defaultSecurityGroupData = fixedTagVariable + ` -data "tencentcloud_security_groups" "internal" { - name = "default" - tags = var.fixed_tags -} - -data "tencentcloud_security_groups" "exclusive" { - name = "test_preset_sg" -} - -locals { - # local.sg_id - sg_id = data.tencentcloud_security_groups.internal.security_groups.0.security_group_id - sg_id2 = data.tencentcloud_security_groups.exclusive.security_groups.0.security_group_id -} -` - -const ( - defaultMySQLName = "keep_preset_mysql" -) - -// ref with `local.mysql_id` -const CommonPresetMysql = ` - -variable "availability_zone" { - default = "` + defaultAZone + `" -} -variable "region" { - default = "` + defaultRegion + `" -} - -data "tencentcloud_mysql_instance" "mysql" { - instance_name = "` + defaultMySQLName + `" -} - -locals { - mysql_id = data.tencentcloud_mysql_instance.mysql.instance_list.0.mysql_id -} -` - -// SQLServer -const defaultSQLServerName = "keep-preset_sqlserver" -const defaultPubSQLServerName = "keep-publish-instance" -const defaultSubSQLServerName = "keep-subscribe-instance" -const defaultSQLServerDB = "keep_sqlserver_db" -const defaultSQLServerPubSubDB = "keep_pubsub_db" -const defaultSQLServerPubDB = "keep_pub_db" -const defaultSQLServerSubDB = "keep_sub_db" -const defaultSQLServerAccount = "keep_sqlserver_account" - -const CommonPresetSQLServer = ` -data "tencentcloud_sqlserver_instances" "sqlserver" { - name = "` + defaultSQLServerName + `" -} - -locals { - # local.sqlserver_id - sqlserver_id = data.tencentcloud_sqlserver_instances.sqlserver.instance_list.0.id - sqlserver_db = "` + defaultSQLServerDB + `" -} -` - -const CommonPresetSQLServerAccount = CommonPresetSQLServer + ` -data "tencentcloud_sqlserver_accounts" "test"{ - instance_id = local.sqlserver_id - name = "` + defaultSQLServerAccount + `" -} - -locals { - # local.sqlserver_id - sqlserver_account = data.tencentcloud_sqlserver_accounts.test.list.0.name - sqlserver_pwd = data.tencentcloud_sqlserver_accounts.test.list.0.name -} -` - -const testAccSqlserverAZ = ` -data "tencentcloud_availability_zones_by_product" "zone" { - product = "sqlserver" -} - -locals { - # local.az, local.az1 - az = data.tencentcloud_availability_zones_by_product.zone.zones[0].name - az1 = data.tencentcloud_availability_zones_by_product.zone.zones[1].name -} -` - -const CommonPubSubSQLServer = ` -data "tencentcloud_sqlserver_instances" "pub_sqlserver" { - name = "` + defaultPubSQLServerName + `" -} -data "tencentcloud_sqlserver_instances" "sub_sqlserver" { - name = "` + defaultSubSQLServerName + `" -} - -locals { - pub_sqlserver_id = data.tencentcloud_sqlserver_instances.pub_sqlserver.instance_list.0.id - sub_sqlserver_id = data.tencentcloud_sqlserver_instances.sub_sqlserver.instance_list.0.id - sqlserver_pubsub_db = "` + defaultSQLServerPubSubDB + `" - sqlserver_pub_db = "` + defaultSQLServerPubDB + `" - sqlserver_sub_db = "` + defaultSQLServerSubDB + `" -} -` - -const instanceCommonTestCase = defaultInstanceVariable + ` -resource "tencentcloud_instance" "default" { - instance_name = var.instance_name - availability_zone = var.availability_cvm_zone - image_id = data.tencentcloud_images.default.images.0.image_id - instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type - system_disk_type = "CLOUD_PREMIUM" - system_disk_size = 50 - allocate_public_ip = true - internet_max_bandwidth_out = 10 - vpc_id = var.cvm_vpc_id - subnet_id = var.cvm_subnet_id -} -` - -// End of SQLServer - -// PostgreSQL -const defaultPGOperationName = "keep-pg-operation" -const OperationPresetPGSQL = ` -data "tencentcloud_postgresql_instances" "foo" { - name = "` + defaultPGOperationName + `" -} - -data "tencentcloud_postgresql_readonly_groups" "ro_groups" { - filters { - name = "db-master-instance-id" - values = [data.tencentcloud_postgresql_instances.foo.instance_list.0.id] - } - order_by = "CreateTime" - order_by_type = "asc" -} - -locals { - pgsql_id = data.tencentcloud_postgresql_instances.foo.instance_list.0.id - pgrogroup_id = data.tencentcloud_postgresql_readonly_groups.ro_groups.read_only_group_list.0.read_only_group_id -} -` -const defaultPGSQLName = "keep-postgresql" -const CommonPresetPGSQL = ` -data "tencentcloud_postgresql_instances" "foo" { - name = "` + defaultPGSQLName + `" -} - -locals { - pgsql_id = data.tencentcloud_postgresql_instances.foo.instance_list.0.id -} -` - -// End of PostgreSQL - -const defaultCVMName = "keep-cvm" -const presetCVM = ` -data "tencentcloud_instances" "instance" { - instance_name = "` + defaultCVMName + `" -} - -locals { - cvm_id = data.tencentcloud_instances.instance.instance_list.0.instance_id - cvm_az = "` + defaultAZone + `" - cvm_private_ip = data.tencentcloud_instances.instance.instance_list.0.private_ip -} -` - -const userInfoData = ` -data "tencentcloud_user_info" "info" {} - -locals { - app_id = data.tencentcloud_user_info.info.app_id - uin = data.tencentcloud_user_info.info.uin - owner_uin = data.tencentcloud_user_info.info.owner_uin -} -` - -const defaultSCFCosBucket = ` -data "tencentcloud_user_info" "info" {} - -data "tencentcloud_cos_buckets" "buckets" { - bucket_prefix = "preset-scf-bucket-${data.tencentcloud_user_info.info.app_id}" -} - -locals { - bucket_name = data.tencentcloud_cos_buckets.buckets.bucket_list.0.bucket - bucket_url = data.tencentcloud_cos_buckets.buckets.bucket_list.0.cos_bucket_url -} -` - -const defaultScfNamespace = "preset-scf-namespace" - -const defaultFileSystemName = "keep_preset_cfs" - -const defaultFileSystem = ` -data "tencentcloud_cfs_file_systems" "fs" { - name = "` + defaultFileSystemName + `" -} - -# doesn't support datasource for now -variable "mount_id" { - default = "cfs-iobiaxtj" -} - -locals { - cfs = data.tencentcloud_cfs_file_systems.fs.file_system_list.0 - cfs_id = local.cfs.file_system_id -}` - -const defaultCamVariables = ` -variable "cam_role_basic" { - default = "keep-cam-role" -} - -variable "cam_policy_basic" { - default = "keep-cam-policy" -} - -variable "cam_group_basic" { - default = "keep-cam-group" -} - -variable "cam_user_basic" { - default = "keep-cam-user" -} -` - -// TCR Service -const defaultTCRInstanceName = "keep-tcr-instance-sh" -const defaultTCRInstanceId = "tcr-aoz8mxoz" -const defaultTCRNamespace = "keep-tcr-namespace-sh" -const defaultTCRRepoName = "keep-tcr-repo-sh" -const defaultTCRSSL = "zjUMifFK" - -const defaultTCRInstanceVar = ` -variable "tcr_name" { - default = "` + defaultTCRInstanceName + `" -} - -variable "tcr_namespace" { - default = "` + defaultTCRNamespace + `" -} - -variable "tcr_repo" { - default = "` + defaultTCRRepoName + `" -} -` - -const defaultTCRInstanceData = defaultTCRInstanceVar + ` -data "tencentcloud_tcr_instances" "tcr" { - name = var.tcr_name -} - -locals { - tcr_id = data.tencentcloud_tcr_instances.tcr.instance_list.0.id -} -` - -// End of TCR Service - -// TcaPlus DB - -const defaultTcaPlusClusterName = "keep-tcaplus-cluster" -const defaultTcaPlusClusterTableGroup = "keep_table_group" -const defaultTcaPlusTdrClusterName = "keep_tdr_tcaplus_cluster" -const defaultTcaPlusTdrClusterTableGroup = "keep_tdr_table_group" -const defaultTcaPlusClusterTable = "keep_players" -const defaultTcaPlusVar = ` -variable "tcaplus_cluster" { - default = "` + defaultTcaPlusClusterName + `" -} - -variable "tcaplus_table_group" { - default = "` + defaultTcaPlusClusterTableGroup + `" -} - -variable "tcaplus_table" { - default = "` + defaultTcaPlusClusterTable + `" -} - -variable "tcaplus_tcr_cluster" { - default = "` + defaultTcaPlusTdrClusterName + `" -} - -variable "tcaplus_tcr_table_group" { - default = "` + defaultTcaPlusTdrClusterTableGroup + `" -} -` -const defaultTcaPlusData = defaultTcaPlusVar + ` -data "tencentcloud_tcaplus_clusters" "tcaplus" { - cluster_name = var.tcaplus_cluster -} - -data "tencentcloud_tcaplus_tablegroups" "group" { - cluster_id = data.tencentcloud_tcaplus_clusters.tcaplus.list.0.cluster_id - tablegroup_name = var.tcaplus_table_group -} - -data "tencentcloud_tcaplus_clusters" "tdr_tcaplus" { - cluster_name = "keep_tdr_tcaplus_cluster" -} - -data "tencentcloud_tcaplus_tablegroups" "tdr_group" { - cluster_id = data.tencentcloud_tcaplus_clusters.tdr_tcaplus.list.0.cluster_id - tablegroup_name = "keep_tdr_table_group" -} - -locals { - tcaplus_id = data.tencentcloud_tcaplus_clusters.tcaplus.list.0.cluster_id - tcr_tcaplus_id = data.tencentcloud_tcaplus_clusters.tdr_tcaplus.list.0.cluster_id - tcaplus_table_group = var.tcaplus_table_group - tcaplus_table_group_id = data.tencentcloud_tcaplus_tablegroups.group.list.0.tablegroup_id - tcr_tcaplus_table_group_id = data.tencentcloud_tcaplus_tablegroups.tdr_group.list.0.tablegroup_id - tcaplus_table = var.tcaplus_table -} -` - -// End of TcaPlus DB - -// TKE Service - -// List sample CIDRs to avoid conflict when running multiple cluster testcase parallel -const TkeCIDRs = ` -variable "tke_cidr_a" { - default = [ - "10.31.0.0/23", - "10.31.2.0/24", - "10.31.3.0/24", - "10.31.16.0/24", - "10.31.32.0/24" - ] -} - -variable "tke_cidr_b" { - default = [ - "172.18.0.0/20", - "172.18.16.0/21", - "172.18.24.0/21", - "172.18.32.0/20", - "172.18.48.0/20" - ] -} - -variable "tke_cidr_c" { - default = [ - "192.168.0.0/18", - "192.168.64.0/19", - "192.168.96.0/20", - "192.168.112.0/21", - "192.168.120.0/21" - ] -} -` - -const TkeDefaultNodeInstanceVar = ` -variable "ins_type" { - default = "SA2.LARGE8" -} -` - -// @deprecated. Avoid using this because it may return diff results -const TkeInstanceType = ` -data "tencentcloud_instance_types" "ins_type" { - availability_zone = "` + defaultCvmAZone + `" - cpu_core_count = 2 - exclude_sold_out = true -} - -locals { - ins_az = "` + defaultCvmAZone + `" - type1 = [for i in data.tencentcloud_instance_types.ins_type.instance_types: i if lookup(i, "instance_charge_type") == "POSTPAID_BY_HOUR"] - type2 = [for i in data.tencentcloud_instance_types.ins_type.instance_types: i] - final_type = concat(local.type1, local.type2)[0].instance_type -} -` - -const TkeExclusiveNetwork = defaultAzVariable + ` -data "tencentcloud_vpc_instances" "vpc" { - name = "` + tkeExclusiveVpcName + `" -} - -data "tencentcloud_vpc_subnets" "subnet" { - vpc_id = data.tencentcloud_vpc_instances.vpc.instance_list.0.vpc_id -} - -data "tencentcloud_instance_types" "default" { - filter { - name = "zone" - values = [var.default_az] - } - filter { - name = "instance-charge-type" - values = ["POSTPAID_BY_HOUR"] - } - cpu_core_count = 2 - exclude_sold_out = true -} - -locals { - vpc_id = data.tencentcloud_vpc_subnets.subnet.instance_list.0.vpc_id - subnet_id = data.tencentcloud_vpc_subnets.subnet.instance_list.0.subnet_id - scale_instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type -} -` - -const TkeDataSource = ` -data "tencentcloud_kubernetes_clusters" "tke" { - cluster_name = "` + defaultTkeClusterName + `" -} - -locals { - cluster_id = data.tencentcloud_kubernetes_clusters.tke.list.0.cluster_id -} -` - -// End of TKE Service - -// MongoDB -const ( - defaultMongoDBVPCId = "vpc-rwj54lfr" - defaultMongoDBSubnetId = "subnet-nyt57zps" -) -const defaultMongoDBSecurityGroupId = "sg-if748odn" -const DefaultMongoDBSpec = ` -data "tencentcloud_mongodb_zone_config" "zone_config" { - available_zone = "ap-guangzhou-6" -} - -data "tencentcloud_security_group" "foo" { - name = "default" -} - -variable "engine_versions" { - default = { - "3.6": "MONGO_36_WT", - "4.0": "MONGO_40_WT", - "4.2": "MONGO_42_WT" - "4.4": "MONGO_44_WT" - } -} -variable "sg_id" { - default = "` + defaultMongoDBSecurityGroupId + `" -} -variable "vpc_id" { - default = "` + defaultMongoDBVPCId + `" -} -variable "subnet_id" { - default = "` + defaultMongoDBSubnetId + `" -} - -locals { - filtered_spec = [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "machine_type") == "HIO10G" && lookup(i, "engine_version") != "3.2"] - spec = concat(local.filtered_spec, data.tencentcloud_mongodb_zone_config.zone_config.list) - machine_type = local.spec.0.machine_type - cluster_type = local.spec.0.cluster_type - memory = local.spec.0.memory / 1024 - volume = local.spec.0.min_storage / 1024 - engine_version = lookup(var.engine_versions, local.spec.0.engine_version) - security_group_id = data.tencentcloud_security_group.foo.id -} - -locals { - filtered_sharding_spec = [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "cluster_type") == "SHARD" && lookup(i, "min_replicate_set_num") > 0 && lookup(i, "machine_type") == "HIO10G" && lookup(i, "engine_version") != "3.2"] - sharding_spec = concat(local.filtered_sharding_spec, [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "cluster_type") == "SHARD" && lookup(i, "min_replicate_set_num") > 0]) - sharding_machine_type = local.sharding_spec.0.machine_type - sharding_memory = local.sharding_spec.0.memory / 1024 - sharding_volume = local.sharding_spec.0.min_storage / 1024 - sharding_engine_version = lookup(var.engine_versions, local.sharding_spec.0.engine_version) -} -` - -// End of MongoDB - -// TCM - -const ( - defaultMeshClusterId = "cls-9ae9qo9k" - defaultMeshVpcId = "vpc-pyyv5k3v" - defaultMeshSubnetId = "subnet-06i8auk6" -) - -// End of TCM - -// DCDB -const ( - defaultDcdbInstanceId = "tdsqlshard-lgz66iqr" - defaultDcdbInstanceName = "keep-dcdb-test" - defaultDcdbInsVpcId = "vpc-4owdpnwr" - defaultDcdbInsIdSubnetId = "subnet-qylstu34" - defaultDcdbSGId = "sg-ijato2x1" - defaultDcdbSGName = "default" -) - -// ref with `local.dcdb_id` -const CommonPresetDcdb = ` - -variable "availability_zone" { - default = "` + defaultAZone + `" -} -variable "region" { - default = "` + defaultRegion + `" -} - -data "tencentcloud_dcdb_instances" "dcdb" { - search_name = "instancename" - search_key = "` + defaultDcdbInstanceName + `" -} - -locals { - dcdb_id = data.tencentcloud_dcdb_instances.dcdb.list.0.instance_id -} -` - -// ref with `local.redis_id` -const CommonPresetRedis = ` -locals { - redis_id = "crs-jf4ico4v" - redis_name = "Keep-terraform" -} -` - -// End of DCDB -// SES -const ( - defaultRegionSes = "ap-hongkong" -) - -// End of SES -// MARIADB -const ( - defaultMariadbSubnetId = "subnet-jdi5xn22" - defaultMariadbVpcId = "vpc-k1t8ickr" - defaultMariadbSecurityGroupId = "sg-7kpsbxdb" - - defaultMariadbInstanceSubnetId = "subnet-4w4twlf4" - defaultMariadbInstanceVpcId = "vpc-9m66acml" -) - -// End of MARIADB -// PTS -const ( - defaultPtsProjectId = "project-45vw7v82" - defaultScenarioId = "scenario-gb5ix8m2" - defaultScenarioIdJob = "scenario-22q19f3k" - defaultPtsNoticeId = "notice-tj75hgqj" -) - -// End of PTS - -// CSS -const ( - defaultCSSLiveType = "PullLivePushLive" - defaultCSSDomainName = "177154.push.tlivecloud.com" - defaultCSSStreamName = defaultCSSPrefix + "test_stream_name" - defaultCSSAppName = "live" - defaultCSSOperator = "tf_admin" - defaultCSSPrefix = "tf_css_" - defaultCSSPlayDomainName = "test122.jingxhu.top" - defaultCSSPushDomainName = "177154.push.tlivecloud.com" - defaultCSSBindingCertName = "keep_ssl_css_domain_test" -) - -// End of CSS - -// TAT -const ( - defaultInstanceId = "ins-881b1c8w" - defaultCommandId = "cmd-rxbs7f5z" -) - -// End of TAT - -// TDCPG -const ( - defaultTdcpgClusterId = "tdcpg-m5e26fi8" - defaultTdcpgClusterName = "keep-tdcpg-test" - defaultTdcpgPayMode = "POSTPAID_BY_HOUR" - defaultTdcpgInstanceId = "tdcpg-ins-fc0e5kes" - defaultTdcpgInstanceName = "keep-tdcpg-instance-test" - defaultTdcpgZone = "ap-guangzhou-3" - defaultTdcpgTestNamePrefix = "tf-tdcpg-" -) - -// End of TDCPG - -// DBBRAIN -const ( - defaultDbBrainsagId = "sag-01z37l4g" - defaultDbBrainInstanceId = "cdb-fitq5t9h" -) - -// End of DBBRAIN - -// RUM -const ( - defaultRumInstanceId = "rum-pasZKEI3RLgakj" - defaultRumProjectId = "131407" -) - -// End of RUM - -// DTS -const ( - defaultDTSJobId = "dts-r5gpejpe" -) - -// End of DTS - -// TEM -const ( - defaultEnvironmentId = "en-85377m6j" - defaultApplicationId = "app-joqr9bd5" - defaultTemVpcId = "vpc-4owdpnwr" - defaultTemSubnetId = "subnet-c1l35990" - defaultLogsetId = "33aaf0ae-6163-411b-a415-9f27450f68db" - defaultTopicId = "88735a07-bea4-4985-8763-e9deb6da4fad" -) - -// End of TEM - -// CI -const ( - defaultCiBucket = "terraform-ci-1308919341" - defaultStyleName = "terraform_test" -) - -// End of CI - -// Cynosdb -const ( - defaultCynosdbClusterId = "cynosdbmysql-bws8h88b" - defaultCynosdbClusterInstanceId = "cynosdbmysql-ins-afqx1hy0" - defaultCynosdbSecurityGroup = "sg-baxfiao5" -) - -const CommonCynosdb = ` - -variable "cynosdb_cluster_id" { - default = "` + defaultCynosdbClusterId + `" -} -variable "cynosdb_cluster_instance_id" { - default = "` + defaultCynosdbClusterInstanceId + `" -} -variable "cynosdb_cluster_security_group_id" { - default = "` + defaultCynosdbSecurityGroup + `" -} -` - -// End of Cynosdb - -// TSF -const ( - defaultNamespaceId = "namespace-aemrg36v" - defaultTsfApplicationId = "application-a24x29xv" - defaultTsfClustId = "cluster-vwgj5e6y" - defaultTsfGroupId = "group-yrjkln9v" - defaultTsfGateway = "gw-ins-lvdypq5k" - defaultTsfDestNamespaceId = "namespace-aemrg36v" - defaultTsfConfigId = "dcfg-y54wzk3a" - defaultTsfApiId = "api-j03q029a" - defaultTsfGWGroupId = "group-vzd97zpy" - defaultTsfFileConfigId = "dcfg-f-ab6l9x5y" - defaultTsfImageId = "img-7r9vq8wd" - defaultTsfGWNamespaceId = "namespace-vwgo38wy" - defaultTsfContainerGroupId = "group-y43x5jpa" - defaultTsfpodName = "keep-terraform-7f4874bc5c-w75q4" -) - -// End of TSF - -// CBS -const defaultCbsBackupDiskId = "disk-r69pg9vw" - -const CbsBackUp = ` -variable "cbs_backup_disk_id" { - default = "` + defaultCbsBackupDiskId + `" -} -` - -// End of CBS - -// CRS -const ( - defaultCrsInstanceId = "crs-jf4ico4v" - defaultCrsVpcId = "vpc-4owdpnwr" - defaultCrsSubnetId = "subnet-4o0zd840" - defaultCrsSecurityGroups = "sg-edmur627" - defaultCrsGroupId = "crs-rpl-orfiwmn5" -) - -const DefaultCrsVar = ` -variable "vpc_id" { - default = "` + defaultCrsVpcId + `" -} -variable "subnet_id" { - default = "` + defaultCrsSubnetId + `" -} -` - -// End of CRS - -const ( - defaultLighthouseInstanceId = "lhins-g4bwdjbf" - defaultLighthoustDiskId = "lhdisk-do4p4hz6" - defaultLighthouseBackupDiskId = "lhdisk-cwodsc4q" - defaultLighthouseBackUpId = "lhbak-bpum3ygx" - defaultLighthouseSnapshotId = "lhsnap-o2mvsvk3" -) - -const DefaultLighthoustVariables = ` -variable "lighthouse_id" { - default = "` + defaultLighthouseInstanceId + `" -} - -variable "lighthouse_disk_id" { - default = "` + defaultLighthoustDiskId + `" -} - -variable "lighthouse_backup_disk_id" { - default = "` + defaultLighthouseBackupDiskId + `" -} - -variable "lighthouse_backup_id" { - default = "` + defaultLighthouseBackUpId + `" -} - -variable "lighthouse_snapshot_id" { - default = "` + defaultLighthouseSnapshotId + `" -} -` - -// TSE -const ( - defaultEngineResourceSpec = "spec-qvj6k7t4q" - defaultTseVpcId = "vpc-4owdpnwr" - defaultTseSubnetId = "subnet-dwj7ipnc" - defaultTseGatewayId = "gateway-ddbb709b" - defaultTseCertId = "vYSQkJ3K" -) - -const DefaultTseVar = ` -variable "gateway_id" { - default = "` + defaultTseGatewayId + `" -} -variable "cert_id" { - default = "` + defaultTseCertId + `" -} -` - -// End of TSE - -// ES -const ( - defaultEsInstanceId = "es-5wn36he6" - defaultEsSecurityGroup = "sg-edmur627" - defaultEsLogstash = "ls-kru90fkz" -) - -const DefaultEsVariables = ` -variable "instance_id" { - default = "` + defaultEsInstanceId + `" -} - -variable "security_group_id" { - default = "` + defaultEsSecurityGroup + `" -} - -variable "logstash_id" { - default = "` + defaultEsLogstash + `" -} -` - -// End of TSE - -// Clickhouse -const DefaultClickhouseInstanceId = "cdwch-pcap78rz" - -const DefaultClickhouseVariables = ` -variable "instance_id" { - default = "` + DefaultClickhouseInstanceId + `" -} -` - -// End of Clickhouse - -// CLB -const clbTargetEniTestCase = instanceCommonTestCase + ` -resource "tencentcloud_eni" "clb_eni_target" { - name = "ci-test-eni" - vpc_id = var.cvm_vpc_id - subnet_id = var.cvm_subnet_id - description = "clb eni backend" - ipv4_count = 1 -} - -resource "tencentcloud_eni_attachment" "foo" { - eni_id = tencentcloud_eni.clb_eni_target.id - instance_id = tencentcloud_instance.default.id -} -` - -//End of Clb - -// MPS -const ( - defaultMpsScheduleId = 24685 - defaultMpsScheduleName = "keep_mps_schedule_001" -) - -//End of MPS diff --git a/tencentcloud/commom_test.go b/tencentcloud/commom_test.go deleted file mode 100644 index dfb2feb6e9..0000000000 --- a/tencentcloud/commom_test.go +++ /dev/null @@ -1,226 +0,0 @@ -package tencentcloud - -import ( - "reflect" - "testing" - - sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - - "github.com/stretchr/testify/assert" -) - -func TestIsContains(t *testing.T) { - var s *string - var i interface{} = s - tests := []struct { - x interface{} - y interface{} - z bool - }{ - {nil, nil, false}, - {s, s, false}, - {&i, &i, true}, - - {[]int{0, 1, 2}, 1, true}, - {[]int{0, 1, 2}, 3, false}, - {[]int{0, 1, 2}, int64(1), false}, - {[]int{0, 1, 2}, "1", false}, - {[]int{0, 1, 2}, true, false}, - - {[]int64{0, 1, 2}, int64(1), true}, - {[]int64{0, 1, 2}, int64(3), false}, - {[]int64{0, 1, 2}, 1, false}, - {[]int64{0, 1, 2}, "1", false}, - {[]int64{0, 1, 2}, true, false}, - - {[]float64{0.0, 1.0, 2.0}, 1.0, true}, - {[]float64{0.0, 1.0, 2.0}, float64(1), true}, - {[]float64{0.0, 1.0, 2.0}, 3.0, false}, - {[]float64{0.0, 1.0, 2.0}, 1, false}, - - {[]string{"a", "b", "c"}, "a", true}, - {[]string{"a", "b", "c"}, "d", false}, - {[]string{"a", "b", "c"}, 1, false}, - {[]string{"a", "b", "c"}, true, false}, - - {[]interface{}{0, "1", 2}, "1", true}, - {[]interface{}{0, "1", 2}, 1, false}, - {[]interface{}{0, 1, 2}, true, false}, - {[]interface{}{0, true, 2}, true, true}, - {[]interface{}{0, false, 2}, true, false}, - - {[]interface{}{[]int{0, 1}, []int{1, 2}}, []int{1, 2}, true}, - {[]interface{}{[]int{0, 1}, []int{1, 2, 3}}, []int{1, 2}, false}, - - {map[string]int{"a": 1}, "a", true}, - {map[string]int{"a": 1}, "d", false}, - {map[string]int{"a": 1}, 1, false}, - {map[string]int{"a": 1}, true, false}, - - {"abc", "a", true}, - {"abc", "d", false}, - {"abc", 1, false}, - {"abc", true, false}, - - {"a", "a", true}, - {1, 1, true}, - {-1, -1, true}, - {1.0, 1.0, true}, - {true, true, true}, - {false, false, true}, - } - - for _, v := range tests { - if IsContains(v.x, v.y) != v.z { - t.Errorf("Failed: %#v", v) - } - } -} - -func TestMatchAny(t *testing.T) { - assert.False(t, MatchAny(1)) - assert.True(t, MatchAny(1, 1, 2, 3)) - assert.False(t, MatchAny(1, 4, 5, 6)) - assert.True(t, MatchAny("a", "b", "c", "a", "aa")) - - one := 1 - two := 2 - var ptrOne *int - var nilVal *string - - ptrOne = &one - assert.True(t, MatchAny(ptrOne, &one, two)) - - assert.False(t, MatchAny(ptrOne, 5, 6, 7)) - assert.False(t, MatchAny(nilVal, nil)) - - var oneI64 int64 = 1 - var oneUI64 uint64 = 1 - - assert.False(t, MatchAny(oneI64, 2, 1, 3)) - assert.False(t, MatchAny(oneUI64, 1)) -} - -func TestGetListIncrement(t *testing.T) { - var ( - old1 = []int{1, 2, 2, 3, 5} - new1 = []int{1, 2, 3, 2, 4, 5, 6, 3} - expected1 = []int{4, 6, 3} - ) - actual1, _ := GetListIncrement(old1, new1) - assert.Equalf(t, expected1, actual1, "incr1 should equal, got %v %v", expected1, actual1) - - var ( - old2 = []int{1, 2, 4, 5} - new2 = []int{1, 2, 3, 2, 4, 5, 6, 3} - expected2 = []int{3, 2, 6, 3} - ) - actual2, _ := GetListIncrement(old2, new2) - assert.Equalf(t, expected2, actual2, "incr1 should equal, got %v %v", expected2, actual2) - - var ( - old3 = []int{1, 2, 4, 5, 3, 6, 3, 2} - new3 = []int{1, 2, 3, 2, 4, 5, 6, 3} - expected3 = make([]int, 0) - ) - actual3, _ := GetListIncrement(old3, new3) - assert.Equalf(t, expected3, actual3, "incr1 should equal, got %v %v", expected3, actual3) - - var ( - old4 = []int{1} - new4 = []int{2} - ) - - _, err := GetListIncrement(old4, new4) - assert.EqualError(t, err, "elem 1 not exist") - -} - -func TestGetListDiffs(t *testing.T) { - var ( - o1 = []int{1, 2, 3, 4, 5} - n1 = []int{1, 2, 3, 5, 6} - expectAdds1 = []int{6} - expectLacks1 = []int{4} - ) - - adds1, lacks1 := GetListDiffs(o1, n1) - assert.Contains(t, expectAdds1, adds1[0]) - assert.Contains(t, expectLacks1, lacks1[0]) - - var ( - o2 = []int{1, 1, 3, 4, 5} - n2 = []int{4, 1, 1, 5, 3} - expectAdds2 = make([]int, 0) - expectLacks2 = make([]int, 0) - ) - - adds2, lacks2 := GetListDiffs(o2, n2) - assert.Equalf(t, len(expectAdds2), len(adds2), "adds2 should be %v, got %v", expectAdds2, adds2) - assert.Equalf(t, len(expectLacks2), len(lacks2), "lacks2 should be %v, got %v", expectLacks2, lacks2) - - // TODO - var ( - o3 = []int{1, 3, 3, 4, 4} - n3 = []int{4, 3, 1, 7, 3, 6} - expectAdds3 = []int{6, 7} - expectLacks3 = []int{4} - ) - - adds3, lacks3 := GetListDiffs(o3, n3) - assert.Contains(t, expectAdds3, adds3[0]) - assert.Contains(t, expectAdds3, adds3[1]) - assert.Equalf(t, expectLacks3, lacks3, "lacks3 should be %v, got %v", expectLacks3, lacks3) - - var ( - o4 = []int{1, 2, 3, 4, 5} - n4 = []int{4} - expectAdds4 = make([]int, 0) - expectLacks4 = []int{1, 2, 3, 5} - ) - - adds4, lacks4 := GetListDiffs(o4, n4) - assert.Equalf(t, len(expectAdds4), len(adds4), "adds4 should be %v, got %v", expectAdds4, adds4) - assert.Contains(t, expectLacks4, lacks4[0]) - assert.Contains(t, expectLacks4, lacks4[1]) - assert.Contains(t, expectLacks4, lacks4[2]) - assert.Contains(t, expectLacks4, lacks4[3]) - - adds5, lacks5 := GetListDiffs([]int{100003, 100004}, []int{100003, 100003, 100004}) - assert.Equalf(t, 1, len(adds5), "") - assert.Equalf(t, 0, len(lacks5), "") - assert.Contains(t, []int{100003, 100003, 100004}, adds5[0]) - -} - -func TestIsExpectError(t *testing.T) { - - err := sdkErrors.NewTencentCloudSDKError("ClientError.NetworkError", "", "") - - // Expected - expectedFull := []string{"ClientError.NetworkError"} - expectedShort := []string{"ClientError"} - assert.Equalf(t, isExpectError(err, expectedFull), true, "") - assert.Equalf(t, isExpectError(err, expectedShort), true, "") - - // Unexpected - unExpectedMatchHead := []string{"ClientError.HttpStatusCodeError"} - unExpectedShort := []string{"SystemError"} - assert.Equalf(t, isExpectError(err, unExpectedMatchHead), false, "") - assert.Equalf(t, isExpectError(err, unExpectedShort), false, "") -} - -func TestYamlParser(t *testing.T) { - yamlStr := `test` - yaml, err := YamlParser(yamlStr) - assert.Equalf(t, err != nil, true, "") - assert.Equalf(t, yaml == nil, true, "") - - yamlStr1 := `version: v1 -name: test-name -desc: this is a description` - yaml1, err1 := YamlParser(yamlStr1) - assert.Equalf(t, err1, nil, "") - assert.Equalf(t, reflect.TypeOf(yaml1).String(), "map[interface {}]interface {}", "") - assert.Equalf(t, yaml1["name"], "test-name", "") -} diff --git a/tencentcloud/common.go b/tencentcloud/common.go deleted file mode 100644 index 45a4611660..0000000000 --- a/tencentcloud/common.go +++ /dev/null @@ -1,561 +0,0 @@ -package tencentcloud - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io/ioutil" - "log" - "os" - "os/user" - "reflect" - "strconv" - "strings" - "sync/atomic" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/mitchellh/go-homedir" - "github.com/pkg/errors" - sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - "github.com/tencentyun/cos-go-sdk-v5" - "gopkg.in/yaml.v2" -) - -const FILED_SP = "#" -const COMMA_SP = "," - -var contextNil context.Context = nil - -type contextLogId string - -const logIdKey = contextLogId("logId") - -const ( - PROVIDER_READ_RETRY_TIMEOUT = "TENCENTCLOUD_READ_RETRY_TIMEOUT" - PROVIDER_WRITE_RETRY_TIMEOUT = "TENCENTCLOUD_WRITE_RETRY_TIMEOUT" - PROVIDER_WAIT_READ_TIMEOUT = "TENCENTCLOUD_WAIT_READ_TIMEOUT" - - SWEEPER_NEED_PROTECT = "SWEEPER_NEED_PROTECT" - TENCENTCLOUD_COMMON_TIME_LAYOUT = "2006-01-02 15:04:05" -) - -var logFirstTime = "" -var logAtomicId int64 = 0 - -// readRetryTimeout is read retry timeout -//const readRetryTimeout = 3 * time.Minute -var readRetry = getEnvDefault(PROVIDER_READ_RETRY_TIMEOUT, 3) -var readRetryTimeout = time.Duration(readRetry) * time.Minute - -// writeRetryTimeout is write retry timeout -//const writeRetryTimeout = 5 * time.Minute -var writeRetry = getEnvDefault(PROVIDER_WRITE_RETRY_TIMEOUT, 5) -var writeRetryTimeout = time.Duration(writeRetry) * time.Minute - -// writeRetryTimeout is write retry timeout -//const writeRetryTimeout = 5 * time.Minute -var waitRead = getEnvDefault(PROVIDER_WAIT_READ_TIMEOUT, 1) -var waitReadTimeout = time.Duration(waitRead) * time.Second - -//const writeRetryTimeout = 5 * time.Minute -var needProtect = getEnvDefault(SWEEPER_NEED_PROTECT, 0) - -// InternalError common internalError, do not add in retryableErrorCode, -// because when some product return this error, retry won't fix anything. -const InternalError = "InternalError" - -// retryableErrorCode is retryable error code -var retryableErrorCode = []string{ - // client - "ClientError.NetworkError", - "ClientError.HttpStatusCodeError", - // common - "RequestLimitExceeded", - "ResourceInUse", - "ResourceUnavailable", - // cbs - "ResourceBusy", - // teo - "InvalidParameter.ActionInProgress", - // posgresql - "OperationDenied.InstanceStatusLimitError", - // apigw - "UnsupportedOperation.UnsupportedDeleteService", -} - -// retryableCosErrorCode is retryable error code for COS/CI SDK -var retryableCosErrorCode = []string{ - "RequestTimeout", - "InternalError", - "KmsInternalException", - "ServiceUnavailable", - "SlowDown", -} - -func init() { - logFirstTime = fmt.Sprintf("%d", time.Now().UnixNano()/int64(time.Millisecond)) -} - -func getEnvDefault(key string, defVal int) int { - val, ex := os.LookupEnv(key) - if !ex { - return defVal - } - int, err := strconv.Atoi(val) - if err != nil { - panic("TENCENTCLOUD_READ_RETRY_TIMEOUT or TENCENTCLOUD_WRITE_RETRY_TIMEOUT must be int.") - } - return int -} - -// string to time.Time -func stringTotime(t string) time.Time { - template := TENCENTCLOUD_COMMON_TIME_LAYOUT - stamp, _ := time.ParseInLocation(template, t, time.Local) - return stamp -} - -func parseTimeFromCommonLayout(t *string) time.Time { - if t == nil { - return time.Time{} - } - result, err := time.Parse(TENCENTCLOUD_COMMON_TIME_LAYOUT, *t) - if err != nil { - return time.Time{} - } - return result -} - -func monthBetweenTwoDates(start, end string) int { - startTime, err := time.Parse(time.RFC3339, start) - if err != nil { - panic(err) - } - endTime, err := time.Parse(time.RFC3339, end) - if err != nil { - panic(err) - } - m := 0 - month := startTime.Month() - for startTime.Before(endTime) { - startTime = startTime.Add(time.Hour * 24) - nextMonth := startTime.Month() - if nextMonth != month { - m++ - } - month = nextMonth - } - - return m -} - -// getLogId get logId for trace, return a new logId if ctx is nil -func getLogId(ctx context.Context) string { - if ctx != nil { - logId, ok := ctx.Value(logIdKey).(string) - if ok { - return logId - } - } - - return fmt.Sprintf("%s-%d", logFirstTime, atomic.AddInt64(&logAtomicId, 1)) -} - -// logElapsed log func elapsed time, using in defer -func logElapsed(mark ...string) func() { - startAt := time.Now() - return func() { - log.Printf("[DEBUG] [ELAPSED] %s elapsed %d ms\n", strings.Join(mark, " "), int64(time.Since(startAt)/time.Millisecond)) - } -} - -// for Provider produced inconsistent result after apply -func inconsistentCheck(d *schema.ResourceData, meta interface{}) func() { - oldJson, _ := json.Marshal(d.State()) - return func() { - newJson, _ := json.Marshal(d.State()) - if !reflect.DeepEqual(oldJson, newJson) { - log.Printf("[Resource id %s data changes after reading old:%s, new:%s", d.Id(), oldJson, newJson) - } - } -} - -// retryError returns retry error -func retryError(err error, additionRetryableError ...string) *resource.RetryError { - switch realErr := errors.Cause(err).(type) { - case *sdkErrors.TencentCloudSDKError: - if isExpectError(realErr, retryableErrorCode) { - log.Printf("[CRITAL] Retryable defined error: %v", err) - return resource.RetryableError(err) - } - - if len(additionRetryableError) > 0 { - if isExpectError(realErr, additionRetryableError) { - log.Printf("[CRITAL] Retryable addition error: %v", err) - return resource.RetryableError(err) - } - } - case *cos.ErrorResponse: - if isCosExpectedError(realErr, retryableCosErrorCode) { - log.Printf("[CRITAL] Retryable defined error: %v", err) - return resource.RetryableError(err) - } - if len(additionRetryableError) > 0 { - if isCosExpectedError(realErr, additionRetryableError) { - log.Printf("[CRITAL] Retryable additional error: %v", err) - return resource.RetryableError(err) - } - } - default: - } - - log.Printf("[CRITAL] NonRetryable error: %v", err) - return resource.NonRetryableError(err) -} - -// RetryWhenContext retries the function `f` when the error it returns satisfies `predicate`. -// `f` is retried until `timeout` expires. -func RetryWithContext( - ctx context.Context, - timeout time.Duration, - f func(context.Context) (interface{}, error), - additionRetryableError ...string) (interface{}, error) { - var output interface{} - - retryErr := resource.Retry(timeout, func() *resource.RetryError { - var err error - output, err = f(ctx) - - if err != nil { - return retryError(err, additionRetryableError...) - } - return nil - - }) - if retryErr != nil { - return nil, retryErr - } - return output, nil -} - -// isCosExpectedError returns whether error is expected error when using COS SDK -func isCosExpectedError(err error, expectedError []string) bool { - e, ok := err.(*cos.ErrorResponse) - if !ok { - return false - } - - errCode := e.Code - if IsContains(expectedError, errCode) { - return true - } else { - return false - } -} - -// isExpectError returns whether error is expected error -func isExpectError(err error, expectError []string) bool { - e, ok := err.(*sdkErrors.TencentCloudSDKError) - if !ok { - return false - } - - longCode := e.Code - if IsContains(expectError, longCode) { - return true - } - - if strings.Contains(longCode, ".") { - shortCode := strings.Split(longCode, ".")[0] - if IsContains(expectError, shortCode) { - return true - } - } - - return false -} - -// IsNil Determine whether i is empty -func IsNil(v interface{}) bool { - - valueOf := reflect.ValueOf(v) - - k := valueOf.Kind() - - switch k { - case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.UnsafePointer, reflect.Interface, reflect.Slice: - return valueOf.IsNil() - default: - return v == nil - } -} - -// IsString Determine whether data is a string -func IsString(data interface{}) bool { - if IsNil(data) { - return false - } - - if _, ok := data.(string); ok { - return true - } - - return false -} - -// writeToFile write data to file -func writeToFile(filePath string, data interface{}) error { - if strings.HasPrefix(filePath, "~") { - usr, err := user.Current() - if err != nil { - return fmt.Errorf("Get current user fail,reason %s", err.Error()) - } - if usr.HomeDir != "" { - filePath = strings.Replace(filePath, "~", usr.HomeDir, 1) - } - } - - fileInfo, err := os.Stat(filePath) - if err != nil && !os.IsNotExist(err) { - return fmt.Errorf("stat old file error,reason %s", err.Error()) - } - - if !os.IsNotExist(err) { - if fileInfo.IsDir() { - return fmt.Errorf("old filepath is a dir,can not delete") - } - if err := os.Remove(filePath); err != nil { - return fmt.Errorf("delete old file error,reason %s", err.Error()) - } - } - - if IsString(data) { - return ioutil.WriteFile(filePath, []byte(data.(string)), 0422) - } - - jsonStr, err := json.MarshalIndent(data, "", "\t") - if err != nil { - return fmt.Errorf("json decode error,reason %s", err.Error()) - } - - return ioutil.WriteFile(filePath, jsonStr, 0422) -} - -// ReadFromFile return file content -func ReadFromFile(file string) ([]byte, error) { - fileName, err := homedir.Expand(file) - if err != nil { - log.Printf("[CRITAL] wrong file path, error: %v", err) - return nil, err - } - content, err := ioutil.ReadFile(fileName) - if err != nil { - log.Printf("[CRITAL] file read failed, error: %v", err) - return nil, err - } - return content, nil -} - -func CheckNil(object interface{}, fields map[string]string) (nilFields []string) { - // if object is a pointer, get value which object points to - object = reflect.Indirect(reflect.ValueOf(object)).Interface() - - for i := 0; i < reflect.TypeOf(object).NumField(); i++ { - fieldName := reflect.TypeOf(object).Field(i).Name - - if realName, ok := fields[fieldName]; ok { - if realName == "" { - realName = fieldName - } - - if reflect.ValueOf(object).Field(i).IsNil() { - nilFields = append(nilFields, realName) - } - } - } - - return -} - -// BuildTagResourceName builds the Tencent Cloud specific name of a resource description. -// The format is `qcs:project_id:service_type:region:account:resource`. -// For more information, go to https://cloud.tencent.com/document/product/598/10606. -func BuildTagResourceName(serviceType, resourceType, region, id string) string { - switch serviceType { - case "cos": - return fmt.Sprintf("qcs::%s:%s:uid/:%s/%s", serviceType, region, resourceType, id) - - default: - return fmt.Sprintf("qcs::%s:%s:uin/:%s/%s", serviceType, region, resourceType, id) - } -} - -// IsContains returns whether value is within array -func IsContains(array interface{}, value interface{}) bool { - vv := reflect.ValueOf(array) - if vv.Kind() == reflect.Ptr || vv.Kind() == reflect.Interface { - if vv.IsNil() { - return false - } - vv = vv.Elem() - } - - switch vv.Kind() { - case reflect.Invalid: - return false - case reflect.Slice: - for i := 0; i < vv.Len(); i++ { - if reflect.DeepEqual(value, vv.Index(i).Interface()) { - return true - } - } - return false - case reflect.Map: - s := vv.MapKeys() - for i := 0; i < len(s); i++ { - if reflect.DeepEqual(value, s[i].Interface()) { - return true - } - } - return false - case reflect.String: - ss := reflect.ValueOf(value) - switch ss.Kind() { - case reflect.String: - return strings.Contains(vv.String(), ss.String()) - } - return false - default: - return reflect.DeepEqual(array, value) - } -} - -func MatchAny(value interface{}, matches ...interface{}) bool { - rVal := reflect.ValueOf(value) - kind := rVal.Kind() - if kind == reflect.Ptr || kind == reflect.Interface { - if rVal.IsNil() { - return false - } - } - for i := range matches { - match := matches[i] - if reflect.DeepEqual(value, match) { - return true - } - } - return false -} - -func FindIntListIndex(list []int, elem int) int { - for i, v := range list { - if v == elem { - return i - } - } - return -1 -} - -func GetListIncrement(o []int, n []int) (result []int, err error) { - result = append(result, n...) - if len(o) > len(n) { - err = fmt.Errorf("new list elem count %d less than old: %d", len(n), len(o)) - return - } - for _, v := range o { - index := FindIntListIndex(result, v) - if index == -1 { - err = fmt.Errorf("elem %d not exist", v) - return - } - if index+1 >= len(result) { - result = result[:index] - } else { - result = append(result[:index], result[index+1:]...) - } - } - return -} - -func GetListDiffs(o []int, n []int) (adds []int, lacks []int) { - fillArr := func(arr []int, v int, count int) []int { - for i := 0; i < count; i++ { - arr = append(arr, v) - } - return arr - } - diffs := map[int]int{} - for _, v := range o { - diffs[v] -= 1 - } - for _, v := range n { - diffs[v] += 1 - } - log.Printf("DIFFS: %v", diffs) - for num, count := range diffs { - if count < 0 { - lacks = fillArr(lacks, num, -count) - } else if count > 0 { - adds = fillArr(adds, num, count) - } - } - return -} - -//GoRoutine Limit -type GoRoutineLimit struct { - Count int - Chan chan struct{} -} - -func NewGoRoutine(num int) *GoRoutineLimit { - return &GoRoutineLimit{ - Count: num, - Chan: make(chan struct{}, num), - } -} - -func (g *GoRoutineLimit) Run(f func()) { - g.Chan <- struct{}{} - go func() { - f() - <-g.Chan - }() -} - -// YamlParser yaml syntax Parser -func YamlParser(config string) (map[interface{}]interface{}, error) { - m := make(map[interface{}]interface{}) - if err := yaml.Unmarshal([]byte(config), &m); err != nil { - return nil, err - } - return m, nil -} - -func StringToBase64(config string) string { - m := []byte(config) - encodedStr := base64.StdEncoding.EncodeToString(m) - return encodedStr -} - -func Base64ToString(config string) (string, error) { - strConfig, err := base64.StdEncoding.DecodeString(config) - if err != nil { - return "", err - } - return string(strConfig), nil -} - -func BuildStateChangeConf(pending, target []string, timeout, delay time.Duration, refresh resource.StateRefreshFunc) *resource.StateChangeConf { - return &resource.StateChangeConf{ - Pending: pending, - Target: target, - Refresh: refresh, - Timeout: timeout, - Delay: delay, - MinTimeout: 3 * time.Second, - } -} diff --git a/tencentcloud/data_source_tc_cam_list_attached_user_policy_test.go b/tencentcloud/data_source_tc_cam_list_attached_user_policy_test.go deleted file mode 100644 index ae03b3d18b..0000000000 --- a/tencentcloud/data_source_tc_cam_list_attached_user_policy_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudCamListAttachedUserPolicyDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccCamListAttachedUserPolicyDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy"), - resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "policy_list.#"), - resource.TestCheckResourceAttr("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "target_uin", "100032767426"), - resource.TestCheckResourceAttr("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "attach_type", "0"), - ), - }, - }, - }) -} - -const testAccCamListAttachedUserPolicyDataSource = ` - -data "tencentcloud_cam_list_attached_user_policy" "list_attached_user_policy" { - target_uin = 100032767426 - attach_type = 0 - } - -` diff --git a/tencentcloud/data_source_tc_container_clusters_test.go b/tencentcloud/data_source_tc_container_clusters_test.go deleted file mode 100644 index 05f23fbef7..0000000000 --- a/tencentcloud/data_source_tc_container_clusters_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudDataSourceContainerClusters(t *testing.T) { - t.Parallel() - key := "data.tencentcloud_container_clusters.foo" - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataSourceContainerClustersConfig_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(key), - resource.TestCheckResourceAttrSet(key, "total_count"), - resource.TestCheckResourceAttrSet(key, "clusters.#"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataSourceContainerClustersConfig_basic = ` -data "tencentcloud_container_clusters" "foo" { -} -` diff --git a/tencentcloud/data_source_tc_kubernetes_available_cluster_versions_test.go b/tencentcloud/data_source_tc_kubernetes_available_cluster_versions_test.go deleted file mode 100644 index 2c0d0d5d6a..0000000000 --- a/tencentcloud/data_source_tc_kubernetes_available_cluster_versions_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudKubernetesAvailableClusterVersionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccKubernetesAvailableClusterVersionsDataSource_basic, defaultTkeClusterId), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_available_cluster_versions.id"), - resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.id", "versions.#"), - resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.id", "clusters.#"), - ), - }, - { - Config: fmt.Sprintf(testAccKubernetesAvailableClusterVersionsDataSource_multiple, defaultTkeClusterId), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_available_cluster_versions.ids"), - resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.ids", "clusters.#"), - resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_available_cluster_versions.ids", "clusters.0.cluster_id", defaultTkeClusterId), - ), - }, - }, - }) -} - -const testAccKubernetesAvailableClusterVersionsDataSource_basic = ` - -data "tencentcloud_kubernetes_available_cluster_versions" "id" { - cluster_id = "%s" -} - -output "versions"{ - value = data.tencentcloud_kubernetes_available_cluster_versions.id.versions -} - -` - -const testAccKubernetesAvailableClusterVersionsDataSource_multiple = ` - -data "tencentcloud_kubernetes_available_cluster_versions" "ids" { - cluster_ids = ["%s"] -} - -` diff --git a/tencentcloud/data_source_tc_kubernetes_charts_test.go b/tencentcloud/data_source_tc_kubernetes_charts_test.go deleted file mode 100644 index ef177f8276..0000000000 --- a/tencentcloud/data_source_tc_kubernetes_charts_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudKubernetesChartsDataSource(t *testing.T) { - t.Parallel() - dataSourceName := "data.tencentcloud_kubernetes_charts.test" - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceKubernetesCharts, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet(dataSourceName, "chart_list.#"), - ), - }, - }, - }) -} - -const testAccDataSourceKubernetesCharts = ` -data "tencentcloud_kubernetes_charts" "test" { -} -` diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_authentication_options_test.go b/tencentcloud/data_source_tc_kubernetes_cluster_authentication_options_test.go deleted file mode 100644 index 05c7f94f31..0000000000 --- a/tencentcloud/data_source_tc_kubernetes_cluster_authentication_options_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudKubernetesClusterAuthenticationOptionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccKubernetesClusterAuthenticationOptionsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_authentication_options.cluster_authentication_options")), - }, - }, - }) -} - -const testAccKubernetesClusterAuthenticationOptionsDataSource = ` - -data "tencentcloud_kubernetes_cluster_authentication_options" "cluster_authentication_options" { - cluster_id = "cls-kzilgv5m" -} - -` diff --git a/tencentcloud/data_source_tc_monitor_grafana_plugin_overviews.go b/tencentcloud/data_source_tc_monitor_grafana_plugin_overviews.go deleted file mode 100644 index 50308c6c12..0000000000 --- a/tencentcloud/data_source_tc_monitor_grafana_plugin_overviews.go +++ /dev/null @@ -1,99 +0,0 @@ -package tencentcloud - -import ( - "context" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func dataSourceTencentCloudMonitorGrafanaPluginOverviews() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead, - Schema: map[string]*schema.Schema{ - "plugin_set": { - Computed: true, - Type: schema.TypeList, - Description: "Plugin set.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "plugin_id": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana plugin ID.", - }, - "version": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana plugin version.", - }, - }, - }, - }, - - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_monitor_grafana_plugin_overviews.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - paramMap := make(map[string]interface{}) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - var pluginSet []*monitor.GrafanaPlugin - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeMonitorGrafanaPluginOverviewsByFilter(ctx, paramMap) - if e != nil { - return retryError(e) - } - pluginSet = result - return nil - }) - if err != nil { - return err - } - - ids := make([]string, 0, len(pluginSet)) - tmpList := make([]map[string]interface{}, 0, len(pluginSet)) - - if pluginSet != nil { - for _, grafanaPlugin := range pluginSet { - grafanaPluginMap := map[string]interface{}{} - - if grafanaPlugin.PluginId != nil { - grafanaPluginMap["plugin_id"] = grafanaPlugin.PluginId - } - - if grafanaPlugin.Version != nil { - grafanaPluginMap["version"] = grafanaPlugin.Version - } - - ids = append(ids, *grafanaPlugin.PluginId) - tmpList = append(tmpList, grafanaPluginMap) - } - - _ = d.Set("plugin_set", tmpList) - } - - d.SetId(helper.DataResourceIdsHash(ids)) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { - return e - } - } - return nil -} diff --git a/tencentcloud/data_source_tc_monitor_statistic_data_test.go b/tencentcloud/data_source_tc_monitor_statistic_data_test.go deleted file mode 100644 index 121f8f5d73..0000000000 --- a/tencentcloud/data_source_tc_monitor_statistic_data_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixMonitorStatisticDataDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccMonitorStatisticDataDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_statistic_data.statistic_data"), - ), - }, - }, - }) -} - -const testAccMonitorStatisticDataDataSource = ` - -data "tencentcloud_monitor_statistic_data" "statistic_data" { - module = "monitor" - namespace = "QCE/TKE2" - metric_names = ["cpu_usage"] - conditions { - key = "tke_cluster_instance_id" - operator = "=" - value = ["cls-mw2w40s7"] - } -} - -` diff --git a/tencentcloud/data_source_tc_nat_dc_route_test.go b/tencentcloud/data_source_tc_nat_dc_route_test.go deleted file mode 100644 index 15da218eb8..0000000000 --- a/tencentcloud/data_source_tc_nat_dc_route_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixNatDcRouteDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccNatDcRouteDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_nat_dc_route.nat_dc_route")), - }, - }, - }) -} - -const testAccNatDcRouteDataSource = ` - -data "tencentcloud_nat_dc_route" "nat_dc_route" { - nat_gateway_id = "nat-gnxkey2e" - vpc_id = "vpc-pyyv5k3v" -} -` diff --git a/tencentcloud/data_source_tc_organization_members_test.go b/tencentcloud/data_source_tc_organization_members_test.go deleted file mode 100644 index 8f50c36577..0000000000 --- a/tencentcloud/data_source_tc_organization_members_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudOrganizationMembersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccOrganizationMembersDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_organization_members.members")), - }, - }, - }) -} - -const testAccOrganizationMembersDataSource = ` - -data "tencentcloud_organization_members" "members" {} - -` diff --git a/tencentcloud/data_source_tc_organization_org_auth_node_test.go b/tencentcloud/data_source_tc_organization_org_auth_node_test.go deleted file mode 100644 index c69e560b70..0000000000 --- a/tencentcloud/data_source_tc_organization_org_auth_node_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudOrganizationOrgAuthNodeDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccOrganizationOrgAuthNodeDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_auth_node.org_auth_node")), - }, - }, - }) -} - -const testAccOrganizationOrgAuthNodeDataSource = ` - -data "tencentcloud_organization_org_auth_node" "org_auth_node" { - } - -` diff --git a/tencentcloud/data_source_tc_organization_org_financial_by_member_test.go b/tencentcloud/data_source_tc_organization_org_financial_by_member_test.go deleted file mode 100644 index 627c01b75c..0000000000 --- a/tencentcloud/data_source_tc_organization_org_financial_by_member_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudOrganizationOrgFinancialByMemberDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccOrganizationOrgFinancialByMemberDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_member.org_financial_by_member")), - }, - }, - }) -} - -const testAccOrganizationOrgFinancialByMemberDataSource = ` - -data "tencentcloud_organization_org_financial_by_member" "org_financial_by_member" { - month = "2023-05" - end_month = "2023-10" - member_uins = [100015591986,100029796005] - } - -` diff --git a/tencentcloud/data_source_tc_organization_org_financial_by_month_test.go b/tencentcloud/data_source_tc_organization_org_financial_by_month_test.go deleted file mode 100644 index c4e2a631b7..0000000000 --- a/tencentcloud/data_source_tc_organization_org_financial_by_month_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudOrganizationOrgFinancialByMonthDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccOrganizationOrgFinancialByMonthDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month"), - resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "end_month", "2023-05"), - resource.TestCheckResourceAttrSet("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "member_uins.#"), - resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "member_uins.0", "100026517717"), - ), - }, - }, - }) -} - -const testAccOrganizationOrgFinancialByMonthDataSource = ` - -data "tencentcloud_organization_org_financial_by_month" "org_financial_by_month" { - end_month = "2023-05" - member_uins = [100026517717] - } - -` diff --git a/tencentcloud/data_source_tc_route_table_test.go b/tencentcloud/data_source_tc_route_table_test.go deleted file mode 100644 index 815b6dff92..0000000000 --- a/tencentcloud/data_source_tc_route_table_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func init() { - resource.AddTestSweepers("tencentcloud_route_table", &resource.Sweeper{ - Name: "tencentcloud_route_table", - F: testSweepRouteTable, - }) -} - -func testSweepRouteTable(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sharedClient, err := sharedClientForRegion(region) - if err != nil { - return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) - } - client := sharedClient.(*TencentCloudClient) - - vpcService := VpcService{ - client: client.apiV3Conn, - } - - instances, err := vpcService.DescribeRouteTables(ctx, "", "", "", nil, nil, "") - if err != nil { - return fmt.Errorf("get instance list error: %s", err.Error()) - } - - for _, v := range instances { - - instanceId := v.routeTableId - instanceName := v.name - now := time.Now() - createTime := stringTotime(v.createTime) - interval := now.Sub(createTime).Minutes() - - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { - continue - } - - if needProtect == 1 && int64(interval) < 30 { - continue - } - - if err = vpcService.DeleteRouteTable(ctx, instanceId); err != nil { - log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error()) - } - } - - return nil -} - -func TestAccDataSourceTencentCloudRouteTable_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceTencentCloudRouteTableConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("data.tencentcloud_route_table.foo", "name", "tf-ci-test"), - ), - }, - }, - }) -} - -const testAccDataSourceTencentCloudRouteTableConfig = ` -variable "availability_zone" { - default = "ap-guangzhou-3" -} - -resource "tencentcloud_vpc" "foo" { - name = "tf-ci-test" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_route_table" "route_table" { - vpc_id = tencentcloud_vpc.foo.id - name = "tf-ci-test" -} - -data "tencentcloud_route_table" "foo" { - route_table_id = tencentcloud_route_table.route_table.id -} -` diff --git a/tencentcloud/data_source_tc_scf_account_info_test.go b/tencentcloud/data_source_tc_scf_account_info_test.go deleted file mode 100644 index 075f077619..0000000000 --- a/tencentcloud/data_source_tc_scf_account_info_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfAccountInfoDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfAccountInfoDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_account_info.account_info")), - }, - }, - }) -} - -const testAccScfAccountInfoDataSource = ` - -data "tencentcloud_scf_account_info" "account_info" {} - -` diff --git a/tencentcloud/data_source_tc_scf_async_event_management_test.go b/tencentcloud/data_source_tc_scf_async_event_management_test.go deleted file mode 100644 index 9e7e020eaa..0000000000 --- a/tencentcloud/data_source_tc_scf_async_event_management_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfAsyncEventManagementDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfAsyncEventManagementDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_async_event_management.async_event_management")), - }, - }, - }) -} - -const testAccScfAsyncEventManagementDataSource = ` - -data "tencentcloud_scf_async_event_management" "async_event_management" { - function_name = "keep-1676351130" - namespace = "default" - qualifier = "$LATEST" - order = "ASC" - orderby = "StartTime" -} - -` diff --git a/tencentcloud/data_source_tc_scf_async_event_status_test.go b/tencentcloud/data_source_tc_scf_async_event_status_test.go deleted file mode 100644 index 4720517b3c..0000000000 --- a/tencentcloud/data_source_tc_scf_async_event_status_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixScfAsyncEventStatusDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfAsyncEventStatusDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_async_event_status.async_event_status")), - }, - }, - }) -} - -const testAccScfAsyncEventStatusDataSource = ` - -data "tencentcloud_scf_async_event_status" "async_event_status" { - invoke_request_id = "9de9405a-e33a-498d-bb59-e80b7bed1191" -} - -` diff --git a/tencentcloud/data_source_tc_scf_function_address_test.go b/tencentcloud/data_source_tc_scf_function_address_test.go deleted file mode 100644 index d851241b8d..0000000000 --- a/tencentcloud/data_source_tc_scf_function_address_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfFunctionAddressDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfFunctionAddressDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_address.function_address")), - }, - }, - }) -} - -const testAccScfFunctionAddressDataSource = ` - -data "tencentcloud_scf_function_address" "function_address" { - function_name = "keep-1676351130" - namespace = "default" - qualifier = "$LATEST" -} - -` diff --git a/tencentcloud/data_source_tc_scf_function_aliases_test.go b/tencentcloud/data_source_tc_scf_function_aliases_test.go deleted file mode 100644 index 70ba46f72b..0000000000 --- a/tencentcloud/data_source_tc_scf_function_aliases_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfFunctionAliasesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfFunctionAliasesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_aliases.function_aliases")), - }, - }, - }) -} - -const testAccScfFunctionAliasesDataSource = ` - -data "tencentcloud_scf_function_aliases" "function_aliases" { - function_name = "keep-1676351130" - namespace = "default" -} - -` diff --git a/tencentcloud/data_source_tc_scf_function_versions_test.go b/tencentcloud/data_source_tc_scf_function_versions_test.go deleted file mode 100644 index 1536464746..0000000000 --- a/tencentcloud/data_source_tc_scf_function_versions_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfFunctionVersionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfFunctionVersionsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_versions.function_versions")), - }, - }, - }) -} - -const testAccScfFunctionVersionsDataSource = ` - -data "tencentcloud_scf_function_versions" "function_versions" { - function_name = "keep-1676351130" - namespace = "default" -} - -` diff --git a/tencentcloud/data_source_tc_scf_layer_versions_test.go b/tencentcloud/data_source_tc_scf_layer_versions_test.go deleted file mode 100644 index 7b086fedf5..0000000000 --- a/tencentcloud/data_source_tc_scf_layer_versions_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixScfLayerVersionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfLayerVersionsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_layer_versions.layer_versions")), - }, - }, - }) -} - -const testAccScfLayerVersionsDataSource = ` - -data "tencentcloud_scf_layer_versions" "layer_versions" { - layer_name = "tf-test" -} - -` diff --git a/tencentcloud/data_source_tc_scf_layers_test.go b/tencentcloud/data_source_tc_scf_layers_test.go deleted file mode 100644 index 32795520ed..0000000000 --- a/tencentcloud/data_source_tc_scf_layers_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfLayersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfLayersDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_layers.layers")), - }, - }, - }) -} - -const testAccScfLayersDataSource = ` - -data "tencentcloud_scf_layers" "layers" {} -` diff --git a/tencentcloud/data_source_tc_scf_request_status_test.go b/tencentcloud/data_source_tc_scf_request_status_test.go deleted file mode 100644 index 7abc9991c6..0000000000 --- a/tencentcloud/data_source_tc_scf_request_status_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfRequestStatusDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfRequestStatusDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_request_status.request_status")), - }, - }, - }) -} - -const testAccScfRequestStatusDataSource = ` - -data "tencentcloud_scf_request_status" "request_status" { - function_name = "keep-1676351130" - function_request_id = "9de9405a-e33a-498d-bb59-e80b7bed1191" - namespace = "default" -} - -` diff --git a/tencentcloud/data_source_tc_scf_triggers_test.go b/tencentcloud/data_source_tc_scf_triggers_test.go deleted file mode 100644 index aed8c68b1e..0000000000 --- a/tencentcloud/data_source_tc_scf_triggers_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudScfTriggersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccScfTriggersDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_triggers.triggers")), - }, - }, - }) -} - -const testAccScfTriggersDataSource = ` - -data "tencentcloud_scf_triggers" "triggers" { - function_name = "keep-1676351130" - namespace = "default" - order_by = "add_time" - order = "DESC" -} - -` diff --git a/tencentcloud/data_source_tc_ses_black_email_address_test.go b/tencentcloud/data_source_tc_ses_black_email_address_test.go deleted file mode 100644 index 3c92685313..0000000000 --- a/tencentcloud/data_source_tc_ses_black_email_address_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -test.run TestAccTencentCloudSesBlackEmailAddressDataSource_basic -v -func TestAccTencentCloudSesBlackEmailAddressDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSesBlackEmailAddressDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_black_email_address.black_email_address"), - resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.#"), - resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.0.bounce_time"), - resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.0.email_address"), - ), - }, - }, - }) -} - -const testAccSesBlackEmailAddressDataSource = ` - -data "tencentcloud_ses_black_email_address" "black_email_address" { - start_date = "2020-09-22" - end_date = "2023-09-23" - email_address = "terraform-tf@gmail.com" -} - -` diff --git a/tencentcloud/data_source_tc_sqlserver_backup_by_flow_id_test.go b/tencentcloud/data_source_tc_sqlserver_backup_by_flow_id_test.go deleted file mode 100644 index 0df78b0027..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_backup_by_flow_id_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverBackupByFlowIdDataSource_basic -v -func TestAccTencentCloudSqlserverBackupByFlowIdDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckSqlserverGeneralBackupDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverBackupByFlowIdDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_backup_by_flow_id.example"), - ), - }, - }, - }) -} - -const testAccSqlserverBackupByFlowIdDataSource = testAccSqlserverGeneralBackup + ` -data "tencentcloud_sqlserver_backup_by_flow_id" "example" { - instance_id = tencentcloud_sqlserver_general_backup.example.instance_id - flow_id = tencentcloud_sqlserver_general_backup.example.flow_id -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_backup_upload_size_test.go b/tencentcloud/data_source_tc_sqlserver_backup_upload_size_test.go deleted file mode 100644 index 516381eb82..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_backup_upload_size_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverBackupUploadSizeDataSource_basic -v -func TestAccTencentCloudSqlserverBackupUploadSizeDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverBackupUploadSizeDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_backup_upload_size.backup_upload_size"), - ), - }, - }, - }) -} - -const testAccSqlserverBackupUploadSizeDataSource = ` -data "tencentcloud_sqlserver_backup_upload_size" "example" { - instance_id = "mssql-4gmc5805" - backup_migration_id = "mssql-backup-migration-9tj0sxnz" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_backups.go b/tencentcloud/data_source_tc_sqlserver_backups.go deleted file mode 100644 index 98f689ff65..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_backups.go +++ /dev/null @@ -1,248 +0,0 @@ -/* -Use this data source to query the list of SQL Server backups. - -Example Usage - -```hcl -data "tencentcloud_availability_zones_by_product" "zones" { - product = "sqlserver" -} - -data "tencentcloud_sqlserver_backups" "example" { - instance_id = tencentcloud_sqlserver_general_backup.example.instance_id - start_time = "2023-08-01 00:00:00" - end_time = "2023-08-07 00:00:00" -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name - name = "subnet-example" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_security_group" "security_group" { - name = "sg-example" - description = "desc." -} - -resource "tencentcloud_sqlserver_basic_instance" "example" { - name = "tf-example" - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name - charge_type = "POSTPAID_BY_HOUR" - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - project_id = 0 - memory = 4 - storage = 100 - cpu = 2 - machine_type = "CLOUD_PREMIUM" - maintenance_week_set = [1, 2, 3] - maintenance_start_time = "09:00" - maintenance_time_span = 3 - security_groups = [tencentcloud_security_group.security_group.id] - - tags = { - "test" = "test" - } -} - -resource "tencentcloud_sqlserver_db" "example" { - instance_id = tencentcloud_sqlserver_basic_instance.example.id - name = "tf_example_db" - charset = "Chinese_PRC_BIN" - remark = "test-remark" -} - -resource "tencentcloud_sqlserver_general_backup" "example" { - instance_id = tencentcloud_sqlserver_db.example.instance_id - backup_name = "tf_example_backup" - strategy = 0 -} -``` - -Filter by backup name - -```hcl -data "tencentcloud_sqlserver_backups" "example" { - instance_id = tencentcloud_sqlserver_general_backup.example.instance_id - start_time = "2023-08-01 00:00:00" - end_time = "2023-08-07 00:00:00" - backup_name = "tf-example-backup" -} -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func dataSourceTencentCloudSqlserverBackups() *schema.Resource { - - return &schema.Resource{ - Read: dataSourceTencentSqlserverBackupsRead, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Instance ID.", - }, - "backup_name": { - Type: schema.TypeString, - Optional: true, - Description: "Filter by backup name, do not filter if left blank.", - }, - "start_time": { - Type: schema.TypeString, - Required: true, - Description: "Start time of the instance list, like yyyy-MM-dd HH:mm:ss.", - }, - "end_time": { - Type: schema.TypeString, - Required: true, - Description: "End time of the instance list, like yyyy-MM-dd HH:mm:ss.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to store results.", - }, - // Computed values - "list": { - Type: schema.TypeList, - Computed: true, - Description: "A list of SQL Server backup. Each element contains the following attributes:", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - Description: "ID of the backup.", - }, - "instance_id": { - Type: schema.TypeString, - Computed: true, - Description: "Instance ID.", - }, - "file_name": { - Type: schema.TypeString, - Computed: true, - Description: "File name of the backup.", - }, - "start_time": { - Type: schema.TypeString, - Computed: true, - Description: "Start time of the backup.", - }, - "end_time": { - Type: schema.TypeString, - Computed: true, - Description: "End time of the backup.", - }, - "db_list": { - Type: schema.TypeList, - Elem: &schema.Schema{Type: schema.TypeString}, - Computed: true, - Description: "Database name list of the backup.", - }, - "strategy": { - Type: schema.TypeInt, - Computed: true, - Description: "Strategy of the backup. `0` for instance backup, `1` for multi-databases backup.", - }, - "trigger_model": { - Type: schema.TypeInt, - Computed: true, - Description: "The way to trigger backup. `0` for timed trigger, `1` for manual trigger.", - }, - "status": { - Type: schema.TypeInt, - Computed: true, - Description: "Status of the backup. `1` for creating, `2` for successfully created, 3 for failed.", - }, - "size": { - Type: schema.TypeInt, - Computed: true, - Description: "The size of backup file. Unit is KB.", - }, - "intranet_url": { - Type: schema.TypeString, - Computed: true, - Description: "URL for downloads internally.", - }, - "internet_url": { - Type: schema.TypeString, - Computed: true, - Description: "URL for downloads externally.", - }, - }, - }, - }, - }, - } -} - -func dataSourceTencentSqlserverBackupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_backups.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - instanceId := d.Get("instance_id").(string) - backupName := d.Get("backup_name").(string) - startTime := d.Get("start_time").(string) - endTime := d.Get("end_time").(string) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - backInfoItems, err := sqlserverService.DescribeSqlserverBackups(ctx, instanceId, backupName, startTime, endTime) - - if err != nil { - return fmt.Errorf("api[DescribeBackups]fail, return %s", err.Error()) - } - - var list []map[string]interface{} - var ids = make([]string, len(backInfoItems)) - - for _, item := range backInfoItems { - mapping := map[string]interface{}{ - "start_time": item.StartTime, - "end_time": item.EndTime, - "size": item.Size, - "trigger_model": item.BackupWay, - "intranet_url": item.InternalAddr, - "internet_url": item.ExternalAddr, - "status": item.Status, - "file_name": item.FileName, - "instance_id": instanceId, - "id": strconv.Itoa(int(*item.Id)), - "db_list": helper.StringsInterfaces(item.DBs), - } - list = append(list, mapping) - ids = append(ids, fmt.Sprintf("%d", *item.Id)) - } - - d.SetId(helper.DataResourceIdsHash(ids)) - if e := d.Set("list", list); e != nil { - log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error()) - return e - } - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - return writeToFile(output.(string), list) - } - - return nil -} diff --git a/tencentcloud/data_source_tc_sqlserver_basic_instances_test.go b/tencentcloud/data_source_tc_sqlserver_basic_instances_test.go deleted file mode 100644 index 1da7409d54..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_basic_instances_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testDataSqlserverBasicInstancesName = "data.tencentcloud_sqlserver_basic_instances.id_test" - -// go test -i; go test -test.run TestAccDataSourceTencentCloudSqlserverBasicInstances -v -func TestAccDataSourceTencentCloudSqlserverBasicInstances(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckSqlserverBasicInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataSqlserverBasicInstancesBasic, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet(testDataSqlserverBasicInstancesName, "name"), - resource.TestCheckResourceAttrSet(testDataSqlserverBasicInstancesName, "instance_list.#"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataSqlserverBasicInstancesBasic = testAccSqlserverAZ + ` -data "tencentcloud_sqlserver_basic_instances" "id_test"{ - name = "keep" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_cross_region_zone.go b/tencentcloud/data_source_tc_sqlserver_cross_region_zone.go deleted file mode 100644 index 21f1294dec..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_cross_region_zone.go +++ /dev/null @@ -1,90 +0,0 @@ -package tencentcloud - -import ( - "context" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func dataSourceTencentCloudSqlserverCrossRegionZone() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudSqlserverCrossRegionZoneRead, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID in the format of mssql-j8kv137v.", - }, - "region": { - Computed: true, - Type: schema.TypeString, - Description: "The string ID of the region where the standby machine is located, such as: ap-guangzhou.", - }, - "zone": { - Computed: true, - Type: schema.TypeString, - Description: "The string ID of the availability zone where the standby machine is located, such as: ap-guangzhou-1.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudSqlserverCrossRegionZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_cross_region_zone.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - crossRegion *sqlserver.DescribeCrossRegionZoneResponseParams - instanceId string - ) - - paramMap := make(map[string]interface{}) - if v, ok := d.GetOk("instance_id"); ok { - paramMap["InstanceId"] = helper.String(v.(string)) - instanceId = v.(string) - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeSqlserverCrossRegionZoneByFilter(ctx, paramMap) - if e != nil { - return retryError(e) - } - - crossRegion = result - return nil - }) - - if err != nil { - return err - } - - if crossRegion.Region != nil { - _ = d.Set("region", crossRegion.Region) - } - - if crossRegion.Zone != nil { - _ = d.Set("zone", crossRegion.Zone) - } - - d.SetId(instanceId) - - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { - return e - } - } - - return nil -} diff --git a/tencentcloud/data_source_tc_sqlserver_cross_region_zone_test.go b/tencentcloud/data_source_tc_sqlserver_cross_region_zone_test.go deleted file mode 100644 index a6a809c3fa..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_cross_region_zone_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverCrossRegionZoneDataSource_basic -v -func TestAccTencentCloudSqlserverCrossRegionZoneDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverCrossRegionZoneDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_cross_region_zone.example")), - }, - }, - }) -} - -const testAccSqlserverCrossRegionZoneDataSource = ` -data "tencentcloud_sqlserver_cross_region_zone" "example" { - instance_id = "mssql-qelbzgwf" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_db_charsets.go b/tencentcloud/data_source_tc_sqlserver_db_charsets.go deleted file mode 100644 index a421b2a2db..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_db_charsets.go +++ /dev/null @@ -1,79 +0,0 @@ -package tencentcloud - -import ( - "context" - - "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 dataSourceTencentCloudSqlserverDBCharsets() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudSqlserverDBCharsetsRead, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID in the format of mssql-j8kv137v.", - }, - "database_charsets": { - Computed: true, - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "Database character set list.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudSqlserverDBCharsetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_db_charsets.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId string - databaseCharsets []*string - ) - - paramMap := make(map[string]interface{}) - if v, ok := d.GetOk("instance_id"); ok { - paramMap["InstanceId"] = helper.String(v.(string)) - instanceId = v.(string) - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeSqlserverDatasourceDBCharsetsByFilter(ctx, paramMap) - if e != nil { - return retryError(e) - } - - databaseCharsets = result - return nil - }) - - if err != nil { - return err - } - - if databaseCharsets != nil { - _ = d.Set("database_charsets", databaseCharsets) - } - - d.SetId(instanceId) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { - return e - } - } - return nil -} diff --git a/tencentcloud/data_source_tc_sqlserver_db_charsets_test.go b/tencentcloud/data_source_tc_sqlserver_db_charsets_test.go deleted file mode 100644 index c2b8fcfb37..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_db_charsets_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverDBCharsetsDataSource_basic -v -func TestAccTencentCloudSqlserverDBCharsetsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverDBCharsetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_db_charsets.example")), - }, - }, - }) -} - -const testAccSqlserverDBCharsetsDataSource = ` -data "tencentcloud_sqlserver_db_charsets" "example" { - instance_id = "mssql-qelbzgwf" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_dbs_test.go b/tencentcloud/data_source_tc_sqlserver_dbs_test.go deleted file mode 100644 index 4ed40b58be..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_dbs_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccDataSourceTencentCloudSqlserverDBs_basic -v -func TestAccDataSourceTencentCloudSqlserverDBs_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: TestAccDataSourceTencentCloudSqlserverDB, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_dbs.foo"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "instance_id"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.name"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.charset"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.remark"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.create_time"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.status"), - ), - }, - }, - }) -} - -const TestAccDataSourceTencentCloudSqlserverDB = CommonPresetSQLServer + ` -data "tencentcloud_sqlserver_dbs" "foo" { - instance_id = local.sqlserver_id -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_ins_attribute_test.go b/tencentcloud/data_source_tc_sqlserver_ins_attribute_test.go deleted file mode 100644 index 49af62c8af..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_ins_attribute_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverInsAttributeDataSource_basic -v -func TestAccTencentCloudSqlserverInsAttributeDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverDatasourceInsAttributeDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_ins_attribute.example"), - resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_ins_attribute.example", "instance_id"), - ), - }, - }, - }) -} - -const testAccSqlserverDatasourceInsAttributeDataSource = ` -data "tencentcloud_sqlserver_ins_attribute" "example" { - instance_id = "mssql-gyg9xycl" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_instance_param_records_test.go b/tencentcloud/data_source_tc_sqlserver_instance_param_records_test.go deleted file mode 100644 index 0195833a26..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_instance_param_records_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverInstanceParamRecordsDataSource_basic -v -func TestAccTencentCloudSqlserverInstanceParamRecordsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverInstanceParamRecordsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_instance_param_records.example")), - }, - }, - }) -} - -const testAccSqlserverInstanceParamRecordsDataSource = ` -data "tencentcloud_sqlserver_instance_param_records" "example" { - instance_id = "mssql-qelbzgwf" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_project_security_groups_test.go b/tencentcloud/data_source_tc_sqlserver_project_security_groups_test.go deleted file mode 100644 index 0f26649093..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_project_security_groups_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverProjectSecurityGroupsDataSource_basic -v -func TestAccTencentCloudSqlserverProjectSecurityGroupsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverProjectSecurityGroupsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_project_security_groups.example")), - }, - }, - }) -} - -const testAccSqlserverProjectSecurityGroupsDataSource = ` -data "tencentcloud_sqlserver_project_security_groups" "example" { - project_id = 0 -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_regions_test.go b/tencentcloud/data_source_tc_sqlserver_regions_test.go deleted file mode 100644 index 76e96f6a9a..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_regions_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverRegionsDataSource_basic -v -func TestAccTencentCloudSqlserverRegionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverRegionsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_regions.example")), - }, - }, - }) -} - -const testAccSqlserverRegionsDataSource = ` -data "tencentcloud_sqlserver_regions" "example" {} -` diff --git a/tencentcloud/data_source_tc_sqlserver_rollback_time_test.go b/tencentcloud/data_source_tc_sqlserver_rollback_time_test.go deleted file mode 100644 index 609393f8d7..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_rollback_time_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverRollbackTimeDataSource_basic -v -func TestAccTencentCloudSqlserverRollbackTimeDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverRollbackTimeDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_rollback_time.example")), - }, - }, - }) -} - -const testAccSqlserverRollbackTimeDataSource = ` -data "tencentcloud_sqlserver_rollback_time" "example" { - instance_id = "mssql-qelbzgwf" - dbs = ["keep_pubsub_db"] -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_slowlogs_test.go b/tencentcloud/data_source_tc_sqlserver_slowlogs_test.go deleted file mode 100644 index fc2ad6b974..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_slowlogs_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverSlowlogsDataSource_basic -v -func TestAccTencentCloudSqlserverSlowlogsDataSource_basic(t *testing.T) { - t.Parallel() - loc, _ := time.LoadLocation("Asia/Chongqing") - startTime := time.Now().AddDate(0, 0, -7).In(loc).Format("2006-01-02 15:04:05") - endTime := time.Now().AddDate(0, 0, 1).In(loc).Format("2006-01-02 15:04:05") - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccSqlserverSlowlogsDataSource, startTime, endTime), - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_slowlogs.example")), - }, - }, - }) -} - -const testAccSqlserverSlowlogsDataSource = ` -data "tencentcloud_sqlserver_slowlogs" "example" { - instance_id = "mssql-qelbzgwf" - start_time = "%s" - end_time = "%s" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_upload_backup_info_test.go b/tencentcloud/data_source_tc_sqlserver_upload_backup_info_test.go deleted file mode 100644 index 7e3f444653..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_upload_backup_info_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverUploadBackupInfoDataSource_basic -v -func TestAccTencentCloudSqlserverUploadBackupInfoDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverUploadBackupInfoDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_upload_backup_info.example")), - }, - }, - }) -} - -const testAccSqlserverUploadBackupInfoDataSource = ` -data "tencentcloud_sqlserver_upload_backup_info" "example" { - instance_id = "mssql-qelbzgwf" - backup_migration_id = "mssql-backup-migration-8a0f3eht" -} -` diff --git a/tencentcloud/data_source_tc_sqlserver_upload_incremental_info_test.go b/tencentcloud/data_source_tc_sqlserver_upload_incremental_info_test.go deleted file mode 100644 index 2f3582f843..0000000000 --- a/tencentcloud/data_source_tc_sqlserver_upload_incremental_info_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSqlserverUploadIncrementalInfoDataSource_basic -v -func TestAccTencentCloudSqlserverUploadIncrementalInfoDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckSqlserverIncreBackupMigrationDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverUploadIncrementalInfoDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_upload_incremental_info.example")), - }, - }, - }) -} - -const testAccSqlserverUploadIncrementalInfoDataSource = ` -data "tencentcloud_sqlserver_upload_incremental_info" "example" { - instance_id = "mssql-4tgeyeeh" - backup_migration_id = "mssql-backup-migration-83t5u3tv" - incremental_migration_id = "mssql-incremental-migration-h36gkdxn" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_certificate_test.go b/tencentcloud/data_source_tc_ssl_describe_certificate_test.go deleted file mode 100644 index 8876358a2b..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_certificate_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeCertificateDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeCertificateDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_certificate.describe_certificate"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_certificate.describe_certificate", "certificate_id", "8mCN3eKd")), - }, - }, - }) -} - -const testAccSslDescribeCertificateDataSource = ` - -data "tencentcloud_ssl_describe_certificate" "describe_certificate" { - certificate_id = "8mCN3eKd" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_companies_test.go b/tencentcloud/data_source_tc_ssl_describe_companies_test.go deleted file mode 100644 index d55d3eaa6b..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_companies_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeCompaniesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeCompaniesDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_companies.describe_companies"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_companies.describe_companies", "company_id", "122"), - ), - }, - }, - }) -} - -const testAccSslDescribeCompaniesDataSource = ` - -data "tencentcloud_ssl_describe_companies" "describe_companies" { - company_id = 122 -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go deleted file mode 100644 index 84bb81b475..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostApiGatewayInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccStepSetRegion(t, "ap-nanjing") - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostApiGatewayInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list", "certificate_id", "9Bpk7XOu"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list", "resource_type", "apiGateway"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostApiGatewayInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_api_gateway_instance_list" "describe_host_api_gateway_instance_list" { - certificate_id = "9Bpk7XOu" - resource_type = "apiGateway" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list_test.go deleted file mode 100644 index c7adf9efd8..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostCdnInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostCdnInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list", "certificate_id", "8mCN3eKd"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list", "resource_type", "cdn"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostCdnInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_cdn_instance_list" "describe_host_cdn_instance_list" { - certificate_id = "8mCN3eKd" - resource_type = "cdn" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list_test.go deleted file mode 100644 index 3f69ae4975..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostClbInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostClbInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_clb_instance_list.describe_host_clb_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_clb_instance_list.describe_host_clb_instance_list", "certificate_id", "9Bpk7XOu"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostClbInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_clb_instance_list" "describe_host_clb_instance_list" { - certificate_id = "9Bpk7XOu" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list_test.go deleted file mode 100644 index 70c682f6a1..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostCosInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostCosInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list", "certificate_id", "8mCN3eKd"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list", "resource_type", "cos"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostCosInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_cos_instance_list" "describe_host_cos_instance_list" { - certificate_id = "8mCN3eKd" - resource_type = "cos" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list_test.go deleted file mode 100644 index ddf5705a28..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostDdosInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostDdosInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list", "certificate_id", "8mCN3eKd"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list", "resource_type", "ddos"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostDdosInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_ddos_instance_list" "describe_host_ddos_instance_list" { - certificate_id = "8mCN3eKd" - resource_type = "ddos" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_detail_test.go b/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_detail_test.go deleted file mode 100644 index cade0a9a53..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_detail_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostDeployRecordDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostDeployRecordDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_deploy_record_detail.describe_host_deploy_record_detail"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record_detail.describe_host_deploy_record_detail", "deploy_record_id", "35364"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostDeployRecordDetailDataSource = ` - -data "tencentcloud_ssl_describe_host_deploy_record_detail" "describe_host_deploy_record_detail" { - deploy_record_id = "35364" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_test.go b/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_test.go deleted file mode 100644 index b56b576cec..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostDeployRecordDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostDeployRecordDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record", "certificate_id", "9D3qRt7r"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record", "resource_type", "ddos"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostDeployRecordDataSource = ` - -data "tencentcloud_ssl_describe_host_deploy_record" "describe_host_deploy_record" { - certificate_id = "9D3qRt7r" - resource_type = "ddos" - } - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go deleted file mode 100644 index 72b4d68590..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostLighthouseInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostLighthouseInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list", "certificate_id", "9D3mK31W"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list", "resource_type", "lighthouse"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostLighthouseInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_lighthouse_instance_list" "describe_host_lighthouse_instance_list" { - certificate_id = "9D3mK31W" - resource_type = "lighthouse" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_live_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_live_instance_list_test.go deleted file mode 100644 index baeb54e455..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_live_instance_list_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostLiveInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostLiveInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list", "certificate_id", "9D3qRt7r"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list", "resource_type", "live"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostLiveInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_live_instance_list" "describe_host_live_instance_list" { - certificate_id = "9D3qRt7r" - resource_type = "live" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list_test.go deleted file mode 100644 index 0075dc0784..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostTeoInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostTeoInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list", "certificate_id", "9D3qRt7r"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list", "resource_type", "teo"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostTeoInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_teo_instance_list" "describe_host_teo_instance_list" { - certificate_id = "9D3qRt7r" - resource_type = "teo" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list_test.go deleted file mode 100644 index 0e1ebf18e4..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostTkeInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostTkeInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_tke_instance_list.describe_host_tke_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_tke_instance_list.describe_host_tke_instance_list", "certificate_id", "9D3qRt7r"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostTkeInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_tke_instance_list" "describe_host_tke_instance_list" { - certificate_id = "9D3qRt7r" -} -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_update_record_detail_test.go b/tencentcloud/data_source_tc_ssl_describe_host_update_record_detail_test.go deleted file mode 100644 index 8ebb680818..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_update_record_detail_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostUpdateRecordDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostUpdateRecordDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_update_record_detail.describe_host_update_record_detail"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_update_record_detail.describe_host_update_record_detail", "deploy_record_id", "1666"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostUpdateRecordDetailDataSource = ` - -data "tencentcloud_ssl_describe_host_update_record_detail" "describe_host_update_record_detail" { - deploy_record_id = "1666" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_update_record_test.go b/tencentcloud/data_source_tc_ssl_describe_host_update_record_test.go deleted file mode 100644 index 78b70790d6..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_update_record_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostUpdateRecordDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostUpdateRecordDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_update_record.describe_host_update_record"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_update_record.describe_host_update_record", "old_certificate_id", "9D3qRt7r"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostUpdateRecordDataSource = ` - -data "tencentcloud_ssl_describe_host_update_record" "describe_host_update_record" { - old_certificate_id = "9D3qRt7r" - } - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list_test.go deleted file mode 100644 index eadfd6ff6e..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostVodInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostVodInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list", "certificate_id", "9D3qRt7r"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list", "resource_type", "vod"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostVodInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_vod_instance_list" "describe_host_vod_instance_list" { - certificate_id = "9D3qRt7r" - resource_type = "vod" - } - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list_test.go b/tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list_test.go deleted file mode 100644 index 891dc9d72f..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeHostWafInstanceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeHostWafInstanceListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list", "certificate_id", "9D3qRt7r"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list", "resource_type", "waf"), - ), - }, - }, - }) -} - -const testAccSslDescribeHostWafInstanceListDataSource = ` - -data "tencentcloud_ssl_describe_host_waf_instance_list" "describe_host_waf_instance_list" { - certificate_id = "9D3qRt7r" - resource_type = "waf" - } - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_manager_detail_test.go b/tencentcloud/data_source_tc_ssl_describe_manager_detail_test.go deleted file mode 100644 index b06f654857..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_manager_detail_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeManagerDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeManagerDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_manager_detail.describe_manager_detail"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_manager_detail.describe_manager_detail", "manager_id", "12895"), - ), - }, - }, - }) -} - -const testAccSslDescribeManagerDetailDataSource = ` - -data "tencentcloud_ssl_describe_manager_detail" "describe_manager_detail" { - manager_id = "12895" -} - -` diff --git a/tencentcloud/data_source_tc_ssl_describe_managers_test.go b/tencentcloud/data_source_tc_ssl_describe_managers_test.go deleted file mode 100644 index 5d0f01aaf7..0000000000 --- a/tencentcloud/data_source_tc_ssl_describe_managers_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudSslDescribeManagersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSslDescribeManagersDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_managers.describe_managers"), - resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_managers.describe_managers", "company_id", "11772"), - ), - }, - }, - }) -} - -const testAccSslDescribeManagersDataSource = ` - -data "tencentcloud_ssl_describe_managers" "describe_managers" { - company_id = "11772" - } - -` diff --git a/tencentcloud/data_source_tc_ssm_products.go b/tencentcloud/data_source_tc_ssm_products.go deleted file mode 100644 index 748b36e194..0000000000 --- a/tencentcloud/data_source_tc_ssm_products.go +++ /dev/null @@ -1,68 +0,0 @@ -package tencentcloud - -import ( - "context" - - "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 dataSourceTencentCloudSsmProducts() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudSsmProductsRead, - Schema: map[string]*schema.Schema{ - "products": { - Computed: true, - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "List of supported services.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudSsmProductsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_products.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - products []*string - ) - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeSsmProductsByFilter(ctx) - if e != nil { - return retryError(e) - } - - products = result - return nil - }) - - if err != nil { - return err - } - - if products != nil { - _ = d.Set("products", products) - } - - d.SetId(helper.StrListToStr(products)) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), products); e != nil { - return e - } - } - - return nil -} diff --git a/tencentcloud/data_source_tc_ssm_products_test.go b/tencentcloud/data_source_tc_ssm_products_test.go deleted file mode 100644 index 67ccc9debb..0000000000 --- a/tencentcloud/data_source_tc_ssm_products_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSsmProductsDataSource_basic -v -func TestAccTencentCloudSsmProductsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSsmProductsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_products.products"), - ), - }, - }, - }) -} - -const testAccSsmProductsDataSource = ` -data "tencentcloud_ssm_products" "products" {} -` diff --git a/tencentcloud/data_source_tc_ssm_rotation_detail_test.go b/tencentcloud/data_source_tc_ssm_rotation_detail_test.go deleted file mode 100644 index 4cdefb1a8a..0000000000 --- a/tencentcloud/data_source_tc_ssm_rotation_detail_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixSsmRotationDetailDataSource_basic -v -func TestAccTencentCloudNeedFixSsmRotationDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSsmRotationDetailDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_rotation_detail.example"), - ), - }, - }, - }) -} - -const testAccSsmRotationDetailDataSource = ` -data "tencentcloud_ssm_rotation_detail" "example" { - secret_name = "tf_example" -} -` diff --git a/tencentcloud/data_source_tc_ssm_rotation_history.go b/tencentcloud/data_source_tc_ssm_rotation_history.go deleted file mode 100644 index 82cdf5de81..0000000000 --- a/tencentcloud/data_source_tc_ssm_rotation_history.go +++ /dev/null @@ -1,80 +0,0 @@ -package tencentcloud - -import ( - "context" - - "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 dataSourceTencentCloudSsmRotationHistory() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudSsmRotationHistoryRead, - Schema: map[string]*schema.Schema{ - "secret_name": { - Required: true, - Type: schema.TypeString, - Description: "Secret name.", - }, - "version_ids": { - Computed: true, - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "The number of version numbers. The maximum number of version numbers that can be displayed to users is 10.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudSsmRotationHistoryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_rotation_history.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - versionIDs []*string - secretName string - ) - - paramMap := make(map[string]interface{}) - if v, ok := d.GetOk("secret_name"); ok { - paramMap["SecretName"] = helper.String(v.(string)) - secretName = v.(string) - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeSsmRotationHistoryByFilter(ctx, paramMap) - if e != nil { - return retryError(e) - } - - versionIDs = result - return nil - }) - - if err != nil { - return err - } - - if versionIDs != nil { - _ = d.Set("version_ids", versionIDs) - } - - d.SetId(secretName) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { - return e - } - } - - return nil -} diff --git a/tencentcloud/data_source_tc_ssm_rotation_history_test.go b/tencentcloud/data_source_tc_ssm_rotation_history_test.go deleted file mode 100644 index 7866b1b594..0000000000 --- a/tencentcloud/data_source_tc_ssm_rotation_history_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixSsmRotationHistoryDataSource_basic -v -func TestAccTencentCloudNeedFixSsmRotationHistoryDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSsmRotationHistoryDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_rotation_history.example"), - ), - }, - }, - }) -} - -const testAccSsmRotationHistoryDataSource = ` -data "tencentcloud_ssm_rotation_history" "example" { - secret_name = "keep_terraform" -} -` diff --git a/tencentcloud/data_source_tc_ssm_service_status.go b/tencentcloud/data_source_tc_ssm_service_status.go deleted file mode 100644 index 07f35cc7a6..0000000000 --- a/tencentcloud/data_source_tc_ssm_service_status.go +++ /dev/null @@ -1,87 +0,0 @@ -package tencentcloud - -import ( - "context" - "strconv" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" -) - -func dataSourceTencentCloudSsmServiceStatus() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudSsmServiceStatusRead, - Schema: map[string]*schema.Schema{ - "service_enabled": { - Computed: true, - Type: schema.TypeBool, - Description: "True means the service has been activated, false means the service has not been activated yet.", - }, - "invalid_type": { - Computed: true, - Type: schema.TypeInt, - Description: "Service unavailability type: 0-Not purchased, 1-Normal, 2-Service suspended due to arrears, 3-Resource release.", - }, - "access_key_escrow_enabled": { - Computed: true, - Type: schema.TypeBool, - Description: "True means that the user can already use the key safe hosting function, false means that the user cannot use the key safe hosting function temporarily.", - }, - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudSsmServiceStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_service_status.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - serviceStatus *ssm.GetServiceStatusResponseParams - ) - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeSsmServiceStatusByFilter(ctx) - if e != nil { - return retryError(e) - } - - serviceStatus = result - return nil - }) - - if err != nil { - return err - } - - if serviceStatus.ServiceEnabled != nil { - _ = d.Set("service_enabled", serviceStatus.ServiceEnabled) - } - - if serviceStatus.InvalidType != nil { - _ = d.Set("invalid_type", serviceStatus.InvalidType) - } - - if serviceStatus.AccessKeyEscrowEnabled != nil { - _ = d.Set("access_key_escrow_enabled", serviceStatus.AccessKeyEscrowEnabled) - } - - d.SetId(strconv.FormatInt(time.Now().Unix(), 10)) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { - return e - } - } - - return nil -} diff --git a/tencentcloud/data_source_tc_ssm_service_status_test.go b/tencentcloud/data_source_tc_ssm_service_status_test.go deleted file mode 100644 index 8c0bd77dc7..0000000000 --- a/tencentcloud/data_source_tc_ssm_service_status_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudSsmServiceStatusDataSource_basic -v -func TestAccTencentCloudSsmServiceStatusDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSsmServiceStatusDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_service_status.example")), - }, - }, - }) -} - -const testAccSsmServiceStatusDataSource = ` -data "tencentcloud_ssm_service_status" "example" {} -` diff --git a/tencentcloud/data_source_tc_sts_caller_identity_test.go b/tencentcloud/data_source_tc_sts_caller_identity_test.go deleted file mode 100644 index 72f141b11d..0000000000 --- a/tencentcloud/data_source_tc_sts_caller_identity_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudStsCallerIdentityDataSource -v -func TestAccTencentCloudStsCallerIdentityDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceStsCallerIdentity, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sts_caller_identity.caller_identity"), - ), - }, - }, - }) -} - -const testAccDataSourceStsCallerIdentity = ` - -data "tencentcloud_sts_caller_identity" "caller_identity" { -} - -` diff --git a/tencentcloud/data_source_tc_tat_invoker_records_test.go b/tencentcloud/data_source_tc_tat_invoker_records_test.go deleted file mode 100644 index 0305dcdac1..0000000000 --- a/tencentcloud/data_source_tc_tat_invoker_records_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTatInvokerRecordsDataSource_basic -v -func TestAccTencentCloudNeedFixTatInvokerRecordsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTatInvokerRecordsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invoker_records.invoker_records")), - }, - }, - }) -} - -const testAccTatInvokerRecordsDataSource = ` - -data "tencentcloud_tat_invoker_records" "invoker_records" { - invoker_ids = "" -} - -` diff --git a/tencentcloud/data_source_tc_tcr_image_manifests_test.go b/tencentcloud/data_source_tc_tcr_image_manifests_test.go deleted file mode 100644 index ec3007ecab..0000000000 --- a/tencentcloud/data_source_tc_tcr_image_manifests_test.go +++ /dev/null @@ -1,45 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -const testTcrImageManifestsObjectName = "data.tencentcloud_tcr_image_manifests.image_manifests" - -func TestAccTencentCloudTcrImageManifestsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImageManifestsDataSource, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(testTcrImageManifestsObjectName), - resource.TestCheckResourceAttrSet(testTcrImageManifestsObjectName, "id"), - resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "repository_name", defaultTCRRepoName), - ), - }, - }, - }) -} - -const testAccTcrImageManifestsDataSource = ` - -data "tencentcloud_tcr_image_manifests" "image_manifests" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - image_version = "vv1" -} - -` diff --git a/tencentcloud/data_source_tc_tcr_images_test.go b/tencentcloud/data_source_tc_tcr_images_test.go deleted file mode 100644 index 264db52c89..0000000000 --- a/tencentcloud/data_source_tc_tcr_images_test.go +++ /dev/null @@ -1,118 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -const testObjectName = "data.tencentcloud_tcr_images.images" - -func TestAccTencentCloudTcrImagesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImagesDataSource_id, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet(testObjectName, "id"), - resource.TestCheckResourceAttr(testObjectName, "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr(testObjectName, "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr(testObjectName, "repository_name", defaultTCRRepoName), - resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), - ), - }, - }, - }) -} - -func TestAccTencentCloudTcrImagesDataSource_exact(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImagesDataSource_exact, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet(testObjectName, "id"), - resource.TestCheckResourceAttr(testObjectName, "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr(testObjectName, "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr(testObjectName, "repository_name", defaultTCRRepoName), - resource.TestCheckResourceAttr(testObjectName, "exact_match", "true"), - resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), - ), - }, - }, - }) -} - -func TestAccTencentCloudTcrImagesDataSource_exact_version(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImagesDataSource_exact_version, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet(testObjectName, "id"), - resource.TestCheckResourceAttr(testObjectName, "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr(testObjectName, "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr(testObjectName, "repository_name", defaultTCRRepoName), - resource.TestCheckResourceAttr(testObjectName, "image_version", "v1"), - resource.TestCheckResourceAttr(testObjectName, "exact_match", "true"), - resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), - ), - }, - }, - }) -} - -const testAccTcrImagesDataSource_id = ` - -data "tencentcloud_tcr_images" "images" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - } - -` - -const testAccTcrImagesDataSource_exact = ` - -data "tencentcloud_tcr_images" "images" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - exact_match = true - } - -` - -const testAccTcrImagesDataSource_exact_version = ` - -data "tencentcloud_tcr_images" "images" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - image_version = "v1" - exact_match = true - } - -` diff --git a/tencentcloud/data_source_tc_tcr_instances_test.go b/tencentcloud/data_source_tc_tcr_instances_test.go deleted file mode 100644 index 98bc648bca..0000000000 --- a/tencentcloud/data_source_tc_tcr_instances_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testDataTCRInstancesName = "data.tencentcloud_tcr_instances.tcr" - -func TestAccTencentCloudTcrInstancesData(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataTCRInstancesBasic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.id"), - resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.instance_type"), - resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.internal_end_point"), - resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.public_domain"), - resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.status"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataTCRInstancesBasic = defaultTCRInstanceData diff --git a/tencentcloud/data_source_tc_tcr_namespaces_test.go b/tencentcloud/data_source_tc_tcr_namespaces_test.go deleted file mode 100644 index a58a387cd7..0000000000 --- a/tencentcloud/data_source_tc_tcr_namespaces_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testDataTCRNamespacesNameAll = "data.tencentcloud_tcr_namespaces.id_test" - -func TestAccTencentCloudTcrNamespacesData(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRNamespaceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataTCRNamespacesBasic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.name"), - resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.is_public"), // we only need to care whether the value is set or not, rather than the exact value itself, and this value of public cannot be confirmed when the e2e case parallel running - resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.id"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataTCRNamespacesBasic = defaultTCRInstanceData + ` -data "tencentcloud_tcr_namespaces" "id_test" { - instance_id = local.tcr_id -} -` diff --git a/tencentcloud/data_source_tc_tcr_repositories_test.go b/tencentcloud/data_source_tc_tcr_repositories_test.go deleted file mode 100644 index c165bfd501..0000000000 --- a/tencentcloud/data_source_tc_tcr_repositories_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testDataTCRRepositoriesNameAll = "data.tencentcloud_tcr_repositories.id_test" - -func TestAccTencentCloudTcrRepositoriesData(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRRepositoryDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataTCRRepositoriesBasic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.name"), - resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.create_time"), - resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.url"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataTCRRepositoriesBasic = defaultTCRInstanceData + ` -data "tencentcloud_tcr_repositories" "id_test" { - instance_id = local.tcr_id - namespace_name = var.tcr_namespace -} -` diff --git a/tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks_test.go b/tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks_test.go deleted file mode 100644 index 090643b333..0000000000 --- a/tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testExecutionTasksObjectName = "data.tencentcloud_tcr_tag_retention_execution_tasks.tasks" - -func TestAccTencentCloudTcrTagRetentionExecutionTasksDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrTagRetentionExecutionTasksDataSource, defaultTCRInstanceId), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(testExecutionTasksObjectName), - resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "id"), - resource.TestCheckResourceAttr(testExecutionTasksObjectName, "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr(testExecutionTasksObjectName, "retention_id", "1"), - resource.TestCheckResourceAttr(testExecutionTasksObjectName, "execution_id", "1"), - resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.#"), - resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.0.task_id"), - resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.0.execution_id"), - ), - }, - }, - }) -} - -const testAccTcrTagRetentionExecutionTasksDataSource = ` - -data "tencentcloud_tcr_tag_retention_execution_tasks" "tasks" { - registry_id = "%s" - retention_id = 1 - execution_id = 1 -} - -` diff --git a/tencentcloud/data_source_tc_tcr_tokens_test.go b/tencentcloud/data_source_tc_tcr_tokens_test.go deleted file mode 100644 index f73b5aa90e..0000000000 --- a/tencentcloud/data_source_tc_tcr_tokens_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -var testDataTCRTokensNameAll = "data.tencentcloud_tcr_tokens.id_test" - -func TestAccTencentCloudTcrTokensData(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRTokenDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTencentCloudDataTCRTokensBasic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.token_id"), - resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.create_time"), - resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.description"), - resource.TestCheckResourceAttr(testDataTCRTokensNameAll, "token_list.0.enable", "true"), - ), - }, - }, - }) -} - -const testAccTencentCloudDataTCRTokensBasic = defaultTCRInstanceData + ` -resource "tencentcloud_tcr_token" "mytcr_token" { - instance_id = local.tcr_id - description = "test" - enable = true -} - -data "tencentcloud_tcr_tokens" "id_test" { - token_id = tencentcloud_tcr_token.mytcr_token.token_id - instance_id = local.tcr_id -} -` diff --git a/tencentcloud/data_source_tc_tdcpg_instances_test.go b/tencentcloud/data_source_tc_tdcpg_instances_test.go deleted file mode 100644 index 8c1ecefddb..0000000000 --- a/tencentcloud/data_source_tc_tdcpg_instances_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudTdcpgInstancesDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_id, defaultTdcpgClusterId, defaultTdcpgInstanceId), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.id"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.#", "1"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.instance_id", defaultTdcpgInstanceId), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.instance_name", defaultTdcpgInstanceName), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.endpoint_id"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.region", defaultRegion), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.zone", defaultTdcpgZone), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_version"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.status"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.status_desc"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.create_time"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.pay_mode"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.cpu"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.memory"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.instance_type"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_major_version"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_kernel_version"), - ), - }, - { - Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_name, defaultTdcpgClusterId, defaultTdcpgInstanceName), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.name"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.#", "1"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.instance_id", defaultTdcpgInstanceId), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.instance_name", defaultTdcpgInstanceName), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.name", "list.0.endpoint_id"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.region", defaultRegion), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.zone", defaultTdcpgZone), - ), - }, - { - Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_status, defaultTdcpgClusterId, "running"), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.status"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.status", "list.#"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.status", "list.0.endpoint_id"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.status", "list.0.status", "running"), - ), - }, - { - Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_type, defaultTdcpgClusterId, "RW"), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.type"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.type", "list.#"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.type", "list.0.endpoint_id"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.type", "list.0.instance_type", "RW"), - ), - }, - }, - }) -} - -const testAccDataSourceTdcpgInstances_id = ` - -data "tencentcloud_tdcpg_instances" "id" { - cluster_id = "%s" - instance_id = "%s" - } - -` - -const testAccDataSourceTdcpgInstances_name = ` - -data "tencentcloud_tdcpg_instances" "name" { - cluster_id = "%s" - instance_name = "%s" - } - -` -const testAccDataSourceTdcpgInstances_status = ` - -data "tencentcloud_tdcpg_instances" "status" { - cluster_id = "%s" - status = "%s" - } - -` -const testAccDataSourceTdcpgInstances_type = ` - -data "tencentcloud_tdcpg_instances" "type" { - cluster_id = "%s" - instance_type = "%s" - } - -` diff --git a/tencentcloud/data_source_tc_tdmq_pro_instance_detail_test.go b/tencentcloud/data_source_tc_tdmq_pro_instance_detail_test.go deleted file mode 100644 index 1eb57c1ef4..0000000000 --- a/tencentcloud/data_source_tc_tdmq_pro_instance_detail_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqProInstanceDetailDataSource_basic -v -func TestAccTencentCloudNeedFixTdmqProInstanceDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqProInstanceDetailDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instance_detail.pro_instance_detail"), - ), - }, - }, - }) -} - -const testAccTdmqProInstanceDetailDataSource = ` -data "tencentcloud_tdmq_pro_instance_detail" "pro_instance_detail" { - cluster_id = "pulsar-5z3g4227qnwr" -} -` diff --git a/tencentcloud/data_source_tc_tdmq_pro_instances_test.go b/tencentcloud/data_source_tc_tdmq_pro_instances_test.go deleted file mode 100644 index c51f6ed7da..0000000000 --- a/tencentcloud/data_source_tc_tdmq_pro_instances_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqProInstancesDataSource_basic -v -func TestAccTencentCloudNeedFixTdmqProInstancesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqProInstancesDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instances.pro_instances"), - ), - }, - { - Config: testAccTdmqProInstancesDataSourcelFilter, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instances.pro_instances"), - ), - }, - }, - }) -} - -const testAccTdmqProInstancesDataSource = ` -data "tencentcloud_tdmq_pro_instances" "pro_instances" { -} -` - -const testAccTdmqProInstancesDataSourcelFilter = ` -data "tencentcloud_tdmq_pro_instances" "pro_instances_filter" { - filters { - name = "InstanceName" - values = ["keep"] - } -} -` diff --git a/tencentcloud/data_source_tc_tdmq_publisher_summary_test.go b/tencentcloud/data_source_tc_tdmq_publisher_summary_test.go deleted file mode 100644 index bc8967134c..0000000000 --- a/tencentcloud/data_source_tc_tdmq_publisher_summary_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTdmqPublisherSummaryDataSource_basic -v -func TestAccTencentCloudTdmqPublisherSummaryDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqPublisherSummaryDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_publisher_summary.publisher_summary"), - ), - }, - }, - }) -} - -const testAccTdmqPublisherSummaryDataSource = ` -data "tencentcloud_tdmq_publisher_summary" "publisher_summary" { - cluster_id = "pulsar-9n95ax58b9vn" - namespace = "keep-ns" - topic = "keep-topic" -} -` diff --git a/tencentcloud/data_source_tc_tdmq_publishers_test.go b/tencentcloud/data_source_tc_tdmq_publishers_test.go deleted file mode 100644 index 3baeb2aca2..0000000000 --- a/tencentcloud/data_source_tc_tdmq_publishers_test.go +++ /dev/null @@ -1,42 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTdmqPublishersDataSource_basic -v -func TestAccTencentCloudTdmqPublishersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqPublishersDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_publishers.publishers"), - ), - }, - }, - }) -} - -const testAccTdmqPublishersDataSource = ` -data "tencentcloud_tdmq_publishers" "publishers" { - cluster_id = "pulsar-9n95ax58b9vn" - namespace = "keep-ns" - topic = "keep-topic" - filters { - name = "ProducerName" - values = ["test"] - } - sort { - name = "ProducerName" - order = "DESC" - } -} -` diff --git a/tencentcloud/data_source_tc_tdmq_rabbitmq_node_list_test.go b/tencentcloud/data_source_tc_tdmq_rabbitmq_node_list_test.go deleted file mode 100644 index 1a2a5e65f1..0000000000 --- a/tencentcloud/data_source_tc_tdmq_rabbitmq_node_list_test.go +++ /dev/null @@ -1,38 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixTdmqRabbitmqNodeListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqRabbitmqNodeListDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rabbitmq_node_list.rabbitmq_node_list"), - ), - }, - }, - }) -} - -const testAccTdmqRabbitmqNodeListDataSource = ` -data "tencentcloud_tdmq_rabbitmq_node_list" "rabbitmq_node_list" { - instance_id = "amqp-testtesttest" - node_name = "keep-node" - filters { - name = "nodeStatus" - values = ["running", "down"] - } - sort_element = "cpuUsage" - sort_order = "descend" -} -` diff --git a/tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance_test.go b/tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance_test.go deleted file mode 100644 index e658baa522..0000000000 --- a/tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixTdmqRabbitmqVipInstanceDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqRabbitmqVipInstanceDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rabbitmq_vip_instance.rabbitmq_vip_instance"), - ), - }, - }, - }) -} - -const testAccTdmqRabbitmqVipInstanceDataSource = ` - -data "tencentcloud_tdmq_rabbitmq_vip_instance" "rabbitmq_vip_instance" { - filters { - name = "" - values = - - } - } - -` diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_cluster_test.go b/tencentcloud/data_source_tc_tdmq_rocketmq_cluster_test.go deleted file mode 100644 index 1628ce1b26..0000000000 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_cluster_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTdmqRocketmqClusterDataSource -v -func TestAccTencentCloudTdmqRocketmqClusterDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceRocketmqCluster, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_cluster.example"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_cluster.example", "name_keyword"), - ), - }, - }, - }) -} - -const testAccDataSourceRocketmqCluster = ` -data "tencentcloud_tdmq_rocketmq_cluster" "example" { - name_keyword = tencentcloud_tdmq_rocketmq_cluster.example.cluster_name -} - -resource "tencentcloud_tdmq_rocketmq_cluster" "example" { - cluster_name = "tf_example" - remark = "remark." -} -` diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_messages_test.go b/tencentcloud/data_source_tc_tdmq_rocketmq_messages_test.go deleted file mode 100644 index f1b341156b..0000000000 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_messages_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqRocketmqMessagesDataSource_basic -v -func TestAccTencentCloudNeedFixTdmqRocketmqMessagesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqMessageDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_messages.message"), - ), - }, - }, - }) -} - -const testAccTdmqMessageDataSource = ` -data "tencentcloud_tdmq_rocketmq_messages" "message" { - cluster_id = "rocketmq-rkrbm52djmro" - environment_id = "keep_ns" - topic_name = "keep-topic" - msg_id = "A9FE8D0567FE15DB97425FC08EEF0000" - query_dlq_msg = false -} -` diff --git a/tencentcloud/data_source_tc_tdmq_vip_instance_test.go b/tencentcloud/data_source_tc_tdmq_vip_instance_test.go deleted file mode 100644 index 03a06ad136..0000000000 --- a/tencentcloud/data_source_tc_tdmq_vip_instance_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentNeedFixCloudTdmqVipInstanceDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTdmqVipInstanceDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_vip_instance.vip_instance"), - ), - }, - }, - }) -} - -const testAccTdmqVipInstanceDataSource = ` -data "tencentcloud_tdmq_vip_instance" "vip_instance" { - cluster_id = "rocketmq-rd3545bkkj49" -} -` diff --git a/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go b/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go deleted file mode 100644 index f2cdd53301..0000000000 --- a/tencentcloud/data_source_tc_teo_rule_engine_settings_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTeoRuleEngineSettingsDataSource -v -func TestAccTencentCloudTeoRuleEngineSettingsDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceTeoRuleEngineSettings, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_teo_rule_engine_settings.rule_engine_settings"), - ), - }, - }, - }) -} - -const testAccDataSourceTeoRuleEngineSettings = ` - -data "tencentcloud_teo_rule_engine_settings" "rule_engine_settings" { -} - -` diff --git a/tencentcloud/data_source_tc_teo_zone_available_plans_test.go b/tencentcloud/data_source_tc_teo_zone_available_plans_test.go deleted file mode 100644 index 57a344de9e..0000000000 --- a/tencentcloud/data_source_tc_teo_zone_available_plans_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTeoZoneAvailablePlansDataSource -v -func TestAccTencentCloudTeoZoneAvailablePlansDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceTeoZoneAvailablePlans, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_teo_zone_available_plans.zone_available_plans"), - ), - }, - }, - }) -} - -const testAccDataSourceTeoZoneAvailablePlans = ` - -data "tencentcloud_teo_zone_available_plans" "zone_available_plans" { -} - -` diff --git a/tencentcloud/data_source_tc_teo_zone_available_plans_testing_test.go b/tencentcloud/data_source_tc_teo_zone_available_plans_testing_test.go deleted file mode 100644 index 5c4aae3a99..0000000000 --- a/tencentcloud/data_source_tc_teo_zone_available_plans_testing_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTestingTeoZoneAvailablePlansDataSource -v -func TestAccTencentCloudTestingTeoZoneAvailablePlansDataSource(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccDataSourceTestingTeoZoneAvailablePlans, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_teo_zone_available_plans.zone_available_plans"), - ), - }, - }, - }) -} - -const testAccDataSourceTestingTeoZoneAvailablePlans = ` - -data "tencentcloud_teo_zone_available_plans" "zone_available_plans" { -} - -` diff --git a/tencentcloud/data_source_tc_tse_nacos_server_interfaces.go b/tencentcloud/data_source_tc_tse_nacos_server_interfaces.go deleted file mode 100644 index 60975b9c9d..0000000000 --- a/tencentcloud/data_source_tc_tse_nacos_server_interfaces.go +++ /dev/null @@ -1,95 +0,0 @@ -package tencentcloud - -import ( - "context" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" -) - -func dataSourceTencentCloudTseNacosServerInterfaces() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudTseNacosServerInterfacesRead, - Schema: map[string]*schema.Schema{ - "instance_id": { - Optional: true, - Type: schema.TypeString, - Description: "engine instance ID.", - }, - - "content": { - Computed: true, - Type: schema.TypeList, - Description: "interface list.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "interface": { - Type: schema.TypeString, - Computed: true, - Description: "interface nameNote: This field may return null, indicating that a valid value is not available.", - }, - }, - }, - }, - - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudTseNacosServerInterfacesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_nacos_server_interfaces.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - var content []*tse.NacosServerInterface - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeTseNacosServerInterfacesByFilter(ctx, instanceId) - if e != nil { - return retryError(e) - } - content = result - return nil - }) - if err != nil { - return err - } - - tmpList := make([]map[string]interface{}, 0, len(content)) - - if content != nil { - for _, nacosServerInterface := range content { - nacosServerInterfaceMap := map[string]interface{}{} - - if nacosServerInterface.Interface != nil { - nacosServerInterfaceMap["interface"] = nacosServerInterface.Interface - } - - tmpList = append(tmpList, nacosServerInterfaceMap) - } - - _ = d.Set("content", tmpList) - } - - d.SetId(instanceId) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { - return e - } - } - return nil -} diff --git a/tencentcloud/data_source_tc_tsf_delivery_config_by_group_id_test.go b/tencentcloud/data_source_tc_tsf_delivery_config_by_group_id_test.go deleted file mode 100644 index 133b5e2648..0000000000 --- a/tencentcloud/data_source_tc_tsf_delivery_config_by_group_id_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfDeliveryConfigByGroupIdDataSource_basic -v -func TestAccTencentCloudTsfDeliveryConfigByGroupIdDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTsfDeliveryConfigByGroupIdDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.#"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.0.config_id"), - resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.0.config_name"), - ), - }, - }, - }) -} - -const testAccTsfDeliveryConfigByGroupIdDataSource = ` - -data "tencentcloud_tsf_delivery_config_by_group_id" "delivery_config_by_group_id" { - group_id = "group-yrjkln9v" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_account_attributes_test.go b/tencentcloud/data_source_tc_vpc_account_attributes_test.go deleted file mode 100644 index d600bb9bef..0000000000 --- a/tencentcloud/data_source_tc_vpc_account_attributes_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcAccountAttributesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcAccountAttributesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_account_attributes.account_attributes")), - }, - }, - }) -} - -const testAccVpcAccountAttributesDataSource = ` - -data "tencentcloud_vpc_account_attributes" "account_attributes" {} - -` diff --git a/tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage_test.go b/tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage_test.go deleted file mode 100644 index e338469136..0000000000 --- a/tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcBandwidthPackageBillUsageDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcBandwidthPackageBillUsageDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_bandwidth_package_bill_usage.bandwidth_package_bill_usage")), - }, - }, - }) -} - -const testAccVpcBandwidthPackageBillUsageDataSource = ` - -resource "tencentcloud_vpc_bandwidth_package" "bandwidth_package" { - network_type = "BGP" - charge_type = "TOP5_POSTPAID_BY_MONTH" - bandwidth_package_name = "iac-test-data" - tags = { - "createdBy" = "terraform" - } -} - -data "tencentcloud_vpc_bandwidth_package_bill_usage" "bandwidth_package_bill_usage" { - bandwidth_package_id = tencentcloud_vpc_bandwidth_package.bandwidth_package.id -} - -` diff --git a/tencentcloud/data_source_tc_vpc_bandwidth_package_quota_test.go b/tencentcloud/data_source_tc_vpc_bandwidth_package_quota_test.go deleted file mode 100644 index 9e10a97d57..0000000000 --- a/tencentcloud/data_source_tc_vpc_bandwidth_package_quota_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcBandwidthPackageQuotaDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcBandwidthPackageQuotaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_bandwidth_package_quota.bandwidth_package_quota")), - }, - }, - }) -} - -const testAccVpcBandwidthPackageQuotaDataSource = ` - -data "tencentcloud_vpc_bandwidth_package_quota" "bandwidth_package_quota" { - } - -` diff --git a/tencentcloud/data_source_tc_vpc_classic_link_instances_test.go b/tencentcloud/data_source_tc_vpc_classic_link_instances_test.go deleted file mode 100644 index c287e5c8df..0000000000 --- a/tencentcloud/data_source_tc_vpc_classic_link_instances_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcClassicLinkInstancesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcClassicLinkInstancesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_classic_link_instances.classic_link_instances")), - }, - }, - }) -} - -const testAccVpcClassicLinkInstancesDataSource = ` - -data "tencentcloud_vpc_classic_link_instances" "classic_link_instances" { - filters { - name = "vpc-id" - values = ["vpc-lh4nqig9"] - } -} - -` diff --git a/tencentcloud/data_source_tc_vpc_cvm_instances_test.go b/tencentcloud/data_source_tc_vpc_cvm_instances_test.go deleted file mode 100644 index 9961fb17d1..0000000000 --- a/tencentcloud/data_source_tc_vpc_cvm_instances_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcCvmInstancesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcCvmInstancesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_cvm_instances.cvm_instances")), - }, - }, - }) -} - -const testAccVpcCvmInstancesDataSource = ` - -data "tencentcloud_vpc_cvm_instances" "cvm_instances" { - filters { - name = "vpc-id" - values = ["vpc-lh4nqig9"] - } -} -` diff --git a/tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail_test.go b/tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail_test.go deleted file mode 100644 index 1bf6f6184a..0000000000 --- a/tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcGatewayFlowMonitorDetailDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcGatewayFlowMonitorDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_gateway_flow_monitor_detail.gateway_flow_monitor_detail")), - }, - }, - }) -} - -const testAccVpcGatewayFlowMonitorDetailDataSource = ` - -data "tencentcloud_vpc_gateway_flow_monitor_detail" "gateway_flow_monitor_detail" { - time_point = "2023-06-02 12:15:20" - vpn_id = "vpngw-gt8bianl" - order_field = "OutTraffic" - order_direction = "DESC" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_gateway_flow_qos_test.go b/tencentcloud/data_source_tc_vpc_gateway_flow_qos_test.go deleted file mode 100644 index 47ed895b43..0000000000 --- a/tencentcloud/data_source_tc_vpc_gateway_flow_qos_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcGatewayFlowQosDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcGatewayFlowQosDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_gateway_flow_qos.gateway_flow_qos")), - }, - }, - }) -} - -const testAccVpcGatewayFlowQosDataSource = ` - -data "tencentcloud_vpc_gateway_flow_qos" "gateway_flow_qos" { - gateway_id = "vpngw-gt8bianl" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_limits_test.go b/tencentcloud/data_source_tc_vpc_limits_test.go deleted file mode 100644 index b072813540..0000000000 --- a/tencentcloud/data_source_tc_vpc_limits_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcLimitsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcLimitsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_limits.limits")), - }, - }, - }) -} - -const testAccVpcLimitsDataSource = ` - -data "tencentcloud_vpc_limits" "limits" { - limit_types = ["appid-max-vpcs", "vpc-max-subnets"] -} -` diff --git a/tencentcloud/data_source_tc_vpc_net_detect_state_check_test.go b/tencentcloud/data_source_tc_vpc_net_detect_state_check_test.go deleted file mode 100644 index ff720565a6..0000000000 --- a/tencentcloud/data_source_tc_vpc_net_detect_state_check_test.go +++ /dev/null @@ -1,37 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixVpcNetDetectStateCheckDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcNetDetectStateCheckDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_net_detect_state_check.net_detect_state_check")), - }, - }, - }) -} - -const testAccVpcNetDetectStateCheckDataSource = ` - -data "tencentcloud_vpc_net_detect_state_check" "net_detect_state_check" { - net_detect_id = "netd-12345678" - detect_destination_ip = [ - "10.0.0.3", - "10.0.0.2" - ] - next_hop_type = "NORMAL_CVM" - next_hop_destination = "10.0.0.4" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_net_detect_states_test.go b/tencentcloud/data_source_tc_vpc_net_detect_states_test.go deleted file mode 100644 index 2806d31eca..0000000000 --- a/tencentcloud/data_source_tc_vpc_net_detect_states_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixVpcNetDetectStatesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcNetDetectStatesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_net_detect_states.net_detect_states")), - }, - }, - }) -} - -const testAccVpcNetDetectStatesDataSource = ` - -data "tencentcloud_vpc_net_detect_states" "net_detect_states" { - net_detect_ids = ["netd-12345678"] -} - -` diff --git a/tencentcloud/data_source_tc_vpc_network_interface_limit_test.go b/tencentcloud/data_source_tc_vpc_network_interface_limit_test.go deleted file mode 100644 index 1cb6360b5f..0000000000 --- a/tencentcloud/data_source_tc_vpc_network_interface_limit_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcNetworkInterfaceLimitDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcNetworkInterfaceLimitDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_network_interface_limit.network_interface_limit")), - }, - }, - }) -} - -const testAccVpcNetworkInterfaceLimitDataSource = ` - -data "tencentcloud_vpc_network_interface_limit" "network_interface_limit" { - instance_id = "ins-cr2rfq78" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_private_ip_addresses_test.go b/tencentcloud/data_source_tc_vpc_private_ip_addresses_test.go deleted file mode 100644 index fd1a18aa48..0000000000 --- a/tencentcloud/data_source_tc_vpc_private_ip_addresses_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcPrivateIpAddressesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcPrivateIpAddressesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_private_ip_addresses.private_ip_addresses")), - }, - }, - }) -} - -const testAccVpcPrivateIpAddressesDataSource = ` - -data "tencentcloud_vpc_private_ip_addresses" "private_ip_addresses" { - vpc_id = "vpc-l0dw94uh" - private_ip_addresses = ["10.0.0.1"] -} - -` diff --git a/tencentcloud/data_source_tc_vpc_product_quota_test.go b/tencentcloud/data_source_tc_vpc_product_quota_test.go deleted file mode 100644 index ad015c8ba0..0000000000 --- a/tencentcloud/data_source_tc_vpc_product_quota_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcProductQuotaDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcProductQuotaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_product_quota.product_quota")), - }, - }, - }) -} - -const testAccVpcProductQuotaDataSource = ` - -data "tencentcloud_vpc_product_quota" "product_quota" { - product = "vpc" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_resource_dashboard_test.go b/tencentcloud/data_source_tc_vpc_resource_dashboard_test.go deleted file mode 100644 index 13a32a866e..0000000000 --- a/tencentcloud/data_source_tc_vpc_resource_dashboard_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcResourceDashboardDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcResourceDashboardDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_resource_dashboard.resource_dashboard")), - }, - }, - }) -} - -const testAccVpcResourceDashboardDataSource = ` - -data "tencentcloud_vpc_resource_dashboard" "resource_dashboard" { - vpc_ids = ["vpc-4owdpnwr"] -} - -` diff --git a/tencentcloud/data_source_tc_vpc_route_conflicts_test.go b/tencentcloud/data_source_tc_vpc_route_conflicts_test.go deleted file mode 100644 index 117f95ec57..0000000000 --- a/tencentcloud/data_source_tc_vpc_route_conflicts_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcRouteConflictsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcRouteConflictsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_conflicts.route_conflicts")), - }, - }, - }) -} - -const testAccVpcRouteConflictsDataSource = ` - -data "tencentcloud_vpc_route_conflicts" "route_conflicts" { - route_table_id = "rtb-6xypllqe" - destination_cidr_blocks = ["172.18.111.0/24"] -} - -` diff --git a/tencentcloud/data_source_tc_vpc_security_group_limits_test.go b/tencentcloud/data_source_tc_vpc_security_group_limits_test.go deleted file mode 100644 index e5212d6b33..0000000000 --- a/tencentcloud/data_source_tc_vpc_security_group_limits_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcSecurityGroupLimitsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcSecurityGroupLimitsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_security_group_limits.security_group_limits")), - }, - }, - }) -} - -const testAccVpcSecurityGroupLimitsDataSource = ` - -data "tencentcloud_vpc_security_group_limits" "security_group_limits" {} - -` diff --git a/tencentcloud/data_source_tc_vpc_security_group_references_test.go b/tencentcloud/data_source_tc_vpc_security_group_references_test.go deleted file mode 100644 index f2b12913f0..0000000000 --- a/tencentcloud/data_source_tc_vpc_security_group_references_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcSecurityGroupReferencesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcSecurityGroupReferencesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_security_group_references.security_group_references")), - }, - }, - }) -} - -const testAccVpcSecurityGroupReferencesDataSource = ` - -data "tencentcloud_vpc_security_group_references" "security_group_references" { - security_group_ids = ["sg-edmur627"] -} -` diff --git a/tencentcloud/data_source_tc_vpc_sg_snapshot_file_content_test.go b/tencentcloud/data_source_tc_vpc_sg_snapshot_file_content_test.go deleted file mode 100644 index fd4d4ffe53..0000000000 --- a/tencentcloud/data_source_tc_vpc_sg_snapshot_file_content_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixVpcSgSnapshotFileContentDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcSgSnapshotFileContentDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_sg_snapshot_file_content.sg_snapshot_file_content")), - }, - }, - }) -} - -const testAccVpcSgSnapshotFileContentDataSource = ` - -data "tencentcloud_vpc_sg_snapshot_file_content" "sg_snapshot_file_content" { - snapshot_policy_id = "sspolicy-ebjofe71" - snapshot_file_id = "ssfile-017gepjxpr" - security_group_id = "sg-ntrgm89v" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_snapshot_files_test.go b/tencentcloud/data_source_tc_vpc_snapshot_files_test.go deleted file mode 100644 index ef930737de..0000000000 --- a/tencentcloud/data_source_tc_vpc_snapshot_files_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixVpcSnapshotFilesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcSnapshotFilesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_snapshot_files.snapshot_files")), - }, - }, - }) -} - -const testAccVpcSnapshotFilesDataSource = ` - -data "tencentcloud_vpc_snapshot_files" "snapshot_files" { - business_type = "securitygroup" - instance_id = "sg-902tl7t7" - start_date = "2022-10-10 00:00:00" - end_date = "2023-10-30 19:00:00" -} - -` diff --git a/tencentcloud/data_source_tc_vpc_subnet_resource_dashboard_test.go b/tencentcloud/data_source_tc_vpc_subnet_resource_dashboard_test.go deleted file mode 100644 index 246c04008a..0000000000 --- a/tencentcloud/data_source_tc_vpc_subnet_resource_dashboard_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcSubnetResourceDashboardDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcSubnetResourceDashboardDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnet_resource_dashboard.subnet_resource_dashboard")), - }, - }, - }) -} - -const testAccVpcSubnetResourceDashboardDataSource = ` - -data "tencentcloud_vpc_subnet_resource_dashboard" "subnet_resource_dashboard" { - subnet_ids = ["subnet-i9tpf6hq"] -} - -` diff --git a/tencentcloud/data_source_tc_vpc_template_limits_test.go b/tencentcloud/data_source_tc_vpc_template_limits_test.go deleted file mode 100644 index cd3307d684..0000000000 --- a/tencentcloud/data_source_tc_vpc_template_limits_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcTemplateLimitsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcTemplateLimitsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_template_limits.template_limits")), - }, - }, - }) -} - -const testAccVpcTemplateLimitsDataSource = ` - -data "tencentcloud_vpc_template_limits" "template_limits" {} - -` diff --git a/tencentcloud/data_source_tc_vpc_test.go b/tencentcloud/data_source_tc_vpc_test.go deleted file mode 100644 index f138a85181..0000000000 --- a/tencentcloud/data_source_tc_vpc_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccDataSourceTencentCloudVpc_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: TestAccDataSourceTencentCloudVpcConfig_id, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc.id"), - resource.TestCheckResourceAttr("data.tencentcloud_vpc.id", "name", "tf-ci-test"), - ), - }, - }, - }) -} - -const TestAccDataSourceTencentCloudVpcConfig_id = ` -resource "tencentcloud_vpc" "foo" { - name = "tf-ci-test" - cidr_block = "10.0.0.0/16" -} - -data "tencentcloud_vpc" "id" { - id = tencentcloud_vpc.foo.id -} -` diff --git a/tencentcloud/data_source_tc_vpc_used_ip_address_test.go b/tencentcloud/data_source_tc_vpc_used_ip_address_test.go deleted file mode 100644 index 459f68e9b9..0000000000 --- a/tencentcloud/data_source_tc_vpc_used_ip_address_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpcUsedIpAddressDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpcUsedIpAddressDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_used_ip_address.used_ip_address")), - }, - }, - }) -} - -const testAccVpcUsedIpAddressDataSource = ` - -data "tencentcloud_vpc_used_ip_address" "used_ip_address" { - vpc_id = "vpc-4owdpnwr" -} - -` diff --git a/tencentcloud/data_source_tc_vpn_customer_gateway_vendors_test.go b/tencentcloud/data_source_tc_vpn_customer_gateway_vendors_test.go deleted file mode 100644 index 6d2b0aac65..0000000000 --- a/tencentcloud/data_source_tc_vpn_customer_gateway_vendors_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpnCustomerGatewayVendorsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpnCustomerGatewayVendorsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_customer_gateway_vendors.vpn_customer_gateway_vendors")), - }, - }, - }) -} - -const testAccVpnCustomerGatewayVendorsDataSource = ` - -data "tencentcloud_vpn_customer_gateway_vendors" "vpn_customer_gateway_vendors" {} - -` diff --git a/tencentcloud/data_source_tc_vpn_default_health_check_ip.go b/tencentcloud/data_source_tc_vpn_default_health_check_ip.go deleted file mode 100644 index d2b6ef60c9..0000000000 --- a/tencentcloud/data_source_tc_vpn_default_health_check_ip.go +++ /dev/null @@ -1,94 +0,0 @@ -package tencentcloud - -import ( - "context" - - "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 dataSourceTencentCloudVpnDefaultHealthCheckIp() *schema.Resource { - return &schema.Resource{ - Read: dataSourceTencentCloudVpnDefaultHealthCheckIpRead, - Schema: map[string]*schema.Schema{ - "vpn_gateway_id": { - Required: true, - Type: schema.TypeString, - Description: "vpn gateway id.", - }, - - "health_check_local_ip": { - Computed: true, - Type: schema.TypeString, - Description: "local ip of health check.", - }, - - "health_check_remote_ip": { - Computed: true, - Type: schema.TypeString, - Description: "remote ip for health check.", - }, - - "result_output_file": { - Type: schema.TypeString, - Optional: true, - Description: "Used to save results.", - }, - }, - } -} - -func dataSourceTencentCloudVpnDefaultHealthCheckIpRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_default_health_check_ip.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var vpnGwId string - res := make(map[string]interface{}) - - paramMap := make(map[string]interface{}) - if v, ok := d.GetOk("vpn_gateway_id"); ok { - vpnGwId = v.(string) - paramMap["VpnGatewayId"] = helper.String(v.(string)) - } - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - var defaultHealthCheck *vpc.GenerateVpnConnectionDefaultHealthCheckIpResponseParams - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeVpnDefaultHealthCheckIp(ctx, paramMap) - if e != nil { - return retryError(e) - } - defaultHealthCheck = result - return nil - }) - if err != nil { - return err - } - - if defaultHealthCheck.HealthCheckLocalIp != nil { - _ = d.Set("health_check_local_ip", defaultHealthCheck.HealthCheckLocalIp) - res["health_check_local_ip"] = defaultHealthCheck.HealthCheckLocalIp - } - - if defaultHealthCheck.HealthCheckRemoteIp != nil { - _ = d.Set("health_check_remote_ip", defaultHealthCheck.HealthCheckRemoteIp) - res["health_check_remote_ip"] = defaultHealthCheck.HealthCheckRemoteIp - } - - d.SetId(vpnGwId) - output, ok := d.GetOk("result_output_file") - if ok && output.(string) != "" { - if e := writeToFile(output.(string), res); e != nil { - return e - } - } - return nil -} diff --git a/tencentcloud/data_source_tc_vpn_default_health_check_ip_test.go b/tencentcloud/data_source_tc_vpn_default_health_check_ip_test.go deleted file mode 100644 index cb300fd257..0000000000 --- a/tencentcloud/data_source_tc_vpn_default_health_check_ip_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudVpnDefaultHealthCheckIpDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccVpnDefaultHealthCheckIpDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_default_health_check_ip.default_health_check_ip")), - }, - }, - }) -} - -const testAccVpnDefaultHealthCheckIpDataSource = ` - -data "tencentcloud_vpn_default_health_check_ip" "default_health_check_ip" { - vpn_gateway_id = "vpngw-gt8bianl" -} - -` diff --git a/tencentcloud/data_source_tc_waf_ciphers_test.go b/tencentcloud/data_source_tc_waf_ciphers_test.go deleted file mode 100644 index f1d47b6586..0000000000 --- a/tencentcloud/data_source_tc_waf_ciphers_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafCiphersDataSource_basic -v -func TestAccTencentCloudNeedFixWafCiphersDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafCiphersDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_ciphers.example"), - ), - }, - }, - }) -} - -const testAccWafCiphersDataSource = ` -data "tencentcloud_waf_ciphers" "example" {} -` diff --git a/tencentcloud/data_source_tc_waf_domains_test.go b/tencentcloud/data_source_tc_waf_domains_test.go deleted file mode 100644 index 81ece0dc83..0000000000 --- a/tencentcloud/data_source_tc_waf_domains_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafDomainsDataSource_basic -v -func TestAccTencentCloudNeedFixWafDomainsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafDomainsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_domains.example"), - ), - }, - }, - }) -} - -const testAccWafDomainsDataSource = ` -data "tencentcloud_waf_domains" "example" { - instance_id = "waf_2kxtlbky01b3wceb" - domain = "tf.example.com" -} -` diff --git a/tencentcloud/data_source_tc_waf_find_domains_test.go b/tencentcloud/data_source_tc_waf_find_domains_test.go deleted file mode 100644 index d6a8d56107..0000000000 --- a/tencentcloud/data_source_tc_waf_find_domains_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafFindDomainsDataSource_basic -v -func TestAccTencentCloudNeedFixWafFindDomainsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafFindDomainsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_find_domains.example"), - ), - }, - }, - }) -} - -const testAccWafFindDomainsDataSource = ` -data "tencentcloud_waf_find_domains" "example" { - key = "keyWord" - is_waf_domain = "1" - by = "FindTime" - order = "asc" -} -` diff --git a/tencentcloud/data_source_tc_waf_instance_qps_limit_test.go b/tencentcloud/data_source_tc_waf_instance_qps_limit_test.go deleted file mode 100644 index 4fa32e01ba..0000000000 --- a/tencentcloud/data_source_tc_waf_instance_qps_limit_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudWafInstanceQpsLimitDataSource_basic -v -func TestAccTencentCloudWafInstanceQpsLimitDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafInstanceQpsLimitDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_instance_qps_limit.example"), - ), - }, - }, - }) -} - -const testAccWafInstanceQpsLimitDataSource = ` -data "tencentcloud_waf_instance_qps_limit" "example" { - instance_id = "waf_2kxtlbky00b3b4qz" -} -` diff --git a/tencentcloud/data_source_tc_waf_ports_test.go b/tencentcloud/data_source_tc_waf_ports_test.go deleted file mode 100644 index f2231fda15..0000000000 --- a/tencentcloud/data_source_tc_waf_ports_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafPortsDataSource_basic -v -func TestAccTencentCloudNeedFixWafPortsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafPortsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_ports.example"), - ), - }, - }, - }) -} - -const testAccWafPortsDataSource = ` -data "tencentcloud_waf_ports" "example" { - edition = "clb-waf" - instance_id = "waf_2kxtlbky00b2v1fn" -} -` diff --git a/tencentcloud/data_source_tc_waf_tls_versions_test.go b/tencentcloud/data_source_tc_waf_tls_versions_test.go deleted file mode 100644 index 56e2eb2d0e..0000000000 --- a/tencentcloud/data_source_tc_waf_tls_versions_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafTlsVersionsDataSource_basic -v -func TestAccTencentCloudNeedFixWafTlsVersionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafTlsVersionsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_tls_versions.example"), - ), - }, - }, - }) -} - -const testAccWafTlsVersionsDataSource = ` -data "tencentcloud_waf_tls_versions" "example" {} -` diff --git a/tencentcloud/data_source_tc_waf_user_clb_regions_test.go b/tencentcloud/data_source_tc_waf_user_clb_regions_test.go deleted file mode 100644 index b3a2f8ee33..0000000000 --- a/tencentcloud/data_source_tc_waf_user_clb_regions_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudWafUserClbRegionsDataSource_basic -v -func TestAccTencentCloudWafUserClbRegionsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafUserClbRegionsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_user_clb_regions.example"), - ), - }, - }, - }) -} - -const testAccWafUserClbRegionsDataSource = ` -data "tencentcloud_waf_user_clb_regions" "example" {} -` diff --git a/tencentcloud/data_source_tc_waf_user_domains_test.go b/tencentcloud/data_source_tc_waf_user_domains_test.go deleted file mode 100644 index 2b756a8078..0000000000 --- a/tencentcloud/data_source_tc_waf_user_domains_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafUserDomainsDataSource_basic -v -func TestAccTencentCloudNeedFixWafUserDomainsDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafUserDomainsDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_user_domains.example"), - ), - }, - }, - }) -} - -const testAccWafUserDomainsDataSource = ` -data "tencentcloud_waf_user_domains" "example" {} -` diff --git a/tencentcloud/data_source_tc_waf_waf_infos_test.go b/tencentcloud/data_source_tc_waf_waf_infos_test.go deleted file mode 100644 index e9e3687ea5..0000000000 --- a/tencentcloud/data_source_tc_waf_waf_infos_test.go +++ /dev/null @@ -1,36 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWafWafInfosDataSource_basic -v -func TestAccTencentCloudNeedFixWafWafInfosDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWafWafInfosDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_waf_infos.example"), - ), - }, - }, - }) -} - -const testAccWafWafInfosDataSource = ` -data "tencentcloud_waf_waf_infos" "example" { - params { - load_balancer_id = "lb-A8VF445" - listener_id = "lbl-nonkgvc2" - domain_id = "waf-MPtWPK5Q" - } -} -` diff --git a/tencentcloud/data_source_tc_wedata_data_source_list_test.go b/tencentcloud/data_source_tc_wedata_data_source_list_test.go deleted file mode 100644 index c6b37ae225..0000000000 --- a/tencentcloud/data_source_tc_wedata_data_source_list_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWedataDataSourceListDataSource_basic -v -func TestAccTencentCloudNeedFixWedataDataSourceListDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWedataDataSourceListDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_data_source_list.example"), - ), - }, - }, - }) -} - -const testAccWedataDataSourceListDataSource = ` -data "tencentcloud_wedata_data_source_list" "example" { - order_fields { - name = "create_time" - direction = "DESC" - } - - filters { - name = "Name" - values = ["tf_example"] - } -} -` diff --git a/tencentcloud/data_source_tc_wedata_data_source_without_info_test.go b/tencentcloud/data_source_tc_wedata_data_source_without_info_test.go deleted file mode 100644 index e0eea53ca1..0000000000 --- a/tencentcloud/data_source_tc_wedata_data_source_without_info_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixWedataDataSourceWithoutInfoDataSource_basic -v -func TestAccTencentCloudNeedFixWedataDataSourceWithoutInfoDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWedataDataSourceWithoutInfoDataSource, - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_data_source_without_info.example"), - ), - }, - }, - }) -} - -const testAccWedataDataSourceWithoutInfoDataSource = ` -data "tencentcloud_wedata_data_source_without_info" "example" { - filters { - name = "ownerProjectId" - values = ["1612982498218618880"] - } - - order_fields { - name = "create_time" - direction = "DESC" - } -} -` diff --git a/tencentcloud/data_source_tc_wedata_rule_templates_test.go b/tencentcloud/data_source_tc_wedata_rule_templates_test.go deleted file mode 100644 index 052fc413cd..0000000000 --- a/tencentcloud/data_source_tc_wedata_rule_templates_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixWedataRuleTemplatesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccWedataRuleTemplatesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_rule_templates.rule_templates")), - }, - }, - }) -} - -const testAccWedataRuleTemplatesDataSource = ` - -data "tencentcloud_wedata_rule_templates" "rule_templates" { - type = 2 - source_object_type = 2 - project_id = "1840731346428280832" - source_engine_types = [2, 4, 16] -} - -` diff --git a/tencentcloud/extension_as.go b/tencentcloud/extension_as.go deleted file mode 100644 index 90f68fe35d..0000000000 --- a/tencentcloud/extension_as.go +++ /dev/null @@ -1,180 +0,0 @@ -package tencentcloud - -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/extension_cam.go b/tencentcloud/extension_cam.go deleted file mode 100644 index 8f7a301b38..0000000000 --- a/tencentcloud/extension_cam.go +++ /dev/null @@ -1,26 +0,0 @@ -package tencentcloud - -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_cfs.go b/tencentcloud/extension_cfs.go deleted file mode 100644 index d58ac3af30..0000000000 --- a/tencentcloud/extension_cfs.go +++ /dev/null @@ -1,59 +0,0 @@ -package tencentcloud - -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/extension_clb.go b/tencentcloud/extension_clb.go deleted file mode 100644 index 7d371abbc0..0000000000 --- a/tencentcloud/extension_clb.go +++ /dev/null @@ -1,136 +0,0 @@ -package tencentcloud - -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/extension_cvm.go b/tencentcloud/extension_cvm.go deleted file mode 100644 index d7020d35ff..0000000000 --- a/tencentcloud/extension_cvm.go +++ /dev/null @@ -1,118 +0,0 @@ -package tencentcloud - -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/extension_cwp.go b/tencentcloud/extension_cwp.go deleted file mode 100644 index f40fc8c63d..0000000000 --- a/tencentcloud/extension_cwp.go +++ /dev/null @@ -1,23 +0,0 @@ -package tencentcloud - -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/extension_dasb.go b/tencentcloud/extension_dasb.go deleted file mode 100644 index af57f4710e..0000000000 --- a/tencentcloud/extension_dasb.go +++ /dev/null @@ -1,23 +0,0 @@ -package tencentcloud - -const ( - RESOURCE_EDITION_PRO = "pro" - RESOURCE_EDITION_STANDARD = "standard" -) - -var RESOURCE_EDITION = []string{ - RESOURCE_EDITION_PRO, - RESOURCE_EDITION_STANDARD, -} - -const ( - OS_NAME_LINUX = "Linux" - OS_NAME_WINDOWS = "Windows" - OS_NAME_MYSQL = "MySQL" -) - -var OS_NAME = []string{ - OS_NAME_LINUX, - OS_NAME_WINDOWS, - OS_NAME_MYSQL, -} diff --git a/tencentcloud/extension_images.go b/tencentcloud/extension_images.go deleted file mode 100644 index 48d1584688..0000000000 --- a/tencentcloud/extension_images.go +++ /dev/null @@ -1,6 +0,0 @@ -package tencentcloud - -const ( - TRUE = "true" - FALSE = "false" -) diff --git a/tencentcloud/extension_monitor.go b/tencentcloud/extension_monitor.go deleted file mode 100644 index 837da76fde..0000000000 --- a/tencentcloud/extension_monitor.go +++ /dev/null @@ -1,86 +0,0 @@ -package tencentcloud - -const monitorEventTypeStatusChange = "status_change" -const monitorEventTypeAbnormal = "abnormal" - -var monitorEventTypes = []string{ - monitorEventTypeStatusChange, - monitorEventTypeAbnormal, -} - -const monitorEventStatusRecover = "recover" -const monitorEventStatusAlarm = "alarm" -const monitorEventStatusNothing = "-" - -var monitorEventStatus = []string{ - monitorEventStatusRecover, - monitorEventStatusAlarm, - monitorEventStatusNothing, -} - -//notify_way -const monitorNotifyWaySMS = "SMS" -const monitorNotifyWaySITE = "SITE" -const monitorNotifyWayEMAIL = "EMAIL" -const monitorNotifyWayCALL = "CALL" -const monitorNotifyWayWECHAT = "WECHAT" - -var monitorNotifyWays = []string{ - monitorNotifyWaySMS, - monitorNotifyWaySITE, - monitorNotifyWayEMAIL, - monitorNotifyWayCALL, - monitorNotifyWayWECHAT, -} - -//receiver_type -const monitorReceiverTypeUser = "user" -const monitorReceiverTypeGroup = "group" - -var monitorReceiverTypes = []string{ - monitorReceiverTypeUser, - monitorReceiverTypeGroup, -} - -//receive_language -const monitorReceiveLanguageCN = "zh-CN" -const monitorReceiveLanguageUS = "en-US" - -var monitorReceiveLanguages = []string{ - monitorReceiveLanguageCN, - monitorReceiveLanguageUS, -} - -/*regions in monitor*/ -var MonitorRegionMap = map[string]string{ - "ap-guangzhou": "gz", - "ap-shenzhen-fsi": "szjr", - "ap-guangzhou-open": "gzopen", - "ap-shenzhen": "szx", - "ap-shanghai": "sh", - "ap-shanghai-fsi": "shjr", - "ap-nanjing": "nj", - "ap-jinan-ec": "jnec", - "ap-hangzhou-ec": "hzec", - "ap-fuzhou-ec": "fzec", - "ap-beijing": "bj", - "ap-tianjin": "tsn", - "ap-shijiazhuang-ec": "sjwec", - "ap-beijing-fsi": "bjjr", - "ap-wuhan-ec": "whec", - "ap-changsha-ec": "csec", - "ap-chengdu": "cd", - "ap-chongqing": "cq", - "ap-taipei": "tpe", - "ap-hongkong": "hk", - "ap-singapore": "sg", - "ap-bangkok": "th", - "ap-mumbai": "in", - "ap-seoul": "kr", - "ap-tokyo": "jp", - "na-siliconvalley": "usw", - "na-ashburn": "use", - "na-toronto": "ca", - "eu-frankfurt": "de", - "eu-moscow": "ru", -} diff --git a/tencentcloud/extension_postgresql.go b/tencentcloud/extension_postgresql.go deleted file mode 100644 index 759084d843..0000000000 --- a/tencentcloud/extension_postgresql.go +++ /dev/null @@ -1,57 +0,0 @@ -package tencentcloud - -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/extension_redis.go b/tencentcloud/extension_redis.go deleted file mode 100644 index e3a9ab18bb..0000000000 --- a/tencentcloud/extension_redis.go +++ /dev/null @@ -1,95 +0,0 @@ -package tencentcloud - -//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/extension_security_group.go b/tencentcloud/extension_security_group.go deleted file mode 100644 index bea01919c4..0000000000 --- a/tencentcloud/extension_security_group.go +++ /dev/null @@ -1,3 +0,0 @@ -package tencentcloud - -const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/extension_ssl.go b/tencentcloud/extension_ssl.go deleted file mode 100644 index d12f168dd6..0000000000 --- a/tencentcloud/extension_ssl.go +++ /dev/null @@ -1,88 +0,0 @@ -package tencentcloud - -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/extension_tags.go b/tencentcloud/extension_tags.go deleted file mode 100644 index b1a1923f9d..0000000000 --- a/tencentcloud/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package tencentcloud - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/extension_tke.go b/tencentcloud/extension_tke.go deleted file mode 100644 index 8b0170dce7..0000000000 --- a/tencentcloud/extension_tke.go +++ /dev/null @@ -1,145 +0,0 @@ -package tencentcloud - -import tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - -const ( - TKE_CLUSTER_OS_CENTOS72 = "centos7.2x86_64" - TKE_CLUSTER_OS_CENTOS76 = "centos7.6.0_x64" - TKE_CLUSTER_OS_UBUNTU18 = "ubuntu18.04.1x86_64" - TKE_CLUSTER_OS_LINUX24 = "tlinux2.4x86_64" - TKE_CLUSTER_OS_LINUX22 = "tlinux2.2(tkernel3)x86_64" - TKE_CLUSTER_OS_LINUXF22 = "Tencent tlinux release 2.2 (Final)" -) - -// 兼容旧的 cluster_os 定义 -const ( - TkeClusterOsCentOS76 = "centos7.6x86_64" - //TkeClusterOsUbuntu16 = "ubuntu16.04.1 LTSx86_64" - TkeClusterOsUbuntu18 = "ubuntu18.04.1 LTSx86_64" -) - -var TKE_CLUSTER_OS = []string{TKE_CLUSTER_OS_CENTOS76, TKE_CLUSTER_OS_UBUNTU18, TKE_CLUSTER_OS_LINUX24} - -var tkeClusterOsMap = map[string]string{TKE_CLUSTER_OS_CENTOS72: TKE_CLUSTER_OS_CENTOS72, - TKE_CLUSTER_OS_CENTOS76: TKE_CLUSTER_OS_CENTOS76, - TKE_CLUSTER_OS_UBUNTU18: TKE_CLUSTER_OS_UBUNTU18, - TKE_CLUSTER_OS_LINUX24: TKE_CLUSTER_OS_LINUX24, - TKE_CLUSTER_OS_LINUX22: TKE_CLUSTER_OS_LINUX22, - TKE_CLUSTER_OS_LINUXF22: TKE_CLUSTER_OS_LINUXF22, -} - -func tkeToShowClusterOs(apiOs string) string { - for showName, apiName := range tkeClusterOsMap { - if apiName == apiOs { - return showName - } - } - return apiOs -} - -const ( - TKE_DEPLOY_TYPE_MANAGED = "MANAGED_CLUSTER" - TKE_DEPLOY_TYPE_INDEPENDENT = "INDEPENDENT_CLUSTER" -) - -var TKE_DEPLOY_TYPES = []string{TKE_DEPLOY_TYPE_MANAGED, TKE_DEPLOY_TYPE_INDEPENDENT} - -const ( - TKE_RUNTIME_DOCKER = "docker" - TKE_RUNTIME_CONTAINERD = "containerd" -) - -var TKE_RUNTIMES = []string{TKE_RUNTIME_DOCKER, TKE_RUNTIME_CONTAINERD} - -const ( - TKE_ROLE_MASTER_ETCD = "MASTER_ETCD" - TKE_ROLE_WORKER = "WORKER" -) - -var TKE_INSTANCE_CHARGE_TYPE = []string{CVM_CHARGE_TYPE_PREPAID, CVM_CHARGE_TYPE_POSTPAID} - -const ( - TKE_CLUSTER_OS_TYPE_DOCKER_CUSTOMIZE = "DOCKER_CUSTOMIZE" - TKE_CLUSTER_OS_TYPE_GENERAL = "GENERAL" -) - -var TKE_CLUSTER_OS_TYPES = []string{TKE_CLUSTER_OS_TYPE_GENERAL} - -const ( - TkeInternetStatusCreating = "Creating" - TkeInternetStatusCreateFailed = "CreateFailed" - TkeInternetStatusCreated = "Created" - TkeInternetStatusDeleting = "Deleting" - TkeInternetStatusDeleted = "Deleted" - TkeInternetStatusDeletedFailed = "DeletedFailed" - TkeInternetStatusNotfound = "NotFound" -) - -const ( - TKE_CLUSTER_NETWORK_TYPE_GR = "GR" - TKE_CLUSTER_NETWORK_TYPE_VPC_CNI = "VPC-CNI" - TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY = "CiliumOverlay" -) - -const ( - TKE_CLUSTER_VPC_CNI_STATUS_RUNNING = "Running" - TKE_CLUSTER_VPC_CNI_STATUS_SUCCEED = "Succeed" - TKE_CLUSTER_VPC_CNI_STATUS_FAILED = "Failed" -) - -var TKE_CLUSTER_NETWORK_TYPE = []string{TKE_CLUSTER_NETWORK_TYPE_GR, TKE_CLUSTER_NETWORK_TYPE_VPC_CNI, TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY} - -const ( - TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP = "lan-ip" - TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME = "hostname" -) - -var TKE_CLUSTER_NODE_NAME_TYPE = []string{TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP, TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME} - -const ( - TKE_CLUSTER_KUBE_PROXY_MODE_BPF = "kube-proxy-bpf" -) - -var TKE_CLUSTER_KUBE_PROXY_MODE = []string{TKE_CLUSTER_KUBE_PROXY_MODE_BPF} - -type OverrideSettings struct { - Master []tke.InstanceAdvancedSettings - Work []tke.InstanceAdvancedSettings -} - -const ( - DefaultDesiredPodNum = 0 -) - -const ( - DefaultAuthenticationOptionsIssuer = "https://kubernetes.default.svc.cluster.local" -) - -// This use to filter default values the addon returns. -var TKE_ADDON_DEFAULT_VALUES_KEY = []string{ - "global.image.host", - "global.cluster.id", - "global.cluster.appid", - "global.cluster.uin", - "global.cluster.subuin", - "global.cluster.type", - "global.cluster.clustertype", - "global.cluster.kubeversion", - "global.cluster.kubeminor", -} - -const ( - InstallSecurityAgentCommandId = "cmd-d8jj2skv" -) - -const ( - TKE_CLUSTER_INTERNET = true - TKE_CLUSTER_INTRANET = false - - TKE_CLUSTER_OPEN_ACCESS = true - TKE_CLUSTER_CLOSE_ACCESS = false -) - -const ( - backupStorageLocationStateAvailable = "Available" -) diff --git a/tencentcloud/extension_vpc.go b/tencentcloud/extension_vpc.go deleted file mode 100644 index 357396b238..0000000000 --- a/tencentcloud/extension_vpc.go +++ /dev/null @@ -1,339 +0,0 @@ -package tencentcloud - -/* - 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 ( - ROUTE_TYPE_STATIC = "STATIC" - ROUTE_TYPE_STATIC_ROUTE = "StaticRoute" - ROUTE_TYPE_POLICY = "Policy" -) - -var VPN_CONNECTION_ROUTE_TYPE = []string{ - ROUTE_TYPE_STATIC, - ROUTE_TYPE_STATIC_ROUTE, - ROUTE_TYPE_POLICY, -} - -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/internal/helper/helper.go b/tencentcloud/internal/helper/helper.go index b60da06435..ce20cd8df8 100644 --- a/tencentcloud/internal/helper/helper.go +++ b/tencentcloud/internal/helper/helper.go @@ -149,8 +149,8 @@ func DiffSupressJSON(k, olds, news string, d *schema.ResourceData) bool { } /* - Serialize slice into the usage document - eg["status_change","abnormal"] will be "`abnormal`,`status_change`" + Serialize slice into the usage document + eg["status_change","abnormal"] will be "`abnormal`,`status_change`" */ func SliceFieldSerialize(slice []string) string { types := []string{} diff --git a/tencentcloud/pkgkey.go b/tencentcloud/pkgkey.go deleted file mode 100644 index 098bdddb5d..0000000000 --- a/tencentcloud/pkgkey.go +++ /dev/null @@ -1,193 +0,0 @@ -package tencentcloud - -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/provider.go b/tencentcloud/provider.go index 820fc76615..eb92d41f82 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -10,12 +10,39 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/wedata" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tmp" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tpulsar" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trabbit" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpn" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/waf" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tco" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdcpg" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tat" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcaplusdb" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcmg" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcmq" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" sdkcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - sts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts/v20180813" + sdksts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts/v20180813" - providercommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + 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" @@ -79,6 +106,13 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/project" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/pts" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/rum" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/scf" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ses" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sms" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssl" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssm" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sts" ) const ( @@ -106,7 +140,7 @@ type TencentCloudClient struct { apiV3Conn *connectivity.TencentCloudClient } -var _ providercommon.ProviderMeta = &TencentCloudClient{} +var _ tccommon.ProviderMeta = &TencentCloudClient{} // GetAPIV3Conn 返回访问云 API 的客户端连接对象 func (meta *TencentCloudClient) GetAPIV3Conn() *connectivity.TencentCloudClient { @@ -146,7 +180,7 @@ func Provider() *schema.Provider { Type: schema.TypeString, Optional: true, DefaultFunc: schema.EnvDefaultFunc(PROVIDER_PROTOCOL, "HTTPS"), - ValidateFunc: validateAllowedStringValue([]string{"HTTP", "HTTPS"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"HTTP", "HTTPS"}), Description: "The protocol of the API request. Valid values: `HTTP` and `HTTPS`. Default is `HTTPS`.", }, "domain": { @@ -185,7 +219,7 @@ func Provider() *schema.Provider { } return 7200, nil }, - ValidateFunc: validateIntegerInRange(0, 43200), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 43200), Description: "The duration of the session when making the AssumeRole call. Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. It can be sourced from the `TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION`.", }, "policy": { @@ -228,46 +262,46 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_vpc": dataSourceTencentCloudVpc(), - "tencentcloud_vpc_acls": dataSourceTencentCloudVpcAcls(), - "tencentcloud_vpc_bandwidth_package_quota": dataSourceTencentCloudVpcBandwidthPackageQuota(), - "tencentcloud_vpc_bandwidth_package_bill_usage": dataSourceTencentCloudVpcBandwidthPackageBillUsage(), - "tencentcloud_vpc_account_attributes": dataSourceTencentCloudVpcAccountAttributes(), - "tencentcloud_vpc_classic_link_instances": dataSourceTencentCloudVpcClassicLinkInstances(), - "tencentcloud_vpc_gateway_flow_monitor_detail": dataSourceTencentCloudVpcGatewayFlowMonitorDetail(), - "tencentcloud_vpc_gateway_flow_qos": dataSourceTencentCloudVpcGatewayFlowQos(), - "tencentcloud_vpc_cvm_instances": dataSourceTencentCloudVpcCvmInstances(), - "tencentcloud_vpc_net_detect_states": dataSourceTencentCloudVpcNetDetectStates(), - "tencentcloud_vpc_network_interface_limit": dataSourceTencentCloudVpcNetworkInterfaceLimit(), - "tencentcloud_vpc_private_ip_addresses": dataSourceTencentCloudVpcPrivateIpAddresses(), - "tencentcloud_vpc_product_quota": dataSourceTencentCloudVpcProductQuota(), - "tencentcloud_vpc_resource_dashboard": dataSourceTencentCloudVpcResourceDashboard(), - "tencentcloud_vpc_route_conflicts": dataSourceTencentCloudVpcRouteConflicts(), - "tencentcloud_vpc_security_group_limits": dataSourceTencentCloudVpcSecurityGroupLimits(), - "tencentcloud_vpc_security_group_references": dataSourceTencentCloudVpcSecurityGroupReferences(), - "tencentcloud_vpc_sg_snapshot_file_content": dataSourceTencentCloudVpcSgSnapshotFileContent(), - "tencentcloud_vpc_snapshot_files": dataSourceTencentCloudVpcSnapshotFiles(), - "tencentcloud_vpc_subnet_resource_dashboard": dataSourceTencentCloudVpcSubnetResourceDashboard(), - "tencentcloud_vpc_template_limits": dataSourceTencentCloudVpcTemplateLimits(), - "tencentcloud_vpc_limits": dataSourceTencentCloudVpcLimits(), - "tencentcloud_vpc_used_ip_address": dataSourceTencentCloudVpcUsedIpAddress(), - "tencentcloud_vpc_net_detect_state_check": dataSourceTencentCloudVpcNetDetectStateCheck(), - "tencentcloud_subnet": dataSourceTencentCloudSubnet(), - "tencentcloud_route_table": dataSourceTencentCloudRouteTable(), + "tencentcloud_vpc_instances": vpc.DataSourceTencentCloudVpcInstances(), + "tencentcloud_vpc_subnets": vpc.DataSourceTencentCloudVpcSubnets(), + "tencentcloud_vpc_route_tables": vpc.DataSourceTencentCloudVpcRouteTables(), + "tencentcloud_vpc": vpc.DataSourceTencentCloudVpc(), + "tencentcloud_vpc_acls": vpc.DataSourceTencentCloudVpcAcls(), + "tencentcloud_vpc_bandwidth_package_quota": vpc.DataSourceTencentCloudVpcBandwidthPackageQuota(), + "tencentcloud_vpc_bandwidth_package_bill_usage": vpc.DataSourceTencentCloudVpcBandwidthPackageBillUsage(), + "tencentcloud_vpc_account_attributes": vpc.DataSourceTencentCloudVpcAccountAttributes(), + "tencentcloud_vpc_classic_link_instances": vpc.DataSourceTencentCloudVpcClassicLinkInstances(), + "tencentcloud_vpc_gateway_flow_monitor_detail": vpc.DataSourceTencentCloudVpcGatewayFlowMonitorDetail(), + "tencentcloud_vpc_gateway_flow_qos": vpc.DataSourceTencentCloudVpcGatewayFlowQos(), + "tencentcloud_vpc_cvm_instances": vpc.DataSourceTencentCloudVpcCvmInstances(), + "tencentcloud_vpc_net_detect_states": vpc.DataSourceTencentCloudVpcNetDetectStates(), + "tencentcloud_vpc_network_interface_limit": vpc.DataSourceTencentCloudVpcNetworkInterfaceLimit(), + "tencentcloud_vpc_private_ip_addresses": vpc.DataSourceTencentCloudVpcPrivateIpAddresses(), + "tencentcloud_vpc_product_quota": vpc.DataSourceTencentCloudVpcProductQuota(), + "tencentcloud_vpc_resource_dashboard": vpc.DataSourceTencentCloudVpcResourceDashboard(), + "tencentcloud_vpc_route_conflicts": vpc.DataSourceTencentCloudVpcRouteConflicts(), + "tencentcloud_vpc_security_group_limits": vpc.DataSourceTencentCloudVpcSecurityGroupLimits(), + "tencentcloud_vpc_security_group_references": vpc.DataSourceTencentCloudVpcSecurityGroupReferences(), + "tencentcloud_vpc_sg_snapshot_file_content": vpc.DataSourceTencentCloudVpcSgSnapshotFileContent(), + "tencentcloud_vpc_snapshot_files": vpc.DataSourceTencentCloudVpcSnapshotFiles(), + "tencentcloud_vpc_subnet_resource_dashboard": vpc.DataSourceTencentCloudVpcSubnetResourceDashboard(), + "tencentcloud_vpc_template_limits": vpc.DataSourceTencentCloudVpcTemplateLimits(), + "tencentcloud_vpc_limits": vpc.DataSourceTencentCloudVpcLimits(), + "tencentcloud_vpc_used_ip_address": vpc.DataSourceTencentCloudVpcUsedIpAddress(), + "tencentcloud_vpc_net_detect_state_check": vpc.DataSourceTencentCloudVpcNetDetectStateCheck(), + "tencentcloud_subnet": vpc.DataSourceTencentCloudSubnet(), + "tencentcloud_route_table": vpc.DataSourceTencentCloudRouteTable(), "tencentcloud_domains": domain.DataSourceTencentCloudDomains(), "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(), - "tencentcloud_nat_gateways": dataSourceTencentCloudNatGateways(), - "tencentcloud_nat_gateway_snats": dataSourceTencentCloudNatGatewaySnats(), - "tencentcloud_nat_dc_route": dataSourceTencentCloudNatDcRoute(), + "tencentcloud_enis": vpc.DataSourceTencentCloudEnis(), + "tencentcloud_nats": vpc.DataSourceTencentCloudNats(), + "tencentcloud_dnats": vpc.DataSourceTencentCloudDnats(), + "tencentcloud_nat_gateways": vpc.DataSourceTencentCloudNatGateways(), + "tencentcloud_nat_gateway_snats": vpc.DataSourceTencentCloudNatGatewaySnats(), + "tencentcloud_nat_dc_route": vpc.DataSourceTencentCloudNatDcRoute(), "tencentcloud_oceanus_resource_related_job": oceanus.DataSourceTencentCloudOceanusResourceRelatedJob(), "tencentcloud_oceanus_savepoint_list": oceanus.DataSourceTencentCloudOceanusSavepointList(), "tencentcloud_oceanus_system_resource": oceanus.DataSourceTencentCloudOceanusSystemResource(), @@ -277,14 +311,14 @@ func Provider() *schema.Provider { "tencentcloud_oceanus_tree_resources": oceanus.DataSourceTencentCloudOceanusTreeResources(), "tencentcloud_oceanus_job_submission_log": oceanus.DataSourceTencentCloudOceanusJobSubmissionLog(), "tencentcloud_oceanus_check_savepoint": oceanus.DataSourceTencentCloudOceanusCheckSavepoint(), - "tencentcloud_vpn_customer_gateways": dataSourceTencentCloudVpnCustomerGateways(), - "tencentcloud_vpn_gateways": dataSourceTencentCloudVpnGateways(), - "tencentcloud_vpn_gateway_routes": dataSourceTencentCloudVpnGatewayRoutes(), - "tencentcloud_vpn_connections": dataSourceTencentCloudVpnConnections(), - "tencentcloud_vpn_customer_gateway_vendors": dataSourceTencentCloudVpnCustomerGatewayVendors(), - "tencentcloud_vpn_default_health_check_ip": dataSourceTencentCloudVpnDefaultHealthCheckIp(), - "tencentcloud_ha_vips": dataSourceTencentCloudHaVips(), - "tencentcloud_ha_vip_eip_attachments": dataSourceTencentCloudHaVipEipAttachments(), + "tencentcloud_vpn_customer_gateways": vpn.DataSourceTencentCloudVpnCustomerGateways(), + "tencentcloud_vpn_gateways": vpn.DataSourceTencentCloudVpnGateways(), + "tencentcloud_vpn_gateway_routes": vpn.DataSourceTencentCloudVpnGatewayRoutes(), + "tencentcloud_vpn_connections": vpn.DataSourceTencentCloudVpnConnections(), + "tencentcloud_vpn_customer_gateway_vendors": vpn.DataSourceTencentCloudVpnCustomerGatewayVendors(), + "tencentcloud_vpn_default_health_check_ip": vpn.DataSourceTencentCloudVpnDefaultHealthCheckIp(), + "tencentcloud_ha_vips": vpc.DataSourceTencentCloudHaVips(), + "tencentcloud_ha_vip_eip_attachments": vpc.DataSourceTencentCloudHaVipEipAttachments(), "tencentcloud_ccn_instances": ccn.DataSourceTencentCloudCcnInstances(), "tencentcloud_ccn_bandwidth_limits": ccn.DataSourceTencentCloudCcnBandwidthLimits(), "tencentcloud_ccn_cross_border_compliance": ccn.DataSourceTencentCloudCcnCrossBorderCompliance(), @@ -299,18 +333,18 @@ func Provider() *schema.Provider { "tencentcloud_dcx_instances": dc.DataSourceTencentCloudDcxInstances(), "tencentcloud_dc_gateway_instances": dcg.DataSourceTencentCloudDcGatewayInstances(), "tencentcloud_dc_gateway_ccn_routes": dcg.DataSourceTencentCloudDcGatewayCCNRoutes(), - "tencentcloud_security_group": dataSourceTencentCloudSecurityGroup(), - "tencentcloud_security_groups": dataSourceTencentCloudSecurityGroups(), - "tencentcloud_kubernetes_clusters": dataSourceTencentCloudKubernetesClusters(), - "tencentcloud_kubernetes_charts": dataSourceTencentCloudKubernetesCharts(), - "tencentcloud_kubernetes_cluster_levels": datasourceTencentCloudKubernetesClusterLevels(), - "tencentcloud_kubernetes_cluster_common_names": datasourceTencentCloudKubernetesClusterCommonNames(), - "tencentcloud_kubernetes_cluster_authentication_options": dataSourceTencentCloudKubernetesClusterAuthenticationOptions(), - "tencentcloud_kubernetes_available_cluster_versions": dataSourceTencentCloudKubernetesAvailableClusterVersions(), - "tencentcloud_eks_clusters": dataSourceTencentCloudEKSClusters(), - "tencentcloud_eks_cluster_credential": datasourceTencentCloudEksClusterCredential(), - "tencentcloud_container_clusters": dataSourceTencentCloudContainerClusters(), - "tencentcloud_container_cluster_instances": dataSourceTencentCloudContainerClusterInstances(), + "tencentcloud_security_group": vpc.DataSourceTencentCloudSecurityGroup(), + "tencentcloud_security_groups": vpc.DataSourceTencentCloudSecurityGroups(), + "tencentcloud_kubernetes_clusters": tke.DataSourceTencentCloudKubernetesClusters(), + "tencentcloud_kubernetes_charts": tke.DataSourceTencentCloudKubernetesCharts(), + "tencentcloud_kubernetes_cluster_levels": tke.DataSourceTencentCloudKubernetesClusterLevels(), + "tencentcloud_kubernetes_cluster_common_names": tke.DataSourceTencentCloudKubernetesClusterCommonNames(), + "tencentcloud_kubernetes_cluster_authentication_options": tke.DataSourceTencentCloudKubernetesClusterAuthenticationOptions(), + "tencentcloud_kubernetes_available_cluster_versions": tke.DataSourceTencentCloudKubernetesAvailableClusterVersions(), + "tencentcloud_eks_clusters": tke.DataSourceTencentCloudEKSClusters(), + "tencentcloud_eks_cluster_credential": tke.DataSourceTencentCloudEksClusterCredential(), + "tencentcloud_container_clusters": tke.DataSourceTencentCloudContainerClusters(), + "tencentcloud_container_cluster_instances": tke.DataSourceTencentCloudContainerClusterInstances(), "tencentcloud_mysql_backup_list": cdb.DataSourceTencentCloudMysqlBackupList(), "tencentcloud_mysql_zone_config": cdb.DataSourceTencentCloudMysqlZoneConfig(), "tencentcloud_mysql_parameter_list": cdb.DataSourceTencentCloudMysqlParameterList(), @@ -444,26 +478,26 @@ func Provider() *schema.Provider { "tencentcloud_gaap_group_and_statistics_proxy": gaap.DataSourceTencentCloudGaapGroupAndStatisticsProxy(), "tencentcloud_gaap_domain_error_page_infos": gaap.DataSourceTencentCloudGaapDomainErrorPageInfos(), "tencentcloud_gaap_check_proxy_create": gaap.DataSourceTencentCloudGaapCheckProxyCreate(), - "tencentcloud_ssl_certificates": dataSourceTencentCloudSslCertificates(), - "tencentcloud_ssl_describe_certificate": dataSourceTencentCloudSslDescribeCertificate(), - "tencentcloud_ssl_describe_companies": dataSourceTencentCloudSslDescribeCompanies(), - "tencentcloud_ssl_describe_host_api_gateway_instance_list": dataSourceTencentCloudSslDescribeHostApiGatewayInstanceList(), - "tencentcloud_ssl_describe_host_cdn_instance_list": dataSourceTencentCloudSslDescribeHostCdnInstanceList(), - "tencentcloud_ssl_describe_host_clb_instance_list": dataSourceTencentCloudSslDescribeHostClbInstanceList(), - "tencentcloud_ssl_describe_host_cos_instance_list": dataSourceTencentCloudSslDescribeHostCosInstanceList(), - "tencentcloud_ssl_describe_host_ddos_instance_list": dataSourceTencentCloudSslDescribeHostDdosInstanceList(), - "tencentcloud_ssl_describe_host_lighthouse_instance_list": dataSourceTencentCloudSslDescribeHostLighthouseInstanceList(), - "tencentcloud_ssl_describe_host_live_instance_list": dataSourceTencentCloudSslDescribeHostLiveInstanceList(), - "tencentcloud_ssl_describe_host_teo_instance_list": dataSourceTencentCloudSslDescribeHostTeoInstanceList(), - "tencentcloud_ssl_describe_host_tke_instance_list": dataSourceTencentCloudSslDescribeHostTkeInstanceList(), - "tencentcloud_ssl_describe_host_update_record": dataSourceTencentCloudSslDescribeHostUpdateRecord(), - "tencentcloud_ssl_describe_host_update_record_detail": dataSourceTencentCloudSslDescribeHostUpdateRecordDetail(), - "tencentcloud_ssl_describe_host_vod_instance_list": dataSourceTencentCloudSslDescribeHostVodInstanceList(), - "tencentcloud_ssl_describe_host_waf_instance_list": dataSourceTencentCloudSslDescribeHostWafInstanceList(), - "tencentcloud_ssl_describe_manager_detail": dataSourceTencentCloudSslDescribeManagerDetail(), - "tencentcloud_ssl_describe_managers": dataSourceTencentCloudSslDescribeManagers(), - "tencentcloud_ssl_describe_host_deploy_record": dataSourceTencentCloudSslDescribeHostDeployRecord(), - "tencentcloud_ssl_describe_host_deploy_record_detail": dataSourceTencentCloudSslDescribeHostDeployRecordDetail(), + "tencentcloud_ssl_certificates": ssl.DataSourceTencentCloudSslCertificates(), + "tencentcloud_ssl_describe_certificate": ssl.DataSourceTencentCloudSslDescribeCertificate(), + "tencentcloud_ssl_describe_companies": ssl.DataSourceTencentCloudSslDescribeCompanies(), + "tencentcloud_ssl_describe_host_api_gateway_instance_list": ssl.DataSourceTencentCloudSslDescribeHostApiGatewayInstanceList(), + "tencentcloud_ssl_describe_host_cdn_instance_list": ssl.DataSourceTencentCloudSslDescribeHostCdnInstanceList(), + "tencentcloud_ssl_describe_host_clb_instance_list": ssl.DataSourceTencentCloudSslDescribeHostClbInstanceList(), + "tencentcloud_ssl_describe_host_cos_instance_list": ssl.DataSourceTencentCloudSslDescribeHostCosInstanceList(), + "tencentcloud_ssl_describe_host_ddos_instance_list": ssl.DataSourceTencentCloudSslDescribeHostDdosInstanceList(), + "tencentcloud_ssl_describe_host_lighthouse_instance_list": ssl.DataSourceTencentCloudSslDescribeHostLighthouseInstanceList(), + "tencentcloud_ssl_describe_host_live_instance_list": ssl.DataSourceTencentCloudSslDescribeHostLiveInstanceList(), + "tencentcloud_ssl_describe_host_teo_instance_list": ssl.DataSourceTencentCloudSslDescribeHostTeoInstanceList(), + "tencentcloud_ssl_describe_host_tke_instance_list": ssl.DataSourceTencentCloudSslDescribeHostTkeInstanceList(), + "tencentcloud_ssl_describe_host_update_record": ssl.DataSourceTencentCloudSslDescribeHostUpdateRecord(), + "tencentcloud_ssl_describe_host_update_record_detail": ssl.DataSourceTencentCloudSslDescribeHostUpdateRecordDetail(), + "tencentcloud_ssl_describe_host_vod_instance_list": ssl.DataSourceTencentCloudSslDescribeHostVodInstanceList(), + "tencentcloud_ssl_describe_host_waf_instance_list": ssl.DataSourceTencentCloudSslDescribeHostWafInstanceList(), + "tencentcloud_ssl_describe_manager_detail": ssl.DataSourceTencentCloudSslDescribeManagerDetail(), + "tencentcloud_ssl_describe_managers": ssl.DataSourceTencentCloudSslDescribeManagers(), + "tencentcloud_ssl_describe_host_deploy_record": ssl.DataSourceTencentCloudSslDescribeHostDeployRecord(), + "tencentcloud_ssl_describe_host_deploy_record_detail": ssl.DataSourceTencentCloudSslDescribeHostDeployRecordDetail(), "tencentcloud_cam_roles": cam.DataSourceTencentCloudCamRoles(), "tencentcloud_cam_users": cam.DataSourceTencentCloudCamUsers(), "tencentcloud_cam_groups": cam.DataSourceTencentCloudCamGroups(), @@ -479,23 +513,23 @@ func Provider() *schema.Provider { "tencentcloud_user_info": cam.DataSourceTencentCloudUserInfo(), "tencentcloud_cdn_domains": cdn.DataSourceTencentCloudCdnDomains(), "tencentcloud_cdn_domain_verifier": cdn.DataSourceTencentCloudCdnDomainVerifyRecord(), - "tencentcloud_scf_functions": dataSourceTencentCloudScfFunctions(), - "tencentcloud_scf_namespaces": dataSourceTencentCloudScfNamespaces(), - "tencentcloud_scf_account_info": dataSourceTencentCloudScfAccountInfo(), - "tencentcloud_scf_async_event_management": dataSourceTencentCloudScfAsyncEventManagement(), - "tencentcloud_scf_triggers": dataSourceTencentCloudScfTriggers(), - "tencentcloud_scf_async_event_status": dataSourceTencentCloudScfAsyncEventStatus(), - "tencentcloud_scf_function_address": dataSourceTencentCloudScfFunctionAddress(), - "tencentcloud_scf_request_status": dataSourceTencentCloudScfRequestStatus(), - "tencentcloud_scf_function_aliases": dataSourceTencentCloudScfFunctionAliases(), - "tencentcloud_scf_layer_versions": dataSourceTencentCloudScfLayerVersions(), - "tencentcloud_scf_layers": dataSourceTencentCloudScfLayers(), - "tencentcloud_scf_function_versions": dataSourceTencentCloudScfFunctionVersions(), - "tencentcloud_scf_logs": dataSourceTencentCloudScfLogs(), - "tencentcloud_tcaplus_clusters": dataSourceTencentCloudTcaplusClusters(), - "tencentcloud_tcaplus_tablegroups": dataSourceTencentCloudTcaplusTableGroups(), - "tencentcloud_tcaplus_tables": dataSourceTencentCloudTcaplusTables(), - "tencentcloud_tcaplus_idls": dataSourceTencentCloudTcaplusIdls(), + "tencentcloud_scf_functions": scf.DataSourceTencentCloudScfFunctions(), + "tencentcloud_scf_namespaces": scf.DataSourceTencentCloudScfNamespaces(), + "tencentcloud_scf_account_info": scf.DataSourceTencentCloudScfAccountInfo(), + "tencentcloud_scf_async_event_management": scf.DataSourceTencentCloudScfAsyncEventManagement(), + "tencentcloud_scf_triggers": scf.DataSourceTencentCloudScfTriggers(), + "tencentcloud_scf_async_event_status": scf.DataSourceTencentCloudScfAsyncEventStatus(), + "tencentcloud_scf_function_address": scf.DataSourceTencentCloudScfFunctionAddress(), + "tencentcloud_scf_request_status": scf.DataSourceTencentCloudScfRequestStatus(), + "tencentcloud_scf_function_aliases": scf.DataSourceTencentCloudScfFunctionAliases(), + "tencentcloud_scf_layer_versions": scf.DataSourceTencentCloudScfLayerVersions(), + "tencentcloud_scf_layers": scf.DataSourceTencentCloudScfLayers(), + "tencentcloud_scf_function_versions": scf.DataSourceTencentCloudScfFunctionVersions(), + "tencentcloud_scf_logs": scf.DataSourceTencentCloudScfLogs(), + "tencentcloud_tcaplus_clusters": tcaplusdb.DataSourceTencentCloudTcaplusClusters(), + "tencentcloud_tcaplus_tablegroups": tcaplusdb.DataSourceTencentCloudTcaplusTableGroups(), + "tencentcloud_tcaplus_tables": tcaplusdb.DataSourceTencentCloudTcaplusTables(), + "tencentcloud_tcaplus_idls": tcaplusdb.DataSourceTencentCloudTcaplusIdls(), "tencentcloud_monitor_policy_conditions": monitor.DataSourceTencentCloudMonitorPolicyConditions(), "tencentcloud_monitor_data": monitor.DataSourceTencentCloudMonitorData(), "tencentcloud_monitor_product_event": monitor.DataSourceTencentCloudMonitorProductEvent(), @@ -509,12 +543,12 @@ func Provider() *schema.Provider { "tencentcloud_monitor_alarm_basic_alarms": monitor.DataSourceTencentCloudMonitorAlarmBasicAlarms(), "tencentcloud_monitor_alarm_basic_metric": monitor.DataSourceTencentCloudMonitorAlarmBasicMetric(), "tencentcloud_monitor_alarm_conditions_template": monitor.DataSourceTencentCloudMonitorAlarmConditionsTemplate(), - "tencentcloud_monitor_grafana_plugin_overviews": dataSourceTencentCloudMonitorGrafanaPluginOverviews(), + "tencentcloud_monitor_grafana_plugin_overviews": tcmg.DataSourceTencentCloudMonitorGrafanaPluginOverviews(), "tencentcloud_monitor_alarm_notice_callbacks": monitor.DataSourceTencentCloudMonitorAlarmNoticeCallbacks(), "tencentcloud_monitor_alarm_all_namespaces": monitor.DataSourceTencentCloudMonitorAlarmAllNamespaces(), "tencentcloud_monitor_alarm_monitor_type": monitor.DataSourceTencentCloudMonitorAlarmMonitorType(), - "tencentcloud_monitor_statistic_data": dataSourceTencentCloudMonitorStatisticData(), - "tencentcloud_monitor_tmp_regions": dataSourceTencentCloudMonitorTmpRegions(), + "tencentcloud_monitor_statistic_data": monitor.DataSourceTencentCloudMonitorStatisticData(), + "tencentcloud_monitor_tmp_regions": tmp.DataSourceTencentCloudMonitorTmpRegions(), "tencentcloud_postgresql_instances": postgresql.DataSourceTencentCloudPostgresqlInstances(), "tencentcloud_postgresql_specinfos": postgresql.DataSourceTencentCloudPostgresqlSpecinfos(), "tencentcloud_postgresql_xlogs": postgresql.DataSourceTencentCloudPostgresqlXlogs(), @@ -529,18 +563,18 @@ func Provider() *schema.Provider { "tencentcloud_postgresql_regions": postgresql.DataSourceTencentCloudPostgresqlRegions(), "tencentcloud_postgresql_db_instance_versions": postgresql.DataSourceTencentCloudPostgresqlDbInstanceVersions(), "tencentcloud_postgresql_zones": postgresql.DataSourceTencentCloudPostgresqlZones(), - "tencentcloud_sqlserver_zone_config": dataSourceTencentSqlserverZoneConfig(), - "tencentcloud_sqlserver_instances": dataSourceTencentCloudSqlserverInstances(), - "tencentcloud_sqlserver_backups": dataSourceTencentCloudSqlserverBackups(), - "tencentcloud_sqlserver_dbs": dataSourceTencentSqlserverDBs(), - "tencentcloud_sqlserver_accounts": dataSourceTencentCloudSqlserverAccounts(), - "tencentcloud_sqlserver_account_db_attachments": dataSourceTencentCloudSqlserverAccountDBAttachments(), - "tencentcloud_sqlserver_readonly_groups": dataSourceTencentCloudSqlserverReadonlyGroups(), - "tencentcloud_sqlserver_backup_commands": dataSourceTencentCloudSqlserverBackupCommands(), - "tencentcloud_sqlserver_backup_by_flow_id": dataSourceTencentCloudSqlserverBackupByFlowId(), - "tencentcloud_sqlserver_backup_upload_size": dataSourceTencentCloudSqlserverBackupUploadSize(), - "tencentcloud_sqlserver_cross_region_zone": dataSourceTencentCloudSqlserverCrossRegionZone(), - "tencentcloud_sqlserver_db_charsets": dataSourceTencentCloudSqlserverDBCharsets(), + "tencentcloud_sqlserver_zone_config": sqlserver.DataSourceTencentCloudSqlserverZoneConfig(), + "tencentcloud_sqlserver_instances": sqlserver.DataSourceTencentCloudSqlserverInstances(), + "tencentcloud_sqlserver_backups": sqlserver.DataSourceTencentCloudSqlserverBackups(), + "tencentcloud_sqlserver_dbs": sqlserver.DataSourceTencentCloudSqlserverDBs(), + "tencentcloud_sqlserver_accounts": sqlserver.DataSourceTencentCloudSqlserverAccounts(), + "tencentcloud_sqlserver_account_db_attachments": sqlserver.DataSourceTencentCloudSqlserverAccountDBAttachments(), + "tencentcloud_sqlserver_readonly_groups": sqlserver.DataSourceTencentCloudSqlserverReadonlyGroups(), + "tencentcloud_sqlserver_backup_commands": sqlserver.DataSourceTencentCloudSqlserverBackupCommands(), + "tencentcloud_sqlserver_backup_by_flow_id": sqlserver.DataSourceTencentCloudSqlserverBackupByFlowId(), + "tencentcloud_sqlserver_backup_upload_size": sqlserver.DataSourceTencentCloudSqlserverBackupUploadSize(), + "tencentcloud_sqlserver_cross_region_zone": sqlserver.DataSourceTencentCloudSqlserverCrossRegionZone(), + "tencentcloud_sqlserver_db_charsets": sqlserver.DataSourceTencentCloudSqlserverDBCharsets(), "tencentcloud_ckafka_users": ckafka.DataSourceTencentCloudCkafkaUsers(), "tencentcloud_ckafka_acls": ckafka.DataSourceTencentCloudCkafkaAcls(), "tencentcloud_ckafka_topics": ckafka.DataSourceTencentCloudCkafkaTopics(), @@ -566,19 +600,19 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_vod_snapshot_by_time_offset_templates": dataSourceTencentCloudVodSnapshotByTimeOffsetTemplates(), - "tencentcloud_vod_super_player_configs": dataSourceTencentCloudVodSuperPlayerConfigs(), - "tencentcloud_sqlserver_publish_subscribes": dataSourceTencentSqlserverPublishSubscribes(), - "tencentcloud_sqlserver_instance_param_records": dataSourceTencentCloudSqlserverInstanceParamRecords(), - "tencentcloud_sqlserver_project_security_groups": dataSourceTencentCloudSqlserverProjectSecurityGroups(), - "tencentcloud_sqlserver_regions": dataSourceTencentCloudSqlserverRegions(), - "tencentcloud_sqlserver_rollback_time": dataSourceTencentCloudSqlserverRollbackTime(), - "tencentcloud_sqlserver_slowlogs": dataSourceTencentCloudSqlserverSlowlogs(), - "tencentcloud_sqlserver_upload_backup_info": dataSourceTencentCloudSqlserverUploadBackupInfo(), - "tencentcloud_sqlserver_upload_incremental_info": dataSourceTencentCloudSqlserverUploadIncrementalInfo(), + "tencentcloud_vod_adaptive_dynamic_streaming_templates": vod.DataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates(), + "tencentcloud_vod_image_sprite_templates": vod.DataSourceTencentCloudVodImageSpriteTemplates(), + "tencentcloud_vod_procedure_templates": vod.DataSourceTencentCloudVodProcedureTemplates(), + "tencentcloud_vod_snapshot_by_time_offset_templates": vod.DataSourceTencentCloudVodSnapshotByTimeOffsetTemplates(), + "tencentcloud_vod_super_player_configs": vod.DataSourceTencentCloudVodSuperPlayerConfigs(), + "tencentcloud_sqlserver_publish_subscribes": sqlserver.DataSourceTencentCloudSqlserverPublishSubscribes(), + "tencentcloud_sqlserver_instance_param_records": sqlserver.DataSourceTencentCloudSqlserverInstanceParamRecords(), + "tencentcloud_sqlserver_project_security_groups": sqlserver.DataSourceTencentCloudSqlserverProjectSecurityGroups(), + "tencentcloud_sqlserver_regions": sqlserver.DataSourceTencentCloudSqlserverRegions(), + "tencentcloud_sqlserver_rollback_time": sqlserver.DataSourceTencentCloudSqlserverRollbackTime(), + "tencentcloud_sqlserver_slowlogs": sqlserver.DataSourceTencentCloudSqlserverSlowlogs(), + "tencentcloud_sqlserver_upload_backup_info": sqlserver.DataSourceTencentCloudSqlserverUploadBackupInfo(), + "tencentcloud_sqlserver_upload_incremental_info": sqlserver.DataSourceTencentCloudSqlserverUploadIncrementalInfo(), "tencentcloud_api_gateway_usage_plans": apigateway.DataSourceTencentCloudAPIGatewayUsagePlans(), "tencentcloud_api_gateway_ip_strategies": apigateway.DataSourceTencentCloudAPIGatewayIpStrategy(), "tencentcloud_api_gateway_customer_domains": apigateway.DataSourceTencentCloudAPIGatewayCustomerDomains(), @@ -597,26 +631,26 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_sqlserver_desc_ha_log": dataSourceTencentCloudSqlserverDescHaLog(), - "tencentcloud_tcr_instances": dataSourceTencentCloudTCRInstances(), - "tencentcloud_tcr_namespaces": dataSourceTencentCloudTCRNamespaces(), - "tencentcloud_tcr_tokens": dataSourceTencentCloudTCRTokens(), - "tencentcloud_tcr_vpc_attachments": dataSourceTencentCloudTCRVPCAttachments(), - "tencentcloud_tcr_repositories": dataSourceTencentCloudTCRRepositories(), - "tencentcloud_tcr_webhook_trigger_logs": dataSourceTencentCloudTcrWebhookTriggerLogs(), - "tencentcloud_tcr_images": dataSourceTencentCloudTcrImages(), - "tencentcloud_tcr_image_manifests": dataSourceTencentCloudTcrImageManifests(), - "tencentcloud_tcr_tag_retention_execution_tasks": dataSourceTencentCloudTcrTagRetentionExecutionTasks(), - "tencentcloud_tcr_tag_retention_executions": dataSourceTencentCloudTcrTagRetentionExecutions(), - "tencentcloud_tcr_replication_instance_create_tasks": dataSourceTencentCloudTcrReplicationInstanceCreateTasks(), - "tencentcloud_tcr_replication_instance_sync_status": dataSourceTencentCloudTcrReplicationInstanceSyncStatus(), - "tencentcloud_address_templates": dataSourceTencentCloudAddressTemplates(), - "tencentcloud_address_template_groups": dataSourceTencentCloudAddressTemplateGroups(), - "tencentcloud_protocol_templates": dataSourceTencentCloudProtocolTemplates(), - "tencentcloud_protocol_template_groups": dataSourceTencentCloudProtocolTemplateGroups(), + "tencentcloud_sqlserver_basic_instances": sqlserver.DataSourceTencentCloudSqlserverBasicInstances(), + "tencentcloud_sqlserver_query_xevent": sqlserver.DataSourceTencentCloudSqlserverQueryXevent(), + "tencentcloud_sqlserver_ins_attribute": sqlserver.DataSourceTencentCloudSqlserverInsAttribute(), + "tencentcloud_sqlserver_desc_ha_log": sqlserver.DataSourceTencentCloudSqlserverDescHaLog(), + "tencentcloud_tcr_instances": tcr.DataSourceTencentCloudTCRInstances(), + "tencentcloud_tcr_namespaces": tcr.DataSourceTencentCloudTCRNamespaces(), + "tencentcloud_tcr_tokens": tcr.DataSourceTencentCloudTCRTokens(), + "tencentcloud_tcr_vpc_attachments": tcr.DataSourceTencentCloudTCRVPCAttachments(), + "tencentcloud_tcr_repositories": tcr.DataSourceTencentCloudTCRRepositories(), + "tencentcloud_tcr_webhook_trigger_logs": tcr.DataSourceTencentCloudTcrWebhookTriggerLogs(), + "tencentcloud_tcr_images": tcr.DataSourceTencentCloudTcrImages(), + "tencentcloud_tcr_image_manifests": tcr.DataSourceTencentCloudTcrImageManifests(), + "tencentcloud_tcr_tag_retention_execution_tasks": tcr.DataSourceTencentCloudTcrTagRetentionExecutionTasks(), + "tencentcloud_tcr_tag_retention_executions": tcr.DataSourceTencentCloudTcrTagRetentionExecutions(), + "tencentcloud_tcr_replication_instance_create_tasks": tcr.DataSourceTencentCloudTcrReplicationInstanceCreateTasks(), + "tencentcloud_tcr_replication_instance_sync_status": tcr.DataSourceTencentCloudTcrReplicationInstanceSyncStatus(), + "tencentcloud_address_templates": vpc.DataSourceTencentCloudAddressTemplates(), + "tencentcloud_address_template_groups": vpc.DataSourceTencentCloudAddressTemplateGroups(), + "tencentcloud_protocol_templates": vpc.DataSourceTencentCloudProtocolTemplates(), + "tencentcloud_protocol_template_groups": vpc.DataSourceTencentCloudProtocolTemplateGroups(), "tencentcloud_kms_keys": kms.DataSourceTencentCloudKmsKeys(), "tencentcloud_kms_public_key": kms.DataSourceTencentCloudKmsPublicKey(), "tencentcloud_kms_get_parameters_for_import": kms.DataSourceTencentCloudKmsGetParametersForImport(), @@ -626,18 +660,18 @@ func Provider() *schema.Provider { "tencentcloud_kms_white_box_decrypt_key": kms.DataSourceTencentCloudKmsWhiteBoxDecryptKey(), "tencentcloud_kms_white_box_device_fingerprints": kms.DataSourceTencentCloudKmsWhiteBoxDeviceFingerprints(), "tencentcloud_kms_list_algorithms": kms.DataSourceTencentCloudKmsListAlgorithms(), - "tencentcloud_ssm_products": dataSourceTencentCloudSsmProducts(), - "tencentcloud_ssm_secrets": dataSourceTencentCloudSsmSecrets(), - "tencentcloud_ssm_secret_versions": dataSourceTencentCloudSsmSecretVersions(), - "tencentcloud_ssm_rotation_detail": dataSourceTencentCloudSsmRotationDetail(), - "tencentcloud_ssm_rotation_history": dataSourceTencentCloudSsmRotationHistory(), - "tencentcloud_ssm_service_status": dataSourceTencentCloudSsmServiceStatus(), - "tencentcloud_ssm_ssh_key_pair_value": dataSourceTencentCloudSsmSshKeyPairValue(), + "tencentcloud_ssm_products": ssm.DataSourceTencentCloudSsmProducts(), + "tencentcloud_ssm_secrets": ssm.DataSourceTencentCloudSsmSecrets(), + "tencentcloud_ssm_secret_versions": ssm.DataSourceTencentCloudSsmSecretVersions(), + "tencentcloud_ssm_rotation_detail": ssm.DataSourceTencentCloudSsmRotationDetail(), + "tencentcloud_ssm_rotation_history": ssm.DataSourceTencentCloudSsmRotationHistory(), + "tencentcloud_ssm_service_status": ssm.DataSourceTencentCloudSsmServiceStatus(), + "tencentcloud_ssm_ssh_key_pair_value": ssm.DataSourceTencentCloudSsmSshKeyPairValue(), "tencentcloud_cdh_instances": cdh.DataSourceTencentCloudCdhInstances(), "tencentcloud_dayu_eip": dayuv2.DataSourceTencentCloudDayuEip(), - "tencentcloud_teo_zone_available_plans": dataSourceTencentCloudTeoZoneAvailablePlans(), - "tencentcloud_teo_rule_engine_settings": dataSourceTencentCloudTeoRuleEngineSettings(), - "tencentcloud_sts_caller_identity": dataSourceTencentCloudStsCallerIdentity(), + "tencentcloud_teo_zone_available_plans": teo.DataSourceTencentCloudTeoZoneAvailablePlans(), + "tencentcloud_teo_rule_engine_settings": teo.DataSourceTencentCloudTeoRuleEngineSettings(), + "tencentcloud_sts_caller_identity": sts.DataSourceTencentCloudStsCallerIdentity(), "tencentcloud_dcdb_instances": dcdb.DataSourceTencentCloudDcdbInstances(), "tencentcloud_dcdb_accounts": dcdb.DataSourceTencentCloudDcdbAccounts(), "tencentcloud_dcdb_databases": dcdb.DataSourceTencentCloudDcdbDatabases(), @@ -682,8 +716,8 @@ func Provider() *schema.Provider { "tencentcloud_mps_parse_live_stream_process_notification": mps.DataSourceTencentCloudMpsParseLiveStreamProcessNotification(), "tencentcloud_mps_parse_notification": mps.DataSourceTencentCloudMpsParseNotification(), "tencentcloud_mps_media_meta_data": mps.DataSourceTencentCloudMpsMediaMetaData(), - "tencentcloud_tdcpg_clusters": dataSourceTencentCloudTdcpgClusters(), - "tencentcloud_tdcpg_instances": dataSourceTencentCloudTdcpgInstances(), + "tencentcloud_tdcpg_clusters": tdcpg.DataSourceTencentCloudTdcpgClusters(), + "tencentcloud_tdcpg_instances": tdcpg.DataSourceTencentCloudTdcpgInstances(), "tencentcloud_cat_probe_data": cat.DataSourceTencentCloudCatProbeData(), "tencentcloud_cat_node": cat.DataSourceTencentCloudCatNode(), "tencentcloud_cat_metric_data": cat.DataSourceTencentCloudCatMetricData(), @@ -721,11 +755,11 @@ func Provider() *schema.Provider { "tencentcloud_dnspod_record_line_list": dnspod.DataSourceTencentCloudDnspodRecordLineList(), "tencentcloud_dnspod_record_list": dnspod.DataSourceTencentCloudDnspodRecordList(), "tencentcloud_dnspod_record_type": dnspod.DataSourceTencentCloudDnspodRecordType(), - "tencentcloud_tat_command": dataSourceTencentCloudTatCommand(), - "tencentcloud_tat_invoker": dataSourceTencentCloudTatInvoker(), - "tencentcloud_tat_invoker_records": dataSourceTencentCloudTatInvokerRecords(), - "tencentcloud_tat_agent": dataSourceTencentCloudTatAgent(), - "tencentcloud_tat_invocation_task": dataSourceTencentCloudTatInvocationTask(), + "tencentcloud_tat_command": tat.DataSourceTencentCloudTatCommand(), + "tencentcloud_tat_invoker": tat.DataSourceTencentCloudTatInvoker(), + "tencentcloud_tat_invoker_records": tat.DataSourceTencentCloudTatInvokerRecords(), + "tencentcloud_tat_agent": tat.DataSourceTencentCloudTatAgent(), + "tencentcloud_tat_invocation_task": tat.DataSourceTencentCloudTatInvocationTask(), "tencentcloud_dbbrain_sql_filters": dbbrain.DataSourceTencentCloudDbbrainSqlFilters(), "tencentcloud_dbbrain_security_audit_log_export_tasks": dbbrain.DataSourceTencentCloudDbbrainSecurityAuditLogExportTasks(), "tencentcloud_dbbrain_diag_event": dbbrain.DataSourceTencentCloudDbbrainDiagEvent(), @@ -753,23 +787,23 @@ func Provider() *schema.Provider { "tencentcloud_dts_compare_tasks": dts.DataSourceTencentCloudDtsCompareTasks(), "tencentcloud_dts_migrate_jobs": dts.DataSourceTencentCloudDtsMigrateJobs(), "tencentcloud_dts_migrate_db_instances": dts.DataSourceTencentCloudDtsMigrateDbInstances(), - "tencentcloud_tdmq_rocketmq_cluster": dataSourceTencentCloudTdmqRocketmqCluster(), - "tencentcloud_tdmq_rocketmq_namespace": dataSourceTencentCloudTdmqRocketmqNamespace(), - "tencentcloud_tdmq_rocketmq_topic": dataSourceTencentCloudTdmqRocketmqTopic(), - "tencentcloud_tdmq_rocketmq_role": dataSourceTencentCloudTdmqRocketmqRole(), - "tencentcloud_tdmq_rocketmq_group": dataSourceTencentCloudTdmqRocketmqGroup(), - "tencentcloud_tdmq_environment_attributes": dataSourceTencentCloudTdmqEnvironmentAttributes(), - "tencentcloud_tdmq_publisher_summary": dataSourceTencentCloudTdmqPublisherSummary(), - "tencentcloud_tdmq_publishers": dataSourceTencentCloudTdmqPublishers(), - "tencentcloud_tdmq_rabbitmq_node_list": dataSourceTencentCloudTdmqRabbitmqNodeList(), - "tencentcloud_tdmq_rabbitmq_vip_instance": dataSourceTencentCloudTdmqRabbitmqVipInstance(), - "tencentcloud_tdmq_vip_instance": dataSourceTencentCloudTdmqVipInstance(), - "tencentcloud_tdmq_rocketmq_messages": dataSourceTencentCloudTdmqRocketmqMessages(), - "tencentcloud_tdmq_pro_instances": dataSourceTencentCloudTdmqProInstances(), - "tencentcloud_tdmq_pro_instance_detail": dataSourceTencentCloudTdmqProInstanceDetail(), - "tencentcloud_tcmq_queue": dataSourceTencentCloudTcmqQueue(), - "tencentcloud_tcmq_topic": dataSourceTencentCloudTcmqTopic(), - "tencentcloud_tcmq_subscribe": dataSourceTencentCloudTcmqSubscribe(), + "tencentcloud_tdmq_rocketmq_cluster": trocket.DataSourceTencentCloudTdmqRocketmqCluster(), + "tencentcloud_tdmq_rocketmq_namespace": trocket.DataSourceTencentCloudTdmqRocketmqNamespace(), + "tencentcloud_tdmq_rocketmq_topic": trocket.DataSourceTencentCloudTdmqRocketmqTopic(), + "tencentcloud_tdmq_rocketmq_role": trocket.DataSourceTencentCloudTdmqRocketmqRole(), + "tencentcloud_tdmq_rocketmq_group": trocket.DataSourceTencentCloudTdmqRocketmqGroup(), + "tencentcloud_tdmq_environment_attributes": tpulsar.DataSourceTencentCloudTdmqEnvironmentAttributes(), + "tencentcloud_tdmq_publisher_summary": tpulsar.DataSourceTencentCloudTdmqPublisherSummary(), + "tencentcloud_tdmq_publishers": tpulsar.DataSourceTencentCloudTdmqPublishers(), + "tencentcloud_tdmq_rabbitmq_node_list": trabbit.DataSourceTencentCloudTdmqRabbitmqNodeList(), + "tencentcloud_tdmq_rabbitmq_vip_instance": trabbit.DataSourceTencentCloudTdmqRabbitmqVipInstance(), + "tencentcloud_tdmq_vip_instance": trocket.DataSourceTencentCloudTdmqVipInstance(), + "tencentcloud_tdmq_rocketmq_messages": trocket.DataSourceTencentCloudTdmqRocketmqMessages(), + "tencentcloud_tdmq_pro_instances": tpulsar.DataSourceTencentCloudTdmqProInstances(), + "tencentcloud_tdmq_pro_instance_detail": tpulsar.DataSourceTencentCloudTdmqProInstanceDetail(), + "tencentcloud_tcmq_queue": tcmq.DataSourceTencentCloudTcmqQueue(), + "tencentcloud_tcmq_topic": tcmq.DataSourceTencentCloudTcmqTopic(), + "tencentcloud_tcmq_subscribe": tcmq.DataSourceTencentCloudTcmqSubscribe(), "tencentcloud_as_instances": as.DataSourceTencentCloudAsInstances(), "tencentcloud_as_advices": as.DataSourceTencentCloudAsAdvices(), "tencentcloud_as_limits": as.DataSourceTencentCloudAsLimits(), @@ -809,7 +843,7 @@ func Provider() *schema.Provider { "tencentcloud_chdfs_access_groups": chdfs.DataSourceTencentCloudChdfsAccessGroups(), "tencentcloud_chdfs_mount_points": chdfs.DataSourceTencentCloudChdfsMountPoints(), "tencentcloud_chdfs_file_systems": chdfs.DataSourceTencentCloudChdfsFileSystems(), - "tencentcloud_tcm_mesh": dataSourceTencentCloudTcmMesh(), + "tencentcloud_tcm_mesh": tcm.DataSourceTencentCloudTcmMesh(), "tencentcloud_lighthouse_firewall_rules_template": lighthouse.DataSourceTencentCloudLighthouseFirewallRulesTemplate(), "tencentcloud_cvm_instance_vnc_url": cvm.DataSourceTencentCloudCvmInstanceVncUrl(), "tencentcloud_cvm_disaster_recover_group_quota": cvm.DataSourceTencentCloudCvmDisasterRecoverGroupQuota(), @@ -817,48 +851,48 @@ func Provider() *schema.Provider { "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_tsf_application": tsf.DataSourceTencentCloudTsfApplication(), + "tencentcloud_tsf_application_config": tsf.DataSourceTencentCloudTsfApplicationConfig(), + "tencentcloud_tsf_application_file_config": tsf.DataSourceTencentCloudTsfApplicationFileConfig(), + "tencentcloud_tsf_application_public_config": tsf.DataSourceTencentCloudTsfApplicationPublicConfig(), "tencentcloud_cvm_image_share_permission": cvm.DataSourceTencentCloudCvmImageSharePermission(), - "tencentcloud_tsf_cluster": dataSourceTencentCloudTsfCluster(), - "tencentcloud_tsf_microservice": dataSourceTencentCloudTsfMicroservice(), - "tencentcloud_tsf_unit_rules": dataSourceTencentCloudTsfUnitRules(), - "tencentcloud_tsf_config_summary": dataSourceTencentCloudTsfConfigSummary(), - "tencentcloud_tsf_delivery_config_by_group_id": dataSourceTencentCloudTsfDeliveryConfigByGroupId(), - "tencentcloud_tsf_delivery_configs": dataSourceTencentCloudTsfDeliveryConfigs(), - "tencentcloud_tsf_public_config_summary": dataSourceTencentCloudTsfPublicConfigSummary(), - "tencentcloud_tsf_api_group": dataSourceTencentCloudTsfApiGroup(), - "tencentcloud_tsf_application_attribute": dataSourceTencentCloudTsfApplicationAttribute(), - "tencentcloud_tsf_business_log_configs": dataSourceTencentCloudTsfBusinessLogConfigs(), - "tencentcloud_tsf_api_detail": dataSourceTencentCloudTsfApiDetail(), - "tencentcloud_tsf_microservice_api_version": dataSourceTencentCloudTsfMicroserviceApiVersion(), - "tencentcloud_tsf_repository": dataSourceTencentCloudTsfRepository(), - "tencentcloud_tsf_pod_instances": dataSourceTencentCloudTsfPodInstances(), - "tencentcloud_tsf_gateway_all_group_apis": dataSourceTencentCloudTsfGatewayAllGroupApis(), - "tencentcloud_tsf_group_gateways": dataSourceTencentCloudTsfGroupGateways(), - "tencentcloud_tsf_usable_unit_namespaces": dataSourceTencentCloudTsfUsableUnitNamespaces(), - "tencentcloud_tsf_group_instances": dataSourceTencentCloudTsfGroupInstances(), - "tencentcloud_tsf_group_config_release": dataSourceTencentCloudTsfGroupConfigRelease(), - "tencentcloud_tsf_container_group": dataSourceTencentCloudTsfContainerGroup(), - "tencentcloud_tsf_groups": dataSourceTencentCloudTsfGroups(), - "tencentcloud_tsf_ms_api_list": dataSourceTencentCloudTsfMsApiList(), + "tencentcloud_tsf_cluster": tsf.DataSourceTencentCloudTsfCluster(), + "tencentcloud_tsf_microservice": tsf.DataSourceTencentCloudTsfMicroservice(), + "tencentcloud_tsf_unit_rules": tsf.DataSourceTencentCloudTsfUnitRules(), + "tencentcloud_tsf_config_summary": tsf.DataSourceTencentCloudTsfConfigSummary(), + "tencentcloud_tsf_delivery_config_by_group_id": tsf.DataSourceTencentCloudTsfDeliveryConfigByGroupId(), + "tencentcloud_tsf_delivery_configs": tsf.DataSourceTencentCloudTsfDeliveryConfigs(), + "tencentcloud_tsf_public_config_summary": tsf.DataSourceTencentCloudTsfPublicConfigSummary(), + "tencentcloud_tsf_api_group": tsf.DataSourceTencentCloudTsfApiGroup(), + "tencentcloud_tsf_application_attribute": tsf.DataSourceTencentCloudTsfApplicationAttribute(), + "tencentcloud_tsf_business_log_configs": tsf.DataSourceTencentCloudTsfBusinessLogConfigs(), + "tencentcloud_tsf_api_detail": tsf.DataSourceTencentCloudTsfApiDetail(), + "tencentcloud_tsf_microservice_api_version": tsf.DataSourceTencentCloudTsfMicroserviceApiVersion(), + "tencentcloud_tsf_repository": tsf.DataSourceTencentCloudTsfRepository(), + "tencentcloud_tsf_pod_instances": tsf.DataSourceTencentCloudTsfPodInstances(), + "tencentcloud_tsf_gateway_all_group_apis": tsf.DataSourceTencentCloudTsfGatewayAllGroupApis(), + "tencentcloud_tsf_group_gateways": tsf.DataSourceTencentCloudTsfGroupGateways(), + "tencentcloud_tsf_usable_unit_namespaces": tsf.DataSourceTencentCloudTsfUsableUnitNamespaces(), + "tencentcloud_tsf_group_instances": tsf.DataSourceTencentCloudTsfGroupInstances(), + "tencentcloud_tsf_group_config_release": tsf.DataSourceTencentCloudTsfGroupConfigRelease(), + "tencentcloud_tsf_container_group": tsf.DataSourceTencentCloudTsfContainerGroup(), + "tencentcloud_tsf_groups": tsf.DataSourceTencentCloudTsfGroups(), + "tencentcloud_tsf_ms_api_list": tsf.DataSourceTencentCloudTsfMsApiList(), "tencentcloud_lighthouse_bundle": lighthouse.DataSourceTencentCloudLighthouseBundle(), "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(), - "tencentcloud_tse_zookeeper_replicas": dataSourceTencentCloudTseZookeeperReplicas(), - "tencentcloud_tse_zookeeper_server_interfaces": dataSourceTencentCloudTseZookeeperServerInterfaces(), - "tencentcloud_tse_groups": dataSourceTencentCloudTseGroups(), - "tencentcloud_tse_gateways": dataSourceTencentCloudTseGateways(), - "tencentcloud_tse_gateway_nodes": dataSourceTencentCloudTseGatewayNodes(), - "tencentcloud_tse_gateway_routes": dataSourceTencentCloudTseGatewayRoutes(), - "tencentcloud_tse_gateway_canary_rules": dataSourceTencentCloudTseGatewayCanaryRules(), - "tencentcloud_tse_gateway_services": dataSourceTencentCloudTseGatewayServices(), - "tencentcloud_tse_gateway_certificates": dataSourceTencentCloudTseGatewayCertificates(), + "tencentcloud_tse_access_address": tse.DataSourceTencentCloudTseAccessAddress(), + "tencentcloud_tse_nacos_replicas": tse.DataSourceTencentCloudTseNacosReplicas(), + "tencentcloud_tse_nacos_server_interfaces": tse.DataSourceTencentCloudTseNacosServerInterfaces(), + "tencentcloud_tse_zookeeper_replicas": tse.DataSourceTencentCloudTseZookeeperReplicas(), + "tencentcloud_tse_zookeeper_server_interfaces": tse.DataSourceTencentCloudTseZookeeperServerInterfaces(), + "tencentcloud_tse_groups": tse.DataSourceTencentCloudTseGroups(), + "tencentcloud_tse_gateways": tse.DataSourceTencentCloudTseGateways(), + "tencentcloud_tse_gateway_nodes": tse.DataSourceTencentCloudTseGatewayNodes(), + "tencentcloud_tse_gateway_routes": tse.DataSourceTencentCloudTseGatewayRoutes(), + "tencentcloud_tse_gateway_canary_rules": tse.DataSourceTencentCloudTseGatewayCanaryRules(), + "tencentcloud_tse_gateway_services": tse.DataSourceTencentCloudTseGatewayServices(), + "tencentcloud_tse_gateway_certificates": tse.DataSourceTencentCloudTseGatewayCertificates(), "tencentcloud_lighthouse_modify_instance_bundle": lighthouse.DataSourceTencentCloudLighthouseModifyInstanceBundle(), "tencentcloud_lighthouse_zone": lighthouse.DataSourceTencentCloudLighthouseZone(), "tencentcloud_lighthouse_scene": lighthouse.DataSourceTencentCloudLighthouseScene(), @@ -884,41 +918,41 @@ func Provider() *schema.Provider { "tencentcloud_eb_platform_event_patterns": eb.DataSourceTencentCloudEbPlatformEventPatterns(), "tencentcloud_eb_platform_products": eb.DataSourceTencentCloudEbPlatformProducts(), "tencentcloud_eb_plateform_event_template": eb.DataSourceTencentCloudEbPlateformEventTemplate(), - "tencentcloud_wedata_rule_templates": dataSourceTencentCloudWedataRuleTemplates(), - "tencentcloud_wedata_data_source_list": dataSourceTencentCloudWedataDataSourceList(), - "tencentcloud_wedata_data_source_without_info": dataSourceTencentCloudWedataDataSourceWithoutInfo(), + "tencentcloud_wedata_rule_templates": wedata.DataSourceTencentCloudWedataRuleTemplates(), + "tencentcloud_wedata_data_source_list": wedata.DataSourceTencentCloudWedataDataSourceList(), + "tencentcloud_wedata_data_source_without_info": wedata.DataSourceTencentCloudWedataDataSourceWithoutInfo(), "tencentcloud_private_dns_records": privatedns.DataSourceTencentCloudPrivateDnsRecords(), - "tencentcloud_waf_ciphers": dataSourceTencentCloudWafCiphers(), - "tencentcloud_waf_tls_versions": dataSourceTencentCloudWafTlsVersions(), - "tencentcloud_waf_domains": dataSourceTencentCloudWafDomains(), - "tencentcloud_waf_find_domains": dataSourceTencentCloudWafFindDomains(), - "tencentcloud_waf_waf_infos": dataSourceTencentCloudWafWafInfos(), - "tencentcloud_waf_ports": dataSourceTencentCloudWafPorts(), - "tencentcloud_waf_user_domains": dataSourceTencentCloudWafUserDomains(), - "tencentcloud_waf_attack_log_histogram": dataSourceTencentCloudWafAttackLogHistogram(), - "tencentcloud_waf_attack_log_list": dataSourceTencentCloudWafAttackLogList(), - "tencentcloud_waf_attack_overview": dataSourceTencentCloudWafAttackOverview(), - "tencentcloud_waf_attack_total_count": dataSourceTencentCloudWafAttackTotalCount(), - "tencentcloud_waf_peak_points": dataSourceTencentCloudWafPeakPoints(), - "tencentcloud_waf_instance_qps_limit": dataSourceTencentCloudWafInstanceQpsLimit(), - "tencentcloud_waf_user_clb_regions": dataSourceTencentCloudWafUserClbRegions(), + "tencentcloud_waf_ciphers": waf.DataSourceTencentCloudWafCiphers(), + "tencentcloud_waf_tls_versions": waf.DataSourceTencentCloudWafTlsVersions(), + "tencentcloud_waf_domains": waf.DataSourceTencentCloudWafDomains(), + "tencentcloud_waf_find_domains": waf.DataSourceTencentCloudWafFindDomains(), + "tencentcloud_waf_waf_infos": waf.DataSourceTencentCloudWafWafInfos(), + "tencentcloud_waf_ports": waf.DataSourceTencentCloudWafPorts(), + "tencentcloud_waf_user_domains": waf.DataSourceTencentCloudWafUserDomains(), + "tencentcloud_waf_attack_log_histogram": waf.DataSourceTencentCloudWafAttackLogHistogram(), + "tencentcloud_waf_attack_log_list": waf.DataSourceTencentCloudWafAttackLogList(), + "tencentcloud_waf_attack_overview": waf.DataSourceTencentCloudWafAttackOverview(), + "tencentcloud_waf_attack_total_count": waf.DataSourceTencentCloudWafAttackTotalCount(), + "tencentcloud_waf_peak_points": waf.DataSourceTencentCloudWafPeakPoints(), + "tencentcloud_waf_instance_qps_limit": waf.DataSourceTencentCloudWafInstanceQpsLimit(), + "tencentcloud_waf_user_clb_regions": waf.DataSourceTencentCloudWafUserClbRegions(), "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": cwp.DataSourceTencentCloudCwpMachinesSimple(), - "tencentcloud_ses_receivers": dataSourceTencentCloudSesReceivers(), - "tencentcloud_ses_send_tasks": dataSourceTencentCloudSesSendTasks(), - "tencentcloud_ses_email_identities": dataSourceTencentCloudSesEmailIdentities(), - "tencentcloud_ses_black_email_address": dataSourceTencentCloudSesBlackEmailAddress(), - "tencentcloud_ses_statistics_report": dataSourceTencentCloudSesStatisticsReport(), - "tencentcloud_ses_send_email_status": dataSourceTencentCloudSesSendEmailStatus(), - "tencentcloud_organization_org_financial_by_member": dataSourceTencentCloudOrganizationOrgFinancialByMember(), - "tencentcloud_organization_org_financial_by_month": dataSourceTencentCloudOrganizationOrgFinancialByMonth(), - "tencentcloud_organization_org_financial_by_product": dataSourceTencentCloudOrganizationOrgFinancialByProduct(), - "tencentcloud_organization_org_auth_node": dataSourceTencentCloudOrganizationOrgAuthNode(), - "tencentcloud_organization_members": dataSourceTencentCloudOrganizationMembers(), + "tencentcloud_ses_receivers": ses.DataSourceTencentCloudSesReceivers(), + "tencentcloud_ses_send_tasks": ses.DataSourceTencentCloudSesSendTasks(), + "tencentcloud_ses_email_identities": ses.DataSourceTencentCloudSesEmailIdentities(), + "tencentcloud_ses_black_email_address": ses.DataSourceTencentCloudSesBlackEmailAddress(), + "tencentcloud_ses_statistics_report": ses.DataSourceTencentCloudSesStatisticsReport(), + "tencentcloud_ses_send_email_status": ses.DataSourceTencentCloudSesSendEmailStatus(), + "tencentcloud_organization_org_financial_by_member": tco.DataSourceTencentCloudOrganizationOrgFinancialByMember(), + "tencentcloud_organization_org_financial_by_month": tco.DataSourceTencentCloudOrganizationOrgFinancialByMonth(), + "tencentcloud_organization_org_financial_by_product": tco.DataSourceTencentCloudOrganizationOrgFinancialByProduct(), + "tencentcloud_organization_org_auth_node": tco.DataSourceTencentCloudOrganizationOrgAuthNode(), + "tencentcloud_organization_members": tco.DataSourceTencentCloudOrganizationMembers(), "tencentcloud_pts_scenario_with_jobs": pts.DataSourceTencentCloudPtsScenarioWithJobs(), - "tencentcloud_cam_list_attached_user_policy": dataSourceTencentCloudCamListAttachedUserPolicy(), + "tencentcloud_cam_list_attached_user_policy": cam.DataSourceTencentCloudCamListAttachedUserPolicy(), "tencentcloud_cam_secret_last_used_time": cam.DataSourceTencentCloudCamSecretLastUsedTime(), "tencentcloud_cam_policy_granting_service_access": cam.DataSourceTencentCloudCamPolicyGrantingServiceAccess(), "tencentcloud_cam_group_user_account": cam.DataSourceTencentCloudCamGroupUserAccount(), @@ -941,8 +975,8 @@ func Provider() *schema.Provider { "tencentcloud_antiddos_bgp_biz_trend": antiddos.DataSourceTencentCloudAntiddosBgpBizTrend(), "tencentcloud_antiddos_list_listener": antiddos.DataSourceTencentCloudAntiddosListListener(), "tencentcloud_antiddos_overview_attack_trend": antiddos.DataSourceTencentCloudAntiddosOverviewAttackTrend(), - "tencentcloud_kubernetes_cluster_instances": dataSourceTencentCloudKubernetesClusterInstances(), - "tencentcloud_kubernetes_cluster_node_pools": dataSourceTencentCloudKubernetesClusterNodePools(), + "tencentcloud_kubernetes_cluster_instances": tke.DataSourceTencentCloudKubernetesClusterInstances(), + "tencentcloud_kubernetes_cluster_node_pools": tke.DataSourceTencentCloudKubernetesClusterNodePools(), "tencentcloud_clickhouse_spec": cdwch.DataSourceTencentCloudClickhouseSpec(), "tencentcloud_clickhouse_instance_shards": cdwch.DataSourceTencentCloudClickhouseInstanceShards(), }, @@ -963,37 +997,37 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_vpc_network_acl_quintuple": resourceTencentCloudVpcNetworkAclQuintuple(), - "tencentcloud_vpc_notify_routes": resourceTencentCloudVpcNotifyRoutes(), - "tencentcloud_vpc_bandwidth_package": resourceTencentCloudVpcBandwidthPackage(), - "tencentcloud_vpc_bandwidth_package_attachment": resourceTencentCloudVpcBandwidthPackageAttachment(), - "tencentcloud_vpc_traffic_package": resourceTencentCloudVpcTrafficPackage(), - "tencentcloud_vpc_snapshot_policy": resourceTencentCloudVpcSnapshotPolicy(), - "tencentcloud_vpc_snapshot_policy_attachment": resourceTencentCloudVpcSnapshotPolicyAttachment(), - "tencentcloud_vpc_snapshot_policy_config": resourceTencentCloudVpcSnapshotPolicyConfig(), - "tencentcloud_vpc_net_detect": resourceTencentCloudVpcNetDetect(), + "tencentcloud_vpc": vpc.ResourceTencentCloudVpcInstance(), + "tencentcloud_vpc_acl": vpc.ResourceTencentCloudVpcACL(), + "tencentcloud_vpc_acl_attachment": vpc.ResourceTencentCloudVpcAclAttachment(), + "tencentcloud_vpc_network_acl_quintuple": vpc.ResourceTencentCloudVpcNetworkAclQuintuple(), + "tencentcloud_vpc_notify_routes": vpc.ResourceTencentCloudVpcNotifyRoutes(), + "tencentcloud_vpc_bandwidth_package": vpc.ResourceTencentCloudVpcBandwidthPackage(), + "tencentcloud_vpc_bandwidth_package_attachment": vpc.ResourceTencentCloudVpcBandwidthPackageAttachment(), + "tencentcloud_vpc_traffic_package": vpc.ResourceTencentCloudVpcTrafficPackage(), + "tencentcloud_vpc_snapshot_policy": vpc.ResourceTencentCloudVpcSnapshotPolicy(), + "tencentcloud_vpc_snapshot_policy_attachment": vpc.ResourceTencentCloudVpcSnapshotPolicyAttachment(), + "tencentcloud_vpc_snapshot_policy_config": vpc.ResourceTencentCloudVpcSnapshotPolicyConfig(), + "tencentcloud_vpc_net_detect": vpc.ResourceTencentCloudVpcNetDetect(), "tencentcloud_vpc_flow_log_config": fl.ResourceTencentCloudVpcFlowLogConfig(), - "tencentcloud_vpc_classic_link_attachment": resourceTencentCloudVpcClassicLinkAttachment(), - "tencentcloud_vpc_dhcp_ip": resourceTencentCloudVpcDhcpIp(), - "tencentcloud_vpc_ipv6_cidr_block": resourceTencentCloudVpcIpv6CidrBlock(), - "tencentcloud_vpc_ipv6_subnet_cidr_block": resourceTencentCloudVpcIpv6SubnetCidrBlock(), - "tencentcloud_vpc_ipv6_eni_address": resourceTencentCloudVpcIpv6EniAddress(), - "tencentcloud_vpc_dhcp_associate_address": resourceTencentCloudVpcDhcpAssociateAddress(), - "tencentcloud_vpc_local_gateway": resourceTencentCloudVpcLocalGateway(), - "tencentcloud_vpc_resume_snapshot_instance": resourceTencentCloudVpcResumeSnapshotInstance(), - "tencentcloud_ipv6_address_bandwidth": resourceTencentCloudIpv6AddressBandwidth(), - "tencentcloud_subnet": resourceTencentCloudVpcSubnet(), - "tencentcloud_route_entry": resourceTencentCloudRouteEntry(), - "tencentcloud_route_table_entry": resourceTencentCloudVpcRouteEntry(), - "tencentcloud_route_table": resourceTencentCloudVpcRouteTable(), - "tencentcloud_route_table_association": resourceTencentCloudRouteTableAssociation(), - "tencentcloud_dnat": resourceTencentCloudDnat(), - "tencentcloud_nat_gateway": resourceTencentCloudNatGateway(), - "tencentcloud_nat_gateway_snat": resourceTencentCloudNatGatewaySnat(), - "tencentcloud_nat_refresh_nat_dc_route": resourceTencentCloudNatRefreshNatDcRoute(), + "tencentcloud_vpc_classic_link_attachment": vpc.ResourceTencentCloudVpcClassicLinkAttachment(), + "tencentcloud_vpc_dhcp_ip": vpc.ResourceTencentCloudVpcDhcpIp(), + "tencentcloud_vpc_ipv6_cidr_block": vpc.ResourceTencentCloudVpcIpv6CidrBlock(), + "tencentcloud_vpc_ipv6_subnet_cidr_block": vpc.ResourceTencentCloudVpcIpv6SubnetCidrBlock(), + "tencentcloud_vpc_ipv6_eni_address": vpc.ResourceTencentCloudVpcIpv6EniAddress(), + "tencentcloud_vpc_dhcp_associate_address": vpc.ResourceTencentCloudVpcDhcpAssociateAddress(), + "tencentcloud_vpc_local_gateway": vpc.ResourceTencentCloudVpcLocalGateway(), + "tencentcloud_vpc_resume_snapshot_instance": vpc.ResourceTencentCloudVpcResumeSnapshotInstance(), + "tencentcloud_ipv6_address_bandwidth": vpc.ResourceTencentCloudIpv6AddressBandwidth(), + "tencentcloud_subnet": vpc.ResourceTencentCloudVpcSubnet(), + "tencentcloud_route_entry": vpc.ResourceTencentCloudRouteEntry(), + "tencentcloud_route_table_entry": vpc.ResourceTencentCloudVpcRouteEntry(), + "tencentcloud_route_table": vpc.ResourceTencentCloudVpcRouteTable(), + "tencentcloud_route_table_association": vpc.ResourceTencentCloudRouteTableAssociation(), + "tencentcloud_dnat": vpc.ResourceTencentCloudDnat(), + "tencentcloud_nat_gateway": vpc.ResourceTencentCloudNatGateway(), + "tencentcloud_nat_gateway_snat": vpc.ResourceTencentCloudNatGatewaySnat(), + "tencentcloud_nat_refresh_nat_dc_route": vpc.ResourceTencentCloudNatRefreshNatDcRoute(), "tencentcloud_oceanus_job": oceanus.ResourceTencentCloudOceanusJob(), "tencentcloud_oceanus_job_config": oceanus.ResourceTencentCloudOceanusJobConfig(), "tencentcloud_oceanus_job_copy": oceanus.ResourceTencentCloudOceanusJobCopy(), @@ -1004,16 +1038,16 @@ func Provider() *schema.Provider { "tencentcloud_oceanus_resource_config": oceanus.ResourceTencentCloudOceanusResourceConfig(), "tencentcloud_oceanus_work_space": oceanus.ResourceTencentCloudOceanusWorkSpace(), "tencentcloud_oceanus_folder": oceanus.ResourceTencentCloudOceanusFolder(), - "tencentcloud_tag": resourceTencentCloudTag(), - "tencentcloud_tag_attachment": resourceTencentCloudTagAttachment(), + "tencentcloud_tag": tag.ResourceTencentCloudTag(), + "tencentcloud_tag_attachment": tag.ResourceTencentCloudTagAttachment(), "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(), + "tencentcloud_eni": vpc.ResourceTencentCloudEni(), + "tencentcloud_eni_attachment": vpc.ResourceTencentCloudEniAttachment(), + "tencentcloud_eni_sg_attachment": vpc.ResourceTencentCloudEniSgAttachment(), "tencentcloud_ccn": ccn.ResourceTencentCloudCcn(), "tencentcloud_ccn_attachment": ccn.ResourceTencentCloudCcnAttachment(), "tencentcloud_ccn_bandwidth_limit": ccn.ResourceTencentCloudCcnBandwidthLimit(), @@ -1030,22 +1064,22 @@ func Provider() *schema.Provider { "tencentcloud_dc_gateway": dcg.ResourceTencentCloudDcGatewayInstance(), "tencentcloud_dc_gateway_ccn_route": dcg.ResourceTencentCloudDcGatewayCcnRouteInstance(), "tencentcloud_dc_gateway_attachment": dcg.ResourceTencentCloudDcGatewayAttachment(), - "tencentcloud_vpn_customer_gateway": resourceTencentCloudVpnCustomerGateway(), - "tencentcloud_vpn_gateway": resourceTencentCloudVpnGateway(), - "tencentcloud_vpn_gateway_route": resourceTencentCloudVpnGatewayRoute(), - "tencentcloud_vpn_connection": resourceTencentCloudVpnConnection(), - "tencentcloud_vpn_ssl_server": resourceTencentCloudVpnSslServer(), - "tencentcloud_vpn_ssl_client": resourceTencentCloudVpnSslClient(), - "tencentcloud_vpn_connection_reset": resourceTencentCloudVpnConnectionReset(), - "tencentcloud_vpn_customer_gateway_configuration_download": resourceTencentCloudVpnCustomerGatewayConfigurationDownload(), - "tencentcloud_vpn_gateway_ssl_client_cert": resourceTencentCloudVpnGatewaySslClientCert(), - "tencentcloud_vpn_gateway_ccn_routes": resourceTencentCloudVpnGatewayCcnRoutes(), - "tencentcloud_ha_vip": resourceTencentCloudHaVip(), - "tencentcloud_ha_vip_eip_attachment": resourceTencentCloudHaVipEipAttachment(), - "tencentcloud_security_group": resourceTencentCloudSecurityGroup(), - "tencentcloud_security_group_rule": resourceTencentCloudSecurityGroupRule(), - "tencentcloud_security_group_rule_set": resourceTencentCloudSecurityGroupRuleSet(), - "tencentcloud_security_group_lite_rule": resourceTencentCloudSecurityGroupLiteRule(), + "tencentcloud_vpn_customer_gateway": vpn.ResourceTencentCloudVpnCustomerGateway(), + "tencentcloud_vpn_gateway": vpn.ResourceTencentCloudVpnGateway(), + "tencentcloud_vpn_gateway_route": vpn.ResourceTencentCloudVpnGatewayRoute(), + "tencentcloud_vpn_connection": vpn.ResourceTencentCloudVpnConnection(), + "tencentcloud_vpn_ssl_server": vpn.ResourceTencentCloudVpnSslServer(), + "tencentcloud_vpn_ssl_client": vpn.ResourceTencentCloudVpnSslClient(), + "tencentcloud_vpn_connection_reset": vpn.ResourceTencentCloudVpnConnectionReset(), + "tencentcloud_vpn_customer_gateway_configuration_download": vpn.ResourceTencentCloudVpnCustomerGatewayConfigurationDownload(), + "tencentcloud_vpn_gateway_ssl_client_cert": vpn.ResourceTencentCloudVpnGatewaySslClientCert(), + "tencentcloud_vpn_gateway_ccn_routes": vpn.ResourceTencentCloudVpnGatewayCcnRoutes(), + "tencentcloud_ha_vip": vpc.ResourceTencentCloudHaVip(), + "tencentcloud_ha_vip_eip_attachment": vpc.ResourceTencentCloudHaVipEipAttachment(), + "tencentcloud_security_group": vpc.ResourceTencentCloudSecurityGroup(), + "tencentcloud_security_group_rule": vpc.ResourceTencentCloudSecurityGroupRule(), + "tencentcloud_security_group_rule_set": vpc.ResourceTencentCloudSecurityGroupRuleSet(), + "tencentcloud_security_group_lite_rule": vpc.ResourceTencentCloudSecurityGroupLiteRule(), "tencentcloud_lb": clb.ResourceTencentCloudLB(), "tencentcloud_alb_server_attachment": clb.ResourceTencentCloudAlbServerAttachment(), "tencentcloud_clb_instance": clb.ResourceTencentCloudClbInstance(), @@ -1065,21 +1099,21 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_kubernetes_cluster_endpoint": resourceTencentCloudTkeClusterEndpoint(), - "tencentcloud_eks_cluster": resourceTencentCloudEksCluster(), - "tencentcloud_eks_container_instance": resourceTencentCloudEksContainerInstance(), - "tencentcloud_kubernetes_addon_attachment": resourceTencentCloudTkeAddonAttachment(), - "tencentcloud_kubernetes_auth_attachment": resourceTencentCloudTKEAuthAttachment(), - "tencentcloud_kubernetes_as_scaling_group": resourceTencentCloudKubernetesAsScalingGroup(), - "tencentcloud_kubernetes_scale_worker": resourceTencentCloudTkeScaleWorker(), - "tencentcloud_kubernetes_cluster_attachment": resourceTencentCloudTkeClusterAttachment(), - "tencentcloud_kubernetes_node_pool": resourceTencentCloudKubernetesNodePool(), - "tencentcloud_kubernetes_serverless_node_pool": resourceTkeServerLessNodePool(), - "tencentcloud_kubernetes_backup_storage_location": resourceTencentCloudTkeBackupStorageLocation(), - "tencentcloud_kubernetes_encryption_protection": resourceTencentCloudKubernetesEncryptionProtection(), + "tencentcloud_container_cluster": tke.ResourceTencentCloudContainerCluster(), + "tencentcloud_container_cluster_instance": tke.ResourceTencentCloudContainerClusterInstance(), + "tencentcloud_kubernetes_cluster": tke.ResourceTencentCloudTkeCluster(), + "tencentcloud_kubernetes_cluster_endpoint": tke.ResourceTencentCloudTkeClusterEndpoint(), + "tencentcloud_eks_cluster": tke.ResourceTencentCloudEksCluster(), + "tencentcloud_eks_container_instance": tke.ResourceTencentCloudEksContainerInstance(), + "tencentcloud_kubernetes_addon_attachment": tke.ResourceTencentCloudTkeAddonAttachment(), + "tencentcloud_kubernetes_auth_attachment": tke.ResourceTencentCloudTKEAuthAttachment(), + "tencentcloud_kubernetes_as_scaling_group": tke.ResourceTencentCloudKubernetesAsScalingGroup(), + "tencentcloud_kubernetes_scale_worker": tke.ResourceTencentCloudTkeScaleWorker(), + "tencentcloud_kubernetes_cluster_attachment": tke.ResourceTencentCloudTkeClusterAttachment(), + "tencentcloud_kubernetes_node_pool": tke.ResourceTencentCloudKubernetesNodePool(), + "tencentcloud_kubernetes_serverless_node_pool": tke.ResourceTencentCloudTkeServerLessNodePool(), + "tencentcloud_kubernetes_backup_storage_location": tke.ResourceTencentCloudTkeBackupStorageLocation(), + "tencentcloud_kubernetes_encryption_protection": tke.ResourceTencentCloudKubernetesEncryptionProtection(), "tencentcloud_mysql_backup_policy": cdb.ResourceTencentCloudMysqlBackupPolicy(), "tencentcloud_mysql_account": cdb.ResourceTencentCloudMysqlAccount(), "tencentcloud_mysql_account_privilege": cdb.ResourceTencentCloudMysqlAccountPrivilege(), @@ -1127,14 +1161,14 @@ func Provider() *schema.Provider { "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_user_quota": cfs.ResourceTencentCloudCfsUserQuota(), "tencentcloud_cfs_sign_up_cfs_service": cfs.ResourceTencentCloudCfsSignUpCfsService(), "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_param": crs.ResourceTencentCloudRedisParam(), "tencentcloud_redis_read_only": crs.ResourceTencentCloudRedisReadOnly(), "tencentcloud_redis_ssl": crs.ResourceTencentCloudRedisSsl(), "tencentcloud_redis_backup_download_restriction": crs.ResourceTencentCloudRedisBackupDownloadRestriction(), @@ -1150,7 +1184,7 @@ func Provider() *schema.Provider { "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_load_balancer": as.ResourceTencentCloudAsLoadBalancer(), "tencentcloud_as_scaling_config": as.ResourceTencentCloudAsScalingConfig(), "tencentcloud_as_scaling_group": as.ResourceTencentCloudAsScalingGroup(), "tencentcloud_as_scaling_group_status": as.ResourceTencentCloudAsScalingGroupStatus(), @@ -1198,9 +1232,9 @@ func Provider() *schema.Provider { "tencentcloud_gaap_global_domain": gaap.ResourceTencentCloudGaapGlobalDomain(), "tencentcloud_gaap_custom_header": gaap.ResourceTencentCloudGaapCustomHeader(), "tencentcloud_gaap_proxy_group": gaap.ResourceTencentCloudGaapProxyGroup(), - "tencentcloud_ssl_certificate": resourceTencentCloudSslCertificate(), - "tencentcloud_ssl_pay_certificate": resourceTencentCloudSSLInstance(), - "tencentcloud_ssl_free_certificate": resourceTencentCloudSSLFreeCertificate(), + "tencentcloud_ssl_certificate": ssl.ResourceTencentCloudSslCertificate(), + "tencentcloud_ssl_pay_certificate": ssl.ResourceTencentCloudSSLInstance(), + "tencentcloud_ssl_free_certificate": ssl.ResourceTencentCloudSSLFreeCertificate(), "tencentcloud_cam_role": cam.ResourceTencentCloudCamRole(), "tencentcloud_cam_role_by_name": cam.ResourceTencentCloudCamRoleByName(), "tencentcloud_cam_user": cam.ResourceTencentCloudCamUser(), @@ -1224,62 +1258,62 @@ func Provider() *schema.Provider { "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_organization_quit_organization_operation": tco.ResourceTencentCloudOrganizationQuitOrganizationOperation(), "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(), - "tencentcloud_scf_reserved_concurrency_config": resourceTencentCloudScfReservedConcurrencyConfig(), - "tencentcloud_scf_provisioned_concurrency_config": resourceTencentCloudScfProvisionedConcurrencyConfig(), - "tencentcloud_scf_invoke_function": resourceTencentCloudScfInvokeFunction(), - "tencentcloud_scf_sync_invoke_function": resourceTencentCloudScfSyncInvokeFunction(), - "tencentcloud_scf_terminate_async_event": resourceTencentCloudScfTerminateAsyncEvent(), - "tencentcloud_scf_namespace": resourceTencentCloudScfNamespace(), - "tencentcloud_scf_layer": resourceTencentCloudScfLayer(), - "tencentcloud_scf_function_alias": resourceTencentCloudScfFunctionAlias(), - "tencentcloud_scf_trigger_config": resourceTencentCloudScfTriggerConfig(), - "tencentcloud_tcaplus_cluster": resourceTencentCloudTcaplusCluster(), - "tencentcloud_tcaplus_tablegroup": resourceTencentCloudTcaplusTableGroup(), - "tencentcloud_tcaplus_idl": resourceTencentCloudTcaplusIdl(), - "tencentcloud_tcaplus_table": resourceTencentCloudTcaplusTable(), + "tencentcloud_scf_function": scf.ResourceTencentCloudScfFunction(), + "tencentcloud_scf_function_version": scf.ResourceTencentCloudScfFunctionVersion(), + "tencentcloud_scf_function_event_invoke_config": scf.ResourceTencentCloudScfFunctionEventInvokeConfig(), + "tencentcloud_scf_reserved_concurrency_config": scf.ResourceTencentCloudScfReservedConcurrencyConfig(), + "tencentcloud_scf_provisioned_concurrency_config": scf.ResourceTencentCloudScfProvisionedConcurrencyConfig(), + "tencentcloud_scf_invoke_function": scf.ResourceTencentCloudScfInvokeFunction(), + "tencentcloud_scf_sync_invoke_function": scf.ResourceTencentCloudScfSyncInvokeFunction(), + "tencentcloud_scf_terminate_async_event": scf.ResourceTencentCloudScfTerminateAsyncEvent(), + "tencentcloud_scf_namespace": scf.ResourceTencentCloudScfNamespace(), + "tencentcloud_scf_layer": scf.ResourceTencentCloudScfLayer(), + "tencentcloud_scf_function_alias": scf.ResourceTencentCloudScfFunctionAlias(), + "tencentcloud_scf_trigger_config": scf.ResourceTencentCloudScfTriggerConfig(), + "tencentcloud_tcaplus_cluster": tcaplusdb.ResourceTencentCloudTcaplusCluster(), + "tencentcloud_tcaplus_tablegroup": tcaplusdb.ResourceTencentCloudTcaplusTableGroup(), + "tencentcloud_tcaplus_idl": tcaplusdb.ResourceTencentCloudTcaplusIdl(), + "tencentcloud_tcaplus_table": tcaplusdb.ResourceTencentCloudTcaplusTable(), "tencentcloud_cdn_domain": cdn.ResourceTencentCloudCdnDomain(), "tencentcloud_cdn_url_push": cdn.ResourceTencentCloudUrlPush(), "tencentcloud_cdn_url_purge": cdn.ResourceTencentCloudUrlPurge(), - "tencentcloud_monitor_policy_group": resourceTencentCloudMonitorPolicyGroup(), + "tencentcloud_monitor_policy_group": monitor.ResourceTencentCloudMonitorPolicyGroup(), "tencentcloud_monitor_binding_object": monitor.ResourceTencentCloudMonitorBindingObject(), "tencentcloud_monitor_policy_binding_object": monitor.ResourceTencentCloudMonitorPolicyBindingObject(), "tencentcloud_monitor_binding_receiver": monitor.ResourceTencentCloudMonitorBindingAlarmReceiver(), "tencentcloud_monitor_alarm_policy": monitor.ResourceTencentCloudMonitorAlarmPolicy(), "tencentcloud_monitor_alarm_notice": monitor.ResourceTencentCloudMonitorAlarmNotice(), "tencentcloud_monitor_alarm_policy_set_default": monitor.ResourceTencentCloudMonitorAlarmPolicySetDefault(), - "tencentcloud_monitor_tmp_instance": resourceTencentCloudMonitorTmpInstance(), - "tencentcloud_monitor_tmp_cvm_agent": resourceTencentCloudMonitorTmpCvmAgent(), - "tencentcloud_monitor_tmp_scrape_job": resourceTencentCloudMonitorTmpScrapeJob(), - "tencentcloud_monitor_tmp_exporter_integration": resourceTencentCloudMonitorTmpExporterIntegration(), - "tencentcloud_monitor_tmp_alert_rule": resourceTencentCloudMonitorTmpAlertRule(), - "tencentcloud_monitor_tmp_recording_rule": resourceTencentCloudMonitorTmpRecordingRule(), - "tencentcloud_monitor_tmp_tke_template": resourceTencentCloudMonitorTmpTkeTemplate(), - "tencentcloud_monitor_tmp_tke_template_attachment": resourceTencentCloudMonitorTmpTkeTemplateAttachment(), - "tencentcloud_monitor_tmp_tke_alert_policy": resourceTencentCloudMonitorTmpTkeAlertPolicy(), - "tencentcloud_monitor_tmp_tke_basic_config": resourceTencentCloudMonitorTmpTkeBasicConfig(), - "tencentcloud_monitor_tmp_tke_cluster_agent": resourceTencentCloudMonitorTmpTkeClusterAgent(), - "tencentcloud_monitor_tmp_tke_config": resourceTencentCloudMonitorTmpTkeConfig(), - "tencentcloud_monitor_tmp_tke_record_rule_yaml": resourceTencentCloudMonitorTmpTkeRecordRuleYaml(), - "tencentcloud_monitor_tmp_tke_global_notification": resourceTencentCloudMonitorTmpTkeGlobalNotification(), - "tencentcloud_monitor_tmp_manage_grafana_attachment": resourceTencentCloudMonitorTmpManageGrafanaAttachment(), - "tencentcloud_monitor_grafana_instance": resourceTencentCloudMonitorGrafanaInstance(), - "tencentcloud_monitor_grafana_integration": resourceTencentCloudMonitorGrafanaIntegration(), - "tencentcloud_monitor_grafana_notification_channel": resourceTencentCloudMonitorGrafanaNotificationChannel(), - "tencentcloud_monitor_grafana_plugin": resourceTencentCloudMonitorGrafanaPlugin(), - "tencentcloud_monitor_grafana_sso_account": resourceTencentCloudMonitorGrafanaSsoAccount(), - "tencentcloud_monitor_tmp_grafana_config": resourceTencentCloudMonitorTmpGrafanaConfig(), - "tencentcloud_monitor_grafana_dns_config": resourceTencentCloudMonitorGrafanaDnsConfig(), - "tencentcloud_monitor_grafana_env_config": resourceTencentCloudMonitorGrafanaEnvConfig(), - "tencentcloud_monitor_grafana_whitelist_config": resourceTencentCloudMonitorGrafanaWhitelistConfig(), - "tencentcloud_monitor_grafana_sso_cam_config": resourceTencentCloudMonitorGrafanaSsoCamConfig(), - "tencentcloud_monitor_grafana_sso_config": resourceTencentCloudMonitorGrafanaSsoConfig(), - "tencentcloud_monitor_grafana_version_upgrade": resourceTencentCloudMonitorGrafanaVersionUpgrade(), + "tencentcloud_monitor_tmp_instance": tmp.ResourceTencentCloudMonitorTmpInstance(), + "tencentcloud_monitor_tmp_cvm_agent": tmp.ResourceTencentCloudMonitorTmpCvmAgent(), + "tencentcloud_monitor_tmp_scrape_job": tmp.ResourceTencentCloudMonitorTmpScrapeJob(), + "tencentcloud_monitor_tmp_exporter_integration": tmp.ResourceTencentCloudMonitorTmpExporterIntegration(), + "tencentcloud_monitor_tmp_alert_rule": tmp.ResourceTencentCloudMonitorTmpAlertRule(), + "tencentcloud_monitor_tmp_recording_rule": tmp.ResourceTencentCloudMonitorTmpRecordingRule(), + "tencentcloud_monitor_tmp_tke_template": tmp.ResourceTencentCloudMonitorTmpTkeTemplate(), + "tencentcloud_monitor_tmp_tke_template_attachment": tmp.ResourceTencentCloudMonitorTmpTkeTemplateAttachment(), + "tencentcloud_monitor_tmp_tke_alert_policy": tmp.ResourceTencentCloudMonitorTmpTkeAlertPolicy(), + "tencentcloud_monitor_tmp_tke_basic_config": tmp.ResourceTencentCloudMonitorTmpTkeBasicConfig(), + "tencentcloud_monitor_tmp_tke_cluster_agent": tmp.ResourceTencentCloudMonitorTmpTkeClusterAgent(), + "tencentcloud_monitor_tmp_tke_config": tmp.ResourceTencentCloudMonitorTmpTkeConfig(), + "tencentcloud_monitor_tmp_tke_record_rule_yaml": tmp.ResourceTencentCloudMonitorTmpTkeRecordRuleYaml(), + "tencentcloud_monitor_tmp_tke_global_notification": tmp.ResourceTencentCloudMonitorTmpTkeGlobalNotification(), + "tencentcloud_monitor_tmp_manage_grafana_attachment": tmp.ResourceTencentCloudMonitorTmpManageGrafanaAttachment(), + "tencentcloud_monitor_grafana_instance": tcmg.ResourceTencentCloudMonitorGrafanaInstance(), + "tencentcloud_monitor_grafana_integration": tcmg.ResourceTencentCloudMonitorGrafanaIntegration(), + "tencentcloud_monitor_grafana_notification_channel": tcmg.ResourceTencentCloudMonitorGrafanaNotificationChannel(), + "tencentcloud_monitor_grafana_plugin": tcmg.ResourceTencentCloudMonitorGrafanaPlugin(), + "tencentcloud_monitor_grafana_sso_account": tcmg.ResourceTencentCloudMonitorGrafanaSsoAccount(), + "tencentcloud_monitor_tmp_grafana_config": tcmg.ResourceTencentCloudMonitorTmpGrafanaConfig(), + "tencentcloud_monitor_grafana_dns_config": tcmg.ResourceTencentCloudMonitorGrafanaDnsConfig(), + "tencentcloud_monitor_grafana_env_config": tcmg.ResourceTencentCloudMonitorGrafanaEnvConfig(), + "tencentcloud_monitor_grafana_whitelist_config": tcmg.ResourceTencentCloudMonitorGrafanaWhitelistConfig(), + "tencentcloud_monitor_grafana_sso_cam_config": tcmg.ResourceTencentCloudMonitorGrafanaSsoCamConfig(), + "tencentcloud_monitor_grafana_sso_config": tcmg.ResourceTencentCloudMonitorGrafanaSsoConfig(), + "tencentcloud_monitor_grafana_version_upgrade": tcmg.ResourceTencentCloudMonitorGrafanaVersionUpgrade(), "tencentcloud_mongodb_standby_instance": mongodb.ResourceTencentCloudMongodbStandbyInstance(), "tencentcloud_elasticsearch_instance": es.ResourceTencentCloudElasticsearchInstance(), "tencentcloud_elasticsearch_security_group": es.ResourceTencentCloudElasticsearchSecurityGroup(), @@ -1313,37 +1347,37 @@ func Provider() *schema.Provider { "tencentcloud_postgresql_modify_account_remark_operation": postgresql.ResourceTencentCloudPostgresqlModifyAccountRemarkOperation(), "tencentcloud_postgresql_modify_switch_time_period_operation": postgresql.ResourceTencentCloudPostgresqlModifySwitchTimePeriodOperation(), "tencentcloud_postgresql_instance_ha_config": postgresql.ResourceTencentCloudPostgresqlInstanceHAConfig(), - "tencentcloud_sqlserver_instance": resourceTencentCloudSqlserverInstance(), - "tencentcloud_sqlserver_db": resourceTencentCloudSqlserverDB(), - "tencentcloud_sqlserver_account": resourceTencentCloudSqlserverAccount(), - "tencentcloud_sqlserver_account_db_attachment": resourceTencentCloudSqlserverAccountDBAttachment(), - "tencentcloud_sqlserver_readonly_instance": resourceTencentCloudSqlserverReadonlyInstance(), - "tencentcloud_sqlserver_migration": resourceTencentCloudSqlserverMigration(), - "tencentcloud_sqlserver_config_backup_strategy": resourceTencentCloudSqlserverConfigBackupStrategy(), - "tencentcloud_sqlserver_general_backup": resourceTencentCloudSqlserverGeneralBackup(), - "tencentcloud_sqlserver_general_clone": resourceTencentCloudSqlserverGeneralClone(), - "tencentcloud_sqlserver_full_backup_migration": resourceTencentCloudSqlserverFullBackupMigration(), - "tencentcloud_sqlserver_incre_backup_migration": resourceTencentCloudSqlserverIncreBackupMigration(), - "tencentcloud_sqlserver_business_intelligence_file": resourceTencentCloudSqlserverBusinessIntelligenceFile(), - "tencentcloud_sqlserver_business_intelligence_instance": resourceTencentCloudSqlserverBusinessIntelligenceInstance(), - "tencentcloud_sqlserver_general_communication": resourceTencentCloudSqlserverGeneralCommunication(), - "tencentcloud_sqlserver_general_cloud_instance": resourceTencentCloudSqlserverGeneralCloudInstance(), - "tencentcloud_sqlserver_complete_expansion": resourceTencentCloudSqlserverCompleteExpansion(), - "tencentcloud_sqlserver_config_database_cdc": resourceTencentCloudSqlserverConfigDatabaseCDC(), - "tencentcloud_sqlserver_config_database_ct": resourceTencentCloudSqlserverConfigDatabaseCT(), - "tencentcloud_sqlserver_config_database_mdf": resourceTencentCloudSqlserverConfigDatabaseMdf(), - "tencentcloud_sqlserver_config_instance_param": resourceTencentCloudSqlserverConfigInstanceParam(), - "tencentcloud_sqlserver_config_instance_ro_group": resourceTencentCloudSqlserverConfigInstanceRoGroup(), - "tencentcloud_sqlserver_config_instance_security_groups": resourceTencentCloudSqlserverConfigInstanceSecurityGroups(), - "tencentcloud_sqlserver_renew_db_instance": resourceTencentCloudSqlserverRenewDBInstance(), - "tencentcloud_sqlserver_renew_postpaid_db_instance": resourceTencentCloudSqlserverRenewPostpaidDBInstance(), - "tencentcloud_sqlserver_restart_db_instance": resourceTencentCloudSqlserverRestartDBInstance(), - "tencentcloud_sqlserver_config_terminate_db_instance": resourceTencentCloudSqlserverConfigTerminateDBInstance(), - "tencentcloud_sqlserver_restore_instance": resourceTencentCloudSqlserverRestoreInstance(), - "tencentcloud_sqlserver_rollback_instance": resourceTencentCloudSqlserverRollbackInstance(), - "tencentcloud_sqlserver_start_backup_full_migration": resourceTencentCloudSqlserverStartBackupFullMigration(), - "tencentcloud_sqlserver_start_backup_incremental_migration": resourceTencentCloudSqlserverStartBackupIncrementalMigration(), - "tencentcloud_sqlserver_start_xevent": resourceTencentCloudSqlserverStartXevent(), + "tencentcloud_sqlserver_instance": sqlserver.ResourceTencentCloudSqlserverInstance(), + "tencentcloud_sqlserver_db": sqlserver.ResourceTencentCloudSqlserverDB(), + "tencentcloud_sqlserver_account": sqlserver.ResourceTencentCloudSqlserverAccount(), + "tencentcloud_sqlserver_account_db_attachment": sqlserver.ResourceTencentCloudSqlserverAccountDBAttachment(), + "tencentcloud_sqlserver_readonly_instance": sqlserver.ResourceTencentCloudSqlserverReadonlyInstance(), + "tencentcloud_sqlserver_migration": sqlserver.ResourceTencentCloudSqlserverMigration(), + "tencentcloud_sqlserver_config_backup_strategy": sqlserver.ResourceTencentCloudSqlserverConfigBackupStrategy(), + "tencentcloud_sqlserver_general_backup": sqlserver.ResourceTencentCloudSqlserverGeneralBackup(), + "tencentcloud_sqlserver_general_clone": sqlserver.ResourceTencentCloudSqlserverGeneralClone(), + "tencentcloud_sqlserver_full_backup_migration": sqlserver.ResourceTencentCloudSqlserverFullBackupMigration(), + "tencentcloud_sqlserver_incre_backup_migration": sqlserver.ResourceTencentCloudSqlserverIncreBackupMigration(), + "tencentcloud_sqlserver_business_intelligence_file": sqlserver.ResourceTencentCloudSqlserverBusinessIntelligenceFile(), + "tencentcloud_sqlserver_business_intelligence_instance": sqlserver.ResourceTencentCloudSqlserverBusinessIntelligenceInstance(), + "tencentcloud_sqlserver_general_communication": sqlserver.ResourceTencentCloudSqlserverGeneralCommunication(), + "tencentcloud_sqlserver_general_cloud_instance": sqlserver.ResourceTencentCloudSqlserverGeneralCloudInstance(), + "tencentcloud_sqlserver_complete_expansion": sqlserver.ResourceTencentCloudSqlserverCompleteExpansion(), + "tencentcloud_sqlserver_config_database_cdc": sqlserver.ResourceTencentCloudSqlserverConfigDatabaseCDC(), + "tencentcloud_sqlserver_config_database_ct": sqlserver.ResourceTencentCloudSqlserverConfigDatabaseCT(), + "tencentcloud_sqlserver_config_database_mdf": sqlserver.ResourceTencentCloudSqlserverConfigDatabaseMdf(), + "tencentcloud_sqlserver_config_instance_param": sqlserver.ResourceTencentCloudSqlserverConfigInstanceParam(), + "tencentcloud_sqlserver_config_instance_ro_group": sqlserver.ResourceTencentCloudSqlserverConfigInstanceRoGroup(), + "tencentcloud_sqlserver_config_instance_security_groups": sqlserver.ResourceTencentCloudSqlserverConfigInstanceSecurityGroups(), + "tencentcloud_sqlserver_renew_db_instance": sqlserver.ResourceTencentCloudSqlserverRenewDBInstance(), + "tencentcloud_sqlserver_renew_postpaid_db_instance": sqlserver.ResourceTencentCloudSqlserverRenewPostpaidDBInstance(), + "tencentcloud_sqlserver_restart_db_instance": sqlserver.ResourceTencentCloudSqlserverRestartDBInstance(), + "tencentcloud_sqlserver_config_terminate_db_instance": sqlserver.ResourceTencentCloudSqlserverConfigTerminateDBInstance(), + "tencentcloud_sqlserver_restore_instance": sqlserver.ResourceTencentCloudSqlserverRestoreInstance(), + "tencentcloud_sqlserver_rollback_instance": sqlserver.ResourceTencentCloudSqlserverRollbackInstance(), + "tencentcloud_sqlserver_start_backup_full_migration": sqlserver.ResourceTencentCloudSqlserverStartBackupFullMigration(), + "tencentcloud_sqlserver_start_backup_incremental_migration": sqlserver.ResourceTencentCloudSqlserverStartBackupIncrementalMigration(), + "tencentcloud_sqlserver_start_xevent": sqlserver.ResourceTencentCloudSqlserverStartXevent(), "tencentcloud_ckafka_instance": ckafka.ResourceTencentCloudCkafkaInstance(), "tencentcloud_ckafka_user": ckafka.ResourceTencentCloudCkafkaUser(), "tencentcloud_ckafka_acl": ckafka.ResourceTencentCloudCkafkaAcl(), @@ -1382,13 +1416,13 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_vod_snapshot_by_time_offset_template": resourceTencentCloudVodSnapshotByTimeOffsetTemplate(), - "tencentcloud_vod_super_player_config": resourceTencentCloudVodSuperPlayerConfig(), - "tencentcloud_vod_sub_application": resourceTencentCloudVodSubApplication(), - "tencentcloud_sqlserver_publish_subscribe": resourceTencentCloudSqlserverPublishSubscribe(), + "tencentcloud_vod_adaptive_dynamic_streaming_template": vod.ResourceTencentCloudVodAdaptiveDynamicStreamingTemplate(), + "tencentcloud_vod_image_sprite_template": vod.ResourceTencentCloudVodImageSpriteTemplate(), + "tencentcloud_vod_procedure_template": vod.ResourceTencentCloudVodProcedureTemplate(), + "tencentcloud_vod_snapshot_by_time_offset_template": vod.ResourceTencentCloudVodSnapshotByTimeOffsetTemplate(), + "tencentcloud_vod_super_player_config": vod.ResourceTencentCloudVodSuperPlayerConfig(), + "tencentcloud_vod_sub_application": vod.ResourceTencentCloudVodSubApplication(), + "tencentcloud_sqlserver_publish_subscribe": sqlserver.ResourceTencentCloudSqlserverPublishSubscribe(), "tencentcloud_api_gateway_usage_plan": apigateway.ResourceTencentCloudAPIGatewayUsagePlan(), "tencentcloud_api_gateway_usage_plan_attachment": apigateway.ResourceTencentCloudAPIGatewayUsagePlanAttachment(), "tencentcloud_api_gateway_api": apigateway.ResourceTencentCloudAPIGatewayAPI(), @@ -1403,36 +1437,36 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_sqlserver_general_cloud_ro_instance": resourceTencentCloudSqlserverGeneralCloudRoInstance(), - "tencentcloud_sqlserver_instance_ssl": resourceTencentCloudSqlserverInstanceSsl(), - "tencentcloud_tcr_instance": resourceTencentCloudTcrInstance(), - "tencentcloud_tcr_namespace": resourceTencentCloudTcrNamespace(), - "tencentcloud_tcr_repository": resourceTencentCloudTcrRepository(), - "tencentcloud_tcr_token": resourceTencentCloudTcrToken(), - "tencentcloud_tcr_vpc_attachment": resourceTencentCloudTcrVpcAttachment(), - "tencentcloud_tcr_tag_retention_rule": resourceTencentCloudTcrTagRetentionRule(), - "tencentcloud_tcr_webhook_trigger": resourceTencentCloudTcrWebhookTrigger(), - "tencentcloud_tcr_manage_replication_operation": resourceTencentCloudTcrManageReplicationOperation(), - "tencentcloud_tcr_customized_domain": resourceTencentCloudTcrCustomizedDomain(), - "tencentcloud_tcr_immutable_tag_rule": resourceTencentCloudTcrImmutableTagRule(), - "tencentcloud_tcr_delete_image_operation": resourceTencentCloudTcrDeleteImageOperation(), - "tencentcloud_tcr_create_image_signature_operation": resourceTencentCloudTcrCreateImageSignatureOperation(), - "tencentcloud_tcr_tag_retention_execution_config": resourceTencentCloudTcrTagRetentionExecutionConfig(), - "tencentcloud_tcr_service_account": resourceTencentCloudTcrServiceAccount(), - "tencentcloud_tdmq_instance": resourceTencentCloudTdmqInstance(), - "tencentcloud_tdmq_namespace": resourceTencentCloudTdmqNamespace(), - "tencentcloud_tdmq_topic": resourceTencentCloudTdmqTopic(), - "tencentcloud_tdmq_role": resourceTencentCloudTdmqRole(), - "tencentcloud_tdmq_namespace_role_attachment": resourceTencentCloudTdmqNamespaceRoleAttachment(), - "tencentcloud_tdmq_subscription_attachment": resourceTencentCloudTdmqSubscriptionAttachment(), - "tencentcloud_tdmq_rabbitmq_user": resourceTencentCloudTdmqRabbitmqUser(), - "tencentcloud_tdmq_rabbitmq_virtual_host": resourceTencentCloudTdmqRabbitmqVirtualHost(), - "tencentcloud_tdmq_rabbitmq_vip_instance": resourceTencentCloudTdmqRabbitmqVipInstance(), - "tencentcloud_tdmq_send_rocketmq_message": resourceTencentCloudTdmqSendRocketmqMessage(), - "tencentcloud_tdmq_professional_cluster": resourceTencentCloudTdmqProfessionalCluster(), + "tencentcloud_sqlserver_basic_instance": sqlserver.ResourceTencentCloudSqlserverBasicInstance(), + "tencentcloud_sqlserver_instance_tde": sqlserver.ResourceTencentCloudSqlserverInstanceTDE(), + "tencentcloud_sqlserver_database_tde": sqlserver.ResourceTencentCloudSqlserverDatabaseTDE(), + "tencentcloud_sqlserver_general_cloud_ro_instance": sqlserver.ResourceTencentCloudSqlserverGeneralCloudRoInstance(), + "tencentcloud_sqlserver_instance_ssl": sqlserver.ResourceTencentCloudSqlserverInstanceSsl(), + "tencentcloud_tcr_instance": tcr.ResourceTencentCloudTcrInstance(), + "tencentcloud_tcr_namespace": tcr.ResourceTencentCloudTcrNamespace(), + "tencentcloud_tcr_repository": tcr.ResourceTencentCloudTcrRepository(), + "tencentcloud_tcr_token": tcr.ResourceTencentCloudTcrToken(), + "tencentcloud_tcr_vpc_attachment": tcr.ResourceTencentCloudTcrVpcAttachment(), + "tencentcloud_tcr_tag_retention_rule": tcr.ResourceTencentCloudTcrTagRetentionRule(), + "tencentcloud_tcr_webhook_trigger": tcr.ResourceTencentCloudTcrWebhookTrigger(), + "tencentcloud_tcr_manage_replication_operation": tcr.ResourceTencentCloudTcrManageReplicationOperation(), + "tencentcloud_tcr_customized_domain": tcr.ResourceTencentCloudTcrCustomizedDomain(), + "tencentcloud_tcr_immutable_tag_rule": tcr.ResourceTencentCloudTcrImmutableTagRule(), + "tencentcloud_tcr_delete_image_operation": tcr.ResourceTencentCloudTcrDeleteImageOperation(), + "tencentcloud_tcr_create_image_signature_operation": tcr.ResourceTencentCloudTcrCreateImageSignatureOperation(), + "tencentcloud_tcr_tag_retention_execution_config": tcr.ResourceTencentCloudTcrTagRetentionExecutionConfig(), + "tencentcloud_tcr_service_account": tcr.ResourceTencentCloudTcrServiceAccount(), + "tencentcloud_tdmq_instance": tpulsar.ResourceTencentCloudTdmqInstance(), + "tencentcloud_tdmq_namespace": tpulsar.ResourceTencentCloudTdmqNamespace(), + "tencentcloud_tdmq_topic": tpulsar.ResourceTencentCloudTdmqTopic(), + "tencentcloud_tdmq_role": tpulsar.ResourceTencentCloudTdmqRole(), + "tencentcloud_tdmq_namespace_role_attachment": tpulsar.ResourceTencentCloudTdmqNamespaceRoleAttachment(), + "tencentcloud_tdmq_subscription_attachment": tpulsar.ResourceTencentCloudTdmqSubscriptionAttachment(), + "tencentcloud_tdmq_rabbitmq_user": trabbit.ResourceTencentCloudTdmqRabbitmqUser(), + "tencentcloud_tdmq_rabbitmq_virtual_host": trabbit.ResourceTencentCloudTdmqRabbitmqVirtualHost(), + "tencentcloud_tdmq_rabbitmq_vip_instance": trabbit.ResourceTencentCloudTdmqRabbitmqVipInstance(), + "tencentcloud_tdmq_send_rocketmq_message": trocket.ResourceTencentCloudTdmqSendRocketmqMessage(), + "tencentcloud_tdmq_professional_cluster": tpulsar.ResourceTencentCloudTdmqProfessionalCluster(), "tencentcloud_cos_bucket_policy": cos.ResourceTencentCloudCosBucketPolicy(), "tencentcloud_cos_bucket_domain_certificate_attachment": cos.ResourceTencentCloudCosBucketDomainCertificateAttachment(), "tencentcloud_cos_bucket_inventory": cos.ResourceTencentCloudCosBucketInventory(), @@ -1442,20 +1476,20 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_protocol_template_group": resourceTencentCloudProtocolTemplateGroup(), + "tencentcloud_address_template": vpc.ResourceTencentCloudAddressTemplate(), + "tencentcloud_address_template_group": vpc.ResourceTencentCloudAddressTemplateGroup(), + "tencentcloud_protocol_template": vpc.ResourceTencentCloudProtocolTemplate(), + "tencentcloud_protocol_template_group": vpc.ResourceTencentCloudProtocolTemplateGroup(), "tencentcloud_kms_key": kms.ResourceTencentCloudKmsKey(), "tencentcloud_kms_external_key": kms.ResourceTencentCloudKmsExternalKey(), "tencentcloud_kms_white_box_key": kms.ResourceTencentCloudKmsWhiteBoxKey(), "tencentcloud_kms_cloud_resource_attachment": kms.ResourceTencentCloudKmsCloudResourceAttachment(), "tencentcloud_kms_overwrite_white_box_device_fingerprints": kms.ResourceTencentCloudKmsOverwriteWhiteBoxDeviceFingerprints(), - "tencentcloud_ssm_secret": resourceTencentCloudSsmSecret(), - "tencentcloud_ssm_ssh_key_pair_secret": resourceTencentCloudSsmSshKeyPairSecret(), - "tencentcloud_ssm_product_secret": resourceTencentCloudSsmProductSecret(), - "tencentcloud_ssm_secret_version": resourceTencentCloudSsmSecretVersion(), - "tencentcloud_ssm_rotate_product_secret": resourceTencentCloudSsmRotateProductSecret(), + "tencentcloud_ssm_secret": ssm.ResourceTencentCloudSsmSecret(), + "tencentcloud_ssm_ssh_key_pair_secret": ssm.ResourceTencentCloudSsmSshKeyPairSecret(), + "tencentcloud_ssm_product_secret": ssm.ResourceTencentCloudSsmProductSecret(), + "tencentcloud_ssm_secret_version": ssm.ResourceTencentCloudSsmSecretVersion(), + "tencentcloud_ssm_rotate_product_secret": ssm.ResourceTencentCloudSsmRotateProductSecret(), "tencentcloud_cdh_instance": cdh.ResourceTencentCloudCdhInstance(), "tencentcloud_dnspod_domain_instance": dnspod.ResourceTencentCloudDnspodDomainInstance(), "tencentcloud_dnspod_domain_alias": dnspod.ResourceTencentCloudDnspodDomainAlias(), @@ -1486,38 +1520,38 @@ func Provider() *schema.Provider { "tencentcloud_cls_data_transform": cls.ResourceTencentCloudClsDataTransform(), "tencentcloud_lighthouse_instance": lighthouse.ResourceTencentCloudLighthouseInstance(), "tencentcloud_lighthouse_firewall_template": lighthouse.ResourceTencentCloudLighthouseFirewallTemplate(), - "tencentcloud_tem_environment": resourceTencentCloudTemEnvironment(), - "tencentcloud_tem_application": resourceTencentCloudTemApplication(), - "tencentcloud_tem_workload": resourceTencentCloudTemWorkload(), - "tencentcloud_tem_app_config": resourceTencentCloudTemAppConfig(), - "tencentcloud_tem_log_config": resourceTencentCloudTemLogConfig(), - "tencentcloud_tem_scale_rule": resourceTencentCloudTemScaleRule(), - "tencentcloud_tem_gateway": resourceTencentCloudTemGateway(), - "tencentcloud_tem_application_service": resourceTencentCloudTemApplicationService(), - "tencentcloud_teo_zone": resourceTencentCloudTeoZone(), - "tencentcloud_teo_zone_setting": resourceTencentCloudTeoZoneSetting(), - "tencentcloud_teo_origin_group": resourceTencentCloudTeoOriginGroup(), - "tencentcloud_teo_rule_engine": resourceTencentCloudTeoRuleEngine(), - "tencentcloud_teo_ownership_verify": resourceTencentCloudTeoOwnershipVerify(), - "tencentcloud_teo_certificate_config": resourceTencentCloudTeoCertificateConfig(), - "tencentcloud_teo_acceleration_domain": resourceTencentCloudTeoAccelerationDomain(), - "tencentcloud_teo_application_proxy": resourceTencentCloudTeoApplicationProxy(), - "tencentcloud_teo_application_proxy_rule": resourceTencentCloudTeoApplicationProxyRule(), - "tencentcloud_tcm_mesh": resourceTencentCloudTcmMesh(), - "tencentcloud_tcm_cluster_attachment": resourceTencentCloudTcmClusterAttachment(), - "tencentcloud_tcm_prometheus_attachment": resourceTencentCloudTcmPrometheusAttachment(), - "tencentcloud_tcm_tracing_config": resourceTencentCloudTcmTracingConfig(), - "tencentcloud_tcm_access_log_config": resourceTencentCloudTcmAccessLogConfig(), - "tencentcloud_ses_domain": resourceTencentCloudSesDomain(), - "tencentcloud_ses_template": resourceTencentCloudSesTemplate(), - "tencentcloud_ses_email_address": resourceTencentCloudSesEmailAddress(), - "tencentcloud_ses_receiver": resourceTencentCloudSesReceiver(), - "tencentcloud_ses_send_email": resourceTencentCloudSesSendEmail(), - "tencentcloud_ses_batch_send_email": resourceTencentCloudSesBatchSendEmail(), - "tencentcloud_ses_verify_domain": resourceTencentCloudSesVerifyDomain(), - "tencentcloud_ses_black_list_delete": resourceTencentCloudSesBlackListDelete(), - "tencentcloud_sms_sign": resourceTencentCloudSmsSign(), - "tencentcloud_sms_template": resourceTencentCloudSmsTemplate(), + "tencentcloud_tem_environment": tem.ResourceTencentCloudTemEnvironment(), + "tencentcloud_tem_application": tem.ResourceTencentCloudTemApplication(), + "tencentcloud_tem_workload": tem.ResourceTencentCloudTemWorkload(), + "tencentcloud_tem_app_config": tem.ResourceTencentCloudTemAppConfig(), + "tencentcloud_tem_log_config": tem.ResourceTencentCloudTemLogConfig(), + "tencentcloud_tem_scale_rule": tem.ResourceTencentCloudTemScaleRule(), + "tencentcloud_tem_gateway": tem.ResourceTencentCloudTemGateway(), + "tencentcloud_tem_application_service": tem.ResourceTencentCloudTemApplicationService(), + "tencentcloud_teo_zone": teo.ResourceTencentCloudTeoZone(), + "tencentcloud_teo_zone_setting": teo.ResourceTencentCloudTeoZoneSetting(), + "tencentcloud_teo_origin_group": teo.ResourceTencentCloudTeoOriginGroup(), + "tencentcloud_teo_rule_engine": teo.ResourceTencentCloudTeoRuleEngine(), + "tencentcloud_teo_ownership_verify": teo.ResourceTencentCloudTeoOwnershipVerify(), + "tencentcloud_teo_certificate_config": teo.ResourceTencentCloudTeoCertificateConfig(), + "tencentcloud_teo_acceleration_domain": teo.ResourceTencentCloudTeoAccelerationDomain(), + "tencentcloud_teo_application_proxy": teo.ResourceTencentCloudTeoApplicationProxy(), + "tencentcloud_teo_application_proxy_rule": teo.ResourceTencentCloudTeoApplicationProxyRule(), + "tencentcloud_tcm_mesh": tcm.ResourceTencentCloudTcmMesh(), + "tencentcloud_tcm_cluster_attachment": tcm.ResourceTencentCloudTcmClusterAttachment(), + "tencentcloud_tcm_prometheus_attachment": tcm.ResourceTencentCloudTcmPrometheusAttachment(), + "tencentcloud_tcm_tracing_config": tcm.ResourceTencentCloudTcmTracingConfig(), + "tencentcloud_tcm_access_log_config": tcm.ResourceTencentCloudTcmAccessLogConfig(), + "tencentcloud_ses_domain": ses.ResourceTencentCloudSesDomain(), + "tencentcloud_ses_template": ses.ResourceTencentCloudSesTemplate(), + "tencentcloud_ses_email_address": ses.ResourceTencentCloudSesEmailAddress(), + "tencentcloud_ses_receiver": ses.ResourceTencentCloudSesReceiver(), + "tencentcloud_ses_send_email": ses.ResourceTencentCloudSesSendEmail(), + "tencentcloud_ses_batch_send_email": ses.ResourceTencentCloudSesBatchSendEmail(), + "tencentcloud_ses_verify_domain": ses.ResourceTencentCloudSesVerifyDomain(), + "tencentcloud_ses_black_list_delete": ses.ResourceTencentCloudSesBlackListDelete(), + "tencentcloud_sms_sign": sms.ResourceTencentCloudSmsSign(), + "tencentcloud_sms_template": sms.ResourceTencentCloudSmsTemplate(), "tencentcloud_dcdb_account": dcdb.ResourceTencentCloudDcdbAccount(), "tencentcloud_dcdb_hourdb_instance": dcdb.ResourceTencentCloudDcdbHourdbInstance(), "tencentcloud_dcdb_security_group_attachment": dcdb.ResourceTencentCloudDcdbSecurityGroupAttachment(), @@ -1550,8 +1584,8 @@ func Provider() *schema.Provider { "tencentcloud_mariadb_restart_instance": mariadb.ResourceTencentCloudMariadbRestartInstance(), "tencentcloud_mariadb_renew_instance": mariadb.ResourceTencentCloudMariadbRenewInstance(), "tencentcloud_mariadb_instance_config": mariadb.ResourceTencentCloudMariadbInstanceConfig(), - "tencentcloud_tdcpg_cluster": resourceTencentCloudTdcpgCluster(), - "tencentcloud_tdcpg_instance": resourceTencentCloudTdcpgInstance(), + "tencentcloud_tdcpg_cluster": tdcpg.ResourceTencentCloudTdcpgCluster(), + "tencentcloud_tdcpg_instance": tdcpg.ResourceTencentCloudTdcpgInstance(), "tencentcloud_css_watermark": css.ResourceTencentCloudCssWatermark(), "tencentcloud_css_watermark_rule_attachment": css.ResourceTencentCloudCssWatermarkRuleAttachment(), "tencentcloud_css_pull_stream_task": css.ResourceTencentCloudCssPullStreamTask(), @@ -1588,19 +1622,19 @@ func Provider() *schema.Provider { "tencentcloud_pts_cron_job_restart": pts.ResourceTencentCloudPtsCronJobRestart(), "tencentcloud_pts_job_abort": pts.ResourceTencentCloudPtsJobAbort(), "tencentcloud_pts_cron_job_abort": pts.ResourceTencentCloudPtsCronJobAbort(), - "tencentcloud_tat_command": resourceTencentCloudTatCommand(), - "tencentcloud_tat_invoker": resourceTencentCloudTatInvoker(), - "tencentcloud_tat_invoker_config": resourceTencentCloudTatInvokerConfig(), - "tencentcloud_tat_invocation_invoke_attachment": resourceTencentCloudTatInvocationInvokeAttachment(), - "tencentcloud_tat_invocation_command_attachment": resourceTencentCloudTatInvocationCommandAttachment(), - "tencentcloud_organization_org_node": resourceTencentCloudOrganizationOrgNode(), - "tencentcloud_organization_org_member": resourceTencentCloudOrganizationOrgMember(), - "tencentcloud_organization_org_identity": resourceTencentCloudOrganizationOrgIdentity(), - "tencentcloud_organization_org_member_email": resourceTencentCloudOrganizationOrgMemberEmail(), - "tencentcloud_organization_instance": resourceTencentCloudOrganizationOrganization(), - "tencentcloud_organization_policy_sub_account_attachment": resourceTencentCloudOrganizationPolicySubAccountAttachment(), - "tencentcloud_organization_org_member_auth_identity_attachment": resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachment(), - "tencentcloud_organization_org_member_policy_attachment": resourceTencentCloudOrganizationOrgMemberPolicyAttachment(), + "tencentcloud_tat_command": tat.ResourceTencentCloudTatCommand(), + "tencentcloud_tat_invoker": tat.ResourceTencentCloudTatInvoker(), + "tencentcloud_tat_invoker_config": tat.ResourceTencentCloudTatInvokerConfig(), + "tencentcloud_tat_invocation_invoke_attachment": tat.ResourceTencentCloudTatInvocationInvokeAttachment(), + "tencentcloud_tat_invocation_command_attachment": tat.ResourceTencentCloudTatInvocationCommandAttachment(), + "tencentcloud_organization_org_node": tco.ResourceTencentCloudOrganizationOrgNode(), + "tencentcloud_organization_org_member": tco.ResourceTencentCloudOrganizationOrgMember(), + "tencentcloud_organization_org_identity": tco.ResourceTencentCloudOrganizationOrgIdentity(), + "tencentcloud_organization_org_member_email": tco.ResourceTencentCloudOrganizationOrgMemberEmail(), + "tencentcloud_organization_instance": tco.ResourceTencentCloudOrganizationOrganization(), + "tencentcloud_organization_policy_sub_account_attachment": tco.ResourceTencentCloudOrganizationPolicySubAccountAttachment(), + "tencentcloud_organization_org_member_auth_identity_attachment": tco.ResourceTencentCloudOrganizationOrgMemberAuthIdentityAttachment(), + "tencentcloud_organization_org_member_policy_attachment": tco.ResourceTencentCloudOrganizationOrgMemberPolicyAttachment(), "tencentcloud_dbbrain_sql_filter": dbbrain.ResourceTencentCloudDbbrainSqlFilter(), "tencentcloud_dbbrain_security_audit_log_export_task": dbbrain.ResourceTencentCloudDbbrainSecurityAuditLogExportTask(), "tencentcloud_dbbrain_db_diag_report_task": dbbrain.ResourceTencentCloudDbbrainDbDiagReportTask(), @@ -1613,17 +1647,17 @@ func Provider() *schema.Provider { "tencentcloud_rum_instance_status_config": rum.ResourceTencentCloudRumInstanceStatusConfig(), "tencentcloud_rum_project_status_config": rum.ResourceTencentCloudRumProjectStatusConfig(), "tencentcloud_rum_release_file": rum.ResourceTencentCloudRumReleaseFile(), - "tencentcloud_tdmq_rocketmq_cluster": resourceTencentCloudTdmqRocketmqCluster(), - "tencentcloud_tdmq_rocketmq_namespace": resourceTencentCloudTdmqRocketmqNamespace(), - "tencentcloud_tdmq_rocketmq_role": resourceTencentCloudTdmqRocketmqRole(), - "tencentcloud_tdmq_rocketmq_topic": resourceTencentCloudTdmqRocketmqTopic(), - "tencentcloud_tdmq_rocketmq_group": resourceTencentCloudTdmqRocketmqGroup(), - "tencentcloud_tdmq_rocketmq_environment_role": resourceTencentCloudTdmqRocketmqEnvironmentRole(), - "tencentcloud_tdmq_rocketmq_vip_instance": resourceTencentCloudTdmqRocketmqVipInstance(), - "tencentcloud_trocket_rocketmq_instance": resourceTencentCloudTrocketRocketmqInstance(), - "tencentcloud_trocket_rocketmq_topic": resourceTencentCloudTrocketRocketmqTopic(), - "tencentcloud_trocket_rocketmq_consumer_group": resourceTencentCloudTrocketRocketmqConsumerGroup(), - "tencentcloud_trocket_rocketmq_role": resourceTencentCloudTrocketRocketmqRole(), + "tencentcloud_tdmq_rocketmq_cluster": trocket.ResourceTencentCloudTdmqRocketmqCluster(), + "tencentcloud_tdmq_rocketmq_namespace": trocket.ResourceTencentCloudTdmqRocketmqNamespace(), + "tencentcloud_tdmq_rocketmq_role": trocket.ResourceTencentCloudTdmqRocketmqRole(), + "tencentcloud_tdmq_rocketmq_topic": trocket.ResourceTencentCloudTdmqRocketmqTopic(), + "tencentcloud_tdmq_rocketmq_group": trocket.ResourceTencentCloudTdmqRocketmqGroup(), + "tencentcloud_tdmq_rocketmq_environment_role": trocket.ResourceTencentCloudTdmqRocketmqEnvironmentRole(), + "tencentcloud_tdmq_rocketmq_vip_instance": trocket.ResourceTencentCloudTdmqRocketmqVipInstance(), + "tencentcloud_trocket_rocketmq_instance": trocket.ResourceTencentCloudTrocketRocketmqInstance(), + "tencentcloud_trocket_rocketmq_topic": trocket.ResourceTencentCloudTrocketRocketmqTopic(), + "tencentcloud_trocket_rocketmq_consumer_group": trocket.ResourceTencentCloudTrocketRocketmqConsumerGroup(), + "tencentcloud_trocket_rocketmq_role": trocket.ResourceTencentCloudTrocketRocketmqRole(), "tencentcloud_dts_sync_job": dts.ResourceTencentCloudDtsSyncJob(), "tencentcloud_dts_sync_config": dts.ResourceTencentCloudDtsSyncConfig(), "tencentcloud_dts_sync_check_job_operation": dts.ResourceTencentCloudDtsSyncCheckJobOperation(), @@ -1649,9 +1683,9 @@ func Provider() *schema.Provider { "tencentcloud_vpc_end_point_service_white_list": pls.ResourceTencentCloudVpcEndPointServiceWhiteList(), "tencentcloud_vpc_enable_end_point_connect": pls.ResourceTencentCloudVpcEnableEndPointConnect(), "tencentcloud_ci_bucket_attachment": ci.ResourceTencentCloudCiBucketAttachment(), - "tencentcloud_tcmq_queue": resourceTencentCloudTcmqQueue(), - "tencentcloud_tcmq_topic": resourceTencentCloudTcmqTopic(), - "tencentcloud_tcmq_subscribe": resourceTencentCloudTcmqSubscribe(), + "tencentcloud_tcmq_queue": tcmq.ResourceTencentCloudTcmqQueue(), + "tencentcloud_tcmq_topic": tcmq.ResourceTencentCloudTcmqTopic(), + "tencentcloud_tcmq_subscribe": tcmq.ResourceTencentCloudTcmqSubscribe(), "tencentcloud_ci_bucket_pic_style": ci.ResourceTencentCloudCiBucketPicStyle(), "tencentcloud_ci_hot_link": ci.ResourceTencentCloudCiHotLink(), "tencentcloud_ci_media_snapshot_template": ci.ResourceTencentCloudCiMediaSnapshotTemplate(), @@ -1683,36 +1717,36 @@ func Provider() *schema.Provider { "tencentcloud_antiddos_port_acl_config": dayuv2.ResourceTencentCloudAntiddosPortAclConfig(), "tencentcloud_antiddos_cc_black_white_ip": dayuv2.ResourceTencentCloudAntiddosCcBlackWhiteIp(), "tencentcloud_antiddos_cc_precision_policy": dayuv2.ResourceTencentCloudAntiddosCcPrecisionPolicy(), - "tencentcloud_tsf_microservice": resourceTencentCloudTsfMicroservice(), - "tencentcloud_tsf_application_config": resourceTencentCloudTsfApplicationConfig(), + "tencentcloud_tsf_microservice": tsf.ResourceTencentCloudTsfMicroservice(), + "tencentcloud_tsf_application_config": tsf.ResourceTencentCloudTsfApplicationConfig(), "tencentcloud_cvm_launch_template": cvm.ResourceTencentCloudCvmLaunchTemplate(), - "tencentcloud_tsf_cluster": resourceTencentCloudTsfCluster(), - "tencentcloud_tsf_api_group": resourceTencentCloudTsfApiGroup(), - "tencentcloud_tsf_namespace": resourceTencentCloudTsfNamespace(), - "tencentcloud_tsf_path_rewrite": resourceTencentCloudTsfPathRewrite(), - "tencentcloud_tsf_unit_rule": resourceTencentCloudTsfUnitRule(), - "tencentcloud_tsf_task": resourceTencentCloudTsfTask(), - "tencentcloud_tsf_config_template": resourceTencentCloudTsfConfigTemplate(), - "tencentcloud_tsf_api_rate_limit_rule": resourceTencentCloudTsfApiRateLimitRule(), - "tencentcloud_tsf_application_release_config": resourceTencentCloudTsfApplicationReleaseConfig(), - "tencentcloud_tsf_lane": resourceTencentCloudTsfLane(), - "tencentcloud_tsf_lane_rule": resourceTencentCloudTsfLaneRule(), - "tencentcloud_tsf_group": resourceTencentCloudTsfGroup(), - "tencentcloud_tsf_repository": resourceTencentCloudTsfRepository(), - "tencentcloud_tsf_application": resourceTencentCloudTsfApplication(), - "tencentcloud_tsf_application_public_config_release": resourceTencentCloudTsfApplicationPublicConfigRelease(), - "tencentcloud_tsf_application_public_config": resourceTencentCloudTsfApplicationPublicConfig(), - "tencentcloud_tsf_application_file_config_release": resourceTencentCloudTsfApplicationFileConfigRelease(), - "tencentcloud_tsf_instances_attachment": resourceTencentCloudTsfInstancesAttachment(), - "tencentcloud_tsf_bind_api_group": resourceTencentCloudTsfBindApiGroup(), - "tencentcloud_tsf_application_file_config": resourceTencentCloudTsfApplicationFileConfig(), - "tencentcloud_tsf_enable_unit_rule": resourceTencentCloudTsfEnableUnitRule(), - "tencentcloud_tsf_deploy_container_group": resourceTencentCloudTsfDeployContainerGroup(), - "tencentcloud_tsf_deploy_vm_group": resourceTencentCloudTsfDeployVmGroup(), - "tencentcloud_tsf_release_api_group": resourceTencentCloudTsfReleaseApiGroup(), - "tencentcloud_tsf_operate_container_group": resourceTencentCloudTsfOperateContainerGroup(), - "tencentcloud_tsf_operate_group": resourceTencentCloudTsfOperateGroup(), - "tencentcloud_tsf_unit_namespace": resourceTencentCloudTsfUnitNamespace(), + "tencentcloud_tsf_cluster": tsf.ResourceTencentCloudTsfCluster(), + "tencentcloud_tsf_api_group": tsf.ResourceTencentCloudTsfApiGroup(), + "tencentcloud_tsf_namespace": tsf.ResourceTencentCloudTsfNamespace(), + "tencentcloud_tsf_path_rewrite": tsf.ResourceTencentCloudTsfPathRewrite(), + "tencentcloud_tsf_unit_rule": tsf.ResourceTencentCloudTsfUnitRule(), + "tencentcloud_tsf_task": tsf.ResourceTencentCloudTsfTask(), + "tencentcloud_tsf_config_template": tsf.ResourceTencentCloudTsfConfigTemplate(), + "tencentcloud_tsf_api_rate_limit_rule": tsf.ResourceTencentCloudTsfApiRateLimitRule(), + "tencentcloud_tsf_application_release_config": tsf.ResourceTencentCloudTsfApplicationReleaseConfig(), + "tencentcloud_tsf_lane": tsf.ResourceTencentCloudTsfLane(), + "tencentcloud_tsf_lane_rule": tsf.ResourceTencentCloudTsfLaneRule(), + "tencentcloud_tsf_group": tsf.ResourceTencentCloudTsfGroup(), + "tencentcloud_tsf_repository": tsf.ResourceTencentCloudTsfRepository(), + "tencentcloud_tsf_application": tsf.ResourceTencentCloudTsfApplication(), + "tencentcloud_tsf_application_public_config_release": tsf.ResourceTencentCloudTsfApplicationPublicConfigRelease(), + "tencentcloud_tsf_application_public_config": tsf.ResourceTencentCloudTsfApplicationPublicConfig(), + "tencentcloud_tsf_application_file_config_release": tsf.ResourceTencentCloudTsfApplicationFileConfigRelease(), + "tencentcloud_tsf_instances_attachment": tsf.ResourceTencentCloudTsfInstancesAttachment(), + "tencentcloud_tsf_bind_api_group": tsf.ResourceTencentCloudTsfBindApiGroup(), + "tencentcloud_tsf_application_file_config": tsf.ResourceTencentCloudTsfApplicationFileConfig(), + "tencentcloud_tsf_enable_unit_rule": tsf.ResourceTencentCloudTsfEnableUnitRule(), + "tencentcloud_tsf_deploy_container_group": tsf.ResourceTencentCloudTsfDeployContainerGroup(), + "tencentcloud_tsf_deploy_vm_group": tsf.ResourceTencentCloudTsfDeployVmGroup(), + "tencentcloud_tsf_release_api_group": tsf.ResourceTencentCloudTsfReleaseApiGroup(), + "tencentcloud_tsf_operate_container_group": tsf.ResourceTencentCloudTsfOperateContainerGroup(), + "tencentcloud_tsf_operate_group": tsf.ResourceTencentCloudTsfOperateGroup(), + "tencentcloud_tsf_unit_namespace": tsf.ResourceTencentCloudTsfUnitNamespace(), "tencentcloud_mps_workflow": mps.ResourceTencentCloudMpsWorkflow(), "tencentcloud_mps_enable_workflow_config": mps.ResourceTencentCloudMpsEnableWorkflowConfig(), "tencentcloud_mps_flow": mps.ResourceTencentCloudMpsFlow(), @@ -1762,10 +1796,10 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_cvm_modify_instance_disk_type": resourceTencentCloudCvmModifyInstanceDiskType(), + "tencentcloud_cvm_import_image": cvm.ResourceTencentCloudCvmImportImage(), + "tencentcloud_cvm_renew_host": cvm.ResourceTencentCloudCvmRenewHost(), + "tencentcloud_cvm_program_fpga_image": cvm.ResourceTencentCloudCvmProgramFpgaImage(), + "tencentcloud_cvm_modify_instance_disk_type": cvm.ResourceTencentCloudCvmModifyInstanceDiskType(), "tencentcloud_lighthouse_disk_backup": lighthouse.ResourceTencentCloudLighthouseDiskBackup(), "tencentcloud_lighthouse_apply_disk_backup": lighthouse.ResourceTencentCloudLighthouseApplyDiskBackup(), "tencentcloud_lighthouse_disk_attachment": lighthouse.ResourceTencentCloudLighthouseDiskAttachment(), @@ -1789,17 +1823,17 @@ func Provider() *schema.Provider { "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(), - "tencentcloud_tse_cngw_service": resourceTencentCloudTseCngwService(), - "tencentcloud_tse_cngw_service_rate_limit": resourceTencentCloudTseCngwServiceRateLimit(), - "tencentcloud_tse_cngw_route": resourceTencentCloudTseCngwRoute(), - "tencentcloud_tse_cngw_route_rate_limit": resourceTencentCloudTseCngwRouteRateLimit(), - "tencentcloud_tse_cngw_canary_rule": resourceTencentCloudTseCngwCanaryRule(), - "tencentcloud_tse_cngw_certificate": resourceTencentCloudTseCngwCertificate(), - "tencentcloud_tse_waf_protection": resourceTencentCloudTseWafProtection(), - "tencentcloud_tse_waf_domains": resourceTencentCloudTseWafDomains(), + "tencentcloud_tse_instance": tse.ResourceTencentCloudTseInstance(), + "tencentcloud_tse_cngw_gateway": tse.ResourceTencentCloudTseCngwGateway(), + "tencentcloud_tse_cngw_group": tse.ResourceTencentCloudTseCngwGroup(), + "tencentcloud_tse_cngw_service": tse.ResourceTencentCloudTseCngwService(), + "tencentcloud_tse_cngw_service_rate_limit": tse.ResourceTencentCloudTseCngwServiceRateLimit(), + "tencentcloud_tse_cngw_route": tse.ResourceTencentCloudTseCngwRoute(), + "tencentcloud_tse_cngw_route_rate_limit": tse.ResourceTencentCloudTseCngwRouteRateLimit(), + "tencentcloud_tse_cngw_canary_rule": tse.ResourceTencentCloudTseCngwCanaryRule(), + "tencentcloud_tse_cngw_certificate": tse.ResourceTencentCloudTseCngwCertificate(), + "tencentcloud_tse_waf_protection": tse.ResourceTencentCloudTseWafProtection(), + "tencentcloud_tse_waf_domains": tse.ResourceTencentCloudTseWafDomains(), "tencentcloud_clickhouse_instance": cdwch.ResourceTencentCloudClickhouseInstance(), "tencentcloud_cls_kafka_recharge": cls.ResourceTencentCloudClsKafkaRecharge(), "tencentcloud_cls_scheduled_sql": cls.ResourceTencentCloudClsScheduledSql(), @@ -1820,43 +1854,43 @@ func Provider() *schema.Provider { "tencentcloud_dlc_modify_user_typ_operation": dlc.ResourceTencentCloudDlcModifyUserTypOperation(), "tencentcloud_dlc_renew_data_engine_operation": dlc.ResourceTencentCloudDlcRenewDataEngineOperation(), "tencentcloud_dlc_restart_data_engine_operation": dlc.ResourceTencentCloudDlcRestartDataEngineOperation(), - "tencentcloud_dlc_attach_user_policy_operation": resourceTencentCloudDlcAttachUserPolicyOperation(), - "tencentcloud_dlc_detach_user_policy_operation": resourceTencentCloudDlcDetachUserPolicyOperation(), - "tencentcloud_dlc_attach_work_group_policy_operation": resourceTencentCloudDlcAttachWorkGroupPolicyOperation(), - "tencentcloud_dlc_detach_work_group_policy_operation": resourceTencentCloudDlcDetachWorkGroupPolicyOperation(), + "tencentcloud_dlc_attach_user_policy_operation": dlc.ResourceTencentCloudDlcAttachUserPolicyOperation(), + "tencentcloud_dlc_detach_user_policy_operation": dlc.ResourceTencentCloudDlcDetachUserPolicyOperation(), + "tencentcloud_dlc_attach_work_group_policy_operation": dlc.ResourceTencentCloudDlcAttachWorkGroupPolicyOperation(), + "tencentcloud_dlc_detach_work_group_policy_operation": dlc.ResourceTencentCloudDlcDetachWorkGroupPolicyOperation(), "tencentcloud_dlc_switch_data_engine_image_operation": dlc.ResourceTencentCloudDlcSwitchDataEngineImageOperation(), "tencentcloud_dlc_update_data_engine_config_operation": dlc.ResourceTencentCloudDlcUpdateDataEngineConfigOperation(), "tencentcloud_dlc_upgrade_data_engine_image_operation": dlc.ResourceTencentCloudDlcUpgradeDataEngineImageOperation(), "tencentcloud_dlc_bind_work_groups_to_user_attachment": dlc.ResourceTencentCloudDlcBindWorkGroupsToUserAttachment(), "tencentcloud_dlc_update_row_filter_operation": dlc.ResourceTencentCloudDlcUpdateRowFilterOperation(), "tencentcloud_dlc_user_data_engine_config": dlc.ResourceTencentCloudDlcUserDataEngineConfig(), - "tencentcloud_waf_custom_rule": resourceTencentCloudWafCustomRule(), - "tencentcloud_waf_custom_white_rule": resourceTencentCloudWafCustomWhiteRule(), - "tencentcloud_waf_clb_domain": resourceTencentCloudWafClbDomain(), - "tencentcloud_waf_saas_domain": resourceTencentCloudWafSaasDomain(), - "tencentcloud_waf_clb_instance": resourceTencentCloudWafClbInstance(), - "tencentcloud_waf_saas_instance": resourceTencentCloudWafSaasInstance(), - "tencentcloud_waf_anti_fake": resourceTencentCloudWafAntiFake(), - "tencentcloud_waf_anti_info_leak": resourceTencentCloudWafAntiInfoLeak(), - "tencentcloud_waf_auto_deny_rules": resourceTencentCloudWafAutoDenyRules(), - "tencentcloud_waf_module_status": resourceTencentCloudWafModuleStatus(), - "tencentcloud_waf_protection_mode": resourceTencentCloudWafProtectionMode(), - "tencentcloud_waf_web_shell": resourceTencentCloudWafWebShell(), - "tencentcloud_waf_cc": resourceTencentCloudWafCc(), - "tencentcloud_waf_cc_auto_status": resourceTencentCloudWafCcAutoStatus(), - "tencentcloud_waf_cc_session": resourceTencentCloudWafCcSession(), - "tencentcloud_waf_ip_access_control": resourceTencentCloudWafIpAccessControl(), - "tencentcloud_waf_modify_access_period": resourceTencentCloudWafModifyAccessPeriod(), - "tencentcloud_wedata_rule_template": resourceTencentCloudWedataRuleTemplate(), - "tencentcloud_wedata_datasource": resourceTencentCloudWedataDatasource(), - "tencentcloud_wedata_function": resourceTencentCloudWedataFunction(), - "tencentcloud_wedata_resource": resourceTencentCloudWedataResource(), - "tencentcloud_wedata_script": resourceTencentCloudWedataScript(), - "tencentcloud_wedata_dq_rule": resourceTencentCloudWedataDqRule(), - "tencentcloud_wedata_baseline": resourceTencentCloudWedataBaseline(), - "tencentcloud_wedata_integration_offline_task": resourceTencentCloudWedataIntegrationOfflineTask(), - "tencentcloud_wedata_integration_realtime_task": resourceTencentCloudWedataIntegrationRealtimeTask(), - "tencentcloud_wedata_integration_task_node": resourceTencentCloudWedataIntegrationTaskNode(), + "tencentcloud_waf_custom_rule": waf.ResourceTencentCloudWafCustomRule(), + "tencentcloud_waf_custom_white_rule": waf.ResourceTencentCloudWafCustomWhiteRule(), + "tencentcloud_waf_clb_domain": waf.ResourceTencentCloudWafClbDomain(), + "tencentcloud_waf_saas_domain": waf.ResourceTencentCloudWafSaasDomain(), + "tencentcloud_waf_clb_instance": waf.ResourceTencentCloudWafClbInstance(), + "tencentcloud_waf_saas_instance": waf.ResourceTencentCloudWafSaasInstance(), + "tencentcloud_waf_anti_fake": waf.ResourceTencentCloudWafAntiFake(), + "tencentcloud_waf_anti_info_leak": waf.ResourceTencentCloudWafAntiInfoLeak(), + "tencentcloud_waf_auto_deny_rules": waf.ResourceTencentCloudWafAutoDenyRules(), + "tencentcloud_waf_module_status": waf.ResourceTencentCloudWafModuleStatus(), + "tencentcloud_waf_protection_mode": waf.ResourceTencentCloudWafProtectionMode(), + "tencentcloud_waf_web_shell": waf.ResourceTencentCloudWafWebShell(), + "tencentcloud_waf_cc": waf.ResourceTencentCloudWafCc(), + "tencentcloud_waf_cc_auto_status": waf.ResourceTencentCloudWafCcAutoStatus(), + "tencentcloud_waf_cc_session": waf.ResourceTencentCloudWafCcSession(), + "tencentcloud_waf_ip_access_control": waf.ResourceTencentCloudWafIpAccessControl(), + "tencentcloud_waf_modify_access_period": waf.ResourceTencentCloudWafModifyAccessPeriod(), + "tencentcloud_wedata_rule_template": wedata.ResourceTencentCloudWedataRuleTemplate(), + "tencentcloud_wedata_datasource": wedata.ResourceTencentCloudWedataDatasource(), + "tencentcloud_wedata_function": wedata.ResourceTencentCloudWedataFunction(), + "tencentcloud_wedata_resource": wedata.ResourceTencentCloudWedataResource(), + "tencentcloud_wedata_script": wedata.ResourceTencentCloudWedataScript(), + "tencentcloud_wedata_dq_rule": wedata.ResourceTencentCloudWedataDqRule(), + "tencentcloud_wedata_baseline": wedata.ResourceTencentCloudWedataBaseline(), + "tencentcloud_wedata_integration_offline_task": wedata.ResourceTencentCloudWedataIntegrationOfflineTask(), + "tencentcloud_wedata_integration_realtime_task": wedata.ResourceTencentCloudWedataIntegrationRealtimeTask(), + "tencentcloud_wedata_integration_task_node": wedata.ResourceTencentCloudWedataIntegrationTaskNode(), "tencentcloud_cfw_address_template": cfw.ResourceTencentCloudCfwAddressTemplate(), "tencentcloud_cfw_block_ignore": cfw.ResourceTencentCloudCfwBlockIgnore(), "tencentcloud_cfw_edge_policy": cfw.ResourceTencentCloudCfwEdgePolicy(), @@ -1883,20 +1917,20 @@ func Provider() *schema.Provider { "tencentcloud_dasb_reset_user": bh.ResourceTencentCloudDasbResetUser(), "tencentcloud_dasb_bind_device_account_private_key": bh.ResourceTencentCloudDasbBindDeviceAccountPrivateKey(), "tencentcloud_dasb_bind_device_account_password": bh.ResourceTencentCloudDasbBindDeviceAccountPassword(), - "tencentcloud_ssl_check_certificate_chain_operation": resourceTencentCloudSslCheckCertificateChainOperation(), - "tencentcloud_ssl_complete_certificate_operation": resourceTencentCloudSslCompleteCertificateOperation(), - "tencentcloud_ssl_deploy_certificate_instance_operation": resourceTencentCloudSslDeployCertificateInstanceOperation(), - "tencentcloud_ssl_deploy_certificate_record_retry_operation": resourceTencentCloudSslDeployCertificateRecordRetryOperation(), - "tencentcloud_ssl_deploy_certificate_record_rollback_operation": resourceTencentCloudSslDeployCertificateRecordRollbackOperation(), - "tencentcloud_ssl_download_certificate_operation": resourceTencentCloudSslDownloadCertificateOperation(), + "tencentcloud_ssl_check_certificate_chain_operation": ssl.ResourceTencentCloudSslCheckCertificateChainOperation(), + "tencentcloud_ssl_complete_certificate_operation": ssl.ResourceTencentCloudSslCompleteCertificateOperation(), + "tencentcloud_ssl_deploy_certificate_instance_operation": ssl.ResourceTencentCloudSslDeployCertificateInstanceOperation(), + "tencentcloud_ssl_deploy_certificate_record_retry_operation": ssl.ResourceTencentCloudSslDeployCertificateRecordRetryOperation(), + "tencentcloud_ssl_deploy_certificate_record_rollback_operation": ssl.ResourceTencentCloudSslDeployCertificateRecordRollbackOperation(), + "tencentcloud_ssl_download_certificate_operation": ssl.ResourceTencentCloudSslDownloadCertificateOperation(), "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(), - "tencentcloud_ssl_update_certificate_record_retry_operation": resourceTencentCloudSslUpdateCertificateRecordRetryOperation(), - "tencentcloud_ssl_update_certificate_record_rollback_operation": resourceTencentCloudSslUpdateCertificateRecordRollbackOperation(), - "tencentcloud_ssl_upload_revoke_letter_operation": resourceTencentCloudSslUploadRevokeLetterOperation(), + "tencentcloud_ssl_replace_certificate_operation": ssl.ResourceTencentCloudSslReplaceCertificateOperation(), + "tencentcloud_ssl_revoke_certificate_operation": ssl.ResourceTencentCloudSslRevokeCertificateOperation(), + "tencentcloud_ssl_update_certificate_instance_operation": ssl.ResourceTencentCloudSslUpdateCertificateInstanceOperation(), + "tencentcloud_ssl_update_certificate_record_retry_operation": ssl.ResourceTencentCloudSslUpdateCertificateRecordRetryOperation(), + "tencentcloud_ssl_update_certificate_record_rollback_operation": ssl.ResourceTencentCloudSslUpdateCertificateRecordRollbackOperation(), + "tencentcloud_ssl_upload_revoke_letter_operation": ssl.ResourceTencentCloudSslUploadRevokeLetterOperation(), "tencentcloud_bi_project": bi.ResourceTencentCloudBiProject(), "tencentcloud_bi_user_role": bi.ResourceTencentCloudBiUserRole(), "tencentcloud_bi_project_user_role": bi.ResourceTencentCloudBiProjectUserRole(), @@ -1908,9 +1942,9 @@ func Provider() *schema.Provider { "tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(), "tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(), "tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(), - "tencentcloud_vpc_peer_connect_manager": resourceTencentCloudVpcPeerConnectManager(), - "tencentcloud_vpc_peer_connect_accept_operation": resourceTencentCloudVpcPeerConnectAcceptOperation(), - "tencentcloud_vpc_peer_connect_reject_operation": resourceTencentCloudVpcPeerConnectRejectOperation(), + "tencentcloud_vpc_peer_connect_manager": vpc.ResourceTencentCloudVpcPeerConnectManager(), + "tencentcloud_vpc_peer_connect_accept_operation": vpc.ResourceTencentCloudVpcPeerConnectAcceptOperation(), + "tencentcloud_vpc_peer_connect_reject_operation": vpc.ResourceTencentCloudVpcPeerConnectRejectOperation(), }, ConfigureFunc: providerConfigure, @@ -2059,7 +2093,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { func genClientWithSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSessionName string, assumeRoleSessionDuration int, assumeRolePolicy string) error { // applying STS credentials - request := sts.NewAssumeRoleRequest() + request := sdksts.NewAssumeRoleRequest() request.RoleArn = helper.String(assumeRoleArn) request.RoleSessionName = helper.String(assumeRoleSessionName) request.DurationSeconds = helper.IntUint64(assumeRoleSessionDuration) diff --git a/tencentcloud/provider.md b/tencentcloud/provider.md index 8b813fc762..7fe5483ce1 100644 --- a/tencentcloud/provider.md +++ b/tencentcloud/provider.md @@ -943,7 +943,7 @@ SQLServer tencentcloud_sqlserver_dbs tencentcloud_sqlserver_accounts tencentcloud_sqlserver_account_db_attachments - tencentcloud_sqlserver_readonly_groups + tencentcloud_sqlserver_readonly_groups tencentcloud_sqlserver_publish_subscribes tencentcloud_sqlserver_basic_instances tencentcloud_sqlserver_backup_commands diff --git a/tencentcloud/provider_test.go b/tencentcloud/provider_test.go index 8ed5c1783f..7a01e5d6ea 100644 --- a/tencentcloud/provider_test.go +++ b/tencentcloud/provider_test.go @@ -2,61 +2,18 @@ package tencentcloud import ( "fmt" - "log" "os" "testing" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - - "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" -) - -var testAccProviders map[string]*schema.Provider -var testAccProvider *schema.Provider - -const ( - ACCOUNT_TYPE_INTERNATIONAL = "INTERNATIONAL" - ACCOUNT_TYPE_PREPAY = "PREPAY" - ACCOUNT_TYPE_COMMON = "COMMON" - ACCOUNT_TYPE_PRIVATE = "PRIVATE" - ACCOUNT_TYPE_SUB_ACCOUNT = "SUB_ACCOUNT" - ACCOUNT_TYPE_SMS = "SMS" - ACCOUNT_TYPE_SES = "SES" - ACCOUNT_TYPE_TSF = "TSF" - ACCOUNT_TYPE_SSL = "SSL" - ACCOUNT_TYPE_ORGANIZATION = "ORGANIZATION" - INTERNATIONAL_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_INTERNATIONAL" - INTERNATIONAL_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_INTERNATIONAL" - PREPAY_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_PREPAY" - PREPAY_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_PREPAY" - PRIVATE_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_PRIVATE" - PRIVATE_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_PRIVATE" - COMMON_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_COMMON" - COMMON_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_COMMON" - SUB_ACCOUNT_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_SUB_ACCOUNT" - SUB_ACCOUNT_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_SUB_ACCOUNT" - SMS_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_SMS" - SMS_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_SMS" - TSF_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_TSF" - TSF_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_TSF" - SSL_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_SSL" - SSL_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_SSL" - ORGANIZATION_PROVIDER_SECRET_ID = "TENCENTCLOUD_SECRET_ID_ORGANIZATION" - ORGANIZATION_PROVIDER_SECRET_KEY = "TENCENTCLOUD_SECRET_KEY_ORGANIZATION" ) func init() { - testAccProvider = Provider() - testAccProviders = map[string]*schema.Provider{ - "tencentcloud": testAccProvider, - } envProject := os.Getenv("QCI_JOB_ID") envNum := os.Getenv("QCI_BUILD_NUMBER") envId := os.Getenv("QCI_BUILD_ID") reqCli := fmt.Sprintf("Terraform-%s/%s-%s", envProject, envNum, envId) - os.Setenv(connectivity.REQUEST_CLIENT, reqCli) + _ = os.Setenv(connectivity.REQUEST_CLIENT, reqCli) } func TestProvider(t *testing.T) { @@ -68,150 +25,3 @@ func TestProvider(t *testing.T) { func TestProviderImpl(t *testing.T) { var _ = Provider() } - -func testAccPreCheck(t *testing.T) { - if v := os.Getenv(PROVIDER_SECRET_ID); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_ID) - } - if v := os.Getenv(PROVIDER_SECRET_KEY); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_KEY) - } - if v := os.Getenv(PROVIDER_REGION); v == "" { - log.Printf("[INFO] Testing: Using %s as test region", defaultRegion) - os.Setenv(PROVIDER_REGION, defaultRegion) - } - if v := os.Getenv(COMMON_PROVIDER_SECRET_ID); v != "" { - secretId := os.Getenv(COMMON_PROVIDER_SECRET_ID) - os.Setenv(PROVIDER_SECRET_ID, secretId) - } - if v := os.Getenv(COMMON_PROVIDER_SECRET_KEY); v != "" { - secretKey := os.Getenv(COMMON_PROVIDER_SECRET_KEY) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - } -} - -func testAccStepPreConfigSetTempAKSK(t *testing.T, accountType string) { - testAccPreCheckCommon(t, accountType) -} - -func testAccStepSetRegion(t *testing.T, region string) { - os.Setenv(PROVIDER_REGION, region) -} - -func testAccPreCheckCommon(t *testing.T, accountType string) { - if v := os.Getenv(PROVIDER_REGION); v == "" { - log.Printf("[INFO] Testing: Using %s as test region", defaultRegion) - os.Setenv(PROVIDER_REGION, defaultRegion) - } - switch { - case accountType == ACCOUNT_TYPE_INTERNATIONAL: - secretId := os.Getenv(INTERNATIONAL_PROVIDER_SECRET_ID) - secretKey := os.Getenv(INTERNATIONAL_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", INTERNATIONAL_PROVIDER_SECRET_ID, INTERNATIONAL_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_PREPAY: - secretId := os.Getenv(PREPAY_PROVIDER_SECRET_ID) - secretKey := os.Getenv(PREPAY_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", PREPAY_PROVIDER_SECRET_ID, PREPAY_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_PRIVATE: - secretId := os.Getenv(PRIVATE_PROVIDER_SECRET_ID) - secretKey := os.Getenv(PRIVATE_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", PRIVATE_PROVIDER_SECRET_ID, PRIVATE_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_COMMON: - secretId := os.Getenv(COMMON_PROVIDER_SECRET_ID) - secretKey := os.Getenv(COMMON_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", COMMON_PROVIDER_SECRET_ID, COMMON_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_SUB_ACCOUNT: - secretId := os.Getenv(SUB_ACCOUNT_PROVIDER_SECRET_ID) - secretKey := os.Getenv(SUB_ACCOUNT_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", SUB_ACCOUNT_PROVIDER_SECRET_ID, SUB_ACCOUNT_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_SMS: - secretId := os.Getenv(SMS_PROVIDER_SECRET_ID) - secretKey := os.Getenv(SMS_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", SMS_PROVIDER_SECRET_ID, SMS_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_TSF: - secretId := os.Getenv(TSF_PROVIDER_SECRET_ID) - secretKey := os.Getenv(TSF_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", TSF_PROVIDER_SECRET_ID, TSF_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_SSL: - secretId := os.Getenv(SSL_PROVIDER_SECRET_ID) - secretKey := os.Getenv(SSL_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", SSL_PROVIDER_SECRET_ID, SSL_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - case accountType == ACCOUNT_TYPE_ORGANIZATION: - secretId := os.Getenv(ORGANIZATION_PROVIDER_SECRET_ID) - secretKey := os.Getenv(ORGANIZATION_PROVIDER_SECRET_KEY) - if secretId == "" || secretKey == "" { - t.Fatalf("%v and %v must be set for acceptance tests\n", ORGANIZATION_PROVIDER_SECRET_ID, ORGANIZATION_PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_SECRET_ID, secretId) - os.Setenv(PROVIDER_SECRET_KEY, secretKey) - default: - if v := os.Getenv(PROVIDER_SECRET_ID); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_ID) - } - if v := os.Getenv(PROVIDER_SECRET_KEY); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_KEY) - } - } -} - -func testAccCheckTencentCloudDataSourceID(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("Can't find data source: %s", n) - } - - if rs.Primary.ID == "" { - return fmt.Errorf("data source ID not set") - } - return nil - } -} - -func testAccPreCheckBusiness(t *testing.T, accountType string) { - - switch accountType { - case ACCOUNT_TYPE_SES: - if v := os.Getenv(PROVIDER_SECRET_ID); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_ID) - } - if v := os.Getenv(PROVIDER_SECRET_KEY); v == "" { - t.Fatalf("%v must be set for acceptance tests\n", PROVIDER_SECRET_KEY) - } - os.Setenv(PROVIDER_REGION, defaultRegionSes) - default: - testAccPreCheck(t) - } -} diff --git a/tencentcloud/resource_tc_address_template.go b/tencentcloud/resource_tc_address_template.go deleted file mode 100644 index 953fdd9f54..0000000000 --- a/tencentcloud/resource_tc_address_template.go +++ /dev/null @@ -1,170 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudAddressTemplate() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudAddressTemplateCreate, - Read: resourceTencentCloudAddressTemplateRead, - Update: resourceTencentCloudAddressTemplateUpdate, - Delete: resourceTencentCloudAddressTemplateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of the address template.", - }, - "addresses": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Required: true, - Description: "Address list. IP(`10.0.0.1`), CIDR(`10.0.1.0/24`), IP range(`10.0.0.1-10.0.0.100`) format are supported.", - }, - }, - } -} - -func resourceTencentCloudAddressTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - name := d.Get("name").(string) - addresses := d.Get("addresses").(*schema.Set).List() - - vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - var outErr, inErr error - var templateId string - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - templateId, inErr = vpcService.CreateAddressTemplate(ctx, name, addresses) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(templateId) - - return resourceTencentCloudAddressTemplateRead(d, meta) -} - -func resourceTencentCloudAddressTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - templateId := d.Id() - var outErr, inErr error - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - template, has, outErr := vpcService.DescribeAddressTemplateById(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - template, has, inErr = vpcService.DescribeAddressTemplateById(ctx, templateId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", template.AddressTemplateName) - _ = d.Set("addresses", template.AddressSet) - - return nil -} - -func resourceTencentCloudAddressTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateId := d.Id() - - if d.HasChange("name") || d.HasChange("addresses") { - var outErr, inErr error - name := d.Get("name").(string) - addresses := d.Get("addresses").(*schema.Set).List() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.ModifyAddressTemplate(ctx, templateId, name, addresses) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - if outErr != nil { - return outErr - } - - } - - return resourceTencentCloudAddressTemplateRead(d, meta) -} - -func resourceTencentCloudAddressTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateId := d.Id() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - var outErr, inErr error - - outErr = vpcService.DeleteAddressTemplate(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.DeleteAddressTemplate(ctx, templateId) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - //check not exist - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr := vpcService.DescribeAddressTemplateById(ctx, templateId) - if inErr != nil { - return retryError(inErr) - } - if has { - return resource.RetryableError(fmt.Errorf("address template %s is still exists, retry...", templateId)) - } else { - return nil - } - }) - - return outErr -} diff --git a/tencentcloud/resource_tc_address_template_group.go b/tencentcloud/resource_tc_address_template_group.go deleted file mode 100644 index a52958fc6a..0000000000 --- a/tencentcloud/resource_tc_address_template_group.go +++ /dev/null @@ -1,169 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudAddressTemplateGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudAddressTemplateGroupCreate, - Read: resourceTencentCloudAddressTemplateGroupRead, - Update: resourceTencentCloudAddressTemplateGroupUpdate, - Delete: resourceTencentCloudAddressTemplateGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of the address template group.", - }, - "template_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Required: true, - Description: "Template ID list.", - }, - }, - } -} - -func resourceTencentCloudAddressTemplateGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template_group.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - name := d.Get("name").(string) - addresses := d.Get("template_ids").(*schema.Set).List() - - vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - var outErr, inErr error - var templateGroupId string - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - templateGroupId, inErr = vpcService.CreateAddressTemplateGroup(ctx, name, addresses) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(templateGroupId) - - return resourceTencentCloudAddressTemplateGroupRead(d, meta) -} - -func resourceTencentCloudAddressTemplateGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - templateId := d.Id() - var outErr, inErr error - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - templateGroup, has, outErr := vpcService.DescribeAddressTemplateGroupById(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - templateGroup, has, inErr = vpcService.DescribeAddressTemplateGroupById(ctx, templateId) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", templateGroup.AddressTemplateGroupName) - _ = d.Set("template_ids", templateGroup.AddressTemplateIdSet) - - return nil -} - -func resourceTencentCloudAddressTemplateGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template_group.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateGroupId := d.Id() - - if d.HasChange("name") || d.HasChange("template_ids") { - var outErr, inErr error - name := d.Get("name").(string) - templadteIds := d.Get("template_ids").(*schema.Set).List() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.ModifyAddressTemplateGroup(ctx, templateGroupId, name, templadteIds) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudAddressTemplateGroupRead(d, meta) -} - -func resourceTencentCloudAddressTemplateGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_address_template_group.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateGroupId := d.Id() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - var outErr, inErr error - - outErr = vpcService.DeleteAddressTemplateGroup(ctx, templateGroupId) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.DeleteAddressTemplateGroup(ctx, templateGroupId) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - //check not exist - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr := vpcService.DescribeAddressTemplateGroupById(ctx, templateGroupId) - if inErr != nil { - return retryError(inErr) - } - if has { - return resource.RetryableError(fmt.Errorf("address template group %s is still exists, retry...", templateGroupId)) - } else { - return nil - } - }) - - return outErr -} diff --git a/tencentcloud/resource_tc_address_template_test.go b/tencentcloud/resource_tc_address_template_test.go deleted file mode 100644 index e8bb541137..0000000000 --- a/tencentcloud/resource_tc_address_template_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudAddressTemplate_basic_and_update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckAddressTemplateDestroy, - Steps: []resource.TestStep{ - { - Config: testAccAddressTemplate_basic, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("tencentcloud_address_template.template", "name", "test"), - resource.TestCheckResourceAttr("tencentcloud_address_template.template", "addresses.#", "1"), - ), - }, - { - ResourceName: "tencentcloud_address_template.template", - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccAddressTemplate_basic_update_remark, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckAddressTemplateExists("tencentcloud_address_template.template"), - resource.TestCheckResourceAttr("tencentcloud_address_template.template", "name", "test_update"), - resource.TestCheckResourceAttr("tencentcloud_address_template.template", "addresses.#", "2"), - ), - }, - }, - }) -} - -func testAccCheckAddressTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_address_template" { - continue - } - - _, has, err := vpcService.DescribeAddressTemplateById(ctx, rs.Primary.ID) - if has { - return fmt.Errorf("address template still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckAddressTemplateExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("Address template %s is not found", n) - } - - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := vpcService.DescribeAddressTemplateById(ctx, rs.Primary.ID) - if !has { - return fmt.Errorf("Address template %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccAddressTemplate_basic = ` -resource "tencentcloud_address_template" "template" { - name = "test" - addresses = ["1.1.1.1"] -}` - -const testAccAddressTemplate_basic_update_remark = ` -resource "tencentcloud_address_template" "template" { - name = "test_update" - addresses = ["1.1.1.1/24", "1.1.1.0-1.1.1.1"] -}` diff --git a/tencentcloud/resource_tc_as_load_balancer.go b/tencentcloud/resource_tc_as_load_balancer.go deleted file mode 100644 index 14cc11786e..0000000000 --- a/tencentcloud/resource_tc_as_load_balancer.go +++ /dev/null @@ -1,443 +0,0 @@ -/* -Provides a resource to create a as load_balancer - -~> **NOTE:** `load_balancer_ids` A list of traditional load balancer IDs, with a maximum of 20 traditional load balancers bound to each scaling group. Only one LoadBalancerIds and ForwardLoadBalancers can be specified simultaneously. -~> **NOTE:** `forward_load_balancers` List of application type load balancers, with a maximum of 100 bound application type load balancers for each scaling group. Only one LoadBalancerIds and ForwardLoadBalancers can be specified simultaneously. - -Example Usage - -If use `load_balancer_ids` - -```hcl -data "tencentcloud_availability_zones_by_product" "zones" { - product = "as" -} - -data "tencentcloud_images" "image" { - image_type = ["PUBLIC_IMAGE"] - os_name = "TencentOS Server 3.2 (Final)" -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - vpc_id = tencentcloud_vpc.vpc.id - name = "subnet-example" - cidr_block = "10.0.0.0/16" - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name -} - -resource "tencentcloud_as_scaling_config" "example" { - configuration_name = "tf-example" - image_id = data.tencentcloud_images.image.images.0.image_id - instance_types = ["SA1.SMALL1", "SA2.SMALL1", "SA2.SMALL2", "SA2.SMALL4"] - instance_name_settings { - instance_name = "test-ins-name" - } -} - -resource "tencentcloud_as_scaling_group" "example" { - scaling_group_name = "tf-example" - configuration_id = tencentcloud_as_scaling_config.example.id - max_size = 1 - min_size = 0 - vpc_id = tencentcloud_vpc.vpc.id - subnet_ids = [tencentcloud_subnet.subnet.id] -} - -resource "tencentcloud_clb_instance" "example" { - network_type = "INTERNAL" - clb_name = "clb-example" - project_id = 0 - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - - tags = { - test = "tf" - } -} - -resource "tencentcloud_clb_listener" "example" { - clb_id = tencentcloud_clb_instance.example.id - listener_name = "listener-example" - port = 80 - protocol = "HTTP" -} - -resource "tencentcloud_clb_listener_rule" "example" { - listener_id = tencentcloud_clb_listener.example.listener_id - clb_id = tencentcloud_clb_instance.example.id - domain = "foo.net" - url = "/bar" -} - -resource "tencentcloud_as_load_balancer" "example" { - auto_scaling_group_id = tencentcloud_as_scaling_group.example.id - load_balancer_ids = [tencentcloud_clb_instance.example.id] -} -``` - -If use `forward_load_balancers` - -```hcl -resource "tencentcloud_as_load_balancer" "example" { - auto_scaling_group_id = tencentcloud_as_scaling_group.example.id - - forward_load_balancers { - load_balancer_id = tencentcloud_clb_instance.example.id - listener_id = tencentcloud_clb_listener.example.listener_id - location_id = tencentcloud_clb_listener_rule.example.rule_id - - target_attributes { - port = 8080 - weight = 20 - } - } -} -``` - -Import - -as load_balancer can be imported using the id, e.g. - -``` -terraform import tencentcloud_as_load_balancer.load_balancer auto_scaling_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" - as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudAsLoadBalancer() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudAsLoadBalancerCreate, - Read: resourceTencentCloudAsLoadBalancerRead, - Update: resourceTencentCloudAsLoadBalancerUpdate, - Delete: resourceTencentCloudAsLoadBalancerDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "auto_scaling_group_id": { - Required: true, - Type: schema.TypeString, - Description: "ID of a scaling group.", - }, - - "load_balancer_ids": { - Optional: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "List of traditional load balancer IDs. The maximum number of traditional load balancers bound to each scaling group is 20. Both LoadBalancerIds and ForwardLoadBalancers can specify at most one at the same time.", - }, - - "forward_load_balancers": { - Optional: true, - Type: schema.TypeList, - Description: "List of application load balancers. The maximum number of application-type load balancers bound to each scaling group is 100. Both LoadBalancerIds and ForwardLoadBalancers can specify at most one at the same time.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "load_balancer_id": { - Type: schema.TypeString, - Required: true, - Description: "Application load balancer instance ID.", - }, - "listener_id": { - Type: schema.TypeString, - Required: true, - Description: "Application load balancer listener ID.", - }, - "target_attributes": { - Type: schema.TypeList, - Required: true, - Description: "List of TargetAttribute.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "port": { - Type: schema.TypeInt, - Required: true, - Description: "Target port.", - }, - "weight": { - Type: schema.TypeInt, - Required: true, - Description: "Target weight.", - }, - }, - }, - }, - "location_id": { - Type: schema.TypeString, - Optional: true, - Description: "Application load balancer location ID.", - }, - "region": { - Type: schema.TypeString, - Optional: true, - Description: "Load balancer instance region. Default value is the region of current auto scaling group. The format is the same as the public parameter Region, for example: ap-guangzhou.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudAsLoadBalancerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_load_balancer.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = as.NewAttachLoadBalancersRequest() - autoScalingGroupId string - ) - if v, ok := d.GetOk("auto_scaling_group_id"); ok { - autoScalingGroupId = v.(string) - request.AutoScalingGroupId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("load_balancer_ids"); ok { - loadBalancerIdsSet := v.(*schema.Set).List() - for i := range loadBalancerIdsSet { - loadBalancerIds := loadBalancerIdsSet[i].(string) - request.LoadBalancerIds = append(request.LoadBalancerIds, &loadBalancerIds) - } - } - - if v, ok := d.GetOk("forward_load_balancers"); ok { - for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) - forwardLoadBalancer := as.ForwardLoadBalancer{} - if v, ok := dMap["load_balancer_id"]; ok { - forwardLoadBalancer.LoadBalancerId = helper.String(v.(string)) - } - if v, ok := dMap["listener_id"]; ok { - forwardLoadBalancer.ListenerId = helper.String(v.(string)) - } - if v, ok := dMap["target_attributes"]; ok { - for _, item := range v.([]interface{}) { - targetAttributesMap := item.(map[string]interface{}) - targetAttribute := as.TargetAttribute{} - if v, ok := targetAttributesMap["port"]; ok { - targetAttribute.Port = helper.IntUint64(v.(int)) - } - if v, ok := targetAttributesMap["weight"]; ok { - targetAttribute.Weight = helper.IntUint64(v.(int)) - } - forwardLoadBalancer.TargetAttributes = append(forwardLoadBalancer.TargetAttributes, &targetAttribute) - } - } - if v, ok := dMap["location_id"]; ok { - forwardLoadBalancer.LocationId = helper.String(v.(string)) - } - if v, ok := dMap["region"]; ok { - forwardLoadBalancer.Region = helper.String(v.(string)) - } - request.ForwardLoadBalancers = append(request.ForwardLoadBalancers, &forwardLoadBalancer) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().AttachLoadBalancers(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 as loadBalancer failed, reason:%+v", logId, err) - return err - } - - d.SetId(autoScalingGroupId) - - return resourceTencentCloudAsLoadBalancerRead(d, meta) -} - -func resourceTencentCloudAsLoadBalancerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_load_balancer.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} - - autoScalingGroupId := d.Id() - - loadBalancer, err := service.DescribeAsLoadBalancerById(ctx, autoScalingGroupId) - if err != nil { - return err - } - - if loadBalancer == nil { - d.SetId("") - log.Printf("[WARN]%s resource `AsLoadBalancer` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if loadBalancer.AutoScalingGroupId != nil { - _ = d.Set("auto_scaling_group_id", loadBalancer.AutoScalingGroupId) - } - - if loadBalancer.LoadBalancerIdSet != nil { - _ = d.Set("load_balancer_ids", loadBalancer.LoadBalancerIdSet) - } - - if loadBalancer.ForwardLoadBalancerSet != nil { - forwardLoadBalancersList := []interface{}{} - for _, forwardLoadBalancers := range loadBalancer.ForwardLoadBalancerSet { - forwardLoadBalancersMap := map[string]interface{}{} - - if forwardLoadBalancers.LoadBalancerId != nil { - forwardLoadBalancersMap["load_balancer_id"] = forwardLoadBalancers.LoadBalancerId - } - - if forwardLoadBalancers.ListenerId != nil { - forwardLoadBalancersMap["listener_id"] = forwardLoadBalancers.ListenerId - } - - if forwardLoadBalancers.TargetAttributes != nil { - targetAttributesList := []interface{}{} - for _, targetAttributes := range forwardLoadBalancers.TargetAttributes { - targetAttributesMap := map[string]interface{}{} - - if targetAttributes.Port != nil { - targetAttributesMap["port"] = targetAttributes.Port - } - - if targetAttributes.Weight != nil { - targetAttributesMap["weight"] = targetAttributes.Weight - } - - targetAttributesList = append(targetAttributesList, targetAttributesMap) - } - - forwardLoadBalancersMap["target_attributes"] = []interface{}{targetAttributesList} - } - - if forwardLoadBalancers.LocationId != nil { - forwardLoadBalancersMap["location_id"] = forwardLoadBalancers.LocationId - } - - if forwardLoadBalancers.Region != nil { - forwardLoadBalancersMap["region"] = forwardLoadBalancers.Region - } - - forwardLoadBalancersList = append(forwardLoadBalancersList, forwardLoadBalancersMap) - } - - _ = d.Set("forward_load_balancers", forwardLoadBalancersList) - - } - - return nil -} - -func resourceTencentCloudAsLoadBalancerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_load_balancer.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := as.NewModifyLoadBalancerTargetAttributesRequest() - - autoScalingGroupId := d.Id() - - request.AutoScalingGroupId = &autoScalingGroupId - - immutableArgs := []string{"load_balancer_ids"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("forward_load_balancers") { - if v, ok := d.GetOk("forward_load_balancers"); ok { - for _, item := range v.([]interface{}) { - forwardLoadBalancer := as.ForwardLoadBalancer{} - dMap := item.(map[string]interface{}) - if v, ok := dMap["load_balancer_id"]; ok { - forwardLoadBalancer.LoadBalancerId = helper.String(v.(string)) - } - if v, ok := dMap["listener_id"]; ok { - forwardLoadBalancer.ListenerId = helper.String(v.(string)) - } - if v, ok := dMap["target_attributes"]; ok { - for _, item := range v.([]interface{}) { - targetAttributesMap := item.(map[string]interface{}) - targetAttribute := as.TargetAttribute{} - if v, ok := targetAttributesMap["port"]; ok { - targetAttribute.Port = helper.IntUint64(v.(int)) - } - if v, ok := targetAttributesMap["weight"]; ok { - targetAttribute.Weight = helper.IntUint64(v.(int)) - } - forwardLoadBalancer.TargetAttributes = append(forwardLoadBalancer.TargetAttributes, &targetAttribute) - } - } - if v, ok := dMap["location_id"]; ok { - forwardLoadBalancer.LocationId = helper.String(v.(string)) - } - if v, ok := dMap["region"]; ok { - forwardLoadBalancer.Region = helper.String(v.(string)) - } - request.ForwardLoadBalancers = append(request.ForwardLoadBalancers, &forwardLoadBalancer) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ModifyLoadBalancerTargetAttributes(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 update as loadBalancer failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudAsLoadBalancerRead(d, meta) -} - -func resourceTencentCloudAsLoadBalancerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_load_balancer.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} - autoScalingGroupId := d.Id() - - if err := service.DeleteAsLoadBalancerById(ctx, autoScalingGroupId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_cfs_user_quota.go b/tencentcloud/resource_tc_cfs_user_quota.go deleted file mode 100644 index 1ef6566ee6..0000000000 --- a/tencentcloud/resource_tc_cfs_user_quota.go +++ /dev/null @@ -1,222 +0,0 @@ -/* -Provides a resource to create a cfs user_quota - -Example Usage - -```hcl -resource "tencentcloud_cfs_user_quota" "user_quota" { - file_system_id = "cfs-4636029bc" - user_type = "Uid" - user_id = "2159973417" - capacity_hard_limit = 10 - file_hard_limit = 10000 -} -``` - -Import - -cfs user_quota can be imported using the id, e.g. - -``` -terraform import tencentcloud_cfs_user_quota.user_quota fileSystemId#userType#userId -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudCfsUserQuota() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudCfsUserQuotaCreate, - Read: resourceTencentCloudCfsUserQuotaRead, - Update: resourceTencentCloudCfsUserQuotaUpdate, - Delete: resourceTencentCloudCfsUserQuotaDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "file_system_id": { - Required: true, - Type: schema.TypeString, - Description: "File system ID.", - }, - - "user_type": { - Required: true, - Type: schema.TypeString, - Description: "Quota type. Valid value: `Uid`, `Gid`.", - }, - - "user_id": { - Required: true, - Type: schema.TypeString, - Description: "Info of UID/GID.", - }, - - "capacity_hard_limit": { - Optional: true, - Type: schema.TypeInt, - Description: "Capacity Limit(GB).", - }, - - "file_hard_limit": { - Optional: true, - Type: schema.TypeInt, - Description: "File limit.", - }, - }, - } -} - -func resourceTencentCloudCfsUserQuotaCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_user_quota.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = cfs.NewSetUserQuotaRequest() - fileSystemId string - userType string - userId string - ) - if v, ok := d.GetOk("file_system_id"); ok { - fileSystemId = v.(string) - request.FileSystemId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("user_type"); ok { - userType = v.(string) - request.UserType = helper.String(v.(string)) - } - - if v, ok := d.GetOk("user_id"); ok { - userId = v.(string) - request.UserId = helper.String(v.(string)) - } - - if v, _ := d.GetOk("capacity_hard_limit"); v != nil { - request.CapacityHardLimit = helper.IntUint64(v.(int)) - } - - if v, _ := d.GetOk("file_hard_limit"); v != nil { - request.FileHardLimit = helper.IntUint64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().SetUserQuota(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 cfs userQuota failed, reason:%+v", logId, err) - return err - } - - d.SetId(fileSystemId + FILED_SP + userType + FILED_SP + userId) - - return resourceTencentCloudCfsUserQuotaRead(d, meta) -} - -func resourceTencentCloudCfsUserQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_user_quota.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - fileSystemId := idSplit[0] - userType := idSplit[1] - userId := idSplit[2] - - userQuota, err := service.DescribeCfsUserQuotaById(ctx, fileSystemId, userType, userId) - if err != nil { - return err - } - - if userQuota == nil { - d.SetId("") - log.Printf("[WARN]%s resource `CfsUserQuota` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if userQuota.FileSystemId != nil { - _ = d.Set("file_system_id", userQuota.FileSystemId) - } - - if userQuota.UserType != nil { - _ = d.Set("user_type", userQuota.UserType) - } - - if userQuota.UserId != nil { - _ = d.Set("user_id", userQuota.UserId) - } - - if userQuota.CapacityHardLimit != nil { - _ = d.Set("capacity_hard_limit", userQuota.CapacityHardLimit) - } - - if userQuota.FileHardLimit != nil { - _ = d.Set("file_hard_limit", userQuota.FileHardLimit) - } - - return nil -} - -func resourceTencentCloudCfsUserQuotaUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_user_quota.update")() - defer inconsistentCheck(d, meta)() - - immutableArgs := []string{"file_system_id", "user_type", "user_id", "capacity_hard_limit", "file_hard_limit"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - return resourceTencentCloudCfsUserQuotaRead(d, meta) -} - -func resourceTencentCloudCfsUserQuotaDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_user_quota.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - fileSystemId := idSplit[0] - userType := idSplit[1] - userId := idSplit[2] - - if err := service.DeleteCfsUserQuotaById(ctx, fileSystemId, userType, userId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_cvm_program_fpga_image.go b/tencentcloud/resource_tc_cvm_program_fpga_image.go deleted file mode 100644 index dedfaf9b39..0000000000 --- a/tencentcloud/resource_tc_cvm_program_fpga_image.go +++ /dev/null @@ -1,135 +0,0 @@ -/* -Provides a resource to create a cvm program_fpga_image - -Example Usage - -```hcl -resource "tencentcloud_cvm_program_fpga_image" "program_fpga_image" { - instance_id = "ins-xxxxxx" - fpga_url = "" - dbd_fs = "" -} -``` - -Import - -cvm program_fpga_image can be imported using the id, e.g. - -``` -terraform import tencentcloud_cvm_program_fpga_image.program_fpga_image program_fpga_image_id -``` -*/ -package tencentcloud - -import ( - "log" - - "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 resourceTencentCloudCvmProgramFpgaImage() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudCvmProgramFpgaImageCreate, - Read: resourceTencentCloudCvmProgramFpgaImageRead, - Delete: resourceTencentCloudCvmProgramFpgaImageDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "The ID information of the instance.", - }, - - "fpga_url": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "COS URL address of the FPGA image file.", - }, - - "dbd_fs": { - Optional: true, - ForceNew: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "The DBDF number of the FPGA card on the instance, if left blank, the FPGA image will be burned to all FPGA cards owned by the instance by default.", - }, - - "dry_run": { - Optional: true, - ForceNew: true, - Type: schema.TypeBool, - Description: "Trial run, will not perform the actual burning action, the default is False.", - }, - }, - } -} - -func resourceTencentCloudCvmProgramFpgaImageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_program_fpga_image.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = cvm.NewProgramFpgaImageRequest() - ) - instanceId := d.Get("instance_id").(string) - request.InstanceId = helper.String(instanceId) - - if v, ok := d.GetOk("fpga_url"); ok { - request.FPGAUrl = helper.String(v.(string)) - } - - if v, ok := d.GetOk("dbd_fs"); ok { - dBDFsSet := v.(*schema.Set).List() - for i := range dBDFsSet { - dBDFs := dBDFsSet[i].(string) - request.DBDFs = append(request.DBDFs, &dBDFs) - } - } - - if v, _ := d.GetOk("dry_run"); v != nil { - request.DryRun = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ProgramFpgaImage(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 cvm programFpgaImage failed, reason:%+v", logId, err) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudCvmProgramFpgaImageRead(d, meta) -} - -func resourceTencentCloudCvmProgramFpgaImageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_program_fpga_image.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudCvmProgramFpgaImageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_program_fpga_image.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_eni_attachment.go b/tencentcloud/resource_tc_eni_attachment.go deleted file mode 100644 index b202e465d8..0000000000 --- a/tencentcloud/resource_tc_eni_attachment.go +++ /dev/null @@ -1,117 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudEniAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudEniAttachmentCreate, - Read: resourceTencentCloudEniAttachmentRead, - Delete: resourceTencentCloudEniAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "eni_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the ENI.", - }, - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the instance which bind the ENI.", - }, - }, - } -} - -func resourceTencentCloudEniAttachmentCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - eniId := d.Get("eni_id").(string) - cvmId := d.Get("instance_id").(string) - - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} - - if err := service.AttachEniToCvm(ctx, eniId, cvmId); err != nil { - return err - } - - d.SetId(fmt.Sprintf("%s+%s", eniId, cvmId)) - - return resourceTencentCloudEniAttachmentRead(d, m) -} - -func resourceTencentCloudEniAttachmentRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni_attachment.read")() - defer inconsistentCheck(d, m)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - split := strings.Split(id, "+") - if len(split) != 2 { - log.Printf("[CRITAL]%s id %s is invalid", logId, id) - d.SetId("") - return nil - } - - eniId := split[0] - - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} - - enis, err := service.DescribeEniById(ctx, []string{eniId}) - if err != nil { - return err - } - - if len(enis) < 1 { - d.SetId("") - return nil - } - - eni := enis[0] - - if eni.Attachment == nil { - d.SetId("") - return nil - } - - _ = d.Set("eni_id", eni.NetworkInterfaceId) - _ = d.Set("instance_id", eni.Attachment.InstanceId) - - return nil -} - -func resourceTencentCloudEniAttachmentDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - split := strings.Split(id, "+") - if len(split) != 2 { - log.Printf("[CRITAL]%s id %s is invalid", logId, id) - d.SetId("") - return nil - } - - eniId, cvmId := split[0], split[1] - - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} - - return service.DetachEniFromCvm(ctx, eniId, cvmId) -} diff --git a/tencentcloud/resource_tc_eni_sg_attachment.go b/tencentcloud/resource_tc_eni_sg_attachment.go deleted file mode 100644 index 3b61798855..0000000000 --- a/tencentcloud/resource_tc_eni_sg_attachment.go +++ /dev/null @@ -1,148 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "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 resourceTencentCloudEniSgAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudEniSgAttachmentCreate, - Read: resourceTencentCloudEniSgAttachmentRead, - Delete: resourceTencentCloudEniSgAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "network_interface_ids": { - Required: true, - ForceNew: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - MaxItems: 1, - Description: "ENI instance ID. Such as:eni-pxir56ns. It Only support set one eni instance now.", - }, - - "security_group_ids": { - Required: true, - ForceNew: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "Security group instance ID, for example:sg-33ocnj9n, can be obtained through DescribeSecurityGroups. There is a limit of 100 instances per request.", - }, - }, - } -} - -func resourceTencentCloudEniSgAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eni_sg_attachment.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAssociateNetworkInterfaceSecurityGroupsRequest() - networkInterfaceId string - ) - if v, ok := d.GetOk("network_interface_ids"); ok { - networkInterfaceIdsSet := v.(*schema.Set).List() - for i := range networkInterfaceIdsSet { - networkInterfaceId = networkInterfaceIdsSet[i].(string) - request.NetworkInterfaceIds = append(request.NetworkInterfaceIds, &networkInterfaceId) - } - } - - if v, ok := d.GetOk("security_group_ids"); ok { - securityGroupIdsSet := v.(*schema.Set).List() - for i := range securityGroupIdsSet { - securityGroupIds := securityGroupIdsSet[i].(string) - request.SecurityGroupIds = append(request.SecurityGroupIds, &securityGroupIds) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNetworkInterfaceSecurityGroups(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 vpc eniSgAttachment failed, reason:%+v", logId, err) - return err - } - - d.SetId(networkInterfaceId) - - return resourceTencentCloudEniSgAttachmentRead(d, meta) -} - -func resourceTencentCloudEniSgAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eni_sg_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - networkInterfaceId := d.Id() - - enis, err := service.DescribeEniById(ctx, []string{networkInterfaceId}) - if err != nil { - return err - } - - if len(enis) < 1 { - d.SetId("") - log.Printf("[WARN]%s resource `VpcEniSgAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - eni := enis[0] - - _ = d.Set("network_interface_ids", []*string{&networkInterfaceId}) - - if eni.GroupSet != nil { - _ = d.Set("security_group_ids", eni.GroupSet) - } - - return nil -} - -func resourceTencentCloudEniSgAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eni_sg_attachment.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - networkInterfaceId := d.Id() - - var securityGroupIds []string - if v, ok := d.GetOk("security_group_ids"); ok { - securityGroupIdsSet := v.(*schema.Set).List() - for i := range securityGroupIdsSet { - securityGroupId := securityGroupIdsSet[i].(string) - securityGroupIds = append(securityGroupIds, securityGroupId) - } - } - - if err := service.DeleteVpcEniSgAttachmentById(ctx, networkInterfaceId, securityGroupIds); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_ha_vip.go b/tencentcloud/resource_tc_ha_vip.go deleted file mode 100644 index a8cb18c99b..0000000000 --- a/tencentcloud/resource_tc_ha_vip.go +++ /dev/null @@ -1,238 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/pkg/errors" - 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/internal/helper" -) - -func resourceTencentCloudHaVip() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudHaVipCreate, - Read: resourceTencentCloudHaVipRead, - Update: resourceTencentCloudHaVipUpdate, - Delete: resourceTencentCloudHaVipDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), - Description: "Name of the HA VIP. The length of character is limited to 1-60.", - }, - "vpc_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "VPC ID.", - }, - "subnet_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Subnet ID.", - }, - "vip": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, - ValidateFunc: validateIp, - Description: "Virtual IP address, it must not be occupied and in this VPC network segment. If not set, it will be assigned after resource created automatically.", - }, - "state": { - Type: schema.TypeString, - Computed: true, - Description: "State of the HA VIP. Valid value: `AVAILABLE`, `UNBIND`.", - }, - "instance_id": { - Type: schema.TypeString, - Computed: true, - Description: "Instance ID that is associated.", - }, - "network_interface_id": { - Type: schema.TypeString, - Computed: true, - Description: "Network interface ID that is associated.", - }, - "address_ip": { - Type: schema.TypeString, - Computed: true, - Description: "EIP that is associated.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time of the HA VIP.", - }, - }, - } -} - -func resourceTencentCloudHaVipCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip.create")() - - logId := getLogId(contextNil) - - request := vpc.NewCreateHaVipRequest() - request.VpcId = helper.String(d.Get("vpc_id").(string)) - request.SubnetId = helper.String(d.Get("subnet_id").(string)) - request.HaVipName = helper.String(d.Get("name").(string)) - //optional - if v, ok := d.GetOk("vip"); ok { - request.Vip = helper.String(v.(string)) - } - var response *vpc.CreateHaVipResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateHaVip(request) - if e != nil { - return retryError(errors.WithStack(e)) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create HA VIP failed, reason:%+v", logId, err) - return err - } - - if response.Response.HaVip == nil { - return fmt.Errorf("HA VIP id is nil") - } - haVipId := *response.Response.HaVip.HaVipId - d.SetId(haVipId) - - return resourceTencentCloudHaVipRead(d, meta) -} - -func resourceTencentCloudHaVipRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - haVipId := d.Id() - request := vpc.NewDescribeHaVipsRequest() - request.HaVipIds = []*string{&haVipId} - - var response *vpc.DescribeHaVipsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(request) - if e != nil { - return retryError(errors.WithStack(e)) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s read HA VIP failed, reason:%+v", logId, err) - return err - } - if len(response.Response.HaVipSet) < 1 { - d.SetId("") - return nil - } - - haVip := response.Response.HaVipSet[0] - - _ = d.Set("name", *haVip.HaVipName) - _ = d.Set("create_time", *haVip.CreatedTime) - _ = d.Set("vip", *haVip.Vip) - _ = d.Set("vpc_id", *haVip.VpcId) - _ = d.Set("subnet_id", *haVip.SubnetId) - _ = d.Set("address_ip", *haVip.AddressIp) - _ = d.Set("state", *haVip.State) - _ = d.Set("network_interface_id", *haVip.NetworkInterfaceId) - _ = d.Set("instance_id", *haVip.InstanceId) - - return nil -} - -func resourceTencentCloudHaVipUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip.update")() - - logId := getLogId(contextNil) - - haVipId := d.Id() - request := vpc.NewModifyHaVipAttributeRequest() - request.HaVipId = &haVipId - if d.HasChange("name") { - request.HaVipName = helper.String(d.Get("name").(string)) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyHaVipAttribute(request) - if e != nil { - return retryError(errors.WithStack(e)) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s modify HA VIP failed, reason:%+v", logId, err) - return err - } - } - - return resourceTencentCloudHaVipRead(d, meta) -} - -func resourceTencentCloudHaVipDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip.delete")() - - logId := getLogId(contextNil) - - haVipId := d.Id() - - request := vpc.NewDeleteHaVipRequest() - request.HaVipId = &haVipId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteHaVip(request) - if e != nil { - return retryError(errors.WithStack(e), VPCUnsupportedOperation) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s delete HA VIP failed, reason:%+v", logId, err) - return err - } - //to get the status of haVip - statRequest := vpc.NewDescribeHaVipsRequest() - statRequest.HaVipIds = []*string{&haVipId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(statRequest) - if e != nil { - ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if !ok { - return retryError(errors.WithStack(ee)) - } - if ee.Code == VPCNotFound { - log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", - logId, statRequest.GetAction(), statRequest.ToJsonString(), e) - return nil - } else { - //when associated eip is in deleting process, delete ha vip may return unsupported operation error - return retryError(errors.WithStack(e), VPCUnsupportedOperation) - } - } else { - //if not, quit - if len(result.Response.HaVipSet) == 0 { - return nil - } - //else consider delete fail - return resource.RetryableError(fmt.Errorf("deleting retry")) - } - }) - if err != nil { - log.Printf("[CRITAL]%s delete HA VIP failed, reason:%+v", logId, err) - return err - } - return nil -} diff --git a/tencentcloud/resource_tc_ha_vip_eip_attachment.go b/tencentcloud/resource_tc_ha_vip_eip_attachment.go deleted file mode 100644 index 80bdb1da2c..0000000000 --- a/tencentcloud/resource_tc_ha_vip_eip_attachment.go +++ /dev/null @@ -1,205 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/pkg/errors" - vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudHaVipEipAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudHaVipEipAttachmentCreate, - Read: resourceTencentCloudHaVipEipAttachmentRead, - Delete: resourceTencentCloudHaVipEipAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "havip_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the attached HA VIP.", - }, - "address_ip": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validateIp, - Description: "Public address of the EIP.", - }, - }, - } -} - -func resourceTencentCloudHaVipEipAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip_eip_attachment.create")() - - haVipId := d.Get("havip_id").(string) - addressIp := d.Get("address_ip").(string) - - bindErr := haVipAssociateEip(meta, haVipId, addressIp) - if bindErr != nil { - return bindErr - } - - d.SetId(haVipId + "#" + addressIp) - - return resourceTencentCloudHaVipEipAttachmentRead(d, meta) -} - -func resourceTencentCloudHaVipEipAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip_eip_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - haVipEipAttachmentId := d.Id() - - eip := "" - haVip := "" - has := false - vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - eipId, haVipId, flag, e := vpcService.DescribeHaVipEipById(ctx, haVipEipAttachmentId) - if e != nil { - return retryError(e) - } - has = flag - eip = eipId - haVip = haVipId - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s read HA VIP EIP attachment failed, reason:%s\n", logId, err) - return err - } - - if !has { - d.SetId("") - return nil - } - _ = d.Set("havip_id", haVip) - _ = d.Set("address_ip", eip) - d.SetId(haVipEipAttachmentId) - - return nil -} - -func resourceTencentCloudHaVipEipAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ha_vip_eip_attachment.delete")() - - haVipEipAttachmentId := d.Id() - items := strings.Split(haVipEipAttachmentId, "#") - if len(items) != 2 { - return fmt.Errorf("decode HA VIP EIP attachment id error") - } - haVipId := items[0] - addressIp := items[1] - - unBindErr := haVipDisassociateEip(meta, haVipId, addressIp) - if unBindErr != nil { - return unBindErr - } - - return nil -} - -func haVipAssociateEip(meta interface{}, havipId string, eip string) error { - //associate eip - logId := getLogId(contextNil) - bindRequest := vpc.NewHaVipAssociateAddressIpRequest() - bindRequest.HaVipId = helper.String(havipId) - bindRequest.AddressIp = helper.String(eip) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().HaVipAssociateAddressIp(bindRequest) - if e != nil { - return retryError(errors.WithStack(e)) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create HA VIP EIP attachment failed, reason:%+v", logId, err) - return err - } - - statRequest := vpc.NewDescribeHaVipsRequest() - statRequest.HaVipIds = []*string{&havipId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(statRequest) - if e != nil { - return retryError(errors.WithStack(e), VPCUnsupportedOperation) - } else { - if len(result.Response.HaVipSet) > 0 { - if *result.Response.HaVipSet[0].AddressIp == "" { - return resource.RetryableError(fmt.Errorf("Not binded yet, retry describing")) - } else { - return nil - } - } - return resource.NonRetryableError(fmt.Errorf("describe error")) - } - }) - if err != nil { - log.Printf("[CRITAL]%s describe HA VIP failed, reason:%+v", logId, err) - return err - } - - return nil -} - -func haVipDisassociateEip(meta interface{}, havipId string, eip string) error { - //associate eip - logId := getLogId(contextNil) - bindRequest := vpc.NewHaVipDisassociateAddressIpRequest() - bindRequest.HaVipId = helper.String(havipId) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().HaVipDisassociateAddressIp(bindRequest) - if e != nil { - return retryError(errors.WithStack(e)) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create HA VIP attachment failed, reason:%+v", logId, err) - return err - } - - statRequest := vpc.NewDescribeHaVipsRequest() - statRequest.HaVipIds = []*string{&havipId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(statRequest) - if e != nil { - //when associated eip is in deleting process, delete ha vip may return unsupported operation error - return retryError(errors.WithStack(e), VPCUnsupportedOperation) - - } else { - //if not, quit - if len(result.Response.HaVipSet) > 0 { - if *result.Response.HaVipSet[0].AddressIp != "" { - return resource.RetryableError(fmt.Errorf("Not unbinded yet, retry describing")) - } else { - return nil - } - } - return resource.NonRetryableError(fmt.Errorf("describe error")) - } - }) - if err != nil { - log.Printf("[CRITAL]%s describe HA VIP failed, reason:%+v", logId, err) - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_ha_vip_eip_attachment_test.go b/tencentcloud/resource_tc_ha_vip_eip_attachment_test.go deleted file mode 100644 index ee70edf471..0000000000 --- a/tencentcloud/resource_tc_ha_vip_eip_attachment_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudHaVipEipAttachment_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckHaVipEipAttachmentDestroy, - Steps: []resource.TestStep{ - { - Config: testAccHaVipEipAttachment_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckHaVipEipAttachmentExists("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic"), - resource.TestCheckResourceAttrSet("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", "havip_id"), - resource.TestCheckResourceAttrSet("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", "address_ip"), - ), - }, - { - ResourceName: "tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckHaVipEipAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_ha_vip_eip_attachment" { - continue - } - - _, _, has, err := vpcService.DescribeHaVipEipById(ctx, rs.Primary.ID) - if err == nil && has { - return fmt.Errorf("HA VIP EIP attachment still exists: %s", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckHaVipEipAttachmentExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("HA VIP EIP attachment %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("HA VIP EIP attachment id is not set") - } - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - _, _, has, err := vpcService.DescribeHaVipEipById(ctx, rs.Primary.ID) - if err != nil { - return err - } - if !has { - return fmt.Errorf("HA VIP EIP attachment does not exist: %s", rs.Primary.ID) - } - return nil - } -} - -const testAccHaVipEipAttachment_basic = defaultVpcVariable + ` -#Create EIP -resource "tencentcloud_eip" "eip" { - name = "havip_eip" -} -resource "tencentcloud_ha_vip" "havip" { - name = "terraform_test" - vpc_id = var.vpc_id - subnet_id = var.subnet_id -} -resource "tencentcloud_ha_vip_eip_attachment" "ha_vip_eip_attachment_basic"{ - havip_id = tencentcloud_ha_vip.havip.id - address_ip = tencentcloud_eip.eip.public_ip -} -` diff --git a/tencentcloud/resource_tc_ipv6_address_bandwidth.go b/tencentcloud/resource_tc_ipv6_address_bandwidth.go deleted file mode 100644 index 490d456c6d..0000000000 --- a/tencentcloud/resource_tc_ipv6_address_bandwidth.go +++ /dev/null @@ -1,230 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "time" - - "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 resourceTencentCloudIpv6AddressBandwidth() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudIpv6AddressBandwidthCreate, - Read: resourceTencentCloudIpv6AddressBandwidthRead, - Update: resourceTencentCloudIpv6AddressBandwidthUpdate, - Delete: resourceTencentCloudIpv6AddressBandwidthDelete, - // it can support import because - //Importer: &schema.ResourceImporter{ - // State: schema.ImportStatePassthrough, - //}, - Schema: map[string]*schema.Schema{ - "ipv6_address": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "IPV6 address that needs to be enabled for public network access.", - }, - - "internet_max_bandwidth_out": { - Optional: true, - Type: schema.TypeInt, - Default: 1, - Description: "Bandwidth, in Mbps. The default is 1Mbps.", - }, - - "internet_charge_type": { - Optional: true, - Type: schema.TypeString, - Description: "Network billing mode. IPV6 currently supports: `TRAFFIC_POSTPAID_BY_HOUR`, for standard account types; `BANDWIDTH_PACKAGE`, for traditional account types. The default network billing mode is: `TRAFFIC_POSTPAID_BY_HOUR`.", - }, - - "bandwidth_package_id": { - Optional: true, - Type: schema.TypeString, - Description: "The bandwidth package id, the Legacy account and the ipv6 address to apply for the bandwidth package charge type need to be passed in.", - }, - }, - } -} - -func resourceTencentCloudIpv6AddressBandwidthCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ipv6_address_bandwidth.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAllocateIp6AddressesBandwidthRequest() - response = vpc.NewAllocateIp6AddressesBandwidthResponse() - ip6AddressId string - ) - if v, ok := d.GetOk("ipv6_address"); ok { - ip6AddressId := helper.String(v.(string)) - request.Ip6Addresses = []*string{ip6AddressId} - } - - if v, ok := d.GetOkExists("internet_max_bandwidth_out"); ok { - request.InternetMaxBandwidthOut = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("internet_charge_type"); ok { - request.InternetChargeType = helper.String(v.(string)) - } - - if v, ok := d.GetOk("bandwidth_package_id"); ok { - request.BandwidthPackageId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AllocateIp6AddressesBandwidth(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create vpc ipv6Address failed, reason:%+v", logId, err) - return err - } - - taskId := *response.Response.TaskId - d.SetId(ip6AddressId) - - ip6AddressId = *response.Response.AddressSet[0] - d.SetId(ip6AddressId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - conf := BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*readRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(taskId, []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - return resourceTencentCloudIpv6AddressBandwidthRead(d, meta) -} - -func resourceTencentCloudIpv6AddressBandwidthRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ipv6_address_bandwidth.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - ipv6AddressId := d.Id() - - ipv6Address, err := service.DescribeVpcIpv6AddressById(ctx, ipv6AddressId) - if err != nil { - return err - } - - if ipv6Address == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcIpv6Address` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("ipv6_address", ipv6Address.AddressIp) - - if ipv6Address.Bandwidth != nil { - _ = d.Set("internet_max_bandwidth_out", ipv6Address.Bandwidth) - } - - if ipv6Address.InternetChargeType != nil { - _ = d.Set("internet_charge_type", ipv6Address.InternetChargeType) - } - - //if ipv6Address.BandwidthPackageId != nil { - // _ = d.Set("bandwidth_package_id", ipv6Address.BandwidthPackageId) - //} - - return nil -} - -func resourceTencentCloudIpv6AddressBandwidthUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ipv6_address_bandwidth.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := vpc.NewModifyIp6AddressesBandwidthRequest() - - ipv6AddressId := d.Id() - - request.Ip6AddressIds = []*string{&ipv6AddressId} - - immutableArgs := []string{"internet_charge_type", "bandwidth_package_id"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - needChange := false - - if d.HasChange("internet_max_bandwidth_out") { - needChange = true - if v, ok := d.GetOkExists("internet_max_bandwidth_out"); ok { - request.InternetMaxBandwidthOut = helper.IntInt64(v.(int)) - } - } - - if needChange { - var taskId string - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyIp6AddressesBandwidth(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()) - } - taskId = *result.Response.TaskId - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update vpc ipv6Address failed, reason:%+v", logId, err) - return err - } - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - conf := BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*readRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(taskId, []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - } - - return resourceTencentCloudIpv6AddressBandwidthRead(d, meta) -} - -func resourceTencentCloudIpv6AddressBandwidthDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ipv6_address_bandwidth.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - ipv6AddressId := d.Id() - - if err := service.DeleteVpcIpv6AddressById(ctx, ipv6AddressId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_kubernetes_addon_attachment_test.go b/tencentcloud/resource_tc_kubernetes_addon_attachment_test.go deleted file mode 100644 index c706c00e79..0000000000 --- a/tencentcloud/resource_tc_kubernetes_addon_attachment_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -const defaultAddonName = "cos" - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_kubernetes_addon_attachment - resource.AddTestSweepers("tencentcloud_kubernetes_addon_attachment", &resource.Sweeper{ - Name: "tencentcloud_kubernetes_addon_attachment", - F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{client} - - cls, err := service.DescribeClusters(ctx, "", "keep") - if err != nil { - return err - } - - if len(cls) == 0 { - return fmt.Errorf("no persistent cluster") - } - - for _, c := range cls { - clusterId := c.ClusterId - if err = service.DeleteExtensionAddon(ctx, clusterId, defaultAddonName); err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - // suppress the not found error when cos doesn't exist - if strings.Contains(e.GetMessage(), "application cos not found") { - continue - } - } - return err - } - } - - return nil - }, - }) -} - -func TestAccTencentCloudKubernetesAddonAttachmentResource(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTkeAddonAttachment(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), - resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), - resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "version"), - ), - }, - }, - }) -} - -func testAccTkeAddonAttachment() string { - return fmt.Sprintf(` -%s - -resource "tencentcloud_kubernetes_addon_attachment" "cos" { - cluster_id = local.cluster_id - name = "%s" -} -`, TkeDataSource, defaultAddonName) -} diff --git a/tencentcloud/resource_tc_kubernetes_backup_storage_location.go b/tencentcloud/resource_tc_kubernetes_backup_storage_location.go deleted file mode 100644 index 43ff30b2a8..0000000000 --- a/tencentcloud/resource_tc_kubernetes_backup_storage_location.go +++ /dev/null @@ -1,173 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTkeBackupStorageLocation() *schema.Resource { - return &schema.Resource{ - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Create: resourceTencentCloudTkeBackupStorageLocationCreate, - Read: resourceTencentCloudTkeBackupStorageLocationRead, - Delete: resourceTencentCloudTkeBackupStorageLocationDelete, - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the backup storage location.", - }, - "storage_region": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Region of the storage.", - }, - "bucket": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the bucket.", - }, - "path": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Description: "Prefix of the bucket.", - }, - "state": { - Type: schema.TypeString, - Computed: true, - Description: "State of the backup storage location.", - }, - "message": { - Type: schema.TypeString, - Computed: true, - Description: "Message of the backup storage location.", - }, - }, - } -} - -func resourceTencentCloudTkeBackupStorageLocationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_backup_storage_location.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} - - request := genCreateBackupStorageLocationRequest(d) - err := service.createBackupStorageLocation(ctx, request) - if err != nil { - return err - } - - // wait for status ok - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - locations, errRet := service.describeBackupStorageLocations(ctx, []string{d.Get("name").(string)}) - if errRet != nil { - return retryError(errRet, InternalError) - } - if len(locations) != 1 { - resource.RetryableError(fmt.Errorf("more than 1 location returnen in api response, expected 1 but got %d", len(locations))) - } - if locations[0].State == nil { - return resource.RetryableError(fmt.Errorf("location %s is still in state nil", d.Get("name").(string))) - } - if len(locations) == 1 && *locations[0].State == backupStorageLocationStateAvailable { - return nil - } - return resource.RetryableError(fmt.Errorf("location %s is still in state %s", d.Get("name").(string), *locations[0].State)) - }) - if err != nil { - return err - } - - d.SetId(d.Get("name").(string)) - return resourceTencentCloudTkeBackupStorageLocationRead(d, meta) -} - -func resourceTencentCloudTkeBackupStorageLocationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_backup_storage_location.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} - - locations, err := service.describeBackupStorageLocations(ctx, []string{d.Id()}) - if err != nil { - return err - } - for _, location := range locations { - if *location.Name == d.Id() { - _ = d.Set("name", location.Name) - _ = d.Set("storage_region", location.StorageRegion) - _ = d.Set("bucket", location.Bucket) - _ = d.Set("path", location.Path) - _ = d.Set("state", location.State) - _ = d.Set("message", location.Message) - return nil - } - } - - d.SetId("") - return nil -} - -func resourceTencentCloudTkeBackupStorageLocationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_backup_storage_location.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} - - err := service.deleteBackupStorageLocation(ctx, d.Id()) - if err != nil { - return err - } - - // wait until location is deleted - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - locations, errRet := service.describeBackupStorageLocations(ctx, []string{d.Id()}) - if errRet != nil { - return retryError(errRet, InternalError) - } - if len(locations) == 0 { - return nil - } - return resource.RetryableError(fmt.Errorf("location %s is still not deleted", d.Id())) - }) - if err != nil { - return err - } - - return nil -} - -func genCreateBackupStorageLocationRequest(d *schema.ResourceData) (request *tke.CreateBackupStorageLocationRequest) { - request = tke.NewCreateBackupStorageLocationRequest() - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - if v, ok := d.GetOk("storage_region"); ok { - request.StorageRegion = helper.String(v.(string)) - } - if v, ok := d.GetOk("bucket"); ok { - request.Bucket = helper.String(v.(string)) - } - if v, ok := d.GetOk("path"); ok { - request.Path = helper.String(v.(string)) - } - return request -} diff --git a/tencentcloud/resource_tc_kubernetes_backup_storage_location_test.go b/tencentcloud/resource_tc_kubernetes_backup_storage_location_test.go deleted file mode 100644 index 386378a375..0000000000 --- a/tencentcloud/resource_tc_kubernetes_backup_storage_location_test.go +++ /dev/null @@ -1,129 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "math/rand" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -const ( - testTkeBackupStorageLocationResourceKey = "tencentcloud_kubernetes_backup_storage_location.test_case_backup_storage_location" - - backupStorageLocationNameTemplate = "tf-test-case-backup-storage-location-%d" - backupLocationBucketTemplate = "tke-backup-tf-test-case-%d" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_backup_storage_location - resource.AddTestSweepers("tencentcloud_backup_storage_location", &resource.Sweeper{ - Name: "tencentcloud_backup_storage_location", - F: testBackupStorageLocationSweep, - }) -} - -func TestAccTencentCloudKubernetesBackupStorageLocationResource_Basic(t *testing.T) { - t.Parallel() - - randIns := rand.New(rand.NewSource(time.Now().UnixNano())) - randomNum := randIns.Intn(100) - backupStorageLocationName := fmt.Sprintf(backupStorageLocationNameTemplate, randomNum) - backupLocationBucket := fmt.Sprintf(backupLocationBucketTemplate, randomNum) - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckBackupStorageLocationDestroy, - Steps: []resource.TestStep{ - { - Config: getTestAccTkeBackupStorageLocationConfig(backupStorageLocationName, backupLocationBucket), - Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(testTkeBackupStorageLocationResourceKey), - resource.TestCheckResourceAttr(testTkeBackupStorageLocationResourceKey, "name", backupStorageLocationName), - resource.TestCheckResourceAttr(testTkeBackupStorageLocationResourceKey, "storage_region", "ap-guangzhou"), - resource.TestCheckResourceAttrSet(testTkeBackupStorageLocationResourceKey, "bucket"), - ), - }, - }, - }) -} - -func testBackupStorageLocationSweep(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - cli, err := sharedClientForRegion(region) - if err != nil { - return fmt.Errorf("error getting client: %s", err) - } - log.Printf("testServerlessNodePoolSweep region %s", region) - - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} - - // delete all backup storage location - locations, err := service.describeBackupStorageLocations(ctx, []string{}) - if err != nil { - return err - } - - for _, l := range locations { - deleteLocation := l.Name - if err = service.deleteBackupStorageLocation(ctx, *deleteLocation); err != nil { - return fmt.Errorf("error deleting backup storage location: %s", err) - } - } - - return nil -} - -func testAccCheckBackupStorageLocationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} - - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_kubernetes_backup_storage_location" { - continue - } - - locations, err := service.describeBackupStorageLocations(ctx, []string{rs.Primary.ID}) - if err != nil { - return err - } - if len(locations) > 0 { - return fmt.Errorf("backup storage location still exists: %s", rs.Primary.ID) - } - } - return nil -} - -func getTestAccTkeBackupStorageLocationConfig(name, bucket string) string { - return fmt.Sprintf(testBackupStorageLocationConfigTemplate, bucket, name) -} - -const ( - testBackupStorageLocationConfigTemplate = ` -data "tencentcloud_user_info" "info" {} -locals { - app_id = data.tencentcloud_user_info.info.app_id - uin = data.tencentcloud_user_info.info.uin - owner_uin = data.tencentcloud_user_info.info.owner_uin -} -resource "tencentcloud_cos_bucket" "back_up_bucket" { - bucket = "%s-${local.app_id}" -} -resource "tencentcloud_kubernetes_backup_storage_location" "test_case_backup_storage_location" { - name = "%s" - storage_region = "ap-guangzhou" - bucket = tencentcloud_cos_bucket.back_up_bucket.bucket -} -` -) diff --git a/tencentcloud/resource_tc_kubernetes_encryption_protection.go b/tencentcloud/resource_tc_kubernetes_encryption_protection.go deleted file mode 100644 index 929419a5c3..0000000000 --- a/tencentcloud/resource_tc_kubernetes_encryption_protection.go +++ /dev/null @@ -1,161 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudKubernetesEncryptionProtection() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudKubernetesEncryptionProtectionCreate, - Read: resourceTencentCloudKubernetesEncryptionProtectionRead, - Delete: resourceTencentCloudKubernetesEncryptionProtectionDelete, - Schema: map[string]*schema.Schema{ - "cluster_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "cluster id.", - }, - - "kms_configuration": { - Required: true, - ForceNew: true, - Type: schema.TypeList, - MaxItems: 1, - Description: "kms encryption configuration.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "key_id": { - Type: schema.TypeString, - Optional: true, - Description: "kms id.", - }, - "kms_region": { - Type: schema.TypeString, - Optional: true, - Description: "kms region.", - }, - }, - }, - }, - "status": { - Computed: true, - Type: schema.TypeString, - Description: "kms encryption status.", - }, - }, - } -} - -func resourceTencentCloudKubernetesEncryptionProtectionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_encryption_protection.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tke.NewEnableEncryptionProtectionRequest() - clusterId string - ) - if v, ok := d.GetOk("cluster_id"); ok { - request.ClusterId = helper.String(v.(string)) - clusterId = v.(string) - } - - if dMap, ok := helper.InterfacesHeadMap(d, "kms_configuration"); ok { - kMSConfiguration := tke.KMSConfiguration{} - if v, ok := dMap["key_id"]; ok { - kMSConfiguration.KeyId = helper.String(v.(string)) - } - if v, ok := dMap["kms_region"]; ok { - kMSConfiguration.KmsRegion = helper.String(v.(string)) - } - request.KMSConfiguration = &kMSConfiguration - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().EnableEncryptionProtection(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 tke encryptionProtection failed, reason:%+v", logId, err) - return err - } - - d.SetId(clusterId) - - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - - conf := BuildStateChangeConf([]string{}, []string{"Opened"}, 3*readRetryTimeout, time.Second, service.TkeEncryptionProtectionStateRefreshFunc(d.Id(), []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - return resourceTencentCloudKubernetesEncryptionProtectionRead(d, meta) -} - -func resourceTencentCloudKubernetesEncryptionProtectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_encryption_protection.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - - encryptionProtectionId := d.Id() - - encryptionProtection, err := service.DescribeTkeEncryptionProtectionById(ctx, encryptionProtectionId) - if err != nil { - return err - } - - if encryptionProtection == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TkeEncryptionProtection` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if encryptionProtection.Status != nil { - _ = d.Set("status", encryptionProtection.Status) - } - - return nil -} - -func resourceTencentCloudKubernetesEncryptionProtectionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_encryption_protection.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - encryptionProtectionId := d.Id() - - if err := service.DeleteTkeEncryptionProtectionById(ctx, encryptionProtectionId); err != nil { - return err - } - - conf := BuildStateChangeConf([]string{}, []string{"Closed"}, 3*readRetryTimeout, time.Second, service.TkeEncryptionProtectionStateRefreshFunc(d.Id(), []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_dns_config.go b/tencentcloud/resource_tc_monitor_grafana_dns_config.go deleted file mode 100644 index 53d1ee6d39..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_dns_config.go +++ /dev/null @@ -1,154 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaDnsConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaDnsConfigCreate, - Read: resourceTencentCloudMonitorGrafanaDnsConfigRead, - Update: resourceTencentCloudMonitorGrafanaDnsConfigUpdate, - Delete: resourceTencentCloudMonitorGrafanaDnsConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "name_servers": { - Optional: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "DNS nameserver list.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaDnsConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaDnsConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - grafanaDnsConfig, err := service.DescribeMonitorGrafanaDnsConfigById(ctx, instanceId) - if err != nil { - return err - } - - if grafanaDnsConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaDnsConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaDnsConfig.NameServers != nil { - _ = d.Set("name_servers", grafanaDnsConfig.NameServers) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := monitor.NewUpdateDNSConfigRequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOk("name_servers"); ok { - nameServersSet := v.(*schema.Set).List() - for i := range nameServersSet { - nameServers := nameServersSet[i].(string) - request.NameServers = append(request.NameServers, &nameServers) - } - } - - if len(request.NameServers) < 1 { - request.NameServers = append(request.NameServers, helper.String("")) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateDNSConfig(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 update monitor grafanaDnsConfig failed, reason:%+v", logId, err) - return err - } - - time.Sleep(3 * time.Second) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update dns config failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - return resourceTencentCloudMonitorGrafanaDnsConfigRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaDnsConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_dns_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_env_config.go b/tencentcloud/resource_tc_monitor_grafana_env_config.go deleted file mode 100644 index 83d4f89a72..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_env_config.go +++ /dev/null @@ -1,154 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaEnvConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaEnvConfigCreate, - Read: resourceTencentCloudMonitorGrafanaEnvConfigRead, - Update: resourceTencentCloudMonitorGrafanaEnvConfigUpdate, - Delete: resourceTencentCloudMonitorGrafanaEnvConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "envs": { - Optional: true, - Type: schema.TypeMap, - Description: "Environment variables.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaEnvConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_env_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaEnvConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaEnvConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_env_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaEnvConfig, err := service.DescribeMonitorGrafanaEnvConfigById(ctx, instanceId) - if err != nil { - return err - } - - if grafanaEnvConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaEnvConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaEnvConfig.Envs != nil { - v, err := helper.JsonToMap(*grafanaEnvConfig.Envs) - if err != nil { - return fmt.Errorf("envs `%v` format error", *grafanaEnvConfig.Envs) - } - _ = d.Set("envs", v) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaEnvConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_env_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := monitor.NewUpdateGrafanaEnvironmentsRequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOk("envs"); ok { - evs, o := helper.MapToString(v.(map[string]interface{})) - if !o { - return fmt.Errorf("envs `%s` format error", v) - } - request.Envs = &evs - } else { - request.Envs = helper.String("{}") - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaEnvironments(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 update monitor grafanaEnvConfig failed, reason:%+v", logId, err) - return err - } - - time.Sleep(3 * time.Second) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update envs config failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - return resourceTencentCloudMonitorGrafanaEnvConfigRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaEnvConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_env_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_instance.go b/tencentcloud/resource_tc_monitor_grafana_instance.go deleted file mode 100644 index 63ef249e1f..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_instance.go +++ /dev/null @@ -1,416 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaInstance() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorGrafanaInstanceRead, - Create: resourceTencentCloudMonitorGrafanaInstanceCreate, - Update: resourceTencentCloudMonitorGrafanaInstanceUpdate, - Delete: resourceTencentCloudMonitorGrafanaInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_name": { - Type: schema.TypeString, - Required: true, - Description: "Instance name.", - }, - - "instance_id": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana instance id.", - }, - - "root_url": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana external url which could be accessed by user.", - }, - - "vpc_id": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Vpc Id.", - }, - - "subnet_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Optional: true, - Computed: true, - Description: "Subnet Id array.", - }, - - "grafana_init_password": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Grafana server admin password.", - }, - - "enable_internet": { - Type: schema.TypeBool, - Optional: true, - Computed: true, - Description: "Control whether grafana could be accessed by internet.", - }, - - "is_distroy": { - Type: schema.TypeBool, - Optional: true, - Deprecated: "It has been deprecated from version 1.81.16.", - Description: "Whether to clean up completely, the default is false.", - }, - - "is_destroy": { - Type: schema.TypeBool, - Optional: true, - Description: "Whether to clean up completely, the default is false.", - }, - - "instance_status": { - Type: schema.TypeInt, - Computed: true, - Description: "Grafana instance status, 1: Creating, 2: Running, 6: Stopped.", - }, - - "internet_url": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana intranet address.", - }, - - "internal_url": { - Type: schema.TypeString, - Computed: true, - Description: "Grafana public address.", - }, - - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_instance.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreateGrafanaInstanceRequest() - response *monitor.CreateGrafanaInstanceResponse - ) - - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("vpc_id"); ok { - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("subnet_ids"); ok { - subnetIdsSet := v.(*schema.Set).List() - for i := range subnetIdsSet { - subnetIds := subnetIdsSet[i].(string) - request.SubnetIds = append(request.SubnetIds, &subnetIds) - } - } - - if v, ok := d.GetOk("grafana_init_password"); ok { - request.GrafanaInitPassword = helper.String(v.(string)) - } - - if v, _ := d.GetOk("enable_internet"); v != nil { - // Internal account won't open - request.EnableInternet = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateGrafanaInstance(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor grafanaInstance failed, reason:%+v", logId, err) - return err - } - - grafanaInstanceId := *response.Response.InstanceId - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, grafanaInstanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 6 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, operate failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - d.SetId(grafanaInstanceId) - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::monitor:%s:uin/:grafana-instance/%s", region, grafanaInstanceId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - return resourceTencentCloudMonitorGrafanaInstanceRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_instance.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaInstance, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - - if err != nil { - return err - } - - if grafanaInstance == nil { - d.SetId("") - return fmt.Errorf("resource `grafanaInstance` %s does not exist", instanceId) - } - - if grafanaInstance.InstanceName != nil { - _ = d.Set("instance_name", grafanaInstance.InstanceName) - } - - if grafanaInstance.InstanceId != nil { - _ = d.Set("instance_id", grafanaInstance.InstanceId) - } - - if grafanaInstance.RootUrl != nil { - _ = d.Set("root_url", grafanaInstance.RootUrl) - } - - if grafanaInstance.VpcId != nil { - _ = d.Set("vpc_id", grafanaInstance.VpcId) - } - - if grafanaInstance.SubnetIds != nil { - var subnetIds []string - for _, v := range grafanaInstance.SubnetIds { - subnetIds = append(subnetIds, *v) - } - _ = d.Set("subnet_ids", subnetIds) - } - - if grafanaInstance.InternetUrl != nil && *grafanaInstance.InternetUrl != "" { - _ = d.Set("enable_internet", true) - } else { - _ = d.Set("enable_internet", false) - } - - if grafanaInstance.InternetUrl != nil { - _ = d.Set("internet_url", grafanaInstance.InternetUrl) - } - - if grafanaInstance.InternalUrl != nil { - _ = d.Set("internal_url", grafanaInstance.InternalUrl) - } - - if grafanaInstance.InstanceStatus != nil { - _ = d.Set("instance_status", grafanaInstance.InstanceStatus) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "monitor", "grafana-instance", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudMonitorGrafanaInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_instance.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - instanceId := d.Id() - - if d.HasChange("instance_name") { - request := monitor.NewModifyGrafanaInstanceRequest() - request.InstanceId = &instanceId - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyGrafanaInstance(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 { - return err - } - } - - if d.HasChange("vpc_id") { - return fmt.Errorf("`vpc_id` do not support change now.") - } - - if d.HasChange("subnet_ids") { - return fmt.Errorf("`subnet_ids` do not support change now.") - } - - if d.HasChange("grafana_init_password") { - return fmt.Errorf("`grafana_init_password` do not support change now.") - } - - if d.HasChange("enable_internet") { - request := monitor.NewEnableGrafanaInternetRequest() - request.InstanceID = &instanceId - - if v, ok := d.GetOk("enable_internet"); ok { - request.EnableInternet = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().EnableGrafanaInternet(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 { - return err - } - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("monitor", "grafana-instance", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudMonitorGrafanaInstanceRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_instance.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - if err := service.DeleteMonitorGrafanaInstanceById(ctx, instanceId); err != nil { - return err - } - - err := resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 6 { - return nil - } - if *instance.InstanceStatus == 7 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, operate failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - claenFlag := false - if v, ok := d.GetOk("is_distroy"); ok && v.(bool) { - claenFlag = true - } - if v, ok := d.GetOk("is_destroy"); ok && v.(bool) { - claenFlag = true - } - if claenFlag { - if err := service.CleanGrafanaInstanceById(ctx, instanceId); err != nil { - return err - } - - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if instance == nil { - return nil - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_integration.go b/tencentcloud/resource_tc_monitor_grafana_integration.go deleted file mode 100644 index 20b7a3bfc0..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_integration.go +++ /dev/null @@ -1,227 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaIntegration() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorGrafanaIntegrationRead, - Create: resourceTencentCloudMonitorGrafanaIntegrationCreate, - Update: resourceTencentCloudMonitorGrafanaIntegrationUpdate, - Delete: resourceTencentCloudMonitorGrafanaIntegrationDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "grafana instance id.", - }, - - "integration_id": { - Type: schema.TypeString, - Computed: true, - Description: "integration id.", - }, - - "kind": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "integration json schema kind.", - }, - - "content": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "generated json string of given integration json schema.", - }, - - "description": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "integration desc.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaIntegrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_integration.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreateGrafanaIntegrationRequest() - response *monitor.CreateGrafanaIntegrationResponse - integrationId string - instanceId string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kind"); ok { - request.Kind = helper.String(v.(string)) - } - - if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateGrafanaIntegration(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor grafanaIntegration failed, reason:%+v", logId, err) - return err - } - - integrationId = *response.Response.IntegrationId - - d.SetId(strings.Join([]string{integrationId, instanceId}, FILED_SP)) - return resourceTencentCloudMonitorGrafanaIntegrationRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaIntegrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_integration.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - integrationId := idSplit[0] - instanceId := idSplit[1] - - grafanaIntegration, err := service.DescribeMonitorGrafanaIntegration(ctx, integrationId, instanceId) - - if err != nil { - return err - } - - if grafanaIntegration == nil { - d.SetId("") - return fmt.Errorf("resource `grafanaIntegration` %s does not exist", integrationId) - } - - _ = d.Set("instance_id", instanceId) - - if grafanaIntegration.IntegrationId != nil { - _ = d.Set("integration_id", grafanaIntegration.IntegrationId) - } - - if grafanaIntegration.Kind != nil { - _ = d.Set("kind", grafanaIntegration.Kind) - } - - //if grafanaIntegration.Content != nil { - // _ = d.Set("content", grafanaIntegration.Content) - //} - - return nil -} - -func resourceTencentCloudMonitorGrafanaIntegrationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_integration.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateGrafanaIntegrationRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - integrationId := idSplit[0] - instanceId := idSplit[1] - - request.IntegrationId = &integrationId - request.InstanceId = &instanceId - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - if d.HasChange("kind") { - return fmt.Errorf("`kind` do not support change now.") - } else { - if v, ok := d.GetOk("kind"); ok { - request.Kind = helper.String(v.(string)) - } - } - - if d.HasChange("content") { - if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaIntegration(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 { - return err - } - - return resourceTencentCloudMonitorGrafanaIntegrationRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaIntegrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_integration.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - integrationId := idSplit[0] - instanceId := idSplit[1] - - if err := service.DeleteMonitorGrafanaIntegrationById(ctx, integrationId, instanceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_notification_channel.go b/tencentcloud/resource_tc_monitor_grafana_notification_channel.go deleted file mode 100644 index 2f4283e980..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_notification_channel.go +++ /dev/null @@ -1,259 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaNotificationChannel() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorGrafanaNotificationChannelRead, - Create: resourceTencentCloudMonitorGrafanaNotificationChannelCreate, - Update: resourceTencentCloudMonitorGrafanaNotificationChannelUpdate, - Delete: resourceTencentCloudMonitorGrafanaNotificationChannelDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "grafana instance id.", - }, - - "channel_id": { - Type: schema.TypeString, - Computed: true, - Description: "plugin id.", - }, - - "channel_name": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "channel name.", - }, - - "org_id": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "Grafana organization which channel will be installed, default to 1 representing Main Org.", - }, - - "receivers": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Optional: true, - Computed: true, - Description: "cloud monitor notification template notice-id list.", - }, - - "extra_org_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Optional: true, - Description: "extra grafana organization id list, default to 1 representing Main Org.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaNotificationChannelCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_notification_channel.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreateGrafanaNotificationChannelRequest() - response *monitor.CreateGrafanaNotificationChannelResponse - channelId string - instanceId string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("channel_name"); ok { - request.ChannelName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("org_id"); ok { - request.OrgId = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("receivers"); ok { - receiversSet := v.(*schema.Set).List() - for i := range receiversSet { - receivers := receiversSet[i].(string) - request.Receivers = append(request.Receivers, &receivers) - } - } - - if v, ok := d.GetOk("extra_org_ids"); ok { - extraOrgIdsSet := v.(*schema.Set).List() - for i := range extraOrgIdsSet { - extraOrgIds := extraOrgIdsSet[i].(string) - request.ExtraOrgIds = append(request.ExtraOrgIds, &extraOrgIds) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateGrafanaNotificationChannel(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor grafanaNotificationChannel failed, reason:%+v", logId, err) - return err - } - - channelId = *response.Response.ChannelId - - d.SetId(channelId + FILED_SP + instanceId) - return resourceTencentCloudMonitorGrafanaNotificationChannelRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaNotificationChannelRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_notification_channel.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - channelId := idSplit[0] - instanceId := idSplit[1] - - grafanaNotificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) - - if err != nil { - return err - } - - if grafanaNotificationChannel == nil { - d.SetId("") - return fmt.Errorf("resource `grafanaNotificationChannel` %s does not exist", channelId) - } - - _ = d.Set("instance_id", instanceId) - - if grafanaNotificationChannel.ChannelId != nil { - _ = d.Set("channel_id", grafanaNotificationChannel.ChannelId) - } - - if grafanaNotificationChannel.ChannelName != nil { - _ = d.Set("channel_name", grafanaNotificationChannel.ChannelName) - } - - _ = d.Set("receivers", grafanaNotificationChannel.Receivers) - - return nil -} - -func resourceTencentCloudMonitorGrafanaNotificationChannelUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_notification_channel.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateGrafanaNotificationChannelRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - channelId := idSplit[0] - instanceId := idSplit[1] - - request.ChannelId = &channelId - request.InstanceId = &instanceId - - if v, ok := d.GetOk("channel_name"); ok { - request.ChannelName = helper.String(v.(string)) - } - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - if d.HasChange("channel_name") { - return fmt.Errorf("`channel_name` do not support change now.") - } - - if d.HasChange("org_id") { - return fmt.Errorf("`org_id` do not support change now.") - } - - if d.HasChange("receivers") { - return fmt.Errorf("`receivers` do not support change now.") - } - - if d.HasChange("extra_org_ids") { - return fmt.Errorf("`extra_org_ids` do not support change now.") - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaNotificationChannel(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 { - return err - } - - return resourceTencentCloudMonitorGrafanaNotificationChannelRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaNotificationChannelDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_notification_channel.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - channelId := idSplit[0] - instanceId := idSplit[1] - - if err := service.DeleteMonitorGrafanaNotificationChannelById(ctx, channelId, instanceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_notification_channel_test.go b/tencentcloud/resource_tc_monitor_grafana_notification_channel_test.go deleted file mode 100644 index d15ddb1c9e..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_notification_channel_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudMonitorGrafanaNotificationChannel_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckGrafanaNotificationChannelDestroy, - Steps: []resource.TestStep{ - { - Config: testAccMonitorGrafanaNotificationChannel, - Check: resource.ComposeTestCheckFunc( - testAccCheckGrafanaNotificationChannelExists("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "channel_name", "create-channel-test"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "org_id", "1"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "receivers.#", "1"), - ), - }, - }, - }) -} - -func testAccCheckGrafanaNotificationChannelDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_grafana_notification_channel" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - channelId := idSplit[0] - instanceId := idSplit[1] - - notificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) - if err != nil { - return err - } - - if notificationChannel != nil { - return fmt.Errorf("GrafanaNotificationChannel %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckGrafanaNotificationChannelExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - channelId := idSplit[0] - instanceId := idSplit[1] - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - notificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) - if err != nil { - return err - } - - if notificationChannel == nil { - return fmt.Errorf("GrafanaNotificationChannel %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testMonitorGrafanaNotificationChannelVar = ` -variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" -} -variable "receivers" { - default = "` + defaultGrafanaReceiver + `" -} -` - -const testAccMonitorGrafanaNotificationChannel = testMonitorGrafanaNotificationChannelVar + ` - -resource "tencentcloud_monitor_grafana_notification_channel" "grafanaNotificationChannel" { - instance_id = var.instance_id - channel_name = "create-channel-test" - org_id = 1 - receivers = [var.receivers] - extra_org_ids = [] -} - -` diff --git a/tencentcloud/resource_tc_monitor_grafana_plugin.go b/tencentcloud/resource_tc_monitor_grafana_plugin.go deleted file mode 100644 index aabfecf3a5..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_plugin.go +++ /dev/null @@ -1,210 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaPlugin() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorGrafanaPluginRead, - Create: resourceTencentCloudMonitorGrafanaPluginCreate, - Update: resourceTencentCloudMonitorGrafanaPluginUpdate, - Delete: resourceTencentCloudMonitorGrafanaPluginDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Grafana instance id.", - }, - - "plugin_id": { - Type: schema.TypeString, - Required: true, - Description: "Plugin id.", - }, - - "version": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Plugin version.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaPluginCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_plugin.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewInstallPluginsRequest() - //response *monitor.InstallPluginsResponse - pluginId string - instanceId string - descResquest = monitor.NewDescribeInstalledPluginsRequest() - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - var plugin monitor.GrafanaPlugin - if v, ok := d.GetOk("plugin_id"); ok { - pluginId = v.(string) - plugin.PluginId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("version"); ok { - plugin.Version = helper.String(v.(string)) - } - request.Plugins = append(request.Plugins, &plugin) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().InstallPlugins(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()) - } - //response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor grafanaPlugin failed, reason:%+v", logId, err) - return err - } - - descResquest.PluginId = &pluginId - descResquest.InstanceId = &instanceId - outErr := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - response, err := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().DescribeInstalledPlugins(descResquest) - 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, InternalError) - } - if len(response.Response.PluginSet) < 1 { - return resource.RetryableError(fmt.Errorf("Installing pluin %v, retry...", pluginId)) - } - return nil - }) - if outErr != nil { - log.Printf("[CRITAL]%s Inquire monitor grafanaPlugin failed, reason:%+v", logId, outErr) - return outErr - } - - d.SetId(strings.Join([]string{instanceId, pluginId}, FILED_SP)) - return resourceTencentCloudMonitorGrafanaPluginRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaPluginRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_plugin.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - pluginId := idSplit[1] - - grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) - - if err != nil { - return err - } - - if grafanaPlugin == nil { - d.SetId("") - return fmt.Errorf("resource `grafanaPlugin` %s does not exist", pluginId) - } - - _ = d.Set("instance_id", instanceId) - - if grafanaPlugin.PluginId != nil { - _ = d.Set("plugin_id", grafanaPlugin.PluginId) - } - - if grafanaPlugin.Version != nil { - _ = d.Set("version", grafanaPlugin.Version) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaPluginUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_plugin.update")() - defer inconsistentCheck(d, meta)() - - request := monitor.NewUninstallGrafanaPluginsRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - pluginId := idSplit[1] - - request.InstanceId = &instanceId - request.PluginIds = []*string{&pluginId} - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - if d.HasChange("plugin_id") { - return fmt.Errorf("`plugin_id` do not support change now.") - } - - err := resourceTencentCloudMonitorGrafanaPluginDelete(d, meta) - if err != nil { - return err - } - - return resourceTencentCloudMonitorGrafanaPluginCreate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaPluginDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_plugin.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - pluginId := idSplit[1] - - if err := service.DeleteMonitorGrafanaPluginById(ctx, instanceId, pluginId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_plugin_test.go b/tencentcloud/resource_tc_monitor_grafana_plugin_test.go deleted file mode 100644 index 8ae88e21d7..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_plugin_test.go +++ /dev/null @@ -1,123 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudMonitorGrafanaPlugin_basic -v -func TestAccTencentCloudMonitorGrafanaPlugin_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckGrafanaPluginDestroy, - Steps: []resource.TestStep{ - { - Config: testAccMonitorGrafanaPlugin, - Check: resource.ComposeTestCheckFunc( - testAccCheckGrafanaPluginExists("tencentcloud_monitor_grafana_plugin.grafanaPlugin"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_plugin.grafanaPlugin", "plugin_id", defaultGrafanaPlugin), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_plugin.grafanaPlugin", "version", defaultGrafanaVersion), - ), - }, - { - ResourceName: "tencentcloud_monitor_grafana_plugin.grafanaPlugin", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckGrafanaPluginDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_grafana_plugin" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - instanceId := idSplit[0] - pluginId := idSplit[1] - - grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) - if err != nil { - return err - } - - if grafanaPlugin != nil { - return fmt.Errorf("GrafanaPlugin %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckGrafanaPluginExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - instanceId := idSplit[0] - pluginId := idSplit[1] - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) - if err != nil { - return err - } - - if grafanaPlugin == nil { - return fmt.Errorf("GrafanaPlugin %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testMonitorGrafanaPluginVar = ` -variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" -} -variable "plugin_id" { - default = "` + defaultGrafanaPlugin + `" -} -variable "plugin_version" { - default = "` + defaultGrafanaVersion + `" -} -` - -const testAccMonitorGrafanaPlugin = testMonitorGrafanaPluginVar + ` - -resource "tencentcloud_monitor_grafana_plugin" "grafanaPlugin" { - instance_id = var.instance_id - plugin_id = var.plugin_id - version = var.plugin_version -} - -` diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_account.go b/tencentcloud/resource_tc_monitor_grafana_sso_account.go deleted file mode 100644 index 60fe426057..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_sso_account.go +++ /dev/null @@ -1,271 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaSsoAccount() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorGrafanaSsoAccountRead, - Create: resourceTencentCloudMonitorGrafanaSsoAccountCreate, - Update: resourceTencentCloudMonitorGrafanaSsoAccountUpdate, - Delete: resourceTencentCloudMonitorGrafanaSsoAccountDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "grafana instance id.", - }, - - "user_id": { - Type: schema.TypeString, - Required: true, - Description: "sub account uin of specific user.", - }, - - "notes": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "account related description.", - }, - - "role": { - Type: schema.TypeList, - Optional: true, - Computed: true, - Description: "grafana role.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "organization": { - Type: schema.TypeString, - Required: true, - Description: "Grafana organization id string.", - }, - "role": { - Type: schema.TypeString, - Required: true, - Description: "Grafana role, one of {Admin,Editor,Viewer}.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaSsoAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_account.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreateSSOAccountRequest() - response *monitor.CreateSSOAccountResponse - instanceId string - userId string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("user_id"); ok { - request.UserId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("notes"); ok { - request.Notes = helper.String(v.(string)) - } - - if v, ok := d.GetOk("role"); ok { - roleList := v.([]interface{}) - for _, r := range roleList { - rr := r.(map[string]interface{}) - var role monitor.GrafanaAccountRole - if vv, ok := rr["role"]; ok { - role.Role = helper.String(vv.(string)) - } - if vv, ok := rr["organization"]; ok { - role.Organization = helper.String(vv.(string)) - } - request.Role = append(request.Role, &role) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateSSOAccount(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor ssoAccount failed, reason:%+v", logId, err) - return err - } - - userId = *response.Response.UserId - - d.SetId(strings.Join([]string{instanceId, userId}, FILED_SP)) - return resourceTencentCloudMonitorGrafanaSsoAccountRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_account.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - userId := idSplit[1] - - ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) - - if err != nil { - return err - } - - if ssoAccount == nil { - d.SetId("") - return fmt.Errorf("resource `ssoAccount` %s does not exist", userId) - } - - _ = d.Set("instance_id", instanceId) - - if ssoAccount.UserId != nil { - _ = d.Set("user_id", ssoAccount.UserId) - } - - if ssoAccount.Notes != nil { - _ = d.Set("notes", ssoAccount.Notes) - } - - if ssoAccount.Role != nil { - roleList := make([]map[string]interface{}, 0, len(ssoAccount.Role)) - for _, role := range ssoAccount.Role { - roleList = append(roleList, map[string]interface{}{ - "role": role.Role, - "organization": role.Organization, - }) - } - _ = d.Set("role", roleList) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaSsoAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_account.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateSSOAccountRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - userId := idSplit[1] - - request.InstanceId = &instanceId - request.UserId = &userId - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - if d.HasChange("user_id") { - return fmt.Errorf("`user_id` do not support change now.") - } - - if d.HasChange("notes") { - if v, ok := d.GetOk("notes"); ok { - request.Notes = helper.String(v.(string)) - } - } - - if d.HasChange("role") { - if v, ok := d.GetOk("role"); ok { - roleList := v.([]interface{}) - for _, r := range roleList { - rr := r.(map[string]interface{}) - var role monitor.GrafanaAccountRole - if vv, ok := rr["role"]; ok { - role.Role = helper.String(vv.(string)) - } - if vv, ok := rr["organization"]; ok { - role.Organization = helper.String(vv.(string)) - } - request.Role = append(request.Role, &role) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateSSOAccount(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 { - return err - } - - return resourceTencentCloudMonitorGrafanaSsoAccountRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_account.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - userId := idSplit[1] - - if err := service.DeleteMonitorSsoAccountById(ctx, instanceId, userId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_account_test.go b/tencentcloud/resource_tc_monitor_grafana_sso_account_test.go deleted file mode 100644 index 61fcf6b037..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_sso_account_test.go +++ /dev/null @@ -1,124 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -// go test -i; go test -test.run TestAccTencentCloudMonitorGrafanaSsoAccount_basic -v -func TestAccTencentCloudMonitorGrafanaSsoAccount_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckSsoAccountDestroy, - Steps: []resource.TestStep{ - { - Config: testAccMonitorGrafanaSsoAccount, - Check: resource.ComposeTestCheckFunc( - testAccCheckSsoAccountExists("tencentcloud_monitor_grafana_sso_account.ssoAccount"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "user_id", "100027012454"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "notes", "desc-100027012454"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.0.role", "Admin"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.0.organization", "Main Org."), - ), - }, - { - ResourceName: "tencentcloud_monitor_grafana_sso_account.ssoAccount", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckSsoAccountDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_grafana_sso_account" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - instanceId := idSplit[0] - userId := idSplit[1] - - ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) - if err != nil { - return err - } - - if ssoAccount != nil { - return fmt.Errorf("SsoAccount %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckSsoAccountExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - instanceId := idSplit[0] - userId := idSplit[1] - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) - if err != nil { - return err - } - - if ssoAccount == nil { - return fmt.Errorf("SsoAccount %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testMonitorGrafanaSsoAccountVar = ` -variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" -} -` - -const testAccMonitorGrafanaSsoAccount = testMonitorGrafanaSsoAccountVar + ` - -resource "tencentcloud_monitor_grafana_sso_account" "ssoAccount" { - instance_id = var.instance_id - user_id = "100027012454" - notes = "desc-100027012454" - role { - organization = "Main Org." - role = "Admin" - } -} - -` diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_cam_config.go b/tencentcloud/resource_tc_monitor_grafana_sso_cam_config.go deleted file mode 100644 index c6942b877a..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_sso_cam_config.go +++ /dev/null @@ -1,123 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaSsoCamConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaSsoCamConfigCreate, - Read: resourceTencentCloudMonitorGrafanaSsoCamConfigRead, - Update: resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate, - Delete: resourceTencentCloudMonitorGrafanaSsoCamConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "enable_sso_cam_check": { - Required: true, - Type: schema.TypeBool, - Description: "Whether to enable the CAM authorization: `true` for enabling; `false` for disabling.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaSsoCamConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoCamConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaSsoCamConfig, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if err != nil { - return err - } - - if grafanaSsoCamConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaSsoCamConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaSsoCamConfig.EnableSSOCamCheck != nil { - _ = d.Set("enable_sso_cam_check", grafanaSsoCamConfig.EnableSSOCamCheck) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewEnableSSOCamCheckRequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOkExists("enable_sso_cam_check"); ok { - request.EnableSSOCamCheck = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().EnableSSOCamCheck(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 update monitor grafanaSsoCamConfig failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudMonitorGrafanaSsoCamConfigRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoCamConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_config.go b/tencentcloud/resource_tc_monitor_grafana_sso_config.go deleted file mode 100644 index d4f3171144..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_sso_config.go +++ /dev/null @@ -1,145 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaSsoConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaSsoConfigCreate, - Read: resourceTencentCloudMonitorGrafanaSsoConfigRead, - Update: resourceTencentCloudMonitorGrafanaSsoConfigUpdate, - Delete: resourceTencentCloudMonitorGrafanaSsoConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "enable_sso": { - Required: true, - Type: schema.TypeBool, - Description: "Whether to enable SSO: `true` for enabling; `false` for disabling.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaSsoConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaSsoConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaSsoConfig, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if err != nil { - return err - } - - if grafanaSsoConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaSsoConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaSsoConfig.EnableSSO != nil { - _ = d.Set("enable_sso", grafanaSsoConfig.EnableSSO) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaSsoConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := monitor.NewEnableGrafanaSSORequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOkExists("enable_sso"); ok { - request.EnableSSO = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().EnableGrafanaSSO(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 update monitor grafanaSsoConfig failed, reason:%+v", logId, err) - return err - } - - time.Sleep(3 * time.Second) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update sso failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - return resourceTencentCloudMonitorGrafanaSsoConfigRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaSsoConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_sso_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_version_upgrade.go b/tencentcloud/resource_tc_monitor_grafana_version_upgrade.go deleted file mode 100644 index 0ad8907625..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_version_upgrade.go +++ /dev/null @@ -1,144 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaVersionUpgrade() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaVersionUpgradeCreate, - Read: resourceTencentCloudMonitorGrafanaVersionUpgradeRead, - Update: resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate, - Delete: resourceTencentCloudMonitorGrafanaVersionUpgradeDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "alias": { - Required: true, - Type: schema.TypeString, - Description: "Version alias.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaVersionUpgradeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaVersionUpgradeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaVersionUpgrade, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if err != nil { - return err - } - - if grafanaVersionUpgrade == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaVersionUpgrade` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaVersionUpgrade.Version != nil { - _ = d.Set("alias", grafanaVersionUpgrade.Version) - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := monitor.NewUpgradeGrafanaInstanceRequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOk("alias"); ok { - request.Alias = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpgradeGrafanaInstance(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 update monitor grafanaVersionUpgrade failed, reason:%+v", logId, err) - return err - } - - time.Sleep(3 * time.Second) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update version failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - return resourceTencentCloudMonitorGrafanaVersionUpgradeRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaVersionUpgradeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_grafana_whitelist_config.go b/tencentcloud/resource_tc_monitor_grafana_whitelist_config.go deleted file mode 100644 index 7308585422..0000000000 --- a/tencentcloud/resource_tc_monitor_grafana_whitelist_config.go +++ /dev/null @@ -1,143 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorGrafanaWhitelistConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorGrafanaWhitelistConfigCreate, - Read: resourceTencentCloudMonitorGrafanaWhitelistConfigRead, - Update: resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate, - Delete: resourceTencentCloudMonitorGrafanaWhitelistConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - - "whitelist": { - Optional: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "The addresses in the whitelist.", - }, - }, - } -} - -func resourceTencentCloudMonitorGrafanaWhitelistConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorGrafanaWhitelistConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - grafanaWhitelistConfig, err := service.DescribeMonitorGrafanaWhitelistConfigById(ctx, instanceId) - if err != nil { - return err - } - - if grafanaWhitelistConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorGrafanaWhitelistConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if grafanaWhitelistConfig.WhiteList != nil { - whiteList := grafanaWhitelistConfig.WhiteList - if len(whiteList) == 1 && *whiteList[0] == "" { - return nil - } - if len(whiteList) == 1 && strings.Contains(*whiteList[0], "\n") { - _ = d.Set("whitelist", strings.Split(*whiteList[0], "\n")) - } - if len(whiteList) > 1 { - _ = d.Set("whitelist", whiteList) - } - } - - return nil -} - -func resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateGrafanaWhiteListRequest() - - instanceId := d.Id() - - request.InstanceId = &instanceId - - if v, ok := d.GetOk("whitelist"); ok { - whitelistSet := v.(*schema.Set).List() - for i := range whitelistSet { - whitelist := whitelistSet[i].(string) - request.Whitelist = append(request.Whitelist, &whitelist) - } - } - - if len(request.Whitelist) < 1 { - request.Whitelist = append(request.Whitelist, helper.String("")) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaWhiteList(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 update monitor grafanaWhitelistConfig failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudMonitorGrafanaWhitelistConfigRead(d, meta) -} - -func resourceTencentCloudMonitorGrafanaWhitelistConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_cvm_agent.go b/tencentcloud/resource_tc_monitor_tmp_cvm_agent.go deleted file mode 100644 index 0798218ce1..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_cvm_agent.go +++ /dev/null @@ -1,138 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpCvmAgent() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpCvmAgentRead, - Create: resourceTencentCloudMonitorTmpCvmAgentCreate, - //Update: resourceTencentCloudMonitorTmpCvmAgentUpdate, - Delete: resourceTencentCloudMonitorTmpCvmAgentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Instance id.", - }, - - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Agent name.", - }, - - "agent_id": { - Type: schema.TypeString, - Computed: true, - Description: "Agent id.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpCvmAgentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_cvm_agent.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreatePrometheusAgentRequest() - response *monitor.CreatePrometheusAgentResponse - ) - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(instanceId) - } - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusAgent(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor tmpCvmAgent failed, reason:%+v", logId, err) - return err - } - - tmpCvmAgentId := *response.Response.AgentId - - d.SetId(strings.Join([]string{instanceId, tmpCvmAgentId}, FILED_SP)) - return resourceTencentCloudMonitorTmpCvmAgentRead(d, meta) -} - -func resourceTencentCloudMonitorTmpCvmAgentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmpCvmAgent.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - tmpCvmAgent, err := service.DescribeMonitorTmpCvmAgent(ctx, ids[0], ids[1]) - - if err != nil { - return err - } - - if tmpCvmAgent == nil { - d.SetId("") - return fmt.Errorf("resource `tmpCvmAgent` %s does not exist", ids[1]) - } - - if tmpCvmAgent.InstanceId != nil { - _ = d.Set("instance_id", tmpCvmAgent.InstanceId) - } - - if tmpCvmAgent.Name != nil { - _ = d.Set("name", tmpCvmAgent.Name) - } - - if tmpCvmAgent.AgentId != nil { - _ = d.Set("agent_id", tmpCvmAgent.AgentId) - } - - return nil -} - -func resourceTencentCloudMonitorTmpCvmAgentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_cvm_agent.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_exporter_integration.go b/tencentcloud/resource_tc_monitor_tmp_exporter_integration.go deleted file mode 100644 index eb3777c3f9..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_exporter_integration.go +++ /dev/null @@ -1,270 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpExporterIntegration() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpExporterIntegrationRead, - Create: resourceTencentCloudMonitorTmpExporterIntegrationCreate, - Update: resourceTencentCloudMonitorTmpExporterIntegrationUpdate, - Delete: resourceTencentCloudMonitorTmpExporterIntegrationDelete, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Instance id.", - }, - - "kind": { - Type: schema.TypeString, - Required: true, - Description: "Type.", - }, - - "content": { - Type: schema.TypeString, - Required: true, - Description: "Integration config.", - }, - - "kube_type": { - Type: schema.TypeInt, - Required: true, - Description: "Integration config.", - }, - - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "Cluster ID.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpExporterIntegrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - instanceId string - kubeType int - clusterId string - kind string - ) - - var ( - request = monitor.NewCreateExporterIntegrationRequest() - response *monitor.CreateExporterIntegrationResponse - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(instanceId) - } - - if v, ok := d.GetOk("kind"); ok { - kind = v.(string) - request.Kind = helper.String(v.(string)) - } - - if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kube_type"); ok { - kubeType = v.(int) - request.KubeType = helper.IntInt64(kubeType) - } - - if v, ok := d.GetOk("cluster_id"); ok { - clusterId = v.(string) - request.ClusterId = helper.String(clusterId) - } - - initStatus := tke.NewDescribePrometheusInstanceInitStatusRequest() - initStatus.InstanceId = request.InstanceId - err := resource.Retry(8*readRetryTimeout, func() *resource.RetryError { - results, errRet := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().DescribePrometheusInstanceInitStatus(initStatus) - if errRet != nil { - return retryError(errRet, InternalError) - } - status := results.Response.Status - if status == nil { - return resource.NonRetryableError(fmt.Errorf("prometheusInstanceInit status is nil, operate failed")) - } - if *status == "running" { - return nil - } - if *status == "uninitialized" { - iniRequest := tke.NewRunPrometheusInstanceRequest() - iniRequest.InstanceId = request.InstanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().RunPrometheusInstance(iniRequest) - 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 { - return resource.RetryableError(fmt.Errorf("prometheusInstanceInit error %v, operate failed", err)) - } - return resource.RetryableError(fmt.Errorf("prometheusInstance initializing, retry...")) - } - return resource.RetryableError(fmt.Errorf("prometheusInstanceInit status is %v, retry...", *status)) - }) - if err != nil { - return err - } - - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateExporterIntegration(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor tmpExporterIntegration failed, reason:%+v", logId, err) - return err - } - - tmpExporterIntegrationId := *response.Response.Names[0] - - d.SetId(strings.Join([]string{tmpExporterIntegrationId, instanceId, strconv.Itoa(kubeType), clusterId, kind}, FILED_SP)) - - return resourceTencentCloudMonitorTmpExporterIntegrationRead(d, meta) -} - -func resourceTencentCloudMonitorTmpExporterIntegrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmpExporterIntegration.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - tmpExporterIntegrationId := d.Id() - - tmpExporterIntegration, err := service.DescribeMonitorTmpExporterIntegration(ctx, tmpExporterIntegrationId) - - if err != nil { - return err - } - - if tmpExporterIntegration == nil { - d.SetId("") - return fmt.Errorf("resource `tmpExporterIntegration` %s does not exist", tmpExporterIntegrationId) - } - - if tmpExporterIntegration.Kind != nil { - _ = d.Set("kind", tmpExporterIntegration.Kind) - } - - if tmpExporterIntegration.Content != nil { - _ = d.Set("content", tmpExporterIntegration.Content) - } - - return nil -} - -func resourceTencentCloudMonitorTmpExporterIntegrationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateExporterIntegrationRequest() - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kind"); ok { - request.Kind = helper.String(v.(string)) - } - - if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kube_type"); ok { - request.KubeType = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("cluster_id"); ok { - request.ClusterId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateExporterIntegration(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 { - return err - } - - return resourceTencentCloudMonitorTmpExporterIntegrationRead(d, meta) -} - -func resourceTencentCloudMonitorTmpExporterIntegrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - tmpExporterIntegrationId := d.Id() - - if err := service.DeleteMonitorTmpExporterIntegrationById(ctx, tmpExporterIntegrationId); err != nil { - return err - } - - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - tmpExporterIntegration, errRet := service.DescribeMonitorTmpExporterIntegration(ctx, tmpExporterIntegrationId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if tmpExporterIntegration == nil { - return nil - } - return resource.RetryableError(fmt.Errorf("exporter integration status is %v, retry...", *tmpExporterIntegration.Status)) - }) - if err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_grafana_config.go b/tencentcloud/resource_tc_monitor_tmp_grafana_config.go deleted file mode 100644 index b5806c160b..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_grafana_config.go +++ /dev/null @@ -1,120 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpGrafanaConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorTmpGrafanaConfigCreate, - Read: resourceTencentCloudMonitorTmpGrafanaConfigRead, - Update: resourceTencentCloudMonitorTmpGrafanaConfigUpdate, - Delete: resourceTencentCloudMonitorTmpGrafanaConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance id.", - }, - - "config": { - Required: true, - Type: schema.TypeString, - Description: "JSON encoded string.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpGrafanaConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d, meta) -} - -func resourceTencentCloudMonitorTmpGrafanaConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - tmpGrafanaConfig, err := service.DescribeMonitorTmpGrafanaConfigById(ctx, instanceId) - if err != nil { - return err - } - - if tmpGrafanaConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorTmpGrafanaConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - if tmpGrafanaConfig.Config != nil { - _ = d.Set("config", tmpGrafanaConfig.Config) - } - - return nil -} - -func resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateGrafanaConfigRequest() - - instanceId := d.Id() - request.InstanceId = &instanceId - - if v, ok := d.GetOk("config"); ok { - request.Config = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateGrafanaConfig(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 update monitor tmpGrafanaConfig failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudMonitorTmpGrafanaConfigRead(d, meta) -} - -func resourceTencentCloudMonitorTmpGrafanaConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_grafana_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_instance.go b/tencentcloud/resource_tc_monitor_tmp_instance.go deleted file mode 100644 index fb7f90ecb3..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_instance.go +++ /dev/null @@ -1,336 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpInstance() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpInstanceRead, - Create: resourceTencentCloudMonitorTmpInstanceCreate, - Update: resourceTencentCloudMonitorTmpInstanceUpdate, - Delete: resourceTencentCloudMonitorTmpInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_name": { - Type: schema.TypeString, - Required: true, - Description: "Instance name.", - }, - - "vpc_id": { - Type: schema.TypeString, - Required: true, - Description: "Vpc Id.", - }, - - "subnet_id": { - Type: schema.TypeString, - Required: true, - Description: "Subnet Id.", - }, - - "data_retention_time": { - Type: schema.TypeInt, - Required: true, - Description: "Data retention time.", - }, - - "zone": { - Type: schema.TypeString, - Required: true, - Description: "Available zone.", - }, - - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - - "ipv4_address": { - Type: schema.TypeString, - Computed: true, - Description: "Instance IPv4 address.", - }, - - "remote_write": { - Type: schema.TypeString, - Computed: true, - Description: "Prometheus remote write address.", - }, - - "api_root_path": { - Type: schema.TypeString, - Computed: true, - Description: "Prometheus HTTP API root address.", - }, - - "proxy_address": { - Type: schema.TypeString, - Computed: true, - Description: "Proxy address.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_instance.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreatePrometheusMultiTenantInstancePostPayModeRequest() - response *monitor.CreatePrometheusMultiTenantInstancePostPayModeResponse - ) - - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("vpc_id"); ok { - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("subnet_id"); ok { - request.SubnetId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("data_retention_time"); ok { - request.DataRetentionTime = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("zone"); ok { - request.Zone = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusMultiTenantInstancePostPayMode(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor tmpInstance failed, reason:%+v", logId, err) - return err - } - - tmpInstanceId := *response.Response.InstanceId - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 2 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::monitor:%s:uin/:prom-instance/%s", region, tmpInstanceId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - d.SetId(tmpInstanceId) - return resourceTencentCloudMonitorTmpInstanceRead(d, meta) -} - -func resourceTencentCloudMonitorTmpInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmpInstance.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - tmpInstanceId := d.Id() - - tmpInstance, err := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) - - if err != nil { - return err - } - - if tmpInstance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `tmpInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if tmpInstance.InstanceName != nil { - _ = d.Set("instance_name", tmpInstance.InstanceName) - } - - if tmpInstance.VpcId != nil { - _ = d.Set("vpc_id", tmpInstance.VpcId) - } - - if tmpInstance.SubnetId != nil { - _ = d.Set("subnet_id", tmpInstance.SubnetId) - } - - if tmpInstance.DataRetentionTime != nil { - _ = d.Set("data_retention_time", tmpInstance.DataRetentionTime) - } - - if tmpInstance.Zone != nil { - _ = d.Set("zone", tmpInstance.Zone) - } - - if tmpInstance.IPv4Address != nil { - _ = d.Set("ipv4_address", tmpInstance.IPv4Address) - } - - if tmpInstance.RemoteWrite != nil { - _ = d.Set("remote_write", tmpInstance.RemoteWrite) - } - - if tmpInstance.ApiRootPath != nil { - _ = d.Set("api_root_path", tmpInstance.ApiRootPath) - } - - if tmpInstance.ProxyAddress != nil { - _ = d.Set("proxy_address", tmpInstance.ProxyAddress) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "monitor", "prom-instance", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudMonitorTmpInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_instance.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := monitor.NewModifyPrometheusInstanceAttributesRequest() - - request.InstanceId = helper.String(d.Id()) - - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } - - if d.HasChange("vpc_id") { - return fmt.Errorf("`vpc_id` do not support change now.") - } - - if d.HasChange("subnet_id") { - return fmt.Errorf("`subnet_id` do not support change now.") - } - - if d.HasChange("data_retention_time") { - if v, ok := d.GetOk("data_retention_time"); ok { - request.DataRetentionTime = helper.IntInt64(v.(int)) - } - } - - if d.HasChange("zone") { - return fmt.Errorf("`zone` do not support change now.") - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusInstanceAttributes(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 { - return err - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("monitor", "prom-instance", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudMonitorTmpInstanceRead(d, meta) -} - -func resourceTencentCloudMonitorTmpInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_instance.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - tmpInstanceId := d.Id() - - if err := service.IsolateMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { - return err - } - - err := resource.Retry(1*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.InstanceStatus == 6 { - return nil - } - if *instance.InstanceStatus == 3 { - return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) - } - return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) - }) - if err != nil { - return err - } - - if err := service.DeleteMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { - return err - } - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_instance_test.go b/tencentcloud/resource_tc_monitor_tmp_instance_test.go deleted file mode 100644 index e67ef6009b..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_instance_test.go +++ /dev/null @@ -1,132 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strconv" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudMonitorInstance_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckMonInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: testInstance_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "instance_name", "demo-test"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "data_retention_time", "30"), - ), - }, - { - Config: testInstance_update, - Check: resource.ComposeTestCheckFunc( - testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "instance_name", "demo-test-update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "data_retention_time", "30"), - ), - }, - //{ - // ResourceName: "tencentcloud_monitor_tmp_instance.basic", - // ImportState: true, - // ImportStateVerify: true, - //}, - }, - }) -} - -func testAccCheckMonInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_tmp_instance" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - instance, err := service.DescribeMonitorTmpInstance(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if instance != nil { - status := strconv.FormatInt(*instance.InstanceStatus, 10) - if strings.Contains("5,6,8,9", status) { - return nil - } - return fmt.Errorf("instance %s still exists: %v", rs.Primary.ID, *instance.InstanceStatus) - } - } - - return nil -} - -func testAccCheckInstanceExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - instance, err := service.DescribeMonitorTmpInstance(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if instance == nil || *instance.InstanceStatus != 2 { - return fmt.Errorf("instance %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testInstanceVar = defaultAzVariable + ` -variable "vpc_id" { - default = "` + defaultEMRVpcId + `" -} -variable "subnet_id" { - default = "` + defaultEMRSubnetId + `" -} -` -const testInstance_basic = testInstanceVar + ` -resource "tencentcloud_monitor_tmp_instance" "basic" { - instance_name = "demo-test" - vpc_id = var.vpc_id - subnet_id = var.subnet_id - data_retention_time = 30 - zone = var.default_az - tags = { - "createdBy" = "terraform" - } -}` - -const testInstance_update = testInstanceVar + ` -resource "tencentcloud_monitor_tmp_instance" "update" { - instance_name = "demo-test-update" - vpc_id = var.vpc_id - subnet_id = var.subnet_id - data_retention_time = 30 - zone = var.default_az - tags = { - "createdBy" = "terraform" - } -}` diff --git a/tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment.go b/tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment.go deleted file mode 100644 index 17b362a563..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment.go +++ /dev/null @@ -1,126 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpManageGrafanaAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMonitorTmpManageGrafanaAttachmentCreate, - Read: resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead, - Delete: resourceTencentCloudMonitorTmpManageGrafanaAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Prometheus instance ID.", - }, - - "grafana_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Grafana instance ID.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpManageGrafanaAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewBindPrometheusManagedGrafanaRequest() - instanceId string - ) - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("grafana_id"); ok { - request.GrafanaId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().BindPrometheusManagedGrafana(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 monitor manageGrafanaAttachment failed, reason:%+v", logId, err) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead(d, meta) -} - -func resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - manageGrafanaAttachment, err := service.DescribeMonitorManageGrafanaAttachmentById(ctx, instanceId) - if err != nil { - return err - } - - if manageGrafanaAttachment == nil { - d.SetId("") - log.Printf("[WARN]%s resource `MonitorTmpManageGrafanaAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if manageGrafanaAttachment.InstanceId != nil { - _ = d.Set("instance_id", manageGrafanaAttachment.InstanceId) - } - - if manageGrafanaAttachment.GrafanaInstanceId != nil { - _ = d.Set("grafana_id", manageGrafanaAttachment.GrafanaInstanceId) - } - - return nil -} - -func resourceTencentCloudMonitorTmpManageGrafanaAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId := d.Id() - - if err := service.DeleteMonitorManageGrafanaAttachmentById(ctx, instanceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_recording_rule.go b/tencentcloud/resource_tc_monitor_tmp_recording_rule.go deleted file mode 100644 index a8d0283e0f..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_recording_rule.go +++ /dev/null @@ -1,209 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpRecordingRule() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpRecordingRuleRead, - Create: resourceTencentCloudMonitorTmpRecordingRuleCreate, - Update: resourceTencentCloudMonitorTmpRecordingRuleUpdate, - Delete: resourceTencentCloudMonitorTmpRecordingRuleDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - Description: "Recording rule name.", - }, - "group": { - Type: schema.TypeString, - Required: true, - Description: "Recording rule group.", - }, - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Instance id.", - }, - "rule_state": { - Type: schema.TypeInt, - Optional: true, - Description: "Rule state.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpRecordingRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_recording_rule.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = monitor.NewCreateRecordingRuleRequest() - response *monitor.CreateRecordingRuleResponse - ) - - var instanceId string - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - if v, ok := d.GetOk("group"); ok { - request.Group = helper.String(StringToBase64(v.(string))) - } - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(instanceId) - } - if v, ok := d.GetOk("rule_state"); ok { - request.RuleState = helper.IntInt64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateRecordingRule(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor recordingRule failed, reason:%+v", logId, err) - return err - } - - recordingRuleId := *response.Response.RuleId - d.SetId(strings.Join([]string{instanceId, recordingRuleId}, FILED_SP)) - - return resourceTencentCloudMonitorTmpRecordingRuleRead(d, meta) -} - -func resourceTencentCloudMonitorTmpRecordingRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tmp_monitor_recording_rule.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - recordingRule, err := service.DescribeMonitorRecordingRuleById(ctx, ids[0], ids[1]) - - if err != nil { - return err - } - - if recordingRule == nil { - d.SetId("") - return fmt.Errorf("resource `recordingRule` %s does not exist", ids[1]) - } - - _ = d.Set("instance_id", ids[0]) - if recordingRule.Name != nil { - _ = d.Set("name", recordingRule.Name) - } - if recordingRule.Group != nil { - group, err := Base64ToString(*recordingRule.Group) - if err != nil { - return fmt.Errorf("`recordingRule.Group` %s does not be decoded to yaml", *recordingRule.Group) - } - _ = d.Set("group", &group) - } - - if recordingRule.RuleState != nil { - _ = d.Set("rule_state", recordingRule.RuleState) - } - - return nil -} - -func resourceTencentCloudMonitorTmpRecordingRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tmp_monitor_recording_rule.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdateRecordingRuleRequest() - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - request.InstanceId = helper.String(ids[0]) - request.RuleId = helper.String(ids[1]) - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("group"); ok { - request.Group = helper.String(v.(string)) - } - - if d.HasChange("rule_state") { - if v, ok := d.GetOk("rule_state"); ok { - request.RuleState = helper.IntInt64(v.(int)) - } - } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateRecordingRule(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 { - return err - } - - return resourceTencentCloudMonitorTmpRecordingRuleRead(d, meta) -} - -func resourceTencentCloudMonitorTmpRecordingRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_recording_rule.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - if err := service.DeleteMonitorRecordingRule(ctx, ids[0], ids[1]); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_scrape_job.go b/tencentcloud/resource_tc_monitor_tmp_scrape_job.go deleted file mode 100644 index 886e34aa81..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_scrape_job.go +++ /dev/null @@ -1,193 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpScrapeJob() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudMonitorTmpScrapeJobRead, - Create: resourceTencentCloudMonitorTmpScrapeJobCreate, - Update: resourceTencentCloudMonitorTmpScrapeJobUpdate, - Delete: resourceTencentCloudMonitorTmpScrapeJobDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Instance id.", - }, - - "agent_id": { - Type: schema.TypeString, - Required: true, - Description: "Agent id.", - }, - - "config": { - Type: schema.TypeString, - Optional: true, - Description: "Job content.", - }, - }, - } -} - -func resourceTencentCloudMonitorTmpScrapeJobCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_scrape_job.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var instanceId string - var agentId string - - var ( - request = monitor.NewCreatePrometheusScrapeJobRequest() - response *monitor.CreatePrometheusScrapeJobResponse - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(instanceId) - } - - if v, ok := d.GetOk("agent_id"); ok { - agentId = v.(string) - request.AgentId = helper.String(agentId) - } - - if v, ok := d.GetOk("config"); ok { - request.Config = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusScrapeJob(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create monitor tmpScrapeJob failed, reason:%+v", logId, err) - return err - } - - tmpScrapeJobId := *response.Response.JobId - - d.SetId(strings.Join([]string{tmpScrapeJobId, instanceId, agentId}, FILED_SP)) - - return resourceTencentCloudMonitorTmpScrapeJobRead(d, meta) -} - -func resourceTencentCloudMonitorTmpScrapeJobRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmpScrapeJob.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - - tmpScrapeJobId := d.Id() - - tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, tmpScrapeJobId) - - if err != nil { - return err - } - - if tmpScrapeJob == nil { - d.SetId("") - return fmt.Errorf("resource `tmpScrapeJob` %s does not exist", tmpScrapeJobId) - } - - _ = d.Set("instance_id", strings.Split(tmpScrapeJobId, FILED_SP)[1]) - if tmpScrapeJob.AgentId != nil { - _ = d.Set("agent_id", tmpScrapeJob.AgentId) - } - - if tmpScrapeJob.Config != nil { - _ = d.Set("config", tmpScrapeJob.Config) - } - - return nil -} - -func resourceTencentCloudMonitorTmpScrapeJobUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_scrape_job.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewUpdatePrometheusScrapeJobRequest() - - ids := strings.Split(d.Id(), FILED_SP) - - request.JobId = &ids[0] - request.InstanceId = &ids[1] - request.AgentId = &ids[2] - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - if d.HasChange("agent_id") { - return fmt.Errorf("`agent_id` do not support change now.") - } - - if d.HasChange("config") { - if v, ok := d.GetOk("config"); ok { - request.Config = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdatePrometheusScrapeJob(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 { - return err - } - - return resourceTencentCloudMonitorTmpScrapeJobRead(d, meta) -} - -func resourceTencentCloudMonitorTmpScrapeJobDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_scrape_job.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - tmpScrapeJobId := d.Id() - - if err := service.DeleteMonitorTmpScrapeJobById(ctx, tmpScrapeJobId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_scrape_job_test.go b/tencentcloud/resource_tc_monitor_tmp_scrape_job_test.go deleted file mode 100644 index 35984da2c6..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_scrape_job_test.go +++ /dev/null @@ -1,124 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudMonitorScrapeJob_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckScrapeJobDestroy, - Steps: []resource.TestStep{ - { - Config: testScrapeJob_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckScrapeJobExists("tencentcloud_monitor_tmp_scrape_job.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_scrape_job.basic", "config", "job_name: demo-config-test\nhonor_timestamps: true\nmetrics_path: /metrics\nscheme: https\n"), - ), - }, - { - Config: testScrapeJob_update, - Check: resource.ComposeTestCheckFunc( - testAccCheckScrapeJobExists("tencentcloud_monitor_tmp_scrape_job.update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_scrape_job.update", "config", "job_name: demo-config-test-update\nhonor_timestamps: true\nmetrics_path: /metrics\nscheme: https\n"), - ), - }, - { - ResourceName: "tencentcloud_monitor_tmp_scrape_job.update", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckScrapeJobDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_tmp_scrape_job" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if tmpScrapeJob != nil { - return fmt.Errorf("scrape job %s still exists", rs.Primary.ID) - } - } - - return nil -} - -func testAccCheckScrapeJobExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if tmpScrapeJob == nil { - return fmt.Errorf("scrape job %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testScrapeJobVar = ` -variable "prometheus_id" { - default = "` + defaultPrometheusId + `" -} -variable "agent_id" { - default = "` + defaultAgentId + `" -} -` -const testScrapeJob_basic = testScrapeJobVar + ` -resource "tencentcloud_monitor_tmp_scrape_job" "basic" { - instance_id = var.prometheus_id - agent_id = var.agent_id - config = <<-EOT -job_name: demo-config-test -honor_timestamps: true -metrics_path: /metrics -scheme: https -EOT -}` - -const testScrapeJob_update = testScrapeJobVar + ` -resource "tencentcloud_monitor_tmp_scrape_job" "update" { - instance_id = var.prometheus_id - agent_id = var.agent_id - config = <<-EOT -job_name: demo-config-test-update -honor_timestamps: true -metrics_path: /metrics -scheme: https -EOT -}` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_basic_config_test.go b/tencentcloud/resource_tc_monitor_tmp_tke_basic_config_test.go deleted file mode 100644 index fe8a23d9b2..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_tke_basic_config_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudMonitorTmpTkeBasicConfigResource_basic -v -func TestAccTencentCloudMonitorTmpTkeBasicConfigResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccMonitorTmpTkeBasicConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckTmpTkeBasicConfigExists("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config", "name", "cadvisor"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config", "metrics_name.#", "2"), - ), - }, - }, - }) -} - -func testAccCheckTmpTkeBasicConfigExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("instance id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 4 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - clusterType := items[1] - clusterId := items[2] - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - agents, err := service.DescribeTkeTmpBasicConfigById(ctx, clusterId, clusterType, instanceId) - if agents == nil { - return fmt.Errorf("config %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccMonitorTmpTkeBasicConfigVar = ` -variable "prometheus_id" { - default = "` + defaultPrometheusId + `" - } -variable "cluster_id" { - default = "cls-2trvpflc" -} -variable "cluster_type" { - default = "` + tkeClusterTypeAgent + `" -}` - -const testAccMonitorTmpTkeBasicConfig = testAccMonitorTmpTkeBasicConfigVar + ` - -resource "tencentcloud_monitor_tmp_tke_basic_config" "tmp_tke_basic_config" { - instance_id = var.prometheus_id - cluster_type = var.cluster_type - cluster_id = var.cluster_id - name = "cadvisor" - metrics_name = ["container_cpu_usage_seconds_total", "container_fs_limit_bytes"] - -} - -` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent_test.go b/tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent_test.go deleted file mode 100644 index 75acad28a5..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent_test.go +++ /dev/null @@ -1,151 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_monitor_tmp_tke_cluster_agent - resource.AddTestSweepers("tencentcloud_monitor_tmp_tke_cluster_agent", &resource.Sweeper{ - Name: "tencentcloud_monitor_tmp_tke_cluster_agent", - F: testSweepClusterAgent, - }) -} -func testSweepClusterAgent(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := MonitorService{client} - - instanceId := clusterPrometheusId - clusterId := tkeClusterIdAgent - clusterType := tkeClusterTypeAgent - - agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) - if err != nil { - return err - } - - if agents != nil { - return nil - } - - err = service.DeletePrometheusClusterAgent(ctx, instanceId, clusterId, clusterType) - if err != nil { - return err - } - - return nil -} - -// go test -i; go test -test.run TestAccTencentCloudMonitorClusterAgent_basic -v -func TestAccTencentCloudMonitorClusterAgent_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckClusterAgentDestroy, - Steps: []resource.TestStep{ - { - Config: testClusterAgentYaml_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckClusterAgentExists("tencentcloud_monitor_tmp_tke_cluster_agent.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_cluster_agent.basic", "agents.0.cluster_id", "cls-9ae9qo9k"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_cluster_agent.basic", "agents.0.cluster_type", "eks"), - ), - }, - }, - }) -} - -func testAccCheckClusterAgentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_tmp_tke_cluster_agent" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - clusterId := items[1] - clusterType := items[2] - agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) - if agents != nil { - return fmt.Errorf("cluster agent %s still exists", rs.Primary.ID) - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckClusterAgentExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("instance id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - clusterId := items[1] - clusterType := items[2] - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) - if agents == nil { - return fmt.Errorf("cluster agent %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testClusterAgentYamlVar = ` -variable "prometheus_id" { - default = "` + clusterPrometheusId + `" -} -variable "default_region" { - default = "` + defaultRegion + `" -} -variable "agent_cluster_id" { - default = "` + tkeClusterIdAgent + `" -} -variable "agent_cluster_type" { - default = "` + tkeClusterTypeAgent + `" -}` - -const testClusterAgentYaml_basic = testClusterAgentYamlVar + ` -resource "tencentcloud_monitor_tmp_tke_cluster_agent" "basic" { - instance_id = var.prometheus_id - agents { - region = var.default_region - cluster_type = var.agent_cluster_type - cluster_id = var.agent_cluster_id - enable_external = false - } -}` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml.go b/tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml.go deleted file mode 100644 index b0c50e5688..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml.go +++ /dev/null @@ -1,220 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMonitorTmpTkeRecordRuleYaml() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTkeTmpRecordRuleYamlRead, - Create: resourceTencentCloudTkeTmpRecordRuleYamlCreate, - Update: resourceTencentCloudTkeTmpRecordRuleYamlUpdate, - Delete: resourceTencentCloudTkeTmpRecordRuleYamlDelete, - //Importer: &schema.ResourceImporter{ - // State: schema.ImportStatePassthrough, - //}, - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - Description: "Instance Id.", - }, - - "content": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateYaml, - Description: "Contents of record rules in yaml format.", - }, - - "name": { - Type: schema.TypeString, - Computed: true, - Description: "Name of the instance.", - }, - - "update_time": { - Type: schema.TypeString, - Computed: true, - Description: "Last modified time of record rule.", - }, - - "template_id": { - Type: schema.TypeString, - Computed: true, - Description: "Used for the argument, if the configuration comes to the template, the template id.", - }, - - "cluster_id": { - Type: schema.TypeString, - Computed: true, - Description: "An ID identify the cluster, like cls-xxxxxx.", - }, - }, - } -} - -func resourceTencentCloudTkeTmpRecordRuleYamlCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewCreatePrometheusRecordRuleYamlRequest() - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - } - - tmpRecordRuleName := "" - if v, ok := d.GetOk("content"); ok { - m, _ := YamlParser(v.(string)) - metadata := m["metadata"] - if metadata != nil { - if metadata.(map[interface{}]interface{})["name"] != nil { - tmpRecordRuleName = metadata.(map[interface{}]interface{})["name"].(string) - } - } - request.Content = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusRecordRuleYaml(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 tke tmpRecordRule failed, reason:%+v", logId, err) - return err - } - - instanceId := *request.InstanceId - d.SetId(strings.Join([]string{instanceId, tmpRecordRuleName}, FILED_SP)) - return resourceTencentCloudTkeTmpRecordRuleYamlRead(d, meta) -} - -func resourceTencentCloudTkeTmpRecordRuleYamlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - instanceId := ids[0] - name := ids[1] - - recordRuleService := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - request, err := recordRuleService.DescribePrometheusRecordRuleByName(ctx, instanceId, name) - if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - request, err = recordRuleService.DescribePrometheusRecordRuleByName(ctx, instanceId, name) - if err != nil { - return retryError(err) - } - return nil - }) - } - if err != nil { - return err - } - - recordRules := request.Response.Records - if len(recordRules) == 0 { - d.SetId("") - return nil - } - - recordRule := recordRules[0] - if recordRule == nil { - return nil - } - _ = d.Set("instance_id", instanceId) - _ = d.Set("name", recordRule.Name) - _ = d.Set("update_time", recordRule.UpdateTime) - _ = d.Set("template_id", recordRule.TemplateId) - //_ = d.Set("content", recordRule.Content) - _ = d.Set("cluster_id", recordRule.ClusterId) - - return nil -} - -func resourceTencentCloudTkeTmpRecordRuleYamlUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := monitor.NewModifyPrometheusRecordRuleYamlRequest() - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - request.InstanceId = &ids[0] - request.Name = &ids[1] - - if d.HasChange("content") { - if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(v.(string)) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusRecordRuleYaml(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 { - return err - } - - return resourceTencentCloudTkeTmpRecordRuleYamlRead(d, meta) - } - } - - return nil -} - -func resourceTencentCloudTkeTmpRecordRuleYamlDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - if err := service.DeletePrometheusRecordRuleYaml(ctx, ids[0], ids[1]); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_template_attachment_test.go b/tencentcloud/resource_tc_monitor_tmp_tke_template_attachment_test.go deleted file mode 100644 index 0b59ce0764..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_tke_template_attachment_test.go +++ /dev/null @@ -1,127 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudMonitorTempAttachment_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTempAttachmentDestroy, - Steps: []resource.TestStep{ - { - Config: testTempAttachment_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckTempAttachmentExists("tencentcloud_monitor_tmp_tke_template_attachment.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "template_id", "temp-gqunlvo1"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "targets.0.instance_id", "prom-1lspn8sw"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "targets.0.region", "ap-guangzhou"), - ), - }, - }, - }) -} - -func testAccCheckTempAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - recordService := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_tmp_tke_template_attachment" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - templateId := items[0] - instanceId := items[1] - region := items[2] - targets, err := recordService.DescribePrometheusTempSync(ctx, templateId) - if err != nil { - return err - } - - if len(targets) > 0 { - for _, v := range targets { - if *v.InstanceId == instanceId && *v.Region == region { - return fmt.Errorf("associated instance information %s still exists", rs.Primary.ID) - } - } - } - } - - return nil -} - -func testAccCheckTempAttachmentExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - templateId := items[0] - instanceId := items[1] - region := items[2] - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - targets, err := service.DescribePrometheusTempSync(ctx, templateId) - if err != nil { - return err - } - - if len(targets) < 1 { - return fmt.Errorf("associated instance information %s is not found", rs.Primary.ID) - } - for i, v := range targets { - if *v.InstanceId == instanceId && *v.Region == region { - return nil - } - if i == len(targets)-1 { - return fmt.Errorf("associated instance information %s is not found", rs.Primary.ID) - } - } - - return nil - } -} - -const testTempAttachmentVar = ` -variable "prometheus_id" { - default = "` + defaultPrometheusId + `" -} -variable "template_id" { - default = "` + defaultTemplateId + `" -} -variable "region" { - default = "ap-guangzhou" -}` - -const testTempAttachment_basic = testTempAttachmentVar + ` -resource "tencentcloud_monitor_tmp_tke_template_attachment" "basic" { - template_id = var.template_id - - targets { - region = var.region - instance_id = var.prometheus_id - } -}` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_template_test.go b/tencentcloud/resource_tc_monitor_tmp_tke_template_test.go deleted file mode 100644 index 9153240025..0000000000 --- a/tencentcloud/resource_tc_monitor_tmp_tke_template_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudMonitorTemplate_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTemplateDestroy, - Steps: []resource.TestStep{ - { - Config: testTemplate_basic, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemplateExists("tencentcloud_monitor_tmp_tke_template.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.name", "test-template"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.level", "instance"), - ), - }, - { - Config: testTemplate_update, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemplateExists("tencentcloud_monitor_tmp_tke_template.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.name", "test-template_update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.level", "instance"), - ), - }, - { - ResourceName: "tencentcloud_monitor_tmp_tke_template.basic", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_monitor_tmp_tke_template" { - continue - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - template, err := service.DescribeTmpTkeTemplateById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if template != nil { - return fmt.Errorf("template %s still exists", rs.Primary.ID) - } - } - - return nil -} - -func testAccCheckTemplateExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - if rs.Primary.ID == "" { - return fmt.Errorf("resource id is not set") - } - - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - template, err := service.DescribeTmpTkeTemplateById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if template == nil { - return fmt.Errorf("template %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testTemplate_basic = ` -resource "tencentcloud_monitor_tmp_tke_template" "basic" { - template { - name = "test-template" - level = "instance" - } -}` - -const testTemplate_update = ` -resource "tencentcloud_monitor_tmp_tke_template" "basic" { - template { - name = "test-template_update" - level = "instance" - } -}` diff --git a/tencentcloud/resource_tc_nat_refresh_nat_dc_route.go b/tencentcloud/resource_tc_nat_refresh_nat_dc_route.go deleted file mode 100644 index e4a6e3ef07..0000000000 --- a/tencentcloud/resource_tc_nat_refresh_nat_dc_route.go +++ /dev/null @@ -1,101 +0,0 @@ -package tencentcloud - -import ( - "log" - - "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 resourceTencentCloudNatRefreshNatDcRoute() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudNatRefreshNatDcRouteCreate, - Read: resourceTencentCloudNatRefreshNatDcRouteRead, - Delete: resourceTencentCloudNatRefreshNatDcRouteDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpc_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Unique identifier of Vpc.", - }, - - "nat_gateway_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Unique identifier of Nat Gateway.", - }, - - "dry_run": { - Required: true, - ForceNew: true, - Type: schema.TypeBool, - Description: "Whether to pre-refresh, valid values: True:yes, False:no.", - }, - }, - } -} - -func resourceTencentCloudNatRefreshNatDcRouteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewRefreshDirectConnectGatewayRouteToNatGatewayRequest() - vpcId string - natGatewayId string - ) - if v, ok := d.GetOk("vpc_id"); ok { - vpcId = v.(string) - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("nat_gateway_id"); ok { - natGatewayId = v.(string) - request.NatGatewayId = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("dry_run"); ok { - request.DryRun = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().RefreshDirectConnectGatewayRouteToNatGateway(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 vpc refreshNatDcRoute failed, reason:%+v", logId, err) - return err - } - - d.SetId(vpcId + FILED_SP + natGatewayId) - - return resourceTencentCloudNatRefreshNatDcRouteRead(d, meta) -} - -func resourceTencentCloudNatRefreshNatDcRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudNatRefreshNatDcRouteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_organization_org_member_auth_identity_attachment.go b/tencentcloud/resource_tc_organization_org_member_auth_identity_attachment.go deleted file mode 100644 index fe5c8a3e02..0000000000 --- a/tencentcloud/resource_tc_organization_org_member_auth_identity_attachment.go +++ /dev/null @@ -1,133 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentCreate, - Read: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead, - Delete: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "member_uin": { - Required: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Member Uin.", - }, - - "identity_ids": { - Required: true, - ForceNew: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeInt, - }, - Description: "Identity Id list. Up to 5.", - }, - }, - } -} - -func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_auth_identity.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = organization.NewCreateOrganizationMemberAuthIdentityRequest() - memberUin string - ) - if v, ok := d.GetOk("member_uin"); ok { - request.MemberUins = append(request.MemberUins, helper.IntUint64(v.(int))) - memberUin = helper.IntToStr(v.(int)) - } - - if v, ok := d.GetOk("identity_ids"); ok { - identityIdsSet := v.(*schema.Set).List() - for i := range identityIdsSet { - identityIds := identityIdsSet[i].(int) - request.IdentityIds = append(request.IdentityIds, helper.IntUint64(identityIds)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().CreateOrganizationMemberAuthIdentity(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 organization orgMemberAuthIdentity failed, reason:%+v", logId, err) - return err - } - - d.SetId(memberUin) - return resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead(d, meta) -} - -func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_auth_identity.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} - - memberUin := d.Id() - uin := helper.StrToInt64(memberUin) - identityIds, err := service.DescribeOrganizationOrgMemberAuthIdentityById(ctx, uin) - if err != nil { - return err - } - - if len(identityIds) < 1 { - d.SetId("") - log.Printf("[WARN]%s resource `OrganizationOrgMemberAuthIdentity` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("identity_ids", identityIds) - _ = d.Set("member_uin", uin) - return nil -} - -func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_auth_identity.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} - uin := d.Id() - var identityIds []string - if v, ok := d.GetOk("identity_ids"); ok { - identityIdsSet := v.(*schema.Set).List() - for i := range identityIdsSet { - identityId := identityIdsSet[i].(int) - identityIds = append(identityIds, helper.IntToStr(identityId)) - } - } - - if err := service.DeleteOrganizationOrgMemberAuthIdentityById(ctx, uin, identityIds); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_organization_org_node.go b/tencentcloud/resource_tc_organization_org_node.go deleted file mode 100644 index 707174e872..0000000000 --- a/tencentcloud/resource_tc_organization_org_node.go +++ /dev/null @@ -1,213 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudOrganizationOrgNode() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudOrganizationOrgNodeRead, - Create: resourceTencentCloudOrganizationOrgNodeCreate, - Update: resourceTencentCloudOrganizationOrgNodeUpdate, - Delete: resourceTencentCloudOrganizationOrgNodeDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "parent_node_id": { - Type: schema.TypeInt, - Required: true, - Description: "Parent node ID.", - }, - - "name": { - Type: schema.TypeString, - Required: true, - Description: "Node name.", - }, - - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Notes.", - }, - - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Node creation time.", - }, - - "update_time": { - Type: schema.TypeString, - Computed: true, - Description: "Node update time.", - }, - }, - } -} - -func resourceTencentCloudOrganizationOrgNodeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_node.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = organization.NewAddOrganizationNodeRequest() - response *organization.AddOrganizationNodeResponse - nodeId int64 - ) - - if v, _ := d.GetOk("parent_node_id"); v != nil { - request.ParentNodeId = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("name"); ok { - - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("remark"); ok { - - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().AddOrganizationNode(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create organization orgNode failed, reason:%+v", logId, err) - return err - } - - nodeId = *response.Response.NodeId - - d.SetId(helper.Int64ToStr(nodeId)) - return resourceTencentCloudOrganizationOrgNodeRead(d, meta) -} - -func resourceTencentCloudOrganizationOrgNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_node.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} - - orgNodeId := d.Id() - - orgNode, err := service.DescribeOrganizationOrgNode(ctx, orgNodeId) - - if err != nil { - return err - } - - if orgNode == nil { - d.SetId("") - return fmt.Errorf("resource `orgNode` %s does not exist", orgNodeId) - } - - if orgNode.ParentNodeId != nil { - _ = d.Set("parent_node_id", orgNode.ParentNodeId) - } - - if orgNode.Name != nil { - _ = d.Set("name", orgNode.Name) - } - - if orgNode.Remark != nil { - _ = d.Set("remark", orgNode.Remark) - } - - if orgNode.CreateTime != nil { - _ = d.Set("create_time", orgNode.CreateTime) - } - - if orgNode.UpdateTime != nil { - _ = d.Set("update_time", orgNode.UpdateTime) - } - - return nil -} - -func resourceTencentCloudOrganizationOrgNodeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_node.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - request := organization.NewUpdateOrganizationNodeRequest() - - orgNodeId := d.Id() - - request.NodeId = helper.StrToUint64Point(orgNodeId) - - if d.HasChange("parent_node_id") { - return fmt.Errorf("`parent_node_id` do not support change now.") - } - - if d.HasChange("name") { - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - } - - if d.HasChange("remark") { - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().UpdateOrganizationNode(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 organization orgNode failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudOrganizationOrgNodeRead(d, meta) -} - -func resourceTencentCloudOrganizationOrgNodeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_node.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} - - orgNodeId := d.Id() - - if err := service.DeleteOrganizationOrgNodeById(ctx, orgNodeId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_organization_quit_organization_operation.go b/tencentcloud/resource_tc_organization_quit_organization_operation.go deleted file mode 100644 index b84ec8cc12..0000000000 --- a/tencentcloud/resource_tc_organization_quit_organization_operation.go +++ /dev/null @@ -1,76 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudOrganizationQuitOrganizationOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudOrganizationQuitOrganizationOperationCreate, - Read: resourceTencentCloudOrganizationQuitOrganizationOperationRead, - Delete: resourceTencentCloudOrganizationQuitOrganizationOperationDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "org_id": { - Required: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Organization ID.", - }, - }, - } -} - -func resourceTencentCloudOrganizationQuitOrganizationOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_quit_organization_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = organization.NewQuitOrganizationRequest() - orgId uint64 - ) - if v, _ := d.GetOk("org_id"); v != nil { - request.OrgId = helper.IntUint64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().QuitOrganization(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 organization quitOrganizationOperation failed, reason:%+v", logId, err) - return err - } - - d.SetId(helper.UInt64ToStr(orgId)) - - return resourceTencentCloudOrganizationQuitOrganizationOperationRead(d, meta) -} - -func resourceTencentCloudOrganizationQuitOrganizationOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_quit_organization_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudOrganizationQuitOrganizationOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_quit_organization_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_protocol_template.go b/tencentcloud/resource_tc_protocol_template.go deleted file mode 100644 index 70f11318c1..0000000000 --- a/tencentcloud/resource_tc_protocol_template.go +++ /dev/null @@ -1,169 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudProtocolTemplate() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudProtocolTemplateCreate, - Read: resourceTencentCloudProtocolTemplateRead, - Update: resourceTencentCloudProtocolTemplateUpdate, - Delete: resourceTencentCloudProtocolTemplateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of the protocol template.", - }, - "protocols": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - ValidateFunc: validateLowCase, - }, - Required: true, - Description: "Protocol list. Valid protocols are `tcp`, `udp`, `icmp`, `gre`. Single port(tcp:80), multi-port(tcp:80,443), port range(tcp:3306-20000), all(tcp:all) format are support. Protocol `icmp` and `gre` cannot specify port.", - }, - }, - } -} - -func resourceTencentCloudProtocolTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - name := d.Get("name").(string) - protocols := d.Get("protocols").(*schema.Set).List() - - vpcProtocol := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - var outErr, inErr error - var templateId string - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - templateId, inErr = vpcProtocol.CreateServiceTemplate(ctx, name, protocols) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(templateId) - - return resourceTencentCloudProtocolTemplateRead(d, meta) -} - -func resourceTencentCloudProtocolTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - templateId := d.Id() - var outErr, inErr error - vpcProtocol := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - template, has, outErr := vpcProtocol.DescribeServiceTemplateById(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - template, has, inErr = vpcProtocol.DescribeServiceTemplateById(ctx, templateId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", template.ServiceTemplateName) - _ = d.Set("protocols", template.ServiceSet) - - return nil -} - -func resourceTencentCloudProtocolTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateId := d.Id() - - if d.HasChange("name") || d.HasChange("protocols") { - var outErr, inErr error - name := d.Get("name").(string) - protocols := d.Get("protocols").(*schema.Set).List() - vpcProtocol := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcProtocol.ModifyServiceTemplate(ctx, templateId, name, protocols) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudProtocolTemplateRead(d, meta) -} - -func resourceTencentCloudProtocolTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateId := d.Id() - vpcProtocol := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - var outErr, inErr error - - outErr = vpcProtocol.DeleteServiceTemplate(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcProtocol.DeleteServiceTemplate(ctx, templateId) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - } - - if outErr != nil { - return outErr - } - //check not exist - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr := vpcProtocol.DescribeServiceTemplateById(ctx, templateId) - if inErr != nil { - return retryError(inErr) - } - if has { - return resource.RetryableError(fmt.Errorf("protocol template %s is still exists, retry...", templateId)) - } else { - return nil - } - }) - - return outErr -} diff --git a/tencentcloud/resource_tc_protocol_template_group.go b/tencentcloud/resource_tc_protocol_template_group.go deleted file mode 100644 index 4e25dce84b..0000000000 --- a/tencentcloud/resource_tc_protocol_template_group.go +++ /dev/null @@ -1,170 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudProtocolTemplateGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudProtocolTemplateGroupCreate, - Read: resourceTencentCloudProtocolTemplateGroupRead, - Update: resourceTencentCloudProtocolTemplateGroupUpdate, - Delete: resourceTencentCloudProtocolTemplateGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of the protocol template group.", - }, - "template_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Required: true, - Description: "Service template ID list.", - }, - }, - } -} - -func resourceTencentCloudProtocolTemplateGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template_group.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - name := d.Get("name").(string) - protocols := d.Get("template_ids").(*schema.Set).List() - - vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - var outErr, inErr error - var templateGroupId string - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - templateGroupId, inErr = vpcService.CreateServiceTemplateGroup(ctx, name, protocols) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(templateGroupId) - - return resourceTencentCloudProtocolTemplateGroupRead(d, meta) -} - -func resourceTencentCloudProtocolTemplateGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - templateId := d.Id() - var outErr, inErr error - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - templateGroup, has, outErr := vpcService.DescribeServiceTemplateGroupById(ctx, templateId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - templateGroup, has, inErr = vpcService.DescribeServiceTemplateGroupById(ctx, templateId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", templateGroup.ServiceTemplateGroupName) - _ = d.Set("template_ids", templateGroup.ServiceTemplateIdSet) - - return nil -} - -func resourceTencentCloudProtocolTemplateGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template_group.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateGroupId := d.Id() - - if d.HasChange("name") || d.HasChange("template_ids") { - var outErr, inErr error - name := d.Get("name").(string) - templadteIds := d.Get("template_ids").(*schema.Set).List() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.ModifyServiceTemplateGroup(ctx, templateGroupId, name, templadteIds) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - if outErr != nil { - return outErr - } - - } - - return resourceTencentCloudProtocolTemplateGroupRead(d, meta) -} - -func resourceTencentCloudProtocolTemplateGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_protocol_template_group.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - templateGroupId := d.Id() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - var outErr, inErr error - - outErr = vpcService.DeleteServiceTemplateGroup(ctx, templateGroupId) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = vpcService.DeleteServiceTemplateGroup(ctx, templateGroupId) - if inErr != nil { - return retryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - //check not exist - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr := vpcService.DescribeServiceTemplateGroupById(ctx, templateGroupId) - if inErr != nil { - return retryError(inErr) - } - if has { - return resource.RetryableError(fmt.Errorf("protocol template group %s is still exists, retry...", templateGroupId)) - } else { - return nil - } - }) - - return outErr -} diff --git a/tencentcloud/resource_tc_protocol_template_test.go b/tencentcloud/resource_tc_protocol_template_test.go deleted file mode 100644 index 1e6739dd6b..0000000000 --- a/tencentcloud/resource_tc_protocol_template_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudProtocolTemplate_basic_and_update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckProtocolTemplateDestroy, - Steps: []resource.TestStep{ - { - Config: testAccProtocolTemplate_basic, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "name", "test"), - resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "protocols.#", "1"), - ), - }, - { - ResourceName: "tencentcloud_protocol_template.template", - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccProtocolTemplate_basic_update_remark, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckProtocolTemplateExists("tencentcloud_protocol_template.template"), - resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "name", "test_update"), - resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "protocols.#", "2"), - ), - }, - }, - }) -} - -func testAccCheckProtocolTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_protocol_template" { - continue - } - - _, has, err := vpcService.DescribeServiceTemplateById(ctx, rs.Primary.ID) - if has { - return fmt.Errorf("protocol template still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckProtocolTemplateExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("Service template %s is not found", n) - } - - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := vpcService.DescribeServiceTemplateById(ctx, rs.Primary.ID) - if !has { - return fmt.Errorf("Service template %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccProtocolTemplate_basic = ` -resource "tencentcloud_protocol_template" "template" { - name = "test" - protocols = ["tcp:80"] -}` - -const testAccProtocolTemplate_basic_update_remark = ` -resource "tencentcloud_protocol_template" "template" { - name = "test_update" - protocols = ["udp:all", "tcp:80,90"] -}` diff --git a/tencentcloud/resource_tc_redis_param.go b/tencentcloud/resource_tc_redis_param.go deleted file mode 100644 index d2bdca3acf..0000000000 --- a/tencentcloud/resource_tc_redis_param.go +++ /dev/null @@ -1,216 +0,0 @@ -/* -Provides a resource to create a redis param - -Example Usage - -```hcl -resource "tencentcloud_redis_param" "param" { - instance_id = "crs-c1nl9rpv" - instance_params = { - "cluster-node-timeout" = "15000" - "disable-command-list" = "\"\"" - "hash-max-ziplist-entries" = "512" - "hash-max-ziplist-value" = "64" - "hz" = "10" - "lazyfree-lazy-eviction" = "yes" - "lazyfree-lazy-expire" = "yes" - "lazyfree-lazy-server-del" = "yes" - "maxmemory-policy" = "noeviction" - "notify-keyspace-events" = "\"\"" - "proxy-slowlog-log-slower-than" = "500" - "replica-lazy-flush" = "yes" - "sentineauth" = "no" - "set-max-intset-entries" = "512" - "slowlog-log-slower-than" = "10" - "timeout" = "31536000" - "zset-max-ziplist-entries" = "128" - "zset-max-ziplist-value" = "64" - } -} -``` - -Import - -redis param can be imported using the instanceId, e.g. - -``` -terraform import tencentcloud_redis_param.param crs-c1nl9rpv -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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 resourceTencentCloudRedisParam() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudRedisParamCreate, - Read: resourceTencentCloudRedisParamRead, - Update: resourceTencentCloudRedisParamUpdate, - Delete: resourceTencentCloudRedisParamDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "The ID of instance.", - }, - - "instance_params": { - Required: true, - Type: schema.TypeMap, - Description: "A list of parameters modified by the instance.", - }, - }, - } -} - -func resourceTencentCloudRedisParamCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param.create")() - defer inconsistentCheck(d, meta)() - - var ( - instanceId string - ) - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudRedisParamUpdate(d, meta) -} - -func resourceTencentCloudRedisParamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Id() - - param, err := service.DescribeRedisParamById(ctx, instanceId) - if err != nil { - return err - } - - if len(param) == 0 { - d.SetId("") - log.Printf("[WARN]%s resource `RedisParam` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - instanceParamsMap := make(map[string]interface{}) - if v, ok := d.GetOk("instance_params"); ok { - for k := range v.(map[string]interface{}) { - instanceParamsMap[k] = param[k] - } - } else { - instanceParamsMap = param - } - _ = d.Set("instance_params", instanceParamsMap) - - return nil -} - -func resourceTencentCloudRedisParamUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := redis.NewModifyInstanceParamsRequest() - response := redis.NewModifyInstanceParamsResponse() - - instanceId := d.Id() - request.InstanceId = &instanceId - - if v, ok := d.GetOk("instance_params"); ok { - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - param, err := service.DescribeRedisParamById(ctx, instanceId) - if err != nil && len(param) == 0 { - return fmt.Errorf("[ERROR] resource `RedisParam` [%s] not found, please check if it has been deleted.\n", d.Id()) - } - for k, v := range v.(map[string]interface{}) { - if value, ok := param[k]; ok { - if value != v { - instanceParam := redis.InstanceParam{} - instanceParam.Key = helper.String(k) - instanceParam.Value = helper.String(v.(string)) - request.InstanceParams = append(request.InstanceParams, &instanceParam) - } - } else { - return fmt.Errorf("[ERROR] The parameter name [%v] does not exist, please check the parameter name.\n", k) - } - } - } - - if len(request.InstanceParams) == 0 { - return resourceTencentCloudRedisParamRead(d, meta) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyInstanceParams(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update redis param failed, reason:%+v", logId, err) - return err - } - - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - - taskId := *response.Response.TaskId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { - ok, err := service.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("change param is processing")) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s redis change param fail, reason:%s\n", logId, err.Error()) - return err - } - - return resourceTencentCloudRedisParamRead(d, meta) -} - -func resourceTencentCloudRedisParamDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_route_entry_test.go b/tencentcloud/resource_tc_route_entry_test.go deleted file mode 100644 index 57b6dfad4d..0000000000 --- a/tencentcloud/resource_tc_route_entry_test.go +++ /dev/null @@ -1,171 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudVpcV2RouteEntryBasic(t *testing.T) { - t.Parallel() - var reId string - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckRouteEntryDestroy(&reId), - Steps: []resource.TestStep{ - { - Config: testAccVpcRouteEntryV2Config, - Check: resource.ComposeTestCheckFunc( - testAccCheckRouteEntryExists("tencentcloud_route_entry.foo", &reId), - resource.TestCheckResourceAttr("tencentcloud_route_entry.foo", "cidr_block", "10.0.0.0/24"), - resource.TestCheckResourceAttr("tencentcloud_route_entry.foo", "next_type", "eip"), - ), - }, - }, - }) -} - -func testAccCheckRouteEntryDestroy(id *string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - route, ok := routeIdDecode(*id) - if !ok { - return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", id) - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) - if e != nil { - return retryError(e) - } - if has == 0 { - return nil - } - if has != 1 { - e = fmt.Errorf("one routeTable id get %d routeTable infos", has) - return resource.NonRetryableError(e) - } - for _, v := range info.entryInfos { - var nextType string - var nextTypeId string - for kk, vv := range routeTypeNewMap { - if vv == v.nextType { - nextType = kk - } - } - if _, ok := routeTypeApiMap[nextType]; ok { - nextTypeId = fmt.Sprintf("%d", routeTypeApiMap[nextType]) - } - if v.destinationCidr == route["destinationCidrBlock"] && - nextTypeId == route["nextType"] && - v.nextBub == route["nextHub"] && - v.description == route["description"] { - return resource.NonRetryableError(fmt.Errorf("Route entry still exists: %s", *id)) - } - } - - return nil - }) - return err - } -} - -func testAccCheckRouteEntryExists(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 route entry ID is set") - } - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - route, ok := routeIdDecode(rs.Primary.ID) - if !ok { - return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", rs.Primary.ID) - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) - if e != nil { - return retryError(e) - } - if has == 0 { - return resource.NonRetryableError(fmt.Errorf("Route entry not found: %s", rs.Primary.ID)) - } - if has != 1 { - e = fmt.Errorf("one routeTable id get %d routeTable infos", has) - return resource.NonRetryableError(e) - } - for _, v := range info.entryInfos { - var nextType string - var nextTypeId string - for kk, vv := range routeTypeNewMap { - if vv == v.nextType { - nextType = kk - } - } - if _, ok := routeTypeApiMap[nextType]; ok { - nextTypeId = fmt.Sprintf("%d", routeTypeApiMap[nextType]) - } - if v.destinationCidr == route["destinationCidrBlock"] && - nextTypeId == route["nextType"] && - v.nextBub == route["nextHub"] && - v.description == route["description"] { - return nil - } - } - - return resource.NonRetryableError(fmt.Errorf("Route entry not found: %s", rs.Primary.ID)) - }) - if err != nil { - return err - } - - *id = rs.Primary.ID - return nil - } -} - -const testAccVpcRouteEntryV2Config = defaultVpcVariable + ` -resource "tencentcloud_vpc" "foo" { - name = var.instance_name - cidr_block = var.vpc_cidr -} - -resource "tencentcloud_route_table" "foo" { - name = var.instance_name - vpc_id = tencentcloud_vpc.foo.id -} - -resource "tencentcloud_subnet" "foo" { - name = var.instance_name - vpc_id = tencentcloud_vpc.foo.id - availability_zone = var.availability_zone - cidr_block = var.subnet_cidr - is_multicast = false - route_table_id = tencentcloud_route_table.foo.id -} - -resource "tencentcloud_route_entry" "foo" { - vpc_id = tencentcloud_vpc.foo.id - route_table_id = tencentcloud_route_table.foo.id - cidr_block = "10.0.0.0/24" - next_type = "eip" - next_hub = "0" -} -` diff --git a/tencentcloud/resource_tc_route_table.go b/tencentcloud/resource_tc_route_table.go deleted file mode 100644 index b0330d6b26..0000000000 --- a/tencentcloud/resource_tc_route_table.go +++ /dev/null @@ -1,245 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudVpcRouteTable() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcRouteTableCreate, - Read: resourceTencentCloudVpcRouteTableRead, - Update: resourceTencentCloudVpcRouteTableUpdate, - Delete: resourceTencentCloudVpcRouteTableDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpc_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of VPC to which the route table should be associated.", - }, - "name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), - Description: "The name of routing table.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "The tags of routing table.", - }, - - // Computed values - "subnet_ids": { - Type: schema.TypeList, - Computed: true, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "ID list of the subnets associated with this route table.", - }, - "route_entry_ids": { - Type: schema.TypeList, - Computed: true, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "ID list of the routing entries.", - }, - "is_default": { - Type: schema.TypeBool, - Computed: true, - Description: "Indicates whether it is the default routing table.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Creation time of the routing table.", - }, - }, - } -} - -func resourceTencentCloudVpcRouteTableCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - vpcId string - name string - tags map[string]string - ) - if temp, ok := d.GetOk("vpc_id"); ok { - vpcId = temp.(string) - if len(vpcId) < 1 { - return fmt.Errorf("vpc_id should be not empty string") - } - } - if temp, ok := d.GetOk("name"); ok { - name = temp.(string) - } - - if temp := helper.GetTags(d, "tags"); len(temp) > 0 { - tags = temp - } - - routeTableId, err := vpcService.CreateRouteTable(ctx, name, vpcId, tags) - if err != nil { - return err - } - d.SetId(routeTableId) - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:rtb/%s", region, routeTableId) - - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudVpcRouteTableRead(d, meta) -} - -func resourceTencentCloudVpcRouteTableRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - - var ( - info VpcRouteTableBasicInfo - has int - e error - ) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e = service.DescribeRouteTable(ctx, id) - if e != nil { - return retryError(e) - } - // deleted - if has == 0 { - d.SetId("") - return nil - } - if has != 1 { - errRet := fmt.Errorf("one route_table_id read get %d route_table info", has) - log.Printf("[CRITAL]%s %s", logId, errRet.Error()) - return resource.NonRetryableError(errRet) - } - return nil - }) - if err != nil { - return err - } - if has == 0 { - return nil - } - routeEntryIds := make([]string, 0, len(info.entryInfos)) - for _, v := range info.entryInfos { - tfRouteEntryId := fmt.Sprintf("%d.%s", v.routeEntryId, id) - routeEntryIds = append(routeEntryIds, tfRouteEntryId) - } - - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - region := meta.(*TencentCloudClient).apiV3Conn.Region - tags, err := tagService.DescribeResourceTags(ctx, "vpc", "rtb", region, id) - if err != nil { - return err - } - - _ = d.Set("vpc_id", info.vpcId) - _ = d.Set("name", info.name) - _ = d.Set("subnet_ids", info.subnetIds) - _ = d.Set("route_entry_ids", routeEntryIds) - _ = d.Set("is_default", info.isDefault) - _ = d.Set("create_time", info.createTime) - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudVpcRouteTableUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - d.Partial(true) - - if d.HasChange("name") { - name := d.Get("name").(string) - err := service.ModifyRouteTableAttribute(ctx, id, name) - if err != nil { - return err - } - - } - - if d.HasChange("tags") { - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:rtb/%s", region, id) - - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - - } - - d.Partial(false) - - return resourceTencentCloudVpcRouteTableRead(d, meta) -} - -func resourceTencentCloudVpcRouteTableDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - if err := service.DeleteRouteTable(ctx, d.Id()); err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == VPCNotFound { - return nil - } - } - return resource.RetryableError(err) - } - return nil - }) - - return err -} diff --git a/tencentcloud/resource_tc_route_table_association.go b/tencentcloud/resource_tc_route_table_association.go deleted file mode 100644 index 1e5c684581..0000000000 --- a/tencentcloud/resource_tc_route_table_association.go +++ /dev/null @@ -1,209 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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 resourceTencentCloudRouteTableAssociation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudRouteTableAssociationCreate, - Read: resourceTencentCloudRouteTableAssociationRead, - Update: resourceTencentCloudRouteTableAssociationUpdate, - Delete: resourceTencentCloudRouteTableAssociationDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "subnet_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Subnet instance ID, such as `subnet-3x5lf5q0`. This can be queried using the DescribeSubnets API.", - }, - "route_table_id": { - Required: true, - Type: schema.TypeString, - Description: "The route table instance ID, such as `rtb-azd4dt1c`.", - }, - }, - } -} - -func resourceTencentCloudRouteTableAssociationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_association.create")() - defer inconsistentCheck(d, meta)() - - var subnetId string - if v, ok := d.GetOk("subnet_id"); ok { - subnetId = v.(string) - } - - d.SetId(subnetId) - - return resourceTencentCloudRouteTableAssociationUpdate(d, meta) -} - -func resourceTencentCloudRouteTableAssociationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_association.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - subnetId := d.Id() - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - info VpcSubnetBasicInfo - has int - e error - ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e = service.DescribeSubnet(ctx, subnetId, nil, "", "") - if e != nil { - return retryError(e) - } - - // deleted - if has == 0 { - d.SetId("") - return nil - } - - if has != 1 { - errRet := fmt.Errorf("one subnet_id read get %d subnet info", has) - log.Printf("[CRITAL]%s %s", logId, errRet.Error()) - return resource.NonRetryableError(errRet) - } - return nil - }) - if err != nil { - return err - } - if has == 0 { - return nil - } - - _ = d.Set("subnet_id", subnetId) - if info.routeTableId != "" { - _ = d.Set("route_table_id", info.routeTableId) - } - - return nil -} - -func resourceTencentCloudRouteTableAssociationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_association.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := vpc.NewReplaceRouteTableAssociationRequest() - - subnetId := d.Id() - - request.SubnetId = &subnetId - request.RouteTableId = helper.String(d.Get("route_table_id").(string)) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ReplaceRouteTableAssociation(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 update vpc routeTable failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudRouteTableAssociationRead(d, meta) -} - -func resourceTencentCloudRouteTableAssociationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_association.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - subnetId := d.Id() - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - info VpcSubnetBasicInfo - has int - e error - ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e = service.DescribeSubnet(ctx, subnetId, nil, "", "") - if e != nil { - return retryError(e) - } - - // deleted - if has == 0 { - d.SetId("") - return nil - } - - if has != 1 { - errRet := fmt.Errorf("one subnet_id read get %d subnet info", has) - log.Printf("[CRITAL]%s %s", logId, errRet.Error()) - return resource.NonRetryableError(errRet) - } - return nil - }) - if err != nil { - return err - } - if has == 0 { - return fmt.Errorf("Unable to find the vpc corresponding to the current subnet: %s", subnetId) - } - - routeTables, err := service.DescribeRouteTables(ctx, "", "", info.vpcId, nil, helper.Bool(true), "") - - if err != nil { - log.Printf("[WARN] Describe default Route Table error: %s", err.Error()) - } - - if len(routeTables) < 1 { - return fmt.Errorf("Unable to find the default routetable corresponding to the current vpc: %s", info.vpcId) - } - - defaultRoutetableId := routeTables[0].routeTableId - - request := vpc.NewReplaceRouteTableAssociationRequest() - - request.SubnetId = &subnetId - request.RouteTableId = helper.String(defaultRoutetableId) - - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ReplaceRouteTableAssociation(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 update vpc routeTable failed, reason:%+v", logId, err) - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_scf_function_version.go b/tencentcloud/resource_tc_scf_function_version.go deleted file mode 100644 index 764ab24a82..0000000000 --- a/tencentcloud/resource_tc_scf_function_version.go +++ /dev/null @@ -1,179 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudScfFunctionVersion() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudScfFunctionVersionCreate, - Read: resourceTencentCloudScfFunctionVersionRead, - Delete: resourceTencentCloudScfFunctionVersionDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "function_name": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "Name of the released function.", - }, - - "description": { - Optional: true, - Type: schema.TypeString, - ForceNew: true, - Description: "Function description.", - }, - - "namespace": { - Optional: true, - Type: schema.TypeString, - ForceNew: true, - Description: "Function namespace.", - }, - - "function_version": { - Computed: true, - Type: schema.TypeString, - Description: "Version of the released function.", - }, - }, - } -} - -func resourceTencentCloudScfFunctionVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_version.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = scf.NewPublishVersionRequest() - response = scf.NewPublishVersionResponse() - functionName string - namespace string - functionVersion string - ) - if v, ok := d.GetOk("function_name"); ok { - functionName = v.(string) - request.FunctionName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOk("namespace"); ok { - namespace = v.(string) - request.Namespace = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().PublishVersion(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create scf FunctionVersion failed, reason:%+v", logId, err) - return err - } - - functionVersion = *response.Response.FunctionVersion - d.SetId(functionName + FILED_SP + namespace + FILED_SP + functionVersion) - - // wait ready - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn - err = waitScfFunctionReady(ctx, functionName, namespace, client.UseScfClient()) - if err != nil { - return err - } - - return resourceTencentCloudScfFunctionVersionRead(d, meta) -} - -func resourceTencentCloudScfFunctionVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_version.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - functionName := idSplit[0] - namespace := idSplit[1] - functionVersion := idSplit[2] - - version, err := service.DescribeScfFunctionVersionById(ctx, functionName, namespace, functionVersion) - if err != nil { - return err - } - - if version == nil { - d.SetId("") - log.Printf("[WARN]%s resource `ScfFunctionVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if version.Response.FunctionName != nil { - _ = d.Set("function_name", version.Response.FunctionName) - } - - if version.Response.Description != nil { - _ = d.Set("description", version.Response.Description) - } - - if version.Response.Namespace != nil { - _ = d.Set("namespace", version.Response.Namespace) - } - - if version.Response.FunctionVersion != nil { - _ = d.Set("function_version", version.Response.FunctionVersion) - } - - return nil -} - -func resourceTencentCloudScfFunctionVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_version.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - functionName := idSplit[0] - namespace := idSplit[1] - functionVersion := idSplit[2] - - if err := service.DeleteScfFunctionVersionById(ctx, functionName, namespace, functionVersion); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_scf_namespace.go b/tencentcloud/resource_tc_scf_namespace.go deleted file mode 100644 index bbeedc845d..0000000000 --- a/tencentcloud/resource_tc_scf_namespace.go +++ /dev/null @@ -1,128 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudScfNamespace() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudScfNamespaceCreate, - Read: resourceTencentCloudScfNamespaceRead, - Update: resourceTencentCloudScfNamespaceUpdate, - Delete: resourceTencentCloudScfNamespaceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "namespace": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the SCF namespace.", - }, - "description": { - Type: schema.TypeString, - Optional: true, - Default: "", - Description: "Description of the SCF namespace.", - }, - - // computed - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "SCF namespace creation time.", - }, - "modify_time": { - Type: schema.TypeString, - Computed: true, - Description: "SCF namespace last modified time.", - }, - "type": { - Type: schema.TypeString, - Computed: true, - Description: "SCF namespace type.", - }, - }, - } -} - -func resourceTencentCloudScfNamespaceCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_namespace.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} - - namespace := d.Get("namespace").(string) - desc := d.Get("description").(string) - - if err := service.CreateNamespace(ctx, namespace, desc); err != nil { - log.Printf("[CRITAL]%s create namespace failed: %+v", logId, err) - return err - } - - d.SetId(namespace) - - return resourceTencentCloudScfNamespaceRead(d, m) -} - -func resourceTencentCloudScfNamespaceRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_namespace.read")() - defer inconsistentCheck(d, m)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} - - id := d.Id() - - namespace, err := service.DescribeNamespace(ctx, id) - if err != nil { - log.Printf("[CRITAL]%s read namespace failed: %+v", logId, err) - return err - } - - if namespace == nil { - d.SetId("") - return nil - } - - _ = d.Set("namespace", namespace.Name) - _ = d.Set("description", namespace.Description) - _ = d.Set("create_time", namespace.AddTime) - _ = d.Set("modify_time", namespace.ModTime) - _ = d.Set("type", namespace.Type) - - return nil -} - -func resourceTencentCloudScfNamespaceUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_namespace.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} - - if err := service.ModifyNamespace(ctx, d.Id(), d.Get("description").(string)); err != nil { - log.Printf("[CRITAL]%s update namespace description failed: %+v", logId, err) - return err - } - - return resourceTencentCloudScfNamespaceRead(d, m) -} - -func resourceTencentCloudScfNamespaceDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_namespace.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} - - return service.DeleteNamespace(ctx, d.Id()) -} diff --git a/tencentcloud/resource_tc_scf_reserved_concurrency_config.go b/tencentcloud/resource_tc_scf_reserved_concurrency_config.go deleted file mode 100644 index bcb8e1289d..0000000000 --- a/tencentcloud/resource_tc_scf_reserved_concurrency_config.go +++ /dev/null @@ -1,151 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudScfReservedConcurrencyConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudScfReservedConcurrencyConfigCreate, - Read: resourceTencentCloudScfReservedConcurrencyConfigRead, - Delete: resourceTencentCloudScfReservedConcurrencyConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "function_name": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Specifies the function of which you want to configure the reserved quota.", - }, - - "reserved_concurrency_mem": { - Required: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Reserved memory quota of the function. Note: the upper limit for the total reserved quota of the function is the user's total concurrency memory minus 12800.", - }, - - "namespace": { - Optional: true, - ForceNew: true, - Default: "default", - Type: schema.TypeString, - Description: "Function namespace. Default value: default.", - }, - }, - } -} - -func resourceTencentCloudScfReservedConcurrencyConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_reserved_concurrency_config.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = scf.NewPutReservedConcurrencyConfigRequest() - namespace string - functionName string - ) - if v, ok := d.GetOk("function_name"); ok { - functionName = v.(string) - request.FunctionName = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("reserved_concurrency_mem"); ok { - request.ReservedConcurrencyMem = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("namespace"); ok { - namespace = v.(string) - request.Namespace = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().PutReservedConcurrencyConfig(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 scf ReservedConcurrencyConfig failed, reason:%+v", logId, err) - return err - } - - d.SetId(namespace + FILED_SP + functionName) - - return resourceTencentCloudScfReservedConcurrencyConfigRead(d, meta) -} - -func resourceTencentCloudScfReservedConcurrencyConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_reserved_concurrency_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - namespace := idSplit[0] - functionName := idSplit[1] - - reservedConcurrencyConfig, err := service.DescribeScfReservedConcurrencyConfigById(ctx, namespace, functionName) - if err != nil { - return err - } - - if reservedConcurrencyConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `ScfReservedConcurrencyConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("namespace", namespace) - _ = d.Set("function_name", functionName) - - if reservedConcurrencyConfig.Response.ReservedMem != nil { - _ = d.Set("reserved_concurrency_mem", reservedConcurrencyConfig.Response.ReservedMem) - } - - return nil -} - -func resourceTencentCloudScfReservedConcurrencyConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_reserved_concurrency_config.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - namespace := idSplit[0] - functionName := idSplit[1] - - if err := service.DeleteScfReservedConcurrencyConfigById(ctx, namespace, functionName); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_security_group.go b/tencentcloud/resource_tc_security_group.go deleted file mode 100644 index 217ed1c46e..0000000000 --- a/tencentcloud/resource_tc_security_group.go +++ /dev/null @@ -1,253 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - - "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" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSecurityGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSecurityGroupCreate, - Read: resourceTencentCloudSecurityGroupRead, - Update: resourceTencentCloudSecurityGroupUpdate, - Delete: resourceTencentCloudSecurityGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), - Description: "Name of the security group to be queried.", - }, - "description": { - Type: schema.TypeString, - Optional: true, - Default: "", - ValidateFunc: validateStringLengthInRange(1, 100), - Description: "Description of the security group.", - }, - "project_id": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - ForceNew: true, - Description: "Project ID of the security group.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tags of the security group.", - }, - }, - } -} - -func resourceTencentCloudSecurityGroupCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - client := m.(*TencentCloudClient).apiV3Conn - vpcService := VpcService{client: client} - tagService := TagService{client: client} - region := client.Region - - name := d.Get("name").(string) - desc := d.Get("description").(string) - - var ( - projectId *int - tags map[string]string - ) - if projectIdInterface, exist := d.GetOk("project_id"); exist { - projectId = common.IntPtr(projectIdInterface.(int)) - } - - if temp := helper.GetTags(d, "tags"); len(temp) > 0 { - tags = temp - } - - id, err := vpcService.CreateSecurityGroup(ctx, name, desc, projectId, tags) - if err != nil { - return err - } - - d.SetId(id) - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("cvm", "sg", region, id) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudSecurityGroupRead(d, m) -} - -func resourceTencentCloudSecurityGroupRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - client := m.(*TencentCloudClient).apiV3Conn - vpcService := VpcService{client: client} - tagService := TagService{client: client} - region := client.Region - - id := d.Id() - - securityGroup, err := vpcService.DescribeSecurityGroup(ctx, id) - if err != nil { - return err - } - - if securityGroup == nil { - d.SetId("") - return nil - } - - _ = d.Set("name", *securityGroup.SecurityGroupName) - _ = d.Set("description", *securityGroup.SecurityGroupDesc) - - projectId, err := strconv.Atoi(*securityGroup.ProjectId) - if err != nil { - return fmt.Errorf("securtiy group %s project id invalid: %v", *securityGroup.SecurityGroupId, err) - } - _ = d.Set("project_id", projectId) - - tags, err := tagService.DescribeResourceTags(ctx, "cvm", "sg", region, id) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudSecurityGroupUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - client := m.(*TencentCloudClient).apiV3Conn - vpcService := VpcService{client: client} - tagService := TagService{client: client} - region := client.Region - - id := d.Id() - - d.Partial(true) - - var ( - newName *string - newDesc *string - attrUpdate []string - ) - - if d.HasChange("name") { - newName = helper.String(d.Get("name").(string)) - attrUpdate = append(attrUpdate, "name") - } - - if d.HasChange("description") { - newDesc = helper.String(d.Get("description").(string)) - attrUpdate = append(attrUpdate, "description") - } - - if len(attrUpdate) > 0 { - if err := vpcService.ModifySecurityGroup(ctx, id, newName, newDesc); err != nil { - return err - } - - } - - if d.HasChange("tags") { - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - - resourceName := BuildTagResourceName("cvm", "sg", region, id) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - - } - - d.Partial(false) - - return resourceTencentCloudSecurityGroupRead(d, m) -} - -func resourceTencentCloudSecurityGroupDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - - vpcService := VpcService{client: m.(*TencentCloudClient).apiV3Conn} - - // wait until all instances unbind this security group - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - associateSet, err := vpcService.DescribeSecurityGroupsAssociate(ctx, []string{id}) - if err != nil { - return resource.RetryableError(err) - } - - if len(associateSet) == 0 { - return nil - } - - statistics := associateSet[0] - if *statistics.CVM > 0 { - return resource.RetryableError(fmt.Errorf("security group %s still bind %d CVM instances", id, *statistics.CVM)) - } - - if *statistics.CLB > 0 { - return resource.RetryableError(fmt.Errorf("security group %s still bind %d CLB instances", id, *statistics.CLB)) - } - - if *statistics.CDB > 0 { - return resource.RetryableError(fmt.Errorf("security group %s still bind %d CDB instances", id, *statistics.CDB)) - } - - if *statistics.ENI > 0 { - return resource.RetryableError(fmt.Errorf("security group %s still bind %d ENI instances", id, *statistics.ENI)) - } - - if *statistics.SG > 0 { - return resource.RetryableError(fmt.Errorf("security group %s still bind %d SG instances", id, *statistics.SG)) - } - - return nil - }); err != nil { - return err - } - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - e := vpcService.DeleteSecurityGroup(ctx, id) - if e != nil { - return resource.RetryableError(fmt.Errorf("security group delete failed: %v", e)) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s security group delete failed: %v", logId, err) - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_ses_black_list_delete.go b/tencentcloud/resource_tc_ses_black_list_delete.go deleted file mode 100644 index 43f837922d..0000000000 --- a/tencentcloud/resource_tc_ses_black_list_delete.go +++ /dev/null @@ -1,77 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSesBlackListDelete() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSesBlackListDeleteCreate, - Read: resourceTencentCloudSesBlackListDeleteRead, - Delete: resourceTencentCloudSesBlackListDeleteDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "email_address": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Email addresses to be unblocklisted.", - }, - }, - } -} - -func resourceTencentCloudSesBlackListDeleteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_black_list_delete.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ses.NewDeleteBlackListRequest() - emailAddress string - ) - if v, ok := d.GetOk("email_address"); ok { - emailAddress = v.(string) - request.EmailAddressList = append(request.EmailAddressList, helper.String(v.(string))) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().DeleteBlackList(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 ses BlackList failed, reason:%+v", logId, err) - return err - } - - d.SetId(emailAddress) - - return resourceTencentCloudSesBlackListDeleteRead(d, meta) -} - -func resourceTencentCloudSesBlackListDeleteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_black_list_delete.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSesBlackListDeleteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_black_list_delete.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ses_domain.go b/tencentcloud/resource_tc_ses_domain.go deleted file mode 100644 index 2865c06fdf..0000000000 --- a/tencentcloud/resource_tc_ses_domain.go +++ /dev/null @@ -1,160 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSesDomain() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudSesDomainRead, - Create: resourceTencentCloudSesDomainCreate, - Delete: resourceTencentCloudSesDomainDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "email_identity": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Your sender domain. You are advised to use a third-level domain, for example, mail.qcloud.com.", - }, - - "attributes": { - Computed: true, - Type: schema.TypeList, - Description: "DNS configuration details.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "type": { - Type: schema.TypeString, - Computed: true, - Description: "Record Type CNAME | A | TXT | MX.", - }, - "send_domain": { - Type: schema.TypeString, - Computed: true, - Description: "Domain name.", - }, - "expected_value": { - Type: schema.TypeString, - Computed: true, - Description: "Values that need to be configured.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudSesDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_domain.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ses.NewCreateEmailIdentityRequest() - emailIdentity string - ) - - if v, ok := d.GetOk("email_identity"); ok { - emailIdentity = v.(string) - request.EmailIdentity = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateEmailIdentity(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 ses domain failed, reason:%+v", logId, err) - return err - } - - d.SetId(emailIdentity) - return resourceTencentCloudSesDomainRead(d, meta) -} - -func resourceTencentCloudSesDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_domain.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} - - emailIdentity := d.Id() - - attributes, err := service.DescribeSesDomain(ctx, emailIdentity) - - if err != nil { - return err - } - - if attributes == nil { - d.SetId("") - return fmt.Errorf("resource `domain` %s does not exist", emailIdentity) - } - - _ = d.Set("email_identity", emailIdentity) - - if attributes != nil { - attributesList := make([]interface{}, 0, len(attributes)) - for _, v := range attributes { - attributesMap := map[string]interface{}{} - - if v.Type != nil { - attributesMap["type"] = v.Type - } - - if v.SendDomain != nil { - attributesMap["send_domain"] = v.SendDomain - } - - if v.ExpectedValue != nil { - attributesMap["expected_value"] = v.ExpectedValue - } - - attributesList = append(attributesList, attributesMap) - } - - _ = d.Set("attributes", attributesList) - } - - return nil -} - -func resourceTencentCloudSesDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_domain.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} - - emailIdentity := d.Id() - - if err := service.DeleteSesDomainById(ctx, emailIdentity); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_ses_email_address.go b/tencentcloud/resource_tc_ses_email_address.go deleted file mode 100644 index 11543a5ea4..0000000000 --- a/tencentcloud/resource_tc_ses_email_address.go +++ /dev/null @@ -1,129 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSesEmailAddress() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudSesEmailAddressRead, - Create: resourceTencentCloudSesEmailAddressCreate, - Delete: resourceTencentCloudSesEmailAddressDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "email_address": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Your sender address. (You can create up to 10 sender addresses for each domain.).", - }, - - "email_sender_name": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Description: "Sender name.", - }, - }, - } -} - -func resourceTencentCloudSesEmailAddressCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_email_address.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ses.NewCreateEmailAddressRequest() - emailAddress string - ) - - if v, ok := d.GetOk("email_address"); ok { - emailAddress = v.(string) - request.EmailAddress = helper.String(v.(string)) - } - - if v, ok := d.GetOk("email_sender_name"); ok { - request.EmailSenderName = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateEmailAddress(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 ses email_address failed, reason:%+v", logId, err) - return err - } - - d.SetId(emailAddress) - return resourceTencentCloudSesEmailAddressRead(d, meta) -} - -func resourceTencentCloudSesEmailAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_email_address.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} - - emailAddress := d.Id() - - emailSender, err := service.DescribeSesEmailAddress(ctx, emailAddress) - - if err != nil { - return err - } - - if emailSender == nil { - d.SetId("") - return fmt.Errorf("resource `email_address` %s does not exist", emailAddress) - } - - if emailSender.EmailAddress != nil { - _ = d.Set("email_address", emailSender.EmailAddress) - } - - if emailSender.EmailSenderName != nil { - _ = d.Set("email_sender_name", emailSender.EmailSenderName) - } - - return nil -} - -func resourceTencentCloudSesEmailAddressDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_email_address.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} - - emailAddressId := d.Id() - - if err := service.DeleteSesEmail_addressById(ctx, emailAddressId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_ses_receiver_test.go b/tencentcloud/resource_tc_ses_receiver_test.go deleted file mode 100644 index 9cb1c2b145..0000000000 --- a/tencentcloud/resource_tc_ses_receiver_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -test.run TestAccTencentCloudSesReceiverResource_basic -v -func TestAccTencentCloudSesReceiverResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckSesReceiverDestroy, - Steps: []resource.TestStep{ - { - Config: testAccSesReceiver, - Check: resource.ComposeTestCheckFunc( - testAccCheckSesReceiverExists("tencentcloud_ses_receiver.receiver"), - resource.TestCheckResourceAttrSet("tencentcloud_ses_receiver.receiver", "id"), - resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "receivers_name", "terraform_test"), - resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "desc", "description"), - resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.#", "2"), - resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.0.email", "abc@abc.com"), - resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.0.template_data", "{\"name\":\"xxx\",\"age\":\"xx\"}"), - ), - }, - { - ResourceName: "tencentcloud_ses_receiver.receiver", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckSesReceiverDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SesService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_ses_receiver" { - continue - } - - res, err := service.DescribeSesReceiverById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("ses receiver %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckSesReceiverExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := SesService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeSesReceiverById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("ses receiver %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccSesReceiver = ` - -resource "tencentcloud_ses_receiver" "receiver" { - receivers_name = "terraform_test" - desc = "description" - - data { - email = "abc@abc.com" - template_data = "{\"name\":\"xxx\",\"age\":\"xx\"}" - } - - data { - email = "abcd@abcd.com" - template_data = "{\"name\":\"xxx\",\"age\":\"xx\"}" - } -} - -` diff --git a/tencentcloud/resource_tc_ses_verify_domain.go b/tencentcloud/resource_tc_ses_verify_domain.go deleted file mode 100644 index 527fa2504f..0000000000 --- a/tencentcloud/resource_tc_ses_verify_domain.go +++ /dev/null @@ -1,84 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSesVerifyDomain() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSesVerifyDomainCreate, - Read: resourceTencentCloudSesVerifyDomainRead, - Delete: resourceTencentCloudSesVerifyDomainDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "email_identity": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Domain name requested for verification.", - }, - }, - } -} - -func resourceTencentCloudSesVerifyDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_verify_domain.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var ( - request = ses.NewUpdateEmailIdentityRequest() - emailIdentity string - ) - if v, ok := d.GetOk("email_identity"); ok { - emailIdentity = v.(string) - request.EmailIdentity = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().UpdateEmailIdentity(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 ses verifyDomain failed, reason:%+v", logId, err) - return err - } - - d.SetId(emailIdentity) - - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} - if err := service.CheckEmailIdentityById(ctx, emailIdentity); err != nil { - return err - } - - return resourceTencentCloudSesVerifyDomainRead(d, meta) -} - -func resourceTencentCloudSesVerifyDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_verify_domain.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSesVerifyDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_verify_domain.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sms_template.go b/tencentcloud/resource_tc_sms_template.go deleted file mode 100644 index 8e3ecbb0f9..0000000000 --- a/tencentcloud/resource_tc_sms_template.go +++ /dev/null @@ -1,232 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSmsTemplate() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudSmsTemplateRead, - Create: resourceTencentCloudSmsTemplateCreate, - Update: resourceTencentCloudSmsTemplateUpdate, - Delete: resourceTencentCloudSmsTemplateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "template_name": { - Type: schema.TypeString, - Required: true, - Description: "Message Template name, which must be unique.", - }, - - "template_content": { - Type: schema.TypeString, - Required: true, - Description: "Message Template Content.", - }, - - "international": { - Type: schema.TypeInt, - Required: true, - Description: "Whether it is Global SMS: 0: Mainland China SMS; 1: Global SMS.", - }, - - "sms_type": { - Type: schema.TypeInt, - Required: true, - Description: "SMS type. 0: regular SMS, 1: marketing SMS.", - }, - - "remark": { - Type: schema.TypeString, - Required: true, - Description: "Template remarks, such as reason for application and use case.", - }, - }, - } -} - -func resourceTencentCloudSmsTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_template.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = sms.NewAddSmsTemplateRequest() - response *sms.AddSmsTemplateResponse - templateId string - international int - ) - - if v, ok := d.GetOk("template_name"); ok { - request.TemplateName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("template_content"); ok { - request.TemplateContent = helper.String(v.(string)) - } - - if v, _ := d.GetOk("international"); v != nil { - international = v.(int) - request.International = helper.IntUint64(international) - } - - if v, _ := d.GetOk("sms_type"); v != nil { - request.SmsType = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().AddSmsTemplate(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create sms template failed, reason:%+v", logId, err) - return err - } - - templateId = *response.Response.AddTemplateStatus.TemplateId - - d.SetId(templateId + FILED_SP + strconv.Itoa(international)) - return resourceTencentCloudSmsTemplateRead(d, meta) -} - -func resourceTencentCloudSmsTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_template.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SmsService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - templateId := idSplit[0] - international := idSplit[1] - - template, err := service.DescribeSmsTemplate(ctx, templateId, international) - - if err != nil { - return err - } - - if template == nil { - d.SetId("") - return fmt.Errorf("resource `template` %s does not exist", templateId) - } - - if template.TemplateName != nil { - _ = d.Set("template_name", template.TemplateName) - } - - if template.TemplateContent != nil { - _ = d.Set("template_content", template.TemplateContent) - } - - if template.International != nil { - _ = d.Set("international", template.International) - } - - return nil -} - -func resourceTencentCloudSmsTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_template.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - request := sms.NewModifySmsTemplateRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - templateId := idSplit[0] - - request.TemplateId = helper.Uint64(helper.StrToUInt64(templateId)) - - if v, ok := d.GetOk("template_name"); ok { - request.TemplateName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("template_content"); ok { - request.TemplateContent = helper.String(v.(string)) - } - - if v, _ := d.GetOk("international"); v != nil { - request.International = helper.IntUint64(v.(int)) - } - - if v, _ := d.GetOk("sms_type"); v != nil { - request.SmsType = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().ModifySmsTemplate(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 sms template failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSmsTemplateRead(d, meta) -} - -func resourceTencentCloudSmsTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_template.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := SmsService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - templateId := idSplit[0] - - if err := service.DeleteSmsTemplateById(ctx, templateId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_account.go b/tencentcloud/resource_tc_sqlserver_account.go deleted file mode 100644 index c54e957652..0000000000 --- a/tencentcloud/resource_tc_sqlserver_account.go +++ /dev/null @@ -1,278 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudSqlserverAccount() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverAccountCreate, - Read: resourceTencentCloudSqlserverAccountRead, - Update: resourceTencentCloudSqlserverAccountUpdate, - Delete: resourceTencentCLoudSqlserverAccountDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - Description: "Name of the SQL Server account.", - }, - "password": { - Type: schema.TypeString, - Required: true, - Sensitive: true, - Description: "Password of the SQL Server account.", - }, - "is_admin": { - Type: schema.TypeBool, - Optional: true, - Default: false, - Description: "Indicate that the account is root account or not.", - }, - "remark": { - Type: schema.TypeString, - Optional: true, - Default: "", - Description: "Remark of the SQL Server account.", - }, - "instance_id": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Instance ID that the account belongs to.", - }, - //computed - "status": { - Type: schema.TypeInt, - Computed: true, - Description: "Status of the SQL Server account. Valid values: 1, 2, 3, 4. 1 for creating, 2 for running, 3 for modifying, 4 for resetting password, -1 for deleting.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time of the SQL Server account.", - }, - "update_time": { - Type: schema.TypeString, - Computed: true, - Description: "Last updated time of the SQL Server account.", - }, - }, - } -} - -func resourceTencentCloudSqlserverAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - name = d.Get("name").(string) - password = d.Get("password").(string) - remark = d.Get("remark").(string) - isAdmin = d.Get("is_admin").(bool) - instanceId = d.Get("instance_id").(string) - ) - - var outErr, inErr error - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.CreateSqlserverAccount(ctx, instanceId, name, password, remark, isAdmin) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(instanceId + FILED_SP + name) - - return resourceTencentCloudSqlserverAccountRead(d, meta) -} - -func resourceTencentCloudSqlserverAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 2 { - return fmt.Errorf("invalid SQL Server account id %s", id) - } - instanceId := idStrs[0] - name := idStrs[1] - d.Partial(true) - - var outErr, inErr error - - //update is_admin - if d.HasChange("is_admin") { - return fmt.Errorf("is_admin is not allowed to change") - } - - //update password - if d.HasChange("password") { - password := d.Get("password").(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.ResetSqlserverAccountPassword(ctx, instanceId, name, password) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - } - - //update remark - if d.HasChange("remark") { - remark := d.Get("remark").(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.ModifySqlserverAccountRemark(ctx, instanceId, name, remark) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - } - - d.Partial(false) - - return resourceTencentCloudSqlserverAccountRead(d, meta) -} - -func resourceTencentCloudSqlserverAccountRead(d *schema.ResourceData, meta interface{}) error { - - defer logElapsed("resource.tencentcloud_sqlserver_account.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 2 { - return fmt.Errorf("invalid SQL Server account id %s", id) - } - instanceId := idStrs[0] - name := idStrs[1] - - var outErr, inErr error - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - account, has, outErr := sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - account, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("instance_id", instanceId) - _ = d.Set("name", account.Name) - if *account.Remark == "--" { - _ = d.Set("remark", "") - } else { - _ = d.Set("remark", account.Remark) - } - _ = d.Set("create_time", account.CreateTime) - _ = d.Set("update_time", account.UpdateTime) - _ = d.Set("status", account.Status) - - return nil -} - -func resourceTencentCLoudSqlserverAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 2 { - return fmt.Errorf("invalid SQL Server account id %s", id) - } - instanceId := idStrs[0] - name := idStrs[1] - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - var outErr, inErr error - var has bool - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - if !has { - return nil - } - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.DeleteSqlserverAccount(ctx, instanceId, name) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) - if inErr != nil { - return retryError(inErr) - } - if has { - inErr = fmt.Errorf("delete SQL Server account %s fail, account still exists from SDK DescribeSqlserverAccountById", id) - return resource.RetryableError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_account_db_attachment.go b/tencentcloud/resource_tc_sqlserver_account_db_attachment.go deleted file mode 100644 index 4c88757b88..0000000000 --- a/tencentcloud/resource_tc_sqlserver_account_db_attachment.go +++ /dev/null @@ -1,257 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudSqlserverAccountDBAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverAccountDBAttachmentCreate, - Read: resourceTencentCloudSqlserverAccountDBAttachmentRead, - Update: resourceTencentCloudSqlserverAccountDBAttachmentUpdate, - Delete: resourceTencentCLoudSqlserverAccountDBAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "SQL Server instance ID that the account belongs to.", - }, - "account_name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "SQL Server account name.", - }, - "db_name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "SQL Server DB name.", - }, - "privilege": { - Type: schema.TypeString, - Required: true, - Description: "Privilege of the account on DB. Valid values: `ReadOnly`, `ReadWrite`.", - }, - }, - } -} - -func resourceTencentCloudSqlserverAccountDBAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account_db_attachment.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - accountName = d.Get("account_name").(string) - dbName = d.Get("db_name").(string) - instanceId = d.Get("instance_id").(string) - privilege = d.Get("privilege").(string) - ) - - var outErr, inErr error - - //check account exists - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, has, inErr := sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, accountName) - if inErr != nil { - return retryError(inErr) - } - if !has { - return resource.NonRetryableError(fmt.Errorf(" SQL Server account %s, instance ID %s is not exist", accountName, instanceId)) - } - return nil - }) - if outErr != nil { - return outErr - } - - //check db exists - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, has, inErr := sqlserverService.DescribeDBDetailsById(ctx, instanceId+FILED_SP+dbName) - if inErr != nil { - return retryError(inErr) - } - if !has { - return resource.NonRetryableError(fmt.Errorf(" SQL Server DB %s, instance ID %s is not exist", dbName, instanceId)) - } - return nil - }) - if outErr != nil { - return outErr - } - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(instanceId + FILED_SP + accountName + FILED_SP + dbName) - - return resourceTencentCloudSqlserverAccountDBAttachmentRead(d, meta) -} - -func resourceTencentCloudSqlserverAccountDBAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account_db_attachment.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 3 { - return fmt.Errorf("invalid SQL Server account DB attachment %s", id) - } - instanceId := idStrs[0] - accountName := idStrs[1] - dbName := idStrs[2] - - var outErr, inErr error - - //update privilege - if d.HasChange("privilege") { - privilege := d.Get("privilege").(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudSqlserverAccountDBAttachmentRead(d, meta) -} - -func resourceTencentCloudSqlserverAccountDBAttachmentRead(d *schema.ResourceData, meta interface{}) error { - - defer logElapsed("resource.tencentcloud_sqlserver_account_db_attachment.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 3 { - return fmt.Errorf("invalid SQL Server account DB attachment ID %s", id) - } - instanceId := idStrs[0] - accountName := idStrs[1] - dbName := idStrs[2] - - var outErr, inErr error - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - attachment, has, outErr := sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) - if outErr != nil { - inErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - attachment, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - - if !has { - d.SetId("") - return nil - } - - _ = d.Set("instance_id", instanceId) - _ = d.Set("account_name", accountName) - _ = d.Set("db_name", dbName) - _ = d.Set("privilege", attachment["privilege"]) - - return nil -} - -func resourceTencentCLoudSqlserverAccountDBAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_account_db_attachment.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - idStrs := strings.Split(id, FILED_SP) - if len(idStrs) != 3 { - return fmt.Errorf("invalid SQL Server account DB attachment id %s", id) - } - instanceId := idStrs[0] - accountName := idStrs[1] - dbName := idStrs[2] - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - var outErr, inErr error - var has bool - privilege := "Delete" - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - if !has { - return nil - } - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) - if inErr != nil { - return retryError(inErr) - } - if has { - inErr = fmt.Errorf("delete SQL Server account DB attachment %s fail, account still exists from SDK DescribeSqlserverAccountDBAttachmentById", id) - return resource.RetryableError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_business_intelligence_file.go b/tencentcloud/resource_tc_sqlserver_business_intelligence_file.go deleted file mode 100644 index 7cdb7d5473..0000000000 --- a/tencentcloud/resource_tc_sqlserver_business_intelligence_file.go +++ /dev/null @@ -1,178 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverBusinessIntelligenceFile() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverBusinessIntelligenceFileCreate, - Read: resourceTencentCloudSqlserverBusinessIntelligenceFileRead, - Delete: resourceTencentCloudSqlserverBusinessIntelligenceFileDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "instance id.", - }, - "file_url": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Cos Url.", - }, - "file_type": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "File Type FLAT - Flat File as Data Source, SSIS - ssis project package.", - }, - "remark": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "remark.", - }, - }, - } -} - -func resourceTencentCloudSqlserverBusinessIntelligenceFileCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - CreateBIFRequest = sqlserver.NewCreateBusinessIntelligenceFileRequest() - CreateBIFResponse = sqlserver.NewCreateBusinessIntelligenceFileResponse() - instanceId string - ) - - if v, ok := d.GetOk("instance_id"); ok { - CreateBIFRequest.InstanceId = helper.String(v.(string)) - instanceId = v.(string) - } - - if v, ok := d.GetOk("file_url"); ok { - CreateBIFRequest.FileURL = helper.String(v.(string)) - } - - if v, ok := d.GetOk("file_type"); ok { - CreateBIFRequest.FileType = helper.String(v.(string)) - } - - if v, ok := d.GetOk("remark"); ok { - CreateBIFRequest.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateBusinessIntelligenceFile(CreateBIFRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, CreateBIFRequest.GetAction(), CreateBIFRequest.ToJsonString(), result.ToJsonString()) - } - - if result == nil { - e = fmt.Errorf("sqlserver CreateBusinessIntelligenceFile not exists") - return resource.NonRetryableError(e) - } - - CreateBIFResponse = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver businessIntelligenceFile failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{instanceId, *CreateBIFResponse.Response.FileTaskId}, FILED_SP)) - - return resourceTencentCloudSqlserverBusinessIntelligenceFileRead(d, meta) -} - -func resourceTencentCloudSqlserverBusinessIntelligenceFileRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - - instanceId := idSplit[0] - fileName := idSplit[1] - - businessIntelligenceFile, err := service.DescribeSqlserverBusinessIntelligenceFileById(ctx, instanceId, fileName) - if err != nil { - return err - } - - if businessIntelligenceFile == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverBusinessIntelligenceFile` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if businessIntelligenceFile.InstanceId != nil { - _ = d.Set("instance_id", businessIntelligenceFile.InstanceId) - } - - if businessIntelligenceFile.FileURL != nil { - _ = d.Set("file_url", businessIntelligenceFile.FileURL) - } - - if businessIntelligenceFile.FileType != nil { - _ = d.Set("file_type", businessIntelligenceFile.FileType) - } - - if businessIntelligenceFile.Remark != nil { - _ = d.Set("remark", businessIntelligenceFile.Remark) - } - - return nil -} - -func resourceTencentCloudSqlserverBusinessIntelligenceFileDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - - instanceId := idSplit[0] - fileName := idSplit[1] - - if err := service.DeleteSqlserverBusinessIntelligenceFileById(ctx, instanceId, fileName); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_complete_expansion.go b/tencentcloud/resource_tc_sqlserver_complete_expansion.go deleted file mode 100644 index 73a2709b23..0000000000 --- a/tencentcloud/resource_tc_sqlserver_complete_expansion.go +++ /dev/null @@ -1,112 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverCompleteExpansion() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverCompleteExpansionCreate, - Read: resourceTencentCloudSqlserverCompleteExpansionRead, - Delete: resourceTencentCloudSqlserverCompleteExpansionDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ID of imported target instance.", - }, - }, - } -} - -func resourceTencentCloudSqlserverCompleteExpansionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_complete_expansion.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewCompleteExpansionRequest() - response = sqlserver.NewCompleteExpansionResponse() - flowRequest = sqlserver.NewDescribeFlowStatusRequest() - instanceId string - flowId int64 - ) - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - instanceId = v.(string) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CompleteExpansion(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()) - } - - if result == nil { - e = fmt.Errorf("sqlserver complete expansion %s not exists", instanceId) - return resource.NonRetryableError(e) - } - - response = result - flowId = int64(*response.Response.FlowId) - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s operate sqlserver completeExpansion failed, reason:%+v", logId, err) - return err - } - - flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) - if e != nil { - return retryError(e) - } - - if *result.Response.Status == SQLSERVER_TASK_SUCCESS { - return nil - } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver completeExpansion status is running")) - } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { - return resource.NonRetryableError(fmt.Errorf("sqlserver completeExpansion status is fail")) - } else { - e = fmt.Errorf("sqlserver completeExpansion status illegal") - return resource.NonRetryableError(e) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver completeExpansion failed, reason:%+v", logId, err) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverCompleteExpansionRead(d, meta) -} - -func resourceTencentCloudSqlserverCompleteExpansionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_complete_expansion.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSqlserverCompleteExpansionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_complete_expansion.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_config_database_cdc.go b/tencentcloud/resource_tc_sqlserver_config_database_cdc.go deleted file mode 100644 index 04f1a09fc5..0000000000 --- a/tencentcloud/resource_tc_sqlserver_config_database_cdc.go +++ /dev/null @@ -1,200 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverConfigDatabaseCDC() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverConfigDatabaseCDCCreate, - Read: resourceTencentCloudSqlserverConfigDatabaseCDCRead, - Update: resourceTencentCloudSqlserverConfigDatabaseCDCUpdate, - Delete: resourceTencentCloudSqlserverConfigDatabaseCDCDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "db_name": { - Required: true, - Type: schema.TypeString, - Description: "database name.", - }, - "modify_type": { - Required: true, - Type: schema.TypeString, - Description: "Enable or disable CDC. Valid values: enable, disable.", - }, - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverConfigDatabaseCDCCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_cdc.create")() - defer inconsistentCheck(d, meta)() - - var ( - instanceId string - dbName string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - if v, ok := d.GetOk("db_name"); ok { - dbName = v.(string) - } - - d.SetId(strings.Join([]string{instanceId, dbName}, FILED_SP)) - - return resourceTencentCloudSqlserverConfigDatabaseCDCUpdate(d, meta) -} - -func resourceTencentCloudSqlserverConfigDatabaseCDCRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_cdc.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - Name string - modifyType string - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - instanceId := idSplit[0] - dbName := idSplit[1] - - configDatabaseCDC, err := service.DescribeSqlserverConfigDatabaseCDCById(ctx, instanceId) - if err != nil { - return err - } - - if configDatabaseCDC == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverConfigDatabaseCDC` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - for _, i := range configDatabaseCDC { - if *i.Name == dbName { - if *i.IsCdcEnabled == "0" { - modifyType = "disable" - } else { - modifyType = "enable" - } - Name = *i.Name - break - } - } - - _ = d.Set("instance_id", instanceId) - _ = d.Set("db_name", Name) - _ = d.Set("modify_type", modifyType) - - return nil -} - -func resourceTencentCloudSqlserverConfigDatabaseCDCUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_cdc.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewModifyDatabaseCDCRequest() - flowRequest = sqlserver.NewDescribeFlowStatusRequest() - flowId int64 - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - instanceId := idSplit[0] - dbName := idSplit[1] - - if v, ok := d.GetOk("modify_type"); ok { - request.ModifyType = helper.String(v.(string)) - } - - request.InstanceId = &instanceId - dbNames := make([]*string, 0) - dbNames = append(dbNames, &dbName) - request.DBNames = dbNames - - if v, ok := d.GetOk("modify_type"); ok { - request.ModifyType = helper.String(v.(string)) - } - - request.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDatabaseCDC(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()) - } - - if result == nil { - e = fmt.Errorf("sqlserver configDatabaseCDC not exists") - return resource.NonRetryableError(e) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update sqlserver configDatabaseCDC failed, reason:%+v", logId, err) - return err - } - - flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) - if e != nil { - return retryError(e) - } - if *result.Response.Status == SQLSERVER_TASK_SUCCESS { - return nil - } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver configDatabaseCDC status is running")) - } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { - return resource.NonRetryableError(fmt.Errorf("sqlserver configDatabaseCDC status is fail")) - } else { - e = fmt.Errorf("sqlserver configDatabaseCDC status illegal") - return resource.NonRetryableError(e) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver configDatabaseCDC failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverConfigDatabaseCDCRead(d, meta) -} - -func resourceTencentCloudSqlserverConfigDatabaseCDCDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_cdc.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_config_database_mdf.go b/tencentcloud/resource_tc_sqlserver_config_database_mdf.go deleted file mode 100644 index d2926bb6be..0000000000 --- a/tencentcloud/resource_tc_sqlserver_config_database_mdf.go +++ /dev/null @@ -1,179 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" -) - -func resourceTencentCloudSqlserverConfigDatabaseMdf() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverConfigDatabaseMdfCreate, - Read: resourceTencentCloudSqlserverConfigDatabaseMdfRead, - Update: resourceTencentCloudSqlserverConfigDatabaseMdfUpdate, - Delete: resourceTencentCloudSqlserverConfigDatabaseMdfDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "db_name": { - Required: true, - Type: schema.TypeString, - Description: "Array of database names.", - }, - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverConfigDatabaseMdfCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_mdf.create")() - defer inconsistentCheck(d, meta)() - - var ( - instanceId string - dbName string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - if v, ok := d.GetOk("db_name"); ok { - dbName = v.(string) - } - - d.SetId(strings.Join([]string{instanceId, dbName}, FILED_SP)) - - return resourceTencentCloudSqlserverConfigDatabaseMdfUpdate(d, meta) -} - -func resourceTencentCloudSqlserverConfigDatabaseMdfRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_mdf.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - Name string - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - instanceId := idSplit[0] - dbName := idSplit[1] - - configDatabaseMdf, err := service.DescribeSqlserverConfigDatabaseMdfById(ctx, instanceId) - if err != nil { - return err - } - - if configDatabaseMdf == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverConfigDatabaseMdf` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - for _, i := range configDatabaseMdf { - if *i.Name == dbName { - Name = *i.Name - break - } - } - - _ = d.Set("instance_id", instanceId) - _ = d.Set("db_name", Name) - - return nil -} - -func resourceTencentCloudSqlserverConfigDatabaseMdfUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_mdf.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewModifyDatabaseMdfRequest() - flowRequest = sqlserver.NewDescribeFlowStatusRequest() - flowId int64 - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - instanceId := idSplit[0] - dbName := idSplit[1] - - request.InstanceId = &instanceId - dbNames := make([]*string, 0) - dbNames = append(dbNames, &dbName) - request.DBNames = dbNames - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDatabaseMdf(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()) - } - - if result == nil { - e = fmt.Errorf("sqlserver configDatabaseMdf not exists") - return resource.NonRetryableError(e) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update sqlserver configDatabaseMdf failed, reason:%+v", logId, err) - return err - } - - flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) - if e != nil { - return retryError(e) - } - - if *result.Response.Status == SQLSERVER_TASK_SUCCESS { - return nil - } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver configDatabaseMdf status is running")) - } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { - return resource.NonRetryableError(fmt.Errorf("sqlserver configDatabaseMdf status is fail")) - } else { - e = fmt.Errorf("sqlserver configDatabaseMdf status illegal") - return resource.NonRetryableError(e) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver configDatabaseMdf failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverConfigDatabaseMdfRead(d, meta) -} - -func resourceTencentCloudSqlserverConfigDatabaseMdfDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_mdf.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_security_groups.go b/tencentcloud/resource_tc_sqlserver_config_instance_security_groups.go deleted file mode 100644 index 04bee18fc8..0000000000 --- a/tencentcloud/resource_tc_sqlserver_config_instance_security_groups.go +++ /dev/null @@ -1,190 +0,0 @@ -/* -Provides a resource to create a sqlserver config_instance_security_groups - -Example Usage - -```hcl -data "tencentcloud_availability_zones_by_product" "zones" { - product = "sqlserver" -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name - name = "subnet-example" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_security_group" "security_group" { - name = "sg-example" - description = "desc." -} - -resource "tencentcloud_sqlserver_basic_instance" "example" { - name = "tf-example" - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name - charge_type = "POSTPAID_BY_HOUR" - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - project_id = 0 - memory = 4 - storage = 100 - cpu = 2 - machine_type = "CLOUD_PREMIUM" - maintenance_week_set = [1, 2, 3] - maintenance_start_time = "09:00" - maintenance_time_span = 3 - - tags = { - "test" = "test" - } -} - -resource "tencentcloud_sqlserver_config_instance_security_groups" "example" { - instance_id = tencentcloud_sqlserver_basic_instance.example.id - security_group_id_set = [tencentcloud_security_group.security_group.id] -} -``` - -Import - -sqlserver config_instance_security_groups can be imported using the id, e.g. - -``` -terraform import tencentcloud_sqlserver_config_instance_security_groups.example mssql-i9ma6oy7 -``` -*/ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverConfigInstanceSecurityGroups() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsCreate, - Read: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead, - Update: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate, - Delete: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - "security_group_id_set": { - Required: true, - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "A list of security group IDs to modify, an array of one or more security group IDs.", - }, - }, - } -} - -func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate(d, meta) -} - -func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - ) - - configInstanceSecurityGroups, err := service.DescribeSqlserverConfigInstanceSecurityGroupsById(ctx, instanceId) - if err != nil { - return err - } - - if configInstanceSecurityGroups == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverConfigInstanceSecurityGroups` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("instance_id", instanceId) - - sgList := []interface{}{} - for _, sg := range configInstanceSecurityGroups { - sgList = append(sgList, sg.SecurityGroupId) - } - _ = d.Set("security_group_id_set", sgList) - - return nil -} - -func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewModifyDBInstanceSecurityGroupsRequest() - instanceId = d.Id() - ) - - if v, ok := d.GetOk("security_group_id_set"); ok { - for _, item := range v.(*schema.Set).List() { - request.SecurityGroupIdSet = append(request.SecurityGroupIdSet, helper.String(item.(string))) - } - } - - request.InstanceId = &instanceId - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBInstanceSecurityGroups(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 update sqlserver configInstanceSecurityGroups failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead(d, meta) -} - -func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_config_terminate_db_instance.go b/tencentcloud/resource_tc_sqlserver_config_terminate_db_instance.go deleted file mode 100644 index 1e4976eb05..0000000000 --- a/tencentcloud/resource_tc_sqlserver_config_terminate_db_instance.go +++ /dev/null @@ -1,111 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" -) - -func resourceTencentCloudSqlserverConfigTerminateDBInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverConfigTerminateDBInstanceCreate, - Read: resourceTencentCloudSqlserverConfigTerminateDBInstanceRead, - Update: resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate, - Delete: resourceTencentCloudSqlserverConfigTerminateDBInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverConfigTerminateDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate(d, meta) -} - -func resourceTencentCloudSqlserverConfigTerminateDBInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - ) - - configTerminateDBInstance, err := service.DescribeSqlserverConfigTerminateDBInstanceById(ctx, instanceId) - if err != nil { - return err - } - - if configTerminateDBInstance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverConfigTerminateDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if configTerminateDBInstance.InstanceId != nil { - _ = d.Set("instance_id", configTerminateDBInstance.InstanceId) - } - - return nil -} - -func resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewTerminateDBInstanceRequest() - instanceId = d.Id() - ) - - request.InstanceIdSet = []*string{&instanceId} - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().TerminateDBInstance(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 update sqlserver configTerminateDBInstance failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverConfigTerminateDBInstanceRead(d, meta) -} - -func resourceTencentCloudSqlserverConfigTerminateDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_database_tde.go b/tencentcloud/resource_tc_sqlserver_database_tde.go deleted file mode 100644 index ca8d207234..0000000000 --- a/tencentcloud/resource_tc_sqlserver_database_tde.go +++ /dev/null @@ -1,227 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverDatabaseTDE() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverDatabaseTDECreate, - Read: resourceTencentCloudSqlserverDatabaseTDERead, - Update: resourceTencentCloudSqlserverDatabaseTDEUpdate, - Delete: resourceTencentCloudSqlserverDatabaseTDEDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - "db_names": { - Required: true, - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Description: "Database name list.", - }, - "encryption": { - Required: true, - Type: schema.TypeString, - Description: "`enable` - enable encryption, `disable` - disable encryption.", - }, - }, - } -} - -func resourceTencentCloudSqlserverDatabaseTDECreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_database_tde.create")() - defer inconsistentCheck(d, meta)() - - var ( - instanceId string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - dbNameList := make([]string, 0) - if v, ok := d.GetOk("db_names"); ok { - dbNames := v.(*schema.Set).List() - for i := range dbNames { - dbName := dbNames[i].(string) - dbNameList = append(dbNameList, dbName) - } - } - - dbNameListStr := strings.Join(dbNameList, COMMA_SP) - d.SetId(strings.Join([]string{instanceId, dbNameListStr}, FILED_SP)) - - return resourceTencentCloudSqlserverDatabaseTDEUpdate(d, meta) -} - -func resourceTencentCloudSqlserverDatabaseTDERead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_database_tde.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - encryption string - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - instanceId := idSplit[0] - dbNameListStr := idSplit[1] - dbNameList := strings.Split(dbNameListStr, COMMA_SP) - - databaseTDE, err := service.DescribeSqlserverDatabaseTDEById(ctx, instanceId, dbNameList) - if err != nil { - return err - } - - if databaseTDE == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverDatabaseTDE` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if databaseTDE.InstanceId != nil { - _ = d.Set("instance_id", databaseTDE.InstanceId) - } - - if databaseTDE.DBDetails != nil { - tmpList := make([]string, 0) - checkEncryption := make(map[string]string, 0) - for _, item := range databaseTDE.DBDetails { - if item.Name != nil { - tmpList = append(tmpList, *item.Name) - } - - if item.Encryption != nil { - encryption = *item.Encryption - checkEncryption[encryption] = "" - } - } - - if len(checkEncryption) != 1 { - return fmt.Errorf("sqlserver database tde encryption result is not normal, id is %s", d.Id()) - } - - _ = d.Set("db_names", tmpList) - _ = d.Set("encryption", encryption) - } - - return nil -} - -func resourceTencentCloudSqlserverDatabaseTDEUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_database_tde.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - request = sqlserver.NewModifyDBEncryptAttributesRequest() - encryption string - flowId int64 - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - instanceId := idSplit[0] - dbNameListStr := idSplit[1] - dbNameList := strings.Split(dbNameListStr, COMMA_SP) - - request.InstanceId = &instanceId - - if v, ok := d.GetOk("encryption"); ok { - encryption = v.(string) - } - - for _, v := range dbNameList { - parameter := sqlserver.DBTDEEncrypt{} - parameter.DBName = helper.String(v) - parameter.Encryption = helper.String(encryption) - request.DBTDEEncrypt = append(request.DBTDEEncrypt, ¶meter) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBEncryptAttributes(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()) - } - - if result == nil { - e = fmt.Errorf("qlserver databaseTDE not exists") - return resource.NonRetryableError(e) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update sqlserver databaseTDE failed, reason:%+v", logId, err) - return err - } - - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) - if e != nil { - return retryError(e) - } - - if result == nil { - e = fmt.Errorf("sqlserver databaseTDE instanceId %s flowId %d not exists", instanceId, flowId) - return resource.NonRetryableError(e) - } - - if *result.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver databaseTDE task status is running")) - } - - if *result.Status == SQLSERVER_TASK_SUCCESS { - return nil - } - - if *result.Status == SQLSERVER_TASK_FAIL { - return resource.NonRetryableError(fmt.Errorf("sqlserver databaseTDE task status is failed")) - } - - e = fmt.Errorf("sqlserver databaseTDE task status is %v, we won't wait for it finish", *result.Status) - return resource.NonRetryableError(e) - }) - - if err != nil { - log.Printf("[CRITAL]%s sqlserver databaseTDE task fail, reason:%s\n ", logId, err.Error()) - return err - } - - return resourceTencentCloudSqlserverDatabaseTDERead(d, meta) -} - -func resourceTencentCloudSqlserverDatabaseTDEDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_database_tde.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_db.go b/tencentcloud/resource_tc_sqlserver_db.go deleted file mode 100644 index 650a43735a..0000000000 --- a/tencentcloud/resource_tc_sqlserver_db.go +++ /dev/null @@ -1,167 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudSqlserverDB() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverDBCreate, - Read: resourceTencentCloudSqlserverDBRead, - Update: resourceTencentCloudSqlserverDBUpdate, - Delete: resourceTencentCloudSqlserverDBDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "SQL Server instance ID which DB belongs to.", - }, - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of SQL Server DB. The database name must be unique and must be composed of numbers, letters and underlines, and the first one can not be underline.", - }, - "charset": { - Type: schema.TypeString, - Optional: true, - Default: "Chinese_PRC_CI_AS", - ForceNew: true, - Description: "Character set DB uses. Valid values: `Chinese_PRC_CI_AS`, `Chinese_PRC_CS_AS`, `Chinese_PRC_BIN`, `Chinese_Taiwan_Stroke_CI_AS`, `SQL_Latin1_General_CP1_CI_AS`, and `SQL_Latin1_General_CP1_CS_AS`. Default value is `Chinese_PRC_CI_AS`.", - }, - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Remark of the DB.", - }, - // Computed - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Database creation time.", - }, - "status": { - Type: schema.TypeString, - Computed: true, - Description: "Database status, could be `creating`, `running`, `modifying` which means changing the remark, and `deleting`.", - }, - }, - } -} - -func resourceTencentCloudSqlserverDBCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_db.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - - instanceId := d.Get("instance_id").(string) - _, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId) - if err != nil { - return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById fail, reason:%s\n", logId, err) - } - if !has { - return fmt.Errorf("[CRITAL]%s SQL Server instance %s dose not exist for DB creation", logId, instanceId) - } - - dbName := d.Get("name").(string) - charset := d.Get("charset").(string) - remark := d.Get("remark").(string) - - if err := sqlserverService.CreateSqlserverDB(ctx, instanceId, dbName, charset, remark); err != nil { - return err - } - - d.SetId(instanceId + FILED_SP + dbName) - return resourceTencentCloudSqlserverDBRead(d, meta) -} - -func resourceTencentCloudSqlserverDBRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_db.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - id := d.Id() - dbInfo, has, err := sqlserverService.DescribeDBDetailsById(ctx, id) - if err != nil { - return err - } - if !has { - d.SetId("") - return nil - } - idItem := strings.Split(id, FILED_SP) - if len(idItem) < 2 { - return fmt.Errorf("broken ID %s of SQL Server DB", id) - } - instanceId := idItem[0] - dbName := idItem[1] - _ = d.Set("instance_id", instanceId) - _ = d.Set("name", dbName) - _ = d.Set("charset", dbInfo.Charset) - _ = d.Set("remark", dbInfo.Remark) - _ = d.Set("create_time", dbInfo.CreateTime) - _ = d.Set("status", SQLSERVER_DB_STATUS[*dbInfo.Status]) - - return nil -} - -func resourceTencentCloudSqlserverDBUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_db.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId := d.Get("instance_id").(string) - - if d.HasChange("remark") { - if err := sqlserverService.ModifySqlserverDBRemark(ctx, instanceId, d.Get("name").(string), d.Get("remark").(string)); err != nil { - return err - } - } - - return nil -} - -func resourceTencentCloudSqlserverDBDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_db.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId := d.Get("instance_id").(string) - name := d.Get("name").(string) - - // precheck before delete - _, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId) - if err != nil { - return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById when deleting SQL Server DB fail, reason:%s\n", logId, err) - } - if !has { - return nil - } - id := d.Id() - _, has, err = sqlserverService.DescribeDBDetailsById(ctx, id) - if err != nil { - return err - } - if !has { - return nil - } - - return sqlserverService.DeleteSqlserverDB(ctx, instanceId, []*string{&name}) -} diff --git a/tencentcloud/resource_tc_sqlserver_general_communication.go b/tencentcloud/resource_tc_sqlserver_general_communication.go deleted file mode 100644 index b8fcaf6b6c..0000000000 --- a/tencentcloud/resource_tc_sqlserver_general_communication.go +++ /dev/null @@ -1,171 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverGeneralCommunication() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverGeneralCommunicationCreate, - Read: resourceTencentCloudSqlserverGeneralCommunicationRead, - Delete: resourceTencentCloudSqlserverGeneralCommunicationDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ID of instances.", - }, - }, - } -} - -func resourceTencentCloudSqlserverGeneralCommunicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_communication.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewOpenInterCommunicationRequest() - response = sqlserver.NewOpenInterCommunicationResponse() - flowRequest = sqlserver.NewDescribeFlowStatusRequest() - ) - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceIdSet = append(request.InstanceIdSet, helper.String(v.(string))) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().OpenInterCommunication(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()) - } - - if result == nil { - e = fmt.Errorf("sqlserver generalCommunication not exists") - return resource.NonRetryableError(e) - } - - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver generalCommunication failed, reason:%+v", logId, err) - return err - } - - instanceId := *response.Response.InterInstanceFlowSet[0].InstanceId - flowId := *response.Response.InterInstanceFlowSet[0].FlowId - flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) - if e != nil { - return retryError(e) - } - if *result.Response.Status == SQLSERVER_TASK_SUCCESS { - return nil - } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver generalCommunication status is running")) - } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { - return resource.NonRetryableError(fmt.Errorf("sqlserver bgeneralCommunication status is fail")) - } else { - e = fmt.Errorf("sqlserver generalCommunication status illegal") - return resource.NonRetryableError(e) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s create sqlserver generalCommunication failed, reason:%+v", logId, err) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverGeneralCommunicationRead(d, meta) -} - -func resourceTencentCloudSqlserverGeneralCommunicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_communication.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - ) - - generalCommunication, err := service.DescribeSqlserverGeneralCommunicationById(ctx, instanceId) - if err != nil { - return err - } - - if generalCommunication == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverGeneralCommunication` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if generalCommunication.InstanceId != nil { - _ = d.Set("instance_id", generalCommunication.InstanceId) - } - - return nil -} - -func resourceTencentCloudSqlserverGeneralCommunicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_communication.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - flowRequest = sqlserver.NewDescribeFlowStatusRequest() - instanceId = d.Id() - ) - - flowId, err := service.DeleteSqlserverGeneralCommunicationById(ctx, instanceId) - if err != nil { - log.Printf("[CRITAL]%s delete sqlserver generalCommunication failed, reason:%+v", logId, err) - return err - } - - flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) - if e != nil { - return retryError(e) - } - if *result.Response.Status == SQLSERVER_TASK_SUCCESS { - return nil - } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver generalCommunication status is running")) - } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { - return resource.NonRetryableError(fmt.Errorf("sqlserver bgeneralCommunication status is fail")) - } else { - e = fmt.Errorf("sqlserver generalCommunication status illegal") - return resource.NonRetryableError(e) - } - }) - - if err != nil { - log.Printf("[CRITAL]%s delete sqlserver generalCommunication status failed, reason:%+v", logId, err) - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_instance_ssl.go b/tencentcloud/resource_tc_sqlserver_instance_ssl.go deleted file mode 100644 index 25dc5b15c7..0000000000 --- a/tencentcloud/resource_tc_sqlserver_instance_ssl.go +++ /dev/null @@ -1,176 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverInstanceSsl() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverInstanceSslCreate, - Read: resourceTencentCloudSqlserverInstanceSslRead, - Update: resourceTencentCloudSqlserverInstanceSslUpdate, - Delete: resourceTencentCloudSqlserverInstanceSslDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - "type": { - Required: true, - Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(SSL_TYPE), - Description: "Operation type. enable: turn on SSL; disable: turn off SSL; renew: update the certificate validity period.", - }, - }, - } -} - -func resourceTencentCloudSqlserverInstanceSslCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_ssl.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverInstanceSslUpdate(d, meta) -} - -func resourceTencentCloudSqlserverInstanceSslRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_ssl.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - sslType string - ) - - if v, ok := d.GetOk("type"); ok { - sslType = v.(string) - } - - instanceSsl, err := service.DescribeSqlserverInstanceSslById(ctx, instanceId) - if err != nil { - return err - } - - if instanceSsl == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverInstanceSsl` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if instanceSsl.InstanceId != nil { - _ = d.Set("instance_id", instanceSsl.InstanceId) - } - - if instanceSsl.SSLConfig.Encryption != nil { - if sslType == SSL_TYPE_ENABLE || sslType == SSL_TYPE_DISABLE { - _ = d.Set("type", instanceSsl.SSLConfig.Encryption) - } else { - _ = d.Set("type", SSL_TYPE_RENEW) - } - } - - return nil -} - -func resourceTencentCloudSqlserverInstanceSslUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_ssl.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewModifyDBInstanceSSLRequest() - attrRequest = sqlserver.NewDescribeDBInstancesAttributeRequest() - instanceId = d.Id() - sslType string - ) - - if v, ok := d.GetOk("type"); ok { - request.Type = helper.String(v.(string)) - sslType = v.(string) - } - - request.InstanceId = &instanceId - request.WaitSwitch = helper.IntUint64(0) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBInstanceSSL(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 update sqlserver instanceSsl failed, reason:%+v", logId, err) - return err - } - - // wait - attrRequest.InstanceId = &instanceId - err = resource.Retry(readRetryTimeout*10, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeDBInstancesAttribute(attrRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attrRequest.GetAction(), attrRequest.ToJsonString(), result.ToJsonString()) - } - - if result == nil { - e = fmt.Errorf("Describe DBInstances Attribute not exists.") - return resource.NonRetryableError(e) - } - - if sslType == SSL_TYPE_ENABLE { - if *result.Response.SSLConfig.Encryption == SSL_TYPE_ENABLE { - return nil - } - } else if sslType == SSL_TYPE_DISABLE { - if *result.Response.SSLConfig.Encryption == SSL_TYPE_DISABLE { - return nil - } - } else { - if *result.Response.SSLConfig.Encryption == SSL_TYPE_ENABLE { - return nil - } - } - - return resource.RetryableError(fmt.Errorf("Modify DBInstance SSL is processing, status is: %s", *result.Response.SSLConfig.Encryption)) - }) - - if err != nil { - log.Printf("[CRITAL]%s update sqlserver instanceSsl failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverInstanceSslRead(d, meta) -} - -func resourceTencentCloudSqlserverInstanceSslDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_ssl.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_publish_subscribe_test.go b/tencentcloud/resource_tc_sqlserver_publish_subscribe_test.go deleted file mode 100644 index 8301719e04..0000000000 --- a/tencentcloud/resource_tc_sqlserver_publish_subscribe_test.go +++ /dev/null @@ -1,240 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "testing" - "time" - - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_sqlserver_publish_subscribe - resource.AddTestSweepers("tencentcloud_sqlserver_publish_subscribe", &resource.Sweeper{ - Name: "tencentcloud_sqlserver_publish_subscribe", - F: testAccTencentCloudSQLServerPubSubSweeper, - }) -} - -func testAccTencentCloudSQLServerPubSubSweeper(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SqlserverService{client} - instance, err := service.DescribeSqlserverInstances(ctx, "", defaultPubSQLServerName, -1, "", "", 1) - if err != nil { - return err - } - subInstances, err := service.DescribeSqlserverInstances(ctx, "", defaultSubSQLServerName, -1, "", "", 1) - - if err != nil { - return err - } - - pubInstanceId := *instance[0].InstanceId - subInstanceId := *subInstances[0].InstanceId - - testAccUnsubscribePubDB(ctx, &service, pubInstanceId) - - database, err := service.DescribeDBsOfInstance(ctx, subInstanceId) - if err != nil { - return err - } - - if len(database) == 0 { - log.Printf("no DBs in %s", subInstanceId) - return nil - } - - for i := range database { - item := database[i] - created := time.Time{} - name := *item.Name - if item.CreateTime != nil { - created = stringTotime(*item.CreateTime) - } - if name != defaultSQLServerPubSubDB || isResourcePersist("", &created) { - continue - } - if err = service.DeleteSqlserverDB(ctx, subInstanceId, []*string{item.Name}); err != nil { - log.Printf("err: %s", err.Error()) - } - } - return err -} - -func testAccCheckPubSubsExists() error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(defaultRegion) - client := cli.(*TencentCloudClient).apiV3Conn - service := SqlserverService{client} - instance, err := service.DescribeSqlserverInstances(ctx, "", defaultPubSQLServerName, -1, "", "", 1) - if err != nil { - return err - } - - pubInstanceId := *instance[0].InstanceId - - pubsubs, _ := service.DescribeSqlserverPublishSubscribes(ctx, map[string]interface{}{ - "instanceId": pubInstanceId, - }) - - if len(pubsubs) > 0 { - return fmt.Errorf("pubsub of %s still exists", defaultPubSQLServerName) - } - return nil -} - -func testAccUnsubscribePubDB(ctx context.Context, service *SqlserverService, instanceId string) { - - pubsubs, _ := service.DescribeSqlserverPublishSubscribes(ctx, map[string]interface{}{ - "instanceId": instanceId, - }) - - if len(pubsubs) == 0 { - log.Printf("NO pubsub result") - return - } - - pubSubId := *pubsubs[0].Id - - pubSub := &sqlserver.PublishSubscribe{ - Id: &pubSubId, - } - tuples := []*sqlserver.DatabaseTuple{ - { - PublishDatabase: helper.String(defaultSQLServerPubSubDB), - SubscribeDatabase: helper.String(defaultSQLServerPubSubDB), - }, - } - err := service.DeletePublishSubscribe(ctx, pubSub, tuples) - if err != nil { - fmt.Printf("[ERROR] %s", err.Error()) - } -} - -// go test -i; go test -test.run TestAccTencentCloudSqlserverPublishSubscribeResource -v -func TestAccTencentCloudSqlserverPublishSubscribeResource(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - if err := testAccCheckPubSubsExists(); err != nil { - t.Errorf("Precheck failed: %s", err.Error()) - } - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckSqlserverPublishSubscribeDestroy, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverPublishSubscribe_basic, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckSqlserverPublishSubscribeExists("tencentcloud_sqlserver_publish_subscribe.example"), - resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_publish_subscribe.example", "publish_instance_id"), - resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_publish_subscribe.example", "subscribe_instance_id"), - resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "publish_subscribe_name", "example"), - resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "database_tuples.#", "1"), - ), - }, - { - Config: testAccSqlserverPublishSubscribe_basic_update_name, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckSqlserverPublishSubscribeExists("tencentcloud_sqlserver_publish_subscribe.example"), - resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "publish_subscribe_name", "example1"), - ), - }, - { - ResourceName: "tencentcloud_sqlserver_publish_subscribe.example", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"delete_subscribe_db"}, - }, - }, - }) -} - -func testAccCheckSqlserverPublishSubscribeDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_sqlserver_publish_subscribe" { - continue - } - split := strings.Split(rs.Primary.ID, FILED_SP) - if len(split) < 2 { - continue - } - _, has, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, split[0], split[1]) - if err != nil { - return err - } - if has { - return fmt.Errorf("SQL Server Publish Subscribe %s still exists", split[0]+FILED_SP+split[1]) - } - } - return nil -} - -func testAccCheckSqlserverPublishSubscribeExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("SQL Server Publish Subscribe %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("SQL Server Publish Subscribe id is not set") - } - - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - split := strings.Split(rs.Primary.ID, FILED_SP) - if len(split) < 2 { - return fmt.Errorf("SQL Server Publish Subscribe is not set: %s", rs.Primary.ID) - } - _, has, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, split[0], split[1]) - if err != nil { - return err - } - if !has { - return fmt.Errorf("SQL Server Publish Subscribe %s is not found", rs.Primary.ID) - } - return nil - } -} - -const testAccSqlserverPublishSubscribe_basic = CommonPubSubSQLServer + ` -resource "tencentcloud_sqlserver_publish_subscribe" "example" { - publish_instance_id = "mssql-qelbzgwf" - subscribe_instance_id = "mssql-jdk2pwld" - publish_subscribe_name = "example" - delete_subscribe_db = false - database_tuples { - publish_database = local.sqlserver_pub_db - subscribe_database = local.sqlserver_sub_db - } -} -` - -const testAccSqlserverPublishSubscribe_basic_update_name = CommonPubSubSQLServer + ` -resource "tencentcloud_sqlserver_publish_subscribe" "example" { - publish_instance_id = "mssql-qelbzgwf" - subscribe_instance_id = "mssql-jdk2pwld" - publish_subscribe_name = "example_update" - delete_subscribe_db = false - database_tuples { - publish_database = local.sqlserver_pub_db - subscribe_database = local.sqlserver_sub_db - } -} -` diff --git a/tencentcloud/resource_tc_sqlserver_renew_db_instance.go b/tencentcloud/resource_tc_sqlserver_renew_db_instance.go deleted file mode 100644 index 56fae6a75c..0000000000 --- a/tencentcloud/resource_tc_sqlserver_renew_db_instance.go +++ /dev/null @@ -1,148 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverRenewDBInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverRenewDBInstanceCreate, - Read: resourceTencentCloudSqlserverRenewDBInstanceRead, - Update: resourceTencentCloudSqlserverRenewDBInstanceUpdate, - Delete: resourceTencentCloudSqlserverRenewDBInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - "period": { - Optional: true, - Type: schema.TypeInt, - Default: 1, - Description: "How many months to renew, the value range is 1-48, the default is 1.", - }, - }, - } -} - -func resourceTencentCloudSqlserverRenewDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_db_instance.create")() - defer inconsistentCheck(d, meta)() - - var ( - instanceId string - period string - ) - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - if v, ok := d.GetOk("period"); ok { - period = strconv.Itoa(v.(int)) - } else { - period = "1" - } - - d.SetId(strings.Join([]string{instanceId, period}, FILED_SP)) - - return resourceTencentCloudSqlserverRenewDBInstanceUpdate(d, meta) -} - -func resourceTencentCloudSqlserverRenewDBInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_db_instance.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - instanceId := idSplit[0] - period := idSplit[1] - - renewDBInstance, err := service.DescribeSqlserverRenewDBInstanceById(ctx, instanceId) - if err != nil { - return err - } - - if renewDBInstance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverRenewDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if renewDBInstance.InstanceId != nil { - _ = d.Set("instance_id", renewDBInstance.InstanceId) - } - - tmpPeriod, _ := strconv.Atoi(period) - _ = d.Set("period", tmpPeriod) - - return nil -} - -func resourceTencentCloudSqlserverRenewDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_db_instance.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewRenewDBInstanceRequest() - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - instanceId := idSplit[0] - - if v, ok := d.GetOk("period"); ok { - request.Period = helper.IntUint64(v.(int)) - } - - request.InstanceId = &instanceId - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().RenewDBInstance(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 update sqlserver renewDBInstance failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverRenewDBInstanceRead(d, meta) -} - -func resourceTencentCloudSqlserverRenewDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_db_instance.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance.go b/tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance.go deleted file mode 100644 index 2a253118d3..0000000000 --- a/tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance.go +++ /dev/null @@ -1,111 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" -) - -func resourceTencentCloudSqlserverRenewPostpaidDBInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverRenewPostpaidDBInstanceCreate, - Read: resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead, - Update: resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate, - Delete: resourceTencentCloudSqlserverRenewPostpaidDBInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverRenewPostpaidDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate(d, meta) -} - -func resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - ) - - renewPostpaidDBInstance, err := service.DescribeSqlserverRenewPostpaidDBInstanceById(ctx, instanceId) - if err != nil { - return err - } - - if renewPostpaidDBInstance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverRenewPostpaidDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if renewPostpaidDBInstance.InstanceId != nil { - _ = d.Set("instance_id", renewPostpaidDBInstance.InstanceId) - } - - return nil -} - -func resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = sqlserver.NewRenewPostpaidDBInstanceRequest() - instanceId = d.Id() - ) - - request.InstanceId = &instanceId - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().RenewPostpaidDBInstance(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 update sqlserver renewPostpaidDBInstance failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead(d, meta) -} - -func resourceTencentCloudSqlserverRenewPostpaidDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_restart_db_instance.go b/tencentcloud/resource_tc_sqlserver_restart_db_instance.go deleted file mode 100644 index c0e740bdf7..0000000000 --- a/tencentcloud/resource_tc_sqlserver_restart_db_instance.go +++ /dev/null @@ -1,152 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" -) - -func resourceTencentCloudSqlserverRestartDBInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverRestartDBInstanceCreate, - Read: resourceTencentCloudSqlserverRestartDBInstanceRead, - Update: resourceTencentCloudSqlserverRestartDBInstanceUpdate, - Delete: resourceTencentCloudSqlserverRestartDBInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Instance ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverRestartDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.create")() - defer inconsistentCheck(d, meta)() - - var instanceId string - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverRestartDBInstanceUpdate(d, meta) -} - -func resourceTencentCloudSqlserverRestartDBInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - ) - - restartDBInstance, err := service.DescribeSqlserverRestartDBInstanceById(ctx, instanceId) - if err != nil { - return err - } - - if restartDBInstance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SqlserverRestartDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if restartDBInstance.InstanceId != nil { - _ = d.Set("instance_id", restartDBInstance.InstanceId) - } - - return nil -} - -func resourceTencentCloudSqlserverRestartDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - request = sqlserver.NewRestartDBInstanceRequest() - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - instanceId = d.Id() - flowId uint64 - ) - - request.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().RestartDBInstance(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()) - } - - if result == nil { - e = fmt.Errorf("sqlserver business restartDBInstance not exists") - return resource.NonRetryableError(e) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update sqlserver restartDBInstance failed, reason:%+v", logId, err) - return err - } - - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) - if e != nil { - return retryError(e) - } - - if result == nil { - e = fmt.Errorf("sqlserver restartDBInstance instanceId %s flowId %d not exists", instanceId, flowId) - return resource.NonRetryableError(e) - } - - if *result.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("restart sqlserver restartDBInstance task status is running")) - } - - if *result.Status == SQLSERVER_TASK_SUCCESS { - return nil - } - - if *result.Status == SQLSERVER_TASK_FAIL { - return resource.NonRetryableError(fmt.Errorf("restart sqlserver restartDBInstance task status is failed")) - } - - e = fmt.Errorf("restart sqlserver restartDBInstance task status is %v, we won't wait for it finish", *result.Status) - return resource.NonRetryableError(e) - }) - - if err != nil { - log.Printf("[CRITAL]%s restart sqlserver restartDBInstance task fail, reason:%s\n ", logId, err.Error()) - return err - } - - return resourceTencentCloudSqlserverRestartDBInstanceRead(d, meta) -} - -func resourceTencentCloudSqlserverRestartDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_rollback_instance_test.go b/tencentcloud/resource_tc_sqlserver_rollback_instance_test.go deleted file mode 100644 index f4f9855936..0000000000 --- a/tencentcloud/resource_tc_sqlserver_rollback_instance_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudNeedFixSqlserverRollbackInstanceResource_basic -v -func TestAccTencentCloudNeedFixSqlserverRollbackInstanceResource_basic(t *testing.T) { - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckSqlserverRollbackDBDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccSqlserverRollbackInstance(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_rollback_instance.rollback_instance", "id"), - ), - }, - { - ResourceName: "tencentcloud_sqlserver_rollback_instance.rollback_instance", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckSqlserverRollbackDBDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_sqlserver_rollback_instance" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 4 { - return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) - } - - instanceId := idSplit[0] - newNameListStr := idSplit[3] - newNameList := strings.Split(newNameListStr, COMMA_SP) - - for _, name := range newNameList { - result, err := sqlserverService.DescribeSqlserverDBS(ctx, instanceId, name) - if err != nil { - return err - } - - if result != nil { - return fmt.Errorf("SQL Server DB still exists") - } - } - } - - return nil -} - -const testAccSqlserverRollbackInstanceString = ` -resource "tencentcloud_sqlserver_rollback_instance" "rollback_instance" { - instance_id = "mssql-qelbzgwf" - time = "%s" - rename_restore { - old_name = "keep_pubsub_db" - new_name = "rollback_pubsub_db" - } - rename_restore { - old_name = "keep_pubsub_db2" - new_name = "rollback_pubsub_db2" - } -} -` - -func testAccSqlserverRollbackInstance() string { - var currentTime = time.Now().AddDate(0, 0, -1).Format("2006-01-02 15:04:05") - return fmt.Sprintf(testAccSqlserverRollbackInstanceString, currentTime) -} diff --git a/tencentcloud/resource_tc_sqlserver_start_backup_full_migration.go b/tencentcloud/resource_tc_sqlserver_start_backup_full_migration.go deleted file mode 100644 index 126c541147..0000000000 --- a/tencentcloud/resource_tc_sqlserver_start_backup_full_migration.go +++ /dev/null @@ -1,125 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverStartBackupFullMigration() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverStartBackupFullMigrationCreate, - Read: resourceTencentCloudSqlserverStartBackupFullMigrationRead, - Delete: resourceTencentCloudSqlserverStartBackupFullMigrationDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ID of imported target instance.", - }, - "backup_migration_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Backup import task ID, returned by the CreateBackupMigration interface.", - }, - }, - } -} - -func resourceTencentCloudSqlserverStartBackupFullMigrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - request = sqlserver.NewStartBackupMigrationRequest() - instanceId string - flowId uint64 - ) - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - instanceId = v.(string) - } - - if v, ok := d.GetOk("backup_migration_id"); ok { - request.BackupMigrationId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().StartBackupMigration(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()) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s operate sqlserver startBackupFullMigration failed, reason:%+v", logId, err) - return err - } - - // wait - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) - if e != nil { - return retryError(e) - } - - if result == nil { - e = fmt.Errorf("sqlserver startBackupFullMigration instanceId %s flowId %d not exists", instanceId, flowId) - return resource.NonRetryableError(e) - } - - if *result.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver startBackupFullMigration task status is running")) - } - - if *result.Status == SQLSERVER_TASK_SUCCESS { - return nil - } - - if *result.Status == SQLSERVER_TASK_FAIL { - return resource.NonRetryableError(fmt.Errorf("sqlserver startBackupFullMigration task status is failed")) - } - - e = fmt.Errorf("sqlserver startBackupFullMigration task status is %v, we won't wait for it finish", *result.Status) - return resource.NonRetryableError(e) - }) - - if err != nil { - log.Printf("[CRITAL]%s sqlserver startBackupFullMigration task fail, reason:%s\n ", logId, err.Error()) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverStartBackupFullMigrationRead(d, meta) -} - -func resourceTencentCloudSqlserverStartBackupFullMigrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSqlserverStartBackupFullMigrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration.go b/tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration.go deleted file mode 100644 index c5b9ddf0c0..0000000000 --- a/tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration.go +++ /dev/null @@ -1,135 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSqlserverStartBackupIncrementalMigration() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSqlserverStartBackupIncrementalMigrationCreate, - Read: resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead, - Delete: resourceTencentCloudSqlserverStartBackupIncrementalMigrationDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ID of imported target instance.", - }, - "backup_migration_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Backup import task ID, returned by the CreateBackupMigration interface.", - }, - "incremental_migration_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Incremental backup import task ID.", - }, - }, - } -} - -func resourceTencentCloudSqlserverStartBackupIncrementalMigrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} - request = sqlserver.NewStartIncrementalMigrationRequest() - instanceId string - flowId uint64 - ) - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("backup_migration_id"); ok { - request.BackupMigrationId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("incremental_migration_id"); ok { - request.IncrementalMigrationId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().StartIncrementalMigration(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()) - } - - flowId = *result.Response.FlowId - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s operate sqlserver startBackupIncrementalMigration failed, reason:%+v", logId, err) - return err - } - - // wait - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) - if e != nil { - return retryError(e) - } - - if result == nil { - e = fmt.Errorf("sqlserver startBackupIncrementalMigration instanceId %s flowId %d not exists", instanceId, flowId) - return resource.NonRetryableError(e) - } - - if *result.Status == SQLSERVER_TASK_RUNNING { - return resource.RetryableError(fmt.Errorf("sqlserver startBackupIncrementalMigration task status is running")) - } - - if *result.Status == SQLSERVER_TASK_SUCCESS { - return nil - } - - if *result.Status == SQLSERVER_TASK_FAIL { - return resource.NonRetryableError(fmt.Errorf("sqlserver startBackupIncrementalMigration task status is failed")) - } - - e = fmt.Errorf("sqlserver startBackupIncrementalMigration task status is %v, we won't wait for it finish", *result.Status) - return resource.NonRetryableError(e) - }) - - if err != nil { - log.Printf("[CRITAL]%s sqlserver startBackupIncrementalMigration task fail, reason:%s\n ", logId, err.Error()) - return err - } - - d.SetId(instanceId) - - return resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead(d, meta) -} - -func resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSqlserverStartBackupIncrementalMigrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_check_certificate_chain_operation.go b/tencentcloud/resource_tc_ssl_check_certificate_chain_operation.go deleted file mode 100644 index be4c671627..0000000000 --- a/tencentcloud/resource_tc_ssl_check_certificate_chain_operation.go +++ /dev/null @@ -1,82 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "log" - - "github.com/hashicorp/go-uuid" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslCheckCertificateChainOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslCheckCertificateChainCreate, - Read: resourceTencentCloudSslCheckCertificateChainRead, - Delete: resourceTencentCloudSslCheckCertificateChainDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "certificate_chain": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "The certificate chain to check.", - }, - }, - } -} - -func resourceTencentCloudSslCheckCertificateChainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewCheckCertificateChainRequest() - ) - if v, ok := d.GetOk("certificate_chain"); ok { - request.CertificateChain = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().CheckCertificateChain(request) - if e != nil { - return retryError(e) - } - if result != nil && result.Response != nil && !*result.Response.IsValid { - err := fmt.Errorf("[DEBUG]%s Certificate chain failed to check, IsValid [%v]\n", logId, *result.Response.IsValid) - return retryError(err) - } - 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 ssl checkCertificateChain failed, reason:%+v", logId, err) - return err - } - id, err := uuid.GenerateUUID() - if err != nil { - return err - } - d.SetId(id) - return resourceTencentCloudSslCheckCertificateChainRead(d, meta) -} - -func resourceTencentCloudSslCheckCertificateChainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslCheckCertificateChainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_complete_certificate_operation.go b/tencentcloud/resource_tc_ssl_complete_certificate_operation.go deleted file mode 100644 index 63f3507cdd..0000000000 --- a/tencentcloud/resource_tc_ssl_complete_certificate_operation.go +++ /dev/null @@ -1,80 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslCompleteCertificateOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslCompleteCertificateCreate, - Read: resourceTencentCloudSslCompleteCertificateRead, - Delete: resourceTencentCloudSslCompleteCertificateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "certificate_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID.", - }, - }, - } -} - -func resourceTencentCloudSslCompleteCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_complete_certificate_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewCompleteCertificateRequest() - response = ssl.NewCompleteCertificateResponse() - certificateId string - ) - if v, ok := d.GetOk("certificate_id"); ok { - request.CertificateId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().CompleteCertificate(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate ssl completeCertificate failed, reason:%+v", logId, err) - return err - } - if response != nil && response.Response != nil && response.Response.CertificateId != nil { - certificateId = *response.Response.CertificateId - } - d.SetId(certificateId) - - return resourceTencentCloudSslCompleteCertificateRead(d, meta) -} - -func resourceTencentCloudSslCompleteCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_complete_certificate_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslCompleteCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_complete_certificate_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation.go b/tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation.go deleted file mode 100644 index 2d3885160a..0000000000 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation.go +++ /dev/null @@ -1,88 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslDeployCertificateRecordRetryOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslDeployCertificateRecordRetryCreate, - Read: resourceTencentCloudSslDeployCertificateRecordRetryRead, - Delete: resourceTencentCloudSslDeployCertificateRecordRetryDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "deploy_record_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Deployment record ID to be retried.", - }, - - "deploy_record_detail_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Deployment record details ID to be retried.", - }, - }, - } -} - -func resourceTencentCloudSslDeployCertificateRecordRetryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewDeployCertificateRecordRetryRequest() - deployRecordId uint64 - ) - if v, _ := d.GetOk("deploy_record_id"); v != nil { - deployRecordId = (uint64)(v.(int)) - request.DeployRecordId = helper.IntInt64(v.(int)) - } - - if v, _ := d.GetOk("deploy_record_detail_id"); v != nil { - request.DeployRecordDetailId = helper.IntInt64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().DeployCertificateRecordRetry(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 ssl deployCertificateRecordRetry failed, reason:%+v", logId, err) - return err - } - - d.SetId(helper.UInt64ToStr(deployRecordId)) - - return resourceTencentCloudSslDeployCertificateRecordRetryRead(d, meta) -} - -func resourceTencentCloudSslDeployCertificateRecordRetryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslDeployCertificateRecordRetryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation.go b/tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation.go deleted file mode 100644 index 1eaa7115cd..0000000000 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation.go +++ /dev/null @@ -1,80 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslDeployCertificateRecordRollbackOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslDeployCertificateRecordRollbackCreate, - Read: resourceTencentCloudSslDeployCertificateRecordRollbackRead, - Delete: resourceTencentCloudSslDeployCertificateRecordRollbackDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "deploy_record_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Deployment record ID to be rollback.", - }, - }, - } -} - -func resourceTencentCloudSslDeployCertificateRecordRollbackCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewDeployCertificateRecordRollbackRequest() - response = ssl.NewDeployCertificateRecordRollbackResponse() - deployRecordId int64 - ) - if v, _ := d.GetOk("deploy_record_id"); v != nil { - request.DeployRecordId = helper.IntInt64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().DeployCertificateRecordRollback(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate ssl deployCertificateRecordRollback failed, reason:%+v", logId, err) - return err - } - if response != nil && response.Response != nil && response.Response.DeployRecordId != nil { - deployRecordId = *response.Response.DeployRecordId - } - d.SetId(helper.Int64ToStr(deployRecordId)) - - return resourceTencentCloudSslDeployCertificateRecordRollbackRead(d, meta) -} - -func resourceTencentCloudSslDeployCertificateRecordRollbackRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslDeployCertificateRecordRollbackDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_download_certificate_operation.go b/tencentcloud/resource_tc_ssl_download_certificate_operation.go deleted file mode 100644 index 873bff557d..0000000000 --- a/tencentcloud/resource_tc_ssl_download_certificate_operation.go +++ /dev/null @@ -1,105 +0,0 @@ -package tencentcloud - -import ( - "encoding/base64" - "io/ioutil" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslDownloadCertificateOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslDownloadCertificateCreate, - Read: resourceTencentCloudSslDownloadCertificateRead, - Delete: resourceTencentCloudSslDownloadCertificateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "certificate_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID.", - }, - "output_path": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID.", - }, - }, - } -} - -func resourceTencentCloudSslDownloadCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_download_certificate_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewDownloadCertificateRequest() - response = ssl.NewDownloadCertificateResponse() - certificateId uint64 - outputPath string - ) - if v, ok := d.GetOk("certificate_id"); ok { - certificateId = helper.StrToUInt64(v.(string)) - request.CertificateId = helper.String(v.(string)) - } - if v, ok := d.GetOk("output_path"); ok { - outputPath = v.(string) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().DownloadCertificate(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate ssl downloadCertificate failed, reason:%+v", logId, err) - return err - } - - if response != nil && response.Response.Content != nil { - zipBytes, err := base64.StdEncoding.DecodeString(*response.Response.Content) - if err != nil { - return err - } - - // 保存为Zip文件 - err = ioutil.WriteFile("output.zip", zipBytes, 0644) - if err != nil { - return err - } - - log.Printf("Zip file saved successfully. certificateId[%v] path[%s]", certificateId, outputPath) - } - d.SetId(helper.UInt64ToStr(certificateId)) - - return resourceTencentCloudSslDownloadCertificateRead(d, meta) -} - -func resourceTencentCloudSslDownloadCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_download_certificate_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslDownloadCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_download_certificate_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_revoke_certificate_operation.go b/tencentcloud/resource_tc_ssl_revoke_certificate_operation.go deleted file mode 100644 index 7b2ca94e90..0000000000 --- a/tencentcloud/resource_tc_ssl_revoke_certificate_operation.go +++ /dev/null @@ -1,94 +0,0 @@ -package tencentcloud - -import ( - "log" - - "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" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslRevokeCertificateOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslRevokeCertificateCreate, - Read: resourceTencentCloudSslRevokeCertificateRead, - Delete: resourceTencentCloudSslRevokeCertificateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "certificate_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID.", - }, - - "reason": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Reasons for revoking certificate.", - }, - }, - } -} - -func resourceTencentCloudSslRevokeCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewRevokeCertificateRequest() - certificateId string - ) - if v, ok := d.GetOk("certificate_id"); ok { - certificateId = v.(string) - request.CertificateId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("reason"); ok { - request.Reason = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().RevokeCertificate(request) - if e != nil { - if sdkerr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { - if sdkerr.Code == "FailedOperation.OrderAlreadyReplaced" { - return 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 ssl revokeCertificate failed, reason:%+v", logId, err) - return err - } - - d.SetId(certificateId) - - return resourceTencentCloudSslRevokeCertificateRead(d, meta) -} - -func resourceTencentCloudSslRevokeCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslRevokeCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation.go b/tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation.go deleted file mode 100644 index 28e3510b5b..0000000000 --- a/tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation.go +++ /dev/null @@ -1,88 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslUpdateCertificateRecordRetryOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslUpdateCertificateRecordRetryCreate, - Read: resourceTencentCloudSslUpdateCertificateRecordRetryRead, - Delete: resourceTencentCloudSslUpdateCertificateRecordRetryDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "deploy_record_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Deployment record ID to be retried.", - }, - - "deploy_record_detail_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Deployment record details ID to be retried.", - }, - }, - } -} - -func resourceTencentCloudSslUpdateCertificateRecordRetryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewUpdateCertificateRecordRetryRequest() - deployRecordId int - ) - if v, _ := d.GetOk("deploy_record_id"); v != nil { - deployRecordId = v.(int) - request.DeployRecordId = helper.IntInt64(v.(int)) - } - - if v, _ := d.GetOk("deploy_record_detail_id"); v != nil { - request.DeployRecordDetailId = helper.IntInt64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().UpdateCertificateRecordRetry(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 ssl updateCertificateRecordRetry failed, reason:%+v", logId, err) - return err - } - - d.SetId(helper.IntToStr(deployRecordId)) - - return resourceTencentCloudSslUpdateCertificateRecordRetryRead(d, meta) -} - -func resourceTencentCloudSslUpdateCertificateRecordRetryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslUpdateCertificateRecordRetryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation.go b/tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation.go deleted file mode 100644 index 38e00a3b39..0000000000 --- a/tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation.go +++ /dev/null @@ -1,80 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslUpdateCertificateRecordRollbackOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslUpdateCertificateRecordRollbackCreate, - Read: resourceTencentCloudSslUpdateCertificateRecordRollbackRead, - Delete: resourceTencentCloudSslUpdateCertificateRecordRollbackDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "deploy_record_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Deployment record ID to be rolled back.", - }, - }, - } -} - -func resourceTencentCloudSslUpdateCertificateRecordRollbackCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewUpdateCertificateRecordRollbackRequest() - response = ssl.NewUpdateCertificateRecordRollbackResponse() - deployRecordId int64 - ) - if v, _ := d.GetOk("deploy_record_id"); v != nil { - request.DeployRecordId = helper.StrToInt64Point(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().UpdateCertificateRecordRollback(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate ssl updateCertificateRecordRollback failed, reason:%+v", logId, err) - return err - } - if response != nil && response.Response != nil && response.Response.DeployRecordId != nil { - deployRecordId = *response.Response.DeployRecordId - } - d.SetId(helper.Int64ToStr(deployRecordId)) - - return resourceTencentCloudSslUpdateCertificateRecordRollbackRead(d, meta) -} - -func resourceTencentCloudSslUpdateCertificateRecordRollbackRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslUpdateCertificateRecordRollbackDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssl_upload_revoke_letter_operation.go b/tencentcloud/resource_tc_ssl_upload_revoke_letter_operation.go deleted file mode 100644 index de3b5f8a4b..0000000000 --- a/tencentcloud/resource_tc_ssl_upload_revoke_letter_operation.go +++ /dev/null @@ -1,91 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSslUploadRevokeLetterOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSslUploadRevokeLetterCreate, - Read: resourceTencentCloudSslUploadRevokeLetterRead, - Delete: resourceTencentCloudSslUploadRevokeLetterDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "certificate_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID.", - }, - - "revoke_letter": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "The format of the base64-encoded certificate confirmation letter file should be jpg, jpeg, png, or pdf, and the size should be between 1kb and 1.4M.", - }, - }, - } -} - -func resourceTencentCloudSslUploadRevokeLetterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = ssl.NewUploadRevokeLetterRequest() - response = ssl.NewUploadRevokeLetterResponse() - certificateId string - ) - if v, ok := d.GetOk("certificate_id"); ok { - request.CertificateId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("revoke_letter"); ok { - request.RevokeLetter = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().UploadRevokeLetter(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate ssl uploadRevokeLetter failed, reason:%+v", logId, err) - return err - } - if response != nil && response.Response != nil && response.Response.CertificateId != nil { - certificateId = *response.Response.CertificateId - } - d.SetId(certificateId) - - return resourceTencentCloudSslUploadRevokeLetterRead(d, meta) -} - -func resourceTencentCloudSslUploadRevokeLetterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSslUploadRevokeLetterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssm_rotate_product_secret.go b/tencentcloud/resource_tc_ssm_rotate_product_secret.go deleted file mode 100644 index 2a2171a95b..0000000000 --- a/tencentcloud/resource_tc_ssm_rotate_product_secret.go +++ /dev/null @@ -1,105 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSsmRotateProductSecret() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSsmRotateProductSecretCreate, - Read: resourceTencentCloudSsmRotateProductSecretRead, - Delete: resourceTencentCloudSsmRotateProductSecretDelete, - - Schema: map[string]*schema.Schema{ - "secret_name": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Secret name.", - }, - }, - } -} - -func resourceTencentCloudSsmRotateProductSecretCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_rotate_product_secret.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = ssm.NewRotateProductSecretRequest() - response = ssm.NewRotateProductSecretResponse() - asyncRequest = ssm.NewDescribeAsyncRequestInfoRequest() - secretName string - flowId int64 - ) - - if v, ok := d.GetOk("secret_name"); ok { - request.SecretName = helper.String(v.(string)) - secretName = v.(string) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().RotateProductSecret(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()) - } - - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s operate ssm rotateProductSecret failed, reason:%+v", logId, err) - return err - } - - d.SetId(secretName) - - // wait - flowId = *response.Response.FlowID - asyncRequest.FlowID = &flowId - err = resource.Retry(writeRetryTimeout*3, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().DescribeAsyncRequestInfo(asyncRequest) - 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()) - } - - if *result.Response.TaskStatus == 1 { - return nil - } - - return resource.RetryableError(fmt.Errorf("operate ssm describeAsyncRequestInfo status is %d", *result.Response.TaskStatus)) - }) - - if err != nil { - log.Printf("[CRITAL]%s operate ssm describeAsyncRequestInfo failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudSsmRotateProductSecretRead(d, meta) -} - -func resourceTencentCloudSsmRotateProductSecretRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_rotate_product_secret.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudSsmRotateProductSecretDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_rotate_product_secret.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_ssm_secret.go b/tencentcloud/resource_tc_ssm_secret.go deleted file mode 100644 index 5def8e96bf..0000000000 --- a/tencentcloud/resource_tc_ssm_secret.go +++ /dev/null @@ -1,402 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" - - "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" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSsmSecret() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSsmSecretCreate, - Read: resourceTencentCloudSsmSecretRead, - Update: resourceTencentCloudSsmSecretUpdate, - Delete: resourceTencentCloudSsmSecretDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "secret_name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of secret which cannot be repeated in the same region. The maximum length is 128 bytes. The name can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", - }, - "description": { - Type: schema.TypeString, - Optional: true, - Description: "Description of secret. The maximum is 2048 bytes.", - }, - "kms_key_id": { - Type: schema.TypeString, - ForceNew: true, - Optional: true, - Computed: true, - Description: "KMS keyId used to encrypt secret. If it is empty, it means that the CMK created by SSM for you by default is used for encryption. You can also specify the KMS CMK created by yourself in the same region for encryption.", - }, - "secret_type": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "Type of secret. `0`: user-defined secret. `4`: redis secret. Default is `0`.", - }, - "additional_config": { - Type: schema.TypeString, - Optional: true, - Description: "Additional config for specific secret types in JSON string format.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tags of secret.", - }, - "is_enabled": { - Type: schema.TypeBool, - Optional: true, - Default: true, - Description: "Specify whether to enable secret. Default value is `true`.", - }, - "recovery_window_in_days": { - Type: schema.TypeInt, - Optional: true, - Default: 0, - Description: "Specify the scheduled deletion date. Default value is `0` that means to delete immediately. 1-30 means the number of days reserved, completely deleted after this date.", - }, - "status": { - Type: schema.TypeString, - Computed: true, - Description: "Status of secret.", - }, - }, - } -} - -func resourceTencentCloudSsmSecretCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret.create")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - request = ssm.NewCreateSecretRequest() - response = ssm.NewCreateSecretResponse() - secretInfo *SecretInfo - outErr, inErr error - secretName string - secretType int - ) - - if v, ok := d.GetOk("secret_name"); ok { - request.SecretName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kms_key_id"); ok { - request.KmsKeyId = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("secret_type"); ok { - secretType = v.(int) - request.SecretType = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("additional_config"); ok { - request.AdditionalConfig = helper.String(v.(string)) - } - - if secretType == 0 { - request.VersionId = helper.String("default") - request.SecretString = helper.String("default") - } - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().CreateSecret(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()) - } - - response = result - return nil - }) - - if outErr != nil { - return outErr - } - - secretName = *response.Response.SecretName - d.SetId(secretName) - - //delete default version info - if secretType == 0 { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = ssmService.DeleteSecretVersion(ctx, secretName, "default") - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - } - - if isEnabled := d.Get("is_enabled").(bool); !isEnabled { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = ssmService.DisableSecret(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - } - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudSsmSecretRead(d, meta) -} - -func resourceTencentCloudSsmSecretRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret.read")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretName = d.Id() - outErr, inErr error - secretInfo *SecretInfo - ) - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - if secretInfo == nil { - d.SetId("") - return nil - } - - _ = d.Set("secret_name", secretInfo.secretName) - _ = d.Set("description", secretInfo.description) - _ = d.Set("kms_key_id", secretInfo.kmsKeyId) - _ = d.Set("secret_type", secretInfo.secretType) - _ = d.Set("additional_config", secretInfo.additionalConfig) - _ = d.Set("status", secretInfo.status) - - if secretInfo.status == SSM_STATUS_ENABLED { - _ = d.Set("is_enabled", true) - } else { - _ = d.Set("is_enabled", false) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err != nil { - return err - } - - _ = d.Set("tags", tags) - return nil -} - -func resourceTencentCloudSsmSecretUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret.update")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretName = d.Id() - ) - - d.Partial(true) - - immutableArgs := []string{ - "secret_type", - "additional_config", - } - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("description") { - description := d.Get("description").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.UpdateSecretDescription(ctx, secretName, description) - if e != nil { - return retryError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify SSM secret description failed, reason:%+v", logId, err) - return err - } - - } - - if d.HasChange("is_enabled") { - isEnabled := d.Get("is_enabled").(bool) - err := updateSecretIsEnabled(ctx, ssmService, secretName, isEnabled) - if err != nil { - log.Printf("[CRITAL]%s modify SSM secret status failed, reason:%+v", logId, err) - return err - } - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - - oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - secretInfo, err := ssmService.DescribeSecretByName(ctx, secretName) - if err != nil { - return err - } - - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - - } - - d.Partial(false) - return resourceTencentCloudSsmSecretRead(d, meta) -} - -func resourceTencentCloudSsmSecretDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret.delete")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretName = d.Id() - ) - - recoveryWindowInDays := d.Get("recovery_window_in_days").(int) - isEnabled := d.Get("is_enabled").(bool) - if isEnabled { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.DisableSecret(ctx, secretName) - if e != nil { - return retryError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify SSM secret status failed, reason:%+v", logId, err) - return err - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.DeleteSecret(ctx, secretName, uint64(recoveryWindowInDays)) - if e != nil { - return retryError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete SSM secret failed, reason:%+v", logId, err) - return err - } - - return resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, e := ssmService.DescribeSecretByName(ctx, secretName) - if e != nil { - if sdkError, ok := e.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { - return nil - } - - return retryError(err) - } - - if secretInfo.status == SSM_STATUS_PENDINGDELETE { - return nil - } - - return resource.RetryableError(fmt.Errorf("delete fail")) - }) -} - -func updateSecretIsEnabled(ctx context.Context, ssmService SsmService, secretName string, isEnabled bool) error { - var err error - if isEnabled { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.EnableSecret(ctx, secretName) - if e != nil { - return retryError(e) - } - return nil - }) - - } else { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.DisableSecret(ctx, secretName) - if e != nil { - return retryError(e) - } - return nil - }) - } - return err -} diff --git a/tencentcloud/resource_tc_ssm_secret_test.go b/tencentcloud/resource_tc_ssm_secret_test.go deleted file mode 100644 index cf84757543..0000000000 --- a/tencentcloud/resource_tc_ssm_secret_test.go +++ /dev/null @@ -1,179 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - "time" - - ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_ssm_secret - resource.AddTestSweepers("tencentcloud_ssm_secret", &resource.Sweeper{ - Name: "tencentcloud_ssm_secret", - F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SsmService{client} - - secrets, err := service.DescribeSecretsByFilter(ctx, nil) - - if err != nil { - return err - } - - for i := range secrets { - ss := secrets[i] - name := *ss.SecretName - createTime := ss.CreateTime - created := time.Time{} - if createTime != nil { - created = time.Unix(int64(*createTime), 0) - } - if isResourcePersist(name, &created) { - continue - } - err = service.DisableSecret(ctx, name) - if err != nil { - continue - } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - err := service.DeleteSecret(ctx, name, 0) - if err != nil { - return retryError(err, ssm.FAILEDOPERATION) - } - return nil - }) - if err != nil { - continue - } - } - - return nil - }, - }) -} - -// go test -i; go test -test.run TestAccTencentCloudSsmSecret_basic -v -func TestAccTencentCloudSsmSecret_basic(t *testing.T) { - t.Parallel() - resourceName := "tencentcloud_ssm_secret.example" - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckSsmSecretDestroy, - Steps: []resource.TestStep{ - { - Config: TestAccTencentCloudSsmSecretBasic, - Check: resource.ComposeTestCheckFunc( - testAccCheckSsmSecretExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "secret_name", "tf-example"), - resource.TestCheckResourceAttr(resourceName, "is_enabled", "false"), - resource.TestCheckResourceAttr(resourceName, "description", "desc."), - resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), - resource.TestCheckResourceAttrSet(resourceName, "status"), - ), - }, - { - Config: TestAccTencentCloudSsmSecretBasicUpdate, - Check: resource.ComposeTestCheckFunc( - testAccCheckSsmSecretExists(resourceName), - resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"), - resource.TestCheckResourceAttr(resourceName, "description", "update desc."), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"recovery_window_in_days"}, - }, - }, - }) -} - -func testAccCheckSsmSecretDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - ssmService := SsmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_ssm_secret" { - continue - } - - secret, err := ssmService.DescribeSecretByName(ctx, rs.Primary.ID) - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == "ResourceNotFound" { - return nil - } - } - return err - } - if secret != nil && secret.status != SSM_STATUS_PENDINGDELETE { - return fmt.Errorf("[CHECK][SSM secret][Destroy] check: SSM secret still exists: %s", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckSsmSecretExists(name string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[name] - if !ok { - return fmt.Errorf("[CHECK][SSM secret][Exists] check: SSM secret %s is not found", name) - } - if rs.Primary.ID == "" { - return fmt.Errorf("[CHECK][SSM secret][Exists] check:SSM secret id is not set") - } - ssmService := SsmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - secret, err := ssmService.DescribeSecretByName(ctx, rs.Primary.ID) - if err != nil { - return err - } - if secret == nil { - return fmt.Errorf("[CHECK][SSM secret][Exists] id %s is not exist", rs.Primary.ID) - } - return nil - } -} - -const TestAccTencentCloudSsmSecretBasic = ` -resource "tencentcloud_ssm_secret" "example" { - secret_name = "tf-example" - description = "desc." - is_enabled = false - - tags = { - createBy = "terraform" - } -} -` - -const TestAccTencentCloudSsmSecretBasicUpdate = ` -resource "tencentcloud_ssm_secret" "example" { - secret_name = "tf-example" - description = "update desc." - is_enabled = true - - tags = { - createBy = "terraform" - } -} -` diff --git a/tencentcloud/resource_tc_ssm_secret_version.go b/tencentcloud/resource_tc_ssm_secret_version.go deleted file mode 100644 index 77cf67bed3..0000000000 --- a/tencentcloud/resource_tc_ssm_secret_version.go +++ /dev/null @@ -1,283 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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" -) - -func resourceTencentCloudSsmSecretVersion() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSsmSecretVersionCreate, - Read: resourceTencentCloudSsmSecretVersionRead, - Update: resourceTencentCloudSsmSecretVersionUpdate, - Delete: resourceTencentCloudSsmSecretVersionDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "secret_name": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Name of secret which cannot be repeated in the same region. The maximum length is 128 bytes. The name can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", - }, - "version_id": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Version of secret. The maximum length is 64 bytes. The version_id can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", - }, - "secret_binary": { - Type: schema.TypeString, - Optional: true, - ExactlyOneOf: []string{"secret_string"}, - Description: "The base64-encoded binary secret. secret_binary and secret_string must be set only one, and the maximum support is 4096 bytes. When secret status is `Disabled`, this field will not update anymore.", - }, - "secret_string": { - Type: schema.TypeString, - Optional: true, - ExactlyOneOf: []string{"secret_binary"}, - Description: "The string text of secret. secret_binary and secret_string must be set only one, and the maximum support is 4096 bytes. When secret status is `Disabled`, this field will not update anymore.", - }, - }, - } -} - -func resourceTencentCloudSsmSecretVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret_version.create")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr, inErr error - secretName, versionId string - ) - - param := make(map[string]interface{}) - param["secret_name"] = d.Get("secret_name").(string) - param["version_id"] = d.Get("version_id").(string) - if v, ok := d.GetOk("secret_binary"); ok { - param["secret_binary"] = v.(string) - } - - if v, ok := d.GetOk("secret_string"); ok { - param["secret_string"] = v.(string) - } - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - secretName, versionId, inErr = ssmService.PutSecretValue(ctx, param) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - d.SetId(strings.Join([]string{secretName, versionId}, FILED_SP)) - return resourceTencentCloudSsmSecretVersionRead(d, meta) -} - -func resourceTencentCloudSsmSecretVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret_version.read")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr, inErr error - secretInfo *SecretInfo - ) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) - } - secretName := ids[0] - versionId := ids[1] - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - var versionIds []string - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - versionIds, inErr = ssmService.DescribeSecretVersionIdsByName(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - var hasVersionId bool - for _, id := range versionIds { - if id == versionId { - hasVersionId = true - break - } - } - - if !hasVersionId { - d.SetId("") - return nil - } - - if secretInfo.status == SSM_STATUS_ENABLED { - var secretVersionInfo *SecretVersionInfo - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretVersionInfo, inErr = ssmService.DescribeSecretVersion(ctx, secretName, versionId) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - _ = d.Set("secret_name", secretVersionInfo.secretName) - _ = d.Set("version_id", secretVersionInfo.versionId) - _ = d.Set("secret_binary", secretVersionInfo.secretBinary) - _ = d.Set("secret_string", secretVersionInfo.secretString) - } - - return nil -} - -func resourceTencentCloudSsmSecretVersionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret_version.update")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr, inErr error - secretInfo *SecretInfo - ) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) - } - secretName := ids[0] - versionId := ids[1] - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) - if inErr != nil { - return retryError(inErr) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - if secretInfo.status == SSM_STATUS_ENABLED { - d.Partial(true) - - param := make(map[string]interface{}) - param["secret_name"] = secretName - param["version_id"] = versionId - if v, ok := d.GetOk("secret_binary"); ok { - param["secret_binary"] = v.(string) - } - - if v, ok := d.GetOk("secret_string"); ok { - param["secret_string"] = v.(string) - } - - if d.HasChange("secret_binary") || d.HasChange("secret_string") { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.UpdateSecret(ctx, param) - if e != nil { - return retryError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify SSM secret content failed, reason:%+v", logId, err) - return err - } - } - - d.Partial(false) - } - - return resourceTencentCloudSsmSecretVersionRead(d, meta) -} - -func resourceTencentCloudSsmSecretVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_secret_version.delete")() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - ids := strings.Split(d.Id(), FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) - } - secretName := ids[0] - versionId := ids[1] - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - e := ssmService.DeleteSecretVersion(ctx, secretName, versionId) - if e != nil { - return retryError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s delete SSM secret version failed, reason:%+v", logId, err) - return err - } - - return resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := ssmService.DescribeSecretVersion(ctx, secretName, versionId) - if e != nil { - if sdkError, ok := e.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { - return nil - } - - return retryError(err) - } - - return resource.RetryableError(fmt.Errorf("delete fail")) - }) -} diff --git a/tencentcloud/resource_tc_ssm_ssh_key_pair_secret.go b/tencentcloud/resource_tc_ssm_ssh_key_pair_secret.go deleted file mode 100644 index 7b164e6a09..0000000000 --- a/tencentcloud/resource_tc_ssm_ssh_key_pair_secret.go +++ /dev/null @@ -1,368 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudSsmSshKeyPairSecret() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudSsmSshKeyPairSecretCreate, - Read: resourceTencentCloudSsmSshKeyPairSecretRead, - Update: resourceTencentCloudSsmSshKeyPairSecretUpdate, - Delete: resourceTencentCloudSsmSshKeyPairSecretDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "secret_name": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "Secret name, which must be unique in the same region. It can contain 128 bytes of letters, digits, hyphens and underscores and must begin with a letter or digit.", - }, - "description": { - Optional: true, - Type: schema.TypeString, - Description: "Description, such as what it is used for. It contains up to 2,048 bytes.", - }, - "kms_key_id": { - Optional: true, - Type: schema.TypeString, - Description: "Specifies a KMS CMK to encrypt the secret.If this parameter is left empty, the CMK created by Secrets Manager by default will be used for encryption.You can also specify a custom KMS CMK created in the same region for encryption.", - }, - "project_id": { - Required: true, - Type: schema.TypeInt, - Description: "ID of the project to which the created SSH key belongs.", - }, - "ssh_key_name": { - Optional: true, - Type: schema.TypeString, - Description: "Name of the SSH key pair, which only contains digits, letters and underscores and must start with a digit or letter. The maximum length is 25 characters.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tags of secret.", - }, - "status": { - Optional: true, - Type: schema.TypeString, - Computed: true, - ValidateFunc: validateAllowedStringValue([]string{"Enabled", "Disabled"}), - Description: "Enable or Disable Secret. Valid values is `Enabled` or `Disabled`. Default is `Enabled`.", - }, - "clean_ssh_key": { - Optional: true, - Type: schema.TypeBool, - Description: "Specifies whether to delete the SSH key from both the secret and the SSH key list in the CVM console. This field is only take effect when delete SSH key secrets. Valid values: " + - "`True`: deletes SSH key from both the secret and SSH key list in the CVM console. Note that the deletion will fail if the SSH key is already bound to a CVM instance." + - "`False`: only deletes the SSH key information in the secret.", - }, - "create_time": { - Type: schema.TypeInt, - Computed: true, - Description: "Credential creation time in UNIX timestamp format.", - }, - "secret_type": { - Type: schema.TypeInt, - Computed: true, - Description: "`0`: user-defined secret. `1`: Tencent Cloud services secret. `2`: SSH key secret. `3`: Tencent Cloud API key secret. Note: this field may return `null`, indicating that no valid values can be obtained.", - }, - }, - } -} - -func resourceTencentCloudSsmSshKeyPairSecretCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - request = ssm.NewCreateSSHKeyPairSecretRequest() - response = ssm.NewCreateSSHKeyPairSecretResponse() - secretInfo *SecretInfo - secretName string - ) - - if v, ok := d.GetOk("secret_name"); ok { - request.SecretName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOk("kms_key_id"); ok { - request.KmsKeyId = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("project_id"); ok { - request.ProjectId = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("ssh_key_name"); ok { - request.SSHKeyName = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().CreateSSHKeyPairSecret(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()) - } - - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create ssm sshKeyPairSecret failed, reason:%+v", logId, err) - return err - } - - secretName = *response.Response.SecretName - d.SetId(secretName) - - // update status if disabled - if v, ok := d.GetOk("status"); ok { - status := v.(string) - if status == "Disabled" { - err = ssmService.DisableSecret(ctx, secretName) - if err != nil { - return err - } - } - } - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, err = ssmService.DescribeSecretByName(ctx, secretName) - if err != nil { - return retryError(err) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err = tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudSsmSshKeyPairSecretRead(d, meta) -} - -func resourceTencentCloudSsmSshKeyPairSecretRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretInfo *SecretInfo - secretName = d.Id() - ) - - sshKeyPairSecret, err := service.DescribeSecretById(ctx, secretName, 2) - if err != nil { - return err - } - - if sshKeyPairSecret == nil { - d.SetId("") - log.Printf("[WARN]%s resource `SsmSshKeyPairSecret` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if sshKeyPairSecret.SecretName != nil { - _ = d.Set("secret_name", sshKeyPairSecret.SecretName) - } - - if sshKeyPairSecret.ProjectID != nil { - _ = d.Set("project_id", sshKeyPairSecret.ProjectID) - } - - if sshKeyPairSecret.Description != nil { - _ = d.Set("description", sshKeyPairSecret.Description) - } - - if sshKeyPairSecret.KmsKeyId != nil { - _ = d.Set("kms_key_id", sshKeyPairSecret.KmsKeyId) - } - - if sshKeyPairSecret.ResourceName != nil { - _ = d.Set("ssh_key_name", sshKeyPairSecret.ResourceName) - } - - if sshKeyPairSecret.Status != nil { - _ = d.Set("status", sshKeyPairSecret.Status) - } - - if sshKeyPairSecret.CreateTime != nil { - _ = d.Set("create_time", sshKeyPairSecret.CreateTime) - } - - if sshKeyPairSecret.SecretType != nil { - _ = d.Set("secret_type", sshKeyPairSecret.SecretType) - } - - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { - secretInfo, err = service.DescribeSecretByName(ctx, secretName) - if err != nil { - return retryError(err) - } - - return nil - }) - - if outErr != nil { - return outErr - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err != nil { - return err - } - - _ = d.Set("tags", tags) - return nil -} - -func resourceTencentCloudSsmSshKeyPairSecretUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretName = d.Id() - ) - - immutableArgs := []string{ - "project_id", - "kms_key_id", - "ssh_key_name", - } - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("description") { - request := ssm.NewUpdateDescriptionRequest() - request.SecretName = &secretName - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().UpdateDescription(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 update ssm sshKeyPairSecret failed, reason:%+v", logId, err) - return err - } - } - - if d.HasChange("status") { - service := SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - - if v, ok := d.GetOk("status"); ok { - status := v.(string) - if status == "Disabled" { - err := service.DisableSecret(ctx, secretName) - if err != nil { - return err - } - } else { - err := service.EnableSecret(ctx, secretName) - if err != nil { - return err - } - } - } - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - - oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - secretInfo, err := ssmService.DescribeSecretByName(ctx, secretName) - if err != nil { - return err - } - - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) - if err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - - } - - return resourceTencentCloudSsmSshKeyPairSecretRead(d, meta) -} - -func resourceTencentCloudSsmSshKeyPairSecretDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} - secretName = d.Id() - ) - - // disable before destroy - err := service.DisableSecret(ctx, secretName) - if err != nil { - return err - } - - var cleanSSHKey *bool - - if v, ok := d.GetOkExists("clean_ssh_key"); ok { - cleanSSHKey = helper.Bool(v.(bool)) - } - - if err = service.DeleteSsmSshKeyPairSecretById(ctx, secretName, cleanSSHKey); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tag.go b/tencentcloud/resource_tc_tag.go deleted file mode 100644 index 7fb17109d0..0000000000 --- a/tencentcloud/resource_tc_tag.go +++ /dev/null @@ -1,140 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTag() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTagResourceCreate, - Read: resourceTencentCloudTagResourceRead, - Delete: resourceTencentCloudTagResourceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "tag_key": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "tag key.", - }, - - "tag_value": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "tag value.", - }, - }, - } -} - -func resourceTencentCloudTagResourceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tag.NewCreateTagRequest() - tagKey string - tagValue string - ) - if v, ok := d.GetOk("tag_key"); ok { - tagKey = v.(string) - request.TagKey = helper.String(v.(string)) - } - - if v, ok := d.GetOk("tag_value"); ok { - tagValue = v.(string) - request.TagValue = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTagClient().CreateTag(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 tag tag failed, reason:%+v", logId, err) - return err - } - - d.SetId(tagKey + FILED_SP + tagValue) - - return resourceTencentCloudTagResourceRead(d, meta) -} - -func resourceTencentCloudTagResourceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - tagKey := idSplit[0] - tagValue := idSplit[1] - - tagRes, err := service.DescribeTagResourceById(ctx, tagKey, tagValue) - if err != nil { - return err - } - - if tagRes == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TagTag` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if tagRes.TagKey != nil { - _ = d.Set("tag_key", tagRes.TagKey) - } - - if tagRes.TagValue != nil { - _ = d.Set("tag_value", tagRes.TagValue) - } - - return nil -} - -func resourceTencentCloudTagResourceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - tagKey := idSplit[0] - tagValue := idSplit[1] - - if err := service.DeleteTagResourceById(ctx, tagKey, tagValue); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tag_attachment.go b/tencentcloud/resource_tc_tag_attachment.go deleted file mode 100644 index 4522922c8a..0000000000 --- a/tencentcloud/resource_tc_tag_attachment.go +++ /dev/null @@ -1,161 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTagAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTagAttachmentCreate, - Read: resourceTencentCloudTagAttachmentRead, - Delete: resourceTencentCloudTagAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "tag_key": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "tag key.", - }, - - "tag_value": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "tag value.", - }, - - "resource": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "[Six-segment description of resources](https://cloud.tencent.com/document/product/598/10606).", - }, - }, - } -} - -func resourceTencentCloudTagAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag_attachment.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tag.NewAddResourceTagRequest() - tagKey string - tagValue string - resourceId string - ) - if v, ok := d.GetOk("tag_key"); ok { - tagKey = v.(string) - request.TagKey = helper.String(v.(string)) - } - - if v, ok := d.GetOk("tag_value"); ok { - tagValue = v.(string) - request.TagValue = helper.String(v.(string)) - } - - if v, ok := d.GetOk("resource"); ok { - resourceId = v.(string) - request.Resource = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTagClient().AddResourceTag(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 tag tagAttachment failed, reason:%+v", logId, err) - return err - } - - d.SetId(tagKey + FILED_SP + tagValue + FILED_SP + resourceId) - - return resourceTencentCloudTagAttachmentRead(d, meta) -} - -func resourceTencentCloudTagAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - tagKey := idSplit[0] - tagValue := idSplit[1] - resource := idSplit[2] - - tagAttachment, err := service.DescribeTagTagAttachmentById(ctx, tagKey, tagValue, resource) - if err != nil { - return err - } - - if tagAttachment == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TagResourceTag` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - if len(tagAttachment.Tags) < 1 { - log.Printf("[WARN]%s resource `TagResourceTag` [%s] Tags is null, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - if tagAttachment.Tags[0].TagKey != nil { - _ = d.Set("tag_key", tagAttachment.Tags[0].TagKey) - } - - if tagAttachment.Tags[0].TagValue != nil { - _ = d.Set("tag_value", tagAttachment.Tags[0].TagValue) - } - - if tagAttachment.Resource != nil { - _ = d.Set("resource", tagAttachment.Resource) - } - - return nil -} - -func resourceTencentCloudTagAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tag_attachment.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - tagKey := idSplit[0] - resource := idSplit[2] - - if err := service.DeleteTagTagAttachmentById(ctx, tagKey, resource); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tag_attachment_test.go b/tencentcloud/resource_tc_tag_attachment_test.go deleted file mode 100644 index ed0e0d1ffa..0000000000 --- a/tencentcloud/resource_tc_tag_attachment_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTagAttachmentResource_basic -v -func TestAccTencentCloudTagAttachmentResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTagAttachmentDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTagResourceTag, - Check: resource.ComposeTestCheckFunc( - testAccCheckTagAttachmentExists("tencentcloud_tag_attachment.tag_attachment"), - resource.TestCheckResourceAttr("tencentcloud_tag_attachment.tag_attachment", "tag_key", "test_terraform_tagAttachment_key"), - resource.TestCheckResourceAttr("tencentcloud_tag_attachment.tag_attachment", "tag_value", "Terraform_tagAttachment_value"), - resource.TestCheckResourceAttrSet("tencentcloud_tag_attachment.tag_attachment", "resource")), - }, - { - ResourceName: "tencentcloud_tag_attachment.tag_attachment", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} -func testAccCheckTagAttachmentDestroy(s *terraform.State) error { - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tag_attachment" { - continue - } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TagService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - tags, err := service.DescribeTagTagAttachmentById(ctx, rs.Primary.Attributes["tag_key"], - rs.Primary.Attributes["tag_value"], rs.Primary.Attributes["resource"]) - if err != nil { - return err - } - if tags == nil { - return nil - } - return fmt.Errorf("delete tagAttachment key %s fail, still on server", rs.Primary.Attributes["tag_key"]) - } - return nil -} - -func testAccCheckTagAttachmentExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TagService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTagTagAttachmentById(ctx, rs.Primary.Attributes["tag_key"], - rs.Primary.Attributes["tag_value"], rs.Primary.Attributes["resource"]) - if err != nil { - return err - } - if res != nil && res.Resource != nil && res.Tags != nil { - return nil - } - - return fmt.Errorf("tagAttachment %s not found on server", rs.Primary.Attributes["tag_key"]) - } -} - -const testAccTagResourceTag = defaultCvmModificationVariable + ` -data "tencentcloud_user_info" "info" {} - -locals { - uin = data.tencentcloud_user_info.info.uin -} - -resource "tencentcloud_tag_attachment" "tag_attachment" { - tag_key = "test_terraform_tagAttachment_key" - tag_value = "Terraform_tagAttachment_value" - resource = "qcs::cvm:ap-guangzhou:uin/${local.uin}:instance/${var.cvm_id}" -} - -` diff --git a/tencentcloud/resource_tc_tag_test.go b/tencentcloud/resource_tc_tag_test.go deleted file mode 100644 index 3444efe8df..0000000000 --- a/tencentcloud/resource_tc_tag_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -//go test -i; go test -test.run TestAccTencentCloudTagResource_basic -v -func TestAccTencentCloudTagResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTagDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTag, - Check: resource.ComposeTestCheckFunc( - testAccCheckTagExists("tencentcloud_tag.tag"), - resource.TestCheckResourceAttr("tencentcloud_tag.tag", "tag_key", "test_terraform_tag_key"), - resource.TestCheckResourceAttr("tencentcloud_tag.tag", "tag_value", "Terraform_tag_value")), - }, - { - ResourceName: "tencentcloud_tag.tag", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTagDestroy(s *terraform.State) error { - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tag" { - continue - } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TagService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - tags, err := service.DescribeTagResourceById(ctx, rs.Primary.Attributes["tag_key"], rs.Primary.Attributes["tag_value"]) - if err != nil { - return err - } - if tags == nil { - return nil - } - return fmt.Errorf("delete tag key %s fail, still on server", rs.Primary.Attributes["tag_key"]) - } - return nil -} - -func testAccCheckTagExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TagService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - tags, err := service.DescribeTagResourceById(ctx, rs.Primary.Attributes["tag_key"], rs.Primary.Attributes["tag_value"]) - if err != nil { - return err - } - if tags != nil && tags.TagKey != nil && tags.TagValue != nil { - return nil - } - - return fmt.Errorf("tag %s not found on server", rs.Primary.Attributes["tag_key"]) - } -} - -const testAccTag = ` - -resource "tencentcloud_tag" "tag" { - tag_key = "test_terraform_tag_key" - tag_value = "Terraform_tag_value" -} - -` diff --git a/tencentcloud/resource_tc_tat_command_test.go b/tencentcloud/resource_tc_tat_command_test.go deleted file mode 100644 index 1d1cea80f1..0000000000 --- a/tencentcloud/resource_tc_tat_command_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTatCommandResource_basic -v -func TestAccTencentCloudTatCommandResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTatCommandeDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTatCommand, - Check: resource.ComposeTestCheckFunc( - testAccCheckTatCommandExists("tencentcloud_tat_command.command"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "username", "root"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "command_name", "ls"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "content", "ls"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "description", "shell desc"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "command_type", "SHELL"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "working_directory", "/root"), - resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "timeout", "50"), - ), - }, - { - ResourceName: "tencentcloud_tat_command.command", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTatCommandeDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TatService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tat_command" { - continue - } - - command, err := service.DescribeTatCommand(ctx, rs.Primary.ID) - if command != nil { - return fmt.Errorf("tat command %s still exists", rs.Primary.ID) - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTatCommandExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TatService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - command, err := service.DescribeTatCommand(ctx, rs.Primary.ID) - if command == nil { - return fmt.Errorf("tat command %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTatCommand = ` - -resource "tencentcloud_tat_command" "command" { - username = "root" - command_name = "ls" - content = "ls" - description = "shell desc" - command_type = "SHELL" - working_directory = "/root" - timeout = 50 -} - -` diff --git a/tencentcloud/resource_tc_tat_invoker_config.go b/tencentcloud/resource_tc_tat_invoker_config.go deleted file mode 100644 index dc3f1434ff..0000000000 --- a/tencentcloud/resource_tc_tat_invoker_config.go +++ /dev/null @@ -1,143 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" -) - -func resourceTencentCloudTatInvokerConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTatInvokerConfigCreate, - Read: resourceTencentCloudTatInvokerConfigRead, - Update: resourceTencentCloudTatInvokerConfigUpdate, - Delete: resourceTencentCloudTatInvokerConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "invoker_id": { - Required: true, - Type: schema.TypeString, - Description: "ID of the invoker to be enabled.", - }, - - "invoker_status": { - Required: true, - Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"on", "off"}), - Description: "Invoker on and off state, Values: `on`, `off`.", - }, - }, - } -} - -func resourceTencentCloudTatInvokerConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker_config.create")() - defer inconsistentCheck(d, meta)() - - var ( - invokerId string - ) - if v, ok := d.GetOk("invoker_id"); ok { - invokerId = v.(string) - } - - d.SetId(invokerId) - - return resourceTencentCloudTatInvokerConfigUpdate(d, meta) -} - -func resourceTencentCloudTatInvokerConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TatService{client: meta.(*TencentCloudClient).apiV3Conn} - - invokerId := d.Id() - - invokerConfig, err := service.DescribeTatInvokerConfigById(ctx, invokerId) - if err != nil { - return err - } - - if invokerConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TatInvokerConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if invokerConfig.InvokerId != nil { - _ = d.Set("invoker_id", invokerConfig.InvokerId) - } - - if invokerConfig.Enable != nil && *invokerConfig.Enable { - _ = d.Set("invoker_status", "on") - } else { - _ = d.Set("invoker_status", "off") - } - - return nil -} - -func resourceTencentCloudTatInvokerConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - disableInvokerRequest = tat.NewDisableInvokerRequest() - enableInvokerRequest = tat.NewEnableInvokerRequest() - invokerId = d.Id() - err error - ) - - if v, ok := d.GetOk("invoker_status"); ok { - status := v.(string) - if status == "on" { - enableInvokerRequest.InvokerId = &invokerId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().EnableInvoker(enableInvokerRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableInvokerRequest.GetAction(), enableInvokerRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - } else { - disableInvokerRequest.InvokerId = &invokerId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().DisableInvoker(disableInvokerRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, disableInvokerRequest.GetAction(), disableInvokerRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - } - } - - if err != nil { - log.Printf("[CRITAL]%s update tat invokerConfig failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTatInvokerConfigRead(d, meta) -} - -func resourceTencentCloudTatInvokerConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tat_invoker_test.go b/tencentcloud/resource_tc_tat_invoker_test.go deleted file mode 100644 index 31e4b4f346..0000000000 --- a/tencentcloud/resource_tc_tat_invoker_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTatInvokerResource_basic -v -func TestAccTencentCloudTatInvokerResource_basic(t *testing.T) { - // t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTatInvokerDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTatInvoker, - Check: resource.ComposeTestCheckFunc( - testAccCheckTatInvokerExists("tencentcloud_tat_invoker.invoker"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "name", "invoker-test"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "type", "SCHEDULE"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "instance_ids.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "username", "root"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "schedule_settings.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "schedule_settings.0.policy", "ONCE"), - ), - }, - { - ResourceName: "tencentcloud_tat_invoker.invoker", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTatInvokerDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TatService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tat_invoker" { - continue - } - - invoker, err := service.DescribeTatInvoker(ctx, rs.Primary.ID) - if invoker != nil { - return fmt.Errorf("tat invoker %s still exists", rs.Primary.ID) - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTatInvokerExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TatService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - invoker, err := service.DescribeTatInvoker(ctx, rs.Primary.ID) - if invoker == nil { - return fmt.Errorf("tat invoker %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTatInvokerVar = ` -variable "instance_id" { - default = "` + defaultInstanceId + `" -} -` -const testAccTatInvoker = testAccTatInvokerVar + testAccTatCommand + ` - -resource "tencentcloud_tat_invoker" "invoker" { - name = "invoker-test" - type = "SCHEDULE" - command_id = tencentcloud_tat_command.command.id - instance_ids = [var.instance_id,] - username = "root" - # parameters = "" - schedule_settings { - policy = "ONCE" - # recurrence = "" - invoke_time = "2099-11-17T16:00:00Z" - - } - } - -` diff --git a/tencentcloud/resource_tc_tcaplus_tablegroup.go b/tencentcloud/resource_tc_tcaplus_tablegroup.go deleted file mode 100644 index 55cd2f9a3d..0000000000 --- a/tencentcloud/resource_tc_tcaplus_tablegroup.go +++ /dev/null @@ -1,183 +0,0 @@ -package tencentcloud - -import ( - "context" - "errors" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudTcaplusTableGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcaplusTableGroupCreate, - Read: resourceTencentCloudTcaplusTableGroupRead, - Update: resourceTencentCloudTcaplusTableGroupUpdate, - Delete: resourceTencentCloudTcaplusTableGroupDelete, - Schema: map[string]*schema.Schema{ - "cluster_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the TcaplusDB cluster to which the table group belongs.", - }, - "tablegroup_name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 30), - Description: "Name of the TcaplusDB table group. Name length should be between 1 and 30.", - }, - // Computed values. - "table_count": { - Type: schema.TypeInt, - Computed: true, - Description: "Number of tables.", - }, - "total_size": { - Type: schema.TypeInt, - Computed: true, - Description: "Total storage size (MB).", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time of the TcaplusDB table group.", - }, - }, - } -} - -func resourceTencentCloudTcaplusTableGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_tablegroup.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - clusterId = d.Get("cluster_id").(string) - groupName = d.Get("tablegroup_name").(string) - ) - groupId, err := tcaplusService.CreateGroup(ctx, clusterId, groupName) - if err != nil { - return err - } - d.SetId(fmt.Sprintf("%s:%s", clusterId, groupId)) - return resourceTencentCloudTcaplusTableGroupRead(d, meta) -} - -func resourceTencentCloudTcaplusTableGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_tablegroup.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} - - clusterId := d.Get("cluster_id").(string) - groupId := d.Id() - - info, has, err := tcaplusService.DescribeGroup(ctx, clusterId, groupId) - if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, err = tcaplusService.DescribeGroup(ctx, clusterId, groupId) - if err != nil { - return retryError(err) - } - return nil - }) - } - if err != nil { - return err - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("tablegroup_name", info.TableGroupName) - _ = d.Set("table_count", int(*info.TableCount)) - _ = d.Set("total_size", int(*info.TotalSize)) - _ = d.Set("create_time", info.CreatedTime) - - return nil -} - -func resourceTencentCloudTcaplusTableGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_tablegroup.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} - - clusterId := d.Get("cluster_id").(string) - groupId := d.Id() - - if d.HasChange("tablegroup_name") { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - err := tcaplusService.ModifyGroupName(ctx, clusterId, groupId, d.Get("tablegroup_name").(string)) - if err != nil { - return retryError(err) - } - return nil - }) - if err != nil { - return err - } - } - return resourceTencentCloudTcaplusTableGroupRead(d, meta) -} - -func resourceTencentCloudTcaplusTableGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_tablegroup.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} - - clusterId := d.Get("cluster_id").(string) - groupId := d.Id() - - err := tcaplusService.DeleteGroup(ctx, clusterId, groupId) - if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - err = tcaplusService.DeleteGroup(ctx, clusterId, groupId) - if err != nil { - return retryError(err) - } - return nil - }) - } - - if err != nil { - return err - } - - _, has, err := tcaplusService.DescribeGroup(ctx, clusterId, groupId) - if err != nil || has { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, err = tcaplusService.DescribeGroup(ctx, clusterId, groupId) - if err != nil { - return retryError(err) - } - if has { - err = fmt.Errorf("delete group fail, group still exist from sdk DescribeGroup") - return resource.RetryableError(err) - } - return nil - }) - } - if err != nil { - return err - } - if !has { - return nil - } else { - return errors.New("delete group fail, group still exist from sdk DescribeGroup") - } -} diff --git a/tencentcloud/resource_tc_tcmq_queue_test.go b/tencentcloud/resource_tc_tcmq_queue_test.go deleted file mode 100644 index b5148b2cea..0000000000 --- a/tencentcloud/resource_tc_tcmq_queue_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -func TestAccTencentCloudTcmqQueueResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckTcmqQueueDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTcmqQueue, - Check: resource.ComposeTestCheckFunc( - testAccCheckTcmqQueueExists("tencentcloud_tcmq_queue.queue"), - resource.TestCheckResourceAttrSet("tencentcloud_tcmq_queue.queue", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcmq_queue.queue", "queue_name", "test_queue"), - ), - }, - { - ResourceName: "tencentcloud_tcmq_queue.queue", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"max_receive_count", "max_time_to_live"}, - }, - }, - }) -} - -func testAccCheckTcmqQueueDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcmq_queue" { - continue - } - - queue, err := service.DescribeTcmqQueueById(ctx, rs.Primary.ID) - if queue != nil { - return fmt.Errorf("TcmqQueue instance still exists") - } - if err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "ResourceNotFound" { - return nil - } - } - return err - } - } - return nil -} - -func testAccCheckTcmqQueueExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TcmqQueue %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TcmqQueue id is not set") - } - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - queue, err := service.DescribeTcmqQueueById(ctx, rs.Primary.ID) - if queue == nil { - return fmt.Errorf("TcmqQueue %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTcmqQueue = ` -resource "tencentcloud_tcmq_queue" "queue" { - queue_name="test_queue" -} -` diff --git a/tencentcloud/resource_tc_tcmq_subscribe_test.go b/tencentcloud/resource_tc_tcmq_subscribe_test.go deleted file mode 100644 index fb7d8a572d..0000000000 --- a/tencentcloud/resource_tc_tcmq_subscribe_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudTcmqSubscribeResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckTcmqSubscribeDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTcmqSubscribe, - Check: resource.ComposeTestCheckFunc( - testAccCheckTcmqSubscribeExists("tencentcloud_tcmq_subscribe.subscribe"), - resource.TestCheckResourceAttrSet("tencentcloud_tcmq_subscribe.subscribe", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcmq_subscribe.subscribe", "topic_name", "test_subscribe_topic"), - resource.TestCheckResourceAttr("tencentcloud_tcmq_subscribe.subscribe", "subscription_name", "test_subscribe"), - ), - }, - { - ResourceName: "tencentcloud_tcmq_subscribe.subscribe", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTcmqSubscribeDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcmq_subscribe" { - continue - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - topicName := idSplit[0] - subscriptionName := idSplit[1] - subscribe, err := service.DescribeTcmqSubscribeById(ctx, topicName, subscriptionName) - if subscribe != nil { - return fmt.Errorf("TcmqSubscribe instance still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTcmqSubscribeExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TcmqSubscribe %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TcmqSubscribe id is not set") - } - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - topicName := idSplit[0] - subscriptionName := idSplit[1] - subscribe, err := service.DescribeTcmqSubscribeById(ctx, topicName, subscriptionName) - if subscribe == nil { - return fmt.Errorf("TcmqSubscribe %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTcmqSubscribe = ` -resource "tencentcloud_tcmq_topic" "topic" { - topic_name = "test_subscribe_topic" -} - -resource "tencentcloud_tcmq_subscribe" "subscribe" { - topic_name = tencentcloud_tcmq_topic.topic.topic_name - subscription_name = "test_subscribe" - protocol = "http" - endpoint = "http://mikatong.com" -} -` diff --git a/tencentcloud/resource_tc_tcmq_topic_test.go b/tencentcloud/resource_tc_tcmq_topic_test.go deleted file mode 100644 index d0095ca96a..0000000000 --- a/tencentcloud/resource_tc_tcmq_topic_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -func TestAccTencentCloudTcmqTopicResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - CheckDestroy: testAccCheckTcmqTopicDestroy, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTcmqTopic, - Check: resource.ComposeTestCheckFunc( - testAccCheckTcmqTopicExists("tencentcloud_tcmq_topic.topic"), - resource.TestCheckResourceAttrSet("tencentcloud_tcmq_topic.topic", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcmq_topic.topic", "topic_name", "test_topic"), - ), - }, - { - ResourceName: "tencentcloud_tcmq_topic.topic", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"trace"}, - }, - }, - }) -} - -func testAccCheckTcmqTopicDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcmq_topic" { - continue - } - topic, err := service.DescribeTcmqTopicById(ctx, rs.Primary.ID) - if topic != nil { - return fmt.Errorf("TcmqTopic instance still exists") - } - if err != nil { - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "ResourceNotFound" { - return nil - } - } - return err - } - } - return nil -} - -func testAccCheckTcmqTopicExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TcmqTopic %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TcmqTopic id is not set") - } - - service := TcmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - topic, err := service.DescribeTcmqTopicById(ctx, rs.Primary.ID) - if topic == nil { - return fmt.Errorf("TcmqTopic %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTcmqTopic = ` -resource "tencentcloud_tcmq_topic" "topic" { - topic_name = "test_topic" -} -` diff --git a/tencentcloud/resource_tc_tcr_create_image_signature_operation_test.go b/tencentcloud/resource_tc_tcr_create_image_signature_operation_test.go deleted file mode 100644 index 00482c1ec5..0000000000 --- a/tencentcloud/resource_tc_tcr_create_image_signature_operation_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudTcrImageSignatureOperationResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImageSignatureOperation, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_tcr_create_image_signature_operation.sign_operation", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "repository_name", defaultTCRRepoName), - resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "image_version", "v1"), - ), - }, - }, - }) -} - -const testAccTcrImageSignatureOperation = ` - -resource "tencentcloud_tcr_create_image_signature_operation" "sign_operation" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - image_version = "v1" -} - -` diff --git a/tencentcloud/resource_tc_tcr_customized_domain.go b/tencentcloud/resource_tc_tcr_customized_domain.go deleted file mode 100644 index fc06d7c2f1..0000000000 --- a/tencentcloud/resource_tc_tcr_customized_domain.go +++ /dev/null @@ -1,219 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTcrCustomizedDomain() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcrCustomizedDomainCreate, - Read: resourceTencentCloudTcrCustomizedDomainRead, - Update: resourceTencentCloudTcrCustomizedDomainUpdate, - Delete: resourceTencentCloudTcrCustomizedDomainDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "registry_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "instance id.", - }, - - "domain_name": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "custom domain name.", - }, - - "certificate_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "certificate id.", - }, - - "tags": { - Optional: true, - Type: schema.TypeMap, - Description: "Tag description list.", - }, - }, - } -} - -func resourceTencentCloudTcrCustomizedDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_customized_domain.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tcr.NewCreateInstanceCustomizedDomainRequest() - registryId string - domainName string - ) - if v, ok := d.GetOk("registry_id"); ok { - registryId = v.(string) - request.RegistryId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("domain_name"); ok { - domainName = v.(string) - request.DomainName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("certificate_id"); ok { - request.CertificateId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateInstanceCustomizedDomain(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 tcr CustomizedDomain failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{registryId, domainName}, FILED_SP)) - - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - conf := BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 2*readRetryTimeout, time.Second, service.TcrCustomizedDomainStateRefreshFunc(registryId, domainName, []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tcr:%s:uin/:instance/%s", region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudTcrCustomizedDomainRead(d, meta) -} - -func resourceTencentCloudTcrCustomizedDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_customized_domain.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - registryId := idSplit[0] - domainName := idSplit[1] - - domains, err := service.DescribeTcrCustomizedDomainById(ctx, registryId, &domainName) - if err != nil { - return err - } - - if len(domains) == 0 { - d.SetId("") - log.Printf("[WARN]%s resource `TcrCustomizedDomain` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - CustomizedDomain := domains[0] - - if CustomizedDomain.RegistryId != nil { - _ = d.Set("registry_id", CustomizedDomain.RegistryId) - } - - if CustomizedDomain.DomainName != nil { - _ = d.Set("domain_name", CustomizedDomain.DomainName) - } - - if CustomizedDomain.CertId != nil { - _ = d.Set("certificate_id", CustomizedDomain.CertId) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "tcr", "instance", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTcrCustomizedDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_customized_domain.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - immutableArgs := []string{"registry_id", "domain_name", "certificate_id"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudTcrCustomizedDomainRead(d, meta) -} - -func resourceTencentCloudTcrCustomizedDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_customized_domain.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - registryId := idSplit[0] - domainName := idSplit[1] - - if err := service.DeleteTcrCustomizedDomainById(ctx, registryId, domainName); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tcr_customized_domain_test.go b/tencentcloud/resource_tc_tcr_customized_domain_test.go deleted file mode 100644 index 64d6a7b0ed..0000000000 --- a/tencentcloud/resource_tc_tcr_customized_domain_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func init() { - resource.AddTestSweepers("tencentcloud_tcr_customized_domain", &resource.Sweeper{ - Name: "tencentcloud_tcr_customized_domain", - F: testSweepTcrCustomizedDomain, - }) -} - -// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_customized_domain -func testSweepTcrCustomizedDomain(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - tcrService := TCRService{client: cli.(*TencentCloudClient).apiV3Conn} - - domains, err := tcrService.DescribeTcrCustomizedDomainById(ctx, defaultTCRInstanceId, nil) - if err != nil { - return err - } - if domains == nil { - return nil - } - - for _, v := range domains { - delName := *v.DomainName - - if strings.HasPrefix(delName, "test") { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - err := tcrService.DeleteTcrCustomizedDomainById(ctx, defaultTCRInstanceId, delName) - if err != nil { - return retryError(err) - } - return nil - }) - if err != nil { - return fmt.Errorf("[ERROR] delete tcr customize domain instance %s failed! reason:[%s]", delName, err.Error()) - } - } - } - return nil -} - -func TestAccTencentCloudTcrCustomizedDomainResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrCustomizedDomain, defaultTCRSSL), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_tcr_customized_domain.my_domain", "id"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_customized_domain.my_domain", "registry_id"), - resource.TestCheckResourceAttr("tencentcloud_tcr_customized_domain.my_domain", "domain_name", "www.test.com"), - resource.TestCheckResourceAttr("tencentcloud_tcr_customized_domain.my_domain", "certificate_id", defaultTCRSSL), - ), - }, - { - ResourceName: "tencentcloud_tcr_customized_domain.my_domain", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -const testAccTcrCustomizedDomain = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_customized_domain" "my_domain" { - registry_id = local.tcr_id - domain_name = "www.test.com" - certificate_id = "%s" - tags = { - "createdBy" = "terraform" - } -} - -` diff --git a/tencentcloud/resource_tc_tcr_delete_image_operation_test.go b/tencentcloud/resource_tc_tcr_delete_image_operation_test.go deleted file mode 100644 index 35724371cf..0000000000 --- a/tencentcloud/resource_tc_tcr_delete_image_operation_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixTcrDeleteImageOperationResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrDeleteImageOperation, defaultTCRInstanceId, defaultTCRNamespace, defaultTCRRepoName), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_tcr_delete_image_operation.delete_image_operation", "id"), - resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "namespace_name", defaultTCRNamespace), - resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "repository_name", defaultTCRRepoName), - resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "image_version", "v2"), - ), - }, - }, - }) -} - -const testAccTcrDeleteImageOperation = ` - -resource "tencentcloud_tcr_delete_image_operation" "delete_image_operation" { - registry_id = "%s" - namespace_name = "%s" - repository_name = "%s" - image_version = "v2" -} - -` diff --git a/tencentcloud/resource_tc_tcr_immutable_tag_rule_test.go b/tencentcloud/resource_tc_tcr_immutable_tag_rule_test.go deleted file mode 100644 index c955323560..0000000000 --- a/tencentcloud/resource_tc_tcr_immutable_tag_rule_test.go +++ /dev/null @@ -1,200 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "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" -) - -func init() { - resource.AddTestSweepers("tencentcloud_tcr_immutable_tag_rule", &resource.Sweeper{ - Name: "tencentcloud_tcr_immutable_tag_rule", - F: testSweepTcrImmutableTagRule, - }) -} - -// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_immutable_tag_rule -func testSweepTcrImmutableTagRule(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - tcrService := TCRService{client: cli.(*TencentCloudClient).apiV3Conn} - - // the non-keep namespace will be removed directly when run sweeper tencentcloud_tcr_namespace - // so... only need to care about the rules under the keep namespace - rules, err := tcrService.DescribeTcrImmutableTagRuleById(ctx, defaultTCRInstanceId, helper.String(defaultTCRNamespace), nil) - if err != nil { - return err - } - - for _, rule := range rules { - ruleId := helper.Int64ToStr(*rule.RuleId) - - err = tcrService.DeleteTcrImmutableTagRuleById(ctx, defaultTCRInstanceId, defaultTCRNamespace, ruleId) - if err != nil { - continue - } - } - return nil -} - -func TestAccTencentCloudTcrImmutableTagRuleResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTcrImmutableTagRuleDestroy, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTcrImmutableTagRule_basic, defaultTCRInstanceId, defaultTCRNamespace), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - testAccCheckTcrImmutableTagRuleExists("tencentcloud_tcr_immutable_tag_rule.my_rule"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "id"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.#"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_pattern", "**"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_decoration", "repoMatches"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_pattern", "v1"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_decoration", "matches"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.disabled", "false"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "namespace_name", defaultTCRNamespace), - ), - }, - { - Config: fmt.Sprintf(testAccTcrImmutableTagRule_update, defaultTCRInstanceId, defaultTCRNamespace), - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeTestCheckFunc( - testAccCheckTcrImmutableTagRuleExists("tencentcloud_tcr_immutable_tag_rule.my_rule"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "id"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.#"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_pattern", "test/*"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_decoration", "repoExcludes"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_pattern", "test/*"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_decoration", "excludes"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.disabled", "false"), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "registry_id", defaultTCRInstanceId), - resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "namespace_name", defaultTCRNamespace), - ), - }, - { - ResourceName: "tencentcloud_tcr_immutable_tag_rule.my_rule", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTcrImmutableTagRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcr_immutable_tag_rule" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - registryId := idSplit[0] - namespaceName := idSplit[1] - ruleId := idSplit[2] - - rule, err := service.DescribeTcrImmutableTagRuleById(ctx, registryId, &namespaceName, &ruleId) - if err != nil { - return err - } - - if rule != nil || len(rule) > 0 { - return fmt.Errorf("Tcr Immutable Tag Rule still exist, Id: %v", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTcrImmutableTagRuleExists(re string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - rs, ok := s.RootModule().Resources[re] - if !ok { - return fmt.Errorf("Tcr Immutable Tag Rule %s is not found", re) - } - if rs.Primary.ID == "" { - return fmt.Errorf("Tcr Immutable Tag Rule id is not set") - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - registryId := idSplit[0] - namespaceName := idSplit[1] - ruleId := idSplit[2] - - rule, err := service.DescribeTcrImmutableTagRuleById(ctx, registryId, &namespaceName, &ruleId) - if err != nil { - return err - } - - if len(rule) == 0 { - return fmt.Errorf("Tcr Immutable Tag Rule not found, Id: %v", rs.Primary.ID) - } - return nil - } -} - -const testAccTcrImmutableTagRule_basic = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_immutable_tag_rule" "my_rule" { - registry_id = "%s" - namespace_name = "%s" - rule { - repository_pattern = "**" - tag_pattern = "v1" - repository_decoration = "repoMatches" - tag_decoration = "matches" - disabled = false - } - tags = { - "createdBy" = "terraform" - } -} - -` - -const testAccTcrImmutableTagRule_update = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_immutable_tag_rule" "my_rule" { - registry_id = "%s" - namespace_name = "%s" - rule { - repository_pattern = "test/*" - tag_pattern = "test/*" - repository_decoration = "repoExcludes" - tag_decoration = "excludes" - disabled = false - } - tags = { - "createdBy" = "terraform" - } -} - -` diff --git a/tencentcloud/resource_tc_tcr_namespace.go b/tencentcloud/resource_tc_tcr_namespace.go deleted file mode 100644 index 73cd5fa611..0000000000 --- a/tencentcloud/resource_tc_tcr_namespace.go +++ /dev/null @@ -1,266 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudTcrNamespace() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcrNamespaceCreate, - Read: resourceTencentCloudTcrNamespaceRead, - Update: resourceTencentCloudTcrNamespaceUpdate, - Delete: resourceTencentCLoudTcrNamespaceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the TCR instance.", - }, - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the TCR namespace. Valid length is [2~30]. It can only contain lowercase letters, numbers and separators (`.`, `_`, `-`), and cannot start, end or continue with separators.", - }, - "is_public": { - Type: schema.TypeBool, - Optional: true, - Default: false, - Description: "Indicate that the namespace is public or not. Default is `false`.", - }, - "is_auto_scan": { - Type: schema.TypeBool, - Optional: true, - Default: false, - Description: "Scanning level, `True` is automatic, `False` is manual. Default is `false`.", - }, - - "is_prevent_vul": { - Type: schema.TypeBool, - Optional: true, - Default: false, - Description: "Blocking switch, `True` is open, `False` is closed. Default is `false`.", - }, - - "severity": { - Type: schema.TypeString, - Optional: true, - Description: "Block vulnerability level, currently only supports `low`, `medium`, `high`.", - }, - - "cve_whitelist_items": { - Type: schema.TypeList, - Optional: true, - Description: "Vulnerability Whitelist.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "cve_id": { - Type: schema.TypeString, - Optional: true, - Description: "Vulnerability Whitelist ID.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudTcrNamespaceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_namespace.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - name = d.Get("name").(string) - instanceId = d.Get("instance_id").(string) - isPublic = d.Get("is_public").(bool) - isAutoScan = d.Get("is_auto_scan").(bool) - isPreventVUL = d.Get("is_prevent_vul").(bool) - severity = d.Get("severity").(string) - whitelistItems = d.Get("cve_whitelist_items").([]interface{}) - outErr, inErr error - ) - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.CreateTCRNameSpace(ctx, instanceId, name, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(instanceId + FILED_SP + name) - - return resourceTencentCloudTcrNamespaceRead(d, meta) -} - -func resourceTencentCloudTcrNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_namespace.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - - var ( - isPublic = d.Get("is_public").(bool) - isAutoScan = d.Get("is_auto_scan").(bool) - isPreventVUL = d.Get("is_prevent_vul").(bool) - severity = d.Get("severity").(string) - whitelistItems = d.Get("cve_whitelist_items").([]interface{}) - outErr, inErr error - ) - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - inErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - - return resourceTencentCloudTcrNamespaceRead(d, meta) -} - -func resourceTencentCloudTcrNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_namespace.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - - var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - namespace, has, outErr := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - namespace, has, inErr = tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", namespace.Name) - _ = d.Set("is_public", namespace.Public) - _ = d.Set("instance_id", instanceId) - _ = d.Set("is_auto_scan", namespace.AutoScan) - _ = d.Set("is_prevent_vul", namespace.PreventVUL) - _ = d.Set("severity", namespace.Severity) - - whiteList := []interface{}{} - if namespace.CVEWhitelistItems != nil { - for _, v := range namespace.CVEWhitelistItems { - cveMap := map[string]interface{}{} - if v.CVEID != nil { - cveMap["cve_id"] = v.CVEID - } - - whiteList = append(whiteList, cveMap) - } - } - _ = d.Set("cve_whitelist_items", whiteList) - - return nil -} - -func resourceTencentCLoudTcrNamespaceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_namespace.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var inErr, outErr error - var has bool - - outErr = tcrService.DeleteTCRNameSpace(ctx, instanceId, namespaceName) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.DeleteTCRNameSpace(ctx, instanceId, namespaceName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) - if inErr != nil { - return retryError(inErr) - } - if has { - inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) - return resource.RetryableError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - return nil -} diff --git a/tencentcloud/resource_tc_tcr_namespace_test.go b/tencentcloud/resource_tc_tcr_namespace_test.go deleted file mode 100644 index 9235fae7c5..0000000000 --- a/tencentcloud/resource_tc_tcr_namespace_test.go +++ /dev/null @@ -1,199 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_namespace - resource.AddTestSweepers("tencentcloud_tcr_namespace", &resource.Sweeper{ - Name: "tencentcloud_tcr_namespace", - F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - - service := TCRService{client} - - var filters []*tcr.Filter - filters = append(filters, &tcr.Filter{ - Name: helper.String("RegistryName"), - Values: []*string{helper.String(defaultTCRInstanceName)}, - }) - - instances, err := service.DescribeTCRInstances(ctx, "", filters) - if err != nil { - return err - } - - if len(instances) == 0 { - return nil - } - - instanceId := *instances[0].RegistryId - - namespaces, err := service.DescribeTCRNameSpaces(ctx, instanceId, "test") - if err != nil { - return err - } - - for i := range namespaces { - n := namespaces[i] - if isResourcePersist(*n.Name, nil) { - continue - } - err = service.DeleteTCRNameSpace(ctx, instanceId, *n.Name) - if err != nil { - continue - } - } - - return nil - }, - }) -} - -func TestAccTencentCloudTcrNamespace_basic_and_update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRNamespaceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTCRNamespace_basic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test_ns"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "true"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "true"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "true"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "medium"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxxx"), - ), - }, - { - ResourceName: "tencentcloud_tcr_namespace.mytcr_namespace", - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccTCRNamespace_basic_update_remark, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTCRNamespaceExists("tencentcloud_tcr_namespace.mytcr_namespace"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test2_ns"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "false"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "false"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "false"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "high"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxx"), - ), - }, - }, - }) -} - -func testAccCheckTCRNamespaceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcr_namespace" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - namespaceName := items[1] - _, has, err := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) - if has { - return fmt.Errorf("TCR namespace still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTCRNamespaceExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TCR namespace %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TCR namespace id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - namespaceName := items[1] - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) - if !has { - return fmt.Errorf("TCR namespace %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTCRNamespace_basic = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_namespace" "mytcr_namespace" { - instance_id = local.tcr_id - name = "test_ns" - is_public = true - is_auto_scan = true - is_prevent_vul = true - severity = "medium" - cve_whitelist_items { - cve_id = "cve-xxxxx" - } -}` - -const testAccTCRNamespace_basic_update_remark = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_namespace" "mytcr_namespace" { - instance_id = local.tcr_id - name = "test2_ns" - is_public = false - is_auto_scan = false - is_prevent_vul = false - severity = "high" - cve_whitelist_items { - cve_id = "cve-xxxx" - } -}` diff --git a/tencentcloud/resource_tc_tcr_repository.go b/tencentcloud/resource_tc_tcr_repository.go deleted file mode 100644 index 6ee6e77b62..0000000000 --- a/tencentcloud/resource_tc_tcr_repository.go +++ /dev/null @@ -1,272 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudTcrRepository() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcrRepositoryCreate, - Read: resourceTencentCloudTcrRepositoryRead, - Update: resourceTencentCloudTcrRepositoryUpdate, - Delete: resourceTencentCLoudTcrRepositoryDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the TCR instance.", - }, - "namespace_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the TCR namespace.", - }, - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Name of the TCR repository. Valid length is [2~200]. It can only contain lowercase letters, numbers and separators (`.`, `_`, `-`, `/`), and cannot start, end or continue with separators. Support the use of multi-level address formats, such as `sub1/sub2/repo`.", - }, - "brief_desc": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validateStringLengthInRange(1, 100), - Description: "Brief description of the repository. Valid length is [1~100].", - }, - "description": { - Type: schema.TypeString, - Optional: true, - ValidateFunc: validateStringLengthInRange(1, 1000), - Description: "Description of the repository. Valid length is [1~1000].", - }, - //computed - "is_public": { - Type: schema.TypeBool, - Computed: true, - Description: "Indicate the repository is public or not.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time.", - }, - "update_time": { - Type: schema.TypeString, - Computed: true, - Description: "Last updated time.", - }, - "url": { - Type: schema.TypeString, - Computed: true, - Description: "URL of the repository.", - }, - }, - } -} - -func resourceTencentCloudTcrRepositoryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_repository.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - name = d.Get("name").(string) - instanceId = d.Get("instance_id").(string) - namespaceName = d.Get("namespace_name").(string) - briefDesc = d.Get("brief_desc").(string) - description = d.Get("description").(string) - outErr, inErr error - ) - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.CreateTCRRepository(ctx, instanceId, namespaceName, name, briefDesc, description) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(instanceId + FILED_SP + namespaceName + FILED_SP + name) - - return resourceTencentCloudTcrRepositoryRead(d, meta) -} - -func resourceTencentCloudTcrRepositoryUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_repository.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - repositoryName := items[2] - - if d.HasChange("brief_desc") || d.HasChange("description") { - briefDesc := d.Get("brief_desc").(string) - description := d.Get("description").(string) - var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = tcrService.ModifyTCRRepository(ctx, instanceId, namespaceName, repositoryName, briefDesc, description) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - inErr = tcrService.ModifyTCRRepository(ctx, instanceId, namespaceName, repositoryName, briefDesc, description) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudTcrRepositoryRead(d, meta) -} - -func resourceTencentCloudTcrRepositoryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_repository.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - repositoryName := items[2] - - var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - repository, has, outErr := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - repository, has, inErr = tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("name", repositoryName) - _ = d.Set("instance_id", instanceId) - _ = d.Set("namespace_name", namespaceName) - _ = d.Set("create_time", repository.CreationTime) - _ = d.Set("update_time", repository.UpdateTime) - _ = d.Set("brief_desc", repository.BriefDescription) - _ = d.Set("description", repository.Description) - _ = d.Set("is_public", repository.Public) - - //get public domain - instance, has, outErr := tcrService.DescribeTCRInstanceById(ctx, instanceId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - instance, has, inErr = tcrService.DescribeTCRInstanceById(ctx, instanceId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - - if has { - _ = d.Set("url", fmt.Sprintf("%s/%s/%s", *instance.PublicDomain, namespaceName, repositoryName)) - } else { - return fmt.Errorf("cannot find instance %s", instanceId) - } - - return nil -} - -func resourceTencentCLoudTcrRepositoryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_repository.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - namespaceName := items[1] - repositoryName := items[2] - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var inErr, outErr error - var has bool - - outErr = tcrService.DeleteTCRRepository(ctx, instanceId, namespaceName, repositoryName) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.DeleteTCRRepository(ctx, instanceId, namespaceName, repositoryName) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) - if inErr != nil { - return retryError(inErr) - } - if has { - inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) - return resource.RetryableError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - return nil -} diff --git a/tencentcloud/resource_tc_tcr_repository_test.go b/tencentcloud/resource_tc_tcr_repository_test.go deleted file mode 100644 index 50b2485b0b..0000000000 --- a/tencentcloud/resource_tc_tcr_repository_test.go +++ /dev/null @@ -1,191 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func init() { - resource.AddTestSweepers("tencentcloud_tcr_repository", &resource.Sweeper{ - Name: "tencentcloud_tcr_repository", - F: testSweepTCRRepository, - }) -} - -// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_repository -func testSweepTCRRepository(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - tcrService := TCRService{client: cli.(*TencentCloudClient).apiV3Conn} - - var filters []*tcr.Filter - filters = append(filters, &tcr.Filter{ - Name: helper.String("RegistryName"), - Values: []*string{helper.String(defaultTCRInstanceName)}, - }) - - instances, err := tcrService.DescribeTCRInstances(ctx, "", filters) - if err != nil { - return err - } - - if len(instances) == 0 { - return nil - } - - instanceId := *instances[0].RegistryId - // the non-keep namespace will be removed directly when run sweeper tencentcloud_tcr_namespace - // so... only need to care about the repos under the keep namespace - repos, err := tcrService.DescribeTCRRepositories(ctx, instanceId, "", "") - if err != nil { - return err - } - - for i := range repos { - n := repos[i] - names := strings.Split(*n.Name, "/") - if len(names) != 2 { - continue - } - repoName := names[1] - if isResourcePersist(repoName, nil) { - continue - } - err = tcrService.DeleteTCRRepository(ctx, instanceId, *n.Namespace, repoName) - if err != nil { - continue - } - } - return nil -} - -func TestAccTencentCloudTcrRepository_basic_and_update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRRepositoryDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTCRRepository_basic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "name", "test"), - resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "brief_desc", "111"), - resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "description", "111111111111111111111111111111111111"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "create_time"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "update_time"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "is_public"), - ), - Destroy: false, - }, - { - ResourceName: "tencentcloud_tcr_repository.mytcr_repository", - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccTCRRepository_basic_update_remark, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTCRRepositoryExists("tencentcloud_tcr_repository.mytcr_repository"), - resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "brief_desc", "2222"), - resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "description", "211111111111111111111111111111111111"), - ), - }, - }, - }) -} - -func testAccCheckTCRRepositoryDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcr_repository" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - namespaceName := items[1] - repositoryName := items[2] - _, has, err := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) - if has { - return fmt.Errorf("TCR repository still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTCRRepositoryExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TCR repository %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TCR repository id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - namespaceName := items[1] - repositoryName := items[2] - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) - if !has { - return fmt.Errorf("TCR repository %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTCRRepository_basic = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_repository" "mytcr_repository" { - instance_id = local.tcr_id - namespace_name = var.tcr_namespace - name = "test" - brief_desc = "111" - description = "111111111111111111111111111111111111" -}` - -const testAccTCRRepository_basic_update_remark = defaultTCRInstanceData + ` -resource "tencentcloud_tcr_repository" "mytcr_repository" { - instance_id = local.tcr_id - namespace_name = var.tcr_namespace - name = "test" - brief_desc = "2222" - description = "211111111111111111111111111111111111" -}` diff --git a/tencentcloud/resource_tc_tcr_tag_retention_execution_config.go b/tencentcloud/resource_tc_tcr_tag_retention_execution_config.go deleted file mode 100644 index ecf44d86db..0000000000 --- a/tencentcloud/resource_tc_tcr_tag_retention_execution_config.go +++ /dev/null @@ -1,167 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTcrTagRetentionExecutionConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcrTagRetentionExecutionConfigCreate, - Read: resourceTencentCloudTcrTagRetentionExecutionConfigRead, - Update: resourceTencentCloudTcrTagRetentionExecutionConfigUpdate, - Delete: resourceTencentCloudTcrTagRetentionExecutionConfigDelete, - Schema: map[string]*schema.Schema{ - "registry_id": { - Required: true, - Type: schema.TypeString, - Description: "instance id.", - }, - - "retention_id": { - Required: true, - Type: schema.TypeInt, - Description: "retention id.", - }, - - "execution_id": { - Computed: true, - Type: schema.TypeInt, - Description: "execution id.", - }, - - "dry_run": { - Optional: true, - Type: schema.TypeBool, - Description: "Whether to simulate execution, the default value is false, that is, non-simulation execution.", - }, - }, - } -} - -func resourceTencentCloudTcrTagRetentionExecutionConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.create")() - defer inconsistentCheck(d, meta)() - - var ( - registryId string - retentionId string - ) - - if v, ok := d.GetOk("registry_id"); ok { - registryId = v.(string) - } - - if v, ok := d.GetOk("retention_id"); ok { - retentionId = helper.IntToStr(v.(int)) - } - - d.SetId(strings.Join([]string{registryId, retentionId}, FILED_SP)) - - return resourceTencentCloudTcrTagRetentionExecutionConfigUpdate(d, meta) -} - -func resourceTencentCloudTcrTagRetentionExecutionConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - registryId := idSplit[0] - retentionId := idSplit[1] - - TagRetentionExecutionConfig, err := service.DescribeTcrTagRetentionExecutionConfigById(ctx, registryId, retentionId) - if err != nil { - return err - } - - if TagRetentionExecutionConfig == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TcrTagRetentionExecutionConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("registry_id", registryId) - - if TagRetentionExecutionConfig.RetentionId != nil { - _ = d.Set("retention_id", TagRetentionExecutionConfig.RetentionId) - } - - if TagRetentionExecutionConfig.ExecutionId != nil { - _ = d.Set("execution_id", TagRetentionExecutionConfig.ExecutionId) - } - - return nil -} - -func resourceTencentCloudTcrTagRetentionExecutionConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tcr.NewCreateTagRetentionExecutionRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - registryId := idSplit[0] - retentionId := idSplit[1] - - request.RegistryId = ®istryId - request.RetentionId = helper.StrToInt64Point(retentionId) - - if d.HasChange("dry_run") { - if v, ok := d.GetOkExists("dry_run"); ok { - request.DryRun = helper.Bool(v.(bool)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateTagRetentionExecution(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 update tcr TagRetentionExecutionConfig failed, reason:%+v", logId, err) - return err - } - - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - conf := BuildStateChangeConf([]string{}, []string{"Succeed"}, 3*readRetryTimeout, time.Second, service.TcrTagRetentionExecutionConfigStateRefreshFunc(registryId, retentionId, []string{})) - - if _, e := conf.WaitForState(); e != nil { - return e - } - - return resourceTencentCloudTcrTagRetentionExecutionConfigRead(d, meta) -} - -func resourceTencentCloudTcrTagRetentionExecutionConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tcr_token.go b/tencentcloud/resource_tc_tcr_token.go deleted file mode 100644 index 01d5e7f425..0000000000 --- a/tencentcloud/resource_tc_tcr_token.go +++ /dev/null @@ -1,246 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudTcrToken() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTcrTokenCreate, - Read: resourceTencentCloudTcrTokenRead, - Update: resourceTencentCloudTcrTokenUpdate, - Delete: resourceTencentCLoudTcrTokenDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "ID of the TCR instance.", - }, - "enable": { - Type: schema.TypeBool, - Optional: true, - Default: true, - Description: "Indicate to enable this token or not.", - }, - "description": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Description: "Description of the token. Valid length is [0~255].", - }, - //computed - "token_id": { - Type: schema.TypeString, - Computed: true, - Description: "Sub ID of the TCR token. The full ID of token format like `instance_id#token_id`.", - }, - "token": { - Type: schema.TypeString, - Computed: true, - Description: "The content of the token.", - }, - "user_name": { - Type: schema.TypeString, - Computed: true, - Description: "User name of the token.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time.", - }, - }, - } -} - -func resourceTencentCloudTcrTokenCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_token.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - instanceId = d.Get("instance_id").(string) - enable = d.Get("enable").(bool) - description = d.Get("description").(string) - tokenId, token, userName string - outErr, inErr error - ) - - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - tokenId, token, userName, inErr = tcrService.CreateTCRLongTermToken(ctx, instanceId, description) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - - d.SetId(instanceId + FILED_SP + tokenId) - _ = d.Set("token", token) - _ = d.Set("user_name", userName) - - if !enable { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudTcrTokenRead(d, meta) -} - -func resourceTencentCloudTcrTokenUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_token.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - tokenId := items[1] - - if d.HasChange("enable") { - enable := d.Get("enable").(bool) - var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - outErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - inErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - } - - return resourceTencentCloudTcrTokenRead(d, meta) -} - -func resourceTencentCloudTcrTokenRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_token.read")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - tokenId := items[1] - - var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - token, has, outErr := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) - if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - token, has, inErr = tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - if outErr != nil { - return outErr - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("token_id", tokenId) - _ = d.Set("create_time", token.CreatedAt) - _ = d.Set("description", token.Desc) - _ = d.Set("enable", token.Enabled) - _ = d.Set("instance_id", instanceId) - - return nil -} - -func resourceTencentCLoudTcrTokenDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_token.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", resourceId) - } - - instanceId := items[0] - tokenId := items[1] - - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - - var inErr, outErr error - var has bool - - outErr = tcrService.DeleteTCRLongTermToken(ctx, instanceId, tokenId) - if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr = tcrService.DeleteTCRLongTermToken(ctx, instanceId, tokenId) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - } - - if outErr != nil { - return outErr - } - - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, has, inErr = tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) - if inErr != nil { - return retryError(inErr) - } - if has { - inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) - return resource.RetryableError(inErr) - } - return nil - }) - - if outErr != nil { - return outErr - } - - return nil -} diff --git a/tencentcloud/resource_tc_tcr_token_test.go b/tencentcloud/resource_tc_tcr_token_test.go deleted file mode 100644 index 9c8272ca6a..0000000000 --- a/tencentcloud/resource_tc_tcr_token_test.go +++ /dev/null @@ -1,188 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "testing" - "time" - - tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_token - resource.AddTestSweepers("tencentcloud_tcr_token", &resource.Sweeper{ - Name: "tencentcloud_tcr_token", - F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - - service := TCRService{client} - - var filters []*tcr.Filter - filters = append(filters, &tcr.Filter{ - Name: helper.String("RegistryName"), - Values: []*string{helper.String(defaultTCRInstanceName)}, - }) - - instances, err := service.DescribeTCRInstances(ctx, "", filters) - if err != nil { - return err - } - - if len(instances) == 0 { - return nil - } - - instanceId := *instances[0].RegistryId - - tokens, err := service.DescribeTCRTokens(ctx, instanceId, "") - if err != nil { - return err - } - - for i := range tokens { - token := tokens[i] - id := *token.Id - created, err := time.Parse(time.RFC3339, *token.CreatedAt) - if err != nil { - created = time.Time{} - } - if isResourcePersist("", &created) { - continue - } - log.Printf("%s -> %s (%s) will delete", instanceId, id, *token.Desc) - err = service.DeleteTCRLongTermToken(ctx, instanceId, id) - if err != nil { - continue - } - } - - return nil - }, - }) -} - -func TestAccTencentCloudTcrToken_basic_and_update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRTokenDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTCRToken_basic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "description", "test token"), - resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "enable", "true"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "token_id"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "create_time"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "token"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "user_name"), - ), - Destroy: false, - }, - { - ResourceName: "tencentcloud_tcr_token.mytcr_token", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"token", "user_name"}, - }, - { - Config: testAccTCRToken_basic_update_remark, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTCRTokenExists("tencentcloud_tcr_token.mytcr_token"), - resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "enable", "false"), - ), - }, - }, - }) -} - -func testAccCheckTCRTokenDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcr_token" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - tokenId := items[1] - _, has, err := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) - if has { - return fmt.Errorf("TCR token still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTCRTokenExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("TCR token %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("TCR token id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - tokenId := items[1] - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) - if !has { - return fmt.Errorf("TCR token %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTCRToken_basic = defaultTCRInstanceData + ` -resource "tencentcloud_tcr_token" "mytcr_token" { - instance_id = local.tcr_id - description = "test token" -}` - -const testAccTCRToken_basic_update_remark = defaultTCRInstanceData + ` - -resource "tencentcloud_tcr_token" "mytcr_token" { - instance_id = local.tcr_id - description = "test token" - enable = false -}` diff --git a/tencentcloud/resource_tc_tcr_vpc_attachment_test.go b/tencentcloud/resource_tc_tcr_vpc_attachment_test.go deleted file mode 100644 index 7fdf9b1b3c..0000000000 --- a/tencentcloud/resource_tc_tcr_vpc_attachment_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudTcrVPCAttachment_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTCRVPCAttachmentDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTCRVPCAttachment_basic, - PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) - }, - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTCRVPCAttachmentExists("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource"), - resource.TestCheckResourceAttrSet("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", "status"), - // this access ip will solve out with very long time - // resource.TestCheckResourceAttrSet("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", "access_ip"), - ), - // Destroy: false, - }, - { - ResourceName: "tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTCRVPCAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tcr_vpc_attachment" { - continue - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - vpcId := items[1] - subnetId := items[2] - - _, has, err := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) - if has { - return fmt.Errorf("vpc attachment still exists") - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTCRVPCAttachmentExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("vpc attachment %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("vpc attachment id is not set") - } - items := strings.Split(rs.Primary.ID, FILED_SP) - if len(items) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - - instanceId := items[0] - vpcId := items[1] - subnetId := items[2] - - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, has, err := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) - if !has { - return fmt.Errorf("vpc attachment %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTCRVPCAttachment_basic = defaultTcrVpcSubnets + ` -resource "tencentcloud_tcr_instance" "mytcr_instance" { - name = "test-resource-attach" - instance_type = "basic" - delete_bucket = true -} - -resource "tencentcloud_tcr_vpc_attachment" "mytcr_vpc_attachment_resource" { - instance_id = tencentcloud_tcr_instance.mytcr_instance.id - vpc_id = local.vpc_id - subnet_id = local.subnet_id -}` diff --git a/tencentcloud/resource_tc_tdcpg_instance.go b/tencentcloud/resource_tc_tdcpg_instance.go deleted file mode 100644 index 87445bfa98..0000000000 --- a/tencentcloud/resource_tc_tdcpg_instance.go +++ /dev/null @@ -1,286 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdcpgInstance() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTdcpgInstanceRead, - Create: resourceTencentCloudTdcpgInstanceCreate, - Update: resourceTencentCloudTdcpgInstanceUpdate, - Delete: resourceTencentCloudTdcpgInstanceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "cluster id.", - }, - - "cpu": { - Type: schema.TypeInt, - Required: true, - Description: "cpu cores.", - }, - - "memory": { - Type: schema.TypeInt, - Required: true, - Description: "memory size.", - }, - - "instance_name": { - Type: schema.TypeString, - Optional: true, - Description: "instance name.", - }, - - "operation_timing": { - Type: schema.TypeString, - Optional: true, - Description: "operation timing, optional value is IMMEDIATE or MAINTAIN_PERIOD.", - }, - }, - } -} - -func resourceTencentCloudTdcpgInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_instance.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tdcpg.NewCreateClusterInstancesRequest() - response *tdcpg.CreateClusterInstancesResponse - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clusterId string - instanceId string - dealNames []*string - ) - - if v, ok := d.GetOk("cluster_id"); ok { - request.ClusterId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("cpu"); ok { - request.CPU = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("memory"); ok { - request.Memory = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("instance_name"); ok { - request.InstanceName = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdcpgClient().CreateClusterInstances(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITICAL]%s create tdcpg instance failed, reason:%+v", logId, err) - return err - } - - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - dealNames = response.Response.DealNameSet - resources, e := service.DescribeTdcpgResourceByDealName(ctx, dealNames) - - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s call api[%s] success, request body [%s], resources [%v]\n", - logId, "DescribeTdcpgResourceByDealName", request.ToJsonString(), resources) - } - clusterId = *resources[0].ClusterId - instanceId = *resources[0].InstanceIdSet[0] - return nil - }) - - if err != nil { - log.Printf("[CRITICAL]%s query tdcpg cluster resource by deal name:[%v] failed, reason:%+v", logId, dealNames, err) - return err - } - - d.SetId(clusterId + FILED_SP + instanceId) - return resourceTencentCloudTdcpgInstanceRead(d, meta) -} - -func resourceTencentCloudTdcpgInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_instance.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} - instance *tdcpg.Instance - ids = strings.Split(d.Id(), FILED_SP) - clusterId = ids[0] - instanceId = ids[1] - ) - - // query the instance of cluster - err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - instances, e := service.DescribeTdcpgInstance(ctx, &clusterId, &instanceId) - if e != nil { - return retryError(e) - } - - if instances != nil && instances.InstanceSet != nil { - status := *instances.InstanceSet[0].Status - - if status == "running" { - instance = instances.InstanceSet[0] - return nil - } - - if status == "creating" || status == "recovering" { - return resource.RetryableError(fmt.Errorf("tdcpg instance[%s] status is still creating or recovering, retry...", d.Id())) - } - return resource.NonRetryableError(fmt.Errorf("tdcpg instance[%s] status is invalid, exit!", d.Id())) - } - return resource.RetryableError(fmt.Errorf("can not get tdcpg instance[%s] status, retry...", d.Id())) - }) - if err != nil { - return err - } - - if instance == nil { - d.SetId("") - return fmt.Errorf("resource `instance` %s does not exist", instanceId) - } - - if instance.ClusterId != nil { - _ = d.Set("cluster_id", instance.ClusterId) - } - - if instance.CPU != nil { - _ = d.Set("cpu", instance.CPU) - } - - if instance.Memory != nil { - _ = d.Set("memory", instance.Memory) - } - - if instance.InstanceName != nil { - _ = d.Set("instance_name", instance.InstanceName) - } - - return nil -} - -func resourceTencentCloudTdcpgInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_instance.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} - request = tdcpg.NewModifyClusterInstancesSpecRequest() - ids = strings.Split(d.Id(), FILED_SP) - clusterId = ids[0] - instanceId = ids[1] - ) - - request.ClusterId = &clusterId - request.InstanceIdSet = []*string{helper.String(instanceId)} - - if v, ok := d.GetOk("cpu"); ok { - request.CPU = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("memory"); ok { - request.Memory = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("operation_timing"); ok { - request.OperationTiming = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdcpgClient().ModifyClusterInstancesSpec(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("[CRITICAL]%s modify tdcpg instance failed, reason:%+v", logId, err) - return err - } - - // check the instance value to make sure modify successfully. - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - instances, e := service.DescribeTdcpgInstance(ctx, &clusterId, &instanceId) - if e != nil { - return retryError(e) - } - - if instances != nil && instances.InstanceSet != nil { - instance := *instances.InstanceSet[0] - - if *instance.Status == "running" { - if int(*instance.CPU) != d.Get("cpu").(int) || int(*instance.Memory) != d.Get("memory").(int) { - return resource.RetryableError(fmt.Errorf("the modify instance[%s] operation still on going, retry...", d.Id())) - } - return nil - } - return resource.NonRetryableError(fmt.Errorf("tdcpg instance[%s] status is invalid, exit!", d.Id())) - } - return resource.RetryableError(fmt.Errorf("can not get tdcpg instance[%s] status, retry...", d.Id())) - }) - - if err != nil { - return err - } - - return resourceTencentCloudTdcpgInstanceRead(d, meta) -} - -func resourceTencentCloudTdcpgInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_instance.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} - ids = strings.Split(d.Id(), FILED_SP) - clusterId = ids[0] - instanceId = ids[1] - ) - - if err := service.DeleteTdcpgInstanceById(ctx, &clusterId, &instanceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdcpg_instance_test.go b/tencentcloud/resource_tc_tdcpg_instance_test.go deleted file mode 100644 index 0b1a5d33d8..0000000000 --- a/tencentcloud/resource_tc_tdcpg_instance_test.go +++ /dev/null @@ -1,188 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "regexp" - "strings" - "testing" - "time" - - "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" -) - -func init() { - resource.AddTestSweepers("tencentcloud_tdcpg_instance", &resource.Sweeper{ - Name: "tencentcloud_tdcpg_instance", - F: testSweepTdcpgInstance, - }) -} - -// go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_tdcpg_instance -func testSweepTdcpgInstance(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - tdcpgService := TdcpgService{client: cli.(*TencentCloudClient).apiV3Conn} - - instances, err := tdcpgService.DescribeTdcpgInstancesByFilter(ctx, helper.String(defaultTdcpgClusterId), nil) - if err != nil { - return err - } - if instances == nil { - return fmt.Errorf("tdcpg instances not exists. clusterId:[%s]", defaultTdcpgClusterId) - } - - // delete all instances which has specified prefix under the default cluster - for _, v := range instances { - delId := v.InstanceId - delName := v.InstanceName - status := *v.Status - - if status == "running" && strings.HasPrefix(*delName, defaultTdcpgTestNamePrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - err := tdcpgService.DeleteTdcpgInstanceById(ctx, helper.String(defaultTdcpgClusterId), delId) - if err != nil { - return retryError(err) - } - return nil - }) - if err != nil { - return fmt.Errorf("[ERROR] delete tdcpg instance %s failed. reason:[%s]", *delId, err.Error()) - } - } - } - return nil -} - -func TestAccTencentCloudTdcpgInstanceResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTdcpgInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: fmt.Sprintf(testAccTdcpgInstance_basic, defaultTdcpgClusterId, defaultTdcpgTestNamePrefix), - Check: resource.ComposeTestCheckFunc( - testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_instance.instance", "cpu"), - resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_instance.instance", "memory"), - resource.TestMatchResourceAttr("tencentcloud_tdcpg_instance.instance", "instance_name", regexp.MustCompile(defaultTdcpgTestNamePrefix)), - ), - }, - { - Config: testAccTdcpgInstance_update(), - Check: resource.ComposeTestCheckFunc( - testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cpu", "2"), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "memory", "4"), - resource.TestMatchResourceAttr("tencentcloud_tdcpg_instance.instance", "instance_name", regexp.MustCompile(defaultTdcpgTestNamePrefix)), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "operation_timing", "IMMEDIATE"), - ), - }, - { - PreConfig: func() { //sleep 1 min after update - time.Sleep(time.Minute) - }, - Config: testAccTdcpgInstance_sleep(), - Check: resource.ComposeTestCheckFunc( - testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), - ), - }, - { - ResourceName: "tencentcloud_tdcpg_instance.instance", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"operation_timing"}, - }, - }, - }) -} - -func testAccCheckTdcpgInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tdcpgService := TdcpgService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tdcpg_instance" { - continue - } - ids := strings.Split(rs.Primary.ID, FILED_SP) - - ret, err := tdcpgService.DescribeTdcpgInstance(ctx, &ids[0], &ids[1]) - if err != nil { - return err - } - - if ret != nil && len(ret.InstanceSet) > 0 { - status := *ret.InstanceSet[0].Status - if status == "deleting" || status == "deleted" || status == "isolated" || status == "isolating" { - return nil - } - return fmt.Errorf("tdcpg instance still exist, id: %v, status: %v", rs.Primary.ID, status) - } - } - return nil -} - -func testAccCheckTdcpgInstanceExists(re string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[re] - if !ok { - return fmt.Errorf("tdcpg instance %s is not found", re) - } - if rs.Primary.ID == "" { - return fmt.Errorf("tdcpg instance id is not set") - } - - tdcpgService := TdcpgService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - ids := strings.Split(rs.Primary.ID, FILED_SP) - ret, err := tdcpgService.DescribeTdcpgInstance(ctx, &ids[0], &ids[1]) - if err != nil { - return err - } - - if ret == nil || len(ret.InstanceSet) == 0 { - return fmt.Errorf("tdcpg instance not found, id: %v", rs.Primary.ID) - } - - return nil - } -} - -const testAccTdcpgInstance_basic = ` - -resource "tencentcloud_tdcpg_instance" "instance" { - cluster_id = "%s" - cpu = 1 - memory = 1 - instance_name = "%sinstance" -} - -` - -func testAccTdcpgInstance_update() string { - return fmt.Sprintf(` - resource "tencentcloud_tdcpg_instance" "instance" { - cluster_id = "%s" - cpu = 2 - memory = 4 - instance_name = "%sinstance" - operation_timing = "IMMEDIATE" - } - `, defaultTdcpgClusterId, defaultTdcpgTestNamePrefix) -} - -func testAccTdcpgInstance_sleep() string { - return testAccTdcpgInstance_update() -} diff --git a/tencentcloud/resource_tc_tdmq_instance.go b/tencentcloud/resource_tc_tdmq_instance.go deleted file mode 100644 index 28d01cabe3..0000000000 --- a/tencentcloud/resource_tc_tdmq_instance.go +++ /dev/null @@ -1,217 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqCreate, - Read: resourceTencentCloudTdmqRead, - Update: resourceTencentCloudTdmqUpdate, - Delete: resourceTencentCloudTdmqDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "cluster_name": { - Type: schema.TypeString, - Required: true, - Description: "The name of tdmq cluster to be created.", - }, - "bind_cluster_id": { - Type: schema.TypeInt, - Optional: true, - Description: "The Dedicated Cluster Id.", - }, - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Description of the tdmq cluster.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - }, - } -} - -func resourceTencentCloudTdmqCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - //internal version: replace client 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 client end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - - var ( - request = tdmq.NewCreateClusterRequest() - response *tdmq.CreateClusterResponse - ) - if v, ok := d.GetOk("cluster_name"); ok { - request.ClusterName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("bind_cluster_id"); ok { - request.BindClusterId = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateCluster(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create tdmq instance failed, reason:%+v", logId, err) - return err - } - - clusterId := *response.Response.ClusterId - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - //internal version: replace buildName begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tdmq:%s:uin/:cluster/%s", region, clusterId) - //internal version: replace buildName 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, tags, nil); err != nil { - return err - } - - //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. - } - - d.SetId(clusterId) - - return resourceTencentCloudTdmqRead(d, meta) -} - -func resourceTencentCloudTdmqRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := tdmqService.DescribeTdmqInstanceById(ctx, id) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("cluster_name", info.ClusterName) - _ = d.Set("remark", info.Remark) - return nil - }) - if err != nil { - return err - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "tdmq", "cluster", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTdmqUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - id := d.Id() - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - //internal version: replace var 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 var end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - - var ( - clusterName string - remark string - ) - old, now := d.GetChange("cluster_name") - if d.HasChange("cluster_name") { - clusterName = now.(string) - } else { - clusterName = old.(string) - } - - old, now = d.GetChange("remark") - if d.HasChange("remark") { - remark = now.(string) - } else { - remark = old.(string) - } - - if err := service.ModifyTdmqInstanceAttribute(ctx, id, clusterName, remark); err != nil { - return err - } - - if d.HasChange("tags") { - //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. - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); 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. - } - return resourceTencentCloudTdmqRead(d, meta) -} - -func resourceTencentCloudTdmqDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - clusterId := d.Id() - - if err := service.DeleteTdmqInstance(ctx, clusterId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_namespace.go b/tencentcloud/resource_tc_tdmq_namespace.go deleted file mode 100644 index 4e6a402aee..0000000000 --- a/tencentcloud/resource_tc_tdmq_namespace.go +++ /dev/null @@ -1,253 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "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" - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" -) - -func resourceTencentCloudTdmqNamespace() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqNamespaceCreate, - Read: resourceTencentCloudTdmqNamespaceRead, - Update: resourceTencentCloudTdmqNamespaceUpdate, - Delete: resourceTencentCloudTdmqNamespaceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "environ_name": { - Type: schema.TypeString, - Required: true, - Description: "The name of namespace to be created.", - }, - "msg_ttl": { - Type: schema.TypeInt, - Required: true, - Description: "The expiration time of unconsumed message.", - }, - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "The Dedicated Cluster Id.", - }, - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Description of the namespace.", - }, - "retention_policy": { - Type: schema.TypeList, - Optional: true, - Computed: true, - MaxItems: 1, - Description: "The Policy of message to retain. Format like: `{time_in_minutes: Int, size_in_mb: Int}`. `time_in_minutes`: the time of message to retain; `size_in_mb`: the size of message to retain.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "time_in_minutes": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "the time of message to retain.", - }, - "size_in_mb": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Description: "the size of message to retain.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudTdmqNamespaceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - environ_name string - msg_ttl uint64 - remark string - clusterId string - retentionPolicy tdmq.RetentionPolicy - ) - if temp, ok := d.GetOk("environ_name"); ok { - environ_name = temp.(string) - if len(environ_name) < 1 { - return fmt.Errorf("environ_name should be not empty string") - } - } - - msg_ttl = uint64(d.Get("msg_ttl").(int)) - - if temp, ok := d.GetOk("cluster_id"); ok { - clusterId = temp.(string) - } - - if temp, ok := d.GetOk("remark"); ok { - remark = temp.(string) - } - - if temp, ok := d.GetOk("retention_policy"); ok { - policy := temp.([]interface{}) - for _, item := range policy { - value := item.(map[string]interface{}) - timeInMinutes := int64(value["time_in_minutes"].(int)) - sizeInMB := int64(value["size_in_mb"].(int)) - retentionPolicy.TimeInMinutes = &timeInMinutes - retentionPolicy.SizeInMB = &sizeInMB - } - } - environId, err := tdmqService.CreateTdmqNamespace(ctx, environ_name, msg_ttl, clusterId, remark, retentionPolicy) - if err != nil { - return err - } - - d.SetId(strings.Join([]string{environId, clusterId}, FILED_SP)) - return resourceTencentCloudTdmqNamespaceRead(d, meta) -} - -func resourceTencentCloudTdmqNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - environId := idSplit[0] - clusterId := idSplit[1] - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := tdmqService.DescribeTdmqNamespaceById(ctx, environId, clusterId) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("environ_name", info.EnvironmentId) - _ = d.Set("cluster_id", clusterId) - _ = d.Set("msg_ttl", info.MsgTTL) - _ = d.Set("remark", info.Remark) - - tmpList := make([]map[string]interface{}, 0) - retentionPolicy := make(map[string]interface{}, 2) - retentionPolicy["time_in_minutes"] = info.RetentionPolicy.TimeInMinutes - retentionPolicy["size_in_mb"] = info.RetentionPolicy.SizeInMB - tmpList = append(tmpList, retentionPolicy) - _ = d.Set("retention_policy", tmpList) - return nil - }) - if err != nil { - return err - } - return nil -} - -func resourceTencentCloudTdmqNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - environId := idSplit[0] - clusterId := idSplit[1] - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - msgTtl uint64 - remark string - retentionPolicy = new(tdmq.RetentionPolicy) - ) - - old, now := d.GetChange("msg_ttl") - if d.HasChange("msg_ttl") { - msgTtl = uint64(now.(int)) - } else { - msgTtl = uint64(old.(int)) - } - - old, now = d.GetChange("remark") - if d.HasChange("remark") { - remark = now.(string) - } else { - remark = old.(string) - } - - _, now = d.GetChange("retention_policy") - if d.HasChange("retention_policy") { - policy := now.([]interface{}) - - for _, item := range policy { - value := item.(map[string]interface{}) - timeInMinutes := int64(value["time_in_minutes"].(int)) - sizeInMB := int64(value["size_in_mb"].(int)) - retentionPolicy.TimeInMinutes = &timeInMinutes - retentionPolicy.SizeInMB = &sizeInMB - } - } - - d.Partial(true) - if err := service.ModifyTdmqNamespaceAttribute(ctx, environId, msgTtl, remark, clusterId, retentionPolicy); err != nil { - return err - } - - d.Partial(false) - return resourceTencentCloudTdmqNamespaceRead(d, meta) -} - -func resourceTencentCloudTdmqNamespaceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - environId := idSplit[0] - clusterId := idSplit[1] - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - if err := service.DeleteTdmqNamespace(ctx, environId, clusterId); err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == VPCNotFound { - return nil - } - } - return resource.RetryableError(err) - } - return nil - }) - - return err -} diff --git a/tencentcloud/resource_tc_tdmq_namespace_role_attachment.go b/tencentcloud/resource_tc_tdmq_namespace_role_attachment.go deleted file mode 100644 index 189c37fc24..0000000000 --- a/tencentcloud/resource_tc_tdmq_namespace_role_attachment.go +++ /dev/null @@ -1,214 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - - "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" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqNamespaceRoleAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqNamespaceRoleAttachmentCreate, - Read: resourceTencentCloudTdmqNamespaceRoleAttachmentRead, - Update: resourceTencentCloudTdmqNamespaceRoleAttachmentUpdate, - Delete: resourceTencentCloudTdmqNamespaceRoleAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "environ_id": { - Type: schema.TypeString, - Required: true, - Description: "The name of tdmq namespace.", - }, - "role_name": { - Type: schema.TypeString, - Required: true, - Description: "The name of tdmq role.", - }, - "permissions": { - Type: schema.TypeList, - Elem: &schema.Schema{Type: schema.TypeString}, - Required: true, - Description: "The permissions of tdmq role.", - }, - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "The id of tdmq cluster.", - }, - //compute - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Creation time of resource.", - }, - }, - } -} - -func resourceTencentCloudTdmqNamespaceRoleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - environId string - roleName string - permissions []*string - clusterId string - ) - if temp, ok := d.GetOk("environ_id"); ok { - environId = temp.(string) - if len(environId) < 1 { - return fmt.Errorf("environ_id should be not empty string") - } - } - - if temp, ok := d.GetOk("role_name"); ok { - roleName = temp.(string) - if len(roleName) < 1 { - return fmt.Errorf("role_name should be not empty string") - } - } - - if v, ok := d.GetOk("permissions"); ok { - for _, id := range v.([]interface{}) { - permissions = append(permissions, helper.String(id.(string))) - } - } - - if temp, ok := d.GetOk("cluster_id"); ok { - clusterId = temp.(string) - if len(clusterId) < 1 { - return fmt.Errorf("cluster_id should be not empty string") - } - } - - err := tdmqService.CreateTdmqNamespaceRoleAttachment(ctx, environId, roleName, permissions, clusterId) - if err != nil { - return err - } - - d.SetId(environId + FILED_SP + roleName) - - return resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d, meta) -} - -func resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("environment role id is borken, id is %s", d.Id()) - } - environId := idSplit[0] - roleName := idSplit[1] - clusterId := d.Get("cluster_id").(string) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := tdmqService.DescribeTdmqNamespaceRoleAttachment(ctx, environId, roleName, clusterId) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - _ = d.Set("environ_id", info.EnvironmentId) - _ = d.Set("role_name", info.RoleName) - _ = d.Set("permissions", info.Permissions) - _ = d.Set("create_time", info.CreateTime) - return nil - }) - if err != nil { - return err - } - return nil -} - -func resourceTencentCloudTdmqNamespaceRoleAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("environment role id is borken, id is %s", d.Id()) - } - environId := idSplit[0] - roleName := idSplit[1] - clusterId := d.Get("cluster_id").(string) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - permissions []*string - ) - old, now := d.GetChange("permissions") - if d.HasChange("permissions") { - for _, id := range now.([]interface{}) { - permissions = append(permissions, helper.String(id.(string))) - } - } else { - for _, id := range old.([]interface{}) { - permissions = append(permissions, helper.String(id.(string))) - } - } - - d.Partial(true) - - if err := service.ModifyTdmqNamespaceRoleAttachment(ctx, environId, roleName, permissions, clusterId); err != nil { - return err - } - - d.Partial(false) - return resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d, meta) -} - -func resourceTencentCloudTdmqNamespaceRoleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("environment role id is borken, id is %s", d.Id()) - } - environId := idSplit[0] - roleName := idSplit[1] - clusterId := d.Get("cluster_id").(string) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - if err := service.DeleteTdmqNamespaceRoleAttachment(ctx, environId, roleName, clusterId); err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == VPCNotFound { - return nil - } - } - return resource.RetryableError(err) - } - return nil - }) - - return err -} diff --git a/tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host.go b/tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host.go deleted file mode 100644 index 9a4409086b..0000000000 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host.go +++ /dev/null @@ -1,221 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqRabbitmqVirtualHost() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqRabbitmqVirtualHostCreate, - Read: resourceTencentCloudTdmqRabbitmqVirtualHostRead, - Update: resourceTencentCloudTdmqRabbitmqVirtualHostUpdate, - Delete: resourceTencentCloudTdmqRabbitmqVirtualHostDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - Description: "Cluster instance ID.", - }, - "virtual_host": { - Required: true, - Type: schema.TypeString, - Description: "vhost name.", - }, - "description": { - Optional: true, - Type: schema.TypeString, - Description: "describe.", - }, - "trace_flag": { - Optional: true, - Type: schema.TypeBool, - Description: "Message track switch, true is on, false is off, default is off.", - }, - }, - } -} - -func resourceTencentCloudTdmqRabbitmqVirtualHostCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = tdmq.NewCreateRabbitMQVirtualHostRequest() - response = tdmq.NewCreateRabbitMQVirtualHostResponse() - instanceId string - virtualHost string - ) - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - instanceId = v.(string) - } - - if v, ok := d.GetOk("virtual_host"); ok { - request.VirtualHost = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("trace_flag"); ok { - request.TraceFlag = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRabbitMQVirtualHost(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()) - } - - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create tdmq rabbitmqVirtualHost failed, reason:%+v", logId, err) - return err - } - - virtualHost = *response.Response.VirtualHost - d.SetId(strings.Join([]string{instanceId, virtualHost}, FILED_SP)) - - return resourceTencentCloudTdmqRabbitmqVirtualHostRead(d, meta) -} - -func resourceTencentCloudTdmqRabbitmqVirtualHostRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - instanceId := idSplit[0] - virtualHost := idSplit[1] - - rabbitmqVirtualHost, err := service.DescribeTdmqRabbitmqVirtualHostById(ctx, instanceId, virtualHost) - if err != nil { - return err - } - - if rabbitmqVirtualHost == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TdmqRabbitmqVirtualHost` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if rabbitmqVirtualHost.InstanceId != nil { - _ = d.Set("instance_id", rabbitmqVirtualHost.InstanceId) - } - - if rabbitmqVirtualHost.VirtualHost != nil { - _ = d.Set("virtual_host", rabbitmqVirtualHost.VirtualHost) - } - - if rabbitmqVirtualHost.Description != nil { - _ = d.Set("description", rabbitmqVirtualHost.Description) - } - - return nil -} - -func resourceTencentCloudTdmqRabbitmqVirtualHostUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = tdmq.NewModifyRabbitMQVirtualHostRequest() - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - - instanceId := idSplit[0] - virtualHost := idSplit[1] - - immutableArgs := []string{"instance_id", "virtual_host"} - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("description") || d.HasChange("trace_flag") { - request.InstanceId = &instanceId - request.VirtualHost = &virtualHost - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("trace_flag"); ok { - request.TraceFlag = helper.Bool(v.(bool)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRabbitMQVirtualHost(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 update tdmq rabbitmqVirtualHost failed, reason:%+v", logId, err) - return err - } - } - - return resourceTencentCloudTdmqRabbitmqVirtualHostRead(d, meta) -} - -func resourceTencentCloudTdmqRabbitmqVirtualHostDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - - instanceId := idSplit[0] - virtualHost := idSplit[1] - - if err := service.DeleteTdmqRabbitmqVirtualHostById(ctx, instanceId, virtualHost); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_environment_role.go b/tencentcloud/resource_tc_tdmq_rocketmq_environment_role.go deleted file mode 100644 index a1d5bbefd1..0000000000 --- a/tencentcloud/resource_tc_tdmq_rocketmq_environment_role.go +++ /dev/null @@ -1,225 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqRocketmqEnvironmentRole() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTdmqRocketmqEnvironmentRoleRead, - Create: resourceTencentCloudTdmqRocketmqEnvironmentRoleCreate, - Update: resourceTencentCloudTdmqRocketmqEnvironmentRoleUpdate, - Delete: resourceTencentCloudTdmqRocketmqEnvironmentRoleDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "environment_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Environment (namespace) name.", - }, - - "role_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Role Name.", - }, - - "permissions": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Required: true, - Description: "Permissions, which is a non-empty string array of `produce` and `consume` at the most.", - }, - - "cluster_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Cluster ID (required).", - }, - }, - } -} - -func resourceTencentCloudTdmqRocketmqEnvironmentRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tdmqRocketmq.NewCreateEnvironmentRoleRequest() - clusterId string - roleName string - environmentName string - ) - - if v, ok := d.GetOk("environment_name"); ok { - environmentName = v.(string) - request.EnvironmentId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("role_name"); ok { - roleName = v.(string) - request.RoleName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("permissions"); ok { - permissionsSet := v.(*schema.Set).List() - for i := range permissionsSet { - permissions := permissionsSet[i].(string) - request.Permissions = append(request.Permissions, &permissions) - } - } - - if v, ok := d.GetOk("cluster_id"); ok { - clusterId = v.(string) - request.ClusterId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateEnvironmentRole(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 tdmqRocketmq environmentRole failed, reason:%+v", logId, err) - return err - } - - d.SetId(clusterId + FILED_SP + roleName + FILED_SP + environmentName) - return resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - environmentName := idSplit[2] - - environmentRoles, err := service.DescribeTdmqRocketmqEnvironmentRole(ctx, clusterId, roleName, environmentName) - - if err != nil { - return err - } - - if len(environmentRoles) == 0 { - d.SetId("") - return fmt.Errorf("resource `environmentRole` %s does not exist", roleName) - } - environmentRole := environmentRoles[0] - _ = d.Set("environment_name", environmentRole.EnvironmentId) - _ = d.Set("role_name", environmentRole.RoleName) - permissions := make([]string, 0) - for _, i := range environmentRole.Permissions { - permissions = append(permissions, *i) - } - _ = d.Set("permissions", permissions) - _ = d.Set("cluster_id", clusterId) - - return nil -} - -func resourceTencentCloudTdmqRocketmqEnvironmentRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tdmqRocketmq.NewModifyEnvironmentRoleRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - environmentId := idSplit[2] - - request.ClusterId = &clusterId - request.RoleName = &roleName - request.EnvironmentId = &environmentId - - if d.HasChange("permissions") { - if v, ok := d.GetOk("permissions"); ok { - permissionsSet := v.(*schema.Set).List() - for i := range permissionsSet { - permissions := permissionsSet[i].(string) - request.Permissions = append(request.Permissions, &permissions) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyEnvironmentRole(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 tdmqRocketmq environmentRole failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqEnvironmentRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - environmentId := idSplit[2] - - if err := service.DeleteTdmqRocketmqEnvironmentRoleById(ctx, clusterId, roleName, environmentId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_namespace.go b/tencentcloud/resource_tc_tdmq_rocketmq_namespace.go deleted file mode 100644 index f7533430a7..0000000000 --- a/tencentcloud/resource_tc_tdmq_rocketmq_namespace.go +++ /dev/null @@ -1,225 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqRocketmqNamespace() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTdmqRocketmqNamespaceRead, - Create: resourceTencentCloudTdmqRocketmqNamespaceCreate, - Update: resourceTencentCloudTdmqRocketmqNamespaceUpdate, - Delete: resourceTencentCloudTdmqRocketmqNamespaceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "Cluster ID.", - }, - - "namespace_name": { - Type: schema.TypeString, - Required: true, - Description: "Namespace name, which can contain 3-64 letters, digits, hyphens, and underscores.", - }, - - "ttl": { - Type: schema.TypeInt, - Optional: true, - Deprecated: "It has been deprecated from version 1.81.20. Due to the adjustment of RocketMQ, the creation or modification of this parameter will be ignored.", - Description: "Retention time of unconsumed messages in milliseconds. Value range: 60 seconds-15 days.", - }, - - "retention_time": { - Type: schema.TypeInt, - Optional: true, - Deprecated: "It has been deprecated from version 1.81.20. Due to the adjustment of RocketMQ, the creation or modification of this parameter will be ignored.", - Description: "Retention time of persisted messages in milliseconds.", - }, - - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Remarks (up to 128 characters).", - }, - - "public_endpoint": { - Type: schema.TypeString, - Computed: true, - Description: "Public network access point address.", - }, - - "vpc_endpoint": { - Type: schema.TypeString, - Computed: true, - Description: "VPC access point address.", - }, - }, - } -} - -func resourceTencentCloudTdmqRocketmqNamespaceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_namespace.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - var ( - request = tdmqRocketmq.NewCreateRocketMQNamespaceRequest() - namespaceName string - clusterId string - ) - - if v, ok := d.GetOk("cluster_id"); ok { - clusterId = v.(string) - request.ClusterId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("namespace_name"); ok { - namespaceName = v.(string) - request.NamespaceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("remark"); ok { - - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRocketMQNamespace(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 tdmqRocketmq namespace failed, reason:%+v", logId, err) - return err - } - d.SetId(clusterId + FILED_SP + namespaceName) - return resourceTencentCloudTdmqRocketmqNamespaceRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_namespace.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - namespaceName := idSplit[1] - - namespaceList, err := service.DescribeTdmqRocketmqNamespace(ctx, namespaceName, clusterId) - - if err != nil || len(namespaceList) == 0 { - return err - } - namespace := namespaceList[0] - if namespace == nil { - d.SetId("") - return fmt.Errorf("resource `namespace` %s does not exist", namespaceName) - } - - _ = d.Set("cluster_id", clusterId) - _ = d.Set("namespace_name", *namespace.NamespaceId) - _ = d.Set("remark", namespace.Remark) - _ = d.Set("public_endpoint", namespace.PublicEndpoint) - _ = d.Set("vpc_endpoint", namespace.VpcEndpoint) - - return nil -} - -func resourceTencentCloudTdmqRocketmqNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_namespace.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tdmqRocketmq.NewModifyRocketMQNamespaceRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - namespaceName := idSplit[1] - - request.NamespaceId = &namespaceName - request.ClusterId = &clusterId - - immutableArgs := []string{"cluster_id", "namespace_name"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("remark") { - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQNamespace(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 tdmqRocketmq namespace failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTdmqRocketmqNamespaceRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqNamespaceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_namespace.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - namespaceName := idSplit[1] - - if err := service.DeleteTdmqRocketmqNamespaceById(ctx, namespaceName, clusterId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_role.go b/tencentcloud/resource_tc_tdmq_rocketmq_role.go deleted file mode 100644 index 5a640b497b..0000000000 --- a/tencentcloud/resource_tc_tdmq_rocketmq_role.go +++ /dev/null @@ -1,225 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqRocketmqRole() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTdmqRocketmqRoleRead, - Create: resourceTencentCloudTdmqRocketmqRoleCreate, - Update: resourceTencentCloudTdmqRocketmqRoleUpdate, - Delete: resourceTencentCloudTdmqRocketmqRoleDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "role_name": { - Type: schema.TypeString, - Required: true, - Description: "Role name, which can contain up to 32 letters, digits, hyphens, and underscores.", - }, - - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Remarks (up to 128 characters).", - }, - - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "Cluster ID (required).", - }, - - "token": { - Type: schema.TypeString, - Computed: true, - Description: "Value of the role token.", - }, - - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Creation time.", - }, - - "update_time": { - Type: schema.TypeString, - Computed: true, - Description: "Update time.", - }, - }, - } -} - -func resourceTencentCloudTdmqRocketmqRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_role.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tdmqRocketmq.NewCreateRoleRequest() - clusterId string - roleName string - ) - - if v, ok := d.GetOk("role_name"); ok { - roleName = v.(string) - request.RoleName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("remark"); ok { - - request.Remark = helper.String(v.(string)) - } - - if v, ok := d.GetOk("cluster_id"); ok { - clusterId = v.(string) - request.ClusterId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRole(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 tdmqRocketmq role failed, reason:%+v", logId, err) - return err - } - - d.SetId(clusterId + FILED_SP + roleName) - return resourceTencentCloudTdmqRocketmqRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_role.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - - role, err := service.DescribeTdmqRocketmqRole(ctx, clusterId, roleName) - - if err != nil { - return err - } - - if role == nil { - d.SetId("") - return fmt.Errorf("resource `role` %s does not exist", roleName) - } - - _ = d.Set("role_name", role.RoleName) - _ = d.Set("remark", role.Remark) - _ = d.Set("cluster_id", clusterId) - _ = d.Set("token", role.Token) - _ = d.Set("create_time", role.CreateTime) - _ = d.Set("update_time", role.UpdateTime) - - return nil -} - -func resourceTencentCloudTdmqRocketmqRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_role.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tdmqRocketmq.NewModifyRoleRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - - request.ClusterId = &clusterId - request.RoleName = &roleName - - if d.HasChange("role_name") { - - return fmt.Errorf("`role_name` do not support change now.") - - } - - if d.HasChange("remark") { - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - } - - if d.HasChange("cluster_id") { - - return fmt.Errorf("`cluster_id` do not support change now.") - - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRole(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 tdmqRocketmq role failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTdmqRocketmqRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRocketmqRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_role.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - clusterId := idSplit[0] - roleName := idSplit[1] - - if err := service.DeleteTdmqRocketmqRoleById(ctx, clusterId, roleName); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_role.go b/tencentcloud/resource_tc_tdmq_role.go deleted file mode 100644 index 305063bd51..0000000000 --- a/tencentcloud/resource_tc_tdmq_role.go +++ /dev/null @@ -1,169 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "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 resourceTencentCloudTdmqRole() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqRoleCreate, - Read: resourceTencentCloudTdmqRoleRead, - Update: resourceTencentCloudTdmqRoleUpdate, - Delete: resourceTencentCloudTdmqRoleDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "role_name": { - Type: schema.TypeString, - Required: true, - Description: "The name of tdmq role.", - }, - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "The id of tdmq cluster.", - }, - "remark": { - Type: schema.TypeString, - Required: true, - Description: "The description of tdmq role.", - }, - }, - } -} - -func resourceTencentCloudTdmqRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_role.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - roleName string - clusterId string - remark string - ) - if temp, ok := d.GetOk("role_name"); ok { - roleName = temp.(string) - if len(roleName) < 1 { - return fmt.Errorf("role_name should be not empty string") - } - } - - if temp, ok := d.GetOk("cluster_id"); ok { - clusterId = temp.(string) - if len(clusterId) < 1 { - return fmt.Errorf("cluster_id should be not empty string") - } - } - - if temp, ok := d.GetOk("remark"); ok { - remark = temp.(string) - } - - clusterId, err := tdmqService.CreateTdmqRole(ctx, roleName, clusterId, remark) - if err != nil { - return err - } - d.SetId(clusterId) - - return resourceTencentCloudTdmqRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_role.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - roleName := d.Id() - clusterId := d.Get("cluster_id").(string) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := tdmqService.DescribeTdmqRoleById(ctx, roleName, clusterId) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("role_name", info.RoleName) - _ = d.Set("remark", info.Remark) - return nil - }) - if err != nil { - return err - } - return nil -} - -func resourceTencentCloudTdmqRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_role.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - roleName := d.Id() - clusterId := d.Get("cluster_id").(string) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - remark string - ) - old, now := d.GetChange("remark") - if d.HasChange("remark") { - remark = now.(string) - } else { - remark = old.(string) - } - - d.Partial(true) - - if err := service.ModifyTdmqRoleAttribute(ctx, roleName, clusterId, remark); err != nil { - return err - } - - d.Partial(false) - return resourceTencentCloudTdmqRoleRead(d, meta) -} - -func resourceTencentCloudTdmqRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_role.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - roleName := d.Id() - clusterId := d.Get("cluster_id").(string) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - if err := service.DeleteTdmqRole(ctx, roleName, clusterId); err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == VPCNotFound { - return nil - } - } - return resource.RetryableError(err) - } - return nil - }) - - return err -} diff --git a/tencentcloud/resource_tc_tdmq_subscription_attachment.go b/tencentcloud/resource_tc_tdmq_subscription_attachment.go deleted file mode 100644 index b8c5e1c6e1..0000000000 --- a/tencentcloud/resource_tc_tdmq_subscription_attachment.go +++ /dev/null @@ -1,291 +0,0 @@ -/* -Provides a resource to create a tdmq subscription_attachment - -Example Usage - -```hcl -resource "tencentcloud_tdmq_instance" "example" { - cluster_name = "tf_example" - remark = "remark." - tags = { - "createdBy" = "terraform" - } -} - -resource "tencentcloud_tdmq_namespace" "example" { - environ_name = "tf_example" - msg_ttl = 300 - cluster_id = tencentcloud_tdmq_instance.example.id - retention_policy { - time_in_minutes = 60 - size_in_mb = 10 - } - remark = "remark." -} - -resource "tencentcloud_tdmq_topic" "example" { - environ_id = tencentcloud_tdmq_namespace.example.environ_name - cluster_id = tencentcloud_tdmq_instance.example.id - topic_name = "tf-example-topic" - partitions = 6 - pulsar_topic_type = 3 - remark = "remark." -} - -resource "tencentcloud_tdmq_subscription_attachment" "example" { - environment_id = tencentcloud_tdmq_namespace.example.environ_name - cluster_id = tencentcloud_tdmq_instance.example.id - topic_name = tencentcloud_tdmq_topic.example.topic_name - subscription_name = "tf-example-subcription" - remark = "remark." - auto_create_policy_topic = true -} -``` - -Import - -tdmq subscription_attachment can be imported using the id, e.g. - -``` -terraform import tencentcloud_tdmq_subscription_attachment.subscription_attachment subscription_attachment_id -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTdmqSubscriptionAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqSubscriptionAttachmentCreate, - Read: resourceTencentCloudTdmqSubscriptionAttachmentRead, - Update: resourceTencentCloudTdmqSubscriptionAttachmentUpdate, - Delete: resourceTencentCloudTdmqSubscriptionAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "environment_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Environment (namespace) name.", - }, - "topic_name": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "topic name.", - }, - "subscription_name": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Subscriber name, no more than 128 characters.", - }, - "remark": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Remarks, within 128 characters.", - }, - "cluster_id": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ID of the Pulsar cluster.", - }, - "auto_create_policy_topic": { - Optional: true, - Type: schema.TypeBool, - Description: "Whether to automatically create dead letters and retry topics, True means to create, False means not to create, the default is to automatically create dead letters and retry topics.", - }, - }, - } -} - -func resourceTencentCloudTdmqSubscriptionAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_subscription_attachment.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = tdmq.NewCreateSubscriptionRequest() - environmentId string - Topic string - subscriptionName string - clusterId string - autoCreatePolicyTopic bool - ) - - if v, ok := d.GetOk("environment_id"); ok { - request.EnvironmentId = helper.String(v.(string)) - environmentId = v.(string) - } - - if v, ok := d.GetOk("topic_name"); ok { - request.TopicName = helper.String(v.(string)) - Topic = v.(string) - } - - if v, ok := d.GetOk("subscription_name"); ok { - request.SubscriptionName = helper.String(v.(string)) - subscriptionName = v.(string) - } - - if v, ok := d.GetOk("is_idempotent"); ok { - request.IsIdempotent = helper.Bool(v.(bool)) - } - - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - if v, ok := d.GetOk("cluster_id"); ok { - request.ClusterId = helper.String(v.(string)) - clusterId = v.(string) - } - - if v, ok := d.GetOk("auto_create_policy_topic"); ok { - request.AutoCreatePolicyTopic = helper.Bool(v.(bool)) - autoCreatePolicyTopic = v.(bool) - } - - var isIdempotent = false - request.IsIdempotent = &isIdempotent - request.AutoCreatePolicyTopic = &autoCreatePolicyTopic - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateSubscription(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 tdmq subscriptionAttachment failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{environmentId, Topic, subscriptionName, clusterId}, FILED_SP)) - - return resourceTencentCloudTdmqSubscriptionAttachmentRead(d, meta) -} - -func resourceTencentCloudTdmqSubscriptionAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_subscription_attachment.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 4 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - environmentId := idSplit[0] - Topic := idSplit[1] - subscriptionName := idSplit[2] - clusterId := idSplit[3] - - subscriptionAttachment, err := service.DescribeTdmqSubscriptionAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId) - if err != nil { - return err - } - - if subscriptionAttachment == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TdmqSubscriptionAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if subscriptionAttachment.EnvironmentId != nil { - _ = d.Set("environment_id", subscriptionAttachment.EnvironmentId) - } - - if subscriptionAttachment.TopicName != nil { - _ = d.Set("topic_name", subscriptionAttachment.TopicName) - } - - if subscriptionAttachment.SubscriptionName != nil { - _ = d.Set("subscription_name", subscriptionAttachment.SubscriptionName) - } - - if subscriptionAttachment.Remark != nil { - _ = d.Set("remark", subscriptionAttachment.Remark) - } - - _ = d.Set("cluster_id", clusterId) - - // Get Topics Status For auto_create_policy_topic - has, err := service.GetTdmqTopicsAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId) - if err != nil { - return err - } - - _ = d.Set("auto_create_policy_topic", has) - - return nil -} - -func resourceTencentCloudTdmqSubscriptionAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_subscription_attachment.update")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudTdmqSubscriptionAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_subscription_attachment.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - autoCreatePolicyTopic bool - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 4 { - return fmt.Errorf("id is broken, id is %s", d.Id()) - } - - environmentId := idSplit[0] - Topic := idSplit[1] - subscriptionName := idSplit[2] - clusterId := idSplit[3] - - // Delete Subscription - if err := service.DeleteTdmqSubscriptionAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId); err != nil { - return err - } - - if v, ok := d.GetOk("auto_create_policy_topic"); ok { - autoCreatePolicyTopic = v.(bool) - if autoCreatePolicyTopic { - // Delete Topics - if err := service.DeleteTdmqTopicsAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId); err != nil { - return err - } - } - } - - return nil -} diff --git a/tencentcloud/resource_tc_tdmq_topic.go b/tencentcloud/resource_tc_tdmq_topic.go deleted file mode 100644 index 096082904e..0000000000 --- a/tencentcloud/resource_tc_tdmq_topic.go +++ /dev/null @@ -1,237 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - - "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 resourceTencentCloudTdmqTopic() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTdmqTopicCreate, - Read: resourceTencentCloudTdmqTopicRead, - Update: resourceTencentCloudTdmqTopicUpdate, - Delete: resourceTencentCloudTdmqTopicDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "environ_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "The name of tdmq namespace.", - }, - "topic_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "The name of topic to be created.", - }, - "partitions": { - Type: schema.TypeInt, - Required: true, - Description: "The partitions of topic.", - }, - "topic_type": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - Deprecated: "This input will be gradually discarded and can be switched to PulsarTopicType parameter 0: Normal message; 1: Global sequential messages; 2: Local sequential messages; 3: Retrying queue; 4: Dead letter queue.", - Description: "The type of topic.", - }, - "cluster_id": { - Type: schema.TypeString, - Required: true, - Description: "The Dedicated Cluster Id.", - }, - "pulsar_topic_type": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - ConflictsWith: []string{"topic_type"}, - Description: "Pulsar Topic Type 0: Non-persistent non-partitioned 1: Non-persistent partitioned 2: Persistent non-partitioned 3: Persistent partitioned.", - }, - "remark": { - Type: schema.TypeString, - Optional: true, - Description: "Description of the namespace.", - }, - - //compute - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Creation time of resource.", - }, - }, - } -} - -func resourceTencentCloudTdmqTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_topic.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - environId string - topicName string - partitions uint64 - topicType int64 - remark string - clusterId string - pulsarTopicType int64 - ) - if temp, ok := d.GetOk("environ_id"); ok { - environId = temp.(string) - if len(environId) < 1 { - return fmt.Errorf("environ_id should be not empty string") - } - } - if temp, ok := d.GetOk("topic_name"); ok { - topicName = temp.(string) - if len(topicName) < 1 { - return fmt.Errorf("topic_name should be not empty string") - } - } - partitions = uint64(d.Get("partitions").(int)) - if temp, ok := d.GetOk("remark"); ok { - remark = temp.(string) - } - if temp, ok := d.GetOk("cluster_id"); ok { - clusterId = temp.(string) - } - - if v, ok := d.GetOkExists("pulsar_topic_type"); ok { - pulsarTopicType = int64(v.(int)) - } else { - pulsarTopicType = NonePulsarTopicType - if v, ok := d.GetOkExists("topic_type"); ok { - topicType = int64(v.(int)) - } else { - topicType = NoneTopicType - } - } - - err := tdmqService.CreateTdmqTopic(ctx, environId, topicName, partitions, topicType, remark, clusterId, pulsarTopicType) - if err != nil { - return err - } - d.SetId(topicName) - - return resourceTencentCloudTdmqTopicRead(d, meta) -} - -func resourceTencentCloudTdmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - topicName := d.Id() - environId := d.Get("environ_id").(string) - clusterId := d.Get("cluster_id").(string) - - tdmqService := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - info, has, e := tdmqService.DescribeTdmqTopicById(ctx, environId, topicName, clusterId) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("partitions", info.Partitions) - _ = d.Set("topic_type", info.TopicType) - _ = d.Set("pulsar_topic_type", info.PulsarTopicType) - _ = d.Set("remark", info.Remark) - _ = d.Set("create_time", info.CreateTime) - return nil - }) - if err != nil { - return err - } - return nil -} - -func resourceTencentCloudTdmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_topic.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - if d.HasChange("topic_type") { - return fmt.Errorf("`topic_type` do not support change now.") - } - - topicName := d.Id() - environId := d.Get("environ_id").(string) - clusterId := d.Get("cluster_id").(string) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - var ( - partitions uint64 - remark string - ) - old, now := d.GetChange("partitions") - if d.HasChange("partitions") { - partitions = uint64(now.(int)) - } else { - partitions = uint64(old.(int)) - } - - old, now = d.GetChange("remark") - if d.HasChange("remark") { - remark = now.(string) - } else { - remark = old.(string) - } - - d.Partial(true) - - if err := service.ModifyTdmqTopicAttribute(ctx, environId, topicName, - partitions, remark, clusterId); err != nil { - return err - } - d.Partial(false) - return resourceTencentCloudTdmqTopicRead(d, meta) -} - -func resourceTencentCloudTdmqTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_instance.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} - - topicName := d.Id() - environId := d.Get("environ_id").(string) - clusterId := d.Get("cluster_id").(string) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - if err := service.DeleteTdmqTopic(ctx, environId, topicName, clusterId); err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == VPCNotFound { - return nil - } - } - return resource.RetryableError(err) - } - return nil - }) - - return err -} diff --git a/tencentcloud/resource_tc_tem_app_config.go b/tencentcloud/resource_tc_tem_app_config.go deleted file mode 100644 index a179531ccd..0000000000 --- a/tencentcloud/resource_tc_tem_app_config.go +++ /dev/null @@ -1,251 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTemAppConfig() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTemAppConfigRead, - Create: resourceTencentCloudTemAppConfigCreate, - Update: resourceTencentCloudTemAppConfigUpdate, - Delete: resourceTencentCloudTemAppConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "environment_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "environment ID.", - }, - - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "appConfig name.", - }, - - "config_data": { - Type: schema.TypeList, - Required: true, - Description: "payload.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "key": { - Type: schema.TypeString, - Required: true, - Description: "key.", - }, - "value": { - Type: schema.TypeString, - Required: true, - Description: "value.", - }, - }, - }, - }, - }, - } -} - -func resourceTencentCloudTemAppConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_app_config.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tem.NewCreateConfigDataRequest() - environmentId string - name string - ) - - if v, ok := d.GetOk("environment_id"); ok { - environmentId = v.(string) - request.EnvironmentId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("name"); ok { - name = v.(string) - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("config_data"); ok { - for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) - pair := tem.Pair{} - if v, ok := dMap["key"]; ok { - pair.Key = helper.String(v.(string)) - } - if v, ok := dMap["value"]; ok { - pair.Value = helper.String(v.(string)) - } - request.Data = append(request.Data, &pair) - } - - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateConfigData(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 tem appConfig failed, reason:%+v", logId, err) - return err - } - - d.SetId(environmentId + FILED_SP + name) - return resourceTencentCloudTemAppConfigRead(d, meta) -} - -func resourceTencentCloudTemAppConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_appConfig.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - environmentId := idSplit[0] - name := idSplit[1] - - appConfig, err := service.DescribeTemAppConfig(ctx, environmentId, name) - - if err != nil { - return err - } - - if appConfig == nil { - d.SetId("") - return fmt.Errorf("resource `appConfig` %s does not exist", name) - } - - _ = d.Set("environment_id", environmentId) - - if appConfig.Name != nil { - _ = d.Set("name", appConfig.Name) - } - - if appConfig.Data != nil { - dataList := []interface{}{} - for _, data := range appConfig.Data { - dataMap := map[string]interface{}{} - if data.Key != nil { - dataMap["key"] = data.Key - } - if data.Value != nil { - dataMap["value"] = data.Value - } - - dataList = append(dataList, dataMap) - } - _ = d.Set("config_data", dataList) - } - - return nil -} - -func resourceTencentCloudTemAppConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_app_config.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tem.NewModifyConfigDataRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - environmentId := idSplit[0] - name := idSplit[1] - - request.EnvironmentId = &environmentId - request.Name = &name - - if d.HasChange("environment_id") { - return fmt.Errorf("`environment_id` do not support change now.") - } - - if d.HasChange("name") { - return fmt.Errorf("`name` do not support change now.") - } - - if d.HasChange("config_data") { - if v, ok := d.GetOk("config_data"); ok { - for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) - pair := tem.Pair{} - if v, ok := dMap["key"]; ok { - pair.Key = helper.String(v.(string)) - } - if v, ok := dMap["value"]; ok { - pair.Value = helper.String(v.(string)) - } - request.Data = append(request.Data, &pair) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyConfigData(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 { - return err - } - - return resourceTencentCloudTemAppConfigRead(d, meta) -} - -func resourceTencentCloudTemAppConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_app_config.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - environmentId := idSplit[0] - name := idSplit[1] - - if err := service.DeleteTemAppConfigById(ctx, environmentId, name); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tem_app_config_test.go b/tencentcloud/resource_tc_tem_app_config_test.go deleted file mode 100644 index aaf32d1d1b..0000000000 --- a/tencentcloud/resource_tc_tem_app_config_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -// go test -i; go test -test.run TestAccTencentCloudTemAppConfigResource_basic -v -func TestAccTencentCloudTemAppConfigResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTemAppConfigDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTemAppConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemAppConfigExists("tencentcloud_tem_app_config.appConfig"), - resource.TestCheckResourceAttrSet("tencentcloud_tem_app_config.appConfig", "id"), - resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "environment_id", defaultEnvironmentId), - resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "name", "demo"), - resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.0.key", "key"), - resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.0.value", "value"), - ), - }, - { - ResourceName: "tencentcloud_tem_app_config.appConfig", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTemAppConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tem_app_config" { - continue - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - name := idSplit[1] - - res, err := service.DescribeTemAppConfig(ctx, environmentId, name) - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == "ResourceNotFound.ConfigDataNotFound" { - return nil - } - } - return err - } - - if res != nil { - return fmt.Errorf("tem app config %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTemAppConfigExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - name := idSplit[1] - - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTemAppConfig(ctx, environmentId, name) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tem app config %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTemAppConfigVar = ` -variable "environment_id" { - default = "` + defaultEnvironmentId + `" -} -` - -const testAccTemAppConfig = testAccTemAppConfigVar + ` - -resource "tencentcloud_tem_app_config" "appConfig" { - environment_id = var.environment_id - name = "demo" - config_data { - key = "key" - value = "value" - } -} - -` diff --git a/tencentcloud/resource_tc_tem_application.go b/tencentcloud/resource_tc_tem_application.go deleted file mode 100644 index da980463f5..0000000000 --- a/tencentcloud/resource_tc_tem_application.go +++ /dev/null @@ -1,320 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTemApplication() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTemApplicationRead, - Create: resourceTencentCloudTemApplicationCreate, - Update: resourceTencentCloudTemApplicationUpdate, - Delete: resourceTencentCloudTemApplicationDelete, - // Importer: &schema.ResourceImporter{ - // State: schema.ImportStatePassthrough, - // }, - Schema: map[string]*schema.Schema{ - "application_name": { - Type: schema.TypeString, - Required: true, - Description: "application name.", - }, - - "description": { - Type: schema.TypeString, - Required: true, - Description: "application description.", - }, - - "coding_language": { - Type: schema.TypeString, - Required: true, - Description: "program language, like JAVA.", - }, - - "use_default_image_service": { - Type: schema.TypeInt, - Optional: true, - Default: 0, - Description: "create image repo or not.", - }, - - "repo_type": { - Type: schema.TypeInt, - Optional: true, - Description: "repo type, 0: tcr personal, 1: tcr enterprise, 2: public repository, 3: tcr hosted by tem, 4: demo image.", - }, - - "repo_server": { - Type: schema.TypeString, - Optional: true, - Description: "registry address.", - }, - - "repo_name": { - Type: schema.TypeString, - Optional: true, - Description: "repository name.", - }, - - "instance_id": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "tcr instance id.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "application tag list.", - }, - }, - } -} - -func resourceTencentCloudTemApplicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var ( - request = tem.NewCreateApplicationRequest() - response *tem.CreateApplicationResponse - ) - - if v, ok := d.GetOk("application_name"); ok { - request.ApplicationName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOk("coding_language"); ok { - request.CodingLanguage = helper.String(v.(string)) - } - - request.UseDefaultImageService = helper.IntInt64(d.Get("use_default_image_service").(int)) - - if v, ok := d.GetOk("repo_type"); ok { - request.RepoType = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("repo_server"); ok { - request.RepoServer = helper.String(v.(string)) - } - - if v, ok := d.GetOk("repo_name"); ok { - request.RepoName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("tags"); ok { - for key, value := range v.(map[string]interface{}) { - tag := tem.Tag{ - TagKey: helper.String(key), - TagValue: helper.String(value.(string)), - } - request.Tags = append(request.Tags, &tag) - } - } - - request.DeployMode = helper.String("IMAGE") - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateApplication(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create tem application failed, reason:%+v", logId, err) - return err - } - - applicationId := *response.Response.Result - - d.SetId(applicationId) - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tem:%s:uin/:application/%s", region, applicationId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudTemApplicationRead(d, meta) -} - -func resourceTencentCloudTemApplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - - applicationId := d.Id() - - applications, err := service.DescribeTemApplication(ctx, applicationId) - - if len(applications.Result.Records) != 1 { - d.SetId("") - return nil - } - application := applications.Result.Records[0] - - if err != nil { - return err - } - - if application == nil { - d.SetId("") - return fmt.Errorf("resource `application` %s does not exist", applicationId) - } - - if application.ApplicationName != nil { - _ = d.Set("application_name", application.ApplicationName) - } - - if application.Description != nil { - _ = d.Set("description", application.Description) - } - - if application.CodingLanguage != nil { - _ = d.Set("coding_language", application.CodingLanguage) - } - - if application.RepoType != nil { - _ = d.Set("repo_type", application.RepoType) - } - - if application.RepoName != nil { - _ = d.Set("repo_name", application.RepoName) - } - - if application.InstanceId != nil { - _ = d.Set("instance_id", application.InstanceId) - } - - client := meta.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: client} - region := client.Region - tags, err := tagService.DescribeResourceTags(ctx, "tem", "application", region, applicationId) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTemApplicationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := tem.NewModifyApplicationInfoRequest() - - request.ApplicationId = helper.String(d.Id()) - - if d.HasChange("application_name") { - return fmt.Errorf("`application_name` do not support change now.") - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if d.HasChange("coding_language") { - return fmt.Errorf("`coding_language` do not support change now.") - } - - if d.HasChange("use_default_image_service") { - return fmt.Errorf("`use_default_image_service` do not support change now.") - } - - if d.HasChange("repo_type") { - return fmt.Errorf("`repo_type` do not support change now.") - } - - if d.HasChange("repo_server") { - return fmt.Errorf("`repo_server` do not support change now.") - } - - if d.HasChange("repo_name") { - return fmt.Errorf("`repo_name` do not support change now.") - } - - if d.HasChange("instance_id") { - return fmt.Errorf("`instance_id` do not support change now.") - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyApplicationInfo(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 { - return err - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tem", "application", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudTemApplicationRead(d, meta) -} - -func resourceTencentCloudTemApplicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - applicationId := d.Id() - - if err := service.DeleteTemApplicationById(ctx, applicationId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tem_environment.go b/tencentcloud/resource_tc_tem_environment.go deleted file mode 100644 index 9c64ab5529..0000000000 --- a/tencentcloud/resource_tc_tem_environment.go +++ /dev/null @@ -1,284 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTemEnvironment() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudTemEnvironmentRead, - Create: resourceTencentCloudTemEnvironmentCreate, - Update: resourceTencentCloudTemEnvironmentUpdate, - Delete: resourceTencentCloudTemEnvironmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "environment_name": { - Type: schema.TypeString, - Required: true, - Description: "environment name.", - }, - - "description": { - Type: schema.TypeString, - Optional: true, - Description: "environment description.", - }, - - "vpc": { - Type: schema.TypeString, - Required: true, - Description: "vpc ID.", - }, - - "subnet_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Required: true, - Description: "subnet IDs.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "environment tag list.", - }, - }, - } -} - -func resourceTencentCloudTemEnvironmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_environment.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tem.NewCreateEnvironmentRequest() - response *tem.CreateEnvironmentResponse - ) - - if v, ok := d.GetOk("environment_name"); ok { - request.EnvironmentName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if v, ok := d.GetOk("vpc"); ok { - request.Vpc = helper.String(v.(string)) - } - - if v, ok := d.GetOk("subnet_ids"); ok { - subnetIdsSet := v.(*schema.Set).List() - for i := range subnetIdsSet { - subnetIds := subnetIdsSet[i].(string) - request.SubnetIds = append(request.SubnetIds, &subnetIds) - } - } - - if v, ok := d.GetOk("tags"); ok { - for key, value := range v.(map[string]interface{}) { - tag := tem.Tag{ - TagKey: helper.String(key), - TagValue: helper.String(value.(string)), - } - request.Tags = append(request.Tags, &tag) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateEnvironment(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create tem environment failed, reason:%+v", logId, err) - return err - } - - environmentId := *response.Response.Result - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeTemEnvironmentStatus(ctx, environmentId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if *instance.ClusterStatus == "NORMAL" { - return nil - } - if *instance.ClusterStatus == "FAILED" { - return resource.NonRetryableError(fmt.Errorf("environment status is %v, operate failed.", *instance.ClusterStatus)) - } - return resource.RetryableError(fmt.Errorf("environment status is %v, retry...", *instance.ClusterStatus)) - }) - if err != nil { - return err - } - - d.SetId(environmentId) - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tem:%s:uin/:environment/%s", region, environmentId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudTemEnvironmentRead(d, meta) -} - -func resourceTencentCloudTemEnvironmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_environment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - - environmentId := d.Id() - - environments, err := service.DescribeTemEnvironment(ctx, environmentId) - - if err != nil { - return err - } - environment := environments.Result - if environment == nil { - d.SetId("") - return fmt.Errorf("resource `environment` %s does not exist", environmentId) - } - - if environment.EnvironmentName != nil { - _ = d.Set("environment_name", environment.EnvironmentName) - } - - if environment.Description != nil { - _ = d.Set("description", environment.Description) - } - - if environment.VpcId != nil { - _ = d.Set("vpc", environment.VpcId) - } - - if environment.SubnetIds != nil { - _ = d.Set("subnet_ids", environment.SubnetIds) - } - - client := meta.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: client} - region := client.Region - tags, err := tagService.DescribeResourceTags(ctx, "tem", "environment", region, environmentId) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTemEnvironmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_environment.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := tem.NewModifyEnvironmentRequest() - - request.EnvironmentId = helper.String(d.Id()) - - if d.HasChange("environment_name") { - if v, ok := d.GetOk("environment_name"); ok { - request.EnvironmentName = helper.String(v.(string)) - } - } - - if d.HasChange("description") { - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - } - - if d.HasChange("vpc") { - return fmt.Errorf("`vpc` do not support change now.") - } - - if d.HasChange("subnet_ids") { - if v, ok := d.GetOk("subnet_ids"); ok { - subnetIdsSet := v.(*schema.Set).List() - for i := range subnetIdsSet { - subnetIds := subnetIdsSet[i].(string) - request.SubnetIds = append(request.SubnetIds, &subnetIds) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyEnvironment(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 { - return err - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tem", "environment", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudTemEnvironmentRead(d, meta) -} - -func resourceTencentCloudTemEnvironmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_environment.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - environmentId := d.Id() - - if err := service.DeleteTemEnvironmentById(ctx, environmentId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tem_environment_test.go b/tencentcloud/resource_tc_tem_environment_test.go deleted file mode 100644 index 76eb0be0a6..0000000000 --- a/tencentcloud/resource_tc_tem_environment_test.go +++ /dev/null @@ -1,115 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" -) - -// go test -i; go test -test.run TestAccTencentCloudTemEnvironmentResource_basic -v -func TestAccTencentCloudTemEnvironmentResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTemEnvironmentDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTemEnvironment, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemEnvironmentExists("tencentcloud_tem_environment.environment"), - resource.TestCheckResourceAttrSet("tencentcloud_tem_environment.environment", "id"), - resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "environment_name", "demo"), - resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "description", "demo for test"), - resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "tags.createdBy", "terraform"), - ), - }, - { - ResourceName: "tencentcloud_tem_environment.environment", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTemEnvironmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tem_environment" { - continue - } - - res, err := service.DescribeTemEnvironment(ctx, rs.Primary.ID) - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == "ResourceNotFound.VersionNamespaceNotFound" { - return nil - } - } - return err - } - - if res.Result != nil { - return fmt.Errorf("tem environment %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTemEnvironmentExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTemEnvironment(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res.Result == nil { - return fmt.Errorf("tem environment %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTemEnvironmentVar = ` -variable "vpc_id" { - default = "` + defaultTemVpcId + `" -} - -variable "subnet_id" { - default = "` + defaultTemSubnetId + `" -} -` - -const testAccTemEnvironment = testAccTemEnvironmentVar + ` - -resource "tencentcloud_tem_environment" "environment" { - environment_name = "demo" - description = "demo for test" - vpc = var.vpc_id - subnet_ids = [var.subnet_id] - tags = { - "createdBy" = "terraform" - } - } - -` diff --git a/tencentcloud/resource_tc_tem_log_config_test.go b/tencentcloud/resource_tc_tem_log_config_test.go deleted file mode 100644 index e6308ff3f1..0000000000 --- a/tencentcloud/resource_tc_tem_log_config_test.go +++ /dev/null @@ -1,150 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "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" -) - -// go test -i; go test -test.run TestAccTencentCloudTemLogConfigResource_basic -v -func TestAccTencentCloudTemLogConfigResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTemLogConfigDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTemLogConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemLogConfigExists("tencentcloud_tem_log_config.logConfig"), - resource.TestCheckResourceAttrSet("tencentcloud_tem_log_config.logConfig", "id"), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "environment_id", defaultEnvironmentId), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "application_id", defaultApplicationId), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "name", "terraform-test"), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "logset_id", defaultLogsetId), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "topic_id", defaultTopicId), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "input_type", "container_stdout"), - resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "log_type", "minimalist_log"), - ), - }, - { - ResourceName: "tencentcloud_tem_log_config.logConfig", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTemLogConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tem_log_config" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - applicationId := idSplit[1] - name := idSplit[2] - - res, err := service.DescribeTemLogConfig(ctx, environmentId, applicationId, name) - if err != nil { - ee, ok := err.(*sdkErrors.TencentCloudSDKError) - if !ok { - return err - } - if ee.Code == "ResourceNotFound.LogConfigNotFound" { - return nil - } - return err - } - - if res != nil { - return fmt.Errorf("tem log config %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTemLogConfigExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - applicationId := idSplit[1] - name := idSplit[2] - - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTemLogConfig(ctx, environmentId, applicationId, name) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tem log config %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTemLogConfigVar = ` -variable "environment_id" { - default = "` + defaultEnvironmentId + `" -} - -variable "application_id" { - default = "` + defaultApplicationId + `" -} - -variable "logset_id" { - default = "` + defaultLogsetId + `" -} - -variable "topic_id" { - default = "` + defaultTopicId + `" -} - -variable "workload_id" { - default = "` + defaultEnvironmentId + "#" + defaultApplicationId + `" -} -` - -const testAccTemLogConfig = testAccTemLogConfigVar + ` - -resource "tencentcloud_tem_log_config" "logConfig" { - environment_id = var.environment_id - application_id = var.application_id - workload_id = var.workload_id - name = "terraform-test" - logset_id = var.logset_id - topic_id = var.topic_id - input_type = "container_stdout" - log_type = "minimalist_log" -} - -` diff --git a/tencentcloud/resource_tc_tem_scale_rule_test.go b/tencentcloud/resource_tc_tem_scale_rule_test.go deleted file mode 100644 index 69fb8ed158..0000000000 --- a/tencentcloud/resource_tc_tem_scale_rule_test.go +++ /dev/null @@ -1,160 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTemScaleRuleResource_basic -v -func TestAccTencentCloudTemScaleRuleResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTemScaleRuleDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTemScaleRule, - Check: resource.ComposeTestCheckFunc( - testAccCheckTemScaleRuleExists("tencentcloud_tem_scale_rule.scaleRule"), - resource.TestCheckResourceAttrSet("tencentcloud_tem_scale_rule.scaleRule", "id"), - resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "environment_id", defaultEnvironmentId), - resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "application_id", defaultApplicationId), - resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "autoscaler.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "autoscaler.0.autoscaler_name", "test3123"), - ), - }, - { - ResourceName: "tencentcloud_tem_scale_rule.scaleRule", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTemScaleRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tem_scale_rule" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - applicationId := idSplit[1] - scaleRuleId := idSplit[2] - - res, err := service.DescribeTemScaleRule(ctx, environmentId, applicationId, scaleRuleId) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tem scale rule %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTemScaleRuleExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - environmentId := idSplit[0] - applicationId := idSplit[1] - scaleRuleId := idSplit[2] - - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTemScaleRule(ctx, environmentId, applicationId, scaleRuleId) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tem scale rule %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTemScaleRuleVar = ` -variable "environment_id" { - default = "` + defaultEnvironmentId + `" -} - -variable "application_id" { - default = "` + defaultApplicationId + `" -} - -variable "workload_id" { - default = "` + defaultEnvironmentId + "#" + defaultApplicationId + `" -} -` - -const testAccTemScaleRule = testAccTemScaleRuleVar + ` - -resource "tencentcloud_tem_scale_rule" "scaleRule" { - environment_id = var.environment_id - application_id = var.application_id - workload_id = var.workload_id - autoscaler { - autoscaler_name = "test3123" - description = "test" - enabled = true - min_replicas = 1 - max_replicas = 4 - cron_horizontal_autoscaler { - name = "test" - period = "* * *" - priority = 1 - enabled = true - schedules { - start_at = "03:00" - target_replicas = 1 - } - } - cron_horizontal_autoscaler { - name = "test123123" - period = "* * *" - priority = 0 - enabled = true - schedules { - start_at = "04:13" - target_replicas = 1 - } - } - horizontal_autoscaler { - metrics = "CPU" - enabled = true - max_replicas = 4 - min_replicas = 1 - threshold = 60 - } - - } -} -` diff --git a/tencentcloud/resource_tc_teo_acceleration_domain_test.go b/tencentcloud/resource_tc_teo_acceleration_domain_test.go deleted file mode 100644 index a33d5161aa..0000000000 --- a/tencentcloud/resource_tc_teo_acceleration_domain_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudTeoAccelerationDomainResource_basic(t *testing.T) { - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTeoAccelerationDomainDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTeoAccelerationDomain, - Check: resource.ComposeTestCheckFunc( - testAccCheckTeoAccelerationDomainExists("tencentcloud_teo_acceleration_domain.acceleration_domain"), - resource.TestCheckResourceAttrSet("tencentcloud_teo_acceleration_domain.acceleration_domain", "id"), - resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "domain_name", "aaa.tf-teo.xyz"), - resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.0.origin", "150.109.8.1"), - resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.0.origin_type", "IP_DOMAIN"), - ), - }, - { - ResourceName: "tencentcloud_teo_acceleration_domain.acceleration_domain", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTeoAccelerationDomainDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_teo_acceleration_domain" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - zoneId := idSplit[0] - domainName := idSplit[1] - - agents, err := service.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) - if agents != nil { - return fmt.Errorf("AccelerationDomain %s still exists", rs.Primary.ID) - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckTeoAccelerationDomainExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - zoneId := idSplit[0] - domainName := idSplit[1] - - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - agents, err := service.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) - if agents == nil { - return fmt.Errorf("AccelerationDomain %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTeoAccelerationDomain = testAccTeoZone + ` - -resource "tencentcloud_teo_acceleration_domain" "acceleration_domain" { - zone_id = "zone-2o0i41pv2h8c" - domain_name = "aaa.makn.cn" - - origin_info { - origin = "150.109.8.1" - origin_type = "IP_DOMAIN" - } -} - -` diff --git a/tencentcloud/resource_tc_teo_application_proxy_test.go b/tencentcloud/resource_tc_teo_application_proxy_test.go deleted file mode 100644 index f904c6d36c..0000000000 --- a/tencentcloud/resource_tc_teo_application_proxy_test.go +++ /dev/null @@ -1,145 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func init() { - // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_teo_zone - resource.AddTestSweepers("tencentcloud_teo_application_proxy", &resource.Sweeper{ - Name: "tencentcloud_teo_application_proxy", - F: testSweepApplicationProxy, - }) -} - -func testSweepApplicationProxy(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := TeoService{client} - - for { - proxy, err := service.DescribeTeoApplicationProxy(ctx, "", "") - if err != nil { - return err - } - - if proxy == nil { - return nil - } - - err = service.DeleteTeoApplicationProxyById(ctx, *proxy.ZoneId, *proxy.ProxyId) - if err != nil { - return err - } - } -} - -// go test -i; go test -test.run TestAccTencentCloudTeoApplicationProxy_basic -v -func TestAccTencentCloudTeoApplicationProxy_basic(t *testing.T) { - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckApplicationProxyDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTeoApplicationProxy, - Check: resource.ComposeTestCheckFunc( - testAccCheckApplicationProxyExists("tencentcloud_teo_application_proxy.basic"), - resource.TestCheckResourceAttrSet("tencentcloud_teo_application_proxy.basic", "zone_id"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "accelerate_type", "1"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "security_type", "1"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "plat_type", "domain"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_name", "test-instance"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_type", "instance"), - resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "session_persist_time", "2400"), - ), - }, - { - ResourceName: "tencentcloud_teo_application_proxy.basic", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckApplicationProxyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_teo_application_proxy" { - continue - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - zoneId := idSplit[0] - proxyId := idSplit[1] - - agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) - if agents != nil { - return fmt.Errorf("zone ApplicationProxy %s still exists", rs.Primary.ID) - } - if err != nil { - return err - } - } - return nil -} - -func testAccCheckApplicationProxyExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - zoneId := idSplit[0] - proxyId := idSplit[1] - - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) - if agents == nil { - return fmt.Errorf("zone ApplicationProxy %s is not found", rs.Primary.ID) - } - if err != nil { - return err - } - - return nil - } -} - -const testAccTeoApplicationProxy = testAccTeoZone + ` - -resource "tencentcloud_teo_application_proxy" "basic" { - zone_id = tencentcloud_teo_zone.basic.id - - accelerate_type = 1 - security_type = 1 - plat_type = "domain" - proxy_name = "test-instance" - proxy_type = "instance" - session_persist_time = 2400 -} - -` diff --git a/tencentcloud/resource_tc_teo_ownership_verify.go b/tencentcloud/resource_tc_teo_ownership_verify.go deleted file mode 100644 index 9647b470b2..0000000000 --- a/tencentcloud/resource_tc_teo_ownership_verify.go +++ /dev/null @@ -1,94 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTeoOwnershipVerify() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTeoOwnershipVerifyCreate, - Read: resourceTencentCloudTeoOwnershipVerifyRead, - Delete: resourceTencentCloudTeoOwnershipVerifyDelete, - - Schema: map[string]*schema.Schema{ - "domain": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Verify domain name.", - }, - - "status": { - Computed: true, - Type: schema.TypeString, - Description: "Ownership verification results. `success`: verification successful; `fail`: verification failed.", - }, - - "result": { - Computed: true, - Type: schema.TypeString, - Description: "When the verification result is failed, this field will return the reason.", - }, - }, - } -} - -func resourceTencentCloudTeoOwnershipVerifyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_ownership_verify.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = teo.NewVerifyOwnershipRequest() - response = teo.NewVerifyOwnershipResponse() - domain string - ) - if v, ok := d.GetOk("domain"); ok { - domain = v.(string) - request.Domain = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().VerifyOwnership(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s operate teo ownershipVerify failed, reason:%+v", logId, err) - return err - } - - d.SetId(domain) - - if response != nil && response.Response != nil { - _ = d.Set("status", *response.Response.Status) - _ = d.Set("result", *response.Response.Result) - } - - return resourceTencentCloudTeoOwnershipVerifyRead(d, meta) -} - -func resourceTencentCloudTeoOwnershipVerifyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_ownership_verify.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudTeoOwnershipVerifyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_ownership_verify.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_trocket_rocketmq_topic.go b/tencentcloud/resource_tc_trocket_rocketmq_topic.go deleted file mode 100644 index 18951d6d6b..0000000000 --- a/tencentcloud/resource_tc_trocket_rocketmq_topic.go +++ /dev/null @@ -1,233 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTrocketRocketmqTopic() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTrocketRocketmqTopicCreate, - Read: resourceTencentCloudTrocketRocketmqTopicRead, - Update: resourceTencentCloudTrocketRocketmqTopicUpdate, - Delete: resourceTencentCloudTrocketRocketmqTopicDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "Instance Id.", - }, - - "topic": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "topic.", - }, - - "topic_type": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Topic type. `UNSPECIFIED`: not specified, `NORMAL`: normal message, `FIFO`: sequential message, `DELAY`: delayed message.", - }, - - "queue_num": { - Required: true, - Type: schema.TypeInt, - Description: "Number of queue. Must be greater than or equal to 3.", - }, - - "remark": { - Optional: true, - Type: schema.TypeString, - Description: "remark.", - }, - }, - } -} - -func resourceTencentCloudTrocketRocketmqTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_topic.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = trocket.NewCreateTopicRequest() - response = trocket.NewCreateTopicResponse() - instanceId string - topic string - ) - if v, ok := d.GetOk("instance_id"); ok { - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("topic"); ok { - request.Topic = helper.String(v.(string)) - } - - if v, ok := d.GetOk("topic_type"); ok { - request.TopicType = helper.String(v.(string)) - } - - if v, ok := d.GetOkExists("queue_num"); ok { - request.QueueNum = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().CreateTopic(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create trocket rocketmqTopic failed, reason:%+v", logId, err) - return err - } - - instanceId = *response.Response.InstanceId - topic = *response.Response.Topic - d.SetId(instanceId + FILED_SP + topic) - - return resourceTencentCloudTrocketRocketmqTopicRead(d, meta) -} - -func resourceTencentCloudTrocketRocketmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_topic.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - topic := idSplit[1] - - rocketmqTopic, err := service.DescribeTrocketRocketmqTopicById(ctx, instanceId, topic) - if err != nil { - return err - } - - if rocketmqTopic == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TrocketRocketmqTopic` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if rocketmqTopic.InstanceId != nil { - _ = d.Set("instance_id", rocketmqTopic.InstanceId) - } - - if rocketmqTopic.Topic != nil { - _ = d.Set("topic", rocketmqTopic.Topic) - } - - if rocketmqTopic.TopicType != nil { - _ = d.Set("topic_type", rocketmqTopic.TopicType) - } - - if rocketmqTopic.QueueNum != nil { - _ = d.Set("queue_num", rocketmqTopic.QueueNum) - } - - if rocketmqTopic.Remark != nil { - _ = d.Set("remark", rocketmqTopic.Remark) - } - - return nil -} - -func resourceTencentCloudTrocketRocketmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_topic.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := trocket.NewModifyTopicRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - topic := idSplit[1] - - request.InstanceId = &instanceId - request.Topic = &topic - - if d.HasChange("queue_num") { - if v, ok := d.GetOkExists("queue_num"); ok { - request.QueueNum = helper.IntInt64(v.(int)) - } - } - - if d.HasChange("remark") { - if v, ok := d.GetOk("remark"); ok { - request.Remark = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().ModifyTopic(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 update trocket rocketmqTopic failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTrocketRocketmqTopicRead(d, meta) -} - -func resourceTencentCloudTrocketRocketmqTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_topic.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - instanceId := idSplit[0] - topic := idSplit[1] - - if err := service.DeleteTrocketRocketmqTopicById(ctx, instanceId, topic); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tse_cngw_certificate.go b/tencentcloud/resource_tc_tse_cngw_certificate.go deleted file mode 100644 index ce730edf6f..0000000000 --- a/tencentcloud/resource_tc_tse_cngw_certificate.go +++ /dev/null @@ -1,245 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTseCngwCertificate() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTseCngwCertificateCreate, - Read: resourceTencentCloudTseCngwCertificateRead, - Update: resourceTencentCloudTseCngwCertificateUpdate, - Delete: resourceTencentCloudTseCngwCertificateDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "gateway_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Gateway ID.", - }, - - "bind_domains": { - Required: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "Domains of the binding.", - }, - - "cert_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Certificate ID of ssl platform.", - }, - - "name": { - Optional: true, - Type: schema.TypeString, - Description: "Certificate name.", - }, - - "key": { - Computed: true, - Type: schema.TypeString, - Description: "Private key of certificate.", - }, - - "crt": { - Computed: true, - Type: schema.TypeString, - Description: "Pem format of certificate.", - }, - }, - } -} - -func resourceTencentCloudTseCngwCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_certificate.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tse.NewCreateCloudNativeAPIGatewayCertificateRequest() - response = tse.NewCreateCloudNativeAPIGatewayCertificateResponse() - gatewayId string - certificateId string - ) - if v, ok := d.GetOk("gateway_id"); ok { - gatewayId = v.(string) - request.GatewayId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("bind_domains"); ok { - bindDomainsSet := v.(*schema.Set).List() - for i := range bindDomainsSet { - bindDomains := bindDomainsSet[i].(string) - request.BindDomains = append(request.BindDomains, &bindDomains) - } - } - - if v, ok := d.GetOk("cert_id"); ok { - request.CertId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayCertificate(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create tse cngwCertificate failed, reason:%+v", logId, err) - return err - } - - certificateId = *response.Response.Result.Id - d.SetId(gatewayId + FILED_SP + certificateId) - - return resourceTencentCloudTseCngwCertificateRead(d, meta) -} - -func resourceTencentCloudTseCngwCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_certificate.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - gatewayId := idSplit[0] - certificateId := idSplit[1] - - cngwCertificate, err := service.DescribeTseCngwCertificateById(ctx, gatewayId, certificateId) - if err != nil { - return err - } - - if cngwCertificate == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TseCngwCertificate` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("gateway_id", gatewayId) - - if cngwCertificate.BindDomains != nil { - _ = d.Set("bind_domains", cngwCertificate.BindDomains) - } - - if cngwCertificate.CertId != nil { - _ = d.Set("cert_id", cngwCertificate.CertId) - } - - if cngwCertificate.Name != nil { - _ = d.Set("name", cngwCertificate.Name) - } - - if cngwCertificate.Key != nil { - _ = d.Set("key", cngwCertificate.Key) - } - - if cngwCertificate.Crt != nil { - _ = d.Set("crt", cngwCertificate.Crt) - } - - return nil -} - -func resourceTencentCloudTseCngwCertificateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_certificate.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tse.NewUpdateCloudNativeAPIGatewayCertificateInfoRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - gatewayId := idSplit[0] - certificateId := idSplit[1] - - request.GatewayId = &gatewayId - request.Id = &certificateId - - if v, ok := d.GetOk("bind_domains"); ok { - bindDomainsSet := v.(*schema.Set).List() - for i := range bindDomainsSet { - bindDomains := bindDomainsSet[i].(string) - request.BindDomains = append(request.BindDomains, &bindDomains) - } - } - - if d.HasChange("name") { - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().UpdateCloudNativeAPIGatewayCertificateInfo(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 update tse cngwCertificate failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudTseCngwCertificateRead(d, meta) -} - -func resourceTencentCloudTseCngwCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_certificate.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - gatewayId := idSplit[0] - certificateId := idSplit[1] - - if err := service.DeleteTseCngwCertificateById(ctx, gatewayId, certificateId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tse_instance_test.go b/tencentcloud/resource_tc_tse_instance_test.go deleted file mode 100644 index 3bf81c2cf5..0000000000 --- a/tencentcloud/resource_tc_tse_instance_test.go +++ /dev/null @@ -1,126 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTseInstanceResource_basic -v -func TestAccTencentCloudTseInstanceResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTseInstanceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTseInstance, - Check: resource.ComposeTestCheckFunc( - testAccCheckTseInstanceExists("tencentcloud_tse_instance.instance"), - resource.TestCheckResourceAttrSet("tencentcloud_tse_instance.instance", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_type", "zookeeper"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_version", "3.5.9.4"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_product_version", "STANDARD"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_region", "ap-guangzhou"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_name", "zookeeper-test"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "trade_type", "0"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_resource_spec", defaultEngineResourceSpec), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_node_num", "3"), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "vpc_id", defaultTseVpcId), - resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "subnet_id", defaultTseSubnetId), - ), - }, - { - ResourceName: "tencentcloud_tse_instance.instance", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTseInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tse_instance" { - continue - } - - res, err := service.DescribeTseInstanceById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tse instance %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTseInstanceExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTseInstanceById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tse instance %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTseInstanceVar = ` -variable "engine_resource_spec" { - default = "` + defaultEngineResourceSpec + `" -} - -variable "vpc_id" { - default = "` + defaultTseVpcId + `" -} - -variable "subnet_id" { - default = "` + defaultTseSubnetId + `" -} -` - -const testAccTseInstance = testAccTseInstanceVar + ` - -resource "tencentcloud_tse_instance" "instance" { - engine_type = "zookeeper" - engine_version = "3.5.9.4" - engine_product_version = "STANDARD" - engine_region = "ap-guangzhou" - engine_name = "zookeeper-test" - trade_type = 0 - engine_resource_spec = var.engine_resource_spec - engine_node_num = 3 - vpc_id = var.vpc_id - subnet_id = var.subnet_id - - tags = { - "createdBy" = "terraform" - } -} - -` diff --git a/tencentcloud/resource_tc_tse_waf_domains.go b/tencentcloud/resource_tc_tse_waf_domains.go deleted file mode 100644 index 9b9eb8f358..0000000000 --- a/tencentcloud/resource_tc_tse_waf_domains.go +++ /dev/null @@ -1,143 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTseWafDomains() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTseWafDomainsCreate, - Read: resourceTencentCloudTseWafDomainsRead, - Delete: resourceTencentCloudTseWafDomainsDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "gateway_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Gateway ID.", - }, - - "domain": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "The waf protected domain name.", - }, - }, - } -} - -func resourceTencentCloudTseWafDomainsCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_domains.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tse.NewCreateWafDomainsRequest() - gatewayId string - domain string - ) - if v, ok := d.GetOk("gateway_id"); ok { - gatewayId = v.(string) - request.GatewayId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("domain"); ok { - domain = v.(string) - request.Domains = append(request.Domains, helper.String(v.(string))) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateWafDomains(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 tse wafDomains failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{gatewayId, domain}, FILED_SP)) - - return resourceTencentCloudTseWafDomainsRead(d, meta) -} - -func resourceTencentCloudTseWafDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_domains.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - gatewayId := idSplit[0] - domain := idSplit[1] - - wafDomains, err := service.DescribeTseWafDomainsById(ctx, gatewayId) - if err != nil { - return err - } - - if wafDomains == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TseWafDomains` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("gateway_id", gatewayId) - - if wafDomains.Domains != nil { - for _, v := range wafDomains.Domains { - if *v == domain { - _ = d.Set("domain", domain) - break - } - } - } - - return nil -} - -func resourceTencentCloudTseWafDomainsDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_domains.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - gatewayId := idSplit[0] - domain := idSplit[1] - - if err := service.DeleteTseWafDomainsById(ctx, gatewayId, domain); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_api_rate_limit_rule_test.go b/tencentcloud/resource_tc_tsf_api_rate_limit_rule_test.go deleted file mode 100644 index eb7621ec20..0000000000 --- a/tencentcloud/resource_tc_tsf_api_rate_limit_rule_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfApiRateLimitRuleResource_basic -v -func TestAccTencentCloudTsfApiRateLimitRuleResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfApiRateLimitRuleDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfApiRateLimitRule, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfApiRateLimitRuleExists("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "api_id", defaultTsfApiId), - resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "max_qps", "10"), - resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "usable_status", "enabled"), - ), - }, - { - ResourceName: "tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfApiRateLimitRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_api_rate_limit_rule" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - apiId := idSplit[0] - ruleId := idSplit[1] - - res, err := service.DescribeTsfApiRateLimitRuleById(ctx, apiId, ruleId) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf ApiRateLimitRule %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfApiRateLimitRuleExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - apiId := idSplit[0] - ruleId := idSplit[1] - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfApiRateLimitRuleById(ctx, apiId, ruleId) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf ApiRateLimitRule %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfApiRateLimitRuleVar = ` -variable "api_id" { - default = "` + defaultTsfApiId + `" -} -` - -const testAccTsfApiRateLimitRule = testAccTsfApiRateLimitRuleVar + ` - -resource "tencentcloud_tsf_api_rate_limit_rule" "api_rate_limit_rule" { - api_id = var.api_id - max_qps = 10 - usable_status = "enabled" -} - -` diff --git a/tencentcloud/resource_tc_tsf_application_file_config_release.go b/tencentcloud/resource_tc_tsf_application_file_config_release.go deleted file mode 100644 index 7c4556cdc0..0000000000 --- a/tencentcloud/resource_tc_tsf_application_file_config_release.go +++ /dev/null @@ -1,155 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTsfApplicationFileConfigRelease() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfApplicationFileConfigReleaseCreate, - Read: resourceTencentCloudTsfApplicationFileConfigReleaseRead, - Delete: resourceTencentCloudTsfApplicationFileConfigReleaseDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "config_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "File config id.", - }, - - "group_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Group Id.", - }, - - "release_desc": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "release Description.", - }, - }, - } -} - -func resourceTencentCloudTsfApplicationFileConfigReleaseCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config_release.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tsf.NewReleaseFileConfigRequest() - configId string - groupId string - ) - if v, ok := d.GetOk("config_id"); ok { - configId = v.(string) - request.ConfigId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("group_id"); ok { - groupId = v.(string) - request.GroupId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("release_desc"); ok { - request.ReleaseDesc = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ReleaseFileConfig(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 tsf applicationFileConfigRelease failed, reason:%+v", logId, err) - return err - } - - d.SetId(configId + FILED_SP + groupId) - - return resourceTencentCloudTsfApplicationFileConfigReleaseRead(d, meta) -} - -func resourceTencentCloudTsfApplicationFileConfigReleaseRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config_release.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - configId := idSplit[0] - groupId := idSplit[1] - - applicationFileConfigRelease, err := service.DescribeTsfApplicationFileConfigReleaseById(ctx, configId, groupId) - if err != nil { - return err - } - - if applicationFileConfigRelease == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfApplicationFileConfigRelease` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if applicationFileConfigRelease.ConfigId != nil { - _ = d.Set("config_id", applicationFileConfigRelease.ConfigId) - } - - if applicationFileConfigRelease.GroupId != nil { - _ = d.Set("group_id", applicationFileConfigRelease.GroupId) - } - - if applicationFileConfigRelease.ReleaseDesc != nil { - _ = d.Set("release_desc", applicationFileConfigRelease.ReleaseDesc) - } - - return nil -} - -func resourceTencentCloudTsfApplicationFileConfigReleaseDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config_release.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - configId := idSplit[0] - groupId := idSplit[1] - - if err := service.DeleteTsfApplicationFileConfigReleaseById(ctx, configId, groupId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_application_public_config_release.go b/tencentcloud/resource_tc_tsf_application_public_config_release.go deleted file mode 100644 index be0639544b..0000000000 --- a/tencentcloud/resource_tc_tsf_application_public_config_release.go +++ /dev/null @@ -1,154 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTsfApplicationPublicConfigRelease() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfApplicationPublicConfigReleaseCreate, - Read: resourceTencentCloudTsfApplicationPublicConfigReleaseRead, - Delete: resourceTencentCloudTsfApplicationPublicConfigReleaseDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "config_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "ConfigId.", - }, - - "namespace_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "namespace-id.", - }, - - "release_desc": { - Optional: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Release description.", - }, - }, - } -} - -func resourceTencentCloudTsfApplicationPublicConfigReleaseCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config_release.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tsf.NewReleasePublicConfigRequest() - configId string - namespaceId string - ) - if v, ok := d.GetOk("config_id"); ok { - configId = v.(string) - request.ConfigId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("namespace_id"); ok { - namespaceId = v.(string) - request.NamespaceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("release_desc"); ok { - request.ReleaseDesc = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ReleasePublicConfig(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 tsf applicationPublicConfigRelease failed, reason:%+v", logId, err) - return err - } - - d.SetId(configId + FILED_SP + namespaceId) - - return resourceTencentCloudTsfApplicationPublicConfigReleaseRead(d, meta) -} - -func resourceTencentCloudTsfApplicationPublicConfigReleaseRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config_release.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - configId := idSplit[0] - namespaceId := idSplit[1] - - applicationPublicConfigRelease, err := service.DescribeTsfApplicationPublicConfigReleaseById(ctx, configId, namespaceId) - if err != nil { - return err - } - - if applicationPublicConfigRelease == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfApplicationPublicConfigRelease` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if applicationPublicConfigRelease.ConfigId != nil { - _ = d.Set("config_id", applicationPublicConfigRelease.ConfigId) - } - - if applicationPublicConfigRelease.NamespaceId != nil { - _ = d.Set("namespace_id", applicationPublicConfigRelease.NamespaceId) - } - - if applicationPublicConfigRelease.ReleaseDesc != nil { - _ = d.Set("release_desc", applicationPublicConfigRelease.ReleaseDesc) - } - - return nil -} - -func resourceTencentCloudTsfApplicationPublicConfigReleaseDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config_release.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - configId := idSplit[0] - namespaceId := idSplit[1] - - if err := service.DeleteTsfApplicationPublicConfigReleaseById(ctx, configId, namespaceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_application_release_config_test.go b/tencentcloud/resource_tc_tsf_application_release_config_test.go deleted file mode 100644 index 7236f546e1..0000000000 --- a/tencentcloud/resource_tc_tsf_application_release_config_test.go +++ /dev/null @@ -1,115 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfApplicationReleaseConfigResource_basic -v -func TestAccTencentCloudTsfApplicationReleaseConfigResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfApplicationReleaseConfigDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfApplicationReleaseConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfApplicationReleaseConfigExists("tencentcloud_tsf_application_release_config.application_release_config"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_application_release_config.application_release_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "config_id", defaultTsfConfigId), - resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "group_id", defaultTsfGroupId), - resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "release_desc", "terraform_release_desc")), - }, - { - ResourceName: "tencentcloud_tsf_application_release_config.application_release_config", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfApplicationReleaseConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_application_release_config" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - configId := idSplit[0] - groupId := idSplit[1] - - res, err := service.DescribeTsfApplicationReleaseConfigById(ctx, configId, groupId) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf ApplicationReleaseConfig %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfApplicationReleaseConfigExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 3 { - return fmt.Errorf("invalid ID %s", rs.Primary.ID) - } - configId := idSplit[0] - groupId := idSplit[1] - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfApplicationReleaseConfigById(ctx, configId, groupId) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf ApplicationReleaseConfig %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfApplicationReleaseConfigVar = ` -variable "group_id" { - default = "` + defaultTsfGroupId + `" -} -variable "config_id" { - default = "` + defaultTsfConfigId + `" -} -` - -const testAccTsfApplicationReleaseConfig = testAccTsfApplicationReleaseConfigVar + ` - -resource "tencentcloud_tsf_application_release_config" "application_release_config" { - config_id = var.config_id - group_id = var.group_id - release_desc = "terraform_release_desc" -} - -` diff --git a/tencentcloud/resource_tc_tsf_bind_api_group.go b/tencentcloud/resource_tc_tsf_bind_api_group.go deleted file mode 100644 index 4d5bef6035..0000000000 --- a/tencentcloud/resource_tc_tsf_bind_api_group.go +++ /dev/null @@ -1,136 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" -) - -func resourceTencentCloudTsfBindApiGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfBindApiGroupCreate, - Read: resourceTencentCloudTsfBindApiGroupRead, - Delete: resourceTencentCloudTsfBindApiGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "gateway_deploy_group_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "gateway group id.", - }, - - "group_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "group id.", - }, - }, - } -} - -func resourceTencentCloudTsfBindApiGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_bind_api_group.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tsf.NewBindApiGroupRequest() - groupId string - gatewayDeployGroupId string - ) - if v, ok := d.GetOk("gateway_deploy_group_id"); ok { - gatewayDeployGroupId = v.(string) - } - - if v, ok := d.GetOk("group_id"); ok { - groupId = v.(string) - } - request.GroupGatewayList = []*tsf.GatewayGroupIds{ - { - GatewayDeployGroupId: &gatewayDeployGroupId, - GroupId: &groupId, - }, - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().BindApiGroup(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 tsf bindApiGroup failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{groupId, gatewayDeployGroupId}, FILED_SP)) - - return resourceTencentCloudTsfBindApiGroupRead(d, meta) -} - -func resourceTencentCloudTsfBindApiGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_bind_api_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - groupId := idSplit[0] - gatewayDeployGroupId := idSplit[1] - - bindApiGroup, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) - if err != nil { - return err - } - - if bindApiGroup == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfBindApiGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("gateway_deploy_group_id", gatewayDeployGroupId) - _ = d.Set("group_id", groupId) - - return nil -} - -func resourceTencentCloudTsfBindApiGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_bind_api_group.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - groupId := idSplit[0] - gatewayDeployGroupId := idSplit[1] - - if err := service.DeleteTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_bind_api_group_test.go b/tencentcloud/resource_tc_tsf_bind_api_group_test.go deleted file mode 100644 index 525bef8937..0000000000 --- a/tencentcloud/resource_tc_tsf_bind_api_group_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfBindApiGroupResource_basic -v -func TestAccTencentCloudTsfBindApiGroupResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfBindApiGroupDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfBindApiGroup, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfBindApiGroupExists("tencentcloud_tsf_bind_api_group.bind_api_group"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_bind_api_group.bind_api_group", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_bind_api_group.bind_api_group", "gateway_deploy_group_id", "group-vzd97zpy"), - resource.TestCheckResourceAttr("tencentcloud_tsf_bind_api_group.bind_api_group", "group_id", "grp-qp0rj3zi"), - ), - }, - { - ResourceName: "tencentcloud_tsf_bind_api_group.bind_api_group", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfBindApiGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_bind_api_group" { - continue - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - groupId := idSplit[0] - gatewayDeployGroupId := idSplit[1] - - res, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf bindApiGroup %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfBindApiGroupExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - groupId := idSplit[0] - gatewayDeployGroupId := idSplit[1] - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf bindApiGroup %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfBindApiGroup = ` - -resource "tencentcloud_tsf_bind_api_group" "bind_api_group" { - gateway_deploy_group_id = "group-vzd97zpy" - group_id = "grp-qp0rj3zi" -} - -` diff --git a/tencentcloud/resource_tc_tsf_enable_unit_rule.go b/tencentcloud/resource_tc_tsf_enable_unit_rule.go deleted file mode 100644 index 03ad9ff353..0000000000 --- a/tencentcloud/resource_tc_tsf_enable_unit_rule.go +++ /dev/null @@ -1,137 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" -) - -func resourceTencentCloudTsfEnableUnitRule() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfEnableUnitRuleCreate, - Read: resourceTencentCloudTsfEnableUnitRuleRead, - Update: resourceTencentCloudTsfEnableUnitRuleUpdate, - Delete: resourceTencentCloudTsfEnableUnitRuleDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "rule_id": { - Required: true, - Type: schema.TypeString, - Description: "api ID.", - }, - - "switch": { - Required: true, - Type: schema.TypeString, - Description: "switch, on: `enabled`, off: `disabled`.", - }, - }, - } -} - -func resourceTencentCloudTsfEnableUnitRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_enable_unit_rule.create")() - defer inconsistentCheck(d, meta)() - - var id string - if v, ok := d.GetOk("rule_id"); ok { - id = v.(string) - } - - d.SetId(id) - - return resourceTencentCloudTsfEnableUnitRuleUpdate(d, meta) -} - -func resourceTencentCloudTsfEnableUnitRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_enable_unit_rule.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - id := d.Id() - - enableUnitRule, err := service.DescribeTsfEnableUnitRuleById(ctx, id) - if err != nil { - return err - } - - if enableUnitRule == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfEnableUnitRule` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if enableUnitRule.Id != nil { - _ = d.Set("rule_id", enableUnitRule.Id) - } - - if enableUnitRule.Status != nil { - _ = d.Set("switch", enableUnitRule.Status) - } - - return nil -} - -func resourceTencentCloudTsfEnableUnitRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_enable_unit_rule.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - id := d.Id() - if v, ok := d.GetOk("switch"); ok { - if v.(string) == "enabled" { - request := tsf.NewEnableUnitRuleRequest() - request.Id = &id - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().EnableUnitRule(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 update tsf enableUnitRule failed, reason:%+v", logId, err) - return err - } - } - - if v.(string) == "disabled" { - request := tsf.NewDisableUnitRuleRequest() - request.Id = &id - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().DisableUnitRule(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 update tsf disableUnitRule failed, reason:%+v", logId, err) - return err - } - } - } - - return resourceTencentCloudTsfEnableUnitRuleRead(d, meta) -} - -func resourceTencentCloudTsfEnableUnitRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_enable_unit_rule.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_group.go b/tencentcloud/resource_tc_tsf_group.go deleted file mode 100644 index 79a11939ab..0000000000 --- a/tencentcloud/resource_tc_tsf_group.go +++ /dev/null @@ -1,285 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTsfGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfGroupCreate, - Read: resourceTencentCloudTsfGroupRead, - Update: resourceTencentCloudTsfGroupUpdate, - Delete: resourceTencentCloudTsfGroupDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "application_id": { - Required: true, - Type: schema.TypeString, - Description: "The application ID to which the group belongs.", - }, - - "namespace_id": { - Required: true, - Type: schema.TypeString, - Description: "ID of the namespace to which the group belongs.", - }, - - "group_name": { - Required: true, - Type: schema.TypeString, - Description: "Group name field, length 1~60, beginning with a letter or underscore, can contain alphanumeric underscore.", - }, - - "cluster_id": { - Required: true, - Type: schema.TypeString, - Description: "Cluster ID.", - }, - - "group_desc": { - Optional: true, - Type: schema.TypeString, - Description: "Group description.", - }, - - "alias": { - Optional: true, - Type: schema.TypeString, - Description: "Deployment Group Notes.", - }, - - "group_resource_type": { - Computed: true, - Type: schema.TypeString, - Description: "Deployment Group Resource Type.", - }, - - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - }, - } -} - -func resourceTencentCloudTsfGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_group.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tsf.NewCreateGroupRequest() - response = tsf.NewCreateGroupResponse() - groupId string - ) - if v, ok := d.GetOk("application_id"); ok { - request.ApplicationId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("namespace_id"); ok { - request.NamespaceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("group_name"); ok { - request.GroupName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("cluster_id"); ok { - request.ClusterId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("group_desc"); ok { - request.GroupDesc = helper.String(v.(string)) - } - - if v, ok := d.GetOk("alias"); ok { - request.Alias = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateGroup(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create tsf group failed, reason:%+v", logId, err) - return err - } - - groupId = *response.Response.Result - d.SetId(groupId) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tsf:%s:uin/:group/%s", region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudTsfGroupRead(d, meta) -} - -func resourceTencentCloudTsfGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - groupId := d.Id() - - group, err := service.DescribeTsfGroupById(ctx, groupId) - if err != nil { - return err - } - - if group == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if group.ApplicationId != nil { - _ = d.Set("application_id", group.ApplicationId) - } - - if group.NamespaceId != nil { - _ = d.Set("namespace_id", group.NamespaceId) - } - - if group.GroupName != nil { - _ = d.Set("group_name", group.GroupName) - } - - if group.ClusterId != nil { - _ = d.Set("cluster_id", group.ClusterId) - } - - if group.GroupDesc != nil { - _ = d.Set("group_desc", group.GroupDesc) - } - - if group.GroupResourceType != nil { - _ = d.Set("group_resource_type", group.GroupResourceType) - } - - if group.Alias != nil { - _ = d.Set("alias", group.Alias) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "tsf", "group", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTsfGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_group.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := tsf.NewModifyGroupRequest() - - groupId := d.Id() - - request.GroupId = &groupId - - immutableArgs := []string{"application_id", "namespace_id", "cluster_id", "group_resource_type", "alias"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("group_name") { - if v, ok := d.GetOk("group_name"); ok { - request.GroupName = helper.String(v.(string)) - } - } - - if d.HasChange("group_desc") { - if v, ok := d.GetOk("group_desc"); ok { - request.GroupDesc = helper.String(v.(string)) - } - } - - if d.HasChange("alias") { - if v, ok := d.GetOk("alias"); ok { - request.Alias = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyGroup(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 update tsf group failed, reason:%+v", logId, err) - return err - } - - if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tsf", "group", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudTsfGroupRead(d, meta) -} - -func resourceTencentCloudTsfGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_group.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - groupId := d.Id() - - if err := service.DeleteTsfGroupById(ctx, groupId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_group_test.go b/tencentcloud/resource_tc_tsf_group_test.go deleted file mode 100644 index cc7807921e..0000000000 --- a/tencentcloud/resource_tc_tsf_group_test.go +++ /dev/null @@ -1,120 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "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" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfGroupResource_basic -v -func TestAccTencentCloudTsfGroupResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfGroupDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfGroup, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfGroupExists("tencentcloud_tsf_group.group"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_group.group", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "application_id", defaultTsfApplicationId), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "namespace_id", defaultNamespaceId), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "group_name", "terraform-test"), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "cluster_id", defaultTsfClustId), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "group_desc", "terraform desc"), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "alias", "terraform test"), - resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "tags.createdBy", "terraform"), - ), - }, - { - ResourceName: "tencentcloud_tsf_group.group", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_group" { - continue - } - - res, err := service.DescribeTsfGroupById(ctx, rs.Primary.ID) - if err != nil { - code := err.(*sdkErrors.TencentCloudSDKError).Code - if code == "ResourceNotFound.GroupNotExist" { - return nil - } - return err - } - - if res != nil { - return fmt.Errorf("tsf group %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfGroupExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfGroupById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf group %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfGroupVar = ` -variable "application_id" { - default = "` + defaultTsfApplicationId + `" -} -variable "namespace_id" { - default = "` + defaultNamespaceId + `" -} -variable "cluster_id" { - default = "` + defaultTsfClustId + `" -} -` - -const testAccTsfGroup = testAccTsfGroupVar + ` - -resource "tencentcloud_tsf_group" "group" { - application_id = var.application_id - namespace_id = var.namespace_id - group_name = "terraform-test" - cluster_id = var.cluster_id - group_desc = "terraform desc" - alias = "terraform test" - tags = { - "createdBy" = "terraform" - } - } - -` diff --git a/tencentcloud/resource_tc_tsf_lane_test.go b/tencentcloud/resource_tc_tsf_lane_test.go deleted file mode 100644 index 153be8643e..0000000000 --- a/tencentcloud/resource_tc_tsf_lane_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfLaneResource_basic -v -func TestAccTencentCloudTsfLaneResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfLaneDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfLane, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfLaneExists("tencentcloud_tsf_lane.lane"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_lane.lane", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_name", "terraform-lane"), - resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "remark", "lane desc"), - resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.0.group_id", defaultTsfGroupId), - resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.0.entrance", "true"), - ), - }, - // { - // ResourceName: "tencentcloud_tsf_lane.lane", - // ImportState: true, - // ImportStateVerify: true, - // }, - }, - }) -} - -func testAccCheckTsfLaneDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_lane" { - continue - } - - res, err := service.DescribeTsfLaneById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf lane %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfLaneExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfLaneById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf lane %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfLaneVar = ` -variable "group_id" { - default = "` + defaultTsfGroupId + `" -} -` - -const testAccTsfLane = testAccTsfLaneVar + ` - -resource "tencentcloud_tsf_lane" "lane" { - lane_name = "terraform-lane" - remark = "lane desc" - lane_group_list { - group_id = var.group_id - entrance = true - } -} - -` diff --git a/tencentcloud/resource_tc_tsf_microservice.go b/tencentcloud/resource_tc_tsf_microservice.go deleted file mode 100644 index 06ef5301a2..0000000000 --- a/tencentcloud/resource_tc_tsf_microservice.go +++ /dev/null @@ -1,250 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTsfMicroservice() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfMicroserviceCreate, - Read: resourceTencentCloudTsfMicroserviceRead, - Update: resourceTencentCloudTsfMicroserviceUpdate, - Delete: resourceTencentCloudTsfMicroserviceDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "namespace_id": { - Required: true, - Type: schema.TypeString, - Description: "Namespace ID.", - }, - - "microservice_name": { - Required: true, - Type: schema.TypeString, - Description: "Microservice name.", - }, - - "microservice_desc": { - Optional: true, - Type: schema.TypeString, - Description: "Microservice description information.", - }, - - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - }, - } -} - -func resourceTencentCloudTsfMicroserviceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_microservice.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var ( - request = tsf.NewCreateMicroserviceRequest() - response = tsf.NewCreateMicroserviceResponse() - microserviceName string - namespaceId string - microserviceId string - ) - if v, ok := d.GetOk("namespace_id"); ok { - namespaceId = v.(string) - request.NamespaceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("microservice_name"); ok { - microserviceName = v.(string) - request.MicroserviceName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("microservice_desc"); ok { - request.MicroserviceDesc = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateMicroservice(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create tsf microservice failed, reason:%+v", logId, err) - return err - } - - if *response.Response.Result { - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - microservice, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, "", microserviceName) - if err != nil { - return err - } - - microserviceId = *microservice.MicroserviceId - d.SetId(namespaceId + FILED_SP + microserviceId) - } else { - return fmt.Errorf("[DEBUG]%s api[%s] Creation failed, and the return result of interface creation is false", logId, request.GetAction()) - } - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::tsf:%s:uin/:microservice/%s", region, microserviceId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudTsfMicroserviceRead(d, meta) -} - -func resourceTencentCloudTsfMicroserviceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_microservice.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - namespaceId := idSplit[0] - microserviceId := idSplit[1] - - microservice, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") - if err != nil { - return err - } - - if microservice == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfMicroservice` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - if microservice.NamespaceId != nil { - _ = d.Set("namespace_id", microservice.NamespaceId) - } - - if microservice.MicroserviceName != nil { - _ = d.Set("microservice_name", microservice.MicroserviceName) - } - - if microservice.MicroserviceDesc != nil { - _ = d.Set("microservice_desc", microservice.MicroserviceDesc) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "tsf", "microservice", tcClient.Region, microserviceId) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudTsfMicroserviceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_microservice.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := tsf.NewModifyMicroserviceRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - // namespaceId := idSplit[0] - microserviceId := idSplit[1] - - request.MicroserviceId = µserviceId - - immutableArgs := []string{"namespace_id", "microservice_name"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("microservice_desc") { - if v, ok := d.GetOk("microservice_desc"); ok { - request.MicroserviceDesc = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyMicroservice(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 update tsf microservice failed, reason:%+v", logId, err) - return err - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tsf", "microservice", tcClient.Region, microserviceId) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudTsfMicroserviceRead(d, meta) -} - -func resourceTencentCloudTsfMicroserviceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_microservice.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - // namespaceId := idSplit[0] - microserviceId := idSplit[1] - - if err := service.DeleteTsfMicroserviceById(ctx, microserviceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_microservice_test.go b/tencentcloud/resource_tc_tsf_microservice_test.go deleted file mode 100644 index 9f9e868670..0000000000 --- a/tencentcloud/resource_tc_tsf_microservice_test.go +++ /dev/null @@ -1,116 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfMicroserviceResource_basic -v -func TestAccTencentCloudTsfMicroserviceResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfMicroserviceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfMicroservice, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfMicroserviceExists("tencentcloud_tsf_microservice.microservice"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_microservice.microservice", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "microservice_name", "test-microservice"), - resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "microservice_desc", "desc-microservice"), - resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "tags.createdBy", "terraform"), - ), - }, - { - ResourceName: "tencentcloud_tsf_microservice.microservice", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfMicroserviceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_microservice" { - continue - } - - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - namespaceId := idSplit[0] - microserviceId := idSplit[1] - - res, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf microservice %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfMicroserviceExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - namespaceId := idSplit[0] - microserviceId := idSplit[1] - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf microservice %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfMicroserviceVar = ` -variable "namespace_id" { - default = "` + defaultNamespaceId + `" -} -` - -const testAccTsfMicroservice = testAccTsfMicroserviceVar + ` - -resource "tencentcloud_tsf_microservice" "microservice" { - namespace_id = var.namespace_id - microservice_name = "test-microservice" - microservice_desc = "desc-microservice" - tags = { - "createdBy" = "terraform" - } -} - -` diff --git a/tencentcloud/resource_tc_tsf_namespace_test.go b/tencentcloud/resource_tc_tsf_namespace_test.go deleted file mode 100644 index ebc1d9d664..0000000000 --- a/tencentcloud/resource_tc_tsf_namespace_test.go +++ /dev/null @@ -1,95 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfNamespaceResource_basic -v -func TestAccTencentCloudTsfNamespaceResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfNamespaceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfNamespace, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfNamespaceExists("tencentcloud_tsf_namespace.namespace"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_namespace.namespace", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_name", "terraform-namespace-name"), - resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_desc", "terraform-test"), - resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_type", "DEF"), - resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "is_ha_enable", "0"), - ), - }, - // { - // ResourceName: "tencentcloud_tsf_namespace.namespace", - // ImportState: true, - // ImportStateVerify: true, - // }, - }, - }) -} - -func testAccCheckTsfNamespaceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_namespace" { - continue - } - - res, err := service.DescribeTsfNamespaceById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf namespace %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfNamespaceExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfNamespaceById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf namespace %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfNamespace = ` - -resource "tencentcloud_tsf_namespace" "namespace" { - namespace_name = "terraform-namespace-name" - namespace_desc = "terraform-test" - namespace_type = "DEF" - is_ha_enable = "0" -} - -` diff --git a/tencentcloud/resource_tc_tsf_operate_container_group.go b/tencentcloud/resource_tc_tsf_operate_container_group.go deleted file mode 100644 index bca2d42410..0000000000 --- a/tencentcloud/resource_tc_tsf_operate_container_group.go +++ /dev/null @@ -1,177 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" -) - -func resourceTencentCloudTsfOperateContainerGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfOperateContainerGroupCreate, - Read: resourceTencentCloudTsfOperateContainerGroupRead, - Update: resourceTencentCloudTsfOperateContainerGroupUpdate, - Delete: resourceTencentCloudTsfOperateContainerGroupDelete, - - Schema: map[string]*schema.Schema{ - "group_id": { - Required: true, - Type: schema.TypeString, - Description: "group Id.", - }, - - "operate": { - Required: true, - Type: schema.TypeString, - Description: "Operation, `start`- start the container, `stop`- stop the container.", - }, - }, - } -} - -func resourceTencentCloudTsfOperateContainerGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_container_group.create")() - defer inconsistentCheck(d, meta)() - - var groupId string - if v, ok := d.GetOk("group_id"); ok { - groupId = v.(string) - } - - d.SetId(groupId) - - return resourceTencentCloudTsfOperateContainerGroupUpdate(d, meta) -} - -func resourceTencentCloudTsfOperateContainerGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_container_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - groupId := d.Id() - startContainerGroup, err := service.DescribeTsfStartContainerGroupById(ctx, groupId) - if err != nil { - return err - } - - if startContainerGroup == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfOperateContainerGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("group_id", groupId) - - return nil -} - -func resourceTencentCloudTsfOperateContainerGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_container_group.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - groupId := d.Id() - - if v, ok := d.GetOk("operate"); ok { - var status bool - operate := v.(string) - if operate == "start" { - request := tsf.NewStartContainerGroupRequest() - request.GroupId = &groupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().StartContainerGroup(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()) - } - status = *result.Response.Result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update tsf startContainerGroup failed, reason:%+v", logId, err) - return err - } - - if !status { - return fmt.Errorf("[CRITAL]%s start tsf containerGroup failed", logId) - } - } else if operate == "stop" { - request := tsf.NewStopContainerGroupRequest() - request.GroupId = &groupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().StopContainerGroup(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()) - } - status = *result.Response.Result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update tsf stopContainerGroup failed, reason:%+v", logId, err) - return err - } - - if !status { - return fmt.Errorf("[CRITAL]%s stop tsf containerGroup failed", logId) - } - } else { - return fmt.Errorf("[CRITAL]%s operate type error, %s", logId, operate) - } - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - groupInfo, err := service.DescribeTsfStartContainerGroupById(ctx, groupId) - if err != nil { - return retryError(err) - } - if groupInfo == nil { - err = fmt.Errorf("group %s not exists", groupId) - return resource.NonRetryableError(err) - } - if operate == "start" && *groupInfo.Status == "Running" { - return nil - } - if operate == "stop" && *groupInfo.Status == "Paused" { - return nil - } - if operate == "start" && *groupInfo.Status == "Paused" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) - } - if operate == "stop" && *groupInfo.Status == "Running" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) - } - if *groupInfo.Status == "Waiting" || *groupInfo.Status == "Updating" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) - } - err = fmt.Errorf("start or stop operation status is %v, we won't wait for it finish", *groupInfo.Status) - return resource.NonRetryableError(err) - }) - - if err != nil { - log.Printf("[CRITAL]%s start or stop operation, reason:%s\n ", logId, err.Error()) - return err - } - } - - return resourceTencentCloudTsfOperateContainerGroupRead(d, meta) -} - -func resourceTencentCloudTsfOperateContainerGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_Operate_container_group.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_operate_group.go b/tencentcloud/resource_tc_tsf_operate_group.go deleted file mode 100644 index 51be5a538d..0000000000 --- a/tencentcloud/resource_tc_tsf_operate_group.go +++ /dev/null @@ -1,167 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" -) - -func resourceTencentCloudTsfOperateGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfOperateGroupCreate, - Read: resourceTencentCloudTsfOperateGroupRead, - Update: resourceTencentCloudTsfOperateGroupUpdate, - Delete: resourceTencentCloudTsfOperateGroupDelete, - - Schema: map[string]*schema.Schema{ - "group_id": { - Required: true, - Type: schema.TypeString, - Description: "group id.", - }, - - "operate": { - Required: true, - Type: schema.TypeString, - Description: "Operation, `start`- start the group, `stop`- stop the group.", - }, - }, - } -} - -func resourceTencentCloudTsfOperateGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_group.create")() - defer inconsistentCheck(d, meta)() - - var groupId string - if v, ok := d.GetOk("group_id"); ok { - groupId = v.(string) - } - - d.SetId(groupId) - - return resourceTencentCloudTsfOperateGroupUpdate(d, meta) -} - -func resourceTencentCloudTsfOperateGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - groupId := d.Id() - startGroup, err := service.DescribeTsfStartGroupById(ctx, groupId) - if err != nil { - return err - } - - if startGroup == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfOperateGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if startGroup.GroupId != nil { - _ = d.Set("group_id", startGroup.GroupId) - } - - return nil -} - -func resourceTencentCloudTsfOperateGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_group.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - groupId := d.Id() - if v, ok := d.GetOk("operate"); ok { - operate := v.(string) - if operate == "start" { - request := tsf.NewStartGroupRequest() - request.GroupId = &groupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().StartGroup(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 update tsf startGroup failed, reason:%+v", logId, err) - return err - } - } - if operate == "stop" { - request := tsf.NewStopGroupRequest() - request.GroupId = &groupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().StopGroup(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 update tsf stopGroup failed, reason:%+v", logId, err) - return err - } - } - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - groupInfo, err := service.DescribeTsfStartGroupById(ctx, groupId) - if err != nil { - return retryError(err) - } - if groupInfo == nil { - err = fmt.Errorf("group %s not exists", groupId) - return resource.NonRetryableError(err) - } - if operate == "start" && *groupInfo.GroupStatus == "Running" { - return nil - } - if operate == "stop" && *groupInfo.GroupStatus == "Paused" { - return nil - } - if operate == "start" && *groupInfo.GroupStatus == "Paused" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) - } - if operate == "stop" && *groupInfo.GroupStatus == "Running" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) - } - if *groupInfo.GroupStatus == "Waiting" || *groupInfo.GroupStatus == "Updating" { - return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) - } - err = fmt.Errorf("start or stop operation status is %v, we won't wait for it finish", *groupInfo.GroupStatus) - return resource.NonRetryableError(err) - }) - - if err != nil { - log.Printf("[CRITAL]%s start or stop operation, reason:%s\n ", logId, err.Error()) - return err - } - - } - - return resourceTencentCloudTsfOperateGroupRead(d, meta) -} - -func resourceTencentCloudTsfOperateGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_operate_group.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_operate_group_test.go b/tencentcloud/resource_tc_tsf_operate_group_test.go deleted file mode 100644 index eefbf40d7e..0000000000 --- a/tencentcloud/resource_tc_tsf_operate_group_test.go +++ /dev/null @@ -1,83 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfOperateGroupResource_basic -v -func TestAccTencentCloudTsfOperateGroupResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfOperateGroup, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfOperateGroupExists("tencentcloud_tsf_operate_group.operate_group"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_operate_group.operate_group", "id"), - ), - }, - { - Config: testAccTsfOperateGroupUp, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfOperateGroupExists("tencentcloud_tsf_operate_group.operate_group"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_operate_group.operate_group", "id"), - ), - }, - }, - }) -} - -func testAccCheckTsfOperateGroupExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfStartGroupById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf group %s is not found", rs.Primary.ID) - } - - if *res.GroupStatus != "Running" && *res.GroupStatus != "Paused" { - return fmt.Errorf("tsf group %s start or stop operation failed", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfOperateGroup = ` - -resource "tencentcloud_tsf_operate_group" "operate_group" { - group_id = "group-yrjkln9v" - operate = "stop" -} - -` - -const testAccTsfOperateGroupUp = ` - -resource "tencentcloud_tsf_operate_group" "operate_group" { - group_id = "group-yrjkln9v" - operate = "start" -} - -` diff --git a/tencentcloud/resource_tc_tsf_path_rewrite_test.go b/tencentcloud/resource_tc_tsf_path_rewrite_test.go deleted file mode 100644 index 1fb72fc6a5..0000000000 --- a/tencentcloud/resource_tc_tsf_path_rewrite_test.go +++ /dev/null @@ -1,103 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfPathRewriteResource_basic -v -func TestAccTencentCloudTsfPathRewriteResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfPathRewriteDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfPathRewrite, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfPathRewritekExists("tencentcloud_tsf_path_rewrite.path_rewrite"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_path_rewrite.path_rewrite", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "gateway_group_id", defaultTsfGroupId), - resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "regex", "/test"), - resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "replacement", "/tt"), - resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "blocked", "N"), - resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "order", "2"), - ), - }, - { - ResourceName: "tencentcloud_tsf_path_rewrite.path_rewrite", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfPathRewriteDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_path_rewrite" { - continue - } - - res, err := service.DescribeTsfPathRewriteById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf PathRewrite %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfPathRewritekExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfPathRewriteById(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf PathRewrite %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfPathRewriteVar = ` -variable "group_id" { - default = "` + defaultTsfGroupId + `" -} -` - -const testAccTsfPathRewrite = testAccTsfPathRewriteVar + ` - -resource "tencentcloud_tsf_path_rewrite" "path_rewrite" { - gateway_group_id = var.group_id - regex = "/test" - replacement = "/tt" - blocked = "N" - order = 2 -} - -` diff --git a/tencentcloud/resource_tc_tsf_release_api_group.go b/tencentcloud/resource_tc_tsf_release_api_group.go deleted file mode 100644 index a8c24b4fc0..0000000000 --- a/tencentcloud/resource_tc_tsf_release_api_group.go +++ /dev/null @@ -1,103 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudTsfReleaseApiGroup() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudTsfReleaseApiGroupCreate, - Read: resourceTencentCloudTsfReleaseApiGroupRead, - Delete: resourceTencentCloudTsfReleaseApiGroupDelete, - - Schema: map[string]*schema.Schema{ - "group_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "api group Id.", - }, - }, - } -} - -func resourceTencentCloudTsfReleaseApiGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_release_api_group.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = tsf.NewReleaseApiGroupRequest() - response = tsf.NewReleaseApiGroupResponse() - groupId string - ) - if v, ok := d.GetOk("group_id"); ok { - groupId = v.(string) - request.GroupId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ReleaseApiGroup(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create tsf releaseApiGroup failed, reason:%+v", logId, err) - return err - } - - if !*response.Response.Result { - return fmt.Errorf("[CRITAL]%s create tsf releaseApiGroup failed", logId) - } - d.SetId(groupId) - - return resourceTencentCloudTsfReleaseApiGroupRead(d, meta) -} - -func resourceTencentCloudTsfReleaseApiGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_release_api_group.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - - groupId := d.Id() - releaseApiGroup, err := service.DescribeTsfReleaseApiGroupById(ctx, groupId) - if err != nil { - return err - } - - if releaseApiGroup == nil { - d.SetId("") - log.Printf("[WARN]%s resource `TsfReleaseApiGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if releaseApiGroup.GroupId != nil { - _ = d.Set("group_id", releaseApiGroup.GroupId) - } - - return nil -} - -func resourceTencentCloudTsfReleaseApiGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_release_api_group.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_tsf_unit_namespace_test.go b/tencentcloud/resource_tc_tsf_unit_namespace_test.go deleted file mode 100644 index 28ae5e2ee1..0000000000 --- a/tencentcloud/resource_tc_tsf_unit_namespace_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "strings" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// go test -i; go test -test.run TestAccTencentCloudTsfUnitNamespaceResource_basic -v -func TestAccTencentCloudTsfUnitNamespaceResource_basic(t *testing.T) { - t.Parallel() - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, - Steps: []resource.TestStep{ - { - Config: testAccTsfUnitNamespace, - Check: resource.ComposeTestCheckFunc( - testAccCheckTsfUnitNamespaceExists("tencentcloud_tsf_unit_namespace.unit_namespace"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "gateway_instance_id", defaultTsfGateway), - resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "namespace_id", defaultTsfGWNamespaceId), - resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "namespace_name", "keep-terraform-cls"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "created_time"), - resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "updated_time"), - ), - }, - { - ResourceName: "tencentcloud_tsf_unit_namespace.unit_namespace", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckTsfUnitNamespaceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_tsf_unit_namespace" { - continue - } - - ids := strings.Split(rs.Primary.ID, FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - gatewayInstanceId := ids[0] - namespaceId := ids[1] - - res, err := service.DescribeTsfUnitNamespaceById(ctx, gatewayInstanceId, namespaceId) - if err != nil { - return err - } - - if res != nil { - return fmt.Errorf("tsf unitNamespace %s still exists", rs.Primary.ID) - } - } - return nil -} - -func testAccCheckTsfUnitNamespaceExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - rs, ok := s.RootModule().Resources[r] - if !ok { - return fmt.Errorf("resource %s is not found", r) - } - ids := strings.Split(rs.Primary.ID, FILED_SP) - if len(ids) != 2 { - return fmt.Errorf("id is broken,%s", rs.Primary.ID) - } - gatewayInstanceId := ids[0] - namespaceId := ids[1] - - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - res, err := service.DescribeTsfUnitNamespaceById(ctx, gatewayInstanceId, namespaceId) - if err != nil { - return err - } - - if res == nil { - return fmt.Errorf("tsf unitNamespace %s is not found", rs.Primary.ID) - } - - return nil - } -} - -const testAccTsfUnitNamespaceVar = ` -variable "gateway_instance_id" { - default = "` + defaultTsfGateway + `" -} - -variable "namespace_id" { - default = "` + defaultTsfGWNamespaceId + `" -} -` - -const testAccTsfUnitNamespace = testAccTsfUnitNamespaceVar + ` - -resource "tencentcloud_tsf_unit_namespace" "unit_namespace" { - gateway_instance_id = var.gateway_instance_id - namespace_id = var.namespace_id - namespace_name = "keep-terraform-cls" -} - -` diff --git a/tencentcloud/resource_tc_vod_sub_application.go b/tencentcloud/resource_tc_vod_sub_application.go deleted file mode 100644 index 13a85ae414..0000000000 --- a/tencentcloud/resource_tc_vod_sub_application.go +++ /dev/null @@ -1,255 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -func resourceTencentCloudVodSubApplication() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVodSubApplicationCreate, - Read: resourceTencentCloudVodSubApplicationRead, - Update: resourceTencentCloudVodSubApplicationUpdate, - Delete: resourceTencentCloudVodSubApplicationDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 40), - Description: "Sub application name, which can contain up to 64 letters, digits, underscores, and hyphens (such as test_ABC-123) and must be unique under a user.", - }, - "status": { - Type: schema.TypeString, - Required: true, - Description: "Sub appliaction status.", - ValidateFunc: validateAllowedStringValue(VOD_SUB_APPLICATION_STATUS), - }, - "description": { - Type: schema.TypeString, - Optional: true, - Description: "Sub application description.", - }, - //computed - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "The time when the sub application was created.", - }, - }, - } -} - -func resourceTencentCloudVodSubApplicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_sub_application.create")() - - var ( - logId = getLogId(contextNil) - request = vod.NewCreateSubAppIdRequest() - subAppId *uint64 - subAppName *string - ) - - if v, ok := d.GetOk("name"); ok { - subAppName = helper.String(v.(string)) - request.Name = subAppName - } - - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseVodClient().CreateSubAppId(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) - } - subAppId = response.Response.SubAppId - return nil - }); err != nil { - return err - } - - d.SetId(*subAppName + FILED_SP + helper.UInt64ToStr(*subAppId)) - - if v, ok := d.GetOk("status"); ok { - statusResquest := vod.NewModifySubAppIdStatusRequest() - statusResquest.SubAppId = subAppId - statusResquest.Status = helper.String(v.(string)) - - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(statusResquest.GetAction()) - _, err := meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySubAppIdStatus(statusResquest) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) - } - return nil - }); err != nil { - return err - } - } - - return resourceTencentCloudVodSubApplicationRead(d, meta) -} - -func resourceTencentCloudVodSubApplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_sub_application.read")() - defer inconsistentCheck(d, meta)() - - var ( - //logId = getLogId(contextNil) - //ctx = context.WithValue(context.TODO(), logIdKey, logId) - client = meta.(*TencentCloudClient).apiV3Conn - request = vod.NewDescribeSubAppIdsRequest() - appInfo = vod.SubAppIdInfo{} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("sub application id is borken, id is %s", d.Id()) - } - subAppName := idSplit[0] - subAppId := idSplit[1] - - request.Name = &subAppName - - response, err := client.UseVodClient().DescribeSubAppIds(request) - if err != nil { - return err - } - infoSet := response.Response.SubAppIdInfoSet - if len(infoSet) == 0 { - d.SetId("") - return nil - } - - for _, info := range infoSet { - if helper.UInt64ToStr(helper.PUint64(info.SubAppId)) == subAppId { - appInfo = *info - break - } - } - _ = d.Set("name", appInfo.Name) - _ = d.Set("description", appInfo.Description) - // there may hide a bug, appInfo do not return status. So use the user input - //_ = d.Set("status", appInfo.Status) - _ = d.Set("status", helper.String(d.Get("status").(string))) - _ = d.Set("create_time", appInfo.CreateTime) - return nil -} - -func resourceTencentCloudVodSubApplicationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_sub_application.update")() - - var ( - logId = getLogId(contextNil) - request = vod.NewModifySubAppIdInfoRequest() - changeFlag = false - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("sub application id is borken, id is %s", d.Id()) - } - subAppId := idSplit[1] - - if d.HasChange("name") { - changeFlag = true - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - } - if d.HasChange("description") { - changeFlag = true - if v, ok := d.GetOk("description"); ok { - request.Description = helper.String(v.(string)) - } - } - request.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) - - if changeFlag { - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySubAppIdInfo(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) - } - return nil - }) - if err != nil { - return err - } - } - if d.HasChange("status") { - var statusRequest = vod.NewModifySubAppIdStatusRequest() - if v, ok := d.GetOk("status"); ok { - statusRequest.Status = helper.String(v.(string)) - } - statusRequest.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(statusRequest.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySubAppIdStatus(statusRequest) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) - return retryError(err) - } - return nil - }) - } - return resourceTencentCloudVodSubApplicationRead(d, meta) -} - -func resourceTencentCloudVodSubApplicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_sub_application.delete")() - logId := getLogId(contextNil) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("sub application id is borken, id is %s", d.Id()) - } - subAppId := idSplit[1] - var statusRequest = vod.NewModifySubAppIdStatusRequest() - // first turn off - statusRequest.Status = helper.String("Off") - statusRequest.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(statusRequest.GetAction()) - if _, err := meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySubAppIdStatus(statusRequest); err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) - return retryError(err, InternalError) - } - return nil - }); err != nil { - return err - } - // then destroy - statusRequest.Status = helper.String("Destroyed") - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(statusRequest.GetAction()) - if _, err := meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySubAppIdStatus(statusRequest); err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) - return retryError(err, InternalError) - } - return nil - }); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_acl_attachment.go b/tencentcloud/resource_tc_vpc_acl_attachment.go deleted file mode 100644 index 3ecbcbc1ce..0000000000 --- a/tencentcloud/resource_tc_vpc_acl_attachment.go +++ /dev/null @@ -1,113 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudVpcAclAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcAclAttachmentCreate, - Read: resourceTencentCloudVpcAclAttachmentRead, - Delete: resourceTencentCloudVpcAclAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "acl_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validateNotEmpty, - Description: "ID of the attached ACL.", - }, - "subnet_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "The Subnet instance ID.", - }, - }, - } -} - -func resourceTencentCloudVpcAclAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_acl_attachment.create")() - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - subnetIds []string - ) - - aclId := d.Get("acl_id").(string) - subnetId := d.Get("subnet_id").(string) - - subnetIds = append(subnetIds, subnetId) - - err := service.AssociateAclSubnets(ctx, aclId, subnetIds) - if err != nil { - return err - } - - d.SetId(aclId + FILED_SP + subnetId) - - return resourceTencentCloudVpcAclAttachmentRead(d, meta) -} - -func resourceTencentCloudVpcAclAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_acl_attachment.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - attachmentId = d.Id() - ) - - idSplit := strings.Split(attachmentId, FILED_SP) - if len(idSplit) < 2 { - d.SetId("") - return nil - } - aclId := idSplit[0] - subnetId := idSplit[1] - results, err := service.DescribeNetWorkAcls(ctx, aclId, "", "") - if err != nil { - return err - } - if len(results) < 1 || len(results[0].SubnetSet) < 1 { - d.SetId("") - return nil - } - - _ = d.Set("acl_id", aclId) - _ = d.Set("subnet_id", subnetId) - - return nil - -} - -func resourceTencentCloudVpcAclAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_acl_attachment.delete")() - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - attachmentAcl = d.Id() - ) - - err := service.DeleteAclAttachment(ctx, attachmentAcl) - if err != nil { - log.Printf("[CRITAL]%s delete ACL attachment failed, reason:%s\n", logId, err.Error()) - return err - } - - return nil - -} diff --git a/tencentcloud/resource_tc_vpc_acl_attachment_test.go b/tencentcloud/resource_tc_vpc_acl_attachment_test.go deleted file mode 100644 index 4f96ee22e9..0000000000 --- a/tencentcloud/resource_tc_vpc_acl_attachment_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudVpcAclAttachment_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testVpcAclAttachmentDestroy, - Steps: []resource.TestStep{ - { - Config: testAclAttachment_basic, - Check: resource.ComposeTestCheckFunc( - testVpcAclAttachmentExists("tencentcloud_vpc_acl_attachment.attachment"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc_acl_attachment.attachment", "acl_id"), - ), - }, - { - ResourceName: "tencentcloud_vpc_acl_attachment.attachment", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testVpcAclAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_vpc_acl_attachment" { - continue - } - has, err := service.DescribeByAclId(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if has { - return fmt.Errorf("[CHECK][ACL attachment][Destroy] check: ACL attachment still exists: %s", rs.Primary.ID) - } - } - return nil -} - -func testVpcAclAttachmentExists(n string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - - rs, ok := s.RootModule().Resources[n] - if !ok { - return fmt.Errorf("[CHECK][ACL attachment][Exists] check: %s is not found", n) - } - if rs.Primary.ID == "" { - return fmt.Errorf("[CHECK][ACL attachment][Exists] check: id is not set") - } - has, err := service.DescribeByAclId(ctx, rs.Primary.ID) - if err != nil { - return err - } - - if !has { - return fmt.Errorf("[CHECK][ACL attachment][Exists] check: not exists: %s", rs.Primary.ID) - } - return nil - } -} - -const testAclAttachment_basic = ` -data "tencentcloud_vpc_instances" "id_instances" { - is_default = true -} -resource "tencentcloud_vpc_acl" "foo" { - vpc_id = data.tencentcloud_vpc_instances.id_instances.instance_list.0.vpc_id - name = "test_acl" - ingress = [ - "ACCEPT#192.168.1.0/24#800#TCP", - "ACCEPT#192.168.1.0/24#800-900#TCP", - ] - egress = [ - "ACCEPT#192.168.1.0/24#800#TCP", - "ACCEPT#192.168.1.0/24#800-900#TCP", - ] -} -resource "tencentcloud_vpc_acl_attachment" "attachment"{ - acl_id = tencentcloud_vpc_acl.foo.id - subnet_id = data.tencentcloud_vpc_instances.id_instances.instance_list[0].subnet_ids[0] -} -` diff --git a/tencentcloud/resource_tc_vpc_acl_international_test.go b/tencentcloud/resource_tc_vpc_acl_international_test.go deleted file mode 100644 index 909ab22e9a..0000000000 --- a/tencentcloud/resource_tc_vpc_acl_international_test.go +++ /dev/null @@ -1,99 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudInternationalVpcResource_acl(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckVpcACLDestroy, - Steps: []resource.TestStep{ - { - Config: testAccVpcACLConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcACLExists("tencentcloud_vpc_acl.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "name", "test_acl"), - resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "ingress.#", "2"), - resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "egress.#", "2"), - ), - }, - { - ResourceName: "tencentcloud_vpc_acl.foo", - ImportState: true, - }, - }, - }) -} - -func testAccInternationalCheckVpcACLExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), 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} - _, has, err := service.DescribeNetWorkByACLID(ctx, rs.Primary.ID) - if err != nil { - return err - } - if has > 0 { - return nil - } - - return fmt.Errorf("vpc network acl %s not exists", rs.Primary.ID) - } -} - -func testAccInternationalCheckVpcACLDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_vpc_acl" { - continue - } - _, has, err := service.DescribeNetWorkByACLID(ctx, rs.Primary.ID) - if err != nil { - return err - } - if has == 0 { - return nil - } - - return fmt.Errorf("vpc acl %s still exists", rs.Primary.ID) - } - - return nil -} - -const testAccInternationalVpcACLConfig = ` -data "tencentcloud_vpc_instances" "default" { - is_default = true -} - -resource "tencentcloud_vpc_acl" "foo" { - vpc_id = data.tencentcloud_vpc_instances.default.instance_list.0.vpc_id - name = "test_acl" - ingress = [ - "ACCEPT#192.168.1.0/24#80#TCP", - "ACCEPT#192.168.1.0/24#80-90#TCP", - ] - egress = [ - "ACCEPT#192.168.1.0/24#80#TCP", - "ACCEPT#192.168.1.0/24#80-90#TCP", - ] -} -` diff --git a/tencentcloud/resource_tc_vpc_bandwidth_package.go b/tencentcloud/resource_tc_vpc_bandwidth_package.go deleted file mode 100644 index f18f61b131..0000000000 --- a/tencentcloud/resource_tc_vpc_bandwidth_package.go +++ /dev/null @@ -1,310 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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 resourceTencentCloudVpcBandwidthPackage() *schema.Resource { - return &schema.Resource{ - Read: resourceTencentCloudVpcBandwidthPackageRead, - Create: resourceTencentCloudVpcBandwidthPackageCreate, - Update: resourceTencentCloudVpcBandwidthPackageUpdate, - Delete: resourceTencentCloudVpcBandwidthPackageDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "network_type": { - Type: schema.TypeString, - Optional: true, - Description: "Bandwidth packet type, default: `BGP`. " + - "Optional value: `BGP`: common BGP shared bandwidth package; `HIGH_QUALITY_BGP`: High Quality BGP Shared Bandwidth Package; " + - "`SINGLEISP_CMCC`: CMCC shared bandwidth package; `SINGLEISP_CTCC:`: CTCC shared bandwidth package; `SINGLEISP_CUCC`: CUCC shared bandwidth package.", - }, - - "charge_type": { - Type: schema.TypeString, - Optional: true, - Description: "Bandwidth package billing type, default: `TOP5_POSTPAID_BY_MONTH`." + - " Optional value: `TOP5_POSTPAID_BY_MONTH`: TOP5 billed by monthly postpaid; `PERCENT95_POSTPAID_BY_MONTH`: 95 billed monthly postpaid;" + - " `FIXED_PREPAID_BY_MONTH`: Monthly prepaid billing (Type FIXED_PREPAID_BY_MONTH product API capability is under construction);" + - " `BANDWIDTH_POSTPAID_BY_DAY`: bandwidth billed by daily postpaid; `ENHANCED95_POSTPAID_BY_MONTH`: enhanced 95 billed monthly postpaid.", - }, - - "bandwidth_package_name": { - Type: schema.TypeString, - Optional: true, - Description: "Bandwidth package name.", - }, - - "internet_max_bandwidth": { - Type: schema.TypeInt, - Optional: true, - Description: "Bandwidth packet speed limit size. Unit: Mbps, -1 means no speed limit.", - }, - - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "Tag description list.", - }, - - "time_span": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, - Description: "The purchase duration of the prepaid monthly bandwidth package, unit: month, value range: 1~60.", - }, - - "egress": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Network egress. It defaults to `center_egress1`. If you want to try the egress feature, please [submit a ticket](https://console.cloud.tencent.com/workorder/category).", - }, - }, - } -} - -func resourceTencentCloudVpcBandwidthPackageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_bwp_bandwidth_package.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewCreateBandwidthPackageRequest() - response *vpc.CreateBandwidthPackageResponse - ) - - if v, ok := d.GetOk("network_type"); ok { - request.NetworkType = helper.String(v.(string)) - } - - if v, ok := d.GetOk("charge_type"); ok { - request.ChargeType = helper.String(v.(string)) - } - - if v, ok := d.GetOk("bandwidth_package_name"); ok { - request.BandwidthPackageName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("internet_max_bandwidth"); ok { - request.InternetMaxBandwidth = helper.IntInt64(v.(int)) - } - - if v := helper.GetTags(d, "tags"); len(v) > 0 { - for tagKey, tagValue := range v { - tag := vpc.Tag{ - Key: helper.String(tagKey), - Value: helper.String(tagValue), - } - request.Tags = append(request.Tags, &tag) - } - } - - if v, ok := d.GetOkExists("time_span"); ok { - request.TimeSpan = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOk("egress"); ok { - request.Egress = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateBandwidthPackage(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()) - } - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create bwp bandwidthPackage failed, reason:%+v", logId, err) - return err - } - - bandwidthPackageId := *response.Response.BandwidthPackageId - - d.SetId(bandwidthPackageId) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:bandwidthPackage/%s", region, bandwidthPackageId) - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { - instance, errRet := service.DescribeVpcBandwidthPackage(ctx, bandwidthPackageId) - if errRet != nil { - return retryError(errRet, InternalError) - } - if instance == nil { - return resource.RetryableError(fmt.Errorf("vpc bandwidthPackage instance is being created, retry...")) - } - if *instance.Status == "CREATED" { - return nil - } - return resource.RetryableError(fmt.Errorf("vpc bandwidthPackage instance status is %v, retry...", *instance.Status)) - }) - if err != nil { - return err - } - - return resourceTencentCloudVpcBandwidthPackageRead(d, meta) -} - -func resourceTencentCloudVpcBandwidthPackageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_bwp_bandwidth_package.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - bandwidthPackageId := d.Id() - - bandwidthPackage, err := service.DescribeVpcBandwidthPackage(ctx, bandwidthPackageId) - - if err != nil { - return err - } - - if bandwidthPackage == nil { - d.SetId("") - log.Printf("[WARN]%s resource `tencentcloud_vpc_bandwidth_package` [%s] not found, please check if it has been deleted.", - logId, bandwidthPackageId, - ) - return nil - } - - if bandwidthPackage.NetworkType != nil { - _ = d.Set("network_type", bandwidthPackage.NetworkType) - } - - if bandwidthPackage.ChargeType != nil { - _ = d.Set("charge_type", bandwidthPackage.ChargeType) - } - - if bandwidthPackage.BandwidthPackageName != nil { - _ = d.Set("bandwidth_package_name", bandwidthPackage.BandwidthPackageName) - } - - if bandwidthPackage.Bandwidth != nil { - _ = d.Set("internet_max_bandwidth", bandwidthPackage.Bandwidth) - } - - if bandwidthPackage.Egress != nil { - _ = d.Set("egress", bandwidthPackage.Egress) - } - - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - tags, err := tagService.DescribeResourceTags(ctx, "vpc", "bandwidthPackage", tcClient.Region, d.Id()) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudVpcBandwidthPackageUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_bandwidth_package.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - bandwidthPackageId := d.Id() - - immutableArgs := []string{ - "network_type", - "internet_max_bandwidth", - "egress", - } - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - request := vpc.NewModifyBandwidthPackageAttributeRequest() - request.BandwidthPackageId = &bandwidthPackageId - - if v, ok := d.GetOk("bandwidth_package_name"); ok { - request.BandwidthPackageName = helper.String(v.(string)) - } - - if d.HasChange("charge_type") { - if v, ok := d.GetOk("charge_type"); ok { - request.ChargeType = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyBandwidthPackageAttribute(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 vpc bandwidthPackage failed, reason:%+v", logId, err) - return err - } - - if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("vpc", "bandwidthPackage", tcClient.Region, d.Id()) - if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { - return err - } - } - - return resourceTencentCloudVpcBandwidthPackageRead(d, meta) -} - -func resourceTencentCloudVpcBandwidthPackageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_bwp_bandwidth_package.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - bandwidthPackageId := d.Id() - - if err := service.DeleteVpcBandwidthPackageById(ctx, bandwidthPackageId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_classic_link_attachment.go b/tencentcloud/resource_tc_vpc_classic_link_attachment.go deleted file mode 100644 index e7c927e2ac..0000000000 --- a/tencentcloud/resource_tc_vpc_classic_link_attachment.go +++ /dev/null @@ -1,214 +0,0 @@ -/* -Provides a resource to create a vpc classic_link_attachment - -Example Usage - -```hcl -data "tencentcloud_availability_zones" "zones" {} - -data "tencentcloud_images" "image" { - image_type = ["PUBLIC_IMAGE"] - image_name_regex = "Final" -} - -data "tencentcloud_instance_types" "instance_types" { - filter { - name = "zone" - values = [data.tencentcloud_availability_zones.zones.zones.0.name] - } - - filter { - name = "instance-family" - values = ["S5"] - } - - cpu_core_count = 2 - exclude_sold_out = true -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name - name = "subnet-example" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_instance" "example" { - instance_name = "tf-example" - availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name - image_id = data.tencentcloud_images.image.images.0.image_id - instance_type = data.tencentcloud_instance_types.instance_types.instance_types.0.instance_type - system_disk_type = "CLOUD_PREMIUM" - disable_security_service = true - disable_monitor_service = true - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id -} - -resource "tencentcloud_vpc_classic_link_attachment" "classic_link_attachment" { - vpc_id = tencentcloud_vpc.vpc.id - instance_ids = [tencentcloud_instance.example.id] -} -``` - -Import - -vpc classic_link_attachment can be imported using the id, e.g. - -``` -terraform import tencentcloud_vpc_classic_link_attachment.classic_link_attachment classic_link_attachment_id -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudVpcClassicLinkAttachment() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcClassicLinkAttachmentCreate, - Read: resourceTencentCloudVpcClassicLinkAttachmentRead, - Delete: resourceTencentCloudVpcClassicLinkAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpc_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "VPC instance ID.", - }, - - "instance_ids": { - Required: true, - ForceNew: true, - MaxItems: 1, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "CVM instance ID. It only support set one instance now.", - }, - }, - } -} - -func resourceTencentCloudVpcClassicLinkAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_classic_link_attachment.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAttachClassicLinkVpcRequest() - vpcId string - instanceId string - ) - if v, ok := d.GetOk("vpc_id"); ok { - vpcId = v.(string) - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("instance_ids"); ok { - instanceIdsSet := v.(*schema.Set).List() - for i := range instanceIdsSet { - instanceId = instanceIdsSet[i].(string) - request.InstanceIds = append(request.InstanceIds, &instanceId) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AttachClassicLinkVpc(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 vpc ClassicLinkAttachment failed, reason:%+v", logId, err) - return err - } - - d.SetId(vpcId + FILED_SP + instanceId) - - return resourceTencentCloudVpcClassicLinkAttachmentRead(d, meta) -} - -func resourceTencentCloudVpcClassicLinkAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_classic_link_attachment.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - vpcId := idSplit[0] - instanceId := idSplit[1] - - classicLinkAttachment, err := service.DescribeVpcClassicLinkAttachmentById(ctx, vpcId, instanceId) - if err != nil { - return err - } - - if classicLinkAttachment == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcClassicLinkAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if classicLinkAttachment.VpcId != nil { - _ = d.Set("vpc_id", classicLinkAttachment.VpcId) - } - - if classicLinkAttachment.InstanceId != nil { - _ = d.Set("instance_ids", []*string{classicLinkAttachment.InstanceId}) - } - - return nil -} - -func resourceTencentCloudVpcClassicLinkAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_classic_link_attachment.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - vpcId := idSplit[0] - instanceId := idSplit[1] - - if err := service.DeleteVpcClassicLinkAttachmentById(ctx, vpcId, instanceId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_dhcp_associate_address.go b/tencentcloud/resource_tc_vpc_dhcp_associate_address.go deleted file mode 100644 index e6ecc6d788..0000000000 --- a/tencentcloud/resource_tc_vpc_dhcp_associate_address.go +++ /dev/null @@ -1,184 +0,0 @@ -/* -Provides a resource to create a vpc dhcp_associate_address - -Example Usage - -```hcl -data "tencentcloud_availability_zones" "zones" {} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name - name = "subnet-example" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_vpc_dhcp_ip" "example" { - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - dhcp_ip_name = "tf-example" -} - -resource "tencentcloud_eip" "eip" { - name = "example-eip" -} - -resource "tencentcloud_vpc_dhcp_associate_address" "example" { - dhcp_ip_id = tencentcloud_vpc_dhcp_ip.example.id - address_ip = tencentcloud_eip.eip.public_ip -} -``` - -Import - -vpc dhcp_associate_address can be imported using the id, e.g. - -``` -terraform import tencentcloud_vpc_dhcp_associate_address.dhcp_associate_address dhcp_associate_address_id -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudVpcDhcpAssociateAddress() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcDhcpAssociateAddressCreate, - Read: resourceTencentCloudVpcDhcpAssociateAddressRead, - Delete: resourceTencentCloudVpcDhcpAssociateAddressDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "dhcp_ip_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "`DhcpIp` unique `ID`, like: `dhcpip-9o233uri`. Must be a `DhcpIp` that is not bound to `EIP`.", - }, - - "address_ip": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Elastic public network `IP`. Must be `EIP` not bound to `DhcpIp`.", - }, - }, - } -} - -func resourceTencentCloudVpcDhcpAssociateAddressCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_associate_address.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAssociateDhcpIpWithAddressIpRequest() - dhcpIpId string - addressIp string - ) - if v, ok := d.GetOk("dhcp_ip_id"); ok { - dhcpIpId = v.(string) - request.DhcpIpId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("address_ip"); ok { - addressIp = v.(string) - request.AddressIp = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateDhcpIpWithAddressIp(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 vpc DhcpAssociateAddress failed, reason:%+v", logId, err) - return err - } - - d.SetId(dhcpIpId + FILED_SP + addressIp) - - return resourceTencentCloudVpcDhcpAssociateAddressRead(d, meta) -} - -func resourceTencentCloudVpcDhcpAssociateAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_associate_address.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - dhcpIpId := idSplit[0] - addressIp := idSplit[1] - - DhcpAssociateAddress, err := service.DescribeVpcDhcpAssociateAddressById(ctx, dhcpIpId, addressIp) - if err != nil { - return err - } - - if DhcpAssociateAddress == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcDhcpAssociateAddress` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if DhcpAssociateAddress.DhcpIpId != nil { - _ = d.Set("dhcp_ip_id", DhcpAssociateAddress.DhcpIpId) - } - - if DhcpAssociateAddress.AddressIp != nil { - _ = d.Set("address_ip", DhcpAssociateAddress.AddressIp) - } - - return nil -} - -func resourceTencentCloudVpcDhcpAssociateAddressDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_associate_address.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - dhcpIpId := idSplit[0] - - if err := service.DeleteVpcDhcpAssociateAddressById(ctx, dhcpIpId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_dhcp_ip.go b/tencentcloud/resource_tc_vpc_dhcp_ip.go deleted file mode 100644 index de80121a92..0000000000 --- a/tencentcloud/resource_tc_vpc_dhcp_ip.go +++ /dev/null @@ -1,193 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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 resourceTencentCloudVpcDhcpIp() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcDhcpIpCreate, - Read: resourceTencentCloudVpcDhcpIpRead, - Update: resourceTencentCloudVpcDhcpIpUpdate, - Delete: resourceTencentCloudVpcDhcpIpDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpc_id": { - Required: true, - Type: schema.TypeString, - Description: "The private network `ID`.", - }, - - "subnet_id": { - Required: true, - Type: schema.TypeString, - Description: "Subnet `ID`.", - }, - - "dhcp_ip_name": { - Required: true, - Type: schema.TypeString, - Description: "`DhcpIp` name.", - }, - }, - } -} - -func resourceTencentCloudVpcDhcpIpCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_ip.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewCreateDhcpIpRequest() - response = vpc.NewCreateDhcpIpResponse() - dhcpIpId string - ) - if v, ok := d.GetOk("vpc_id"); ok { - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("subnet_id"); ok { - request.SubnetId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("dhcp_ip_name"); ok { - request.DhcpIpName = helper.String(v.(string)) - } - - // 默认1 - request.SecondaryPrivateIpAddressCount = helper.IntUint64(1) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateDhcpIp(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create vpc dhcpIp failed, reason:%+v", logId, err) - return err - } - - dhcpIpSet := response.Response.DhcpIpSet - if len(dhcpIpSet) < 1 { - return fmt.Errorf("create vpc dhcpIp failed.") - } - - dhcpIpId = *dhcpIpSet[0].DhcpIpId - d.SetId(dhcpIpId) - - return resourceTencentCloudVpcDhcpIpRead(d, meta) -} - -func resourceTencentCloudVpcDhcpIpRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_ip.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - dhcpIpId := d.Id() - - dhcpIp, err := service.DescribeVpcDhcpIpById(ctx, dhcpIpId) - if err != nil { - return err - } - - if dhcpIp == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcDhcpIp` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if dhcpIp.VpcId != nil { - _ = d.Set("vpc_id", dhcpIp.VpcId) - } - - if dhcpIp.SubnetId != nil { - _ = d.Set("subnet_id", dhcpIp.SubnetId) - } - - if dhcpIp.DhcpIpName != nil { - _ = d.Set("dhcp_ip_name", dhcpIp.DhcpIpName) - } - - return nil -} - -func resourceTencentCloudVpcDhcpIpUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_ip.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := vpc.NewModifyDhcpIpAttributeRequest() - - dhcpIpId := d.Id() - - request.DhcpIpId = &dhcpIpId - - immutableArgs := []string{"vpc_id", "subnet_id"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - if d.HasChange("dhcp_ip_name") { - if v, ok := d.GetOk("dhcp_ip_name"); ok { - request.DhcpIpName = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyDhcpIpAttribute(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 update vpc dhcpIp failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudVpcDhcpIpRead(d, meta) -} - -func resourceTencentCloudVpcDhcpIpDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_dhcp_ip.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - dhcpIpId := d.Id() - - if err := service.DeleteVpcDhcpIpById(ctx, dhcpIpId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_international_test.go b/tencentcloud/resource_tc_vpc_international_test.go deleted file mode 100644 index d8a5092583..0000000000 --- a/tencentcloud/resource_tc_vpc_international_test.go +++ /dev/null @@ -1,90 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func TestAccTencentCloudInternationalVpcResource_instance(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccInternationalCheckVpcDestroy, - Steps: []resource.TestStep{ - { - Config: testAccInternationalVpcConfig, - Check: resource.ComposeTestCheckFunc( - testAccInternationalCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", "172.16.0.0/16"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", "tf-vpc"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "default_route_table_id"), - ), - }, - { - ResourceName: "tencentcloud_vpc.foo", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccInternationalCheckVpcExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), 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} - _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") - if err != nil { - return err - } - if has > 0 { - return nil - } - - return fmt.Errorf("vpc %s not exists", rs.Primary.ID) - } -} - -func testAccInternationalCheckVpcDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_vpc" { - continue - } - time.Sleep(5 * time.Second) - _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") - if err != nil { - return err - } - if has == 0 { - return nil - } - return fmt.Errorf("vpc %s still exists", rs.Primary.ID) - } - - return nil -} - -const testAccInternationalVpcConfig = ` -resource "tencentcloud_vpc" "foo" { - name = "tf-vpc" - cidr_block = "172.16.0.0/16" -} -` diff --git a/tencentcloud/resource_tc_vpc_ipv6_cidr_block.go b/tencentcloud/resource_tc_vpc_ipv6_cidr_block.go deleted file mode 100644 index f548647351..0000000000 --- a/tencentcloud/resource_tc_vpc_ipv6_cidr_block.go +++ /dev/null @@ -1,120 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "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 resourceTencentCloudVpcIpv6CidrBlock() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcIpv6CidrBlockCreate, - Read: resourceTencentCloudVpcIpv6CidrBlockRead, - Delete: resourceTencentCloudVpcIpv6CidrBlockDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpc_id": { - Required: true, - Type: schema.TypeString, - ForceNew: true, - Description: "`VPC` instance `ID`, in the form of `vpc-f49l6u0z`.", - }, - "ipv6_cidr_block": { - Type: schema.TypeString, - Computed: true, - Description: "ipv6 cidr block.", - }, - }, - } -} - -func resourceTencentCloudVpcIpv6CidrBlockCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAssignIpv6CidrBlockRequest() - vpcId string - ) - if v, ok := d.GetOk("vpc_id"); ok { - vpcId = v.(string) - request.VpcId = helper.String(vpcId) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssignIpv6CidrBlock(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 vpc ipv6CidrBlock failed, reason:%+v", logId, err) - return err - } - - d.SetId(vpcId) - - return resourceTencentCloudVpcIpv6CidrBlockRead(d, meta) -} - -func resourceTencentCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - vpcId := d.Id() - - instance, err := service.DescribeVpcById(ctx, vpcId) - if err != nil { - return err - } - - if instance == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcIpv6CidrBlock` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if instance.VpcId != nil { - _ = d.Set("vpc_id", instance.VpcId) - } - - if instance.Ipv6CidrBlock != nil { - _ = d.Set("ipv6_cidr_block", instance.Ipv6CidrBlock) - } - - return nil -} - -func resourceTencentCloudVpcIpv6CidrBlockDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - vpcId := d.Id() - - if err := service.DeleteVpcIpv6CidrBlockById(ctx, vpcId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_local_gateway.go b/tencentcloud/resource_tc_vpc_local_gateway.go deleted file mode 100644 index 0afa4d6f0b..0000000000 --- a/tencentcloud/resource_tc_vpc_local_gateway.go +++ /dev/null @@ -1,199 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudVpcLocalGateway() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcLocalGatewayCreate, - Read: resourceTencentCloudVpcLocalGatewayRead, - Update: resourceTencentCloudVpcLocalGatewayUpdate, - Delete: resourceTencentCloudVpcLocalGatewayDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "local_gateway_name": { - Required: true, - Type: schema.TypeString, - Description: "Local gateway name.", - }, - - "vpc_id": { - Required: true, - Type: schema.TypeString, - Description: "VPC instance ID.", - }, - - "cdc_id": { - Required: true, - Type: schema.TypeString, - Description: "CDC instance ID.", - }, - }, - } -} - -func resourceTencentCloudVpcLocalGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_local_gateway.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewCreateLocalGatewayRequest() - response = vpc.NewCreateLocalGatewayResponse() - cdcId string - localGatewayId string - ) - if v, ok := d.GetOk("local_gateway_name"); ok { - request.LocalGatewayName = helper.String(v.(string)) - } - - if v, ok := d.GetOk("vpc_id"); ok { - request.VpcId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("cdc_id"); ok { - cdcId = v.(string) - request.CdcId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateLocalGateway(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create vpc localGateway failed, reason:%+v", logId, err) - return err - } - - localGatewayId = *response.Response.LocalGateway.UniqLocalGwId - d.SetId(cdcId + FILED_SP + localGatewayId) - - return resourceTencentCloudVpcLocalGatewayRead(d, meta) -} - -func resourceTencentCloudVpcLocalGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_local_gateway.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - localGatewayId := idSplit[1] - - localGateway, err := service.DescribeVpcLocalGatewayById(ctx, localGatewayId) - if err != nil { - return err - } - - if localGateway == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcLocalGateway` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if localGateway.LocalGatewayName != nil { - _ = d.Set("local_gateway_name", localGateway.LocalGatewayName) - } - - if localGateway.VpcId != nil { - _ = d.Set("vpc_id", localGateway.VpcId) - } - - if localGateway.CdcId != nil { - _ = d.Set("cdc_id", localGateway.CdcId) - } - - return nil -} - -func resourceTencentCloudVpcLocalGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_local_gateway.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := vpc.NewModifyLocalGatewayRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - cdcId := idSplit[0] - localGatewayId := idSplit[1] - - request.CdcId = &cdcId - request.LocalGatewayId = &localGatewayId - - if v, ok := d.GetOk("local_gateway_name"); ok { - request.LocalGatewayName = helper.String(v.(string)) - } - - if d.HasChange("vpc_id") { - if v, ok := d.GetOk("vpc_id"); ok { - request.VpcId = helper.String(v.(string)) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyLocalGateway(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 update vpc localGateway failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudVpcLocalGatewayRead(d, meta) -} - -func resourceTencentCloudVpcLocalGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_local_gateway.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - cdcId := idSplit[0] - localGatewayId := idSplit[1] - - if err := service.DeleteVpcLocalGatewayById(ctx, cdcId, localGatewayId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_notify_routes.go b/tencentcloud/resource_tc_vpc_notify_routes.go deleted file mode 100644 index 561f4a18cb..0000000000 --- a/tencentcloud/resource_tc_vpc_notify_routes.go +++ /dev/null @@ -1,186 +0,0 @@ -/* -Provides a resource to create a vpc notify_routes - -Example Usage - -```hcl -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_route_table" "route_table" { - vpc_id = tencentcloud_vpc.vpc.id - name = "tf-example" -} - -resource "tencentcloud_vpc_notify_routes" "example" { - route_table_id = tencentcloud_route_table.route_table.id - route_item_ids = ["rti-i8bap903"] -} -``` - -Import - -vpc notify_routes can be imported using the id, e.g. - -``` -terraform import tencentcloud_vpc_notify_routes.notify_routes notify_routes_id -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudVpcNotifyRoutes() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcNotifyRoutesCreate, - Read: resourceTencentCloudVpcNotifyRoutesRead, - Delete: resourceTencentCloudVpcNotifyRoutesDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "route_table_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "The unique ID of the routing table.", - }, - - "route_item_ids": { - Required: true, - ForceNew: true, - Type: schema.TypeSet, - Elem: &schema.Schema{ - Type: schema.TypeString, - }, - Description: "The unique ID of the routing policy.", - }, - - "published_to_vbc": { - Computed: true, - Type: schema.TypeBool, - Description: "If published to vbc.", - }, - }, - } -} - -func resourceTencentCloudVpcNotifyRoutesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_notify_routes.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewNotifyRoutesRequest() - routeTableId string - routeItemId string - ) - if v, ok := d.GetOk("route_table_id"); ok { - routeTableId = v.(string) - request.RouteTableId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("route_item_ids"); ok { - routeItemIdsSet := v.(*schema.Set).List() - for i := range routeItemIdsSet { - routeItemId = routeItemIdsSet[i].(string) - request.RouteItemIds = append(request.RouteItemIds, &routeItemId) - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().NotifyRoutes(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 vpc notifyRoutes failed, reason:%+v", logId, err) - return err - } - - d.SetId(routeTableId + FILED_SP + routeItemId) - - return resourceTencentCloudVpcNotifyRoutesRead(d, meta) -} - -func resourceTencentCloudVpcNotifyRoutesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_notify_routes.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - routeTableId := idSplit[0] - routeItemId := idSplit[1] - - notifyRoutes, err := service.DescribeVpcNotifyRoutesById(ctx, routeTableId, routeItemId) - if err != nil { - return err - } - - if notifyRoutes == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcNotifyRoutes` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if notifyRoutes.RouteTableId != nil { - _ = d.Set("route_table_id", notifyRoutes.RouteTableId) - } - - if notifyRoutes.RouteItemId != nil { - _ = d.Set("route_item_ids", []*string{notifyRoutes.RouteItemId}) - } - - if notifyRoutes.PublishedToVbc != nil { - _ = d.Set("published_to_vbc", notifyRoutes.PublishedToVbc) - } - - return nil -} - -func resourceTencentCloudVpcNotifyRoutesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_notify_routes.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - routeTableId := idSplit[0] - routeItemId := idSplit[1] - - if err := service.DeleteVpcNotifyRoutesById(ctx, routeTableId, routeItemId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_peer_connect_accept_operation.go b/tencentcloud/resource_tc_vpc_peer_connect_accept_operation.go deleted file mode 100644 index 20ba479aa9..0000000000 --- a/tencentcloud/resource_tc_vpc_peer_connect_accept_operation.go +++ /dev/null @@ -1,73 +0,0 @@ -package tencentcloud - -import ( - "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" - "log" -) - -func resourceTencentCloudVpcPeerConnectAcceptOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcPeerConnectAcceptOperationCreate, - Read: resourceTencentCloudVpcPeerConnectAcceptOperationRead, - Delete: resourceTencentCloudVpcPeerConnectAcceptOperationDelete, - Schema: map[string]*schema.Schema{ - "peering_connection_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Peer connection unique ID.", - }, - }, - } -} - -func resourceTencentCloudVpcPeerConnectAcceptOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewAcceptVpcPeeringConnectionRequest() - peeringConnectionId string - ) - if v, ok := d.GetOk("peering_connection_id"); ok { - peeringConnectionId = v.(string) - request.PeeringConnectionId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AcceptVpcPeeringConnection(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 vpc PeerConnectAcceptOperation failed, reason:%+v", logId, err) - return err - } - - d.SetId(peeringConnectionId) - - return resourceTencentCloudVpcPeerConnectAcceptOperationRead(d, meta) -} - -func resourceTencentCloudVpcPeerConnectAcceptOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudVpcPeerConnectAcceptOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_peer_connect_reject_operation.go b/tencentcloud/resource_tc_vpc_peer_connect_reject_operation.go deleted file mode 100644 index d901676c2c..0000000000 --- a/tencentcloud/resource_tc_vpc_peer_connect_reject_operation.go +++ /dev/null @@ -1,73 +0,0 @@ -package tencentcloud - -import ( - "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" - "log" -) - -func resourceTencentCloudVpcPeerConnectRejectOperation() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcPeerConnectRejectOperationCreate, - Read: resourceTencentCloudVpcPeerConnectRejectOperationRead, - Delete: resourceTencentCloudVpcPeerConnectRejectOperationDelete, - Schema: map[string]*schema.Schema{ - "peering_connection_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Peer connection unique ID.", - }, - }, - } -} - -func resourceTencentCloudVpcPeerConnectRejectOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewRejectVpcPeeringConnectionRequest() - peeringConnectionId string - ) - if v, ok := d.GetOk("peering_connection_id"); ok { - peeringConnectionId = v.(string) - request.PeeringConnectionId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().RejectVpcPeeringConnection(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 vpc PeerConnectRejectOperation failed, reason:%+v", logId, err) - return err - } - - d.SetId(peeringConnectionId) - - return resourceTencentCloudVpcPeerConnectRejectOperationRead(d, meta) -} - -func resourceTencentCloudVpcPeerConnectRejectOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudVpcPeerConnectRejectOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_resume_snapshot_instance.go b/tencentcloud/resource_tc_vpc_resume_snapshot_instance.go deleted file mode 100644 index 6e60d9b73e..0000000000 --- a/tencentcloud/resource_tc_vpc_resume_snapshot_instance.go +++ /dev/null @@ -1,100 +0,0 @@ -package tencentcloud - -import ( - "log" - - "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 resourceTencentCloudVpcResumeSnapshotInstance() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcResumeSnapshotInstanceCreate, - Read: resourceTencentCloudVpcResumeSnapshotInstanceRead, - Delete: resourceTencentCloudVpcResumeSnapshotInstanceDelete, - Schema: map[string]*schema.Schema{ - "snapshot_policy_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Snapshot policy Id.", - }, - - "snapshot_file_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Snapshot file Id.", - }, - - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "InstanceId.", - }, - }, - } -} - -func resourceTencentCloudVpcResumeSnapshotInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewResumeSnapshotInstanceRequest() - snapshotPolicyId string - snapshotFileId string - instanceId string - ) - if v, ok := d.GetOk("snapshot_policy_id"); ok { - snapshotPolicyId = v.(string) - request.SnapshotPolicyId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("snapshot_file_id"); ok { - snapshotFileId = v.(string) - request.SnapshotFileId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ResumeSnapshotInstance(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 vpc resumeSnapshotInstance failed, reason:%+v", logId, err) - return err - } - - d.SetId(snapshotPolicyId + FILED_SP + snapshotFileId + FILED_SP + instanceId) - - return resourceTencentCloudVpcResumeSnapshotInstanceRead(d, meta) -} - -func resourceTencentCloudVpcResumeSnapshotInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudVpcResumeSnapshotInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy_config.go b/tencentcloud/resource_tc_vpc_snapshot_policy_config.go deleted file mode 100644 index 289f22f9c9..0000000000 --- a/tencentcloud/resource_tc_vpc_snapshot_policy_config.go +++ /dev/null @@ -1,140 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "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 resourceTencentCloudVpcSnapshotPolicyConfig() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcSnapshotPolicyConfigCreate, - Read: resourceTencentCloudVpcSnapshotPolicyConfigRead, - Update: resourceTencentCloudVpcSnapshotPolicyConfigUpdate, - Delete: resourceTencentCloudVpcSnapshotPolicyConfigDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "snapshot_policy_id": { - Required: true, - Type: schema.TypeString, - Description: "Snapshot policy Id.", - }, - - "enable": { - Required: true, - Type: schema.TypeBool, - Description: "If enable snapshot policy.", - }, - }, - } -} - -func resourceTencentCloudVpcSnapshotPolicyConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_config.create")() - defer inconsistentCheck(d, meta)() - - snapshotPolicyId := d.Get("snapshot_policy_id").(string) - - d.SetId(snapshotPolicyId) - - return resourceTencentCloudVpcSnapshotPolicyConfigUpdate(d, meta) -} - -func resourceTencentCloudVpcSnapshotPolicyConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_config.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - snapshotPolicyId := d.Id() - - snapshotPolicies, err := service.DescribeVpcSnapshotPoliciesById(ctx, snapshotPolicyId) - if err != nil { - return err - } - - if len(snapshotPolicies) < 1 { - d.SetId("") - log.Printf("[WARN]%s resource `VpcSnapshotPolicyConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - snapshotPolicy := snapshotPolicies[0] - - _ = d.Set("snapshot_policy_id", snapshotPolicyId) - - if snapshotPolicy.Enable != nil { - _ = d.Set("enable", snapshotPolicy.Enable) - } - - return nil -} - -func resourceTencentCloudVpcSnapshotPolicyConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_config.update")() - defer inconsistentCheck(d, meta)() - - var ( - enable bool - enableRequest = vpc.NewEnableSnapshotPoliciesRequest() - disableRequest = vpc.NewDisableSnapshotPoliciesRequest() - ) - - logId := getLogId(contextNil) - - snapshotPolicyId := d.Id() - - if v, ok := d.GetOkExists("enable"); ok { - enable = v.(bool) - } - - if enable { - enableRequest.SnapshotPolicyIds = []*string{&snapshotPolicyId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().EnableSnapshotPolicies(enableRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableRequest.GetAction(), enableRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update vpc snapshotPolicyConfig failed, reason:%+v", logId, err) - return err - } - } else { - disableRequest.SnapshotPolicyIds = []*string{&snapshotPolicyId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DisableSnapshotPolicies(disableRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, disableRequest.GetAction(), disableRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s update vpc snapshotPolicyConfig failed, reason:%+v", logId, err) - return err - } - } - - return resourceTencentCloudVpcSnapshotPolicyConfigRead(d, meta) -} - -func resourceTencentCloudVpcSnapshotPolicyConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_config.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpc_test.go b/tencentcloud/resource_tc_vpc_test.go deleted file mode 100644 index d82bf37768..0000000000 --- a/tencentcloud/resource_tc_vpc_test.go +++ /dev/null @@ -1,251 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - "testing" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -func init() { - resource.AddTestSweepers("tencentcloud_vpc", &resource.Sweeper{ - Name: "tencentcloud_vpc", - F: testSweepVpcInstance, - }) -} - -func testSweepVpcInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sharedClient, err := sharedClientForRegion(region) - if err != nil { - return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) - } - client := sharedClient.(*TencentCloudClient) - - vpcService := VpcService{ - client: client.apiV3Conn, - } - - instances, err := vpcService.DescribeVpcs(ctx, "", "", nil, nil, "", "") - if err != nil { - return fmt.Errorf("get instance list error: %s", err.Error()) - } - - for _, v := range instances { - instanceId := v.vpcId - instanceName := v.name - - now := time.Now() - - createTime := stringTotime(v.createTime) - interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { - continue - } - // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { - continue - } - - if err = vpcService.DeleteVpc(ctx, instanceId); err != nil { - log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error()) - } - } - - return nil -} - -func TestAccTencentCloudVpcV3Basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckVpcDestroy, - Steps: []resource.TestStep{ - { - Config: testAccVpcConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidr), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsName), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "default_route_table_id"), - ), - }, - { - ResourceName: "tencentcloud_vpc.foo", - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccTencentCloudVpcV3Update(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckVpcDestroy, - Steps: []resource.TestStep{ - { - Config: testAccVpcConfig, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidr), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsName), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), - - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), - ), - }, - { - Config: testAccVpcConfigUpdate, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidrLess), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsNameUpdate), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "false"), - - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), - - resource.TestCheckTypeSetElemAttr("tencentcloud_vpc.foo", "dns_servers.*", "119.29.29.29"), - resource.TestCheckTypeSetElemAttr("tencentcloud_vpc.foo", "dns_servers.*", "182.254.116.116"), - ), - }, - }, - }) -} - -func TestAccTencentCloudVpcV3WithTags(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - CheckDestroy: testAccCheckVpcDestroy, - Steps: []resource.TestStep{ - { - Config: testAccVpcConfigWithTags, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidr), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsName), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), - - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), - resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), - - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "tags.test", "test"), - resource.TestCheckNoResourceAttr("tencentcloud_vpc.foo", "tags.abc"), - ), - }, - { - Config: testAccVpcConfigWithTagsUpdate, - Check: resource.ComposeTestCheckFunc( - testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidr), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsName), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "tags.abc", "abc"), - resource.TestCheckNoResourceAttr("tencentcloud_vpc.foo", "tags.test"), - ), - }, - }, - }) -} - -func testAccCheckVpcExists(r string) resource.TestCheckFunc { - return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), 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} - _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") - if err != nil { - return err - } - if has > 0 { - return nil - } - - return fmt.Errorf("vpc %s not exists", rs.Primary.ID) - } -} - -func testAccCheckVpcDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - for _, rs := range s.RootModule().Resources { - if rs.Type != "tencentcloud_vpc" { - continue - } - time.Sleep(5 * time.Second) - _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") - if err != nil { - return err - } - if has == 0 { - return nil - } - return fmt.Errorf("vpc %s still exists", rs.Primary.ID) - } - - return nil -} - -const testAccVpcConfig = defaultVpcVariable + ` -resource "tencentcloud_vpc" "foo" { - name = var.instance_name - cidr_block = var.vpc_cidr -} -` - -const testAccVpcConfigUpdate = defaultVpcVariable + ` -resource "tencentcloud_vpc" "foo" { - name = var.instance_name_update - cidr_block = var.vpc_cidr_less - dns_servers = ["119.29.29.29", "182.254.116.116"] - is_multicast = false -} -` - -const testAccVpcConfigWithTags = defaultVpcVariable + ` -resource "tencentcloud_vpc" "foo" { - name = var.instance_name - cidr_block = var.vpc_cidr - - tags = { - "test" = "test" - } -} -` - -const testAccVpcConfigWithTagsUpdate = defaultVpcVariable + ` -resource "tencentcloud_vpc" "foo" { - name = var.instance_name - cidr_block = var.vpc_cidr - - tags = { - "abc" = "abc" - } -} -` diff --git a/tencentcloud/resource_tc_vpc_traffic_package.go b/tencentcloud/resource_tc_vpc_traffic_package.go deleted file mode 100644 index 5e25a4c074..0000000000 --- a/tencentcloud/resource_tc_vpc_traffic_package.go +++ /dev/null @@ -1,151 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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 resourceTencentCloudVpcTrafficPackage() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpcTrafficPackageCreate, - Read: resourceTencentCloudVpcTrafficPackageRead, - Delete: resourceTencentCloudVpcTrafficPackageDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "traffic_amount": { - Required: true, - ForceNew: true, - Type: schema.TypeInt, - Description: "Traffic Package Amount, eg: 10,20,50,512,1024,5120,51200,60,300,600,3072,6144,30720,61440,307200.", - }, - - "remaining_amount": { - Computed: true, - Type: schema.TypeFloat, - Description: "Remaining amount.", - }, - - "used_amount": { - Computed: true, - Type: schema.TypeFloat, - Description: "Used amount.", - }, - - "created_time": { - Computed: true, - Type: schema.TypeString, - Description: "Created time.", - }, - }, - } -} - -func resourceTencentCloudVpcTrafficPackageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_traffic_package.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewCreateTrafficPackagesRequest() - response = vpc.NewCreateTrafficPackagesResponse() - trafficPackageId string - ) - if v, ok := d.GetOkExists("traffic_amount"); ok { - request.TrafficAmount = helper.IntUint64(v.(int)) - } - request.TrafficPackageCount = helper.IntUint64(1) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateTrafficPackages(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()) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create vpc TrafficPackage failed, reason:%+v", logId, err) - return err - } - - trafficPackageSet := response.Response.TrafficPackageSet - - if len(trafficPackageSet) < 1 { - return fmt.Errorf("create traffic package failed.") - } - trafficPackageId = *trafficPackageSet[0] - - d.SetId(trafficPackageId) - - return resourceTencentCloudVpcTrafficPackageRead(d, meta) -} - -func resourceTencentCloudVpcTrafficPackageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_traffic_package.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - trafficPackageId := d.Id() - - TrafficPackage, err := service.DescribeVpcTrafficPackageById(ctx, trafficPackageId) - if err != nil { - return err - } - - if TrafficPackage == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcTrafficPackage` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if TrafficPackage.TotalAmount != nil { - _ = d.Set("traffic_amount", TrafficPackage.TotalAmount) - } - - if TrafficPackage.RemainingAmount != nil { - _ = d.Set("remaining_amount", TrafficPackage.RemainingAmount) - } - - if TrafficPackage.UsedAmount != nil { - _ = d.Set("used_amount", TrafficPackage.UsedAmount) - } - - if TrafficPackage.CreatedTime != nil { - _ = d.Set("created_time", TrafficPackage.CreatedTime) - } - - return nil -} - -func resourceTencentCloudVpcTrafficPackageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_traffic_package.delete")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - trafficPackageId := d.Id() - - if err := service.DeleteVpcTrafficPackageById(ctx, trafficPackageId); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_vpn_connection_reset.go b/tencentcloud/resource_tc_vpn_connection_reset.go deleted file mode 100644 index 593cfcae7b..0000000000 --- a/tencentcloud/resource_tc_vpn_connection_reset.go +++ /dev/null @@ -1,87 +0,0 @@ -package tencentcloud - -import ( - "log" - - "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 resourceTencentCloudVpnConnectionReset() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpnConnectionResetCreate, - Read: resourceTencentCloudVpnConnectionResetRead, - Delete: resourceTencentCloudVpnConnectionResetDelete, - Schema: map[string]*schema.Schema{ - "vpn_gateway_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "VPN GATEWAY INSTANCE ID.", - }, - - "vpn_connection_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "VPN CONNECTION INSTANCE ID.", - }, - }, - } -} - -func resourceTencentCloudVpnConnectionResetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_connection_reset.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - var ( - request = vpc.NewResetVpnConnectionRequest() - vpnGatewayId string - vpnConnectionId string - ) - if v, ok := d.GetOk("vpn_gateway_id"); ok { - vpnGatewayId = v.(string) - request.VpnGatewayId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("vpn_connection_id"); ok { - vpnConnectionId = v.(string) - request.VpnConnectionId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ResetVpnConnection(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 vpc vpnConnectionReset failed, reason:%+v", logId, err) - return nil - } - - d.SetId(vpnGatewayId + FILED_SP + vpnConnectionId) - - return resourceTencentCloudVpnConnectionResetRead(d, meta) -} - -func resourceTencentCloudVpnConnectionResetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection_reset.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudVpnConnectionResetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection_reset.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpn_customer_gateway.go b/tencentcloud/resource_tc_vpn_customer_gateway.go deleted file mode 100644 index 5f941c60cd..0000000000 --- a/tencentcloud/resource_tc_vpn_customer_gateway.go +++ /dev/null @@ -1,316 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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" - vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudVpnCustomerGateway() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpnCustomerGatewayCreate, - Read: resourceTencentCloudVpnCustomerGatewayRead, - Update: resourceTencentCloudVpnCustomerGatewayUpdate, - Delete: resourceTencentCloudVpnCustomerGatewayDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), - Description: "Name of the customer gateway. The length of character is limited to 1-60.", - }, - "public_ip_address": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - ValidateFunc: validateIp, - Description: "Public IP of the customer gateway.", - }, - "tags": { - Type: schema.TypeMap, - Optional: true, - Description: "A list of tags used to associate different resources.", - }, - "create_time": { - Type: schema.TypeString, - Computed: true, - Description: "Create time of the customer gateway.", - }, - }, - } -} - -func resourceTencentCloudVpnCustomerGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway.create")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - request := vpc.NewCreateCustomerGatewayRequest() - request.CustomerGatewayName = helper.String(d.Get("name").(string)) - request.IpAddress = helper.String(d.Get("public_ip_address").(string)) - var response *vpc.CreateCustomerGatewayResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateCustomerGateway(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) - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s create VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - - if response.Response.CustomerGateway == nil { - return fmt.Errorf("VPN customer gateway id is nil") - } - customerGatewayId := *response.Response.CustomerGateway.CustomerGatewayId - d.SetId(customerGatewayId) - // must wait for finishing creating customer gateway - statRequest := vpc.NewDescribeCustomerGatewaysRequest() - statRequest.CustomerGatewayIds = []*string{response.Response.CustomerGateway.CustomerGatewayId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeCustomerGateways(statRequest) - 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) - } else { - //if not, quit - if len(result.Response.CustomerGatewaySet) != 1 { - return resource.NonRetryableError(fmt.Errorf("creating error")) - } - //else consider created, cos there is no status of gateway - return nil - } - }) - if err != nil { - log.Printf("[CRITAL]%s create VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - - //modify tags - if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "cgw", region, customerGatewayId) - - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } - - return resourceTencentCloudVpnCustomerGatewayRead(d, meta) -} - -func resourceTencentCloudVpnCustomerGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - customerGatewayId := d.Id() - request := vpc.NewDescribeCustomerGatewaysRequest() - request.CustomerGatewayIds = []*string{&customerGatewayId} - var response *vpc.DescribeCustomerGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeCustomerGateways(request) - if e != nil { - ee, ok := e.(*errors.TencentCloudSDKError) - if !ok { - return retryError(e) - } - if ee.Code == VPCNotFound { - log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), e.Error()) - return nil - } else { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) - } - } - response = result - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s read VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - if response == nil || response.Response == nil || len(response.Response.CustomerGatewaySet) < 1 { - d.SetId("") - return nil - } - - gateway := response.Response.CustomerGatewaySet[0] - - _ = d.Set("name", *gateway.CustomerGatewayName) - _ = d.Set("public_ip_address", *gateway.IpAddress) - _ = d.Set("create_time", *gateway.CreatedTime) - - //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - tags, err := tagService.DescribeResourceTags(ctx, "vpc", "cgw", region, customerGatewayId) - if err != nil { - return err - } - _ = d.Set("tags", tags) - - return nil -} - -func resourceTencentCloudVpnCustomerGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway.update")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - d.Partial(true) - customerGatewayId := d.Id() - request := vpc.NewModifyCustomerGatewayAttributeRequest() - request.CustomerGatewayId = &customerGatewayId - if d.HasChange("name") { - request.CustomerGatewayName = helper.String(d.Get("name").(string)) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyCustomerGatewayAttribute(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 nil - }) - if err != nil { - log.Printf("[CRITAL]%s modify VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - } - - //tag - if d.HasChange("tags") { - oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "cgw", region, customerGatewayId) - err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) - if err != nil { - return err - } - } - d.Partial(false) - - return resourceTencentCloudVpnCustomerGatewayRead(d, meta) -} - -func resourceTencentCloudVpnCustomerGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway.delete")() - - logId := getLogId(contextNil) - - customerGatewayId := d.Id() - - //check the customer gateway is not related with any tunnel - tRequest := vpc.NewDescribeVpnConnectionsRequest() - tRequest.Filters = make([]*vpc.Filter, 0, 1) - params := make(map[string]string) - params["customer-gateway-id"] = customerGatewayId - - for k, v := range params { - filter := &vpc.Filter{ - Name: helper.String(k), - Values: []*string{helper.String(v)}, - } - tRequest.Filters = append(tRequest.Filters, filter) - } - offset := uint64(0) - tRequest.Offset = &offset - - tErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(tRequest) - - if e != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, tRequest.GetAction(), tRequest.ToJsonString(), e.Error()) - return retryError(e) - } else { - if len(result.Response.VpnConnectionSet) == 0 { - return nil - } else { - return resource.NonRetryableError(fmt.Errorf("There is associated tunnel exists, please delete associated tunnels first.")) - } - } - }) - if tErr != nil { - log.Printf("[CRITAL]%s describe VPN connection failed, reason:%s\n", logId, tErr.Error()) - return tErr - } - - request := vpc.NewDeleteCustomerGatewayRequest() - request.CustomerGatewayId = &customerGatewayId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteCustomerGateway(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 nil - }) - if err != nil { - log.Printf("[CRITAL]%s delete VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - //to get the status of customer gateway - statRequest := vpc.NewDescribeCustomerGatewaysRequest() - statRequest.CustomerGatewayIds = []*string{&customerGatewayId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeCustomerGateways(statRequest) - if e != nil { - ee, ok := e.(*errors.TencentCloudSDKError) - if !ok { - return retryError(e) - } - if ee.Code == VPCNotFound { - log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), e.Error()) - return nil - } else { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) - } - } else { - //if not, quit - if len(result.Response.CustomerGatewaySet) == 0 { - return nil - } - //else consider delete fail - return resource.RetryableError(fmt.Errorf("deleting retry")) - } - }) - if err != nil { - log.Printf("[CRITAL]%s delete VPN customer gateway failed, reason:%s\n", logId, err.Error()) - return err - } - return nil -} diff --git a/tencentcloud/resource_tc_vpn_gateway_ccn_routes.go b/tencentcloud/resource_tc_vpn_gateway_ccn_routes.go deleted file mode 100644 index 88e7fb94c1..0000000000 --- a/tencentcloud/resource_tc_vpn_gateway_ccn_routes.go +++ /dev/null @@ -1,154 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "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 resourceTencentCloudVpnGatewayCcnRoutes() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpnGatewayCcnRoutesCreate, - Read: resourceTencentCloudVpnGatewayCcnRoutesRead, - Update: resourceTencentCloudVpnGatewayCcnRoutesUpdate, - Delete: resourceTencentCloudVpnGatewayCcnRoutesDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "vpn_gateway_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "VPN GATEWAY INSTANCE ID.", - }, - "route_id": { - Type: schema.TypeString, - ForceNew: true, - Required: true, - Description: "Route Id.", - }, - "status": { - Type: schema.TypeString, - Required: true, - Description: "Whether routing information is enabled. `ENABLE`: Enable Route, `DISABLE`: Disable Route.", - }, - "destination_cidr_block": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "Routing CIDR.", - }, - }, - } -} - -func resourceTencentCloudVpnGatewayCcnRoutesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.create")() - defer inconsistentCheck(d, meta)() - - var ( - vpnGwId string - routeId string - ) - - if v, ok := d.GetOk("vpn_gateway_id"); ok { - vpnGwId = v.(string) - } - - if v, ok := d.GetOk("route_id"); ok { - routeId = v.(string) - } - - d.SetId(vpnGwId + FILED_SP + routeId) - - return resourceTencentCloudVpnGatewayCcnRoutesUpdate(d, meta) -} - -func resourceTencentCloudVpnGatewayCcnRoutesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - vpnGatewayId := idSplit[0] - routeId := idSplit[1] - - vpnGatewayCcnRoutes, err := service.DescribeVpcVpnGatewayCcnRoutesById(ctx, vpnGatewayId, routeId) - if err != nil { - return err - } - - if vpnGatewayCcnRoutes == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpcVpnGatewayCcnRoutes` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("vpn_gateway_id", vpnGatewayId) - _ = d.Set("route_id", vpnGatewayCcnRoutes.RouteId) - _ = d.Set("status", vpnGatewayCcnRoutes.Status) - _ = d.Set("destination_cidr_block", vpnGatewayCcnRoutes.DestinationCidrBlock) - - return nil -} - -func resourceTencentCloudVpnGatewayCcnRoutesUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.update")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - request := vpc.NewModifyVpnGatewayCcnRoutesRequest() - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - vpnGatewayId := idSplit[0] - routeId := idSplit[1] - - request.VpnGatewayId = &vpnGatewayId - route := vpc.VpngwCcnRoutes{} - route.RouteId = &routeId - route.Status = helper.String(d.Get("status").(string)) - route.DestinationCidrBlock = helper.String(d.Get("destination_cidr_block").(string)) - request.Routes = append(request.Routes, &route) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyVpnGatewayCcnRoutes(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 update vpnGatewayCcnRoutes failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudVpnGatewayCcnRoutesRead(d, meta) -} - -func resourceTencentCloudVpnGatewayCcnRoutesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpn_gateway_ssl_client_cert.go b/tencentcloud/resource_tc_vpn_gateway_ssl_client_cert.go deleted file mode 100644 index 1a0706c4b1..0000000000 --- a/tencentcloud/resource_tc_vpn_gateway_ssl_client_cert.go +++ /dev/null @@ -1,164 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "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 resourceTencentCloudVpnGatewaySslClientCert() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpnGatewaySslClientCertCreate, - Read: resourceTencentCloudVpnGatewaySslClientCertRead, - Update: resourceTencentCloudVpnGatewaySslClientCertUpdate, - Delete: resourceTencentCloudVpnGatewaySslClientCertDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "ssl_vpn_client_id": { - Required: true, - Type: schema.TypeString, - Description: "SSL-VPN-CLIENT Instance ID.", - }, - - "switch": { - Optional: true, - Type: schema.TypeString, - Default: "on", - ValidateFunc: validateAllowedStringValue([]string{"on", "off"}), - Description: "`on`: Enable, `off`: Disable.", - }, - }, - } -} - -func resourceTencentCloudVpnGatewaySslClientCertCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.create")() - defer inconsistentCheck(d, meta)() - - sslVpnClientId := d.Get("ssl_vpn_client_id").(string) - d.SetId(sslVpnClientId) - - return resourceTencentCloudVpnGatewaySslClientCertUpdate(d, meta) -} - -func resourceTencentCloudVpnGatewaySslClientCertRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - sslVpnClientId := d.Id() - - _, vpnGatewaySslClientCert, err := service.DescribeVpnSslClientById(ctx, sslVpnClientId) - if err != nil { - return err - } - - if vpnGatewaySslClientCert == nil { - d.SetId("") - log.Printf("[WARN]%s resource `VpnGatewaySslClientCert` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if vpnGatewaySslClientCert.SslVpnClientId != nil { - _ = d.Set("ssl_vpn_client_id", vpnGatewaySslClientCert.SslVpnClientId) - } - - if vpnGatewaySslClientCert.CertStatus != nil { - if *vpnGatewaySslClientCert.CertStatus == 1 { - _ = d.Set("switch", "on") - } - if *vpnGatewaySslClientCert.CertStatus == 2 { - _ = d.Set("switch", "off") - } - } - - return nil -} - -func resourceTencentCloudVpnGatewaySslClientCertUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.update")() - defer inconsistentCheck(d, meta)() - - var taskId *uint64 - - logId := getLogId(contextNil) - - sslVpnClientId := d.Id() - - certSwitch := d.Get("switch").(string) - - if certSwitch == "on" { - - var ( - request = vpc.NewEnableVpnGatewaySslClientCertRequest() - ) - - request.SslVpnClientId = &sslVpnClientId - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().EnableVpnGatewaySslClientCert(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()) - } - taskId = result.Response.TaskId - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s enable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err) - return err - } - - } else { - - var ( - request = vpc.NewDisableVpnGatewaySslClientCertRequest() - ) - - request.SslVpnClientId = &sslVpnClientId - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DisableVpnGatewaySslClientCert(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()) - } - taskId = result.Response.TaskId - return nil - }) - if err != nil { - log.Printf("[CRITAL]%s disable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err) - return err - } - } - - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := service.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) - if err != nil { - return err - } - - return resourceTencentCloudVpnGatewaySslClientCertRead(d, meta) -} - -func resourceTencentCloudVpnGatewaySslClientCertDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_vpn_ssl_client.go b/tencentcloud/resource_tc_vpn_ssl_client.go deleted file mode 100644 index 5df046ce8f..0000000000 --- a/tencentcloud/resource_tc_vpn_ssl_client.go +++ /dev/null @@ -1,144 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - 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" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" -) - -func resourceTencentCloudVpnSslClient() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudVpnSslClientCreate, - Read: resourceTencentCloudVpnSslClientRead, - Delete: resourceTencentCloudVpnSslClientDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - - Schema: map[string]*schema.Schema{ - "ssl_vpn_server_id": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "VPN ssl server id.", - }, - "ssl_vpn_client_name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - Description: "The name of ssl vpn client to be created.", - }, - }, - } -} - -func resourceTencentCloudVpnSslClientCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_client.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var ( - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - request = vpc.NewCreateVpnGatewaySslClientRequest() - sslVpnServerId string - sslVpnClientName string - ) - - if v, ok := d.GetOk("ssl_vpn_server_id"); ok { - sslVpnServerId = v.(string) - request.SslVpnServerId = helper.String(sslVpnServerId) - } - if v, ok := d.GetOk("ssl_vpn_client_name"); ok { - sslVpnClientName = v.(string) - request.SslVpnClientName = helper.String(sslVpnClientName) - } - - var ( - taskId *uint64 - sslClientId *string - ) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err := vpcService.client.UseVpcClient().CreateVpnGatewaySslClient(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, InternalError) - } - 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 - sslClientId = response.Response.SslVpnClientId - return nil - }); err != nil { - return err - } - - err := vpcService.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) - if err != nil { - return err - } - - d.SetId(*sslClientId) - - return resourceTencentCloudVpnSslClientRead(d, meta) -} - -func resourceTencentCloudVpnSslClientRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_client.read")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - sslClientId := d.Id() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - has, info, e := vpcService.DescribeVpnSslClientById(ctx, sslClientId) - if e != nil { - return retryError(e) - } - if !has { - d.SetId("") - return nil - } - - _ = d.Set("ssl_vpn_server_id", info.SslVpnServerId) - _ = d.Set("ssl_vpn_client_name", info.Name) - return nil - }) - if err != nil { - return err - } - return nil -} - -func resourceTencentCloudVpnSslClientDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_client.delete")() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - sslClientId := d.Id() - - taskId, err := service.DeleteVpnGatewaySslClient(ctx, sslClientId) - if err != nil { - return err - } - - err = service.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) - if err != nil { - return err - } - - return err -} diff --git a/tencentcloud/resource_tc_waf_anti_fake.go b/tencentcloud/resource_tc_waf_anti_fake.go deleted file mode 100644 index 30ac910422..0000000000 --- a/tencentcloud/resource_tc_waf_anti_fake.go +++ /dev/null @@ -1,293 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - "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" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafAntiFake() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafAntiFakeCreate, - Read: resourceTencentCloudWafAntiFakeRead, - Update: resourceTencentCloudWafAntiFakeUpdate, - Delete: resourceTencentCloudWafAntiFakeDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "domain": { - Required: true, - Type: schema.TypeString, - Description: "Domain.", - }, - "name": { - Required: true, - Type: schema.TypeString, - Description: "Name.", - }, - "uri": { - Required: true, - Type: schema.TypeString, - Description: "Uri.", - }, - "status": { - Optional: true, - Type: schema.TypeInt, - Default: ANTI_FAKE_URL_STATUS_1, - ValidateFunc: validateAllowedIntValue(ANTI_FAKE_URL_STATUS), - Description: "status. 0: Turn off rules and log switches, 1: Turn on the rule switch and Turn off the log switch; 2: Turn off the rule switch and turn on the log switch;3: Turn on the log switch.", - }, - "rule_id": { - Computed: true, - Type: schema.TypeInt, - Description: "rule id.", - }, - "protocol": { - Computed: true, - Type: schema.TypeString, - Description: "protocol.", - }, - }, - } -} - -func resourceTencentCloudWafAntiFakeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_fake.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewAddAntiFakeUrlRequest() - response = waf.NewAddAntiFakeUrlResponse() - id string - domain string - ) - - if v, ok := d.GetOk("domain"); ok { - request.Domain = helper.String(v.(string)) - domain = v.(string) - } - - if v, ok := d.GetOk("name"); ok { - request.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("uri"); ok { - request.Uri = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().AddAntiFakeUrl(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()) - } - - response = result - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s create waf antiFake failed, reason:%+v", logId, err) - return err - } - - id = *response.Response.Id - d.SetId(strings.Join([]string{id, domain}, FILED_SP)) - - // set status - if v, ok := d.GetOkExists("status"); ok { - status := v.(int) - if status != API_SAFE_STATUS_1 { - modifyAntiFakeUrlStatusRequest := waf.NewModifyAntiFakeUrlStatusRequest() - idUInt, _ := strconv.ParseUint(id, 10, 64) - modifyAntiFakeUrlStatusRequest.Ids = common.Uint64Ptrs([]uint64{idUInt}) - modifyAntiFakeUrlStatusRequest.Domain = &domain - modifyAntiFakeUrlStatusRequest.Status = helper.IntUint64(v.(int)) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiFakeUrlStatus(modifyAntiFakeUrlStatusRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlStatusRequest.GetAction(), modifyAntiFakeUrlStatusRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update waf antiFake status failed, reason:%+v", logId, err) - return err - } - } - } - - return resourceTencentCloudWafAntiFakeRead(d, meta) -} - -func resourceTencentCloudWafAntiFakeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_fake.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - id := idSplit[0] - domain := idSplit[1] - - antiFake, err := service.DescribeWafAntiFakeById(ctx, id, domain) - if err != nil { - return err - } - - if antiFake == nil { - d.SetId("") - log.Printf("[WARN]%s resource `WafAntiFake` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if antiFake.Domain != nil { - _ = d.Set("domain", antiFake.Domain) - } - - if antiFake.Name != nil { - _ = d.Set("name", antiFake.Name) - } - - if antiFake.Uri != nil { - _ = d.Set("uri", antiFake.Uri) - } - - if antiFake.Status != nil { - _ = d.Set("status", antiFake.Status) - } - - if antiFake.Id != nil { - _ = d.Set("rule_id", antiFake.Id) - } - - if antiFake.Protocol != nil { - _ = d.Set("protocol", antiFake.Protocol) - } - - return nil -} - -func resourceTencentCloudWafAntiFakeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_fake.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - modifyAntiFakeUrlRequest = waf.NewModifyAntiFakeUrlRequest() - modifyAntiFakeUrlStatusRequest = waf.NewModifyAntiFakeUrlStatusRequest() - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - id := idSplit[0] - domain := idSplit[1] - - immutableArgs := []string{"domain"} - - for _, v := range immutableArgs { - if d.HasChange(v) { - return fmt.Errorf("argument `%s` cannot be changed", v) - } - } - - idInt, _ := strconv.ParseInt(id, 10, 64) - modifyAntiFakeUrlRequest.Id = &idInt - modifyAntiFakeUrlRequest.Domain = &domain - - if v, ok := d.GetOk("name"); ok { - modifyAntiFakeUrlRequest.Name = helper.String(v.(string)) - } - - if v, ok := d.GetOk("uri"); ok { - modifyAntiFakeUrlRequest.Uri = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiFakeUrl(modifyAntiFakeUrlRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlRequest.GetAction(), modifyAntiFakeUrlRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update waf antiFake failed, reason:%+v", logId, err) - return err - } - - if d.HasChange("status") { - if v, ok := d.GetOkExists("status"); ok { - modifyAntiFakeUrlStatusRequest.Status = helper.IntUint64(v.(int)) - } - - idUInt, _ := strconv.ParseUint(id, 10, 64) - modifyAntiFakeUrlStatusRequest.Ids = common.Uint64Ptrs([]uint64{idUInt}) - modifyAntiFakeUrlStatusRequest.Domain = &domain - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiFakeUrlStatus(modifyAntiFakeUrlStatusRequest) - if e != nil { - return retryError(e) - } else { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlStatusRequest.GetAction(), modifyAntiFakeUrlStatusRequest.ToJsonString(), result.ToJsonString()) - } - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s update waf antiFake status failed, reason:%+v", logId, err) - return err - } - } - - return resourceTencentCloudWafAntiFakeRead(d, meta) -} - -func resourceTencentCloudWafAntiFakeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_fake.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - id := idSplit[0] - domain := idSplit[1] - - if err := service.DeleteWafAntiFakeById(ctx, id, domain); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_waf_cc_auto_status.go b/tencentcloud/resource_tc_waf_cc_auto_status.go deleted file mode 100644 index da3dd8ca04..0000000000 --- a/tencentcloud/resource_tc_waf_cc_auto_status.go +++ /dev/null @@ -1,150 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafCcAutoStatus() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafCcAutoStatusCreate, - Read: resourceTencentCloudWafCcAutoStatusRead, - Delete: resourceTencentCloudWafCcAutoStatusDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "domain": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Domain.", - }, - "edition": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(EDITION_TYPE), - Description: "Waf edition. clb-waf means clb-waf, sparta-waf means saas-waf.", - }, - "status": { - Computed: true, - Type: schema.TypeInt, - Description: "cc auto status, 1 means open, 0 means close.", - }, - }, - } -} - -func resourceTencentCloudWafCcAutoStatusCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_auto_status.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewUpsertCCAutoStatusRequest() - domain string - edition string - ) - - if v, ok := d.GetOk("domain"); ok { - request.Domain = helper.String(v.(string)) - domain = v.(string) - } - - if v, ok := d.GetOk("edition"); ok { - request.Edition = helper.String(v.(string)) - edition = v.(string) - } - - request.Value = helper.IntInt64(1) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertCCAutoStatus(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 waf CcAutoStatus failed, reason:%+v", logId, err) - return err - } - - d.SetId(strings.Join([]string{domain, edition}, FILED_SP)) - - return resourceTencentCloudWafCcAutoStatusRead(d, meta) -} - -func resourceTencentCloudWafCcAutoStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_auto_status.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - domain := idSplit[0] - edition := idSplit[1] - - CcAutoStatus, err := service.DescribeWafCcAutoStatusById(ctx, domain) - if err != nil { - return err - } - - if CcAutoStatus == nil { - d.SetId("") - log.Printf("[WARN]%s resource `WafCcAutoStatus` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("domain", domain) - _ = d.Set("edition", edition) - - if CcAutoStatus.AutoCCSwitch != nil { - _ = d.Set("status", CcAutoStatus.AutoCCSwitch) - } - - return nil -} - -func resourceTencentCloudWafCcAutoStatusDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_auto_status.delete")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", idSplit) - } - domain := idSplit[0] - edition := idSplit[1] - - if err := service.DeleteWafCcAutoStatusById(ctx, domain, edition); err != nil { - return err - } - - return nil -} diff --git a/tencentcloud/resource_tc_waf_modify_access_period.go b/tencentcloud/resource_tc_waf_modify_access_period.go deleted file mode 100644 index 26c155c20c..0000000000 --- a/tencentcloud/resource_tc_waf_modify_access_period.go +++ /dev/null @@ -1,88 +0,0 @@ -package tencentcloud - -import ( - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafModifyAccessPeriod() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafModifyAccessPeriodCreate, - Read: resourceTencentCloudWafModifyAccessPeriodRead, - Delete: resourceTencentCloudWafModifyAccessPeriodDelete, - - Schema: map[string]*schema.Schema{ - "period": { - Required: true, - ForceNew: true, - Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(1, 180), - Description: "Access log retention period, range is [1, 180].", - }, - "topic_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Log topic, new version does not need to be uploaded.", - }, - }, - } -} - -func resourceTencentCloudWafModifyAccessPeriodCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_modify_access_period.create")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewModifyAccessPeriodRequest() - topicId string - ) - - if v, _ := d.GetOkExists("period"); v != nil { - request.Period = helper.IntInt64(v.(int)) - } - - if v, ok := d.GetOk("topic_id"); ok { - request.TopicId = helper.String(v.(string)) - topicId = v.(string) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAccessPeriod(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 waf ModifyAccessPeriod failed, reason:%+v", logId, err) - return err - } - - d.SetId(topicId) - - return resourceTencentCloudWafModifyAccessPeriodRead(d, meta) -} - -func resourceTencentCloudWafModifyAccessPeriodRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_modify_access_period.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudWafModifyAccessPeriodDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_modify_access_period.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_waf_module_status.go b/tencentcloud/resource_tc_waf_module_status.go deleted file mode 100644 index 4f109a7db4..0000000000 --- a/tencentcloud/resource_tc_waf_module_status.go +++ /dev/null @@ -1,199 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafModuleStatus() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafModuleStatusCreate, - Read: resourceTencentCloudWafModuleStatusRead, - Update: resourceTencentCloudWafModuleStatusUpdate, - Delete: resourceTencentCloudWafModuleStatusDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "domain": { - Required: true, - Type: schema.TypeString, - Description: "Domain.", - }, - "web_security": { - Required: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "WEB security module status, 0:closed, 1:opened.", - }, - "access_control": { - Required: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "ACL module status, 0:closed, 1:opened.", - }, - "cc_protection": { - Required: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "CC module status, 0:closed, 1:opened.", - }, - "api_protection": { - Required: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "API security module status, 0:closed, 1:opened.", - }, - "anti_tamper": { - Optional: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "Anti tamper module status, 0:closed, 1:opened.", - }, - "anti_leakage": { - Optional: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "Anti leakage module status, 0:closed, 1:opened.", - }, - }, - } -} - -func resourceTencentCloudWafModuleStatusCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_module_status.create")() - defer inconsistentCheck(d, meta)() - - var domain string - if v, ok := d.GetOk("domain"); ok { - domain = v.(string) - } - - d.SetId(domain) - - return resourceTencentCloudWafModuleStatusUpdate(d, meta) -} - -func resourceTencentCloudWafModuleStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_module_status.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - domain = d.Id() - ) - - moduleStatus, err := service.DescribeWafModuleStatusById(ctx, domain) - if err != nil { - return err - } - - if moduleStatus == nil { - d.SetId("") - log.Printf("[WARN]%s resource `WafModuleStatus` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("domain", domain) - - if moduleStatus.WebSecurity != nil { - _ = d.Set("web_security", moduleStatus.WebSecurity) - } - - if moduleStatus.AccessControl != nil { - _ = d.Set("access_control", moduleStatus.AccessControl) - } - - if moduleStatus.CcProtection != nil { - _ = d.Set("cc_protection", moduleStatus.CcProtection) - } - - if moduleStatus.ApiProtection != nil { - _ = d.Set("api_protection", moduleStatus.ApiProtection) - } - - if moduleStatus.AntiTamper != nil { - _ = d.Set("anti_tamper", moduleStatus.AntiTamper) - } - - if moduleStatus.AntiLeakage != nil { - _ = d.Set("anti_leakage", moduleStatus.AntiLeakage) - } - - return nil -} - -func resourceTencentCloudWafModuleStatusUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_module_status.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewModifyModuleStatusRequest() - domain = d.Id() - ) - - request.Domain = &domain - - if v, ok := d.GetOkExists("web_security"); ok { - request.WebSecurity = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOkExists("access_control"); ok { - request.AccessControl = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOkExists("cc_protection"); ok { - request.CcProtection = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOkExists("api_protection"); ok { - request.ApiProtection = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOkExists("anti_tamper"); ok { - request.AntiTamper = helper.IntUint64(v.(int)) - } - - if v, ok := d.GetOkExists("anti_leakage"); ok { - request.AntiLeakage = helper.IntUint64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyModuleStatus(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()) - } - - if result == nil { - e = fmt.Errorf("waf moduleStatus version not exists") - return resource.NonRetryableError(e) - } - - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s modify waf moduleStatus failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudWafModuleStatusRead(d, meta) -} - -func resourceTencentCloudWafModuleStatusDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_module_status.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_waf_protection_mode.go b/tencentcloud/resource_tc_waf_protection_mode.go deleted file mode 100644 index 4a59c756b2..0000000000 --- a/tencentcloud/resource_tc_waf_protection_mode.go +++ /dev/null @@ -1,163 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafProtectionMode() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafProtectionModeCreate, - Read: resourceTencentCloudWafProtectionModeRead, - Update: resourceTencentCloudWafProtectionModeUpdate, - Delete: resourceTencentCloudWafProtectionModeDelete, - - Schema: map[string]*schema.Schema{ - "domain": { - Required: true, - Type: schema.TypeString, - Description: "Domain.", - }, - "mode": { - Required: true, - Type: schema.TypeInt, - Description: "Protection status:10: Rule observation; AI off mode, 11: Rule observation; AI observation mode, 12: Rule observation; AI interception mode20: Rule interception; AI off mode, 21: Rule interception; AI observation mode, 22: Rule interception; AI interception mode.", - }, - "edition": { - Optional: true, - Type: schema.TypeString, - Default: "sparta-waf", - ValidateFunc: validateAllowedStringValue([]string{"clb-waf", "sparta-waf"}), - Description: "WAF edition. clb-waf means clb-waf, sparta-waf means saas-waf, default is sparta-waf.", - }, - "type": { - Optional: true, - Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), - Description: "0 is to modify the rule engine status, 1 is to modify the AI status.", - }, - }, - } -} - -func resourceTencentCloudWafProtectionModeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_protection_mode.create")() - defer inconsistentCheck(d, meta)() - - var ( - domain string - edition string - ) - - if v, ok := d.GetOk("domain"); ok { - domain = v.(string) - } - - if v, ok := d.GetOk("edition"); ok { - edition = v.(string) - } - - d.SetId(strings.Join([]string{domain, edition}, FILED_SP)) - - return resourceTencentCloudWafProtectionModeUpdate(d, meta) -} - -func resourceTencentCloudWafProtectionModeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_protection_mode.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - domain := idSplit[0] - edition := idSplit[1] - - protectionInfo, err := service.DescribeSpartaProtectionInfoById(ctx, domain, edition) - if err != nil { - return err - } - - if protectionInfo == nil { - d.SetId("") - log.Printf("[WARN]%s resource `WafProtectionMode` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - _ = d.Set("domain", domain) - _ = d.Set("edition", edition) - - if protectionInfo.Engine != nil { - engineIne, _ := strconv.Atoi(*protectionInfo.Engine) - _ = d.Set("mode", engineIne) - } - - return nil -} - -func resourceTencentCloudWafProtectionModeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_protection_mode.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewModifySpartaProtectionModeRequest() - ) - - idSplit := strings.Split(d.Id(), FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } - domain := idSplit[0] - edition := idSplit[1] - - request.Domain = &domain - request.Edition = &edition - - if v, _ := d.GetOkExists("mode"); v != nil { - request.Mode = helper.IntUint64(v.(int)) - } - - if v, _ := d.GetOkExists("type"); v != nil { - request.Type = helper.IntUint64(v.(int)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifySpartaProtectionMode(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 waf protectionMode failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudWafProtectionModeRead(d, meta) -} - -func resourceTencentCloudWafProtectionModeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_protection_mode.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/resource_tc_waf_web_shell.go b/tencentcloud/resource_tc_waf_web_shell.go deleted file mode 100644 index 97f215779f..0000000000 --- a/tencentcloud/resource_tc_waf_web_shell.go +++ /dev/null @@ -1,129 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudWafWebShell() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudWafWebShellCreate, - Read: resourceTencentCloudWafWebShellRead, - Update: resourceTencentCloudWafWebShellUpdate, - Delete: resourceTencentCloudWafWebShellDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, - Schema: map[string]*schema.Schema{ - "domain": { - Type: schema.TypeString, - Required: true, - Description: "Domain.", - }, - "status": { - Type: schema.TypeInt, - Required: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1, 2}), - Description: "Webshell status, 1: open; 0: closed; 2: log.", - }, - }, - } -} - -func resourceTencentCloudWafWebShellCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_web_shell.create")() - defer inconsistentCheck(d, meta)() - - var domain string - - if v, ok := d.GetOk("domain"); ok { - domain = v.(string) - } - - d.SetId(domain) - - return resourceTencentCloudWafWebShellUpdate(d, meta) -} - -func resourceTencentCloudWafWebShellRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_web_shell.read")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} - domain = d.Id() - ) - - webShell, err := service.DescribeWafWebShellById(ctx, domain) - if err != nil { - return err - } - - if webShell == nil { - d.SetId("") - log.Printf("[WARN]%s resource `WafWebShell` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) - return nil - } - - if webShell.Domain != nil { - _ = d.Set("domain", webShell.Domain) - } - - if webShell.Status != nil { - _ = d.Set("status", webShell.Status) - } - - return nil -} - -func resourceTencentCloudWafWebShellUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_web_shell.update")() - defer inconsistentCheck(d, meta)() - - var ( - logId = getLogId(contextNil) - request = waf.NewModifyWebshellStatusRequest() - domain = d.Id() - ) - - webShellStatus := waf.WebshellStatus{} - webShellStatus.Domain = helper.String(domain) - - if v, ok := d.GetOkExists("status"); ok { - webShellStatus.Status = helper.IntUint64(v.(int)) - } - - request.Webshell = &webShellStatus - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyWebshellStatus(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 update waf webShell failed, reason:%+v", logId, err) - return err - } - - return resourceTencentCloudWafWebShellRead(d, meta) -} - -func resourceTencentCloudWafWebShellDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_web_shell.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/service_tencent_ssl_certificate.go b/tencentcloud/service_tencent_ssl_certificate.go deleted file mode 100644 index 6be7c3f549..0000000000 --- a/tencentcloud/service_tencent_ssl_certificate.go +++ /dev/null @@ -1,1487 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "math" - - ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" - "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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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/service_tencentcloud_as.go b/tencentcloud/service_tencentcloud_as.go deleted file mode 100644 index d130d4dc44..0000000000 --- a/tencentcloud/service_tencentcloud_as.go +++ /dev/null @@ -1,768 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "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" -) - -type AsService struct { - client *connectivity.TencentCloudClient -} - -func (me *AsService) DescribeLaunchConfigurationById(ctx context.Context, configurationId string) (config *as.LaunchConfiguration, has int, errRet error) { - logId := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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*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 := 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 := 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*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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 := 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 := 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/service_tencentcloud_cam.go b/tencentcloud/service_tencentcloud_cam.go deleted file mode 100644 index 6d999fdea3..0000000000 --- a/tencentcloud/service_tencentcloud_cam.go +++ /dev/null @@ -1,1966 +0,0 @@ -package tencentcloud - -import ( - "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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 := 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 = 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 := 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 := 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 := 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 := 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 = 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 = 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 := 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 = 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 = 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_cfs.go b/tencentcloud/service_tencentcloud_cfs.go deleted file mode 100644 index 1bb2a4bca7..0000000000 --- a/tencentcloud/service_tencentcloud_cfs.go +++ /dev/null @@ -1,652 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "reflect" - "sort" - "strings" - - "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" -) - -type CfsService struct { - client *connectivity.TencentCloudClient -} - -func (me *CfsService) DescribeFileSystem(ctx context.Context, fsId, vpcId, subnetId string) (fs []*cfs.FileSystemInfo, errRet error) { - logId := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 := 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 := 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 = 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/service_tencentcloud_clb.go b/tencentcloud/service_tencentcloud_clb.go deleted file mode 100644 index 6de95df4c6..0000000000 --- a/tencentcloud/service_tencentcloud_clb.go +++ /dev/null @@ -1,2321 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - 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" -) - -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, 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, 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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.(*TencentCloudClient).apiV3Conn} - - 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*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(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseClbClient().CreateTargetGroup(request) - if err != nil { - return 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - resp, ok := me.client.UseClbClient().CreateTopic(request) - if ok != nil { - err = ok - return 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(writeRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseClbClient().ModifyTargetGroupAttribute(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseClbClient().RegisterTargetGroupInstances(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseClbClient().DeregisterTargetGroupInstances(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseClbClient().DeleteTargetGroups(request) - if err != nil { - return retryError(err, 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 := 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 := 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 = 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(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 retryError(err, 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 = getLogId(ctx) - targetInfos []*clb.TargetGroupInfo - ) - - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - targetInfos, err = me.DescribeTargetGroups(ctx, ids[0], nil) - if err != nil { - return retryError(err, 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(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 retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseClbClient().ModifyTargetGroupInstancesWeight(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseClbClient().ModifyTargetGroupInstancesPort(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseClbClient().ModifyTargetPort(request) - if err != nil { - return retryError(err, 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseClbClient().ModifyTargetWeight(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }) - - if err != nil { - return err - } - return nil -} - -func (me *ClbService) DescribeClbLogSet(ctx context.Context) (logSetId string, healthId string, errRet error) { - logId := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 := 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 := 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, FILED_SP) - if _, ok := associationsSet[key]; ok { - result = append(result, key) - } - } - } - targetGroupAttachments = result - return -} diff --git a/tencentcloud/service_tencentcloud_cvm.go b/tencentcloud/service_tencentcloud_cvm.go deleted file mode 100644 index 5cb24cefdf..0000000000 --- a/tencentcloud/service_tencentcloud_cvm.go +++ /dev/null @@ -1,1769 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "sort" - "strings" - "sync" - "time" - - "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 := 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 := 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 := 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 := 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 := NewGoRoutine(num + 1) - g := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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*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 := 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 := getLogId(ctx) - request := cvm.NewDescribeImagesRequest() - request.ImageIds = []*string{&keyId} - - var imgRsp *cvm.DescribeImagesResponse - err := resource.Retry(20*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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 := 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 = 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 = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - result, e := me.client.UseCvmClient().ModifyImageSharePermission(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 cvm ModifyImageSharePermission failed, reason:%+v", logId, err) - return err - } - return -} diff --git a/tencentcloud/service_tencentcloud_dasb.go b/tencentcloud/service_tencentcloud_dasb.go deleted file mode 100644 index f0bb5b6ecf..0000000000 --- a/tencentcloud/service_tencentcloud_dasb.go +++ /dev/null @@ -1,636 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - "strconv" - "strings" - - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - dasb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dasb/v20191018" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type DasbService struct { - client *connectivity.TencentCloudClient -} - -func (me *DasbService) DescribeDasbAclById(ctx context.Context, aclId string) (acl *dasb.Acl, errRet error) { - logId := getLogId(ctx) - request := dasb.NewDescribeAclsRequest() - aclIdInt, _ := strconv.ParseUint(aclId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{aclIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeAcls(request) - if err != nil { - errRet = err - return - } - - 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.AclSet) != 1 { - return - } - - acl = response.Response.AclSet[0] - return -} - -func (me *DasbService) DeleteDasbAclById(ctx context.Context, aclId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteAclsRequest() - aclIdInt, _ := strconv.ParseUint(aclId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{aclIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteAcls(request) - if err != nil { - 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 *DasbService) DescribeDasbCmdTemplateById(ctx context.Context, templateId string) (CmdTemplate *dasb.CmdTemplate, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeCmdTemplatesRequest() - templateIdInt, _ := strconv.ParseUint(templateId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{templateIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeCmdTemplates(request) - if err != nil { - errRet = err - return - } - - 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.CmdTemplateSet) != 1 { - return - } - - CmdTemplate = response.Response.CmdTemplateSet[0] - return -} - -func (me *DasbService) DeleteDasbCmdTemplateById(ctx context.Context, templateId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteCmdTemplatesRequest() - templateIdInt, _ := strconv.ParseUint(templateId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{templateIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteCmdTemplates(request) - if err != nil { - 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 *DasbService) DescribeDasbDeviceGroupById(ctx context.Context, deviceGroupId string) (DeviceGroup *dasb.Group, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeDeviceGroupsRequest() - deviceGroupIdInt, _ := strconv.ParseUint(deviceGroupId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceGroupIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeDeviceGroups(request) - if err != nil { - errRet = err - return - } - 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.GroupSet) != 1 { - return - } - - DeviceGroup = response.Response.GroupSet[0] - return -} - -func (me *DasbService) DeleteDasbDeviceGroupById(ctx context.Context, deviceGroupId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteDeviceGroupsRequest() - deviceGroupIdInt, _ := strconv.ParseUint(deviceGroupId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceGroupIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteDeviceGroups(request) - if err != nil { - 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 *DasbService) DescribeDasbUserById(ctx context.Context, userId string) (user *dasb.User, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeUsersRequest() - userIdInt, _ := strconv.ParseUint(userId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{userIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeUsers(request) - if err != nil { - errRet = err - return - } - - 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.UserSet) != 1 { - return - } - - user = response.Response.UserSet[0] - return -} - -func (me *DasbService) DeleteDasbUserById(ctx context.Context, userId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteUsersRequest() - userIdInt, _ := strconv.ParseUint(userId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{userIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteUsers(request) - if err != nil { - 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 *DasbService) DescribeDasbDeviceAccountById(ctx context.Context, deviceAccountId string) (DeviceAccount *dasb.DeviceAccount, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeDeviceAccountsRequest() - deviceAccountIdInt, _ := strconv.ParseUint(deviceAccountId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceAccountIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeDeviceAccounts(request) - if err != nil { - errRet = err - return - } - - 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.DeviceAccountSet) != 1 { - return - } - - DeviceAccount = response.Response.DeviceAccountSet[0] - return -} - -func (me *DasbService) DeleteDasbDeviceAccountById(ctx context.Context, deviceAccountId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteDeviceAccountsRequest() - deviceAccountIdInt, _ := strconv.ParseUint(deviceAccountId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceAccountIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteDeviceAccounts(request) - if err != nil { - 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 *DasbService) DescribeDasbDeviceGroupMembersById(ctx context.Context, deviceGroupId string) (DeviceGroupMembers []uint64, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeDeviceGroupMembersRequest() - deviceGroupIdInt, _ := strconv.ParseUint(deviceGroupId, 10, 64) - request.Id = &deviceGroupIdInt - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeDeviceGroupMembers(request) - if err != nil { - errRet = err - return - } - - 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.DeviceSet) < 1 { - return - } - - for _, item := range response.Response.DeviceSet { - if item.Id != nil { - DeviceGroupMembers = append(DeviceGroupMembers, *item.Id) - } - } - - return -} - -func (me *DasbService) DeleteDasbDeviceGroupMembersById(ctx context.Context, deviceGroupId, memberIdSetStr string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteDeviceGroupMembersRequest() - deviceGroupIdInt, _ := strconv.ParseUint(deviceGroupId, 10, 64) - request.Id = &deviceGroupIdInt - memberIdSet := strings.Split(memberIdSetStr, COMMA_SP) - tmpList := make([]*uint64, 0) - for _, item := range memberIdSet { - itemInt, _ := strconv.ParseUint(item, 10, 64) - tmpList = append(tmpList, &itemInt) - } - - request.MemberIdSet = tmpList - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteDeviceGroupMembers(request) - if err != nil { - 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 *DasbService) DescribeDasbUserGroupMembersById(ctx context.Context, userGroupId string) (UserGroupMembers []uint64, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeUserGroupMembersRequest() - userGroupIdInt, _ := strconv.ParseUint(userGroupId, 10, 64) - request.Id = &userGroupIdInt - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeUserGroupMembers(request) - if err != nil { - errRet = err - return - } - - 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.UserSet) < 1 { - return - } - - for _, item := range response.Response.UserSet { - if item.Id != nil { - UserGroupMembers = append(UserGroupMembers, *item.Id) - } - } - - return -} - -func (me *DasbService) DeleteDasbUserGroupMembersById(ctx context.Context, userGroupId, memberIdSetStr string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteUserGroupMembersRequest() - userGroupIdInt, _ := strconv.ParseUint(userGroupId, 10, 64) - request.Id = &userGroupIdInt - memberIdSet := strings.Split(memberIdSetStr, COMMA_SP) - tmpList := make([]*uint64, 0) - for _, item := range memberIdSet { - itemInt, _ := strconv.ParseUint(item, 10, 64) - tmpList = append(tmpList, &itemInt) - } - - request.MemberIdSet = tmpList - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteUserGroupMembers(request) - if err != nil { - 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 *DasbService) DescribeDasbResourceById(ctx context.Context, resourceId string) (Resource *dasb.Resource, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeResourcesRequest() - request.ResourceIds = common.StringPtrs([]string{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.UseDasbClient().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.ResourceSet) != 1 { - return - } - - Resource = response.Response.ResourceSet[0] - return -} - -func (me *DasbService) DescribeDasbDeviceById(ctx context.Context, deviceId string) (device *dasb.Device, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeDevicesRequest() - deviceIdInt, _ := strconv.ParseUint(deviceId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeDevices(request) - if err != nil { - errRet = err - return - } - - 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.DeviceSet) != 1 { - return - } - - device = response.Response.DeviceSet[0] - return -} - -func (me *DasbService) DeleteDasbDeviceById(ctx context.Context, deviceId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteDevicesRequest() - deviceIdInt, _ := strconv.ParseUint(deviceId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DeleteDevices(request) - if err != nil { - 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 *DasbService) DescribeDasbUserGroupById(ctx context.Context, userGroupId string) (UserGroup *dasb.Group, errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDescribeUserGroupsRequest() - userGroupIdInt, _ := strconv.ParseUint(userGroupId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{userGroupIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().DescribeUserGroups(request) - if err != nil { - errRet = err - return - } - - 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.GroupSet) != 1 { - return - } - - UserGroup = response.Response.GroupSet[0] - return -} - -func (me *DasbService) DeleteDasbUserGroupById(ctx context.Context, userGroupId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewDeleteUserGroupsRequest() - userGroupIdInt, _ := strconv.ParseUint(userGroupId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{userGroupIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().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 *DasbService) DeleteDasbBindDeviceAccountPrivateKeyById(ctx context.Context, deviceAccountId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewResetDeviceAccountPrivateKeyRequest() - deviceAccountIdInt, _ := strconv.ParseUint(deviceAccountId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceAccountIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().ResetDeviceAccountPrivateKey(request) - if err != nil { - 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 *DasbService) DeleteDasbBindDeviceAccountPasswordById(ctx context.Context, deviceAccountId string) (errRet error) { - logId := getLogId(ctx) - - request := dasb.NewResetDeviceAccountPasswordRequest() - deviceAccountIdInt, _ := strconv.ParseUint(deviceAccountId, 10, 64) - request.IdSet = common.Uint64Ptrs([]uint64{deviceAccountIdInt}) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseDasbClient().ResetDeviceAccountPassword(request) - if err != nil { - 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_monitor.go b/tencentcloud/service_tencentcloud_monitor.go deleted file mode 100644 index 512d5df550..0000000000 --- a/tencentcloud/service_tencentcloud_monitor.go +++ /dev/null @@ -1,2480 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - "time" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" - monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" - "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" - "gopkg.in/yaml.v2" -) - -type MonitorService struct { - client *connectivity.TencentCloudClient -} - -func (me *MonitorService) CheckCanCreateMysqlROInstance(ctx context.Context, mysqlId string) (can bool, errRet error) { - - logId := getLogId(ctx) - - loc, err := time.LoadLocation("Asia/Chongqing") - if err != nil { - errRet = fmt.Errorf("Can not load time zone `Asia/Chongqing`, reason %s", err.Error()) - return - } - - request := monitor.NewGetMonitorDataRequest() - - request.Namespace = helper.String("QCE/CDB") - request.MetricName = helper.String("RealCapacity") - request.Period = helper.Uint64(60) - - now := time.Now() - request.StartTime = helper.String(now.Add(-5 * time.Minute).In(loc).Format("2006-01-02T15:04:05+08:00")) - request.EndTime = helper.String(now.In(loc).Format("2006-01-02T15:04:05+08:00")) - - request.Instances = []*monitor.Instance{ - { - Dimensions: []*monitor.Dimension{{ - Name: helper.String("InstanceId"), - Value: &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.UseMonitorClient().GetMonitorData(request) - if err != nil { - errRet = err - return - } - - if len(response.Response.DataPoints) == 0 { - return - } - dataPoint := response.Response.DataPoints[0] - if len(dataPoint.Values) == 0 { - return - } - can = true - return -} - -func (me *MonitorService) FullRegions() (regions []string, errRet error) { - request := cvm.NewDescribeRegionsRequest() - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - if response, err := me.client.UseCvmClient().DescribeRegions(request); err != nil { - return retryError(err, InternalError) - } else { - for _, region := range response.Response.RegionSet { - regions = append(regions, *region.Region) - } - } - return nil - }); err != nil { - errRet = err - return - } - return -} - -func (me *MonitorService) DescribePolicyGroupDetailInfo(ctx context.Context, groupId int64) (response *monitor.DescribePolicyGroupInfoResponse, errRet error) { - - var ( - request = monitor.NewDescribePolicyGroupInfoRequest() - err error - ) - request.GroupId = &groupId - request.Module = helper.String("monitor") - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - if response, err = me.client.UseMonitorClient().DescribePolicyGroupInfo(request); err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - errRet = err - return - } - return -} - -func (me *MonitorService) DescribeAlarmPolicyById(ctx context.Context, policyId string) (info *monitor.AlarmPolicy, errRet error) { - - var ( - request = monitor.NewDescribeAlarmPolicyRequest() - ) - logId := getLogId(ctx) - request.Module = helper.String("monitor") - request.PolicyId = &policyId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribeAlarmPolicy(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.Response.Policy == nil { - return - } - info = response.Response.Policy - return -} - -func (me *MonitorService) DescribeAlarmNoticeById(ctx context.Context, alarmmap map[string]interface{}) (noticeIds []*monitor.AlarmNotice, errRet error) { - var ( - request = monitor.NewDescribeAlarmNoticesRequest() - response *monitor.DescribeAlarmNoticesResponse - err error - ) - request.Module = helper.String("monitor") - request.PageNumber = helper.IntInt64(1) - request.PageSize = helper.IntInt64(200) - request.Order = alarmmap["order"].(*string) - if v, ok := alarmmap["ownerUid"]; ok { - request.OwnerUid = v.(*int64) - } - if v, ok := alarmmap["name"]; ok { - request.Name = v.(*string) - } - if v, ok := alarmmap["receiver_type"]; ok { - request.ReceiverType = v.(*string) - } - - if v, ok := alarmmap["userIdArr"]; ok { - request.UserIds = v.([]*int64) - } - if v, ok := alarmmap["groupArr"]; ok { - request.GroupIds = v.([]*int64) - } - if v, ok := alarmmap["noticeArr"]; ok { - request.NoticeIds = v.([]*string) - } - - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - if response, err = me.client.UseMonitorClient().DescribeAlarmNotices(request); err != nil { - return retryError(err, InternalError) - } - noticeIds = response.Response.Notices - return nil - }); err != nil { - return - } - return -} - -func (me *MonitorService) DescribePolicyGroup(ctx context.Context, groupId int64) (info *monitor.DescribePolicyGroupListGroup, errRet error) { - - var ( - request = monitor.NewDescribePolicyGroupListRequest() - offset int64 = 0 - limit int64 = 20 - finish bool - ) - request.Module = helper.String("monitor") - request.Offset = &offset - request.Limit = &limit - - for { - if finish { - break - } - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePolicyGroupList(request) - if err != nil { - return retryError(err, InternalError) - } - if len(response.Response.GroupList) < int(limit) { - finish = true - } - for _, v := range response.Response.GroupList { - if *v.GroupId == groupId { - info = v - return nil - } - } - return nil - }); err != nil { - errRet = err - return - } - if info != nil { - return - } - offset = offset + limit - } - return -} - -func (me *MonitorService) DescribeBindingPolicyObjectList(ctx context.Context, groupId int64) (objects []*monitor.DescribeBindingPolicyObjectListInstance, errRet error) { - - var ( - requestList = monitor.NewDescribeBindingPolicyObjectListRequest() - responseList *monitor.DescribeBindingPolicyObjectListResponse - offset int64 = 0 - limit int64 = 100 - finish bool - err error - ) - - requestList.GroupId = &groupId - requestList.Module = helper.String("monitor") - requestList.Offset = &offset - requestList.Limit = &limit - - for { - if finish { - break - } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(requestList.GetAction()) - if responseList, err = me.client.UseMonitorClient().DescribeBindingPolicyObjectList(requestList); err != nil { - return retryError(err, InternalError) - } - objects = append(objects, responseList.Response.List...) - if len(responseList.Response.List) < int(limit) { - finish = true - } - return nil - }); err != nil { - errRet = err - return - } - offset = offset + limit - } - - return -} - -func (me *MonitorService) DescribeBindingAlarmPolicyObjectList(ctx context.Context, policyId string) ( - objects []*monitor.DescribeBindingPolicyObjectListInstance, errRet error) { - - var ( - requestList = monitor.NewDescribeBindingPolicyObjectListRequest() - responseList *monitor.DescribeBindingPolicyObjectListResponse - offset int64 = 0 - limit int64 = 100 - finish bool - err error - ) - requestList.GroupId = helper.Int64(0) - requestList.PolicyId = &policyId - requestList.Module = helper.String("monitor") - requestList.Offset = &offset - requestList.Limit = &limit - - for { - if finish { - break - } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(requestList.GetAction()) - if responseList, err = me.client.UseMonitorClient().DescribeBindingPolicyObjectList(requestList); err != nil { - return retryError(err, InternalError) - } - objects = append(objects, responseList.Response.List...) - if len(responseList.Response.List) < int(limit) { - finish = true - } - return nil - }); err != nil { - errRet = err - return - } - offset = offset + limit - } - - return -} - -// DescribeMonitorTmpInstance tmp -func (me *MonitorService) DescribeMonitorTmpInstance(ctx context.Context, tmpInstanceId string) (tmpInstance *monitor.PrometheusInstancesItem, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusInstancesRequest() - ) - - 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.InstanceIds = []*string{&tmpInstanceId} - - var ( - offset int64 = 0 - limit int64 = 20 - ) - instances := make([]*monitor.PrometheusInstancesItem, 0) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseMonitorClient().DescribePrometheusInstances(request) - if err != nil { - errRet = err - return - } - 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(limit) { - break - } - - offset += limit - } - - if len(instances) < 1 { - return - } - tmpInstance = instances[0] - return -} - -func (me *MonitorService) IsolateMonitorTmpInstanceById(ctx context.Context, tmpInstanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewTerminatePrometheusInstancesRequest() - request.InstanceIds = []*string{&tmpInstanceId} - - 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.UseMonitorClient().TerminatePrometheusInstances(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 *MonitorService) DeleteMonitorTmpInstanceById(ctx context.Context, tmpInstanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDestroyPrometheusInstanceRequest() - request.InstanceId = &tmpInstanceId - - 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.UseMonitorClient().DestroyPrometheusInstance(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 *MonitorService) DescribeMonitorTmpCvmAgent(ctx context.Context, instanceId string, tmpCvmAgentId string) (tmpCvmAgent *monitor.PrometheusAgent, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusAgentsRequest() - ) - - 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.InstanceId = &instanceId - request.AgentIds = []*string{&tmpCvmAgentId} - - response, err := me.client.UseMonitorClient().DescribePrometheusAgents(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.AgentSet) < 1 { - return - } - tmpCvmAgent = response.Response.AgentSet[0] - return -} - -func (me *MonitorService) DescribeMonitorTmpScrapeJob(ctx context.Context, tmpScrapeJobId string) (tmpScrapeJob *monitor.PrometheusScrapeJob, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusScrapeJobsRequest() - ) - - 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()) - } - }() - - ids := strings.Split(tmpScrapeJobId, FILED_SP) - - request.JobIds = []*string{&ids[0]} - request.InstanceId = &ids[1] - request.AgentId = &ids[2] - - response, err := me.client.UseMonitorClient().DescribePrometheusScrapeJobs(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.ScrapeJobSet) < 1 { - return - } - tmpScrapeJob = response.Response.ScrapeJobSet[0] - return -} - -func (me *MonitorService) DeleteMonitorTmpScrapeJobById(ctx context.Context, tmpScrapeJobId string) (errRet error) { - logId := getLogId(ctx) - - ids := strings.Split(tmpScrapeJobId, FILED_SP) - request := monitor.NewDeletePrometheusScrapeJobsRequest() - request.JobIds = []*string{&ids[0]} - request.InstanceId = &ids[1] - request.AgentId = &ids[2] - - 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.UseMonitorClient().DeletePrometheusScrapeJobs(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 *MonitorService) DeleteMonitorAlarmNoticeById(ctx context.Context, Id string) (errRet error) { - request := monitor.NewDeleteAlarmNoticesRequest() - request.Module = helper.String("monitor") - noticeId := Id - var n = []*string{¬iceId} - request.NoticeIds = n - - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseMonitorClient().DeleteAlarmNotices(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - return err - } - return -} - -func (me *MonitorService) DescribeMonitorTmpExporterIntegration(ctx context.Context, tmpExporterIntegrationId string) (tmpExporterIntegration *monitor.IntegrationConfiguration, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeExporterIntegrationsRequest() - ) - - 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()) - } - }() - - ids := strings.Split(tmpExporterIntegrationId, FILED_SP) - if ids[0] != "" { - request.Name = &ids[0] - } - request.InstanceId = &ids[1] - kubeType, _ := strconv.Atoi(ids[2]) - request.KubeType = helper.IntInt64(kubeType) - request.ClusterId = &ids[3] - request.Kind = &ids[4] - - response, err := me.client.UseMonitorClient().DescribeExporterIntegrations(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.IntegrationSet) < 1 { - return - } - tmpExporterIntegration = response.Response.IntegrationSet[0] - return -} - -func (me *MonitorService) DeleteMonitorTmpExporterIntegrationById(ctx context.Context, tmpExporterIntegrationId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteExporterIntegrationRequest() - ids := strings.Split(tmpExporterIntegrationId, FILED_SP) - - request.Name = &ids[0] - request.InstanceId = &ids[1] - kubeType, _ := strconv.Atoi(ids[2]) - request.KubeType = helper.IntInt64(kubeType) - request.ClusterId = &ids[3] - request.Kind = &ids[4] - - 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.UseMonitorClient().DeleteExporterIntegration(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 *MonitorService) DescribeMonitorTmpAlertRuleById(ctx context.Context, instanceId string, tmpAlertRuleId string) (instance *monitor.PrometheusRuleSet, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAlertRulesRequest() - ) - - 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.InstanceId = &instanceId - request.RuleId = &tmpAlertRuleId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribeAlertRules(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.AlertRuleSet) < 1 { - return - } - instance = response.Response.AlertRuleSet[0] - - return -} - -func (me *MonitorService) DeleteMonitorTmpAlertRule(ctx context.Context, instanceId string, ruleId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteAlertRulesRequest() - request.InstanceId = &instanceId - request.RuleIds = []*string{&ruleId} - - 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.UseMonitorClient().DeleteAlertRules(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 *MonitorService) DescribeMonitorRecordingRuleById(ctx context.Context, instanceId string, recordingRuleId string) (instance *monitor.RecordingRuleSet, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeRecordingRulesRequest() - ) - - 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.InstanceId = &instanceId - request.RuleId = &recordingRuleId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribeRecordingRules(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.RecordingRuleSet) < 1 { - return - } - instance = response.Response.RecordingRuleSet[0] - - return -} - -func (me *MonitorService) DeleteMonitorRecordingRule(ctx context.Context, instanceId string, recordingRuleId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteRecordingRulesRequest() - request.InstanceId = &instanceId - request.RuleIds = []*string{&recordingRuleId} - - 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.UseMonitorClient().DeleteRecordingRules(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 *MonitorService) DescribeMonitorGrafanaInstance(ctx context.Context, instanceId string) (grafanaInstance *monitor.GrafanaInstanceInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeGrafanaInstancesRequest() - ) - - 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.InstanceIds = []*string{&instanceId} - request.Offset = helper.IntInt64(0) - request.Limit = helper.IntInt64(10) - - response, err := me.client.UseMonitorClient().DescribeGrafanaInstances(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.Instances) < 1 { - return - } - grafanaInstance = response.Response.Instances[0] - - return -} - -func (me *MonitorService) DeleteMonitorGrafanaInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteGrafanaInstanceRequest() - - request.InstanceIDs = []*string{&instanceId} - - 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.UseMonitorClient().DeleteGrafanaInstance(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 *MonitorService) CleanGrafanaInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewCleanGrafanaInstanceRequest() - - request.InstanceId = &instanceId - - 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.UseMonitorClient().CleanGrafanaInstance(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 *MonitorService) DescribeMonitorGrafanaIntegration(ctx context.Context, integrationId, instanceId string) (grafanaIntegration *monitor.GrafanaIntegrationConfig, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeGrafanaIntegrationsRequest() - ) - - 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.IntegrationId = &integrationId - request.InstanceId = &instanceId - - response, err := me.client.UseMonitorClient().DescribeGrafanaIntegrations(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.IntegrationSet) < 1 { - return - } - grafanaIntegration = response.Response.IntegrationSet[0] - return -} - -func (me *MonitorService) DeleteMonitorGrafanaIntegrationById(ctx context.Context, integrationId, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteGrafanaIntegrationRequest() - - request.IntegrationId = &integrationId - request.InstanceId = &instanceId - - 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.UseMonitorClient().DeleteGrafanaIntegration(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 *MonitorService) DescribeMonitorGrafanaNotificationChannel(ctx context.Context, channelId, instanceId string) (grafanaNotificationChannel *monitor.GrafanaChannel, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeGrafanaChannelsRequest() - ) - - 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.Offset = helper.IntInt64(0) - request.Limit = helper.IntInt64(10) - request.ChannelIds = []*string{&channelId} - request.InstanceId = &instanceId - - response, err := me.client.UseMonitorClient().DescribeGrafanaChannels(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.NotificationChannelSet) < 1 { - return - } - grafanaNotificationChannel = response.Response.NotificationChannelSet[0] - return -} - -func (me *MonitorService) DeleteMonitorGrafanaNotificationChannelById(ctx context.Context, channelId, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteGrafanaNotificationChannelRequest() - - request.ChannelIDs = []*string{&channelId} - request.InstanceId = &instanceId - - 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.UseMonitorClient().DeleteGrafanaNotificationChannel(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 *MonitorService) DescribeMonitorSsoAccount(ctx context.Context, instanceId, userId string) (ssoAccount *monitor.GrafanaAccountInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeSSOAccountRequest() - ) - - 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.InstanceId = &instanceId - request.UserId = &userId - - response, err := me.client.UseMonitorClient().DescribeSSOAccount(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()) - - for _, v := range response.Response.AccountSet { - if *v.UserId == userId { - ssoAccount = v - return - } - } - - return -} - -func (me *MonitorService) DeleteMonitorSsoAccountById(ctx context.Context, instanceId, userId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeleteSSOAccountRequest() - - request.InstanceId = &instanceId - request.UserId = &userId - - 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.UseMonitorClient().DeleteSSOAccount(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 *MonitorService) DescribeMonitorGrafanaPlugin(ctx context.Context, instanceId, pluginId string) (grafanaPlugin *monitor.GrafanaPlugin, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeInstalledPluginsRequest() - response *monitor.DescribeInstalledPluginsResponse - ) - - 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.InstanceId = &instanceId - request.PluginId = &pluginId - - response, err := me.client.UseMonitorClient().DescribeInstalledPlugins(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 - } - - for _, v := range response.Response.PluginSet { - if *v.PluginId == pluginId { - grafanaPlugin = v - return - } - } - return -} - -func (me *MonitorService) DeleteMonitorGrafanaPluginById(ctx context.Context, instanceId, pluginId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewUninstallGrafanaPluginsRequest() - - request.InstanceId = &instanceId - request.PluginIds = []*string{&pluginId} - - 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.UseMonitorClient().UninstallGrafanaPlugins(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 *MonitorService) DescribeTkeTmpAlertPolicy(ctx context.Context, instanceId, tmpAlertPolicyId string) (tmpAlertPolicy *monitor.PrometheusAlertPolicyItem, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusAlertPolicyRequest() - ) - - 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.InstanceId = &instanceId - request.Filters = append(request.Filters, &monitor.Filter{ - Name: helper.String("ID"), - Values: []*string{&tmpAlertPolicyId}, - }) - - response, err := me.client.UseMonitorClient().DescribePrometheusAlertPolicy(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.AlertRules) < 1 { - return - } - tmpAlertPolicy = response.Response.AlertRules[0] - return -} - -func (me *MonitorService) DeleteTkeTmpAlertPolicyById(ctx context.Context, instanceId, tmpAlertPolicyId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeletePrometheusAlertPolicyRequest() - request.InstanceId = &instanceId - request.AlertIds = []*string{&tmpAlertPolicyId} - - 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.UseMonitorClient().DeletePrometheusAlertPolicy(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 *MonitorService) DescribeTmpTkeClusterAgentsById(ctx context.Context, instanceId, clusterId, clusterType string) (agents *monitor.PrometheusAgentOverview, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusClusterAgentsRequest() - ) - - 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.InstanceId = &instanceId - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 100 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePrometheusClusterAgents(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.Agents) < 1 { - break - } - for _, v := range response.Response.Agents { - if *v.ClusterId == clusterId && *v.ClusterType == clusterType { - return v, nil - } - } - if len(response.Response.Agents) < int(pageSize) { - break - } - offset += pageSize - } - - return -} - -func (me *MonitorService) DeletePrometheusClusterAgent(ctx context.Context, instanceId, clusterId, clusterType string) (errRet error) { - logId := getLogId(ctx) - request := monitor.NewDeletePrometheusClusterAgentRequest() - - defer 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.Agents = append(request.Agents, &monitor.PrometheusAgentInfo{ - ClusterId: &clusterId, - ClusterType: &clusterType, - }) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DeletePrometheusClusterAgent(request) - if err != nil { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - 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 *MonitorService) DescribeTkeTmpConfigById(ctx context.Context, configId string) (respParams *monitor.DescribePrometheusConfigResponseParams, errRet error) { - logId := getLogId(ctx) - request := monitor.NewDescribePrometheusConfigRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, ids [%s], request body [%s], reason[%s]\n", - logId, "query object", configId, request.ToJsonString(), errRet.Error()) - } - }() - - ids, err := me.parseConfigId(configId) - if err != nil { - errRet = err - return - } - - request.ClusterId = &ids.ClusterId - request.ClusterType = &ids.ClusterType - request.InstanceId = &ids.InstanceId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePrometheusConfig(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail,ids [%s], request body [%s], reason[%s]\n", - logId, request.GetAction(), configId, request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success,ids [%s], request body [%s], response body [%s]\n", - logId, request.GetAction(), configId, request.ToJsonString(), response.ToJsonString()) - - if response == nil || response.Response.RequestId == nil { - return nil, fmt.Errorf("response is invalid,%s", response.ToJsonString()) - } - - respParams = response.Response - return -} - -func (me *MonitorService) DeleteTkeTmpConfigByName(ctx context.Context, configId string, ServiceMonitors []*string, PodMonitors []*string, RawJobs []*string) (errRet error) { - logId := getLogId(ctx) - request := monitor.NewDeletePrometheusConfigRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,ids [%s], request body [%s], reason[%s]\n", - logId, "delete object", configId, request.ToJsonString(), errRet.Error()) - } - }() - - ids, err := me.parseConfigId(configId) - if err != nil { - errRet = err - return - } - - request.ClusterId = &ids.ClusterId - request.ClusterType = &ids.ClusterType - request.InstanceId = &ids.InstanceId - - if len(ServiceMonitors) > 0 { - request.ServiceMonitors = ServiceMonitors - } - - if len(PodMonitors) > 0 { - request.PodMonitors = PodMonitors - } - - if len(RawJobs) > 0 { - request.RawJobs = RawJobs - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DeletePrometheusConfig(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, ids [%s], request body [%s], response body [%s]\n", - logId, request.GetAction(), configId, request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *MonitorService) parseConfigId(configId string) (ret *PrometheusConfigIds, err error) { - idSplit := strings.Split(configId, FILED_SP) - if len(idSplit) != 3 { - return nil, fmt.Errorf("id is broken,%s", configId) - } - - instanceId := idSplit[0] - clusterType := idSplit[1] - clusterId := idSplit[2] - if instanceId == "" || clusterType == "" || clusterId == "" { - return nil, fmt.Errorf("id is broken,%s", configId) - } - - ret = &PrometheusConfigIds{instanceId, clusterType, clusterId} - return -} - -func (me *MonitorService) DescribeTmpTkeTemplateById(ctx context.Context, templateId string) (template *monitor.PrometheusTemp, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusTempRequest() - ) - - 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, - &monitor.Filter{ - Name: helper.String("ID"), - Values: []*string{&templateId}, - }, - ) - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 100 - instances := make([]*monitor.PrometheusTemp, 0) - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePrometheusTemp(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.Templates) < 1 { - break - } - instances = append(instances, response.Response.Templates...) - if len(response.Response.Templates) < int(pageSize) { - break - } - offset += pageSize - } - - if len(instances) < 1 { - return - } - - for _, v := range instances { - if *v.TemplateId == templateId { - template = v - return - } - } - - return -} - -func (me *MonitorService) DeleteTmpTkeTemplate(ctx context.Context, tempId string) (errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDeletePrometheusTempRequest() - request.TemplateId = &tempId - - 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.UseMonitorClient().DeletePrometheusTemp(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 *MonitorService) DeletePrometheusRecordRuleYaml(ctx context.Context, id, name string) (errRet error) { - logId := getLogId(ctx) - request := monitor.NewDeletePrometheusRecordRuleYamlRequest() - - defer 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 = &id - request.Names = []*string{&name} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DeletePrometheusRecordRuleYaml(request) - if err != nil { - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - 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 *MonitorService) DescribePrometheusRecordRuleByName(ctx context.Context, id, name string) ( - ret *monitor.DescribePrometheusRecordRulesResponse, errRet error) { - - logId := getLogId(ctx) - request := monitor.NewDescribePrometheusRecordRulesRequest() - - defer 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 = &id - if name != "" { - request.Filters = []*monitor.Filter{ - { - Name: helper.String("Name"), - Values: []*string{&name}, - }, - } - } - - response, err := me.client.UseMonitorClient().DescribePrometheusRecordRules(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - - return response, nil -} - -func (me *MonitorService) DescribeTkeTmpGlobalNotification(ctx context.Context, instanceId string) (tmpNotification *monitor.PrometheusNotificationItem, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusGlobalNotificationRequest() - ) - - 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.InstanceId = &instanceId - - response, err := me.client.UseMonitorClient().DescribePrometheusGlobalNotification(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.Notification != nil && response.Response.RequestId != nil { - tmpNotification = response.Response.Notification - return - } - - return -} - -func (me *MonitorService) ModifyTkeTmpGlobalNotification(ctx context.Context, instanceId string, notification monitor.PrometheusNotificationItem) (response *monitor.ModifyPrometheusGlobalNotificationResponse, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewModifyPrometheusGlobalNotificationRequest() - request.InstanceId = &instanceId - request.Notification = ¬ification - - 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.UseMonitorClient().ModifyPrometheusGlobalNotification(request) - if err != nil { - errRet = err - return nil, 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 *MonitorService) DescribePrometheusTempSync(ctx context.Context, templateId string) (targets []*monitor.PrometheusTemplateSyncTarget, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusTempSyncRequest() - ) - - 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.TemplateId = &templateId - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribePrometheusTempSync(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,ids [%s], request body [%s], response body [%s]\n", - logId, request.GetAction(), templateId, request.ToJsonString(), response.ToJsonString()) - - if response == nil || response.Response.RequestId == nil { - return nil, fmt.Errorf("response is invalid, %s", response.ToJsonString()) - } - - if len(response.Response.Targets) < 1 { - return - } - - targets = response.Response.Targets - - return -} - -func (me *MonitorService) DescribeMonitorManageGrafanaAttachmentById(ctx context.Context, instanceId string) (manageGrafanaAttachment *monitor.PrometheusInstancesItem, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDescribePrometheusInstancesRequest() - 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.UseMonitorClient().DescribePrometheusInstances(request) - if err != nil { - errRet = 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 - } - - manageGrafanaAttachment = response.Response.InstanceSet[0] - return -} - -func (me *MonitorService) DeleteMonitorManageGrafanaAttachmentById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - resp, err := me.DescribeMonitorManageGrafanaAttachmentById(ctx, instanceId) - if err != nil { - errRet = err - return - } - - request := monitor.NewUnbindPrometheusManagedGrafanaRequest() - request.InstanceId = &instanceId - request.GrafanaId = resp.GrafanaInstanceId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().UnbindPrometheusManagedGrafana(request) - if err != nil { - 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 *MonitorService) DescribeTkeTmpBasicConfigById(ctx context.Context, clusterId, clusterType, instanceId string) (respParams *monitor.DescribePrometheusConfigResponseParams, errRet error) { - logId := getLogId(ctx) - request := monitor.NewDescribePrometheusConfigRequest() - request.InstanceId = &instanceId - request.ClusterType = &clusterType - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePrometheusConfig(request) - if err != nil { - errRet = err - return - } - 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.RequestId == nil { - return nil, fmt.Errorf("response is invalid,%s", response.ToJsonString()) - } - - respParams = response.Response - return -} - -func (me *MonitorService) GetConfigType(name string, respParams *monitor.DescribePrometheusConfigResponseParams) (configType string, config *monitor.PrometheusConfigItem, err error) { - for _, v := range respParams.ServiceMonitors { - if *v.Name == name { - configType = "service_monitors" - config = v - return - } - } - - for _, v := range respParams.PodMonitors { - if *v.Name == name { - configType = "pod_monitors" - config = v - return - } - } - - for _, v := range respParams.RawJobs { - if *v.Name == name { - configType = "raw_jobs" - config = v - return - } - } - err = fmt.Errorf("[ERROR] name [%v] configuration does not exist", name) - return -} - -type PrometheusConfig struct { - Config *string - Regex []string -} - -func (r *PrometheusConfig) UnmarshalToMap() (map[interface{}]interface{}, error) { - var configMap map[interface{}]interface{} - err := yaml.Unmarshal([]byte(*r.Config), &configMap) - if err != nil { - log.Printf("[ERROR] yaml Unmarshal fail [%v]\n", err) - return nil, err - } - return configMap, nil -} - -func (r *PrometheusConfig) MarshalToYaml(config *map[interface{}]interface{}) (string, error) { - data, err := yaml.Marshal(config) - if err != nil { - log.Printf("[ERROR] yaml Marshal fail [%v]\n", err) - return "", err - } - return string(data), nil -} - -func (r *PrometheusConfig) SetRegex(configs []interface{}) (*[]interface{}, error) { - setStatus := false - regex := strings.Join(r.Regex, "|") - for k, v := range configs { - metricRelabelings := v.(map[interface{}]interface{})["metric_relabel_configs"] - if metricRelabelings == nil { - if v.(map[interface{}]interface{})["metricRelabelings"] != nil { - metricRelabelings = v.(map[interface{}]interface{})["metricRelabelings"] - } else { - metricRelabelings = []interface{}{} - } - } - metricRelabelingList := []interface{}{} - for _, vv := range metricRelabelings.([]interface{}) { - metricRelabeling := vv.(map[interface{}]interface{}) - sourceLabels := metricRelabeling["source_labels"] - if sourceLabels == nil { - sourceLabels = metricRelabeling["sourceLabels"] - } - if metricRelabeling["action"] == "keep" && sourceLabels.([]interface{})[0] == "__name__" { - if regex == "" { - metricRelabeling = nil - } else { - metricRelabeling["regex"] = regex - setStatus = true - } - } - if metricRelabeling["action"] == "drop" || metricRelabeling == nil { - } else { - metricRelabelingList = append(metricRelabelingList, metricRelabeling) - } - } - - if k == (len(configs)-1) && regex != "" && !setStatus { - metricRelabeling := map[interface{}]interface{}{ - "source_labels": []string{"__name__"}, - "regex": regex, - "replacement": "$1", - "action": "keep", - } - metricRelabelingList = append(metricRelabelingList, metricRelabeling) - } - if len(metricRelabelingList) > 0 { - v.(map[interface{}]interface{})["metric_relabel_configs"] = metricRelabelingList - } - } - return &configs, nil -} - -func (me *MonitorService) DescribeMonitorTmpGrafanaConfigById(ctx context.Context, instanceId string) (tmpGrafanaConfig *monitor.DescribeGrafanaConfigResponseParams, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDescribeGrafanaConfigRequest() - 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.UseMonitorClient().DescribeGrafanaConfig(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - tmpGrafanaConfig = response.Response - return -} - -func (me *MonitorService) DescribeMonitorGrafanaPluginOverviewsByFilter(ctx context.Context, param map[string]interface{}) (pluginOverviews []*monitor.GrafanaPlugin, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePluginOverviewsRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribePluginOverviews(request) - if err != nil { - errRet = err - return - } - 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.PluginSet == nil { - return nil, nil - } - - pluginOverviews = response.Response.PluginSet - - return -} - -func (me *MonitorService) DescribeMonitorGrafanaDnsConfigById(ctx context.Context, instanceId string) (grafanaDnsConfig *monitor.DescribeDNSConfigResponseParams, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDescribeDNSConfigRequest() - 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.UseMonitorClient().DescribeDNSConfig(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - grafanaDnsConfig = response.Response - return -} - -func (me *MonitorService) DescribeMonitorGrafanaEnvConfigById(ctx context.Context, instanceId string) (grafanaEnvConfig *monitor.DescribeGrafanaEnvironmentsResponseParams, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDescribeGrafanaEnvironmentsRequest() - 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.UseMonitorClient().DescribeGrafanaEnvironments(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - grafanaEnvConfig = response.Response - return -} - -func (me *MonitorService) DescribeMonitorGrafanaWhitelistConfigById(ctx context.Context, instanceId string) (grafanaWhitelistConfig *monitor.DescribeGrafanaWhiteListResponseParams, errRet error) { - logId := getLogId(ctx) - - request := monitor.NewDescribeGrafanaWhiteListRequest() - 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.UseMonitorClient().DescribeGrafanaWhiteList(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - grafanaWhitelistConfig = response.Response - return -} - -func (me *MonitorService) DescribeMonitorAlarmHistoryByFilter(ctx context.Context, param map[string]interface{}) (alarmHistory []*monitor.AlarmHistory, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAlarmHistoriesRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "Order" { - request.Order = v.(*string) - } - if k == "StartTime" { - request.StartTime = v.(*int64) - } - if k == "EndTime" { - request.EndTime = v.(*int64) - } - if k == "MonitorTypes" { - request.MonitorTypes = v.([]*string) - } - if k == "AlarmObject" { - request.AlarmObject = v.(*string) - } - if k == "AlarmStatus" { - request.AlarmStatus = v.([]*string) - } - if k == "ProjectIds" { - request.ProjectIds = v.([]*int64) - } - if k == "InstanceGroupIds" { - request.InstanceGroupIds = v.([]*int64) - } - if k == "Namespaces" { - request.Namespaces = v.([]*monitor.MonitorTypeNamespace) - } - if k == "MetricNames" { - request.MetricNames = v.([]*string) - } - if k == "PolicyName" { - request.PolicyName = v.(*string) - } - if k == "Content" { - request.Content = v.(*string) - } - if k == "ReceiverUids" { - request.ReceiverUids = v.([]*int64) - } - if k == "ReceiverGroups" { - request.ReceiverGroups = v.([]*int64) - } - if k == "PolicyIds" { - request.PolicyIds = v.([]*string) - } - if k == "AlarmLevels" { - request.AlarmLevels = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 1 - limit int64 = 20 - ) - for { - request.PageNumber = &offset - request.PageSize = &limit - response, err := me.client.UseMonitorClient().DescribeAlarmHistories(request) - if err != nil { - errRet = err - return - } - 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.Histories) < 1 { - break - } - alarmHistory = append(alarmHistory, response.Response.Histories...) - if len(response.Response.Histories) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *MonitorService) DescribeMonitorAlarmBasicAlarmsByFilter(ctx context.Context, param map[string]interface{}) (alarms []*monitor.DescribeBasicAlarmListAlarms, warning *string, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeBasicAlarmListRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "StartTime" { - request.StartTime = v.(*int64) - } - if k == "EndTime" { - request.EndTime = v.(*int64) - } - if k == "OccurTimeOrder" { - request.OccurTimeOrder = v.(*string) - } - if k == "ProjectIds" { - request.ProjectIds = v.([]*int64) - } - if k == "ViewNames" { - request.ViewNames = v.([]*string) - } - if k == "AlarmStatus" { - request.AlarmStatus = v.([]*int64) - } - if k == "ObjLike" { - request.ObjLike = v.(*string) - } - if k == "InstanceGroupIds" { - request.InstanceGroupIds = v.([]*int64) - } - if k == "MetricNames" { - request.MetricNames = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseMonitorClient().DescribeBasicAlarmList(request) - if err != nil { - errRet = err - return - } - 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 - } - alarms = append(alarms, response.Response.Alarms...) - warning = response.Response.Warning - if len(response.Response.Alarms) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *MonitorService) DescribeMonitorAlarmBasicMetricByFilter(ctx context.Context, param map[string]interface{}) (metric []*monitor.MetricSet, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeBaseMetricsRequest() - ) - - defer 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 == "Namespace" { - request.Namespace = v.(*string) - } - if k == "MetricName" { - request.MetricName = v.(*string) - } - if k == "Dimensions" { - request.Dimensions = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribeBaseMetrics(request) - if err != nil { - errRet = err - return - } - 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.MetricSet) < 1 { - return - } - - metric = response.Response.MetricSet - - return -} - -func (me *MonitorService) DescribeMonitorAlarmConditionsTemplateByFilter(ctx context.Context, param map[string]interface{}) (alarmConditionsTemplate []*monitor.TemplateGroup, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeConditionsTemplateListRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "ViewName" { - request.ViewName = v.(*string) - } - if k == "GroupName" { - request.GroupName = v.(*string) - } - if k == "GroupID" { - request.GroupID = v.(*string) - } - if k == "UpdateTimeOrder" { - request.UpdateTimeOrder = v.(*string) - } - if k == "PolicyCountOrder" { - request.PolicyCountOrder = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseMonitorClient().DescribeConditionsTemplateList(request) - if err != nil { - errRet = err - return - } - 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.TemplateGroupList) < 1 { - break - } - alarmConditionsTemplate = append(alarmConditionsTemplate, response.Response.TemplateGroupList...) - if len(response.Response.TemplateGroupList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *MonitorService) DescribeMonitorAlarmMetricByFilter(ctx context.Context, param map[string]interface{}) (alarmMetric []*monitor.Metric, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAlarmMetricsRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "MonitorType" { - request.MonitorType = v.(*string) - } - if k == "Namespace" { - request.Namespace = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseMonitorClient().DescribeAlarmMetrics(request) - if err != nil { - errRet = err - return - } - 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.Metrics) < 1 { - return - } - - alarmMetric = response.Response.Metrics - - return -} - -func (me *MonitorService) DescribeMonitorAlarmNoticeCallbacksByFilter(ctx context.Context) (alarmNoticeCallbacks []*monitor.URLNotice, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAlarmNoticeCallbacksRequest() - ) - - defer 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.Module = helper.String("monitor") - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribeAlarmNoticeCallbacks(request) - if err != nil { - errRet = err - return - } - 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.URLNotices) < 1 { - return - } - - alarmNoticeCallbacks = response.Response.URLNotices - - return -} - -func (me *MonitorService) DescribeMonitorAlarmPolicyByFilter(ctx context.Context, param map[string]interface{}) (alarmPolicy []*monitor.AlarmPolicy, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAlarmPoliciesRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "PolicyName" { - request.PolicyName = v.(*string) - } - if k == "MonitorTypes" { - request.MonitorTypes = v.([]*string) - } - if k == "Namespaces" { - request.Namespaces = v.([]*string) - } - if k == "Dimensions" { - request.Dimensions = v.(*string) - } - if k == "ReceiverUids" { - request.ReceiverUids = v.([]*int64) - } - if k == "ReceiverGroups" { - request.ReceiverGroups = v.([]*int64) - } - if k == "PolicyType" { - request.PolicyType = v.([]*string) - } - if k == "Field" { - request.Field = v.(*string) - } - if k == "Order" { - request.Order = v.(*string) - } - if k == "ProjectIds" { - request.ProjectIds = v.([]*int64) - } - if k == "NoticeIds" { - request.NoticeIds = v.([]*string) - } - if k == "RuleTypes" { - request.RuleTypes = v.([]*string) - } - if k == "Enable" { - request.Enable = v.([]*int64) - } - if k == "NotBindingNoticeRule" { - request.NotBindingNoticeRule = v.(*int64) - } - if k == "InstanceGroupId" { - request.InstanceGroupId = v.(*int64) - } - if k == "NeedCorrespondence" { - request.NeedCorrespondence = v.(*int64) - } - if k == "TriggerTasks" { - request.TriggerTasks = v.([]*monitor.AlarmPolicyTriggerTask) - } - if k == "OneClickPolicyType" { - request.OneClickPolicyType = v.([]*string) - } - if k == "NotBindAll" { - request.NotBindAll = v.(*int64) - } - if k == "NotInstanceGroup" { - request.NotInstanceGroup = v.(*int64) - } - if k == "PromInsId" { - request.PromInsId = v.(*string) - } - if k == "ReceiverOnCallFormIDs" { - request.ReceiverOnCallFormIDs = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 1 - limit int64 = 20 - ) - for { - request.PageNumber = &offset - request.PageSize = &limit - response, err := me.client.UseMonitorClient().DescribeAlarmPolicies(request) - if err != nil { - errRet = err - return - } - 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.Policies) < 1 { - break - } - alarmPolicy = append(alarmPolicy, response.Response.Policies...) - if len(response.Response.Policies) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *MonitorService) DescribeMonitorAlarmAllNamespacesByFilter(ctx context.Context, param map[string]interface{}) ( - qce, custom []*monitor.CommonNamespace, common []*monitor.CommonNamespaceNew, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeAllNamespacesRequest() - ) - - defer 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 == "SceneType" { - request.SceneType = v.(*string) - } - if k == "Module" { - request.Module = v.(*string) - } - if k == "MonitorTypes" { - request.MonitorTypes = v.([]*string) - } - if k == "Ids" { - request.Ids = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribeAllNamespaces(request) - if err != nil { - errRet = err - return - } - 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 - } - - qce = response.Response.QceNamespacesNew - custom = response.Response.CustomNamespacesNew - common = response.Response.CommonNamespaces - - return -} - -func (me *MonitorService) DescribeMonitorAlarmMonitorTypeByFilter(ctx context.Context, param map[string]interface{}) (alarmMonitor *monitor.DescribeMonitorTypesResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeMonitorTypesRequest() - ) - - defer 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.Module = helper.String("monitor") - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribeMonitorTypes(request) - if err != nil { - errRet = err - return - } - 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 - } - alarmMonitor = response.Response - - return -} - -func (me *MonitorService) DescribeMonitorTmpRegionsByFilter(ctx context.Context, param map[string]interface{}) (tmpRegions []*monitor.PrometheusRegionItem, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribePrometheusRegionsRequest() - ) - - defer 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 == "PayMode" { - request.PayMode = v.(*int64) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribePrometheusRegions(request) - if err != nil { - errRet = err - return - } - 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.RegionSet) < 1 { - return - } - tmpRegions = response.Response.RegionSet - - return -} - -func (me *MonitorService) DescribeMonitorStatisticDataByFilter(ctx context.Context, param map[string]interface{}) (statisticData *monitor.DescribeStatisticDataResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = monitor.NewDescribeStatisticDataRequest() - ) - - defer 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 == "Module" { - request.Module = v.(*string) - } - if k == "Namespace" { - request.Namespace = v.(*string) - } - if k == "MetricNames" { - request.MetricNames = v.([]*string) - } - if k == "Conditions" { - request.Conditions = v.([]*monitor.MidQueryCondition) - } - if k == "GroupBys" { - request.GroupBys = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseMonitorClient().DescribeStatisticData(request) - if err != nil { - errRet = err - return - } - 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 - } - statisticData = response.Response - - return -} diff --git a/tencentcloud/service_tencentcloud_redis.go b/tencentcloud/service_tencentcloud_redis.go deleted file mode 100644 index bfb8863a66..0000000000 --- a/tencentcloud/service_tencentcloud_redis.go +++ /dev/null @@ -1,1926 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "time" - - "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" -) - -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 := 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 := 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 := 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 := 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 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 := 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(readRetryTimeout*20, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseRedisClient().DescribeInstances(request) - if err != nil { - return 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 := 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*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 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 := 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*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 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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*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 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 := 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*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 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 = 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 = 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 := getLogId(ctx) - var ( - request = redis.NewAddReplicationInstanceRequest() - response = redis.NewAddReplicationInstanceResponse() - ) - - request.GroupId = &groupId - request.InstanceId = &instanceId - request.InstanceRole = &instanceRole - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := me.client.UseRedisClient().AddReplicationInstance(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()) - } - 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*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 := 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 := 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 = 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 := 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 := 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*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 := 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 := 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/service_tencentcloud_ssl.go b/tencentcloud/service_tencentcloud_ssl.go deleted file mode 100644 index b1147c56b1..0000000000 --- a/tencentcloud/service_tencentcloud_ssl.go +++ /dev/null @@ -1,245 +0,0 @@ -package tencentcloud - -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" - "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 := 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(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 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(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 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 := 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(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 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 := getLogId(ctx) - client := me.client.UseSslClient() - - deleteRequest := ssl.NewDeleteCertRequest() - deleteRequest.ModuleType = helper.String(SSL_MODULE_TYPE) - deleteRequest.Id = &id - - if err := resource.Retry(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 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(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 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/service_tencentcloud_tag.go b/tencentcloud/service_tencentcloud_tag.go deleted file mode 100644 index 281b6ed9b5..0000000000 --- a/tencentcloud/service_tencentcloud_tag.go +++ /dev/null @@ -1,412 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - - if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { - return 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) - if err != nil { - count = 0 - - return 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 := 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 := 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 = 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 := 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 := 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 := 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 := 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/service_tencentcloud_tdmq.go b/tencentcloud/service_tencentcloud_tdmq.go deleted file mode 100644 index fd93b318e0..0000000000 --- a/tencentcloud/service_tencentcloud_tdmq.go +++ /dev/null @@ -1,738 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -// basic information - -type TdmqService struct { - client *connectivity.TencentCloudClient -} - -// ////////api -// tdmq instance - -func (me *TdmqService) DescribeTdmqInstanceById(ctx context.Context, - clusterId string) (info *tdmq.Cluster, has bool, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeClustersRequest() - defer 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.ClusterIdList = []*string{&clusterId} - - var response *tdmq.DescribeClustersResponse - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().DescribeClusters(request) - if err != nil { - return retryError(err, InternalError) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) - return nil, false, err - } - - if len(response.Response.ClusterSet) < 1 { - return - } - has = true - info = response.Response.ClusterSet[0] - return -} - -func (me *TdmqService) ModifyTdmqInstanceAttribute(ctx context.Context, clusterId, clusterName string, - remark string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewModifyClusterRequest() - defer 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.ClusterId = &clusterId - request.ClusterName = &clusterName - request.Remark = &remark - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().ModifyCluster(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s modify tdmq failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DeleteTdmqInstance(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteClusterRequest() - defer 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.ClusterId = &clusterId - response, err := me.client.UseTdmqClient().DeleteCluster(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 -} - -// tdmq namespace -func (me *TdmqService) CreateTdmqNamespace(ctx context.Context, environName string, msgTtl uint64, clusterId string, - remark string, retentionPolicy tdmq.RetentionPolicy) (environId string, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewCreateEnvironmentRequest() - defer 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.EnvironmentId = &environName - request.MsgTTL = &msgTtl - request.ClusterId = &clusterId - request.Remark = &remark - request.RetentionPolicy = &retentionPolicy - - var response *tdmq.CreateEnvironmentResponse - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().CreateEnvironment(request) - if err != nil { - return retryError(err) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s create tdmq namespace failed, reason: %v", logId, err) - errRet = err - return - } - environId = *response.Response.EnvironmentId - return -} - -func (me *TdmqService) DescribeTdmqNamespaceById(ctx context.Context, - environId string, clusterId string) (info *tdmq.Environment, has bool, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeEnvironmentsRequest() - defer 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.EnvironmentId = &environId - request.ClusterId = &clusterId - - var response *tdmq.DescribeEnvironmentsResponse - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().DescribeEnvironments(request) - if err != nil { - return retryError(err, InternalError) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) - return nil, false, err - } - - if len(response.Response.EnvironmentSet) < 1 { - return - } - has = true - info = response.Response.EnvironmentSet[0] - return -} - -func (me *TdmqService) ModifyTdmqNamespaceAttribute(ctx context.Context, environId string, msgTtl uint64, - remark string, clusterId string, retentionPolicy *tdmq.RetentionPolicy) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewModifyEnvironmentAttributesRequest() - defer 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.EnvironmentId = &environId - request.MsgTTL = &msgTtl - request.Remark = &remark - request.ClusterId = &clusterId - request.RetentionPolicy = retentionPolicy - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().ModifyEnvironmentAttributes(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s modify tdmq namespace failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DeleteTdmqNamespace(ctx context.Context, environId string, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteEnvironmentsRequest() - defer 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.EnvironmentIds = []*string{&environId} - request.ClusterId = &clusterId - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().DeleteEnvironments(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s delete tdmq namespace failed, reason: %v", logId, err) - return err - } - return -} - -// tdmq topic -func (me *TdmqService) CreateTdmqTopic(ctx context.Context, environId string, topicName string, partitions uint64, - topicType int64, remark string, clusterId string, pulsarTopicType int64) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewCreateTopicRequest() - defer 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.EnvironmentId = &environId - request.TopicName = &topicName - request.Partitions = &partitions - if topicType != NoneTopicType { - request.TopicType = common.Uint64Ptr(uint64(topicType)) - } - request.Remark = &remark - request.ClusterId = &clusterId - if pulsarTopicType != NonePulsarTopicType { - request.PulsarTopicType = &pulsarTopicType - } - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().CreateTopic(request) - if err != nil { - return retryError(err) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) - errRet = err - return - } - return -} - -func (me *TdmqService) DescribeTdmqTopicById(ctx context.Context, - environId string, topicName string, clusterId string) (info *tdmq.Topic, has bool, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeTopicsRequest() - defer 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.EnvironmentId = &environId - request.TopicName = &topicName - request.ClusterId = &clusterId - - var response *tdmq.DescribeTopicsResponse - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().DescribeTopics(request) - if err != nil { - return retryError(err, InternalError) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) - return nil, false, err - } - - if len(response.Response.TopicSets) < 1 { - return - } - has = true - info = response.Response.TopicSets[0] - return -} - -func (me *TdmqService) ModifyTdmqTopicAttribute(ctx context.Context, environId string, topicName string, - partitions uint64, remark string, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewModifyTopicRequest() - defer 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.EnvironmentId = &environId - request.TopicName = &topicName - request.Partitions = &partitions - request.Remark = &remark - request.ClusterId = &clusterId - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().ModifyTopic(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s modify tdmq topic failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DeleteTdmqTopic(ctx context.Context, environId string, topicName string, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteTopicsRequest() - defer 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 ( - topicRecord tdmq.TopicRecord - ) - topicRecord.TopicName = &topicName - topicRecord.EnvironmentId = &environId - request.TopicSets = []*tdmq.TopicRecord{&topicRecord} - request.ClusterId = &clusterId - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().DeleteTopics(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s delete tdmq topic failed, reason: %v", logId, err) - return err - } - return -} - -//tdmq role -func (me *TdmqService) CreateTdmqRole(ctx context.Context, roleName string, clusterId string, - remark string) (roleId string, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewCreateRoleRequest() - defer 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.RoleName = &roleName - request.ClusterId = &clusterId - request.Remark = &remark - - var response *tdmq.CreateRoleResponse - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().CreateRole(request) - if err != nil { - return retryError(err) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) - errRet = err - return - } - roleId = *response.Response.RoleName - return -} - -func (me *TdmqService) DescribeTdmqRoleById(ctx context.Context, - roleName string, clusterId string) (info *tdmq.Role, has bool, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeRolesRequest() - defer 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.RoleName = &roleName - request.ClusterId = &clusterId - - var response *tdmq.DescribeRolesResponse - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().DescribeRoles(request) - if err != nil { - return retryError(err, InternalError) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read tdmq role failed, reason: %v", logId, err) - return nil, false, err - } - - if len(response.Response.RoleSets) < 1 { - return - } - has = true - info = response.Response.RoleSets[0] - return -} - -func (me *TdmqService) ModifyTdmqRoleAttribute(ctx context.Context, roleName string, clusterId string, - remark string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewModifyRoleRequest() - defer 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.RoleName = &roleName - request.ClusterId = &clusterId - request.Remark = &remark - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().ModifyRole(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s modify tdmq role failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DeleteTdmqRole(ctx context.Context, roleName string, cluserId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteRolesRequest() - defer 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.RoleNames = []*string{&roleName} - request.ClusterId = &cluserId - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().DeleteRoles(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s delete tdmq roles failed, reason: %v", logId, err) - return err - } - return -} - -//tdmq role -func (me *TdmqService) CreateTdmqNamespaceRoleAttachment(ctx context.Context, environId string, - roleName string, permissions []*string, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewCreateEnvironmentRoleRequest() - defer 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.EnvironmentId = &environId - request.RoleName = &roleName - request.Permissions = permissions - request.ClusterId = &clusterId - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().CreateEnvironmentRole(request) - if err != nil { - return retryError(err) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) - errRet = err - return - } - return -} - -func (me *TdmqService) DescribeTdmqNamespaceRoleAttachment(ctx context.Context, - environId string, roleName string, clusterId string) (info *tdmq.EnvironmentRole, has bool, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeEnvironmentRolesRequest() - defer 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.EnvironmentId = &environId - request.RoleName = &roleName - request.ClusterId = &clusterId - - var response *tdmq.DescribeEnvironmentRolesResponse - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseTdmqClient().DescribeEnvironmentRoles(request) - if err != nil { - return retryError(err, InternalError) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read tdmq environment role failed, reason: %v", logId, err) - return nil, false, err - } - - if len(response.Response.EnvironmentRoleSets) < 1 { - return - } - has = true - info = response.Response.EnvironmentRoleSets[0] - return -} - -func (me *TdmqService) ModifyTdmqNamespaceRoleAttachment(ctx context.Context, - environId string, roleName string, permissions []*string, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewModifyEnvironmentRoleRequest() - defer 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.EnvironmentId = &environId - request.RoleName = &roleName - request.ClusterId = &clusterId - request.Permissions = permissions - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().ModifyEnvironmentRole(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s modify tdmq environment role failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DeleteTdmqNamespaceRoleAttachment(ctx context.Context, environId string, - roleName string, cluserId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteEnvironmentRolesRequest() - defer 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.EnvironmentId = &environId - request.RoleNames = []*string{&roleName} - request.ClusterId = &cluserId - - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTdmqClient().DeleteEnvironmentRoles(request) - if err != nil { - return retryError(err, InternalError) - } - return nil - }); err != nil { - log.Printf("[CRITAL]%s delete tdmq environments roles failed, reason: %v", logId, err) - return err - } - return -} - -func (me *TdmqService) DescribeTdmqProfessionalClusterById(ctx context.Context, clusterId string) (professionalCluster *tdmq.PulsarProClusterInfo, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribePulsarProInstanceDetailRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribePulsarProInstanceDetail(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - professionalCluster = response.Response.ClusterInfo - return -} - -func (me *TdmqService) DeleteTdmqProfessionalClusterById(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDeleteProClusterRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteProCluster(request) - if err != nil { - 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 *TdmqService) DescribePulsarProInstances(ctx context.Context, clusterId string) (professionalCluster *tdmq.PulsarProInstance, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribePulsarProInstancesRequest() - - filter := tdmq.Filter{ - Name: helper.String("InstanceIds"), - Values: []*string{&clusterId}, - } - request.Filters = []*tdmq.Filter{&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([]*tdmq.PulsarProInstance, 0) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribePulsarProInstances(request) - if err != nil { - errRet = err - return - } - 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.Instances) < 1 { - break - } - instances = append(instances, response.Response.Instances...) - if len(response.Response.Instances) < int(limit) { - break - } - - offset += limit - - if response == nil || len(response.Response.Instances) < 1 { - return - } - } - - professionalCluster = instances[0] - return -} - -func (me *TdmqService) TdmqProfessionalClusterStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := contextNil - - object, err := me.DescribePulsarProInstances(ctx, clusterId) - - if err != nil { - return nil, "", err - } - - return object, helper.PString(helper.UInt64ToStrPoint(*object.Status)), nil - } -} diff --git a/tencentcloud/service_tencentcloud_tdmq_rocketmq.go b/tencentcloud/service_tencentcloud_tdmq_rocketmq.go deleted file mode 100644 index 9a31860e02..0000000000 --- a/tencentcloud/service_tencentcloud_tdmq_rocketmq.go +++ /dev/null @@ -1,1687 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - - tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" - "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 TdmqRocketmqService struct { - client *connectivity.TencentCloudClient -} - -func (me *TdmqRocketmqService) DescribeTdmqRocketmqCluster(ctx context.Context, clusterId string) (cluster *tdmqRocketmq.RocketMQClusterInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQClusterRequest() - ) - - 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.ClusterId = &clusterId - - response, err := me.client.UseTdmqClient().DescribeRocketMQCluster(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()) - - cluster = response.Response.ClusterInfo - return -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqClusterById(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteRocketMQClusterRequest() - - request.ClusterId = &clusterId - - 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.UseTdmqClient().DeleteRocketMQCluster(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 *TdmqRocketmqService) DescribeTdmqRocketmqNamespace(ctx context.Context, namespaceName, clusterId string) (namespace []*tdmqRocketmq.RocketMQNamespace, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQNamespacesRequest() - ) - - 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.ClusterId = &clusterId - request.NameKeyword = &namespaceName - offset := uint64(0) - limit := uint64(100) - namespace = make([]*tdmqRocketmq.RocketMQNamespace, 0) - for { - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQNamespaces(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()) - - namespaces := response.Response.Namespaces - if len(namespaces) > 0 { - namespace = append(namespace, namespaces...) - } - if len(namespaces) < int(limit) { - return - } - offset += limit - } -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqNamespaceById(ctx context.Context, namespaceName, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteRocketMQNamespaceRequest() - - request.NamespaceId = &namespaceName - request.ClusterId = &clusterId - - 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.UseTdmqClient().DeleteRocketMQNamespace(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 *TdmqRocketmqService) DescribeTdmqRocketmqRole(ctx context.Context, clusterId, roleName string) (role *tdmqRocketmq.Role, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRolesRequest() - ) - - 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.ClusterId = &clusterId - request.Filters = append( - request.Filters, - &tdmqRocketmq.Filter{ - Name: helper.String("RoleName"), - Values: []*string{&roleName}, - }, - ) - ratelimit.Check(request.GetAction()) - - var offset int64 = 0 - var pageSize int64 = 100 - instances := make([]*tdmqRocketmq.Role, 0) - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRoles(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.RoleSets) < 1 { - break - } - instances = append(instances, response.Response.RoleSets...) - if len(response.Response.RoleSets) < int(pageSize) { - break - } - offset += pageSize - } - - if len(instances) < 1 { - return - } - role = instances[0] - - return - -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqRoleById(ctx context.Context, clusterId, roleName string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteRolesRequest() - - request.ClusterId = &clusterId - request.RoleNames = []*string{&roleName} - - 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.UseTdmqClient().DeleteRoles(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 *TdmqRocketmqService) DescribeTdmqRocketmqTopic(ctx context.Context, clusterId, namespaceId, topicName string) (result []*tdmqRocketmq.RocketMQTopic, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQTopicsRequest() - ) - - 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.ClusterId = &clusterId - request.NamespaceId = &namespaceId - request.FilterName = &topicName - - var offset uint64 = 0 - var pageSize uint64 = 100 - result = make([]*tdmqRocketmq.RocketMQTopic, 0) - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQTopics(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 - } - result = append(result, response.Response.Topics...) - if len(response.Response.Topics) < int(pageSize) { - break - } - offset += pageSize - } - - return -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqTopicById(ctx context.Context, clusterId, namespaceId, topic string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteRocketMQTopicRequest() - - request.ClusterId = &clusterId - request.NamespaceId = &namespaceId - request.Topic = &topic - - 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.UseTdmqClient().DeleteRocketMQTopic(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 *TdmqRocketmqService) DescribeTdmqRocketmqGroup(ctx context.Context, clusterId, namespaceId, groupId string) (result []*tdmqRocketmq.RocketMQGroup, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQGroupsRequest() - ) - - 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.ClusterId = &clusterId - request.NamespaceId = &namespaceId - request.FilterGroup = &groupId - - var offset uint64 = 0 - var pageSize uint64 = 100 - tmpResult := make([]*tdmqRocketmq.RocketMQGroup, 0) - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQGroups(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.Groups) < 1 { - break - } - - tmpResult = append(tmpResult, response.Response.Groups...) - if len(response.Response.Groups) < int(pageSize) { - break - } - - offset += pageSize - } - - for _, item := range tmpResult { - if *item.Name == groupId { - result = append(result, item) - return - } - } - - return -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqGroupById(ctx context.Context, clusterId, namespaceId, groupId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteRocketMQGroupRequest() - - request.ClusterId = &clusterId - request.NamespaceId = &namespaceId - request.GroupId = &groupId - - 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.UseTdmqClient().DeleteRocketMQGroup(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 *TdmqRocketmqService) DescribeTdmqRocketmqEnvironmentRole(ctx context.Context, clusterId, roleName, environmentId string) (environmentRoles []*tdmqRocketmq.EnvironmentRole, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeEnvironmentRolesRequest() - ) - - 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.ClusterId = &clusterId - request.RoleName = &roleName - request.EnvironmentId = &environmentId - environmentRoles = make([]*tdmqRocketmq.EnvironmentRole, 0) - var offset int64 = 0 - var pageSize int64 = 100 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeEnvironmentRoles(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.EnvironmentRoleSets) < 1 { - break - } - environmentRoles = append(environmentRoles, response.Response.EnvironmentRoleSets...) - if len(response.Response.EnvironmentRoleSets) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqRocketmqService) DeleteTdmqRocketmqEnvironmentRoleById(ctx context.Context, clusterId, roleName, environmentId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmqRocketmq.NewDeleteEnvironmentRolesRequest() - - request.ClusterId = &clusterId - request.RoleNames = []*string{&roleName} - request.EnvironmentId = &environmentId - - 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.UseTdmqClient().DeleteEnvironmentRoles(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 *TdmqRocketmqService) DescribeRocketmqClusterByFilter(ctx context.Context, param map[string]interface{}) (cluster []*tdmqRocketmq.RocketMQClusterDetail, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQClustersRequest() - ) - - 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()) - } - }() - - if v, ok := param["id_keyword"]; ok { - request.IdKeyword = helper.String(v.(string)) - } - if v, ok := param["name_keyword"]; ok { - request.NameKeyword = helper.String(v.(string)) - } - if v, ok := param["cluster_id_list"]; ok { - request.ClusterIdList = make([]*string, 0) - for _, cluster := range v.([]interface{}) { - clusterId := cluster.(string) - request.ClusterIdList = append(request.ClusterIdList, &clusterId) - } - } - - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 20 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQClusters(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.ClusterList) < 1 { - break - } - cluster = append(cluster, response.Response.ClusterList...) - if len(response.Response.ClusterList) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqRocketmqService) DescribeTdmqRocketmqNamespaceByFilter(ctx context.Context, param map[string]interface{}) (namespace []*tdmqRocketmq.RocketMQNamespace, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQNamespacesRequest() - ) - - 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 == "cluster_id" { - request.ClusterId = helper.String(v.(string)) - } - - if k == "name_keyword" { - request.NameKeyword = helper.String(v.(string)) - } - - } - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 20 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQNamespaces(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.Namespaces) < 1 { - break - } - namespace = append(namespace, response.Response.Namespaces...) - if len(response.Response.Namespaces) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqRocketmqService) DescribeTdmqRocketmqTopicByFilter(ctx context.Context, param map[string]interface{}) (topic []*tdmqRocketmq.RocketMQTopic, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQTopicsRequest() - ) - - 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 == "cluster_id" { - request.ClusterId = helper.String(v.(string)) - } - - if k == "namespace_id" { - request.NamespaceId = helper.String(v.(string)) - } - - if k == "filter_type" { - filterTypes := make([]*string, 0) - for _, item := range v.([]interface{}) { - fileterType := item.(string) - filterTypes = append(filterTypes, &fileterType) - } - request.FilterType = filterTypes - } - - if k == "filter_name" { - request.FilterName = helper.String(v.(string)) - } - - } - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 20 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQTopics(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 - } - topic = append(topic, response.Response.Topics...) - if len(response.Response.Topics) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqRocketmqService) DescribeTdmqRocketmqRoleByFilter(ctx context.Context, param map[string]interface{}) (role []*tdmqRocketmq.Role, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRolesRequest() - ) - - 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.ClusterId = helper.String(param["cluster_id"].(string)) - if v, ok := param["role_name"]; ok { - request.RoleName = helper.String(v.(string)) - } - ratelimit.Check(request.GetAction()) - - var offset int64 = 0 - var pageSize int64 = 20 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRoles(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.RoleSets) < 1 { - break - } - role = append(role, response.Response.RoleSets...) - if len(response.Response.RoleSets) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqRocketmqService) DescribeTdmqRocketmqGroupByFilter(ctx context.Context, param map[string]interface{}) (group []*tdmqRocketmq.RocketMQGroup, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmqRocketmq.NewDescribeRocketMQGroupsRequest() - ) - - 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 == "cluster_id" { - request.ClusterId = helper.String(v.(string)) - } - - if k == "namespace_id" { - request.NamespaceId = helper.String(v.(string)) - } - - if k == "filter_topic" { - request.FilterTopic = helper.String(v.(string)) - } - - if k == "filter_group" { - request.FilterGroup = helper.String(v.(string)) - } - - if k == "filter_one_group" { - request.FilterOneGroup = helper.String(v.(string)) - } - - } - ratelimit.Check(request.GetAction()) - - var offset uint64 = 0 - var pageSize uint64 = 20 - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTdmqClient().DescribeRocketMQGroups(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.Groups) < 1 { - break - } - group = append(group, response.Response.Groups...) - if len(response.Response.Groups) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *TdmqService) DescribeTdmqEnvironmentAttributesByFilter(ctx context.Context, param map[string]interface{}) (environmentAttributes *tdmq.DescribeEnvironmentAttributesResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeEnvironmentAttributesRequest() - ) - - defer 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 == "EnvironmentId" { - request.EnvironmentId = v.(*string) - } - - if k == "ClusterId" { - request.ClusterId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeEnvironmentAttributes(request) - if err != nil { - errRet = err - return - } - - 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 - } - - environmentAttributes = response.Response - return -} - -func (me *TdmqService) DescribeTdmqPublisherSummaryByFilter(ctx context.Context, param map[string]interface{}) (publisherSummary *tdmq.DescribePublisherSummaryResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribePublisherSummaryRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "Namespace" { - request.Namespace = v.(*string) - } - if k == "Topic" { - request.Topic = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribePublisherSummary(request) - if err != nil { - errRet = err - return - } - 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 - } - - publisherSummary = response.Response - - return -} - -func (me *TdmqService) DescribeTdmqPublishersByFilter(ctx context.Context, param map[string]interface{}) (publishers []*tdmq.Publisher, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribePublishersRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "Namespace" { - request.Namespace = v.(*string) - } - if k == "Topic" { - request.Topic = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tdmq.Filter) - } - if k == "Sort" { - request.Sort = v.(*tdmq.Sort) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 100 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribePublishers(request) - if err != nil { - errRet = err - return - } - 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.TotalCount == 0 { - break - } - - publishers = append(publishers, response.Response.Publishers...) - if len(response.Response.Publishers) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqSubscriptionAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (subscriptionAttachment *tdmq.Subscription, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribeSubscriptionsRequest() - request.EnvironmentId = &environmentId - request.TopicName = &Topic - request.SubscriptionName = &subscriptionName - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeSubscriptions(request) - if err != nil { - errRet = err - 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.TotalCount == 0 { - return - } - - subscriptionAttachment = response.Response.SubscriptionSets[0] - return -} - -func (me *TdmqService) GetTdmqTopicsAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (has bool, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribeTopicsRequest() - topicRetry := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "RETRY") - topicDLQ := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "DLQ") - - request.EnvironmentId = &environmentId - request.ClusterId = &clusterId - - request.Filters = []*tdmq.Filter{ - { - Name: common.StringPtr("TopicName"), - Values: common.StringPtrs([]string{topicRetry, topicDLQ}), - }, - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeTopics(request) - if err != nil { - errRet = err - 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.TotalCount == 0 { - return false, nil - } - - return true, nil -} - -func (me *TdmqService) DeleteTdmqTopicsAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDeleteTopicsRequest() - topicRetry := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "RETRY") - topicDLQ := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "DLQ") - request.TopicSets = []*tdmq.TopicRecord{ - { - EnvironmentId: &environmentId, - TopicName: &topicRetry, - }, - { - EnvironmentId: &environmentId, - TopicName: &topicDLQ, - }, - } - request.ClusterId = &clusterId - request.EnvironmentId = &environmentId - request.Force = common.BoolPtr(true) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteTopics(request) - if err != nil { - 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 *TdmqService) DeleteTdmqSubscriptionAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDeleteSubscriptionsRequest() - request.SubscriptionTopicSets = []*tdmq.SubscriptionTopic{ - { - EnvironmentId: &environmentId, - TopicName: &Topic, - SubscriptionName: &subscriptionName, - }, - } - request.ClusterId = &clusterId - request.EnvironmentId = &environmentId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteSubscriptions(request) - if err != nil { - 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 *TdmqService) DescribeTdmqDeadLetterSourceQueueByFilter(ctx context.Context, param map[string]interface{}) (deadLetterSourceQueue []*tdmq.CmqDeadLetterSource, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeCmqDeadLetterSourceQueuesRequest() - ) - - defer 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 == "DeadLetterQueueName" { - request.DeadLetterQueueName = v.(*string) - } - if k == "SourceQueueName" { - request.SourceQueueName = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribeCmqDeadLetterSourceQueues(request) - if err != nil { - errRet = err - return - } - - 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.TotalCount == 0 { - break - } - - deadLetterSourceQueue = append(deadLetterSourceQueue, response.Response.QueueSet...) - if len(response.Response.QueueSet) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqRabbitmqNodeListByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqNodeList []*tdmq.RabbitMQPrivateNode, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeRabbitMQNodeListRequest() - ) - - defer 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 == "NodeName" { - request.NodeName = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tdmq.Filter) - } - if k == "SortElement" { - request.SortElement = v.(*string) - } - if k == "SortOrder" { - request.SortOrder = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribeRabbitMQNodeList(request) - if err != nil { - errRet = err - return - } - - 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.TotalCount == 0 { - break - } - - rabbitmqNodeList = append(rabbitmqNodeList, response.Response.NodeList...) - if len(response.Response.NodeList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqRabbitmqVipInstanceByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqVipInstance []*tdmq.RabbitMQVipInstance, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeRabbitMQVipInstancesRequest() - ) - - defer 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.([]*tdmq.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribeRabbitMQVipInstances(request) - if err != nil { - errRet = err - return - } - - 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.TotalCount == 0 { - break - } - - rabbitmqVipInstance = append(rabbitmqVipInstance, response.Response.Instances...) - if len(response.Response.Instances) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqVipInstanceByFilter(ctx context.Context, param map[string]interface{}) (vipInstance *tdmq.DescribeRocketMQVipInstanceDetailResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeRocketMQVipInstanceDetailRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstanceDetail(request) - if err != nil { - errRet = err - return - } - - 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 - } - - vipInstance = response.Response - return -} - -func (me *TdmqService) DescribeTdmqProInstanceDetailByFilter(ctx context.Context, param map[string]interface{}) (proInstanceDetail *tdmq.DescribePulsarProInstanceDetailResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribePulsarProInstanceDetailRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribePulsarProInstanceDetail(request) - if err != nil { - errRet = err - return - } - - 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 - } - - proInstanceDetail = response.Response - - return -} - -func (me *TdmqService) DescribeTdmqProInstancesByFilter(ctx context.Context, param map[string]interface{}) (proInstances []*tdmq.PulsarProInstance, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribePulsarProInstancesRequest() - ) - - defer 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.([]*tdmq.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribePulsarProInstances(request) - if err != nil { - errRet = err - return - } - - 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.Instances) < 1 { - break - } - - proInstances = append(proInstances, response.Response.Instances...) - if len(response.Response.Instances) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqMessageByFilter(ctx context.Context, param map[string]interface{}) (message *tdmq.DescribeRocketMQMsgResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeRocketMQMsgRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "EnvironmentId" { - request.EnvironmentId = v.(*string) - } - if k == "TopicName" { - request.TopicName = v.(*string) - } - if k == "MsgId" { - request.MsgId = v.(*string) - request.PulsarMsgId = v.(*string) - } - if k == "QueryDlqMsg" { - request.QueryDlqMsg = v.(*bool) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRocketMQMsg(request) - if err != nil { - errRet = err - return - } - - 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 - } - - message = response.Response - - return -} - -func (me *TdmqService) DescribeTdmqRabbitmqVirtualHostListByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqVirtualHostList []*tdmq.RabbitMQPrivateVirtualHost, errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDescribeRabbitMQVirtualHostListRequest() - ) - - defer 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 - ) - - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseTdmqClient().DescribeRabbitMQVirtualHostList(request) - if err != nil { - errRet = err - return - } - - 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.VirtualHostList) < 1 { - break - } - - rabbitmqVirtualHostList = append(rabbitmqVirtualHostList, response.Response.VirtualHostList...) - if len(response.Response.VirtualHostList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *TdmqService) DescribeTdmqRabbitmqUserById(ctx context.Context, instanceId, user string) (rabbitmqUser *tdmq.RabbitMQUser, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeRabbitMQUserRequest() - request.InstanceId = &instanceId - if user != "" { - request.User = &user - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRabbitMQUser(request) - if err != nil { - errRet = 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.RabbitMQUserList) < 1 { - return - } - - rabbitmqUser = response.Response.RabbitMQUserList[0] - return -} - -func (me *TdmqService) DeleteTdmqRabbitmqUserById(ctx context.Context, instanceId, user string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteRabbitMQUserRequest() - request.InstanceId = &instanceId - request.User = &user - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteRabbitMQUser(request) - if err != nil { - 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 *TdmqService) DescribeTdmqRabbitmqVirtualHostById(ctx context.Context, instanceId, virtualHost string) (rabbitmqVirtualHost *tdmq.RabbitMQVirtualHostInfo, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribeRabbitMQVirtualHostRequest() - request.InstanceId = &instanceId - if virtualHost != "" { - request.VirtualHost = &virtualHost - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRabbitMQVirtualHost(request) - if err != nil { - errRet = 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.VirtualHostList) < 1 { - return - } - - rabbitmqVirtualHost = response.Response.VirtualHostList[0] - return -} - -func (me *TdmqService) DeleteTdmqRabbitmqVirtualHostById(ctx context.Context, instanceId, virtualHost string) (errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDeleteRabbitMQVirtualHostRequest() - request.InstanceId = &instanceId - request.VirtualHost = &virtualHost - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteRabbitMQVirtualHost(request) - if err != nil { - 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 *TdmqService) DescribeTdmqRabbitmqVipInstanceById(ctx context.Context, instanceId string) (rabbitmqVipInstance *tdmq.DescribeRabbitMQVipInstanceResponseParams, errRet error) { - logId := getLogId(ctx) - - request := tdmq.NewDescribeRabbitMQVipInstanceRequest() - request.ClusterId = &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.UseTdmqClient().DescribeRabbitMQVipInstance(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - rabbitmqVipInstance = response.Response - return -} - -func (me *TdmqService) DeleteTdmqRabbitmqVipInstanceById(ctx context.Context, instanceId string) (errRet error) { - var ( - logId = getLogId(ctx) - request = tdmq.NewDeleteRabbitMQVipInstanceRequest() - ) - - 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.UseTdmqClient().DeleteRabbitMQVipInstance(request) - if err != nil { - 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 *TdmqService) DescribeTdmqRocketmqVipInstanceById(ctx context.Context, clusterId string) (rocketmqVipInstanceDetail *tdmq.DescribeRocketMQVipInstanceDetailResponseParams, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeRocketMQVipInstanceDetailRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstanceDetail(request) - if err != nil { - errRet = err - 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 { - rocketmqVipInstanceDetail = response.Response - } - - return -} - -func (me *TdmqService) DescribeTdmqRocketmqVipInstancesByFilter(ctx context.Context, clusterId string) (rocketmqVipInstances *tdmq.RocketMQVipInstance, errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDescribeRocketMQVipInstancesRequest() - request.Filters = []*tdmq.Filter{ - { - Name: common.StringPtr("InstanceIds"), - Values: common.StringPtrs([]string{clusterId}), - }, - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstances(request) - if err != nil { - errRet = err - 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.TotalCount == 0 || response.Response.Instances == nil { - return - } - - rocketmqVipInstances = response.Response.Instances[0] - return -} - -func (me *TdmqService) DeleteTdmqRocketmqVipInstanceById(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tdmq.NewDeleteRocketMQVipInstanceRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTdmqClient().DeleteRocketMQVipInstance(request) - if err != nil { - 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_tke.go b/tencentcloud/service_tencentcloud_tke.go deleted file mode 100644 index b1169b15f1..0000000000 --- a/tencentcloud/service_tencentcloud_tke.go +++ /dev/null @@ -1,2743 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" - tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/pkg/errors" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - "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 ClusterBasicSetting struct { - ClusterId string - ClusterOs string - ClusterOsType string - ClusterVersion string - ClusterName string - ClusterDescription string - ClusterLevel *string - AutoUpgradeClusterLevel *bool - VpcId string - ProjectId int64 - ClusterNodeNum int64 - ClusterStatus string - SubnetId string - Tags map[string]string -} - -type ClusterAdvancedSettings struct { - Ipvs bool - AsEnabled bool - EnableCustomizedPodCIDR bool - BasePodNumber int64 - ContainerRuntime string - RuntimeVersion string - NodeNameType string - ExtraArgs ClusterExtraArgs - NetworkType string - IsNonStaticIpMode bool - DeletionProtection bool - KubeProxyMode string - Property string - OsCustomizeType string - VpcCniType string -} - -type ClusterExtraArgs struct { - KubeAPIServer []string - KubeControllerManager []string - KubeScheduler []string -} - -type RunInstancesForNode struct { - Master []string - Work []string -} - -type InstanceAdvancedSettings struct { - MountTarget string - DockerGraphPath string - UserScript string - Unschedulable int64 - DesiredPodNum int64 - Labels []*tke.Label - DataDisks []*tke.DataDisk - ExtraArgs tke.InstanceExtraArgs -} - -type ClusterCidrSettings struct { - ClusterCidr string - IgnoreClusterCidrConflict bool - MaxNodePodNum int64 - MaxClusterServiceNum int64 - ServiceCIDR string - EniSubnetIds []string - ClaimExpiredSeconds int64 -} - -type ClusterInfo struct { - ClusterBasicSetting - ClusterCidrSettings - ClusterAdvancedSettings - - DeployType string - CreatedTime string -} - -type InstanceInfo struct { - InstanceId string - InstanceRole string - InstanceState string - FailedReason string - NodePoolId string - CreatedTime string - InstanceAdvancedSettings *tke.InstanceAdvancedSettings - InstanceDataDiskMountSetting *tke.InstanceDataDiskMountSetting - LanIp string -} - -type PrometheusConfigIds struct { - InstanceId string - ClusterType string - ClusterId string -} - -type Switch struct { - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - Audit *SwitchInfo `json:"Audit,omitempty" name:"Audit"` - Event *SwitchInfo `json:"Event,omitempty" name:"Event"` - Log *SwitchInfo `json:"Log,omitempty" name:"Log"` -} - -type SwitchInfo struct { - Enable *bool `json:"Enable,omitempty" name:"Enable"` - LogsetId *string `json:"LogsetId,omitempty" name:"LogsetId"` - TopicId *string `json:"TopicId,omitempty" name:"TopicId"` - Version *string `json:"Version,omitempty" name:"Version"` - UpgradeAble *bool `json:"UpgradeAble,omitempty" name:"UpgradeAble"` -} - -type DescribeLogSwitchesResponseParams struct { - SwitchSet []*Switch `json:"SwitchSet,omitempty" name:"SwitchSet"` - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` -} - -type DescribeLogSwitchesResponse struct { - tchttp.BaseResponse - Response *DescribeLogSwitchesResponseParams `json:"Response"` -} - -type TkeService struct { - client *connectivity.TencentCloudClient -} - -func (me *TkeService) DescribeClusterInstances(ctx context.Context, id string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterInstancesRequest() - - defer 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.ClusterId = &id - masters = make([]InstanceInfo, 0, 100) - workers = make([]InstanceInfo, 0, 100) - var offset int64 = 0 - var limit int64 = 20 - var has = map[string]bool{} - var total int64 = -1 - -getMoreData: - if total >= 0 && offset >= total { - return - } - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = err - return - } - if total < 0 { - total = int64(*response.Response.TotalCount) - } - - if len(response.Response.InstanceSet) > 0 { - offset += limit - } else { - // get empty set, we're done - return - } - - for _, item := range response.Response.InstanceSet { - if has[*item.InstanceId] { - errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) - return - } - has[*item.InstanceId] = true - instanceInfo := InstanceInfo{ - InstanceId: *item.InstanceId, - InstanceRole: *item.InstanceRole, - InstanceState: *item.InstanceState, - FailedReason: *item.FailedReason, - InstanceAdvancedSettings: item.InstanceAdvancedSettings, - } - if item.CreatedTime != nil { - instanceInfo.CreatedTime = *item.CreatedTime - } - if item.NodePoolId != nil { - instanceInfo.NodePoolId = *item.NodePoolId - } - if item.LanIP != nil { - instanceInfo.LanIp = *item.LanIP - } - if instanceInfo.InstanceRole == TKE_ROLE_WORKER { - workers = append(workers, instanceInfo) - } else { - masters = append(masters, instanceInfo) - } - } - goto getMoreData - -} - -func (me *TkeService) DescribeClusterInstancesByRole(ctx context.Context, id, role string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterInstancesRequest() - - defer 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.ClusterId = &id - request.InstanceRole = &role - masters = make([]InstanceInfo, 0, 100) - workers = make([]InstanceInfo, 0, 100) - var offset int64 = 0 - var limit int64 = 20 - var has = map[string]bool{} - var total int64 = -1 - - for { - if total >= 0 && offset >= total { - break - } - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = err - return - } - if total < 0 { - total = int64(*response.Response.TotalCount) - } - - if len(response.Response.InstanceSet) == 0 { - // get empty set, we're done - break - } - - offset += limit - - for _, item := range response.Response.InstanceSet { - if has[*item.InstanceId] { - errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) - return - } - has[*item.InstanceId] = true - instanceInfo := InstanceInfo{ - InstanceId: *item.InstanceId, - InstanceRole: *item.InstanceRole, - InstanceState: *item.InstanceState, - FailedReason: *item.FailedReason, - InstanceAdvancedSettings: item.InstanceAdvancedSettings, - } - if item.CreatedTime != nil { - instanceInfo.CreatedTime = *item.CreatedTime - } - if item.NodePoolId != nil { - instanceInfo.NodePoolId = *item.NodePoolId - } - if item.LanIP != nil { - instanceInfo.LanIp = *item.LanIP - } - if instanceInfo.InstanceRole == TKE_ROLE_WORKER { - workers = append(workers, instanceInfo) - } else { - masters = append(masters, instanceInfo) - } - } - } - - return -} - -func (me *TkeService) DescribeClusters(ctx context.Context, id string, name string) (clusterInfos []ClusterInfo, errRet error) { - - logId := getLogId(ctx) - request := tke.NewDescribeClustersRequest() - - defer 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 id != "" && name != "" { - errRet = fmt.Errorf("cluster_id, cluster_name only one can be set one") - return - } - - if id != "" { - request.ClusterIds = []*string{&id} - } - - if name != "" { - filter := &tke.Filter{ - Name: helper.String("ClusterName"), - Values: []*string{&name}, - } - request.Filters = []*tke.Filter{filter} - } - - response, err := me.client.UseTkeClient().DescribeClusters(request) - - if err != nil { - errRet = err - return - } - - lenClusters := len(response.Response.Clusters) - - if lenClusters == 0 { - return - } - clusterInfos = make([]ClusterInfo, 0, lenClusters) - - for index := range response.Response.Clusters { - cluster := response.Response.Clusters[index] - var clusterInfo ClusterInfo - - clusterInfo.ClusterId = *cluster.ClusterId - clusterInfo.ClusterOs = *cluster.ClusterOs - clusterInfo.ClusterVersion = *cluster.ClusterVersion - clusterInfo.ClusterDescription = *cluster.ClusterDescription - clusterInfo.ClusterName = *cluster.ClusterName - clusterInfo.ClusterStatus = *cluster.ClusterStatus - clusterInfo.ClusterLevel = cluster.ClusterLevel - clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel - - clusterInfo.ProjectId = int64(*cluster.ProjectId) - clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId - clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) - - clusterInfo.IgnoreClusterCidrConflict = *cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict - clusterInfo.ClusterCidr = *cluster.ClusterNetworkSettings.ClusterCIDR - clusterInfo.MaxClusterServiceNum = int64(*cluster.ClusterNetworkSettings.MaxClusterServiceNum) - clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) - - clusterInfo.MaxNodePodNum = int64(*cluster.ClusterNetworkSettings.MaxNodePodNum) - clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) - clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs - clusterInfo.CreatedTime = *cluster.CreatedTime - - projectMap, err := helper.JsonToMap(*cluster.Property) - if err != nil { - errRet = err - return - } - if projectMap["VpcCniType"] != nil { - vpcCniType := projectMap["VpcCniType"].(string) - clusterInfo.VpcCniType = vpcCniType - } - - if len(cluster.TagSpecification) > 0 { - clusterInfo.Tags = make(map[string]string) - for _, tag := range cluster.TagSpecification[0].Tags { - clusterInfo.Tags[*tag.Key] = *tag.Value - } - } - - clusterInfos = append(clusterInfos, clusterInfo) - } - return -} - -func (me *TkeService) DescribeCluster(ctx context.Context, id string) ( - clusterInfo ClusterInfo, - has bool, - errRet error, -) { - - logId := getLogId(ctx) - request := tke.NewDescribeClustersRequest() - - defer 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.ClusterIds = []*string{&id} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusters(request) - - if err != nil { - errRet = err - return - } - - if len(response.Response.Clusters) == 0 { - return - } - - has = true - cluster := response.Response.Clusters[0] - clusterInfo.ClusterId = *cluster.ClusterId - clusterInfo.ClusterOs = *cluster.ClusterOs - clusterInfo.ClusterVersion = *cluster.ClusterVersion - clusterInfo.ClusterDescription = *cluster.ClusterDescription - clusterInfo.ClusterName = *cluster.ClusterName - clusterInfo.ClusterStatus = *cluster.ClusterStatus - clusterInfo.ClusterLevel = cluster.ClusterLevel - clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel - - clusterInfo.ProjectId = int64(*cluster.ProjectId) - clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId - clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) - - clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) - clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs - clusterInfo.Property = helper.PString(cluster.Property) - clusterInfo.OsCustomizeType = helper.PString(cluster.OsCustomizeType) - clusterInfo.ContainerRuntime = helper.PString(cluster.ContainerRuntime) - clusterInfo.DeletionProtection = helper.PBool(cluster.DeletionProtection) - clusterInfo.RuntimeVersion = helper.PString(cluster.RuntimeVersion) - if cluster.ClusterNetworkSettings != nil { - clusterInfo.KubeProxyMode = helper.PString(cluster.ClusterNetworkSettings.KubeProxyMode) - clusterInfo.IgnoreClusterCidrConflict = helper.PBool(cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict) - clusterInfo.ClusterCidr = helper.PString(cluster.ClusterNetworkSettings.ClusterCIDR) - clusterInfo.MaxClusterServiceNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxClusterServiceNum)) - clusterInfo.MaxNodePodNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxNodePodNum)) - clusterInfo.ServiceCIDR = helper.PString(cluster.ClusterNetworkSettings.ServiceCIDR) - } - clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) - - projectMap, err := helper.JsonToMap(*cluster.Property) - if err != nil { - errRet = err - return - } - if projectMap["VpcCniType"] != nil { - vpcCniType := projectMap["VpcCniType"].(string) - clusterInfo.VpcCniType = vpcCniType - } - if projectMap["NetworkType"] != nil { - networkType := projectMap["NetworkType"].(string) - clusterInfo.NetworkType = networkType - } - - if len(cluster.TagSpecification) > 0 { - clusterInfo.Tags = make(map[string]string) - for _, tag := range cluster.TagSpecification[0].Tags { - clusterInfo.Tags[*tag.Key] = *tag.Value - } - } - - return -} - -func (me *TkeService) DescribeClusterCommonNames(ctx context.Context, request *tke.DescribeClusterCommonNamesRequest) (commonNames []*tke.CommonName, 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.UseTkeClient().DescribeClusterCommonNames(request) - - if err != nil { - errRet = err - return - } - - commonNames = response.Response.CommonNames - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *TkeService) DescribeClusterLevelAttribute(ctx context.Context, id string) (clusterLevels []*tke.ClusterLevelAttribute, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterLevelAttributeRequest() - defer 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 id != "" { - request.ClusterID = &id - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterLevelAttribute(request) - - if err != nil { - errRet = err - return - } - - clusterLevels = 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 *TkeService) DescribeClusterConfig(ctx context.Context, id string, isPublic bool) (config string, errRet error) { - - logId := getLogId(ctx) - request := tke.NewDescribeClusterKubeconfigRequest() - if isPublic { - request.IsExtranet = &isPublic - } - - defer 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.ClusterId = &id - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterKubeconfig(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - return - } - - config = *response.Response.Kubeconfig - return -} - -func (me *TkeService) GetUpgradeInstanceResult(ctx context.Context, id string) ( - done bool, - errRet error, -) { - - logId := getLogId(ctx) - request := tke.NewGetUpgradeInstanceProgressRequest() - - defer 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.ClusterId = &id - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().GetUpgradeInstanceProgress(request) - - if err != nil { - errRet = err - return - } - - lifeState := *response.Response.LifeState - - // all instances success, lifeState=done - if lifeState == "done" { - return true, nil - } else if lifeState != "process" { - return false, fmt.Errorf("upgrade instances failed, tke response lifeState is:%s", lifeState) - } - - // parent lifeState=process, check whether all instances in processing. - for _, inst := range response.Response.Instances { - if *inst.LifeState == "done" || *inst.LifeState == "pending" { - continue - } - if *inst.LifeState != "process" { - return false, fmt.Errorf("upgrade instances failed, "+ - "instanceId:%s, lifeState is:%s", *inst.InstanceID, *inst.LifeState) - } - // instance lifeState=process, check whether failed or not. - for _, detail := range inst.Detail { - if *detail.LifeState == "failed" { - return false, fmt.Errorf("upgrade instances failed, "+ - "instanceId:%s, detail.lifeState is:%s", *inst.InstanceID, *detail.LifeState) - } - } - } - - return -} - -func (me *TkeService) CreateCluster(ctx context.Context, - basic ClusterBasicSetting, - advanced ClusterAdvancedSettings, - cvms RunInstancesForNode, - iAdvanced InstanceAdvancedSettings, - cidrSetting ClusterCidrSettings, - tags map[string]string, - existedInstance []*tke.ExistedInstancesForNode, - overrideSettings *OverrideSettings, - iDiskMountSettings []*tke.InstanceDataDiskMountSetting, - extensionAddons []*tke.ExtensionAddon, -) (id string, errRet error) { - - logId := getLogId(ctx) - request := tke.NewCreateClusterRequest() - - defer 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.ClusterBasicSettings = &tke.ClusterBasicSettings{} - request.ClusterBasicSettings.ClusterOs = &basic.ClusterOs - request.ClusterBasicSettings.ClusterVersion = &basic.ClusterVersion - request.ClusterBasicSettings.ProjectId = &basic.ProjectId - request.ClusterBasicSettings.VpcId = &basic.VpcId - request.ClusterBasicSettings.ClusterDescription = &basic.ClusterDescription - request.ClusterBasicSettings.ClusterName = &basic.ClusterName - request.ClusterBasicSettings.OsCustomizeType = &basic.ClusterOsType - request.ClusterBasicSettings.ClusterLevel = basic.ClusterLevel - if basic.AutoUpgradeClusterLevel != nil { - request.ClusterBasicSettings.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ - IsAutoUpgrade: basic.AutoUpgradeClusterLevel, - } - } - if basic.SubnetId != "" { - request.ClusterBasicSettings.SubnetId = &basic.SubnetId - } - for k, v := range tags { - if len(request.ClusterBasicSettings.TagSpecification) == 0 { - request.ClusterBasicSettings.TagSpecification = []*tke.TagSpecification{{ - ResourceType: helper.String("cluster"), - }} - } - - request.ClusterBasicSettings.TagSpecification[0].Tags = append(request.ClusterBasicSettings.TagSpecification[0].Tags, &tke.Tag{ - Key: helper.String(k), - Value: helper.String(v), - }) - } - - request.ClusterAdvancedSettings = &tke.ClusterAdvancedSettings{} - request.ClusterAdvancedSettings.IPVS = &advanced.Ipvs - request.ClusterAdvancedSettings.AsEnabled = &advanced.AsEnabled - request.ClusterAdvancedSettings.ContainerRuntime = &advanced.ContainerRuntime - request.ClusterAdvancedSettings.RuntimeVersion = &advanced.RuntimeVersion - request.ClusterAdvancedSettings.NodeNameType = &advanced.NodeNameType - request.ClusterAdvancedSettings.EnableCustomizedPodCIDR = &advanced.EnableCustomizedPodCIDR - request.ClusterAdvancedSettings.BasePodNumber = &advanced.BasePodNumber - request.ClusterAdvancedSettings.ExtraArgs = &tke.ClusterExtraArgs{ - KubeAPIServer: common.StringPtrs(advanced.ExtraArgs.KubeAPIServer), - KubeControllerManager: common.StringPtrs(advanced.ExtraArgs.KubeControllerManager), - KubeScheduler: common.StringPtrs(advanced.ExtraArgs.KubeScheduler), - } - request.ClusterAdvancedSettings.NetworkType = &advanced.NetworkType - request.ClusterAdvancedSettings.IsNonStaticIpMode = &advanced.IsNonStaticIpMode - request.ClusterAdvancedSettings.DeletionProtection = &advanced.DeletionProtection - request.ClusterAdvancedSettings.KubeProxyMode = &advanced.KubeProxyMode - request.ClusterAdvancedSettings.VpcCniType = &advanced.VpcCniType - - request.InstanceAdvancedSettings = &tke.InstanceAdvancedSettings{} - request.InstanceAdvancedSettings.MountTarget = &iAdvanced.MountTarget - request.InstanceAdvancedSettings.DockerGraphPath = &iAdvanced.DockerGraphPath - request.InstanceAdvancedSettings.UserScript = &iAdvanced.UserScript - request.InstanceAdvancedSettings.Unschedulable = &iAdvanced.Unschedulable - request.InstanceAdvancedSettings.DesiredPodNumber = &iAdvanced.DesiredPodNum - if len(iAdvanced.ExtraArgs.Kubelet) > 0 { - request.InstanceAdvancedSettings.ExtraArgs = &iAdvanced.ExtraArgs - } - - if len(iAdvanced.Labels) > 0 { - request.InstanceAdvancedSettings.Labels = iAdvanced.Labels - } - - if len(iAdvanced.DataDisks) > 0 { - request.InstanceAdvancedSettings.DataDisks = iAdvanced.DataDisks - } - - if len(extensionAddons) > 0 { - request.ExtensionAddons = extensionAddons - } - - if overrideSettings != nil { - if len(overrideSettings.Master)+len(overrideSettings.Work) > 0 && - len(overrideSettings.Master)+len(overrideSettings.Work) != (len(cvms.Master)+len(cvms.Work)) { - return "", fmt.Errorf("len(overrideSettings) != (len(cvms.Master)+len(cvms.Work))") - } - } - - request.RunInstancesForNode = []*tke.RunInstancesForNode{} - - if len(cvms.Master) != 0 { - - var node tke.RunInstancesForNode - node.NodeRole = helper.String(TKE_ROLE_MASTER_ETCD) - node.RunInstancesPara = []*string{} - request.ClusterType = helper.String(TKE_DEPLOY_TYPE_INDEPENDENT) - for v := range cvms.Master { - node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Master[v]) - if overrideSettings != nil && len(overrideSettings.Master) != 0 { - node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Master[v]) - } - } - request.RunInstancesForNode = append(request.RunInstancesForNode, &node) - - } else { - request.ClusterType = helper.String(TKE_DEPLOY_TYPE_MANAGED) - } - - if len(cvms.Work) != 0 { - var node tke.RunInstancesForNode - node.NodeRole = helper.String(TKE_ROLE_WORKER) - node.RunInstancesPara = []*string{} - for v := range cvms.Work { - node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Work[v]) - if overrideSettings != nil && len(overrideSettings.Work) != 0 { - node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Work[v]) - } - } - request.RunInstancesForNode = append(request.RunInstancesForNode, &node) - } - - if len(iDiskMountSettings) != 0 { - request.InstanceDataDiskMountSettings = iDiskMountSettings - } - - request.ClusterCIDRSettings = &tke.ClusterCIDRSettings{} - - maxNodePodNum := uint64(cidrSetting.MaxNodePodNum) - request.ClusterCIDRSettings.MaxNodePodNum = &maxNodePodNum - - maxClusterServiceNum := uint64(cidrSetting.MaxClusterServiceNum) - request.ClusterCIDRSettings.MaxClusterServiceNum = &maxClusterServiceNum - request.ClusterCIDRSettings.ClusterCIDR = &cidrSetting.ClusterCidr - request.ClusterCIDRSettings.IgnoreClusterCIDRConflict = &cidrSetting.IgnoreClusterCidrConflict - request.ClusterCIDRSettings.ServiceCIDR = &cidrSetting.ServiceCIDR - request.ClusterCIDRSettings.EniSubnetIds = common.StringPtrs(cidrSetting.EniSubnetIds) - request.ClusterCIDRSettings.ClaimExpiredSeconds = &cidrSetting.ClaimExpiredSeconds - - if len(existedInstance) > 0 { - request.ExistedInstancesForNode = existedInstance - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateCluster(request) - - if err != nil { - errRet = err - return - } - - id = *response.Response.ClusterId - return -} - -func (me *TkeService) CreateClusterInstances(ctx context.Context, - id string, runInstancePara string, - iAdvanced tke.InstanceAdvancedSettings) (instanceIds []string, errRet error) { - logId := getLogId(ctx) - request := tke.NewCreateClusterInstancesRequest() - - defer 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.ClusterId = &id - request.RunInstancePara = &runInstancePara - - request.InstanceAdvancedSettings = &iAdvanced - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateClusterInstances(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("CreateClusterInstances return nil response") - return - } - - instanceIds = make([]string, 0, len(response.Response.InstanceIdSet)) - - for _, v := range response.Response.InstanceIdSet { - - instanceIds = append(instanceIds, *v) - } - return -} - -func (me *TkeService) CheckOneOfClusterNodeReady(ctx context.Context, clusterId string, mustHaveWorkers bool) error { - return resource.Retry(readRetryTimeout*5, func() *resource.RetryError { - _, workers, err := me.DescribeClusterInstances(ctx, clusterId) - if err != nil { - return retryError(err) - } - - // check serverless node - virtualNodes, err := me.DescribeClusterVirtualNode(ctx, clusterId) - if err != nil { - return retryError(err) - } - - if len(workers) == 0 && len(virtualNodes) == 0 { - if mustHaveWorkers { - return resource.RetryableError(fmt.Errorf("waiting for workers created")) - } - return nil - } - - for i := range workers { - worker := workers[i] - if worker.InstanceState == "running" { - return nil - } - } - for i := range virtualNodes { - virtualNode := virtualNodes[i] - if virtualNode.Phase != nil && *virtualNode.Phase == "Running" { - return nil - } - } - - return resource.RetryableError(fmt.Errorf("cluster %s waiting for one of the workers ready", clusterId)) - }) -} - -/* -if cluster is creating, return error:TencentCloudSDKError] Code=InternalError.ClusterState -*/ -func (me *TkeService) DeleteClusterInstances(ctx context.Context, id string, instanceIds []string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewDeleteClusterInstancesRequest() - - defer 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.ClusterId = &id - request.InstanceIds = make([]*string, 0, len(instanceIds)) - - for index := range instanceIds { - request.InstanceIds = append(request.InstanceIds, &instanceIds[index]) - } - - request.InstanceDeleteMode = helper.String("terminate") - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterInstances(request) - return err -} - -func (me *TkeService) DeleteCluster(ctx context.Context, id string) (errRet error) { - - logId := getLogId(ctx) - request := tke.NewDeleteClusterRequest() - - defer 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.ClusterId = &id - request.InstanceDeleteMode = helper.String("terminate") - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteCluster(request) - - return err -} - -func (me *TkeService) DescribeClusterSecurity(ctx context.Context, id string) (ret *tke.DescribeClusterSecurityResponse, errRet error) { - - logId := getLogId(ctx) - request := tke.NewDescribeClusterSecurityRequest() - - defer 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.ClusterId = &id - - return me.client.UseTkeClient().DescribeClusterSecurity(request) -} - -func (me *TkeService) CreateClusterAsGroup(ctx context.Context, id, groupPara, configPara string, labels []*tke.Label, iAdvanced InstanceAdvancedSettings) (asGroupId string, errRet error) { - return "", fmt.Errorf("Cluster AS Group has OFFLINE") -} - -func (me *TkeService) DescribeClusterAsGroupsByGroupId(ctx context.Context, id string, groupId string) (clusterAsGroupSet *tke.ClusterAsGroup, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterAsGroupsRequest() - - request.ClusterId = &id - request.AutoScalingGroupIds = []*string{&groupId} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterAsGroups(request) - - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), err.Error()) - errRet = err - return - } - - if len(response.Response.ClusterAsGroupSet) > 0 { - clusterAsGroupSet = response.Response.ClusterAsGroupSet[0] - } - return -} - -func (me *TkeService) DeleteClusterAsGroups(ctx context.Context, id, asGroupId string) (errRet error) { - - logId := getLogId(ctx) - request := tke.NewDeleteClusterAsGroupsRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.AutoScalingGroupIds = []*string{&asGroupId} - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterAsGroups(request) - if err != nil { - errRet = err - } - return -} - -/* -open internet access -*/ -func (me *TkeService) CreateClusterEndpoint(ctx context.Context, id string, subnetId, securityGroupId string, internet bool, domain string, extensiveParameters string) (errRet error) { - logId := getLogId(ctx) - - request := tke.NewCreateClusterEndpointRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - request.IsExtranet = &internet - - if subnetId != "" { - request.SubnetId = &subnetId - } - - if securityGroupId != "" && internet { - request.SecurityGroup = &securityGroupId - } - - if domain != "" { - request.Domain = helper.String(domain) - } - - if extensiveParameters != "" { - request.ExtensiveParameters = helper.String(extensiveParameters) - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().CreateClusterEndpoint(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeClusterEndpointStatus(ctx context.Context, id string, isExtranet bool) (status string, message string, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeClusterEndpointStatusRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.IsExtranet = &isExtranet - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterEndpointStatus(request) - if err != nil { - errRet = err - return - } - if response.Response == nil || response.Response.Status == nil { - errRet = fmt.Errorf("sdk DescribeClusterEndpointStatus return empty status") - return - } - status = *response.Response.Status - message = status - return -} -func (me *TkeService) DescribeClusterEndpoints(ctx context.Context, id string) (response tke.DescribeClusterEndpointsResponseParams, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeClusterEndpointsRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().DescribeClusterEndpoints(request) - if err != nil { - errRet = err - return - } - if resp.Response == nil { - errRet = fmt.Errorf("sdk DescribeClusterEndpoints return empty") - return - } - - return *resp.Response, errRet -} - -func (me *TkeService) DeleteClusterEndpoint(ctx context.Context, id string, isInternet bool) (errRet error) { - logId := getLogId(ctx) - request := tke.NewDeleteClusterEndpointRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.IsExtranet = &isInternet - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().DeleteClusterEndpoint(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterEndpointSP(ctx context.Context, id string, securityPolicies []string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyClusterEndpointSPRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SecurityPolicies = helper.Strings(securityPolicies) - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterEndpointSG(ctx context.Context, id string, securityGroup string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyClusterEndpointSPRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SecurityGroup = &securityGroup - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterAttribute(ctx context.Context, id string, projectId int64, clusterName, clusterDesc, clusterLevel string, autoUpgradeClusterLevel bool) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyClusterAttributeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.ProjectId = &projectId - request.ClusterName = &clusterName - request.ClusterDesc = &clusterDesc - - if clusterLevel != "" { - request.ClusterLevel = &clusterLevel - } - - request.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ - IsAutoUpgrade: &autoUpgradeClusterLevel, - } - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterAttribute(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) EnableVpcCniNetworkType(ctx context.Context, id string, vpcCniType string, enableStaticIp bool, subnets []string, expiredSeconds uint64) (errRet error) { - logId := getLogId(ctx) - request := tke.NewEnableVpcCniNetworkTypeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - request.ClusterId = &id - request.VpcCniType = &vpcCniType - request.EnableStaticIp = &enableStaticIp - request.Subnets = common.StringPtrs(subnets) - request.ExpiredSeconds = &expiredSeconds - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().EnableVpcCniNetworkType(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DescribeEnableVpcCniProgress(ctx context.Context, id string) (status, message string, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeEnableVpcCniProgressRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeEnableVpcCniProgress(request) - if err != nil { - errRet = err - return - } - - status = *response.Response.Status - message = *response.Response.ErrorMessage - return -} - -func (me *TkeService) DisableVpcCniNetworkType(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewDisableVpcCniNetworkTypeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().DisableVpcCniNetworkType(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) AddVpcCniSubnets(ctx context.Context, id string, subnets []string, vpcId string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewAddVpcCniSubnetsRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SubnetIds = common.StringPtrs(subnets) - request.VpcId = &vpcId - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().AddVpcCniSubnets(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clusterVersion string, extraArgs interface{}) (errRet error) { - logId := getLogId(ctx) - request := tke.NewUpdateClusterVersionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - if extraArgs != nil && len(extraArgs.([]interface{})) > 0 { - // the first elem is in use - extraInterface := extraArgs.([]interface{}) - extraMap := extraInterface[0].(map[string]interface{}) - - kas := make([]*string, 0) - if kaArgs, exist := extraMap["kube_apiserver"]; exist { - args := kaArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kas = append(kas, &str) - } - } - kcms := make([]*string, 0) - if kcmArgs, exist := extraMap["kube_controller_manager"]; exist { - args := kcmArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kcms = append(kcms, &str) - } - } - kss := make([]*string, 0) - if ksArgs, exist := extraMap["kube_scheduler"]; exist { - args := ksArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kss = append(kss, &str) - } - } - - request.ExtraArgs = &tke.ClusterExtraArgs{ - KubeAPIServer: kas, - KubeControllerManager: kcms, - KubeScheduler: kss, - } - } - - request.ClusterId = &id - request.DstVersion = &clusterVersion - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().UpdateClusterVersion(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DescribeKubernetesAvailableClusterVersionsByFilter(ctx context.Context, param map[string]interface{}) (availableClusterVersions *tke.DescribeAvailableClusterVersionResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = tke.NewDescribeAvailableClusterVersionRequest() - ) - - defer 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 == "cluster_id" { - request.ClusterId = v.(*string) - } - if k == "cluster_ids" { - request.ClusterIds = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response != nil { - availableClusterVersions = response.Response - } - return -} - -func (me *TkeService) CheckClusterVersion(ctx context.Context, id string, clusterVersion string) (isOk bool, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeAvailableClusterVersionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) - if err != nil { - errRet = err - return - } - - if resp == nil || resp.Response == nil || resp.Response.Versions == nil { - return - } - versions := resp.Response.Versions - for _, v := range versions { - if *v == clusterVersion { - isOk = true - return - } - } - - return -} - -func (me *TkeService) CheckInstancesUpgradeAble(ctx context.Context, id string, upgradeType string) (instanceIds []string, errRet error) { - logId := getLogId(ctx) - request := tke.NewCheckInstancesUpgradeAbleRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.UpgradeType = &upgradeType - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().CheckInstancesUpgradeAble(request) - if err != nil { - errRet = err - return - } - - if resp == nil || resp.Response == nil || resp.Response.UpgradeAbleInstances == nil { - return - } - for _, inst := range resp.Response.UpgradeAbleInstances { - instanceIds = append(instanceIds, *inst.InstanceId) - } - - return -} - -func (me *TkeService) UpgradeClusterInstances(ctx context.Context, id string, upgradeType string, instanceIds []string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewUpgradeClusterInstancesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - op := "create" - request.Operation = &op - request.ClusterId = &id - request.UpgradeType = &upgradeType - request.InstanceIds = helper.Strings(instanceIds) - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().UpgradeClusterInstances(request) - if err != nil { - errRet = err - return - } - - return -} - -func (me *TkeService) DescribeImages(ctx context.Context) (imageIds []string, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeImagesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeImages(request) - if err != nil { - errRet = err - return - } - - for _, image := range response.Response.ImageInstanceSet { - imageIds = append(imageIds, *image.ImageId) - } - return -} - -func GetTkeLabels(d *schema.ResourceData, k string) []*tke.Label { - labels := make([]*tke.Label, 0) - if raw, ok := d.GetOk(k); ok { - for k, v := range raw.(map[string]interface{}) { - labels = append(labels, &tke.Label{Name: helper.String(k), Value: helper.String(v.(string))}) - } - } - return labels -} - -func GetTkeTaints(d *schema.ResourceData, k string) []*tke.Taint { - taints := make([]*tke.Taint, 0) - if raw, ok := d.GetOk(k); ok { - for _, v := range raw.([]interface{}) { - vv := v.(map[string]interface{}) - taints = append(taints, &tke.Taint{Key: helper.String(vv["key"].(string)), Value: helper.String(vv["value"].(string)), Effect: helper.String(vv["effect"].(string))}) - } - } - return taints -} - -func (me *TkeService) ModifyClusterAsGroupAttribute(ctx context.Context, id, asGroupId string, maxSize, minSize int64) (errRet error) { - - logId := getLogId(ctx) - request := tke.NewModifyClusterAsGroupAttributeRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.ClusterAsGroupAttribute = &tke.ClusterAsGroupAttribute{ - AutoScalingGroupId: &asGroupId, - AutoScalingGroupRange: &tke.AutoScalingGroupRange{ - MaxSize: &maxSize, - MinSize: &minSize, - }, - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterAsGroupAttribute(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) CreateClusterNodePool(ctx context.Context, clusterId, name, groupPara, configPara string, enableAutoScale bool, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, iAdvanced tke.InstanceAdvancedSettings, deletionProtection bool) (asGroupId string, errRet error) { - logId := getLogId(ctx) - request := tke.NewCreateClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.Name = &name - request.AutoScalingGroupPara = &groupPara - request.LaunchConfigurePara = &configPara - request.InstanceAdvancedSettings = &iAdvanced - request.EnableAutoscale = &enableAutoScale - request.DeletionProtection = &deletionProtection - request.NodePoolOs = &nodeOs - if nodeOsType != "" { - request.OsCustomizeType = &nodeOsType - } - - if len(labels) > 0 { - request.Labels = labels - } - - if len(taints) > 0 { - request.Taints = taints - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateClusterNodePool(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.NodePoolId == nil { - errRet = fmt.Errorf("CreateClusterNodePool return nil response") - return - } - - asGroupId = *response.Response.NodePoolId - return -} - -func (me *TkeService) ModifyClusterNodePool(ctx context.Context, clusterId, nodePoolId string, name string, enableAutoScale bool, minSize int64, maxSize int64, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, tags map[string]string, deletionProtection bool) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.Taints = taints - request.Labels = labels - request.EnableAutoscale = &enableAutoScale - request.DeletionProtection = &deletionProtection - request.MaxNodesNum = &maxSize - request.MinNodesNum = &minSize - request.Name = &name - request.OsName = &nodeOs - request.OsCustomizeType = &nodeOsType - - if len(labels) > 0 { - request.Labels = labels - } - - if len(tags) > 0 { - for k, v := range tags { - key := k - val := v - request.Tags = append(request.Tags, &tke.Tag{ - Key: &key, - Value: &val, - }) - } - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterNodePool(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterNodePoolDesiredCapacity(ctx context.Context, clusterId, nodePoolId string, desiredCapacity int64) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyNodePoolDesiredCapacityAboutAsgRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.DesiredCapacity = &desiredCapacity - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyNodePoolDesiredCapacityAboutAsg(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterNodePoolInstanceTypes(ctx context.Context, clusterId, nodePoolId string, instanceTypes []*string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewModifyNodePoolInstanceTypesRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.InstanceTypes = instanceTypes - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyNodePoolInstanceTypes(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DeleteClusterNodePool(ctx context.Context, id, nodePoolId string, deleteKeepInstance bool) (errRet error) { - - logId := getLogId(ctx) - request := tke.NewDeleteClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.NodePoolIds = []*string{&nodePoolId} - request.KeepInstance = &deleteKeepInstance - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterNodePool(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeNodePool(ctx context.Context, clusterId string, nodePoolId string) ( - nodePool *tke.NodePool, - has bool, - errRet error, -) { - - logId := getLogId(ctx) - //the error code of cluster not exist is InternalError - //check cluster exist first - _, clusterHas, err := me.DescribeCluster(ctx, clusterId) - if err != nil { - errRet = err - return - } - if !clusterHas { - return - } - - request := tke.NewDescribeClusterNodePoolDetailRequest() - - defer 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.ClusterId = helper.String(clusterId) - request.NodePoolId = helper.String(nodePoolId) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterNodePoolDetail(request) - - if err != nil { - errRet = err - return - } - - if response.Response.NodePool == nil { - return - } - - has = true - nodePool = response.Response.NodePool - - return -} - -// node pool global config -func (me *TkeService) ModifyClusterNodePoolGlobalConfig(ctx context.Context, request *tke.ModifyClusterAsGroupOptionAttributeRequest) (errRet error) { - logId := getLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterAsGroupOptionAttribute(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeClusterNodePoolGlobalConfig(ctx context.Context, clusterId string) ( - npGlobalConfig *tke.ClusterAsGroupOption, - errRet error, -) { - - logId := getLogId(ctx) - //the error code of cluster not exist is InternalError - //check cluster exist first - _, clusterHas, err := me.DescribeCluster(ctx, clusterId) - if err != nil { - errRet = err - return - } - if !clusterHas { - return - } - - request := tke.NewDescribeClusterAsGroupOptionRequest() - - defer 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.ClusterId = helper.String(clusterId) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterAsGroupOption(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.ClusterAsGroupOption == nil { - return - } - - npGlobalConfig = response.Response.ClusterAsGroupOption - - return -} - -func (me *TkeService) WaitForAuthenticationOptionsUpdateSuccess(ctx context.Context, id string) (info *tke.ServiceAccountAuthenticationOptions, oidc *tke.OIDCConfigAuthenticationOptions, errRet error) { - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - options, state, config, err := me.DescribeClusterAuthenticationOptions(ctx, id) - info = options - oidc = config - - if err != nil { - return resource.NonRetryableError(err) - } - - if state == "Success" { - return nil - } - - if state == "Updating" { - return resource.RetryableError(fmt.Errorf("state is %s, retry", state)) - } - - return resource.NonRetryableError(fmt.Errorf("update failed: %s", state)) - }) - - if err != nil { - errRet = err - return - } - return -} - -// DescribeClusterAuthenticationOptions -// Field `ServiceAccounts.AutoCreateDiscoveryAnonymousAuth` will always return null by design -func (me *TkeService) DescribeClusterAuthenticationOptions(ctx context.Context, id string) (options *tke.ServiceAccountAuthenticationOptions, state string, oidcConfig *tke.OIDCConfigAuthenticationOptions, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterAuthenticationOptionsRequest() - request.ClusterId = helper.String(id) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeClusterAuthenticationOptions(request) - if err != nil { - errRet = err - } - - if res.Response != nil { - state = *res.Response.LatestOperationState - options = res.Response.ServiceAccounts - oidcConfig = res.Response.OIDCConfig - } - - return -} - -func (me *TkeService) ModifyClusterAuthenticationOptions(ctx context.Context, request *tke.ModifyClusterAuthenticationOptionsRequest) (errRet error) { - logId := getLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().ModifyClusterAuthenticationOptions(request) - if err != nil { - errRet = 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 *TkeService) ModifyDeletionProtection(ctx context.Context, id string, enable bool) (errRet error) { - var ( - logId = getLogId(ctx) - action string - ) - - if enable { - request := tke.NewEnableClusterDeletionProtectionRequest() - request.ClusterId = &id - action = request.GetAction() - ratelimit.Check(action) - response, err := me.client.UseTkeClient().EnableClusterDeletionProtection(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - } else { - request := tke.NewDisableClusterDeletionProtectionRequest() - request.ClusterId = &id - action = request.GetAction() - ratelimit.Check(action) - response, err := me.client.UseTkeClient().DisableClusterDeletionProtection(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", - logId, action, errRet.Error()) - } - }() - - return -} - -func (me *TkeService) AcquireClusterAdminRole(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewAcquireClusterAdminRoleRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().AcquireClusterAdminRole(request) - - if err != nil { - 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 *TkeService) DescribeExternalNodeSupportConfig(ctx context.Context, clusterId string) (resp *tke.DescribeExternalNodeSupportConfigResponseParams, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeExternalNodeSupportConfigRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeExternalNodeSupportConfig(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response, nil -} - -func (me *TkeService) DescribeClusterExtraArgs(ctx context.Context, clusterId string) (extraArgs *tke.ClusterExtraArgs, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeClusterExtraArgsRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeClusterExtraArgs(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response.ClusterExtraArgs, nil -} - -func (me *TkeService) DescribeIPAMD(ctx context.Context, clusterId string) (resp *tke.DescribeIPAMDResponseParams, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeIPAMDRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeIPAMD(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response, nil - -} - -func (me *TkeService) DescribeLogSwitches(ctx context.Context, clusterId string) (resp []*tke.Switch, errRet error) { - logId := getLogId(ctx) - request := tke.NewDescribeLogSwitchesRequest() - defer 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.ClusterIds = helper.StringsStringsPoint([]string{clusterId}) - request.ClusterType = helper.String("tke") - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeLogSwitches(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response.SwitchSet, nil -} - -func (me *TkeService) SwitchLogAgent(ctx context.Context, clusterId, rootDir string, enable bool) error { - if enable { - request := tke.NewInstallLogAgentRequest() - request.ClusterId = &clusterId - if rootDir != "" { - request.KubeletRootDir = &rootDir - } - return me.InstallLogAgent(ctx, request) - } - request := tke.NewUninstallLogAgentRequest() - request.ClusterId = &clusterId - return me.UninstallLogAgent(ctx, request) -} - -func (me *TkeService) SwitchEventPersistence(ctx context.Context, clusterId, logSetId, topicId string, - enable, deleteEventLog bool) error { - if enable { - request := tke.NewEnableEventPersistenceRequest() - request.ClusterId = &clusterId - if logSetId != "" { - request.LogsetId = &logSetId - } - if topicId != "" { - request.TopicId = &topicId - } - return me.EnableEventPersistence(ctx, request) - } - - request := tke.NewDisableEventPersistenceRequest() - request.ClusterId = &clusterId - request.DeleteLogSetAndTopic = &deleteEventLog - return me.DisableEventPersistence(ctx, request) -} - -func (me *TkeService) SwitchClusterAudit(ctx context.Context, clusterId, logSetId, topicId string, - enable, deleteAuditLog bool) error { - if enable { - request := tke.NewEnableClusterAuditRequest() - request.ClusterId = &clusterId - if logSetId != "" { - request.LogsetId = &logSetId - } - if topicId != "" { - request.TopicId = &topicId - } - return me.EnableClusterAudit(ctx, request) - } - request := tke.NewDisableClusterAuditRequest() - request.ClusterId = &clusterId - request.DeleteLogSetAndTopic = &deleteAuditLog - return me.DisableClusterAudit(ctx, request) -} - -func (me *TkeService) InstallLogAgent(ctx context.Context, request *tke.InstallLogAgentRequest) (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.UseTkeClient().InstallLogAgent(request) - - if err != nil { - 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 *TkeService) UninstallLogAgent(ctx context.Context, request *tke.UninstallLogAgentRequest) (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.UseTkeClient().UninstallLogAgent(request) - - if err != nil { - 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 *TkeService) EnableEventPersistence(ctx context.Context, request *tke.EnableEventPersistenceRequest) (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.UseTkeClient().EnableEventPersistence(request) - - if err != nil { - 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 *TkeService) DisableEventPersistence(ctx context.Context, request *tke.DisableEventPersistenceRequest) (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.UseTkeClient().DisableEventPersistence(request) - - if err != nil { - code := err.(*sdkErrors.TencentCloudSDKError).Code - if code == "InternalError.KubernetesDeleteOperationError" { - 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 *TkeService) EnableClusterAudit(ctx context.Context, request *tke.EnableClusterAuditRequest) (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.UseTkeClient().EnableClusterAudit(request) - - if err != nil { - 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 *TkeService) DisableClusterAudit(ctx context.Context, request *tke.DisableClusterAuditRequest) (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.UseTkeClient().DisableClusterAudit(request) - - if err != nil { - 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 *TkeService) DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx context.Context, clusterId, nodePoolId string) (instance *tke.VirtualNodePool, has bool, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeClusterVirtualNodePoolsRequest() - request.ClusterId = common.StringPtr(clusterId) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterVirtualNodePools(request) - - if err != nil { - errRet = err - 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 && len(response.Response.NodePoolSet) > 0 { - for _, nodePool := range response.Response.NodePoolSet { - if nodePool != nil && nodePool.NodePoolId != nil && *nodePool.NodePoolId == nodePoolId { - has = true - instance = nodePool - } - } - } - return -} - -func (me *TkeService) CreateClusterVirtualNodePool(ctx context.Context, request *tke.CreateClusterVirtualNodePoolRequest) (id 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.UseTkeClient().CreateClusterVirtualNodePool(request) - - if err != nil { - errRet = err - return - } - - 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.NodePoolId != nil { - id = *response.Response.NodePoolId - } - - return -} - -func (me *TkeService) DeleteClusterVirtualNodePool(ctx context.Context, request *tke.DeleteClusterVirtualNodePoolRequest) (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.UseTkeClient().DeleteClusterVirtualNodePool(request) - - if err != nil { - 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 *TkeService) ModifyClusterVirtualNodePool(ctx context.Context, request *tke.ModifyClusterVirtualNodePoolRequest) (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.UseTkeClient().ModifyClusterVirtualNodePool(request) - - if err != nil { - 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 *TkeService) DescribeClusterVirtualNode(ctx context.Context, clusterId string) (virtualNodes []tke.VirtualNode, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeClusterVirtualNodeRequest() - request.ClusterId = common.StringPtr(clusterId) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterVirtualNode(request) - - if err != nil { - errRet = err - 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 && len(response.Response.Nodes) > 0 { - for _, node := range response.Response.Nodes { - if node != nil { - virtualNodes = append(virtualNodes, *node) - } - } - } - return -} - -func ModifySecurityServiceOfCvmInNodePool(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, cvmSvc *CvmService, client *connectivity.TencentCloudClient, clusterId string, nodePoolId string) error { - logId := getLogId(ctx) - - if d.HasChange("auto_scaling_config.0.enhanced_security_service") { - workersInsIdOfNodePool := make([]string, 0) - _, workers, err := tkeSvc.DescribeClusterInstances(ctx, clusterId) - if err != nil { - return err - } - for _, worker := range workers { - if worker.NodePoolId != "" && worker.NodePoolId == nodePoolId { - workersInsIdOfNodePool = append(workersInsIdOfNodePool, worker.InstanceId) - } - } - - const BatchProcessedInsLimit = 100 // limit 100 items to change each request - var ( - launchConfigRaw []interface{} - dMap map[string]interface{} - ) - if raw, ok := d.GetOk("auto_scaling_config"); ok { - launchConfigRaw = raw.([]interface{}) - dMap = launchConfigRaw[0].(map[string]interface{}) - } - - if v, ok := dMap["enhanced_security_service"]; ok && !v.(bool) { - // uninstall, cwp/DeleteMachine, need uuid - // https://cloud.tencent.com/document/product/296/19844 - for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { - var reqInstanceIds []string - if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { - reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] - } else { - reqInstanceIds = workersInsIdOfNodePool[i:] - } - // get uuid - instanceSet, err := cvmSvc.DescribeInstanceSetByIds(ctx, helper.StrListValToStr(reqInstanceIds)) - if err != nil { - return err - } - // call cwp/DeleteMachine - for _, ins := range instanceSet { - requestDeleteMachine := cwp.NewDeleteMachineRequest() - requestDeleteMachine.Uuid = ins.Uuid - if _, err := client.UseCwpClient().DeleteMachine(requestDeleteMachine); err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, requestDeleteMachine.GetAction(), requestDeleteMachine.ToJsonString(), err.Error()) - return err - } - } - } - } else { - // default is true, install security agent - // tat/InvokeCommand, CommandId=cmd-d8jj2skv, instanceId is enough - // https://cloud.tencent.com/document/product/1340/52678 - for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { - var reqInstanceIds []string - if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { - reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] - } else { - reqInstanceIds = workersInsIdOfNodePool[i:] - } - requestInvokeCommand := tat.NewInvokeCommandRequest() - requestInvokeCommand.InstanceIds = helper.StringsStringsPoint(reqInstanceIds) - requestInvokeCommand.CommandId = helper.String(InstallSecurityAgentCommandId) - requestInvokeCommand.Parameters = helper.String("{}") - requestInvokeCommand.Timeout = helper.Uint64(60) - _, err := client.UseTatClient().InvokeCommand(requestInvokeCommand) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, requestInvokeCommand.GetAction(), requestInvokeCommand.ToJsonString(), err.Error()) - return err - } - } - } - } - return nil -} - -func ModifyClusterInternetOrIntranetAccess(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, - isInternet bool, enable bool, sg string, subnetId string, domain string) error { - - id := d.Id() - var accessType string - if isInternet { - accessType = "cluster internet" - } else { - accessType = "cluster intranet" - } - // open access - if enable { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr := tkeSvc.CreateClusterEndpoint(ctx, id, subnetId, sg, isInternet, domain, "") - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if err != nil { - return err - } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) - if inErr != nil { - return retryError(inErr) - } - if status == TkeInternetStatusCreating { - return resource.RetryableError( - fmt.Errorf("%s create %s endpoint status still is %s", id, accessType, status)) - } - if status == TkeInternetStatusNotfound || status == TkeInternetStatusCreated { - return nil - } - return resource.NonRetryableError( - fmt.Errorf("%s create %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) - }) - if err != nil { - return err - } - } else { // close access - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - inErr := tkeSvc.DeleteClusterEndpoint(ctx, id, isInternet) - if inErr != nil { - return retryError(inErr) - } - return nil - }) - if err != nil { - return err - } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) - if inErr != nil { - return retryError(inErr) - } - if status == TkeInternetStatusDeleting { - return resource.RetryableError( - fmt.Errorf("%s close %s endpoint status still is %s", id, accessType, status)) - } - if status == TkeInternetStatusNotfound || status == TkeInternetStatusDeleted || status == TkeInternetStatusCreated { - return nil - } - return resource.NonRetryableError( - fmt.Errorf("%s close %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) - }) - if err != nil { - return err - } - } - return nil -} - -func (me *TkeService) createBackupStorageLocation(ctx context.Context, request *tke.CreateBackupStorageLocationRequest) (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.UseTkeClient().CreateBackupStorageLocation(request) - - if err != nil { - 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 *TkeService) describeBackupStorageLocations(ctx context.Context, names []string) (locations []*tke.BackupStorageLocation, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeBackupStorageLocationsRequest() - request.Names = common.StringPtrs(names) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeBackupStorageLocations(request) - - if err != nil { - errRet = err - 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 && len(response.Response.BackupStorageLocationSet) > 0 { - locations = append(locations, response.Response.BackupStorageLocationSet...) - } - return - -} - -func (me *TkeService) deleteBackupStorageLocation(ctx context.Context, name string) (errRet error) { - logId := getLogId(ctx) - request := tke.NewDeleteBackupStorageLocationRequest() - - defer 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.Name = common.StringPtr(name) - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteBackupStorageLocation(request) - return err -} - -func (me *TkeService) DescribeTkeEncryptionProtectionById(ctx context.Context, clusterId string) (encryptionProtection *tke.DescribeEncryptionStatusResponseParams, errRet error) { - logId := getLogId(ctx) - - request := tke.NewDescribeEncryptionStatusRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - encryptionProtection = response.Response - return -} - -func (me *TkeService) DeleteTkeEncryptionProtectionById(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) - - request := tke.NewDisableEncryptionProtectionRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DisableEncryptionProtection(request) - if err != nil { - 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 *TkeService) TkeEncryptionProtectionStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := contextNil - - logId := getLogId(ctx) - - request := tke.NewDescribeEncryptionStatusRequest() - request.ClusterId = helper.String(clusterId) - - var errRet error - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - object, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) - - if err != nil { - return nil, "", err - } - - if err != nil { - errRet = err - return object, "", err - } - - return object, helper.PString(object.Response.Status), nil - } -} - -func (me *TkeService) DescribeKubernetesClusterInstancesByFilter(ctx context.Context, param map[string]interface{}) (clusterInstances []*tke.Instance, errRet error) { - var ( - logId = getLogId(ctx) - request = tke.NewDescribeClusterInstancesRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "InstanceIds" { - request.InstanceIds = v.([]*string) - } - if k == "InstanceRole" { - request.InstanceRole = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tke.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = 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 - } - - clusterInstances = response.Response.InstanceSet - return -} - -func (me *TkeService) DescribeKubernetesClusterNodePoolsByFilter(ctx context.Context, param map[string]interface{}) (clusterNodePools []*tke.NodePool, errRet error) { - var ( - logId = getLogId(ctx) - request = tke.NewDescribeClusterNodePoolsRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tke.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterNodePools(request) - if err != nil { - errRet = 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.NodePoolSet) < 1 { - return - } - - clusterNodePools = response.Response.NodePoolSet - return -} diff --git a/tencentcloud/service_tencentcloud_vpc.go b/tencentcloud/service_tencentcloud_vpc.go deleted file mode 100644 index 11ee1c766a..0000000000 --- a/tencentcloud/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8143 +0,0 @@ -package tencentcloud - -import ( - "context" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "log" - "net" - "regexp" - "strconv" - "strings" - "sync" - "time" - - "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 -} - -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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseVpcClient().CreateVpc(request) - if err != nil { - return 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseVpcClient().DescribeVpcs(request) - if err != nil { - return retryError(err, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseVpcClient().DescribeSubnets(request) - if err != nil { - return retryError(err, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseVpcClient().ModifyVpcAttribute(request) - if err != nil { - return retryError(err, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseVpcClient().DeleteVpc(request) - if err != nil { - return retryError(err, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, err := me.client.UseVpcClient().CreateSubnet(request) - if err != nil { - return 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseVpcClient().ModifySubnetAttribute(request) - if err != nil { - return retryError(err, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err := me.client.UseVpcClient().DeleteSubnet(request) - if err != nil { - return retryError(err, 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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(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 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 := getLogId(ctx) - - request := vpc.NewDescribeSecurityGroupsRequest() - request.SecurityGroupIds = []*string{&id} - - if err := resource.Retry(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 retryError(err, 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 := getLogId(ctx) - - request := vpc.NewModifySecurityGroupAttributeRequest() - - request.SecurityGroupId = &id - request.GroupName = newName - request.GroupDescription = newDesc - - if err := resource.Retry(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 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 := getLogId(ctx) - - request := vpc.NewDeleteSecurityGroupRequest() - request.SecurityGroupId = &id - - if err := resource.Retry(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 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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(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 retryError(err, 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 := 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(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 retryError(err) - } - - return nil - }) -} - -func (me *VpcService) DeleteLiteRules(ctx context.Context, sgId string, rules []VpcSecurityGroupLiteRule, isIngress bool) error { - logId := 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(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 retryError(err) - } - - return nil - }) -} - -func (me *VpcService) AttachLiteRulesToSecurityGroup(ctx context.Context, sgId string, ingress, egress []VpcSecurityGroupLiteRule) error { - logId := 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 := getLogId(ctx) - - request := vpc.NewDescribeSecurityGroupPoliciesRequest() - request.SecurityGroupId = &sgId - - if err := resource.Retry(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 retryError(err) - } - - policySet := response.Response.SecurityGroupPolicySet - - for _, in := range policySet.Ingress { - if nilFields := 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 := 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 := getLogId(ctx) - - request := vpc.NewModifySecurityGroupPoliciesRequest() - request.SecurityGroupId = &sgId - request.SecurityGroupPolicySet = &vpc.SecurityGroupPolicySet{ - Version: helper.String("0"), - } - - return resource.Retry(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 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteNatGateway(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (result *vpc.DisassociateNatGatewayAddressResponse, 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()) - } - }() - - // 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 := 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(readRetryTimeout*3, func() *resource.RetryError { - eip, err := me.DescribeEipById(ctx, eipId) - if err != nil { - return 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(taskRequest.GetAction()) - taskResponse, err := me.client.UseVpcClient().DescribeTaskResult(taskRequest) - if err != nil { - return 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 := 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(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 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 := 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(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 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 := 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(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 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 := 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(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 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 := 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(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 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 := getLogId(ctx) - client := me.client.UseVpcClient() - - deleteRequest := vpc.NewDeleteNetworkInterfaceRequest() - deleteRequest.NetworkInterfaceId = &id - - if err := resource.Retry(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 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(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 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 := getLogId(ctx) - client := me.client.UseVpcClient() - - attachRequest := vpc.NewAttachNetworkInterfaceRequest() - attachRequest.NetworkInterfaceId = &eniId - attachRequest.InstanceId = &cvmId - - if err := resource.Retry(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 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*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 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 := getLogId(ctx) - client := me.client.UseVpcClient() - - request := vpc.NewDetachNetworkInterfaceRequest() - request.NetworkInterfaceId = &eniId - request.InstanceId = &cvmId - - if err := resource.Retry(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 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 := getLogId(ctx) - client := me.client.UseVpcClient() - - request := vpc.NewModifyPrivateIpAddressesAttributeRequest() - request.NetworkInterfaceId = &id - request.PrivateIpAddresses = []*vpc.PrivateIpAddressSpecification{ - { - PrivateIpAddress: &ip, - Description: desc, - }, - } - - if err := resource.Retry(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 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 = 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 := 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(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 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteHaVip(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func waitEniReady(ctx context.Context, id string, client *vpc.Client, wantIpv4s []string, dropIpv4s []string) error { - logId := 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(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 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 := getLogId(ctx) - - request := vpc.NewDescribeNetworkInterfacesRequest() - request.NetworkInterfaceIds = []*string{helper.String(id)} - - return resource.Retry(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 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 = 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseVpcClient().CreateNetworkAcl(request) - if err != 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 - } - - aclID = *response.Response.NetworkAcl.NetworkAclId - return -} - -func (me *VpcService) AttachRulesToACL(ctx context.Context, aclID string, ingressParm, egressParm []VpcACLRule) (errRet error) { - logId := 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 = 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err = me.client.UseVpcClient().ModifyNetworkAclEntries(request) - if err != 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 - } - - 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 = 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(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 retryError(err, InternalError) - } - return nil - }) - if err != nil { - errRet = err - return - } - } - } - - // delete acl - request.NetworkAclId = &aclID - err = resource.Retry(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 retryError(err, 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 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 - } - - return -} - -func (me *VpcService) ModifyVpcNetworkAcl(ctx context.Context, id *string, name *string) (errRet error) { - var ( - logId = getLogId(ctx) - err error - request = vpc.NewModifyNetworkAclAttributeRequest() - ) - - request.NetworkAclId = id - request.NetworkAclName = name - - err = resource.Retry(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 retryError(err, 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 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 - } - - return -} - -func (me *VpcService) AssociateAclSubnets(ctx context.Context, aclId string, subnetIds []string) (errRet error) { - var ( - logId = 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err = me.client.UseVpcClient().AssociateNetworkAclSubnets(request) - if err != 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 - } - return -} - -func (me *VpcService) DescribeNetWorkAcls(ctx context.Context, aclID, vpcID, name string) (info []*vpc.NetworkAcl, errRet error) { - var ( - logId = 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(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 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 - } - 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 = 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 = 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, err = me.client.UseVpcClient().DisassociateNetworkAclSubnets(request) - if err != 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 - } - return -} - -func (me *VpcService) DescribeVpngwById(ctx context.Context, vpngwId string) (has bool, gateway *vpc.VpnGateway, err error) { - var ( - logId = getLogId(ctx) - request = vpc.NewDescribeVpnGatewaysRequest() - response *vpc.DescribeVpnGatewaysResponse - ) - request.VpnGatewayIds = []*string{&vpngwId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseVpcClient().DescribeVpnGateways(request) - if err != nil { - ee, ok := err.(*sdkErrors.TencentCloudSDKError) - if !ok { - return retryError(err) - } - if ee.Code == VPCNotFound { - return nil - } else { - return 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 = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteVpnGateway(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func (me *VpcService) DescribeCustomerGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.CustomerGateway, errRet error) { - var ( - logId = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteCustomerGateway(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func (me *VpcService) CreateAddressTemplate(ctx context.Context, name string, addresses []interface{}) (templateId string, errRet error) { - logId := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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(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 retryError(errRet, 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet = me.client.UseVpcClient().ModifyVpnGatewayRoutes(request) - if errRet != nil { - return retryError(errRet, 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteVpnGatewayRoutes(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func (me *VpcService) DescribeVpnGatewayRoutes(ctx context.Context, vpnGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.VpnGatewayRoute) { - logId := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet = me.client.UseVpcClient().DescribeVpnGatewayRoutes(request) - if errRet != nil { - return retryError(errRet, 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeVpcTaskResult(request) - if err != nil { - return 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 := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeTaskResult(request) - if err != nil { - return 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 = getLogId(ctx) - request = vpc.NewDescribeVpnGatewaySslServersRequest() - response *vpc.DescribeVpnGatewaySslServersResponse - ) - request.SslVpnServerIds = []*string{&sslId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseVpcClient().DescribeVpnGatewaySslServers(request) - if err != nil { - ee, ok := err.(*sdkErrors.TencentCloudSDKError) - if !ok { - return retryError(err) - } - if ee.Code == VPCNotFound { - return nil - } else { - return 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 = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslServer(request) - if errRet != nil { - return retryError(errRet, 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 = getLogId(ctx) - request = vpc.NewDescribeVpnGatewaySslClientsRequest() - response *vpc.DescribeVpnGatewaySslClientsResponse - ) - request.SslVpnClientIds = []*string{&sslId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseVpcClient().DescribeVpnGatewaySslClients(request) - if err != nil { - ee, ok := err.(*sdkErrors.TencentCloudSDKError) - if !ok { - return retryError(err) - } - if ee.Code == VPCNotFound { - return nil - } else { - return 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 = 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslClient(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - taskId = response.Response.TaskId - return nil - }) - return -} - -func (me *VpcService) CreateNatGatewaySnat(ctx context.Context, natGatewayId string, snat *vpc.SourceIpTranslationNatRule) (errRet error) { - logId := 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(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 retryError(errRet, 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet = me.client.UseVpcClient().ModifyNatGatewaySourceIpTranslationNatRule(request) - if errRet != nil { - return retryError(errRet, 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 := 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(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - _, errRet = me.client.UseVpcClient().DeleteNatGatewaySourceIpTranslationNatRule(request) - if errRet != nil { - return retryError(errRet, InternalError) - } - return nil - }) - return -} - -func (me *VpcService) DescribeNatGatewaySnats(ctx context.Context, natGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.SourceIpTranslationNatRule) { - logId := 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(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet = me.client.UseVpcClient().DescribeNatGatewaySourceIpTranslationNatRules(request) - if errRet != nil { - return retryError(errRet, 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 := 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 := 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 := 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 := 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 := 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 = 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 := 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 = 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 := 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 = 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 = 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 = 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 = 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 = 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 = 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 := 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 := 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 := 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 := 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 = 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 := 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 := 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 = 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 -} -func (me *VpcService) DescribeVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (PeerConnectManager *vpc.PeerConnection, errRet error) { - logId := getLogId(ctx) - - request := vpc.NewDescribeVpcPeeringConnectionsRequest() - request.PeeringConnectionIds = []*string{&peeringConnectionId} - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DescribeVpcPeeringConnections(request) - if err != nil { - errRet = err - return - } - 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.PeerConnectionSet) < 1 { - return - } - - PeerConnectManager = response.Response.PeerConnectionSet[0] - return -} -func (me *VpcService) DeleteVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := getLogId(ctx) - - request := vpc.NewDeleteVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DeleteVpcPeeringConnection(request) - if err != nil { - 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) DeleteVpcPeerConnectAccecptOrRejectById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := getLogId(ctx) - - request := vpc.NewRejectVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().RejectVpcPeeringConnection(request) - if err != nil { - 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/antiddos/service_tencentcloud_antiddos.go b/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go index 014bf720b3..ae63d5e113 100644 --- a/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go +++ b/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go @@ -17,6 +17,10 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewAntiddosService(client *connectivity.TencentCloudClient) AntiddosService { + return AntiddosService{client: client} +} + type AntiddosService struct { client *connectivity.TencentCloudClient } diff --git a/tencentcloud/services/apigateway/extension_tags.go b/tencentcloud/services/apigateway/extension_tags.go deleted file mode 100644 index 6718959572..0000000000 --- a/tencentcloud/services/apigateway/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package apigateway - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go index 7b12fb7ec8..a917fdbf66 100644 --- a/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -111,7 +112,7 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -183,7 +184,7 @@ func resourceTencentCloudAPIGatewayAPIAppRead(d *schema.ResourceData, meta inter } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tags, err := tagService.DescribeResourceTags(ctx, "apigateway", "apiAppId", tcClient.Region, apiAppId) if err != nil { return err @@ -237,9 +238,9 @@ func resourceTencentCloudAPIGatewayAPIAppUpdate(d *schema.ResourceData, meta int if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("apigateway", "apiAppId", tcClient.Region, apiAppId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go index f58228279e..01e30366ae 100644 --- a/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go @@ -5,6 +5,7 @@ import ( "fmt" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -307,7 +308,7 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -469,7 +470,7 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte _ = d.Set("release_limit", releaseLimit) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "apigw", "service", tcClient.Region, serviceId) if err != nil { return err @@ -555,9 +556,9 @@ func resourceTencentCloudAPIGatewayServiceUpdate(d *schema.ResourceData, meta in if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("apigw", "service", tcClient.Region, serviceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err @@ -581,7 +582,7 @@ func resourceTencentCloudAPIGatewayServiceDelete(d *schema.ResourceData, meta in // del tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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) diff --git a/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go index 1ce58d4a85..97af061365 100644 --- a/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -485,7 +486,7 @@ func resourceTencentCloudAPIGatewayUpstreamCreate(d *schema.ResourceData, meta i ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -721,7 +722,7 @@ func resourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta int } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "apigateway", "upstreamId", tcClient.Region, upstreamId) if err != nil { return err @@ -973,9 +974,9 @@ func resourceTencentCloudAPIGatewayUpstreamUpdate(d *schema.ResourceData, meta i if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("apigateway", "upstreamId", tcClient.Region, upstreamId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/apigateway/service_tencentcloud_tag.go b/tencentcloud/services/apigateway/service_tencentcloud_tag.go deleted file mode 100644 index 1754b78261..0000000000 --- a/tencentcloud/services/apigateway/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/apm/extension_tags.go b/tencentcloud/services/apm/extension_tags.go deleted file mode 100644 index af628c6c3a..0000000000 --- a/tencentcloud/services/apm/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package apm - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/apm/resource_tc_apm_instance.go b/tencentcloud/services/apm/resource_tc_apm_instance.go index 150aaba158..1023ea9a76 100644 --- a/tencentcloud/services/apm/resource_tc_apm_instance.go +++ b/tencentcloud/services/apm/resource_tc_apm_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -104,7 +105,7 @@ func resourceTencentCloudApmInstanceCreate(d *schema.ResourceData, meta interfac ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::apm:%s:uin/:apm-instance/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -155,7 +156,7 @@ func resourceTencentCloudApmInstanceRead(d *schema.ResourceData, meta interface{ } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "apm", "apm-instance", tcClient.Region, d.Id()) if err != nil { return err @@ -225,9 +226,9 @@ func resourceTencentCloudApmInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("apm", "apm-instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/apm/service_tencentcloud_tag.go b/tencentcloud/services/apm/service_tencentcloud_tag.go deleted file mode 100644 index 60ec6f0bc6..0000000000 --- a/tencentcloud/services/apm/service_tencentcloud_tag.go +++ /dev/null @@ -1,409 +0,0 @@ -package apm - -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" -) - -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 -} - -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/as/extension_cvm.go b/tencentcloud/services/as/extension_cvm.go deleted file mode 100644 index be9053b37b..0000000000 --- a/tencentcloud/services/as/extension_cvm.go +++ /dev/null @@ -1,118 +0,0 @@ -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 deleted file mode 100644 index b0aab301b8..0000000000 --- a/tencentcloud/services/as/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package as - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/as/resource_tc_as_load_balancer.go b/tencentcloud/services/as/resource_tc_as_load_balancer.go new file mode 100644 index 0000000000..171b297b29 --- /dev/null +++ b/tencentcloud/services/as/resource_tc_as_load_balancer.go @@ -0,0 +1,337 @@ +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 ResourceTencentCloudAsLoadBalancer() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudAsLoadBalancerCreate, + Read: resourceTencentCloudAsLoadBalancerRead, + Update: resourceTencentCloudAsLoadBalancerUpdate, + Delete: resourceTencentCloudAsLoadBalancerDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "auto_scaling_group_id": { + Required: true, + Type: schema.TypeString, + Description: "ID of a scaling group.", + }, + + "load_balancer_ids": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "List of traditional load balancer IDs. The maximum number of traditional load balancers bound to each scaling group is 20. Both LoadBalancerIds and ForwardLoadBalancers can specify at most one at the same time.", + }, + + "forward_load_balancers": { + Optional: true, + Type: schema.TypeList, + Description: "List of application load balancers. The maximum number of application-type load balancers bound to each scaling group is 100. Both LoadBalancerIds and ForwardLoadBalancers can specify at most one at the same time.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "load_balancer_id": { + Type: schema.TypeString, + Required: true, + Description: "Application load balancer instance ID.", + }, + "listener_id": { + Type: schema.TypeString, + Required: true, + Description: "Application load balancer listener ID.", + }, + "target_attributes": { + Type: schema.TypeList, + Required: true, + Description: "List of TargetAttribute.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "port": { + Type: schema.TypeInt, + Required: true, + Description: "Target port.", + }, + "weight": { + Type: schema.TypeInt, + Required: true, + Description: "Target weight.", + }, + }, + }, + }, + "location_id": { + Type: schema.TypeString, + Optional: true, + Description: "Application load balancer location ID.", + }, + "region": { + Type: schema.TypeString, + Optional: true, + Description: "Load balancer instance region. Default value is the region of current auto scaling group. The format is the same as the public parameter Region, for example: ap-guangzhou.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudAsLoadBalancerCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_as_load_balancer.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = as.NewAttachLoadBalancersRequest() + autoScalingGroupId string + ) + if v, ok := d.GetOk("auto_scaling_group_id"); ok { + autoScalingGroupId = v.(string) + request.AutoScalingGroupId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("load_balancer_ids"); ok { + loadBalancerIdsSet := v.(*schema.Set).List() + for i := range loadBalancerIdsSet { + loadBalancerIds := loadBalancerIdsSet[i].(string) + request.LoadBalancerIds = append(request.LoadBalancerIds, &loadBalancerIds) + } + } + + if v, ok := d.GetOk("forward_load_balancers"); ok { + for _, item := range v.([]interface{}) { + dMap := item.(map[string]interface{}) + forwardLoadBalancer := as.ForwardLoadBalancer{} + if v, ok := dMap["load_balancer_id"]; ok { + forwardLoadBalancer.LoadBalancerId = helper.String(v.(string)) + } + if v, ok := dMap["listener_id"]; ok { + forwardLoadBalancer.ListenerId = helper.String(v.(string)) + } + if v, ok := dMap["target_attributes"]; ok { + for _, item := range v.([]interface{}) { + targetAttributesMap := item.(map[string]interface{}) + targetAttribute := as.TargetAttribute{} + if v, ok := targetAttributesMap["port"]; ok { + targetAttribute.Port = helper.IntUint64(v.(int)) + } + if v, ok := targetAttributesMap["weight"]; ok { + targetAttribute.Weight = helper.IntUint64(v.(int)) + } + forwardLoadBalancer.TargetAttributes = append(forwardLoadBalancer.TargetAttributes, &targetAttribute) + } + } + if v, ok := dMap["location_id"]; ok { + forwardLoadBalancer.LocationId = helper.String(v.(string)) + } + if v, ok := dMap["region"]; ok { + forwardLoadBalancer.Region = helper.String(v.(string)) + } + request.ForwardLoadBalancers = append(request.ForwardLoadBalancers, &forwardLoadBalancer) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().AttachLoadBalancers(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 as loadBalancer failed, reason:%+v", logId, err) + return err + } + + d.SetId(autoScalingGroupId) + + return resourceTencentCloudAsLoadBalancerRead(d, meta) +} + +func resourceTencentCloudAsLoadBalancerRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_as_load_balancer.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + autoScalingGroupId := d.Id() + + loadBalancer, err := service.DescribeAsLoadBalancerById(ctx, autoScalingGroupId) + if err != nil { + return err + } + + if loadBalancer == nil { + d.SetId("") + log.Printf("[WARN]%s resource `AsLoadBalancer` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if loadBalancer.AutoScalingGroupId != nil { + _ = d.Set("auto_scaling_group_id", loadBalancer.AutoScalingGroupId) + } + + if loadBalancer.LoadBalancerIdSet != nil { + _ = d.Set("load_balancer_ids", loadBalancer.LoadBalancerIdSet) + } + + if loadBalancer.ForwardLoadBalancerSet != nil { + forwardLoadBalancersList := []interface{}{} + for _, forwardLoadBalancers := range loadBalancer.ForwardLoadBalancerSet { + forwardLoadBalancersMap := map[string]interface{}{} + + if forwardLoadBalancers.LoadBalancerId != nil { + forwardLoadBalancersMap["load_balancer_id"] = forwardLoadBalancers.LoadBalancerId + } + + if forwardLoadBalancers.ListenerId != nil { + forwardLoadBalancersMap["listener_id"] = forwardLoadBalancers.ListenerId + } + + if forwardLoadBalancers.TargetAttributes != nil { + targetAttributesList := []interface{}{} + for _, targetAttributes := range forwardLoadBalancers.TargetAttributes { + targetAttributesMap := map[string]interface{}{} + + if targetAttributes.Port != nil { + targetAttributesMap["port"] = targetAttributes.Port + } + + if targetAttributes.Weight != nil { + targetAttributesMap["weight"] = targetAttributes.Weight + } + + targetAttributesList = append(targetAttributesList, targetAttributesMap) + } + + forwardLoadBalancersMap["target_attributes"] = []interface{}{targetAttributesList} + } + + if forwardLoadBalancers.LocationId != nil { + forwardLoadBalancersMap["location_id"] = forwardLoadBalancers.LocationId + } + + if forwardLoadBalancers.Region != nil { + forwardLoadBalancersMap["region"] = forwardLoadBalancers.Region + } + + forwardLoadBalancersList = append(forwardLoadBalancersList, forwardLoadBalancersMap) + } + + _ = d.Set("forward_load_balancers", forwardLoadBalancersList) + + } + + return nil +} + +func resourceTencentCloudAsLoadBalancerUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_as_load_balancer.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := as.NewModifyLoadBalancerTargetAttributesRequest() + + autoScalingGroupId := d.Id() + + request.AutoScalingGroupId = &autoScalingGroupId + + immutableArgs := []string{"load_balancer_ids"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("forward_load_balancers") { + if v, ok := d.GetOk("forward_load_balancers"); ok { + for _, item := range v.([]interface{}) { + forwardLoadBalancer := as.ForwardLoadBalancer{} + dMap := item.(map[string]interface{}) + if v, ok := dMap["load_balancer_id"]; ok { + forwardLoadBalancer.LoadBalancerId = helper.String(v.(string)) + } + if v, ok := dMap["listener_id"]; ok { + forwardLoadBalancer.ListenerId = helper.String(v.(string)) + } + if v, ok := dMap["target_attributes"]; ok { + for _, item := range v.([]interface{}) { + targetAttributesMap := item.(map[string]interface{}) + targetAttribute := as.TargetAttribute{} + if v, ok := targetAttributesMap["port"]; ok { + targetAttribute.Port = helper.IntUint64(v.(int)) + } + if v, ok := targetAttributesMap["weight"]; ok { + targetAttribute.Weight = helper.IntUint64(v.(int)) + } + forwardLoadBalancer.TargetAttributes = append(forwardLoadBalancer.TargetAttributes, &targetAttribute) + } + } + if v, ok := dMap["location_id"]; ok { + forwardLoadBalancer.LocationId = helper.String(v.(string)) + } + if v, ok := dMap["region"]; ok { + forwardLoadBalancer.Region = helper.String(v.(string)) + } + request.ForwardLoadBalancers = append(request.ForwardLoadBalancers, &forwardLoadBalancer) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ModifyLoadBalancerTargetAttributes(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update as loadBalancer failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudAsLoadBalancerRead(d, meta) +} + +func resourceTencentCloudAsLoadBalancerDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_as_load_balancer.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + autoScalingGroupId := d.Id() + + if err := service.DeleteAsLoadBalancerById(ctx, autoScalingGroupId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/as/resource_tc_as_load_balancer.md b/tencentcloud/services/as/resource_tc_as_load_balancer.md new file mode 100644 index 0000000000..dc38a8433a --- /dev/null +++ b/tencentcloud/services/as/resource_tc_as_load_balancer.md @@ -0,0 +1,107 @@ +Provides a resource to create a as load_balancer + +~> **NOTE:** `load_balancer_ids` A list of traditional load balancer IDs, with a maximum of 20 traditional load balancers bound to each scaling group. Only one LoadBalancerIds and ForwardLoadBalancers can be specified simultaneously. +~> **NOTE:** `forward_load_balancers` List of application type load balancers, with a maximum of 100 bound application type load balancers for each scaling group. Only one LoadBalancerIds and ForwardLoadBalancers can be specified simultaneously. + +Example Usage + +If use `load_balancer_ids` + +```hcl +data "tencentcloud_availability_zones_by_product" "zones" { + product = "as" +} + +data "tencentcloud_images" "image" { + image_type = ["PUBLIC_IMAGE"] + os_name = "TencentOS Server 3.2 (Final)" +} + +resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "subnet" { + vpc_id = tencentcloud_vpc.vpc.id + name = "subnet-example" + cidr_block = "10.0.0.0/16" + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name +} + +resource "tencentcloud_as_scaling_config" "example" { + configuration_name = "tf-example" + image_id = data.tencentcloud_images.image.images.0.image_id + instance_types = ["SA1.SMALL1", "SA2.SMALL1", "SA2.SMALL2", "SA2.SMALL4"] + instance_name_settings { + instance_name = "test-ins-name" + } +} + +resource "tencentcloud_as_scaling_group" "example" { + scaling_group_name = "tf-example" + configuration_id = tencentcloud_as_scaling_config.example.id + max_size = 1 + min_size = 0 + vpc_id = tencentcloud_vpc.vpc.id + subnet_ids = [tencentcloud_subnet.subnet.id] +} + +resource "tencentcloud_clb_instance" "example" { + network_type = "INTERNAL" + clb_name = "clb-example" + project_id = 0 + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + + tags = { + test = "tf" + } +} + +resource "tencentcloud_clb_listener" "example" { + clb_id = tencentcloud_clb_instance.example.id + listener_name = "listener-example" + port = 80 + protocol = "HTTP" +} + +resource "tencentcloud_clb_listener_rule" "example" { + listener_id = tencentcloud_clb_listener.example.listener_id + clb_id = tencentcloud_clb_instance.example.id + domain = "foo.net" + url = "/bar" +} + +resource "tencentcloud_as_load_balancer" "example" { + auto_scaling_group_id = tencentcloud_as_scaling_group.example.id + load_balancer_ids = [tencentcloud_clb_instance.example.id] +} +``` + +If use `forward_load_balancers` + +```hcl +resource "tencentcloud_as_load_balancer" "example" { + auto_scaling_group_id = tencentcloud_as_scaling_group.example.id + + forward_load_balancers { + load_balancer_id = tencentcloud_clb_instance.example.id + listener_id = tencentcloud_clb_listener.example.listener_id + location_id = tencentcloud_clb_listener_rule.example.rule_id + + target_attributes { + port = 8080 + weight = 20 + } + } +} +``` + +Import + +as load_balancer can be imported using the id, e.g. + +``` +terraform import tencentcloud_as_load_balancer.load_balancer auto_scaling_group_id +``` diff --git a/tencentcloud/resource_tc_as_load_balancer_test.go b/tencentcloud/services/as/resource_tc_as_load_balancer_test.go similarity index 84% rename from tencentcloud/resource_tc_as_load_balancer_test.go rename to tencentcloud/services/as/resource_tc_as_load_balancer_test.go index c39693d4e1..73d9fbf856 100644 --- a/tencentcloud/resource_tc_as_load_balancer_test.go +++ b/tencentcloud/services/as/resource_tc_as_load_balancer_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 TestAccTencentCloudAsLoadBalancerResource_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: testAccAsLoadBalancer, diff --git a/tencentcloud/services/as/resource_tc_as_scaling_config.go b/tencentcloud/services/as/resource_tc_as_scaling_config.go index df50e2b948..4a6afb7ae1 100644 --- a/tencentcloud/services/as/resource_tc_as_scaling_config.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_config.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -106,14 +107,14 @@ func ResourceTencentCloudAsScalingConfig() *schema.Resource { "instance_charge_type_prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: tccommon.ValidateAllowedIntValue(CVM_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(svccvm.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: tccommon.ValidateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(svccvm.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": { diff --git a/tencentcloud/services/as/resource_tc_as_scaling_group.go b/tencentcloud/services/as/resource_tc_as_scaling_group.go index 1120f0ab76..dccd5f4597 100644 --- a/tencentcloud/services/as/resource_tc_as_scaling_group.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -456,7 +457,7 @@ func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interfa } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "as", "auto-scaling-group", tcClient.Region, d.Id()) if err != nil { return err @@ -474,7 +475,7 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region request := as.NewModifyAutoScalingGroupRequest() @@ -649,7 +650,7 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("as", "auto-scaling-group", region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) diff --git a/tencentcloud/services/as/service_tencentcloud_tag.go b/tencentcloud/services/as/service_tencentcloud_tag.go deleted file mode 100644 index 6737d37b64..0000000000 --- a/tencentcloud/services/as/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/data_source_tc_cam_list_attached_user_policy.go b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy.go similarity index 89% rename from tencentcloud/data_source_tc_cam_list_attached_user_policy.go rename to tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy.go index 01dabbc4f9..3240e673eb 100644 --- a/tencentcloud/data_source_tc_cam_list_attached_user_policy.go +++ b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy.go @@ -1,27 +1,18 @@ -/* -Use this data source to query detailed information of cam list_attached_user_policy - -Example Usage - -```hcl -data "tencentcloud_cam_list_attached_user_policy" "list_attached_user_policy" { - target_uin = 100032767426 - attach_type = 0 - } -``` -*/ -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 dataSourceTencentCloudCamListAttachedUserPolicy() *schema.Resource { +func DataSourceTencentCloudCamListAttachedUserPolicy() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamListAttachedUserPolicyRead, Schema: map[string]*schema.Schema{ @@ -131,12 +122,12 @@ func dataSourceTencentCloudCamListAttachedUserPolicy() *schema.Resource { } func dataSourceTencentCloudCamListAttachedUserPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_list_attached_user_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_list_attached_user_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("target_uin"); v != nil { @@ -155,14 +146,14 @@ func dataSourceTencentCloudCamListAttachedUserPolicyRead(d *schema.ResourceData, paramMap["Keyword"] = helper.String(v.(string)) } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var policyList []*cam.AttachedUserPolicy - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamListAttachedUserPolicyByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } policyList = result return nil @@ -239,7 +230,7 @@ func dataSourceTencentCloudCamListAttachedUserPolicyRead(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/services/cam/data_source_tc_cam_list_attached_user_policy.md b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy.md new file mode 100644 index 0000000000..9b2714eba5 --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy.md @@ -0,0 +1,10 @@ +Use this data source to query detailed information of cam list_attached_user_policy + +Example Usage + +```hcl +data "tencentcloud_cam_list_attached_user_policy" "list_attached_user_policy" { + target_uin = 100032767426 + attach_type = 0 + } +``` diff --git a/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy_test.go b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy_test.go new file mode 100644 index 0000000000..15d4dda44a --- /dev/null +++ b/tencentcloud/services/cam/data_source_tc_cam_list_attached_user_policy_test.go @@ -0,0 +1,38 @@ +package cam_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudCamListAttachedUserPolicyDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCamListAttachedUserPolicyDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy"), + resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "policy_list.#"), + resource.TestCheckResourceAttr("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "target_uin", "100032767426"), + resource.TestCheckResourceAttr("data.tencentcloud_cam_list_attached_user_policy.list_attached_user_policy", "attach_type", "0"), + ), + }, + }, + }) +} + +const testAccCamListAttachedUserPolicyDataSource = ` + +data "tencentcloud_cam_list_attached_user_policy" "list_attached_user_policy" { + target_uin = 100032767426 + attach_type = 0 + } + +` diff --git a/tencentcloud/services/cam/extension_tags.go b/tencentcloud/services/cam/extension_tags.go deleted file mode 100644 index 73b7bedbf4..0000000000 --- a/tencentcloud/services/cam/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cam - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cam/resource_tc_cam_role.go b/tencentcloud/services/cam/resource_tc_cam_role.go index 2133510470..a617853cfa 100644 --- a/tencentcloud/services/cam/resource_tc_cam_role.go +++ b/tencentcloud/services/cam/resource_tc_cam_role.go @@ -10,6 +10,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -173,7 +174,7 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) resourceName := tccommon.BuildTagResourceName("cam", "role", "", roleId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -233,7 +234,7 @@ func resourceTencentCloudCamRoleRead(d *schema.ResourceData, meta interface{}) e } //tags - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tags, err := tagService.DescribeResourceTags(ctx, "cam", "role", "", roleId) if err != nil { return err @@ -319,10 +320,8 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) //tag if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) resourceName := tccommon.BuildTagResourceName("cam", "role", "", roleId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/cam/resource_tc_cam_role_by_name.go b/tencentcloud/services/cam/resource_tc_cam_role_by_name.go index d6a65ff0f4..6ccb3a35d0 100644 --- a/tencentcloud/services/cam/resource_tc_cam_role_by_name.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_by_name.go @@ -10,6 +10,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -165,7 +166,7 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf if len(instances) != 0 { instance = instances[0] } - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -230,7 +231,7 @@ func resourceTencentCloudCamRoleByNameRead(d *schema.ResourceData, meta interfac } //tags - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tags, err := tagService.DescribeResourceTags(ctx, "cam", "role", "", *instance.RoleId) if err != nil { return err @@ -316,10 +317,8 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf //tag if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var instance *cam.RoleInfo err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { params := make(map[string]interface{}) diff --git a/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go b/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go index b80df4bbd3..64f7b445b6 100644 --- a/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go +++ b/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go @@ -8,6 +8,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -119,7 +120,7 @@ func resourceTencentCloudCamServiceLinkedRoleCreate(d *schema.ResourceData, meta d.SetId(roleId) //ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - // tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + // tagService := svctag.NewTagService(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 @@ -221,9 +222,9 @@ func resourceTencentCloudCamServiceLinkedRoleUpdate(d *schema.ResourceData, meta if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cam", "role/tencentcloudServiceRole", "", d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cam/resource_tc_cam_user.go b/tencentcloud/services/cam/resource_tc_cam_user.go index 5d26f96d88..28c7bdddb3 100644 --- a/tencentcloud/services/cam/resource_tc_cam_user.go +++ b/tencentcloud/services/cam/resource_tc_cam_user.go @@ -8,6 +8,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -228,7 +229,7 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -289,7 +290,7 @@ func resourceTencentCloudCamUserRead(d *schema.ResourceData, meta interface{}) e } //tags - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -400,10 +401,8 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("cam", "uin", region, helper.UInt64ToStr(*instance.Response.Uin)) err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) diff --git a/tencentcloud/services/cam/service_tencentcloud_tag.go b/tencentcloud/services/cam/service_tencentcloud_tag.go deleted file mode 100644 index 09750a4a68..0000000000 --- a/tencentcloud/services/cam/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cat/extension_tags.go b/tencentcloud/services/cat/extension_tags.go deleted file mode 100644 index f948db2a87..0000000000 --- a/tencentcloud/services/cat/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cat - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cat/resource_tc_cat_task_set.go b/tencentcloud/services/cat/resource_tc_cat_task_set.go index fd93e576ab..4a6230a26e 100644 --- a/tencentcloud/services/cat/resource_tc_cat_task_set.go +++ b/tencentcloud/services/cat/resource_tc_cat_task_set.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -188,7 +189,7 @@ func resourceTencentCloudCatTaskSetCreate(d *schema.ResourceData, meta interface ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -288,7 +289,7 @@ func resourceTencentCloudCatTaskSetRead(d *schema.ResourceData, meta interface{} } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cat", "TaskId", tcClient.Region, d.Id()) if err != nil { return err @@ -351,7 +352,7 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface for _, item := range newInterface.([]interface{}) { newMap = item.(map[string]interface{}) } - replace, _ := diffTags(oldMap, newMap) + replace, _ := svctag.DiffTags(oldMap, newMap) if _, ok := replace["target_address"]; ok { return fmt.Errorf("`target_address` do not support change now.") @@ -436,9 +437,9 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cat", "TaskId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cat/service_tencentcloud_tag.go b/tencentcloud/services/cat/service_tencentcloud_tag.go deleted file mode 100644 index 457082cd45..0000000000 --- a/tencentcloud/services/cat/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cbs/extension_cvm.go b/tencentcloud/services/cbs/extension_cvm.go index 26ff7e3296..e650d963af 100644 --- a/tencentcloud/services/cbs/extension_cvm.go +++ b/tencentcloud/services/cbs/extension_cvm.go @@ -1,118 +1,8 @@ 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 deleted file mode 100644 index a4d3f9e690..0000000000 --- a/tencentcloud/services/cbs/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cbs - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go index 0b9566a2dd..ab4115e9de 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -107,7 +108,7 @@ func resourceTencentCloudCbsSnapshotCreate(d *schema.ResourceData, meta interfac if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -176,7 +177,7 @@ func resourceTencentCloudCbsSnapshotRead(d *schema.ResourceData, meta interface{ _ = d.Set("snapshot_status", snapshot.SnapshotState) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cvm", "volume", tcClient.Region, d.Id()) if err != nil { return err @@ -216,10 +217,10 @@ func resourceTencentCloudCbsSnapshotUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/cbs/resource_tc_cbs_storage.go b/tencentcloud/services/cbs/resource_tc_cbs_storage.go index 4e6537fc18..97ba27dc45 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_storage.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -222,7 +223,7 @@ func resourceTencentCloudCbsStorageCreate(d *schema.ResourceData, meta interface if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -294,7 +295,7 @@ func resourceTencentCloudCbsStorageRead(d *schema.ResourceData, meta interface{} } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cvm", "volume", tcClient.Region, d.Id()) if err != nil { return err @@ -452,10 +453,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/cbs/service_tencentcloud_tag.go b/tencentcloud/services/cbs/service_tencentcloud_tag.go deleted file mode 100644 index bc4b9d6f47..0000000000 --- a/tencentcloud/services/cbs/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/ccn/extension_security_group.go b/tencentcloud/services/ccn/extension_security_group.go deleted file mode 100644 index 8050e7f908..0000000000 --- a/tencentcloud/services/ccn/extension_security_group.go +++ /dev/null @@ -1,3 +0,0 @@ -package ccn - -const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/ccn/extension_tags.go b/tencentcloud/services/ccn/extension_tags.go deleted file mode 100644 index 9a4e5f734d..0000000000 --- a/tencentcloud/services/ccn/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package ccn - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/ccn/extension_vpc.go b/tencentcloud/services/ccn/extension_vpc.go deleted file mode 100644 index 7f5fe3de07..0000000000 --- a/tencentcloud/services/ccn/extension_vpc.go +++ /dev/null @@ -1,327 +0,0 @@ -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/services/ccn/resource_tc_ccn.go b/tencentcloud/services/ccn/resource_tc_ccn.go index 00ceb1ce3c..fc2fcff28f 100644 --- a/tencentcloud/services/ccn/resource_tc_ccn.go +++ b/tencentcloud/services/ccn/resource_tc_ccn.go @@ -6,6 +6,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -117,7 +118,7 @@ func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) err if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -161,7 +162,7 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error return err } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "vpc", "ccn", tcClient.Region, d.Id()) if err != nil { return err @@ -221,10 +222,10 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/ccn/service_tencentcloud_ccn.go b/tencentcloud/services/ccn/service_tencentcloud_ccn.go index d1584437ce..72bbc5630e 100644 --- a/tencentcloud/services/ccn/service_tencentcloud_ccn.go +++ b/tencentcloud/services/ccn/service_tencentcloud_ccn.go @@ -9,6 +9,7 @@ import ( 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/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -58,6 +59,26 @@ type CcnBandwidthLimit struct { limit int64 } +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 +} + func (me *VpcService) DescribeCcn(ctx context.Context, ccnId string) (info CcnBasicInfo, has int, errRet error) { infos, err := me.DescribeCcns(ctx, ccnId, "") if err != nil { @@ -698,3 +719,286 @@ func (me *VpcService) ModifyCcnRegionBandwidthLimitsType(ctx context.Context, cc } return 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) 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) 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) 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) 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 +} diff --git a/tencentcloud/services/ccn/service_tencentcloud_tag.go b/tencentcloud/services/ccn/service_tencentcloud_tag.go deleted file mode 100644 index 562bcc2432..0000000000 --- a/tencentcloud/services/ccn/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 deleted file mode 100644 index 2eaa34905a..0000000000 --- a/tencentcloud/services/ccn/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8075 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cdb/extension_tags.go b/tencentcloud/services/cdb/extension_tags.go deleted file mode 100644 index a7d55851f4..0000000000 --- a/tencentcloud/services/cdb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cdb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cdb/resource_tc_mysql_instance.go b/tencentcloud/services/cdb/resource_tc_mysql_instance.go index 3a54768d33..91e34b4315 100644 --- a/tencentcloud/services/cdb/resource_tc_mysql_instance.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_instance.go @@ -7,6 +7,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -672,7 +673,7 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -811,7 +812,7 @@ func tencentMsyqlBasicInfoRead(ctx context.Context, d *schema.ResourceData, meta } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cdb", "instanceId", tcClient.Region, d.Id()) if err != nil { errRet = err @@ -1191,10 +1192,10 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) diff --git a/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go index 8f82dc44a7..bbb4d426f1 100644 --- a/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -253,7 +254,7 @@ func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, met if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) 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 { @@ -346,7 +347,7 @@ func resourceTencentCloudMysqlReadonlyInstanceRead(d *schema.ResourceData, meta _ = d.Set("security_groups", securityGroups) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cdb", "instanceId", tcClient.Region, d.Id()) if err != nil { return err diff --git a/tencentcloud/services/cdb/service_tencentcloud_tag.go b/tencentcloud/services/cdb/service_tencentcloud_tag.go deleted file mode 100644 index a59852bd54..0000000000 --- a/tencentcloud/services/cdb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cdn/data_source_tc_cdn_domains.go b/tencentcloud/services/cdn/data_source_tc_cdn_domains.go index 9edd211339..4365965695 100644 --- a/tencentcloud/services/cdn/data_source_tc_cdn_domains.go +++ b/tencentcloud/services/cdn/data_source_tc_cdn_domains.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" @@ -329,7 +330,7 @@ func dataSourceTencentCloudCdnDomainsRead(d *schema.ResourceData, meta interface client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() region = client.Region cdnService = CdnService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) ) var domainFilterMap = make(map[string]interface{}, 5) diff --git a/tencentcloud/services/cdn/extension_tags.go b/tencentcloud/services/cdn/extension_tags.go deleted file mode 100644 index 72a0c0a5f8..0000000000 --- a/tencentcloud/services/cdn/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cdn - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cdn/resource_tc_cdn_domain.go b/tencentcloud/services/cdn/resource_tc_cdn_domain.go index d0bd1522d6..a864282527 100644 --- a/tencentcloud/services/cdn/resource_tc_cdn_domain.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_domain.go @@ -7,6 +7,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -2431,7 +2432,7 @@ func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{ // tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) err := tagService.ModifyTags(ctx, resourceName, tags, nil) @@ -2452,7 +2453,7 @@ func resourceTencentCloudCdnDomainRead(d *schema.ResourceData, meta interface{}) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() region := client.Region cdnService := CdnService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) domain := d.Id() @@ -3919,9 +3920,9 @@ func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{ if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) @@ -3951,7 +3952,7 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) deleteTags := make([]string, 0, len(tags)) diff --git a/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go b/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go index da53d15409..397551911f 100644 --- a/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go @@ -22,7 +22,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" + svccdn "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" + svcdomain "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/domain" ) func init() { @@ -35,7 +36,7 @@ func init() { cli, _ := tcacctest.SharedClientForRegion(r) client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := localcdn.NewCdnService(client) + service := svccdn.NewCdnService(client) domains, err := service.DescribeDomainsConfigByFilters(ctx, nil) if err != nil { return err @@ -353,7 +354,7 @@ func testAccGetTestingDomain() (string, error) { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cli, _ := tcacctest.SharedClientForRegion("ap-guangzhou") client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := localcdn.NewDomainService(client) + service := svcdomain.NewDomainService(client) request := domain.NewDescribeDomainNameListRequest() domains, err := service.DescribeDomainNameList(ctx, request) if err != nil { @@ -376,7 +377,7 @@ func testAccCdnDomainVerify(domainPrefix string) error { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cli, _ := tcacctest.SharedClientForRegion("ap-guangzhou") client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := localcdn.NewCdnService(client) + service := svccdn.NewCdnService(client) continueCode := []string{ // no record cdn.UNAUTHORIZEDOPERATION_CDNDOMAINRECORDNOTVERIFIED, @@ -478,7 +479,7 @@ func testAccSetDnsPodRecord(domainName, recordType, record string) error { func testAccCheckCdnDomainDestroy(s *terraform.State) error { logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cdnService := localcdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + cdnService := svccdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cdn_domain" { continue @@ -516,7 +517,7 @@ func testAccCheckCdnDomainExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cdn domain id is not set") } - cdnService := localcdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + cdnService := svccdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, rs.Primary.ID) if err != nil { err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/services/cdn/service_tencentcloud_domain.go b/tencentcloud/services/cdn/service_tencentcloud_domain.go deleted file mode 100644 index c23e4ec956..0000000000 --- a/tencentcloud/services/cdn/service_tencentcloud_domain.go +++ /dev/null @@ -1,47 +0,0 @@ -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 deleted file mode 100644 index b92547f586..0000000000 --- a/tencentcloud/services/cdn/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cdwch/extension_tags.go b/tencentcloud/services/cdwch/extension_tags.go deleted file mode 100644 index be6a76c23a..0000000000 --- a/tencentcloud/services/cdwch/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cdwch - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go index cc934240c2..3326c6e1c7 100644 --- a/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go @@ -7,6 +7,7 @@ import ( "strconv" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -226,7 +227,7 @@ func resourceTencentCloudClickhouseInstanceRead(d *schema.ResourceData, meta int } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cdwch", "cdwchInstance", tcClient.Region, d.Id()) if err != nil { return err @@ -360,7 +361,7 @@ func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta i } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -382,9 +383,9 @@ func resourceTencentCloudClickhouseInstanceUpdate(d *schema.ResourceData, meta i if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cdwch", "cdwchInstance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cdwch/service_tencentcloud_tag.go b/tencentcloud/services/cdwch/service_tencentcloud_tag.go deleted file mode 100644 index 2f96e6ff1e..0000000000 --- a/tencentcloud/services/cdwch/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cdwpg/extension_tags.go b/tencentcloud/services/cdwpg/extension_tags.go deleted file mode 100644 index d5e34473ea..0000000000 --- a/tencentcloud/services/cdwpg/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cdwpg - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go index a95365133b..78cf9f88dc 100644 --- a/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go +++ b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go @@ -7,6 +7,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -251,7 +252,7 @@ func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interf ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -366,7 +367,7 @@ func resourceTencentCloudCdwpgInstanceRead(d *schema.ResourceData, meta interfac } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cdwpg", "cdwpgInstance", tcClient.Region, d.Id()) if err != nil { return err @@ -426,9 +427,9 @@ func resourceTencentCloudCdwpgInstanceUpdate(d *schema.ResourceData, meta interf if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cdwpg", "cdwpgInstance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cdwpg/service_tencentcloud_tag.go b/tencentcloud/services/cdwpg/service_tencentcloud_tag.go deleted file mode 100644 index 5aed0895da..0000000000 --- a/tencentcloud/services/cdwpg/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cfs/extension_tags.go b/tencentcloud/services/cfs/extension_tags.go deleted file mode 100644 index 15b6aa4c7f..0000000000 --- a/tencentcloud/services/cfs/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cfs - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cfs/resource_tc_cfs_file_system.go b/tencentcloud/services/cfs/resource_tc_cfs_file_system.go index 328f39b102..693dd04e2a 100644 --- a/tencentcloud/services/cfs/resource_tc_cfs_file_system.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_file_system.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -210,7 +211,7 @@ func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interf } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -273,7 +274,7 @@ func resourceTencentCloudCfsFileSystemRead(d *schema.ResourceData, meta interfac return err } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cfs", "filesystem", tcClient.Region, d.Id()) if err != nil { return err @@ -343,10 +344,10 @@ func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interf if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go b/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go index 38bba3ee67..cc0b847c02 100644 --- a/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go @@ -7,6 +7,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -104,7 +105,7 @@ func resourceTencentCloudCfsSnapshotCreate(d *schema.ResourceData, meta interfac ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -147,7 +148,7 @@ func resourceTencentCloudCfsSnapshotRead(d *schema.ResourceData, meta interface{ } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cfs", "snap", tcClient.Region, d.Id()) if err != nil { return err @@ -196,9 +197,9 @@ func resourceTencentCloudCfsSnapshotUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cfs", "snap", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cfs/resource_tc_cfs_user_quota.go b/tencentcloud/services/cfs/resource_tc_cfs_user_quota.go new file mode 100644 index 0000000000..09c93ba8c1 --- /dev/null +++ b/tencentcloud/services/cfs/resource_tc_cfs_user_quota.go @@ -0,0 +1,202 @@ +package cfs + +import ( + "context" + "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" + cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudCfsUserQuota() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudCfsUserQuotaCreate, + Read: resourceTencentCloudCfsUserQuotaRead, + Update: resourceTencentCloudCfsUserQuotaUpdate, + Delete: resourceTencentCloudCfsUserQuotaDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "file_system_id": { + Required: true, + Type: schema.TypeString, + Description: "File system ID.", + }, + + "user_type": { + Required: true, + Type: schema.TypeString, + Description: "Quota type. Valid value: `Uid`, `Gid`.", + }, + + "user_id": { + Required: true, + Type: schema.TypeString, + Description: "Info of UID/GID.", + }, + + "capacity_hard_limit": { + Optional: true, + Type: schema.TypeInt, + Description: "Capacity Limit(GB).", + }, + + "file_hard_limit": { + Optional: true, + Type: schema.TypeInt, + Description: "File limit.", + }, + }, + } +} + +func resourceTencentCloudCfsUserQuotaCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cfs_user_quota.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = cfs.NewSetUserQuotaRequest() + fileSystemId string + userType string + userId string + ) + if v, ok := d.GetOk("file_system_id"); ok { + fileSystemId = v.(string) + request.FileSystemId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("user_type"); ok { + userType = v.(string) + request.UserType = helper.String(v.(string)) + } + + if v, ok := d.GetOk("user_id"); ok { + userId = v.(string) + request.UserId = helper.String(v.(string)) + } + + if v, _ := d.GetOk("capacity_hard_limit"); v != nil { + request.CapacityHardLimit = helper.IntUint64(v.(int)) + } + + if v, _ := d.GetOk("file_hard_limit"); v != nil { + request.FileHardLimit = helper.IntUint64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().SetUserQuota(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 cfs userQuota failed, reason:%+v", logId, err) + return err + } + + d.SetId(fileSystemId + tccommon.FILED_SP + userType + tccommon.FILED_SP + userId) + + return resourceTencentCloudCfsUserQuotaRead(d, meta) +} + +func resourceTencentCloudCfsUserQuotaRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cfs_user_quota.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := CfsService{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()) + } + fileSystemId := idSplit[0] + userType := idSplit[1] + userId := idSplit[2] + + userQuota, err := service.DescribeCfsUserQuotaById(ctx, fileSystemId, userType, userId) + if err != nil { + return err + } + + if userQuota == nil { + d.SetId("") + log.Printf("[WARN]%s resource `CfsUserQuota` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if userQuota.FileSystemId != nil { + _ = d.Set("file_system_id", userQuota.FileSystemId) + } + + if userQuota.UserType != nil { + _ = d.Set("user_type", userQuota.UserType) + } + + if userQuota.UserId != nil { + _ = d.Set("user_id", userQuota.UserId) + } + + if userQuota.CapacityHardLimit != nil { + _ = d.Set("capacity_hard_limit", userQuota.CapacityHardLimit) + } + + if userQuota.FileHardLimit != nil { + _ = d.Set("file_hard_limit", userQuota.FileHardLimit) + } + + return nil +} + +func resourceTencentCloudCfsUserQuotaUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cfs_user_quota.update")() + defer tccommon.InconsistentCheck(d, meta)() + + immutableArgs := []string{"file_system_id", "user_type", "user_id", "capacity_hard_limit", "file_hard_limit"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + return resourceTencentCloudCfsUserQuotaRead(d, meta) +} + +func resourceTencentCloudCfsUserQuotaDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cfs_user_quota.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := CfsService{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()) + } + fileSystemId := idSplit[0] + userType := idSplit[1] + userId := idSplit[2] + + if err := service.DeleteCfsUserQuotaById(ctx, fileSystemId, userType, userId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/cfs/resource_tc_cfs_user_quota.md b/tencentcloud/services/cfs/resource_tc_cfs_user_quota.md new file mode 100644 index 0000000000..1ff839c573 --- /dev/null +++ b/tencentcloud/services/cfs/resource_tc_cfs_user_quota.md @@ -0,0 +1,21 @@ +Provides a resource to create a cfs user_quota + +Example Usage + +```hcl +resource "tencentcloud_cfs_user_quota" "user_quota" { + file_system_id = "cfs-4636029bc" + user_type = "Uid" + user_id = "2159973417" + capacity_hard_limit = 10 + file_hard_limit = 10000 +} +``` + +Import + +cfs user_quota can be imported using the id, e.g. + +``` +terraform import tencentcloud_cfs_user_quota.user_quota fileSystemId#userType#userId +``` diff --git a/tencentcloud/resource_tc_cfs_user_quota_test.go b/tencentcloud/services/cfs/resource_tc_cfs_user_quota_test.go similarity index 81% rename from tencentcloud/resource_tc_cfs_user_quota_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_user_quota_test.go index d92c842156..ed2694e040 100644 --- a/tencentcloud/resource_tc_cfs_user_quota_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_user_quota_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 TestAccTencentCloudNeedFixCfsUserQuotaResource_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: testAccCfsUserQuota, diff --git a/tencentcloud/services/cfs/service_tencentcloud_tag.go b/tencentcloud/services/cfs/service_tencentcloud_tag.go deleted file mode 100644 index 6009c42f51..0000000000 --- a/tencentcloud/services/cfs/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/ckafka/extension_ckafka.go b/tencentcloud/services/ckafka/extension_ckafka.go index 5ae080e86c..24fe612dbd 100644 --- a/tencentcloud/services/ckafka/extension_ckafka.go +++ b/tencentcloud/services/ckafka/extension_ckafka.go @@ -1,5 +1,9 @@ package ckafka +import ( + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" +) + const ( CKAFKA_DESCRIBE_LIMIT = 50 CKAFKA_ACL_PRINCIPAL_STR = "User:" @@ -85,6 +89,6 @@ const CkafkaInstanceNotFound = "InvalidParameterValue.InstanceNotExist" const CkafkaFailedOperation = "FailedOperation" const ( - CKAFKA_CHARGE_TYPE_POSTPAID = COMMON_PAYTYPE_POSTPAID - CKAFKA_CHARGE_TYPE_PREPAID = COMMON_PAYTYPE_PREPAID + CKAFKA_CHARGE_TYPE_POSTPAID = svcpostgresql.COMMON_PAYTYPE_POSTPAID + CKAFKA_CHARGE_TYPE_PREPAID = svcpostgresql.COMMON_PAYTYPE_PREPAID ) diff --git a/tencentcloud/services/ckafka/extension_postgresql.go b/tencentcloud/services/ckafka/extension_postgresql.go deleted file mode 100644 index 1c504c7242..0000000000 --- a/tencentcloud/services/ckafka/extension_postgresql.go +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index 29c3336e4f..0000000000 --- a/tencentcloud/services/ckafka/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package ckafka - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go index 21cc4834f9..bc2d632731 100644 --- a/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -114,7 +115,7 @@ func resourceTencentCloudCkafkaDatahubTopicCreate(d *schema.ResourceData, meta i ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -165,7 +166,7 @@ func resourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta int } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "ckafka", "dipTopic", tcClient.Region, d.Id()) if err != nil { return err @@ -234,9 +235,9 @@ func resourceTencentCloudCkafkaDatahubTopicUpdate(d *schema.ResourceData, meta i if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("ckafka", "dipTopic", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go b/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go index 700fa002e9..f4732f6049 100644 --- a/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go @@ -9,6 +9,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -544,7 +545,7 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region if tags := helper.GetTags(d, "tag_set"); len(tags) > 0 { @@ -632,7 +633,7 @@ func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interfa _ = d.Set("tags", tagSets) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region tags, err := tagService.DescribeResourceTags(ctx, "ckafka", "ckafkaId", region, instanceId) @@ -870,11 +871,11 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter if d.HasChange("tag_set") { client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region oldTags, newTags := d.GetChange("tag_set") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("ckafka", "ckafkaId", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/ckafka/service_tencentcloud_tag.go b/tencentcloud/services/ckafka/service_tencentcloud_tag.go deleted file mode 100644 index a957bad4e6..0000000000 --- a/tencentcloud/services/ckafka/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/clb/extension_as.go b/tencentcloud/services/clb/extension_as.go deleted file mode 100644 index 1fbf7f0dfa..0000000000 --- a/tencentcloud/services/clb/extension_as.go +++ /dev/null @@ -1,180 +0,0 @@ -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_ssl.go b/tencentcloud/services/clb/extension_ssl.go deleted file mode 100644 index fb6b3e9d91..0000000000 --- a/tencentcloud/services/clb/extension_ssl.go +++ /dev/null @@ -1,88 +0,0 @@ -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 deleted file mode 100644 index 5f97d32f73..0000000000 --- a/tencentcloud/services/clb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package clb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/clb/resource_tc_clb_instance.go b/tencentcloud/services/clb/resource_tc_clb_instance.go index 06fe31a881..6ac3e4d30d 100644 --- a/tencentcloud/services/clb/resource_tc_clb_instance.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance.go @@ -7,6 +7,8 @@ import ( "sync" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -321,7 +323,7 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac request.InternetAccessible.InternetMaxBandwidthOut = helper.IntInt64(bv.(int)) } if pok { - if chargeType != INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE { + if chargeType != svcas.INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE { return fmt.Errorf("[CHECK][CLB instance][Create] check: internet_charge_type must `BANDWIDTH_PACKAGE` when bandwidth_package_id was set") } request.BandwidthPackageId = helper.String(pv.(string)) @@ -588,7 +590,7 @@ func resourceTencentCloudClbInstanceRead(d *schema.ResourceData, meta interface{ } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "clb", "clb", tcClient.Region, d.Id()) if err != nil { return err @@ -803,10 +805,10 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("clb", "clb", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/clb/resource_tc_clb_log_set.go b/tencentcloud/services/clb/resource_tc_clb_log_set.go index 404b9d14f8..9c7aba4e7d 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_set.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_set.go @@ -6,6 +6,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -52,7 +53,7 @@ func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id := d.Id() @@ -114,7 +115,7 @@ func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{ logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id := d.Id() if err := service.DeleteClsLogsetById(ctx, id); err != nil { diff --git a/tencentcloud/services/clb/resource_tc_clb_log_set_test.go b/tencentcloud/services/clb/resource_tc_clb_log_set_test.go index ec0df8c838..e3e5ba319f 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_set_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_set_test.go @@ -1,17 +1,18 @@ 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" "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" + + svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" ) func TestAccTencentCloudClbLogset_basic(t *testing.T) { @@ -43,7 +44,7 @@ func testAccCheckClbLogsetDestroy(s *terraform.State) error { logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + clsService := svccls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_logset" { continue @@ -70,7 +71,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 := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svccls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := rs.Primary.ID instance, err := service.DescribeClsLogset(ctx, resourceId) if err != nil { diff --git a/tencentcloud/services/clb/resource_tc_clb_log_topic.go b/tencentcloud/services/clb/resource_tc_clb_log_topic.go index 6c61b45117..80660be692 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_topic.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_topic.go @@ -7,6 +7,7 @@ import ( "sync" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -60,9 +61,7 @@ func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta int logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := ClsService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + clsService := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) if v, ok := d.GetOk("log_set_id"); ok { info, err := clsService.DescribeClsLogset(ctx, v.(string)) @@ -100,9 +99,7 @@ func resourceTencentCloudClbInstanceTopicRead(d *schema.ResourceData, meta inter ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - clsService := ClsService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + clsService := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := clsService.DescribeClsTopicById(ctx, id) if err != nil { return err @@ -126,9 +123,7 @@ func resourceTencentCloudClbInstanceTopicDelete(d *schema.ResourceData, meta int ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - clsService := ClsService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + clsService := svccls.NewClsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := clsService.DeleteClsTopic(ctx, id) if err != nil { return err diff --git a/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go b/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go index 80936f8d1b..b47cb713fc 100644 --- a/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go @@ -3,7 +3,7 @@ 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" + svccls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" "context" "fmt" @@ -43,7 +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 := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + clsService := svccls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clsService.DescribeClsTopicById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/clb/service_tencent_ssl_certificate.go b/tencentcloud/services/clb/service_tencent_ssl_certificate.go deleted file mode 100644 index 19c6e5acf0..0000000000 --- a/tencentcloud/services/clb/service_tencent_ssl_certificate.go +++ /dev/null @@ -1,1489 +0,0 @@ -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 index 6eee9a5248..02c1ebbe50 100644 --- a/tencentcloud/services/clb/service_tencentcloud_clb.go +++ b/tencentcloud/services/clb/service_tencentcloud_clb.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcssl "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssl" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" @@ -980,10 +981,10 @@ func checkCertificateInputPara(ctx context.Context, d *schema.ResourceData, meta certPara = &certificateInput //check type valid - sslService := SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + sslService := svcssl.NewSSLService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) if certificateInput.CertCaId != nil { - check, err := sslService.checkCertificateType(ctx, *certificateInput.CertCaId, SSL_CERT_TYPE_CA) + check, err := sslService.CheckCertificateType(ctx, *certificateInput.CertCaId, svcssl.SSL_CERT_TYPE_CA) if err != nil { certificateSetFlag = false errRet = fmt.Errorf("certificated %s check error %s", *certificateInput.CertCaId, err) @@ -992,12 +993,12 @@ func checkCertificateInputPara(ctx context.Context, d *schema.ResourceData, meta } if !check { certificateSetFlag = false - errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertCaId, SSL_CERT_TYPE_CA) + errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertCaId, svcssl.SSL_CERT_TYPE_CA) return } } if certificateInput.CertId != nil { - check, err := sslService.checkCertificateType(ctx, *certificateInput.CertId, SSL_CERT_TYPE_SERVER) + check, err := sslService.CheckCertificateType(ctx, *certificateInput.CertId, svcssl.SSL_CERT_TYPE_SERVER) if err != nil { certificateSetFlag = false errRet = fmt.Errorf("certificated %s check error %s", *certificateInput.CertId, err) @@ -1006,7 +1007,7 @@ func checkCertificateInputPara(ctx context.Context, d *schema.ResourceData, meta } if !check { certificateSetFlag = false - errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertId, SSL_CERT_TYPE_SERVER) + errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertId, svcssl.SSL_CERT_TYPE_SERVER) errRet = errors.WithStack(errRet) return } diff --git a/tencentcloud/services/clb/service_tencentcloud_cls.go b/tencentcloud/services/clb/service_tencentcloud_cls.go deleted file mode 100644 index 6d92060116..0000000000 --- a/tencentcloud/services/clb/service_tencentcloud_cls.go +++ /dev/null @@ -1,1315 +0,0 @@ -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 deleted file mode 100644 index 084aaad408..0000000000 --- a/tencentcloud/services/clb/service_tencentcloud_ssl.go +++ /dev/null @@ -1,247 +0,0 @@ -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 deleted file mode 100644 index 0930d5dafe..0000000000 --- a/tencentcloud/services/clb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cls/extension_tags.go b/tencentcloud/services/cls/extension_tags.go deleted file mode 100644 index d123da9ab7..0000000000 --- a/tencentcloud/services/cls/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cls - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cls/resource_tc_cls_alarm.go b/tencentcloud/services/cls/resource_tc_cls_alarm.go index 7adfc78f22..5ffcfcee66 100644 --- a/tencentcloud/services/cls/resource_tc_cls_alarm.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -352,7 +353,7 @@ func resourceTencentCloudClsAlarmCreate(d *schema.ResourceData, meta interface{} ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -522,7 +523,7 @@ func resourceTencentCloudClsAlarmRead(d *schema.ResourceData, meta interface{}) } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cls", "alarm", tcClient.Region, d.Id()) if err != nil { return err @@ -692,9 +693,9 @@ func resourceTencentCloudClsAlarmUpdate(d *schema.ResourceData, meta interface{} if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cls", "alarm", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go b/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go index 285176189a..7abb391ec1 100644 --- a/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -237,7 +238,7 @@ func resourceTencentCloudClsAlarmNoticeCreate(d *schema.ResourceData, meta inter ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -352,7 +353,7 @@ func resourceTencentCloudClsAlarmNoticeRead(d *schema.ResourceData, meta interfa } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cls", "alarmNotice", tcClient.Region, d.Id()) if err != nil { return err @@ -476,9 +477,9 @@ func resourceTencentCloudClsAlarmNoticeUpdate(d *schema.ResourceData, meta inter if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cls", "alarmNotice", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/resource_tc_cls_inex_test.go b/tencentcloud/services/cls/resource_tc_cls_inex_test.go similarity index 91% rename from tencentcloud/resource_tc_cls_inex_test.go rename to tencentcloud/services/cls/resource_tc_cls_inex_test.go index 2bca2c2c51..f3d131a31b 100644 --- a/tencentcloud/resource_tc_cls_inex_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_inex_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package cls_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudClsIndex_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: testAccClsIndex, diff --git a/tencentcloud/services/cls/resource_tc_cls_logset.go b/tencentcloud/services/cls/resource_tc_cls_logset.go index 00f105b810..51d305c824 100644 --- a/tencentcloud/services/cls/resource_tc_cls_logset.go +++ b/tencentcloud/services/cls/resource_tc_cls_logset.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -93,7 +94,7 @@ func resourceTencentCloudClsLogsetCreate(d *schema.ResourceData, meta interface{ ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -143,7 +144,7 @@ func resourceTencentCloudClsLogsetRead(d *schema.ResourceData, meta interface{}) } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "cls", "logset", tcClient.Region, d.Id()) if err != nil { return err @@ -187,9 +188,9 @@ func resourceTencentCloudClsLogsetUpdate(d *schema.ResourceData, meta interface{ if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cls", "logset", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cls/service_tencentcloud_tag.go b/tencentcloud/services/cls/service_tencentcloud_tag.go deleted file mode 100644 index e95e82e755..0000000000 --- a/tencentcloud/services/cls/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/common/data_source_tc_availability_regions.go b/tencentcloud/services/common/data_source_tc_availability_regions.go index 657f220a36..c00eb7d0c5 100644 --- a/tencentcloud/services/common/data_source_tc_availability_regions.go +++ b/tencentcloud/services/common/data_source_tc_availability_regions.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -68,9 +69,7 @@ func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cvmService := CvmService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var name string var includeUnavailable = false @@ -103,7 +102,7 @@ func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta if name != "" && name != *region.Region { continue } - if !includeUnavailable && *region.RegionState == ZONE_STATE_UNAVAILABLE { + if !includeUnavailable && *region.RegionState == svccvm.ZONE_STATE_UNAVAILABLE { continue } mapping := map[string]interface{}{ diff --git a/tencentcloud/services/common/data_source_tc_availability_zones.go b/tencentcloud/services/common/data_source_tc_availability_zones.go index 72468d4e07..28fe44495e 100644 --- a/tencentcloud/services/common/data_source_tc_availability_zones.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -75,9 +76,7 @@ func dataSourceTencentCloudAvailabilityZonesRead(d *schema.ResourceData, meta in logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cvmService := CvmService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var name string var includeUnavailable = false @@ -107,7 +106,7 @@ func dataSourceTencentCloudAvailabilityZonesRead(d *schema.ResourceData, meta in if name != "" && name != *zone.Zone { continue } - if !includeUnavailable && *zone.ZoneState == ZONE_STATE_UNAVAILABLE { + if !includeUnavailable && *zone.ZoneState == svccvm.ZONE_STATE_UNAVAILABLE { continue } mapping := map[string]interface{}{ diff --git a/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go b/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go index 1269760064..755b830981 100644 --- a/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -114,7 +115,7 @@ func dataSourceTencentCloudAvailabilityZonesByProductRead(d *schema.ResourceData if name != "" && name != *zone.Zone { continue } - if !includeUnavailable && *zone.ZoneState == ZONE_STATE_UNAVAILABLE { + if !includeUnavailable && *zone.ZoneState == svccvm.ZONE_STATE_UNAVAILABLE { continue } mapping := map[string]interface{}{ diff --git a/tencentcloud/services/common/extension_cvm.go b/tencentcloud/services/common/extension_cvm.go deleted file mode 100644 index de9142aea6..0000000000 --- a/tencentcloud/services/common/extension_cvm.go +++ /dev/null @@ -1,118 +0,0 @@ -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/services/common/service_tencentcloud_cvm.go b/tencentcloud/services/common/service_tencentcloud_cvm.go deleted file mode 100644 index 083ce860c6..0000000000 --- a/tencentcloud/services/common/service_tencentcloud_cvm.go +++ /dev/null @@ -1,1772 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cos/data_source_tc_cos_batchs.go b/tencentcloud/services/cos/data_source_tc_cos_batchs.go index aef8ca0bac..49fc5399cf 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_batchs.go +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs.go @@ -8,8 +8,9 @@ import ( 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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func DataSourceTencentCloudCosBatchs() *schema.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 19468bab2d..95bf911afd 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go @@ -9,6 +9,7 @@ import ( 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_multipart_uploads.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go index ff5220cd22..3b103bd2ec 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 @@ -8,8 +8,9 @@ import ( 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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func DataSourceTencentCloudCosBucketMultipartUploads() *schema.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 9bf67322b0..57b3c121be 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go @@ -9,6 +9,7 @@ import ( "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 34c8994145..0c1c31f166 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_buckets.go +++ b/tencentcloud/services/cos/data_source_tc_cos_buckets.go @@ -10,6 +10,7 @@ import ( 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/extension_cam.go b/tencentcloud/services/cos/extension_cam.go deleted file mode 100644 index e210061891..0000000000 --- a/tencentcloud/services/cos/extension_cam.go +++ /dev/null @@ -1,26 +0,0 @@ -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/services/cos/resource_tc_cos_batch.go b/tencentcloud/services/cos/resource_tc_cos_batch.go index 56665b8558..426ddb2f70 100644 --- a/tencentcloud/services/cos/resource_tc_cos_batch.go +++ b/tencentcloud/services/cos/resource_tc_cos_batch.go @@ -13,8 +13,9 @@ import ( "github.com/google/uuid" "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" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func ResourceTencentCloudCosBatch() *schema.Resource { diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket.go b/tencentcloud/services/cos/resource_tc_cos_bucket.go index 269798129f..4a472598d5 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket.go @@ -23,6 +23,7 @@ import ( "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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) 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 2f82a889d7..c2b0c2ff4e 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 @@ -12,8 +12,9 @@ import ( "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" cos "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func ResourceTencentCloudCosBucketDomainCertificateAttachment() *schema.Resource { diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go index 29aa7b307f..d5a793d786 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go @@ -12,6 +12,8 @@ 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/helper/validation" + + svccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" ) func ResourceTencentCloudCosBucketPolicy() *schema.Resource { @@ -67,9 +69,7 @@ func resourceTencentCloudCosBucketPolicyCreate(d *schema.ResourceData, meta inte cosService := CosService{ client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - camService := CamService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + camService := svccam.NewCamService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) policyErr := camService.PolicyDocumentForceCheck(policy) if policyErr != nil { return policyErr @@ -131,9 +131,7 @@ func resourceTencentCloudCosBucketPolicyUpdate(d *schema.ResourceData, meta inte if d.HasChange("policy") { policy := d.Get("policy").(string) - camService := CamService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + camService := svccam.NewCamService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) policyErr := camService.PolicyDocumentForceCheck(policy) if policyErr != nil { return policyErr diff --git a/tencentcloud/services/cos/service_tencentcloud_cam.go b/tencentcloud/services/cos/service_tencentcloud_cam.go deleted file mode 100644 index bcc4b4f6e5..0000000000 --- a/tencentcloud/services/cos/service_tencentcloud_cam.go +++ /dev/null @@ -1,1968 +0,0 @@ -package cos - -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" -) - -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/crs/extension_tags.go b/tencentcloud/services/crs/extension_tags.go deleted file mode 100644 index 1cfd693ac5..0000000000 --- a/tencentcloud/services/crs/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package crs - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/crs/resource_tc_redis_instance.go b/tencentcloud/services/crs/resource_tc_redis_instance.go index 3bf8ecc1d6..68389e6bed 100644 --- a/tencentcloud/services/crs/resource_tc_redis_instance.go +++ b/tencentcloud/services/crs/resource_tc_redis_instance.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -264,7 +265,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() redisService := RedisService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(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. //internal version: replace clientCreate end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. region := client.Region @@ -620,7 +621,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.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(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. @@ -644,7 +645,7 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() redisService := RedisService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region d.Partial(true) @@ -925,7 +926,7 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.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 := 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. diff --git a/tencentcloud/services/crs/resource_tc_redis_param.go b/tencentcloud/services/crs/resource_tc_redis_param.go new file mode 100644 index 0000000000..1288d422bb --- /dev/null +++ b/tencentcloud/services/crs/resource_tc_redis_param.go @@ -0,0 +1,180 @@ +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 ResourceTencentCloudRedisParam() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudRedisParamCreate, + Read: resourceTencentCloudRedisParamRead, + Update: resourceTencentCloudRedisParamUpdate, + Delete: resourceTencentCloudRedisParamDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "The ID of instance.", + }, + + "instance_params": { + Required: true, + Type: schema.TypeMap, + Description: "A list of parameters modified by the instance.", + }, + }, + } +} + +func resourceTencentCloudRedisParamCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_redis_param.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + instanceId string + ) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudRedisParamUpdate(d, meta) +} + +func resourceTencentCloudRedisParamRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_redis_param.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + instanceId := d.Id() + + param, err := service.DescribeRedisParamById(ctx, instanceId) + if err != nil { + return err + } + + if len(param) == 0 { + d.SetId("") + log.Printf("[WARN]%s resource `RedisParam` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + instanceParamsMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_params"); ok { + for k := range v.(map[string]interface{}) { + instanceParamsMap[k] = param[k] + } + } else { + instanceParamsMap = param + } + _ = d.Set("instance_params", instanceParamsMap) + + return nil +} + +func resourceTencentCloudRedisParamUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_redis_param.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := redis.NewModifyInstanceParamsRequest() + response := redis.NewModifyInstanceParamsResponse() + + instanceId := d.Id() + request.InstanceId = &instanceId + + if v, ok := d.GetOk("instance_params"); ok { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + param, err := service.DescribeRedisParamById(ctx, instanceId) + if err != nil && len(param) == 0 { + return fmt.Errorf("[ERROR] resource `RedisParam` [%s] not found, please check if it has been deleted.\n", d.Id()) + } + for k, v := range v.(map[string]interface{}) { + if value, ok := param[k]; ok { + if value != v { + instanceParam := redis.InstanceParam{} + instanceParam.Key = helper.String(k) + instanceParam.Value = helper.String(v.(string)) + request.InstanceParams = append(request.InstanceParams, &instanceParam) + } + } else { + return fmt.Errorf("[ERROR] The parameter name [%v] does not exist, please check the parameter name.\n", k) + } + } + } + + if len(request.InstanceParams) == 0 { + return resourceTencentCloudRedisParamRead(d, meta) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyInstanceParams(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 update redis param failed, reason:%+v", logId, err) + return err + } + + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + taskId := *response.Response.TaskId + 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 { + return resource.RetryableError(err) + } else { + return resource.NonRetryableError(err) + } + } + if ok { + return nil + } else { + return resource.RetryableError(fmt.Errorf("change param is processing")) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s redis change param fail, reason:%s\n", logId, err.Error()) + return err + } + + return resourceTencentCloudRedisParamRead(d, meta) +} + +func resourceTencentCloudRedisParamDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_redis_param.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/crs/resource_tc_redis_param.md b/tencentcloud/services/crs/resource_tc_redis_param.md new file mode 100644 index 0000000000..0259266cac --- /dev/null +++ b/tencentcloud/services/crs/resource_tc_redis_param.md @@ -0,0 +1,37 @@ +Provides a resource to create a redis param + +Example Usage + +```hcl +resource "tencentcloud_redis_param" "param" { + instance_id = "crs-c1nl9rpv" + instance_params = { + "cluster-node-timeout" = "15000" + "disable-command-list" = "\"\"" + "hash-max-ziplist-entries" = "512" + "hash-max-ziplist-value" = "64" + "hz" = "10" + "lazyfree-lazy-eviction" = "yes" + "lazyfree-lazy-expire" = "yes" + "lazyfree-lazy-server-del" = "yes" + "maxmemory-policy" = "noeviction" + "notify-keyspace-events" = "\"\"" + "proxy-slowlog-log-slower-than" = "500" + "replica-lazy-flush" = "yes" + "sentineauth" = "no" + "set-max-intset-entries" = "512" + "slowlog-log-slower-than" = "10" + "timeout" = "31536000" + "zset-max-ziplist-entries" = "128" + "zset-max-ziplist-value" = "64" + } +} +``` + +Import + +redis param can be imported using the instanceId, e.g. + +``` +terraform import tencentcloud_redis_param.param crs-c1nl9rpv +``` diff --git a/tencentcloud/resource_tc_redis_param_test.go b/tencentcloud/services/crs/resource_tc_redis_param_test.go similarity index 91% rename from tencentcloud/resource_tc_redis_param_test.go rename to tencentcloud/services/crs/resource_tc_redis_param_test.go index fd369d89ab..4abd7abacb 100644 --- a/tencentcloud/resource_tc_redis_param_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_param_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package crs_test import ( "context" "fmt" "testing" + 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" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,15 +17,15 @@ import ( func TestAccTencentCloudRedisParamResource_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: testAccRedisParam, Check: resource.ComposeAggregateTestCheckFunc( testAccTencentCloudRedisParamExists("tencentcloud_redis_param.param"), resource.TestCheckResourceAttrSet("tencentcloud_redis_param.param", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.cluster-node-timeout", "15000"), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.disable-command-list", "\"\""), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.hash-max-ziplist-entries", "512"), @@ -53,7 +57,7 @@ func TestAccTencentCloudRedisParamResource_basic(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( testAccTencentCloudRedisParamExists("tencentcloud_redis_param.param"), resource.TestCheckResourceAttrSet("tencentcloud_redis_param.param", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.cluster-node-timeout", "15000"), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.disable-command-list", "\"\""), resource.TestCheckResourceAttr("tencentcloud_redis_param.param", "instance_params.hash-max-ziplist-entries", "512"), @@ -82,15 +86,15 @@ func TestAccTencentCloudRedisParamResource_basic(t *testing.T) { func testAccTencentCloudRedisParamExists(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()) params, err := service.DescribeRedisParamById(ctx, rs.Primary.ID) if err != nil { return err @@ -105,7 +109,7 @@ func testAccTencentCloudRedisParamExists(r string) resource.TestCheckFunc { const testAccRedisParamVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/services/crs/service_tencentcloud_tag.go b/tencentcloud/services/crs/service_tencentcloud_tag.go deleted file mode 100644 index a37bd91256..0000000000 --- a/tencentcloud/services/crs/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cvm/data_source_tc_eip.go b/tencentcloud/services/cvm/data_source_tc_eip.go index 0a4db5f524..e72cd08374 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip.go +++ b/tencentcloud/services/cvm/data_source_tc_eip.go @@ -5,6 +5,7 @@ import ( "errors" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -76,9 +77,7 @@ func dataSourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) err logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService := VpcService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + vpcService := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) filter := make(map[string][]string) filters, ok := d.GetOk("filter") diff --git a/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go index 7501f09970..1533b2abe7 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -58,7 +59,7 @@ func dataSourceTencentCloudEipAddressQuotaRead(d *schema.ResourceData, meta inte ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var quotaSet []*vpc.Quota diff --git a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go index f72d013fe8..88551782c7 100644 --- a/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -37,7 +38,7 @@ func dataSourceTencentCloudEipNetworkAccountTypeRead(d *schema.ResourceData, met ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeEipNetworkAccountType(ctx) diff --git a/tencentcloud/services/cvm/data_source_tc_eips.go b/tencentcloud/services/cvm/data_source_tc_eips.go index 87c09391ab..58057f6c3d 100644 --- a/tencentcloud/services/cvm/data_source_tc_eips.go +++ b/tencentcloud/services/cvm/data_source_tc_eips.go @@ -5,6 +5,8 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -108,8 +110,8 @@ func dataSourceTencentCloudEipsRead(d *schema.ResourceData, meta interface{}) er ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - vpcService := VpcService{client: client} - tagService := TagService{client: client} + vpcService := svcvpc.NewVpcService(client) + tagService := svctag.NewTagService(client) region := client.Region filter := make(map[string][]string) @@ -143,7 +145,7 @@ func dataSourceTencentCloudEipsRead(d *schema.ResourceData, meta interface{}) er EIP_LOOP: for _, eip := range eips { - respTags, err := tagService.DescribeResourceTags(ctx, VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, *eip.AddressId) + respTags, err := tagService.DescribeResourceTags(ctx, svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, *eip.AddressId) if err != nil { log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err) return err diff --git a/tencentcloud/services/cvm/data_source_tc_images.go b/tencentcloud/services/cvm/data_source_tc_images.go index b58923010a..b105b0ac25 100644 --- a/tencentcloud/services/cvm/data_source_tc_images.go +++ b/tencentcloud/services/cvm/data_source_tc_images.go @@ -14,6 +14,8 @@ import ( cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + svccbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" ) func DataSourceTencentCloudImages() *schema.Resource { @@ -178,9 +180,7 @@ func dataSourceTencentCloudImagesRead(d *schema.ResourceData, meta interface{}) client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - cbsService := CbsService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + cbsService := svccbs.NewCbsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var ( imageId string @@ -311,7 +311,7 @@ func dataSourceTencentCloudImagesRead(d *schema.ResourceData, meta interface{}) return nil } -func imagesReadSnapshotByIds(ctx context.Context, cbsService CbsService, image *cvm.Image) (snapshotResults []map[string]interface{}, errRet error) { +func imagesReadSnapshotByIds(ctx context.Context, cbsService svccbs.CbsService, image *cvm.Image) (snapshotResults []map[string]interface{}, errRet error) { if len(image.SnapshotSet) == 0 { return } diff --git a/tencentcloud/services/cvm/extension_cbs.go b/tencentcloud/services/cvm/extension_cbs.go deleted file mode 100644 index de84f7295c..0000000000 --- a/tencentcloud/services/cvm/extension_cbs.go +++ /dev/null @@ -1,57 +0,0 @@ -package cvm - -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/cvm/extension_security_group.go b/tencentcloud/services/cvm/extension_security_group.go deleted file mode 100644 index ce5ef31fda..0000000000 --- a/tencentcloud/services/cvm/extension_security_group.go +++ /dev/null @@ -1,3 +0,0 @@ -package cvm - -const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/cvm/extension_tags.go b/tencentcloud/services/cvm/extension_tags.go deleted file mode 100644 index 08aae59791..0000000000 --- a/tencentcloud/services/cvm/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cvm - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cvm/extension_vpc.go b/tencentcloud/services/cvm/extension_vpc.go deleted file mode 100644 index 6f5646dc6b..0000000000 --- a/tencentcloud/services/cvm/extension_vpc.go +++ /dev/null @@ -1,327 +0,0 @@ -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_import_image.go b/tencentcloud/services/cvm/resource_tc_cvm_import_image.go similarity index 83% rename from tencentcloud/resource_tc_cvm_import_image.go rename to tencentcloud/services/cvm/resource_tc_cvm_import_image.go index a8189643d8..c2179f5e7a 100644 --- a/tencentcloud/resource_tc_cvm_import_image.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_import_image.go @@ -1,54 +1,18 @@ -/* -Provides a resource to create a cvm import_image - -Example Usage - -```hcl -resource "tencentcloud_cvm_import_image" "import_image" { - architecture = "x86_64" - os_type = "CentOS" - os_version = "7" - image_url = "" - image_name = "sample" - image_description = "sampleimage" - dry_run = false - force = false - tag_specification { - resource_type = "image" - tags { - key = "tagKey" - value = "tagValue" - } - - } - license_type = "TencentCloud" - boot_mode = "Legacy BIOS" - tags = { - "createdBy" = "terraform" - } -} -``` - -Import - -cvm import_image can be imported using the id, e.g. - -``` -terraform import tencentcloud_cvm_import_image.import_image import_image_id -``` -*/ -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 resourceTencentCloudCvmImportImage() *schema.Resource { +func ResourceTencentCloudCvmImportImage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmImportImageCreate, Read: resourceTencentCloudCvmImportImageRead, @@ -166,10 +130,10 @@ func resourceTencentCloudCvmImportImage() *schema.Resource { } func resourceTencentCloudCvmImportImageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_import_image.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_import_image.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewImportImageRequest() @@ -240,10 +204,10 @@ func resourceTencentCloudCvmImportImageCreate(d *schema.ResourceData, meta inter request.BootMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ImportImage(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ImportImage(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -260,15 +224,15 @@ func resourceTencentCloudCvmImportImageCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCvmImportImageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_import_image.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_import_image.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmImportImageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_import_image.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_import_image.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_import_image.md b/tencentcloud/services/cvm/resource_tc_cvm_import_image.md new file mode 100644 index 0000000000..7c79c50e2e --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_import_image.md @@ -0,0 +1,37 @@ +Provides a resource to create a cvm import_image + +Example Usage + +```hcl +resource "tencentcloud_cvm_import_image" "import_image" { + architecture = "x86_64" + os_type = "CentOS" + os_version = "7" + image_url = "" + image_name = "sample" + image_description = "sampleimage" + dry_run = false + force = false + tag_specification { + resource_type = "image" + tags { + key = "tagKey" + value = "tagValue" + } + + } + license_type = "TencentCloud" + boot_mode = "Legacy BIOS" + tags = { + "createdBy" = "terraform" + } +} +``` + +Import + +cvm import_image can be imported using the id, e.g. + +``` +terraform import tencentcloud_cvm_import_image.import_image import_image_id +``` diff --git a/tencentcloud/resource_tc_cvm_import_image_test.go b/tencentcloud/services/cvm/resource_tc_cvm_import_image_test.go similarity index 85% rename from tencentcloud/resource_tc_cvm_import_image_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_import_image_test.go index c1a8daaee8..8ee780adb6 100644 --- a/tencentcloud/resource_tc_cvm_import_image_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_import_image_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 TestAccTencentCloudNeedFixCvmImportImageResource_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: testAccCvmImportImage, diff --git a/tencentcloud/resource_tc_cvm_modify_instance_disk_type.go b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go similarity index 87% rename from tencentcloud/resource_tc_cvm_modify_instance_disk_type.go rename to tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go index 515a55285b..293b3f8f2c 100644 --- a/tencentcloud/resource_tc_cvm_modify_instance_disk_type.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.go @@ -1,45 +1,18 @@ -/* -Provides a resource to create a cvm modify_instance_disk_type - -Example Usage - -```hcl -resource "tencentcloud_cvm_modify_instance_disk_type" "modify_instance_disk_type" { - instance_id = "ins-r8hr2upy" - data_disks { - disk_size = 50 - disk_type = "CLOUD_BASIC" - disk_id = "disk-hrsd0u81" - delete_with_instance = true - snapshot_id = "snap-r9unnd89" - encrypt = false - kms_key_id = "kms-abcd1234" - throughput_performance = 2 - cdc_id = "cdc-b9pbd3px" - - } - system_disk { - disk_type = "CLOUD_PREMIUM" - disk_id = "disk-1drr53sd" - disk_size = 50 - cdc_id = "cdc-b9pbd3px" - - } -} -``` -*/ -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 resourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { +func ResourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmModifyInstanceDiskTypeCreate, Read: resourceTencentCloudCvmModifyInstanceDiskTypeRead, @@ -171,10 +144,10 @@ func resourceTencentCloudCvmModifyInstanceDiskType() *schema.Resource { } func resourceTencentCloudCvmModifyInstanceDiskTypeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewModifyInstanceDiskTypeRequest() @@ -237,10 +210,10 @@ func resourceTencentCloudCvmModifyInstanceDiskTypeCreate(d *schema.ResourceData, request.SystemDisk = &systemDisk } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyInstanceDiskType(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyInstanceDiskType(request) if e != nil { - return retryError(e) + return tccommon.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,15 +230,15 @@ func resourceTencentCloudCvmModifyInstanceDiskTypeCreate(d *schema.ResourceData, } func resourceTencentCloudCvmModifyInstanceDiskTypeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmModifyInstanceDiskTypeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_modify_instance_disk_type.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.md b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.md new file mode 100644 index 0000000000..06f9b5be0f --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type.md @@ -0,0 +1,28 @@ +Provides a resource to create a cvm modify_instance_disk_type + +Example Usage + +```hcl +resource "tencentcloud_cvm_modify_instance_disk_type" "modify_instance_disk_type" { + instance_id = "ins-r8hr2upy" + data_disks { + disk_size = 50 + disk_type = "CLOUD_BASIC" + disk_id = "disk-hrsd0u81" + delete_with_instance = true + snapshot_id = "snap-r9unnd89" + encrypt = false + kms_key_id = "kms-abcd1234" + throughput_performance = 2 + cdc_id = "cdc-b9pbd3px" + + } + system_disk { + disk_type = "CLOUD_PREMIUM" + disk_id = "disk-1drr53sd" + disk_size = 50 + cdc_id = "cdc-b9pbd3px" + + } +} +``` diff --git a/tencentcloud/resource_tc_cvm_modify_instance_disk_type_test.go b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go similarity index 87% rename from tencentcloud/resource_tc_cvm_modify_instance_disk_type_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_type_test.go index b1d5c395fc..5b9a7dd022 100644 --- a/tencentcloud/resource_tc_cvm_modify_instance_disk_type_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_modify_instance_disk_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,9 +12,9 @@ func TestAccTencentCloudNeedFixCvmModifyInstanceDiskTypeResource_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: testAccCvmModifyInstanceDiskType, diff --git a/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go new file mode 100644 index 0000000000..006cee2ac6 --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.go @@ -0,0 +1,117 @@ +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 ResourceTencentCloudCvmProgramFpgaImage() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudCvmProgramFpgaImageCreate, + Read: resourceTencentCloudCvmProgramFpgaImageRead, + Delete: resourceTencentCloudCvmProgramFpgaImageDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "The ID information of the instance.", + }, + + "fpga_url": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "COS URL address of the FPGA image file.", + }, + + "dbd_fs": { + Optional: true, + ForceNew: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "The DBDF number of the FPGA card on the instance, if left blank, the FPGA image will be burned to all FPGA cards owned by the instance by default.", + }, + + "dry_run": { + Optional: true, + ForceNew: true, + Type: schema.TypeBool, + Description: "Trial run, will not perform the actual burning action, the default is False.", + }, + }, + } +} + +func resourceTencentCloudCvmProgramFpgaImageCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cvm_program_fpga_image.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = cvm.NewProgramFpgaImageRequest() + ) + instanceId := d.Get("instance_id").(string) + request.InstanceId = helper.String(instanceId) + + if v, ok := d.GetOk("fpga_url"); ok { + request.FPGAUrl = helper.String(v.(string)) + } + + if v, ok := d.GetOk("dbd_fs"); ok { + dBDFsSet := v.(*schema.Set).List() + for i := range dBDFsSet { + dBDFs := dBDFsSet[i].(string) + request.DBDFs = append(request.DBDFs, &dBDFs) + } + } + + if v, _ := d.GetOk("dry_run"); v != nil { + request.DryRun = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ProgramFpgaImage(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 cvm programFpgaImage failed, reason:%+v", logId, err) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudCvmProgramFpgaImageRead(d, meta) +} + +func resourceTencentCloudCvmProgramFpgaImageRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cvm_program_fpga_image.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudCvmProgramFpgaImageDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_cvm_program_fpga_image.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.md b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.md new file mode 100644 index 0000000000..57d10fb8c8 --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image.md @@ -0,0 +1,19 @@ +Provides a resource to create a cvm program_fpga_image + +Example Usage + +```hcl +resource "tencentcloud_cvm_program_fpga_image" "program_fpga_image" { + instance_id = "ins-xxxxxx" + fpga_url = "" + dbd_fs = "" +} +``` + +Import + +cvm program_fpga_image can be imported using the id, e.g. + +``` +terraform import tencentcloud_cvm_program_fpga_image.program_fpga_image program_fpga_image_id +``` diff --git a/tencentcloud/resource_tc_cvm_program_fpga_image_test.go b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_test.go similarity index 81% rename from tencentcloud/resource_tc_cvm_program_fpga_image_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_test.go index 6af00e59f0..336c02f1f4 100644 --- a/tencentcloud/resource_tc_cvm_program_fpga_image_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_program_fpga_image_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 TestAccTencentCloudNeedFixCvmProgramFpgaImageResource_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: testAccCvmProgramFpgaImage, diff --git a/tencentcloud/resource_tc_cvm_renew_host.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go similarity index 79% rename from tencentcloud/resource_tc_cvm_renew_host.go rename to tencentcloud/services/cvm/resource_tc_cvm_renew_host.go index cf703ba26b..2ab672b4c9 100644 --- a/tencentcloud/resource_tc_cvm_renew_host.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.go @@ -1,30 +1,18 @@ -/* -Provides a resource to create a cvm renew_host - -Example Usage - -```hcl -resource "tencentcloud_cvm_renew_host" "renew_host" { - host_id = "xxxxxx" - host_charge_prepaid { - period = 1 - renew_flag = "NOTIFY_AND_MANUAL_RENEW" - } -} -``` -*/ -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 resourceTencentCloudCvmRenewHost() *schema.Resource { +func ResourceTencentCloudCvmRenewHost() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmRenewHostCreate, Read: resourceTencentCloudCvmRenewHostRead, @@ -63,10 +51,10 @@ func resourceTencentCloudCvmRenewHost() *schema.Resource { } func resourceTencentCloudCvmRenewHostCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_host.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_host.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewRenewHostsRequest() @@ -85,10 +73,10 @@ func resourceTencentCloudCvmRenewHostCreate(d *schema.ResourceData, meta interfa request.HostChargePrepaid = &chargePrepaid } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RenewHosts(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RenewHosts(request) if e != nil { - return retryError(e) + return tccommon.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 +93,15 @@ func resourceTencentCloudCvmRenewHostCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCvmRenewHostRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_host.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_host.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmRenewHostDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_host.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_host.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/cvm/resource_tc_cvm_renew_host.md b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.md new file mode 100644 index 0000000000..c02f0eaaaa --- /dev/null +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_host.md @@ -0,0 +1,13 @@ +Provides a resource to create a cvm renew_host + +Example Usage + +```hcl +resource "tencentcloud_cvm_renew_host" "renew_host" { + host_id = "xxxxxx" + host_charge_prepaid { + period = 1 + renew_flag = "NOTIFY_AND_MANUAL_RENEW" + } +} +``` diff --git a/tencentcloud/resource_tc_cvm_renew_host_test.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_host_test.go similarity index 81% rename from tencentcloud/resource_tc_cvm_renew_host_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_renew_host_test.go index 65e20ce5f9..816424f634 100644 --- a/tencentcloud/resource_tc_cvm_renew_host_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_host_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 TestAccTencentCloudNeedFixCvmRenewHostResource_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: testAccCvmRenewHost, diff --git a/tencentcloud/services/cvm/resource_tc_eip.go b/tencentcloud/services/cvm/resource_tc_eip.go index 2281ee8646..e7ba5bbee4 100644 --- a/tencentcloud/services/cvm/resource_tc_eip.go +++ b/tencentcloud/services/cvm/resource_tc_eip.go @@ -6,6 +6,8 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -35,7 +37,7 @@ func ResourceTencentCloudEip() *schema.Resource { "type": { Type: schema.TypeString, Optional: true, - Default: EIP_TYPE_EIP, + Default: svcvpc.EIP_TYPE_EIP, ForceNew: true, Description: "The type of eip. Valid value: `EIP` and `AnycastEIP` and `HighQualityEIP` and `AntiDDoSEIP`. Default is `EIP`.", }, @@ -66,7 +68,7 @@ func ResourceTencentCloudEip() *schema.Resource { "prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: tccommon.ValidateAllowedIntValue(EIP_AVAILABLE_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(svcvpc.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`.", }, @@ -128,8 +130,8 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - vpcService := VpcService{client: client} - tagService := TagService{client: client} + vpcService := svcvpc.NewVpcService(client) + tagService := svctag.NewTagService(client) region := client.Region var internetChargeType string @@ -207,7 +209,7 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err d.SetId(eipId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := tccommon.BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) + resourceName := tccommon.BuildTagResourceName(svcvpc.VPC_SERVICE_TYPE, svcvpc.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 @@ -220,7 +222,7 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err if errRet != nil { return tccommon.RetryError(errRet) } - if eip != nil && *eip.AddressStatus == EIP_STATUS_CREATING { + if eip != nil && *eip.AddressStatus == svcvpc.EIP_STATUS_CREATING { return resource.RetryableError(fmt.Errorf("eip is still creating")) } return nil @@ -240,8 +242,8 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - vpcService := VpcService{client: client} - tagService := TagService{client: client} + vpcService := svcvpc.NewVpcService(client) + tagService := svctag.NewTagService(client) region := client.Region eipId := d.Id() @@ -262,7 +264,7 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error return nil } - tags, err := tagService.DescribeResourceTags(ctx, VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) + tags, err := tagService.DescribeResourceTags(ctx, svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, eipId) if err != nil { log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err) return err @@ -305,8 +307,8 @@ func resourceTencentCloudEipUpdate(d *schema.ResourceData, meta interface{}) err ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - vpcService := VpcService{client: client} - tagService := TagService{client: client} + vpcService := svcvpc.NewVpcService(client) + tagService := svctag.NewTagService(client) region := client.Region eipId := d.Id() @@ -378,8 +380,8 @@ 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 := tccommon.BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName(svcvpc.VPC_SERVICE_TYPE, svcvpc.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) @@ -398,9 +400,7 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService := VpcService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + vpcService := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) eipId := d.Id() err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := vpcService.UnattachEip(ctx, eipId) diff --git a/tencentcloud/services/cvm/resource_tc_eip_address_transform.go b/tencentcloud/services/cvm/resource_tc_eip_address_transform.go index 1e92fc38b3..f0ce0d39f7 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_address_transform.go +++ b/tencentcloud/services/cvm/resource_tc_eip_address_transform.go @@ -5,6 +5,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -66,7 +67,7 @@ func resourceTencentCloudEipAddressTransformCreate(d *schema.ResourceData, meta taskId := *response.Response.TaskId d.SetId(instanceId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*tccommon.ReadRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(helper.UInt64ToStr(taskId), []string{})) diff --git a/tencentcloud/services/cvm/resource_tc_eip_association.go b/tencentcloud/services/cvm/resource_tc_eip_association.go index 087851a3b0..0cee54ffbf 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_association.go +++ b/tencentcloud/services/cvm/resource_tc_eip_association.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -75,7 +76,7 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter var ( logId = tccommon.GetLogId(tccommon.ContextNil) ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) eip *vpc.Address errRet error ) @@ -98,7 +99,7 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter return err } - if *eip.AddressStatus != EIP_STATUS_UNBIND { + if *eip.AddressStatus != svcvpc.EIP_STATUS_UNBIND { return fmt.Errorf("eip status is illegal %s", *eip.AddressStatus) } @@ -128,7 +129,7 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter return resource.NonRetryableError(fmt.Errorf("eip is not found")) } - if *eip.AddressStatus == EIP_STATUS_BIND { + if *eip.AddressStatus == svcvpc.EIP_STATUS_BIND { return nil } @@ -191,7 +192,7 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter return resource.NonRetryableError(fmt.Errorf("eip is not found")) } - if *eip.AddressStatus == EIP_STATUS_BIND_ENI || *eip.AddressStatus == EIP_STATUS_BIND { + if *eip.AddressStatus == svcvpc.EIP_STATUS_BIND_ENI || *eip.AddressStatus == svcvpc.EIP_STATUS_BIND { return nil } @@ -216,7 +217,7 @@ func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interfa var ( logId = tccommon.GetLogId(tccommon.ContextNil) ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id = d.Id() ) @@ -260,7 +261,7 @@ func resourceTencentCloudEipAssociationDelete(d *schema.ResourceData, meta inter var ( logId = tccommon.GetLogId(tccommon.ContextNil) ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id = d.Id() ) diff --git a/tencentcloud/services/cvm/resource_tc_eip_association_test.go b/tencentcloud/services/cvm/resource_tc_eip_association_test.go index 55a0107610..3ee962c42b 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_association_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_association_test.go @@ -4,6 +4,7 @@ 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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "context" "fmt" @@ -75,7 +76,7 @@ func TestAccTencentCloudEipAssociationWithNetworkInterface(t *testing.T) { func testAccCheckEipAssociationDestroy(s *terraform.State) error { logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eip_association" { continue @@ -122,7 +123,7 @@ func testAccCheckEipAssociationExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("eip association id is not set") } - vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) associationId, err := svccvm.ParseEipAssociationId(rs.Primary.ID) if err != nil { diff --git a/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go index 9de078e943..7820d230a1 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go +++ b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go @@ -5,6 +5,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -41,7 +42,7 @@ func resourceTencentCloudEipPublicAddressAdjustCreate(d *schema.ResourceData, me var ( logId = tccommon.GetLogId(tccommon.ContextNil) - service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = vpc.NewAdjustPublicAddressRequest() instanceId string addressId string diff --git a/tencentcloud/services/cvm/resource_tc_eip_test.go b/tencentcloud/services/cvm/resource_tc_eip_test.go index 612dd68071..941f7a112e 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_test.go @@ -4,7 +4,7 @@ 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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "context" "fmt" @@ -35,7 +35,7 @@ func testSweepEipInstance(region string) error { } client := sharedClient.(tccommon.ProviderMeta) - vpcService := svccvm.NewVpcService(client.GetAPIV3Conn()) + vpcService := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeEipByFilter(ctx, nil) if err != nil { @@ -253,7 +253,7 @@ func testAccCheckEipExists(n string) resource.TestCheckFunc { return fmt.Errorf("eip id is not set") } - vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) eip, err := vpcService.DescribeEipById(ctx, rs.Primary.ID) if err != nil { err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { @@ -277,7 +277,7 @@ func testAccCheckEipExists(n string) resource.TestCheckFunc { func testAccCheckEipDestroy(s *terraform.State) error { logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eip" { continue diff --git a/tencentcloud/services/cvm/resource_tc_image.go b/tencentcloud/services/cvm/resource_tc_image.go index deb2dcc428..57d1e8ffbc 100644 --- a/tencentcloud/services/cvm/resource_tc_image.go +++ b/tencentcloud/services/cvm/resource_tc_image.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -172,7 +173,7 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) 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. @@ -237,7 +238,7 @@ func resourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) err } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client} + tagService := svctag.NewTagService(client) tags, err := tagService.DescribeResourceTags(ctx, "cvm", "image", client.Region, d.Id()) if err != nil { @@ -269,10 +270,8 @@ func resourceTencentCloudImageUpdate(d *schema.ResourceData, meta interface{}) e if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("cvm", "image", region, instanceId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) diff --git a/tencentcloud/services/cvm/resource_tc_instance.go b/tencentcloud/services/cvm/resource_tc_instance.go index 8b22723e80..fd0bd804b5 100644 --- a/tencentcloud/services/cvm/resource_tc_instance.go +++ b/tencentcloud/services/cvm/resource_tc_instance.go @@ -11,6 +11,8 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -703,7 +705,7 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) 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. @@ -775,7 +777,7 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) cvmService := CvmService{ client: client, } - cbsService := CbsService{client: client} + cbsService := svccbs.NewCbsService(client) var instance *cvm.Instance var errRet error err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { @@ -851,7 +853,7 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) _ = d.Set("allocate_public_ip", len(instance.PublicIpAddresses) > 0) } - tagService := TagService{client} + tagService := svctag.NewTagService(client) tags, err := tagService.DescribeResourceTags(ctx, "cvm", "instance", client.Region, d.Id()) if err != nil { @@ -1255,9 +1257,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return fmt.Errorf("error: data disk count has changed (%d -> %d) but doesn't support add or remove for now", len(ov), len(nv)) } - cbsService := CbsService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + cbsService := svccbs.NewCbsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) for i := range nv { sizeKey := fmt.Sprintf("data_disks.%d.data_disk_size", i) @@ -1368,10 +1368,8 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("cvm", "instance", region, instanceId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) @@ -1522,13 +1520,13 @@ 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.(tccommon.ProviderMeta).GetAPIV3Conn()} + cbsService := svccbs.NewCbsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { diskInfo, e := cbsService.DescribeDiskById(ctx, diskId) if e != nil { return tccommon.RetryError(e, tccommon.InternalError) } - if *diskInfo.DiskState != CBS_STORAGE_STATUS_UNATTACHED { + if *diskInfo.DiskState != svccbs.CBS_STORAGE_STATUS_UNATTACHED { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState)) } return nil @@ -1553,7 +1551,7 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} if e != nil { return tccommon.RetryError(e, tccommon.InternalError) } - if *diskInfo.DiskState == CBS_STORAGE_STATUS_TORECYCLE { + if *diskInfo.DiskState == svccbs.CBS_STORAGE_STATUS_TORECYCLE { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState)) } return nil diff --git a/tencentcloud/services/cvm/resource_tc_instance_test.go b/tencentcloud/services/cvm/resource_tc_instance_test.go index 1d1f9bd4dd..337304c388 100644 --- a/tencentcloud/services/cvm/resource_tc_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_instance_test.go @@ -4,6 +4,7 @@ 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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "context" "fmt" @@ -690,7 +691,7 @@ func testAccCheckSecurityGroupExists(n string, id *string) resource.TestCheckFun return fmt.Errorf("no security group ID is set") } - service := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) sg, err := service.DescribeSecurityGroup(context.TODO(), rs.Primary.ID) if err != nil { diff --git a/tencentcloud/services/cvm/resource_tc_key_pair.go b/tencentcloud/services/cvm/resource_tc_key_pair.go index 6cb817c637..c768504a77 100644 --- a/tencentcloud/services/cvm/resource_tc_key_pair.go +++ b/tencentcloud/services/cvm/resource_tc_key_pair.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -154,7 +155,7 @@ func resourceTencentCloudKeyPairCreate(d *schema.ResourceData, meta interface{}) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("cvm", "keypair", tcClient.Region, keyId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -204,7 +205,7 @@ func resourceTencentCloudKeyPairRead(d *schema.ResourceData, meta interface{}) e } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client} + tagService := svctag.NewTagService(client) tags, err := tagService.DescribeResourceTags(ctx, "cvm", "keypair", client.Region, d.Id()) if err != nil { @@ -236,10 +237,8 @@ func resourceTencentCloudKeyPairUpdate(d *schema.ResourceData, meta interface{}) if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("cvm", "keypair", region, keyId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) diff --git a/tencentcloud/services/cvm/service_tencentcloud_cbs.go b/tencentcloud/services/cvm/service_tencentcloud_cbs.go deleted file mode 100644 index 22a4d1d0ca..0000000000 --- a/tencentcloud/services/cvm/service_tencentcloud_cbs.go +++ /dev/null @@ -1,863 +0,0 @@ -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" -) - -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/cvm/service_tencentcloud_tag.go b/tencentcloud/services/cvm/service_tencentcloud_tag.go deleted file mode 100644 index c6854fdc9d..0000000000 --- a/tencentcloud/services/cvm/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 deleted file mode 100644 index d92374d74e..0000000000 --- a/tencentcloud/services/cvm/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8075 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cwp/extension_tags.go b/tencentcloud/services/cwp/extension_tags.go deleted file mode 100644 index 07c0ac2c5d..0000000000 --- a/tencentcloud/services/cwp/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cwp - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cwp/resource_tc_cwp_license_order.go b/tencentcloud/services/cwp/resource_tc_cwp_license_order.go index d711c3f0f6..b07d7ad020 100644 --- a/tencentcloud/services/cwp/resource_tc_cwp_license_order.go +++ b/tencentcloud/services/cwp/resource_tc_cwp_license_order.go @@ -8,6 +8,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -136,7 +137,7 @@ func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta inte d.SetId(strings.Join([]string{resourceId, regionId}, tccommon.FILED_SP)) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(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 { @@ -226,7 +227,7 @@ func resourceTencentCloudCwpLicenseOrderRead(d *schema.ResourceData, meta interf _ = d.Set("project_id", licenseOrder.ProjectId) } - tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tags, err := tagService.DescribeResourceTags(ctx, "cwp", "order", "", resourceId) if err != nil { return err @@ -292,9 +293,9 @@ func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta inte } if d.HasChange("tags") { - tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cwp", "order", "", resourceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/cwp/service_tencentcloud_tag.go b/tencentcloud/services/cwp/service_tencentcloud_tag.go deleted file mode 100644 index d440beee48..0000000000 --- a/tencentcloud/services/cwp/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/cynosdb/extension_cynosdb.go b/tencentcloud/services/cynosdb/extension_cynosdb.go index de60ad6776..5a78ea101f 100644 --- a/tencentcloud/services/cynosdb/extension_cynosdb.go +++ b/tencentcloud/services/cynosdb/extension_cynosdb.go @@ -5,11 +5,12 @@ import ( tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" ) const ( - CYNOSDB_CHARGE_TYPE_POSTPAID = COMMON_PAYTYPE_POSTPAID - CYNOSDB_CHARGE_TYPE_PREPAID = COMMON_PAYTYPE_PREPAID + CYNOSDB_CHARGE_TYPE_POSTPAID = svcpostgresql.COMMON_PAYTYPE_POSTPAID + CYNOSDB_CHARGE_TYPE_PREPAID = svcpostgresql.COMMON_PAYTYPE_PREPAID CYNOSDB_SERVERLESS = "SERVERLESS" CYNOSDB_STATUS_RUNNING = "running" @@ -45,8 +46,8 @@ const ( var ( CYNOSDB_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} CYNOSDB_CHARGE_TYPE = map[int64]string{ - 0: COMMON_PAYTYPE_POSTPAID, - 1: COMMON_PAYTYPE_PREPAID, + 0: svcpostgresql.COMMON_PAYTYPE_POSTPAID, + 1: svcpostgresql.COMMON_PAYTYPE_PREPAID, } ) diff --git a/tencentcloud/services/cynosdb/extension_mysql.go b/tencentcloud/services/cynosdb/extension_mysql.go deleted file mode 100644 index 1a6d5cf4e9..0000000000 --- a/tencentcloud/services/cynosdb/extension_mysql.go +++ /dev/null @@ -1,129 +0,0 @@ -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 deleted file mode 100644 index afeb38a72f..0000000000 --- a/tencentcloud/services/cynosdb/extension_postgresql.go +++ /dev/null @@ -1,57 +0,0 @@ -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 deleted file mode 100644 index b05111a218..0000000000 --- a/tencentcloud/services/cynosdb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package cynosdb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go index 84fdc3274f..cc8600fe76 100644 --- a/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go @@ -7,6 +7,8 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -40,7 +42,7 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) region = client.Region //internal version: replace client 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 client end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. @@ -346,7 +348,7 @@ func resourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta interfa } //tag - tagService := &TagService{client: client} + tagService := svctag.NewTagService(client) tags, err := tagService.DescribeResourceTags(ctx, "cynosdb", "cluster", client.Region, id) if err != nil { return err @@ -498,7 +500,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter instanceId = d.Get("instance_id").(string) client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) region = client.Region ) immutableArgs := []string{ @@ -619,17 +621,17 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter return err } - mysqlService := MysqlService{client: client} + mysqlService := svccdb.NewMysqlService(client) _ = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) } - if taskStatus == MYSQL_TASK_STATUS_SUCCESS { + if taskStatus == svccdb.MYSQL_TASK_STATUS_SUCCESS { return nil } - if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING { + if taskStatus == svccdb.MYSQL_TASK_STATUS_INITIAL || taskStatus == svccdb.MYSQL_TASK_STATUS_RUNNING { return resource.RetryableError(fmt.Errorf("%s modify params task status is %s", clusterId, taskStatus)) } err = fmt.Errorf("%s create account task status is %s,we won't wait for it finish ,it show message:%s", clusterId, taskStatus, message) @@ -645,7 +647,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter // update tags if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("cynosdb", "cluster", region, clusterId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go b/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go deleted file mode 100644 index 408922d6ba..0000000000 --- a/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go +++ /dev/null @@ -1,3318 +0,0 @@ -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 deleted file mode 100644 index a16c4e9053..0000000000 --- a/tencentcloud/services/cynosdb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -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 -} diff --git a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_cc_trend.go b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_cc_trend.go index 33429d2592..8e821cf794 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_cc_trend.go +++ b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_cc_trend.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -107,7 +108,7 @@ func dataSourceTencentCloudAntiddosOverviewCcTrendRead(d *schema.ResourceData, m paramMap["IpList"] = helper.InterfacesStringsPoint(ipListSet) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var overviewCCTrendResponseParams *antiddos.DescribeOverviewCCTrendResponseParams err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_event_list.go b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_event_list.go index 84d3664f99..a512e94983 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_event_list.go +++ b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_event_list.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -129,7 +130,7 @@ func dataSourceTencentCloudAntiddosOverviewDdosEventListRead(d *schema.ResourceD paramMap["AttackStatus"] = helper.String(v.(string)) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var eventList []*antiddos.OverviewDDoSEvent diff --git a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_trend.go b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_trend.go index aa95b3641b..44be8227f8 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_trend.go +++ b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_ddos_trend.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -107,7 +108,7 @@ func dataSourceTencentCloudAntiddosOverviewDdosTrendRead(d *schema.ResourceData, paramMap["IpList"] = helper.InterfacesStringsPoint(ipListSet) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var describeOverviewDDoSTrendResponseParams *antiddos.DescribeOverviewDDoSTrendResponseParams err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_index.go b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_index.go index 3f58ba44d3..08612d85e6 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_index.go +++ b/tencentcloud/services/dayuv2/data_source_tc_antiddos_overview_index.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -114,7 +115,7 @@ func dataSourceTencentCloudAntiddosOverviewIndexRead(d *schema.ResourceData, met paramMap["EndTime"] = helper.String(v.(string)) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var describeOverviewIndexResponseParams *antiddos.DescribeOverviewIndexResponseParams err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAntiddosOverviewIndexByFilter(ctx, paramMap) diff --git a/tencentcloud/services/dayuv2/data_source_tc_antiddos_pending_risk_info.go b/tencentcloud/services/dayuv2/data_source_tc_antiddos_pending_risk_info.go index 509a093950..94087bde26 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_antiddos_pending_risk_info.go +++ b/tencentcloud/services/dayuv2/data_source_tc_antiddos_pending_risk_info.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -63,7 +64,7 @@ func dataSourceTencentCloudAntiddosPendingRiskInfoRead(d *schema.ResourceData, m ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var pendingRiskInfoResponseParams *antiddos.DescribePendingRiskInfoResponseParams err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAntiddosPendingRiskInfoByFilter(ctx) diff --git a/tencentcloud/services/dayuv2/data_source_tc_dayu_eip.go b/tencentcloud/services/dayuv2/data_source_tc_dayu_eip.go index 879ec4ed55..c9bed3163d 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_dayu_eip.go +++ b/tencentcloud/services/dayuv2/data_source_tc_dayu_eip.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -135,7 +136,7 @@ func dataSourceTencentCloudDayuEipRead(d *schema.ResourceData, meta interface{}) offset := d.Get("offset").(int) limit := d.Get("limit").(int) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) result, err := antiddosService.DescribeListBGPIPInstances(ctx, resourceId, bindStatus, offset, limit) if err != nil { return err diff --git a/tencentcloud/services/dayuv2/data_source_tc_dayu_l4_rules_v2.go b/tencentcloud/services/dayuv2/data_source_tc_dayu_l4_rules_v2.go index 4d8f666a40..07a53ecab8 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_dayu_l4_rules_v2.go +++ b/tencentcloud/services/dayuv2/data_source_tc_dayu_l4_rules_v2.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -20,7 +21,7 @@ func DataSourceTencentCloudDayuL4RulesV2() *schema.Resource { "business": { Type: schema.TypeString, Required: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(DAYU_RESOURCE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcdayu.DAYU_RESOURCE_TYPE), Description: "Type of the resource that the layer 4 rule works for, valid values are `bgpip`, `bgp`, `bgp-multip` and `net`.", }, "virtual_port": { @@ -145,9 +146,7 @@ func dataSourceTencentCloudDayuL4RulesReadV2(d *schema.ResourceData, meta interf logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := DayuService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + service := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) business := d.Get("business").(string) extendParams := make(map[string]interface{}) diff --git a/tencentcloud/services/dayuv2/data_source_tc_dayu_l7_rules_v2.go b/tencentcloud/services/dayuv2/data_source_tc_dayu_l7_rules_v2.go index 0c1f6f32b0..f983d3b5c9 100644 --- a/tencentcloud/services/dayuv2/data_source_tc_dayu_l7_rules_v2.go +++ b/tencentcloud/services/dayuv2/data_source_tc_dayu_l7_rules_v2.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -18,7 +19,7 @@ func DataSourceTencentCloudDayuL7RulesV2() *schema.Resource { "business": { Type: schema.TypeString, Required: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(DAYU_RESOURCE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcdayu.DAYU_RESOURCE_TYPE), Description: "Type of the resource that the layer 4 rule works for, valid values are `bgpip`, `bgp`, `bgp-multip` and `net`.", }, "domain": { @@ -192,9 +193,7 @@ func dataSourceTencentCloudDayuL7RulesReadV2(d *schema.ResourceData, meta interf logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := DayuService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + service := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) business := d.Get("business").(string) domain := d.Get("domain").(string) diff --git a/tencentcloud/services/dayuv2/extension_antiddos.go b/tencentcloud/services/dayuv2/extension_antiddos.go deleted file mode 100644 index f38ea11399..0000000000 --- a/tencentcloud/services/dayuv2/extension_antiddos.go +++ /dev/null @@ -1,6 +0,0 @@ -package dayuv2 - -const ( - IP_TYPE_BLACK = "black" - IP_TYPE_WHITE = "white" -) diff --git a/tencentcloud/services/dayuv2/extension_dayu.go b/tencentcloud/services/dayuv2/extension_dayu.go deleted file mode 100644 index 0bc55f3802..0000000000 --- a/tencentcloud/services/dayuv2/extension_dayu.go +++ /dev/null @@ -1,183 +0,0 @@ -package dayuv2 - -const ( - DAYU_RESOURCE_TYPE_BGPIP = "bgpip" - DAYU_RESOURCE_TYPE_BGP = "bgp" - DAYU_RESOURCE_TYPE_BGPMUL = "bgp-multip" - DAYU_RESOURCE_TYPE_NET = "net" -) - -var DAYU_RESOURCE_TYPE = []string{DAYU_RESOURCE_TYPE_BGPIP, DAYU_RESOURCE_TYPE_BGP, DAYU_RESOURCE_TYPE_BGPMUL, DAYU_RESOURCE_TYPE_NET} - -var DAYU_RESOURCE_TYPE_RULE = []string{DAYU_RESOURCE_TYPE_BGPIP, DAYU_RESOURCE_TYPE_NET} - -var DAYU_RESOURCE_TYPE_CASE = []string{DAYU_RESOURCE_TYPE_BGPIP, DAYU_RESOURCE_TYPE_BGPMUL, DAYU_RESOURCE_TYPE_BGP} - -var DAYU_RESOURCE_TYPE_HTTPS = []string{DAYU_RESOURCE_TYPE_BGPIP} - -const ( - DAYU_APP_PLATFORM_PC = "PC" - DAYU_APP_PLATFORM_MOBILE = "MOBILE" - DAYU_APP_PLATFORM_TV = "TV" - DAYU_APP_PLATFORM_SERVER = "SERVER" -) - -var DAYU_APP_PLATFORM = []string{DAYU_APP_PLATFORM_PC, DAYU_APP_PLATFORM_MOBILE, DAYU_APP_PLATFORM_TV, DAYU_APP_PLATFORM_SERVER} - -const ( - DAYU_PROTOCOL_TCP = "tcp" - DAYU_PROTOCOL_UDP = "udp" - DAYU_PROTOCOL_ICMP = "icmp" - DAYU_PROTOCOL_ALL = "all" -) - -var DAYU_PROTOCOL = []string{DAYU_PROTOCOL_TCP, DAYU_PROTOCOL_UDP, DAYU_PROTOCOL_ICMP, DAYU_PROTOCOL_ALL} - -const ( - DAYU_MATCH_TYPE_SUNDAY = "sunday" - DAYU_MATCH_TYPE_PCRE = "pcre" -) - -var DAYU_MATCH_TYPE = []string{DAYU_MATCH_TYPE_SUNDAY, DAYU_MATCH_TYPE_PCRE} - -const ( - DAYU_MATCH_SWITCH_ON_L5 = "begin_l5" - DAYU_MATCH_SWITCH_OFF = "no_match" -) - -var DAYU_MATCH_SWITCH = []string{DAYU_MATCH_SWITCH_ON_L5, DAYU_MATCH_SWITCH_OFF} - -const ( - DAYU_IP_TYPE_BLACK = "black" - DAYU_IP_TYPE_WHITE = "white" -) - -var DAYU_IP_TYPE = []string{DAYU_IP_TYPE_BLACK, DAYU_IP_TYPE_WHITE} - -const ( - DAYU_PACKET_ACTION_DROP = "drop" - DAYU_PACKET_ACTION_TRANSMIT = "transmit" - DAYU_PACKET_PROTOCOL_DROP_BLACK = "drop_black" - DAYU_PACKET_PROTOCOL_DROP_RST = "drop_rst" - DAYU_PACKET_PROTOCOL_DROP_BLACK_RST = "drop_black_rst" -) - -var DAYU_PACKET_ACTION = []string{DAYU_PACKET_ACTION_DROP, DAYU_PACKET_ACTION_TRANSMIT, DAYU_PACKET_PROTOCOL_DROP_BLACK, DAYU_PACKET_PROTOCOL_DROP_RST, DAYU_PACKET_PROTOCOL_DROP_BLACK_RST} - -const ( - DAYU_PORT_ACTION_DROP = "drop" - DAYU_PORT_ACTION_TRANSMIT = "transmit" -) - -var DAYU_PORT_ACTION = []string{DAYU_PORT_ACTION_DROP, DAYU_PORT_ACTION_TRANSMIT} - -const ( - DAYU_APP_TYPE_WEB = "WEB" - DAYU_APP_TYPE_GAME = "GAME" - DAYU_APP_TYPE_APP = "APP" - DAYU_APP_TYPE_OTHER = "OTHER" -) - -var DAYU_APP_TYPE = []string{DAYU_APP_TYPE_WEB, DAYU_APP_TYPE_GAME, DAYU_APP_TYPE_APP, DAYU_APP_TYPE_OTHER} - -const ( - DAYU_BOOL_FLAG_TRUE = "yes" - DAYU_BOOL_FLAG_FALSE = "no" -) - -var DAYU_BOOL_FLAG = []string{DAYU_BOOL_FLAG_FALSE, DAYU_BOOL_FLAG_TRUE} - -const ( - DAYU_L7_RULE_PROTOCOL_HTTP = "http" - DAYU_L7_RULE_PROTOCOL_HTTPS = "https" -) - -var DAYU_L7_RULE_PROTOCOL = []string{DAYU_L7_RULE_PROTOCOL_HTTP, DAYU_L7_RULE_PROTOCOL_HTTPS} - -const ( - DAYU_RULE_METHOD_GET = "GET" - DAYU_RULE_METHOD_HEAD = "HEAD" -) - -var DAYU_RULE_METHOD = []string{ - DAYU_RULE_METHOD_GET, - DAYU_RULE_METHOD_HEAD, -} - -const ( - DAYU_L7_RULE_SOURCE_TYPE_HOST = 1 - DAYU_L7_RULE_SOURCE_TYPE_IP = 2 -) - -var DAYU_L7_RULE_SOURCE_TYPE = []int{DAYU_L7_RULE_SOURCE_TYPE_HOST, DAYU_L7_RULE_SOURCE_TYPE_IP} - -const ( - DAYU_L7_HTTPS_SWITCH_ON_DEFAULT = 20000 - DAYU_L7_HTTPS_SWITCH_OFF = 0 -) - -const ( - DAYU_CC_POLICY_ACTION_DROP = "drop" - DAYU_CC_POLICY_ACTION_ALG = "alg" -) - -var DAYU_CC_POLICY_ACTION = []string{DAYU_CC_POLICY_ACTION_DROP, DAYU_CC_POLICY_ACTION_ALG} - -const ( - DAYU_CC_POLICY_SMODE_MATCH = "matching" - DAYU_CC_POLICY_SMODE_SPEED_LIMIT = "speedlimit" -) - -var DAYU_CC_POLICY_SMODE = []string{DAYU_CC_POLICY_SMODE_MATCH, DAYU_CC_POLICY_SMODE_SPEED_LIMIT} - -const ( - DAYU_CC_POLICY_CHECK_TYPE_HOST = "host" - DAYU_CC_POLICY_CHECK_TYPE_CGI = "cgi" - DAYU_CC_POLICY_CHECK_TYPE_UA = "ua" - DAYU_CC_POLICY_CHECK_TYPE_REFERER = "referer" -) - -var DAYU_CC_POLICY_HTTP_CHECK_TYPE = []string{DAYU_CC_POLICY_CHECK_TYPE_HOST, DAYU_CC_POLICY_CHECK_TYPE_CGI, DAYU_CC_POLICY_CHECK_TYPE_UA, DAYU_CC_POLICY_CHECK_TYPE_REFERER} - -var DAYU_CC_POLICY_HTTPS_CHECK_TYPE = []string{DAYU_CC_POLICY_CHECK_TYPE_CGI, DAYU_CC_POLICY_CHECK_TYPE_UA, DAYU_CC_POLICY_CHECK_TYPE_REFERER} - -const ( - DAYU_CC_POLICY_CHECK_OP_INCLUDE = "include" - DAYU_CC_POLICY_CHECK_OP_NOT_INCLUDE = "not_include" - DAYU_CC_POLICY_CHECK_OP_EQUAL = "equal" -) - -var DAYU_CC_POLICY_CHECK_OP = []string{DAYU_CC_POLICY_CHECK_OP_INCLUDE, DAYU_CC_POLICY_CHECK_OP_NOT_INCLUDE, DAYU_CC_POLICY_CHECK_OP_EQUAL} -var DAYU_CC_POLICY_CHECK_OP_HTTPS = []string{DAYU_CC_POLICY_CHECK_OP_INCLUDE, DAYU_CC_POLICY_CHECK_OP_EQUAL} - -const ( - DAYU_L4_RULE_PROTOCOL_TCP = "TCP" - DAYU_L4_RULE_PROTOCOL_UDP = "UDP" -) - -var DAYU_L4_RULE_PROTOCOL = []string{DAYU_L4_RULE_PROTOCOL_TCP, DAYU_L4_RULE_PROTOCOL_UDP} - -const ( - DAYU_L7_STATUS_SET_DONE = 0 - DAYU_L7_STATUS_SETTING = 1 - DAYU_L7_STATUS_SET_FAIL = 2 - DAYU_L7_STATUS_DEL_DONE = 3 - DAYU_L7_STATUS_DEL_FAIL = 5 - DAYU_L7_STATUS_SET_WAIT = 6 - DAYU_L7_STATUS_DEL_WAIT = 7 - DAYU_L7_STATUS_SSL_WAIT = 8 -) - -const ( - DAYU_L7_HEALTH_STATUS_SET_DONE = 0 - DAYU_L7_HEALTH_STATUS_SETTING = 1 - DAYU_L7_HEALTH_STATUS_SET_FAIL = 2 -) - -const DAYU_BOUNDSTATUS_IDLE = "idle" - -const RESPONSE_SUCCESS_CODE = "Success" - -const BUSINESS_BGP_MULTIP = "bgp-multip" - -const ISP_CODE_BGP = 5 diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_black_white_ip.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_black_white_ip.go index 4f64842fbf..c784ce1d99 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_black_white_ip.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_black_white_ip.go @@ -13,6 +13,8 @@ import ( antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" ) func ResourceTencentCloudAntiddosCcBlackWhiteIp() *schema.Resource { @@ -153,7 +155,7 @@ func resourceTencentCloudAntiddosCcBlackWhiteIpCreate(d *schema.ResourceData, me return err } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ccBlackWhiteIps, err := service.DescribeAntiddosCcBlackWhiteIpById(ctx, "bgpip", instanceId, ip, domain, protocol) if err != nil { return err @@ -199,7 +201,7 @@ func resourceTencentCloudAntiddosCcBlackWhiteIpRead(d *schema.ResourceData, meta ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { @@ -269,7 +271,7 @@ func resourceTencentCloudAntiddosCcBlackWhiteIpDelete(d *schema.ResourceData, me logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_precision_policy.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_precision_policy.go index 2b007b295a..4cc5514a39 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_precision_policy.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_cc_precision_policy.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -172,7 +173,7 @@ func resourceTencentCloudAntiddosCcPrecisionPolicyCreate(d *schema.ResourceData, return err } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ccPrecisionPolicys, err := service.DescribeAntiddosCcPrecisionPolicyById(ctx, "bgpip", instanceId, ip, domain, protocol) if err != nil { @@ -217,7 +218,7 @@ func resourceTencentCloudAntiddosCcPrecisionPolicyRead(d *schema.ResourceData, m ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { @@ -372,7 +373,7 @@ func resourceTencentCloudAntiddosCcPrecisionPolicyDelete(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_black_white_ip.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_black_white_ip.go index d7fcc5d50a..d7afa53c14 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_black_white_ip.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_black_white_ip.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -118,7 +119,7 @@ func resourceTencentCloudAntiddosDdosBlackWhiteIpRead(d *schema.ResourceData, me return fmt.Errorf("id is broken,%s", idSplit) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := idSplit[0] ip := idSplit[1] @@ -138,7 +139,7 @@ func resourceTencentCloudAntiddosDdosBlackWhiteIpRead(d *schema.ResourceData, me } } if targetIpSegment != nil { - _ = d.Set("type", IP_TYPE_BLACK) + _ = d.Set("type", svcantiddos.IP_TYPE_BLACK) _ = d.Set("ip", targetIpSegment.Ip) _ = d.Set("mask", targetIpSegment.Mask) } @@ -154,7 +155,7 @@ func resourceTencentCloudAntiddosDdosBlackWhiteIpRead(d *schema.ResourceData, me } } if targetIpSegment != nil { - _ = d.Set("type", IP_TYPE_WHITE) + _ = d.Set("type", svcantiddos.IP_TYPE_WHITE) _ = d.Set("ip", targetIpSegment.Ip) _ = d.Set("mask", targetIpSegment.Mask) } @@ -234,7 +235,7 @@ func resourceTencentCloudAntiddosDdosBlackWhiteIpDelete(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_geo_ip_block_config.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_geo_ip_block_config.go index 63415c6918..3108d3443c 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_geo_ip_block_config.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_geo_ip_block_config.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -121,7 +122,7 @@ func resourceTencentCloudAntiddosDdosGeoIpBlockConfigCreate(d *schema.ResourceDa return err } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) configList, err := service.DescribeAntiddosDdosGeoIpBlockConfigById(ctx, instanceId) if err != nil { @@ -169,7 +170,7 @@ func resourceTencentCloudAntiddosDdosGeoIpBlockConfigRead(d *schema.ResourceData ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -287,7 +288,7 @@ func resourceTencentCloudAntiddosDdosGeoIpBlockConfigDelete(d *schema.ResourceDa logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_speed_limit_config.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_speed_limit_config.go index 25d5d0e26d..3f14a264dd 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_speed_limit_config.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_ddos_speed_limit_config.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -180,7 +181,7 @@ func resourceTencentCloudAntiddosDdosSpeedLimitConfigCreate(d *schema.ResourceDa return err } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) configList, err := service.DescribeAntiddosDdosSpeedLimitConfigById(ctx, instanceId) if err != nil { return err @@ -242,7 +243,7 @@ func resourceTencentCloudAntiddosDdosSpeedLimitConfigRead(d *schema.ResourceData return fmt.Errorf("id is broken,%s", idSplit) } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := idSplit[0] configId := idSplit[1] @@ -417,7 +418,7 @@ func resourceTencentCloudAntiddosDdosSpeedLimitConfigDelete(d *schema.ResourceDa logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_default_alarm_threshold.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_default_alarm_threshold.go index 9072e336d1..d1828ecfa2 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_default_alarm_threshold.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_default_alarm_threshold.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -71,7 +72,7 @@ func resourceTencentCloudAntiddosDefaultAlarmThresholdRead(d *schema.ResourceDat ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceType := d.Id() diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_ip_alarm_threshold_config.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_ip_alarm_threshold_config.go index 26f142feff..6d79c50bac 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_ip_alarm_threshold_config.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_ip_alarm_threshold_config.go @@ -8,6 +8,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -73,7 +74,7 @@ func resourceTencentCloudAntiddosIpAlarmThresholdConfigRead(d *schema.ResourceDa ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_packet_filter_config.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_packet_filter_config.go index 90d2657beb..5ba00d99ec 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_packet_filter_config.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_packet_filter_config.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -259,7 +260,7 @@ func resourceTencentCloudAntiddosPacketFilterConfigCreate(d *schema.ResourceData return err } - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) packetFilterConfigs, err := service.DescribeAntiddosPacketFilterConfigById(ctx, instanceId) if err != nil { return err @@ -357,7 +358,7 @@ func resourceTencentCloudAntiddosPacketFilterConfigRead(d *schema.ResourceData, ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -488,7 +489,7 @@ func resourceTencentCloudAntiddosPacketFilterConfigDelete(d *schema.ResourceData logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_port_acl_config.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_port_acl_config.go index 9982972bd6..46cc488b95 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_port_acl_config.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_port_acl_config.go @@ -8,6 +8,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -155,7 +156,7 @@ func resourceTencentCloudAntiddosPortAclConfigRead(d *schema.ResourceData, meta ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -268,7 +269,7 @@ func resourceTencentCloudAntiddosPortAclConfigDelete(d *schema.ResourceData, met logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) diff --git a/tencentcloud/services/dayuv2/resource_tc_antiddos_scheduling_domain_user_name.go b/tencentcloud/services/dayuv2/resource_tc_antiddos_scheduling_domain_user_name.go index f87c85ddf2..58c543c24d 100644 --- a/tencentcloud/services/dayuv2/resource_tc_antiddos_scheduling_domain_user_name.go +++ b/tencentcloud/services/dayuv2/resource_tc_antiddos_scheduling_domain_user_name.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -56,7 +57,7 @@ func resourceTencentCloudAntiddosSchedulingDomainUserNameRead(d *schema.Resource ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) domainName := d.Id() diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2.go b/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2.go index eec8528efa..2ac902ab43 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2.go @@ -6,6 +6,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309" @@ -297,7 +298,7 @@ func resourceTencentCloudDayuCCPolicyV2Create(d *schema.ResourceData, meta inter logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := d.Get("resource_id").(string) business := d.Get("business").(string) protectThresholdConfig, err := antiddosService.DescribeListProtectThresholdConfig(ctx, resourceId) @@ -444,7 +445,7 @@ func resourceTencentCloudDayuCCPolicyV2Read(d *schema.ResourceData, meta interfa } instanceId := items[0] business := items[1] - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) thresholdList, err := antiddosService.DescribeCCThresholdList(ctx, business, instanceId) if err != nil { @@ -577,7 +578,7 @@ func resourceTencentCloudDayuCCPolicyV2Update(d *schema.ResourceData, meta inter } instanceId := items[0] business := items[1] - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) protectThresholdConfig, err := antiddosService.DescribeListProtectThresholdConfig(ctx, instanceId) if err != nil { return err @@ -930,7 +931,7 @@ func resourceTencentCloudDayuCCPolicyV2Delete(d *schema.ResourceData, meta inter } instanceId := items[0] business := items[1] - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) thresholdList, err := antiddosService.DescribeCCThresholdList(ctx, business, instanceId) if err != nil { return err diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2_test.go index 36b7a8666c..e8f0885086 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_cc_policy_v2_test.go @@ -6,12 +6,12 @@ import ( "strings" "testing" - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" ) func TestAccTencentCloudDayuCCPolicyV2Resource(t *testing.T) { @@ -50,7 +50,7 @@ func testAccCheckDayuCCPolicyV2Destroy(s *terraform.State) error { } instanceId := items[0] business := items[1] - antiddosService := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + antiddosService := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) thresholdList, err := antiddosService.DescribeCCThresholdList(ctx, business, instanceId) if err != nil { return err diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2.go b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2.go index ba87f3e523..20f3d37fc6 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2.go @@ -8,6 +8,8 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -70,13 +72,13 @@ func resourceTencentCloudDayuDDosIpAttachmentCreateV2(d *schema.ResourceData, me logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var bgpInstanceId string boundIps := make([]string, 0) request := antiddos.NewCreateBoundIPRequest() - request.Business = helper.String(BUSINESS_BGP_MULTIP) + request.Business = helper.String(svcdayu.BUSINESS_BGP_MULTIP) if v, ok := d.GetOk("bgp_instance_id"); ok { bgpInstanceId = v.(string) request.Id = helper.String(bgpInstanceId) @@ -99,7 +101,7 @@ func resourceTencentCloudDayuDDosIpAttachmentCreateV2(d *schema.ResourceData, me if v, ok := dMap["device_type"]; ok { boundIpInfo.DeviceType = helper.String(v.(string)) } - boundIpInfo.IspCode = helper.IntUint64(ISP_CODE_BGP) + boundIpInfo.IspCode = helper.IntUint64(svcdayu.ISP_CODE_BGP) request.BoundDevList = append(request.BoundDevList, &boundIpInfo) } } @@ -111,7 +113,7 @@ func resourceTencentCloudDayuDDosIpAttachmentCreateV2(d *schema.ResourceData, me } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - if *result.Response.Success.Code != RESPONSE_SUCCESS_CODE { + if *result.Response.Success.Code != svcdayu.RESPONSE_SUCCESS_CODE { return resource.RetryableError(errors.New("request failed")) } return nil @@ -125,7 +127,7 @@ func resourceTencentCloudDayuDDosIpAttachmentCreateV2(d *schema.ResourceData, me if e != nil { return tccommon.RetryError(e) } - if *boundip.BoundStatus == DAYU_BOUNDSTATUS_IDLE { + if *boundip.BoundStatus == svcdayu.DAYU_BOUNDSTATUS_IDLE { return nil } return resource.RetryableError(errors.New("still building.")) @@ -148,7 +150,7 @@ func resourceTencentCloudDayuDDosIpAttachmentReadV2(d *schema.ResourceData, meta ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -198,7 +200,7 @@ func resourceTencentCloudDayuDDosIpAttachmentDeleteV2(d *schema.ResourceData, me logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -208,7 +210,7 @@ func resourceTencentCloudDayuDDosIpAttachmentDeleteV2(d *schema.ResourceData, me boundIps := idSplit[1] request := antiddos.NewCreateBoundIPRequest() - request.Business = helper.String(BUSINESS_BGP_MULTIP) + request.Business = helper.String(svcdayu.BUSINESS_BGP_MULTIP) request.Id = helper.String(bgpInstanceId) ubBoundDevList := make([]*antiddos.BoundIpInfo, 0) for _, boundIp := range strings.Split(boundIps, tccommon.COMMA_SP) { @@ -229,7 +231,7 @@ func resourceTencentCloudDayuDDosIpAttachmentDeleteV2(d *schema.ResourceData, me } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } - if *result.Response.Success.Code != RESPONSE_SUCCESS_CODE { + if *result.Response.Success.Code != svcdayu.RESPONSE_SUCCESS_CODE { return resource.RetryableError(errors.New("request failed")) } return nil @@ -244,7 +246,7 @@ func resourceTencentCloudDayuDDosIpAttachmentDeleteV2(d *schema.ResourceData, me if e != nil { return tccommon.RetryError(e) } - if *boundip.BoundStatus == DAYU_BOUNDSTATUS_IDLE { + if *boundip.BoundStatus == svcdayu.DAYU_BOUNDSTATUS_IDLE { return nil } return resource.RetryableError(errors.New("still building.")) diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2_test.go index 61d06d961f..dd1773d391 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_ip_attachment_v2_test.go @@ -1,15 +1,15 @@ package dayuv2_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" - "context" "fmt" "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -37,7 +37,7 @@ func testAccCheckDayuDdosIpAttachmentDestroy(s *terraform.State) error { logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_dayu_ddos_ip_attachment_v2" { continue @@ -80,7 +80,7 @@ func testAccCheckDayuDdosIpAttachmentExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("DDoS ip attachment id is not set") } - service := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_dayu_ddos_ip_attachment_v2" { continue diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2.go b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2.go index ad9827567d..9c5c9d366f 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309" @@ -424,7 +425,7 @@ func resourceTencentCloudDayuDdosPolicyV2Create(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_dayu_ddos_policy_v2.create")() logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := d.Get("resource_id").(string) business := d.Get("business").(string) @@ -711,7 +712,7 @@ func resourceTencentCloudDayuDdosPolicyV2Read(d *schema.ResourceData, meta inter defer tccommon.LogElapsed("resource.tencentcloud_dayu_ddos_policy_v2.read")() logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("broken ID of DDoS policy") @@ -903,7 +904,7 @@ func resourceTencentCloudDayuDdosPolicyV2Update(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_dayu_ddos_policy_v2.read")() logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("broken ID of DDoS policy") @@ -1337,7 +1338,7 @@ func resourceTencentCloudDayuDdosPolicyV2Delete(d *schema.ResourceData, meta int defer tccommon.LogElapsed("resource.tencentcloud_dayu_ddos_policy_v2.read")() logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("broken ID of DDoS policy") diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2_test.go index 4ef5cd303f..374cc7900b 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_ddos_policy_v2_test.go @@ -8,11 +8,10 @@ import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" ) func TestAccTencentCloudDayuDdosPolicyV2Resource(t *testing.T) { @@ -52,7 +51,7 @@ func testAccCheckDayuDdosPolicyV2Destroy(s *terraform.State) error { } resourceId := items[0] - antiddosService := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + antiddosService := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) blackWhiteIpRelationList, err := antiddosService.DescribeListBlackWhiteIpList(ctx, resourceId) if err != nil { return err diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_eip.go b/tencentcloud/services/dayuv2/resource_tc_dayu_eip.go index 67870d27f5..2858016fb3 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_eip.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_eip.go @@ -6,6 +6,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -102,7 +103,7 @@ func resourceTencentCloudDayuEipCreate(d *schema.ResourceData, meta interface{}) logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) bindResourceType := d.Get("bind_resource_type").(string) resourceId := d.Get("resource_id").(string) eip := d.Get("eip").(string) @@ -145,7 +146,7 @@ func resourceTencentCloudDayuEipRead(d *schema.ResourceData, meta interface{}) e return fmt.Errorf("broken ID of dayu eip.") } resourceId := items[0] - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) bgpIPInstances, err := antiddosService.DescribeListBGPIPInstances(ctx, resourceId, DDOS_EIP_BIND_STATUS, 0, 10) if err != nil { return err @@ -177,7 +178,7 @@ func resourceTencentCloudDayuEipDelete(d *schema.ResourceData, meta interface{}) } resourceId := items[0] eip := items[1] - antiddosService := AntiddosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + antiddosService := svcantiddos.NewAntiddosService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := antiddosService.DisassociateDDoSEipAddress(ctx, resourceId, eip) if err != nil { return err diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_eip_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_eip_test.go index 81bec16aa5..f64a9f3d03 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_eip_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_eip_test.go @@ -3,6 +3,7 @@ package dayuv2_test import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcantiddos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" "context" @@ -55,7 +56,7 @@ func testAccCheckDayuEipDestroy(s *terraform.State) error { resourceId := items[0] eip := items[1] - service := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) result, err := service.DescribeListBGPIPInstances(ctx, resourceId, svcdayuv2.DDOS_EIP_BIND_STATUS, 0, 10) if err != nil { @@ -88,7 +89,7 @@ func testAccCheckDayuEipExists(n string) resource.TestCheckFunc { } resourceId := items[0] - service := svcdayuv2.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcantiddos.NewAntiddosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) result, err := service.DescribeListBGPIPInstances(ctx, resourceId, svcdayuv2.DDOS_EIP_BIND_STATUS, 0, 10) diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2.go b/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2.go index 3afa5411c2..5d30c7b45c 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2.go @@ -12,6 +12,7 @@ import ( dayu "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu/v20180709" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" ) func ResourceTencentCloudDayuL4RuleV2() *schema.Resource { @@ -24,7 +25,7 @@ func ResourceTencentCloudDayuL4RuleV2() *schema.Resource { "business": { Type: schema.TypeString, Required: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(DAYU_RESOURCE_TYPE_RULE), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcdayu.DAYU_RESOURCE_TYPE_RULE), ForceNew: true, Description: "Business of the resource that the layer 4 rule works for. Valid values: `bgpip` and `net`.", }, @@ -141,9 +142,7 @@ func resourceTencentCloudDayuL4RuleCreateV2(d *schema.ResourceData, meta interfa vpn := d.Get("vpn").(string) virtualPort := d.Get("virtual_port").(int) rules := d.Get("rules").([]interface{}) - service := DayuService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + service := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := service.CreateNewL4Rules(ctx, business, resourceId, vpn, rules) if err != nil { return err @@ -158,9 +157,7 @@ func resourceTencentCloudDayuL4RuleReadV2(d *schema.ResourceData, meta interface logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := DayuService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + service := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 4 { return fmt.Errorf("broken ID of dayu L4 rule") @@ -210,9 +207,7 @@ func resourceTencentCloudDayuL4RuleDeleteV2(d *schema.ResourceData, meta interfa logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := DayuService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + service := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 4 { diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2_test.go index ce11002adb..b507118b7c 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_l4_rule_v2_test.go @@ -13,8 +13,7 @@ import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - - svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" ) var testDayuL4RuleResourceName = "tencentcloud_dayu_l4_rule" @@ -61,7 +60,7 @@ func testAccCheckDayuL4RuleV2Destroy(s *terraform.State) error { resourceId := items[1] vpn := items[2] virtualPortStr := items[3] - service := svcdayuv2.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcdayu.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) extendParams := make(map[string]interface{}) extendParams["ip"] = vpn virtualPort, err := strconv.Atoi(virtualPortStr) @@ -98,7 +97,7 @@ func testAccCheckDayuL4RuleV2Exists(n string) resource.TestCheckFunc { vpn := items[2] virtualPortStr := items[3] virtualPort, err := strconv.Atoi(virtualPortStr) - service := svcdayuv2.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + service := svcdayu.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) extendParams := make(map[string]interface{}) extendParams["ip"] = vpn diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2.go b/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2.go index 3ab224bf5c..c114a1c10b 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2.go @@ -6,6 +6,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -35,7 +36,7 @@ func ResourceTencentCloudDayuL7RuleV2() *schema.Resource { "resource_type": { Type: schema.TypeString, Required: true, - ValidateFunc: tccommon.ValidateAllowedStringValue(DAYU_RESOURCE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcdayu.DAYU_RESOURCE_TYPE), ForceNew: true, Description: "Type of the resource that the layer 7 rule works for, valid value is `bgpip`.", }, @@ -137,7 +138,7 @@ func resourceTencentCloudDayuL7RuleCreateV2(d *schema.ResourceData, meta interfa ruleItem := rule[0].(map[string]interface{}) domain := ruleItem["domain"].(string) protocol := ruleItem["protocol"].(string) - dayuService := DayuService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + dayuService := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err := dayuService.CreateL7RuleV2(ctx, resourceType, resourceId, resourceIp, rule) if err != nil { return err @@ -151,7 +152,7 @@ func resourceTencentCloudDayuL7RuleUpdateV2(d *schema.ResourceData, meta interfa logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - dayuService := DayuService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + dayuService := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 3 { @@ -249,7 +250,7 @@ func resourceTencentCloudDayuL7RuleReadV2(d *schema.ResourceData, meta interface extendParams := make(map[string]interface{}) extendParams["domain"] = domain extendParams["protocol"] = protocol - dayuService := DayuService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + dayuService := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) for { rules, _, err := dayuService.DescribeL7RulesV2(ctx, business, extendParams) if err != nil { @@ -283,7 +284,7 @@ func resourceTencentCloudDayuL7RuleDeleteV2(d *schema.ResourceData, meta interfa domain := items[1] protocol := items[2] - dayuService := DayuService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + dayuService := svcdayu.NewDayuService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) extendParams := make(map[string]interface{}) extendParams["domain"] = domain extendParams["protocol"] = protocol diff --git a/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2_test.go b/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2_test.go index 6ca8e18fc8..58ac690d81 100644 --- a/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2_test.go +++ b/tencentcloud/services/dayuv2/resource_tc_dayu_l7_rule_v2_test.go @@ -8,11 +8,10 @@ import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcdayu "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayu" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" - - svcdayuv2 "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/dayuv2" ) var testDayuL7RuleV2ResourceName = "tencentcloud_dayu_l7_rule_v2" @@ -57,7 +56,7 @@ func testAccCheckDayuL7RuleV2Destroy(s *terraform.State) error { extendParams := make(map[string]interface{}) extendParams["domain"] = domain extendParams["protocol"] = protocol - dayuService := svcdayuv2.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + dayuService := svcdayu.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rules, _, err := dayuService.DescribeL7RulesV2(ctx, business, extendParams) if err != nil { return err @@ -105,7 +104,7 @@ func testAccCheckDayuL7RuleV2Exists(n string) resource.TestCheckFunc { extendParams := make(map[string]interface{}) extendParams["domain"] = domain extendParams["protocol"] = protocol - dayuService := svcdayuv2.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + dayuService := svcdayu.NewDayuService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rules, _, err := dayuService.DescribeL7RulesV2(ctx, business, extendParams) if err != nil { diff --git a/tencentcloud/services/dayuv2/service_tencentcloud_antiddos.go b/tencentcloud/services/dayuv2/service_tencentcloud_antiddos.go deleted file mode 100644 index 53c5782642..0000000000 --- a/tencentcloud/services/dayuv2/service_tencentcloud_antiddos.go +++ /dev/null @@ -1,2454 +0,0 @@ -package dayuv2 - -import ( - "context" - "log" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - 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 NewAntiddosService(client *connectivity.TencentCloudClient) AntiddosService { - return AntiddosService{client: client} -} - -type AntiddosService struct { - client *connectivity.TencentCloudClient -} - -func (me *AntiddosService) DescribeListBGPIPInstances(ctx context.Context, instanceId string, status []string, offset int, limit int) (result []*antiddos.BGPIPInstance, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeListBGPIPInstancesRequest() - request.FilterInstanceId = &instanceId - eipType := int64(1) - request.FilterEipType = &eipType - filterEipEipAddressStatus := make([]*string, 0) - for _, singleStatus := range status { - status := singleStatus - filterEipEipAddressStatus = append(filterEipEipAddressStatus, &status) - } - request.FilterEipEipAddressStatus = filterEipEipAddressStatus - offsetInt64 := uint64(offset) - request.Offset = &offsetInt64 - limitInt64 := uint64(limit) - request.Limit = &limitInt64 - ratelimit.Check(request.GetAction()) - var response *antiddos.DescribeListBGPIPInstancesResponse - err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseAntiddosClient().DescribeListBGPIPInstances(request) - - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - result = response.Response.InstanceList - return -} - -func (me *AntiddosService) AssociateDDoSEipAddress(ctx context.Context, instanceId string, eip string, cvmInstanceID string, cvmRegion string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewAssociateDDoSEipAddressRequest() - - request.InstanceId = common.StringPtr(instanceId) - request.Eip = common.StringPtr(eip) - request.CvmInstanceID = common.StringPtr(cvmInstanceID) - request.CvmRegion = common.StringPtr(cvmRegion) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().AssociateDDoSEipAddress(request) - - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return - -} - -func (me *AntiddosService) AssociateDDoSEipLoadBalancer(ctx context.Context, instanceId string, eip string, loadBalancerID string, loadBalancerRegion string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewAssociateDDoSEipLoadBalancerRequest() - - request.InstanceId = common.StringPtr(instanceId) - request.Eip = common.StringPtr(eip) - request.LoadBalancerID = common.StringPtr(loadBalancerID) - request.LoadBalancerRegion = common.StringPtr(loadBalancerRegion) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().AssociateDDoSEipLoadBalancer(request) - - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return - -} - -func (me *AntiddosService) DisassociateDDoSEipAddress(ctx context.Context, instanceId string, eip string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDisassociateDDoSEipAddressRequest() - - request.InstanceId = common.StringPtr(instanceId) - request.Eip = common.StringPtr(eip) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DisassociateDDoSEipAddress(request) - - if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return - -} - -func (me *AntiddosService) DescribeListProtectThresholdConfig(ctx context.Context, instanceId string) (result antiddos.ProtectThresholdRelation, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeListProtectThresholdConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - request.Limit = helper.IntUint64(1) - request.Offset = helper.Int64Uint64(0) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - response, err := me.client.UseAntiddosClient().DescribeListProtectThresholdConfig(request) - configList := response.Response.ConfigList - if len(configList) > 0 { - result = *configList[0] - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeListBlackWhiteIpList(ctx context.Context, instanceId string) (result []*antiddos.BlackWhiteIpRelation, err error) { - request := antiddos.NewDescribeListBlackWhiteIpListRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - var limit int64 = 10 - var offset int64 = 0 - - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListBlackWhiteIpList(request) - if e != nil { - err = e - return - } - ipList := response.Response.IpList - if len(ipList) > 0 { - result = append(result, ipList...) - } - if len(ipList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DescribeListPortAclList(ctx context.Context, instanceId string) (result []*antiddos.AclConfigRelation, err error) { - request := antiddos.NewDescribeListPortAclListRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - var limit uint64 = 10 - var offset uint64 = 0 - - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListPortAclList(request) - if e != nil { - err = e - return - } - aclList := response.Response.AclList - if len(aclList) > 0 { - result = append(result, aclList...) - } - if len(aclList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DescribeListProtocolBlockConfig(ctx context.Context, instanceId string) (result antiddos.ProtocolBlockRelation, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeListProtocolBlockConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - request.Limit = helper.IntInt64(1) - request.Offset = helper.IntInt64(0) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - response, err := me.client.UseAntiddosClient().DescribeListProtocolBlockConfig(request) - configList := response.Response.ConfigList - if len(configList) > 0 { - result = *configList[0] - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeDDoSConnectLimitList(ctx context.Context, instanceId string) (result antiddos.ConnectLimitConfig, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeDDoSConnectLimitListRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - request.Limit = helper.IntUint64(1) - request.Offset = helper.IntUint64(0) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - response, err := me.client.UseAntiddosClient().DescribeDDoSConnectLimitList(request) - configList := response.Response.ConfigList - if len(configList) > 0 { - result = *configList[0].ConnectLimitConfig - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeListDDoSAI(ctx context.Context, instanceId string) (result antiddos.DDoSAIRelation, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeListDDoSAIRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - request.Limit = helper.IntInt64(1) - request.Offset = helper.IntInt64(0) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - response, err := me.client.UseAntiddosClient().DescribeListDDoSAI(request) - configList := response.Response.ConfigList - if len(configList) > 0 { - result = *configList[0] - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeListDDoSGeoIPBlockConfig(ctx context.Context, instanceId string) (result []*antiddos.DDoSGeoIPBlockConfigRelation, err error) { - request := antiddos.NewDescribeListDDoSGeoIPBlockConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListDDoSGeoIPBlockConfig(request) - if e != nil { - err = e - return - } - configList := response.Response.ConfigList - if len(configList) > 0 { - result = append(result, configList...) - } - if len(configList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DescribeListDDoSSpeedLimitConfig(ctx context.Context, instanceId string) (result []*antiddos.DDoSSpeedLimitConfigRelation, err error) { - request := antiddos.NewDescribeListDDoSSpeedLimitConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListDDoSSpeedLimitConfig(request) - if e != nil { - err = e - return - } - configList := response.Response.ConfigList - if len(configList) > 0 { - result = append(result, configList...) - } - if len(configList) < int(limit) { - return - } - offset += limit - } - -} - -func (me *AntiddosService) DescribeListPacketFilterConfig(ctx context.Context, instanceId string) (result []*antiddos.PacketFilterRelation, err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDescribeListPacketFilterConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - request.Limit = helper.IntInt64(1) - request.Offset = helper.IntInt64(0) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - response, err := me.client.UseAntiddosClient().DescribeListPacketFilterConfig(request) - configList := response.Response.ConfigList - if len(configList) > 0 { - result = configList - } - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -// func (me *AntiddosService) DescribeListWaterPrintConfig(ctx context.Context, instanceId string) (result antiddos.WaterPrintRelation, err error) { -// logId := tccommon.GetLogId(ctx) -// request := antiddos.NewDescribeListWaterPrintConfigRequest() -// request.FilterInstanceId = common.StringPtr(instanceId) -// request.Limit = helper.IntInt64(1) -// request.Offset = helper.IntInt64(0) - -// err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { -// response, err := me.client.UseAntiddosClient().DescribeListWaterPrintConfig(request) -// configList := response.Response.ConfigList -// if len(configList) > 0 { -// result = *configList[0] -// } -// if err != nil { -// return resource.RetryableError(err) -// } -// 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()) -// return -// } -// return -// } - -func (me *AntiddosService) CreateDDoSBlackWhiteIpList(ctx context.Context, instanceId string, ipList []string, ipType string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSBlackWhiteIpListRequest() - request.InstanceId = common.StringPtr(instanceId) - requestIpList := make([]*antiddos.IpSegment, 0) - ip32mask := uint64(0) - for _, ip := range ipList { - requestIpList = append(requestIpList, &antiddos.IpSegment{Ip: &ip, Mask: &ip32mask}) - } - request.IpList = requestIpList - request.Type = common.StringPtr(ipType) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSBlackWhiteIpList(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) ModifyDDoSThreshold(ctx context.Context, business, instanceId string, threshold int) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyDDoSThresholdRequest() - request.Business = common.StringPtr(business) - request.Id = common.StringPtr(instanceId) - request.Threshold = helper.IntUint64(threshold) - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyDDoSThreshold(request) - if err != nil { - if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { - if sdkError.Code == "ResourceUnavailable" { - return nil - } - } - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) ModifyDDoSLevel(ctx context.Context, business, instanceId, ddosLevel string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyDDoSLevelRequest() - request.Business = common.StringPtr(business) - request.Id = common.StringPtr(instanceId) - request.Method = common.StringPtr("set") - request.DDoSLevel = common.StringPtr(ddosLevel) - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyDDoSLevel(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreatePortAclConfig(ctx context.Context, instanceId string, aclConfig antiddos.AclConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreatePortAclConfigRequest() - request.AclConfig = &aclConfig - request.InstanceId = &instanceId - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreatePortAclConfig(request) - if err != nil { - if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { - if sdkError.Code == "ResourceInUse" { - return nil - } - } - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateProtocolBlockConfig(ctx context.Context, instanceId string, protocolBlockConfig antiddos.ProtocolBlockConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateProtocolBlockConfigRequest() - request.InstanceId = &instanceId - request.ProtocolBlockConfig = &protocolBlockConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateProtocolBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateWaterPrintConfig(ctx context.Context, instanceId string, waterPrintConfig antiddos.WaterPrintConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateWaterPrintConfigRequest() - request.InstanceId = &instanceId - request.WaterPrintConfig = &waterPrintConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateWaterPrintConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeListWaterPrintConfig(ctx context.Context, instanceId string) (result []*antiddos.WaterPrintRelation, err error) { - request := antiddos.NewDescribeListWaterPrintConfigRequest() - request.FilterInstanceId = common.StringPtr(instanceId) - var limit int64 = 10 - var offset int64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListWaterPrintConfig(request) - if e != nil { - err = e - return - } - configList := response.Response.ConfigList - if len(configList) > 0 { - result = append(result, configList...) - } - if len(configList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DeleteWaterPrintConfig(ctx context.Context, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteWaterPrintConfigRequest() - request.InstanceId = &instanceId - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteWaterPrintConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) SwitchWaterPrintConfig(ctx context.Context, instanceId string, openStatus int) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewSwitchWaterPrintConfigRequest() - request.InstanceId = &instanceId - request.OpenStatus = helper.IntInt64(openStatus) - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().SwitchWaterPrintConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateDDoSConnectLimit(ctx context.Context, instanceId string, connectLimitConfig antiddos.ConnectLimitConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSConnectLimitRequest() - request.InstanceId = &instanceId - request.ConnectLimitConfig = &connectLimitConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSConnectLimit(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateDDoSAI(ctx context.Context, instanceId, ddosAI string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSAIRequest() - request.DDoSAI = &ddosAI - request.InstanceIdList = []*string{&instanceId} - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSAI(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateDDoSGeoIPBlockConfig(ctx context.Context, instanceId string, ddosGeoIPBlockConfig antiddos.DDoSGeoIPBlockConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSGeoIPBlockConfigRequest() - request.InstanceId = &instanceId - request.DDoSGeoIPBlockConfig = &ddosGeoIPBlockConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSGeoIPBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreateDDoSSpeedLimitConfig(ctx context.Context, instanceId string, ddosSpeedLimitConfig antiddos.DDoSSpeedLimitConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSSpeedLimitConfigRequest() - request.InstanceId = &instanceId - request.DDoSSpeedLimitConfig = &ddosSpeedLimitConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSSpeedLimitConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) CreatePacketFilterConfig(ctx context.Context, instanceId string, packetFilterConfig antiddos.PacketFilterConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreatePacketFilterConfigRequest() - request.InstanceId = &instanceId - request.PacketFilterConfig = &packetFilterConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreatePacketFilterConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSBlackWhiteIpList(ctx context.Context, instanceId string, ips []string, ipType string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteDDoSBlackWhiteIpListRequest() - request.InstanceId = &instanceId - request.Type = &ipType - ipList := make([]*antiddos.IpSegment, 0) - for _, ip := range ips { - ipList = append(ipList, &antiddos.IpSegment{ - Ip: &ip, - Mask: helper.IntUint64(0), - }) - } - request.IpList = ipList - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteDDoSBlackWhiteIpList(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeletePortAclConfig(ctx context.Context, instanceId string, aclConfig antiddos.AclConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeletePortAclConfigRequest() - request.InstanceId = &instanceId - request.AclConfig = &aclConfig - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeletePortAclConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteProtocolBlockConfig(ctx context.Context, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateProtocolBlockConfigRequest() - request.InstanceId = &instanceId - protocolBlockConfig := antiddos.ProtocolBlockConfig{ - DropIcmp: helper.IntInt64(0), - DropTcp: helper.IntInt64(0), - DropUdp: helper.IntInt64(0), - DropOther: helper.IntInt64(0), - CheckExceptNullConnect: helper.IntInt64(1), - } - request.ProtocolBlockConfig = &protocolBlockConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateProtocolBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSConnectLimit(ctx context.Context, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSConnectLimitRequest() - request.InstanceId = &instanceId - connectLimitConfig := antiddos.ConnectLimitConfig{ - SdNewLimit: helper.IntUint64(0), - DstNewLimit: helper.IntUint64(0), - SdConnLimit: helper.IntUint64(0), - DstConnLimit: helper.IntUint64(0), - BadConnThreshold: helper.IntUint64(0), - NullConnEnable: helper.IntUint64(0), - ConnTimeout: helper.IntUint64(0), - SynRate: helper.IntUint64(0), - SynLimit: helper.IntUint64(0), - } - request.ConnectLimitConfig = &connectLimitConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSConnectLimit(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSAI(ctx context.Context, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateDDoSAIRequest() - request.DDoSAI = common.StringPtr("off") - request.InstanceIdList = []*string{&instanceId} - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateDDoSAI(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSGeoIPBlockConfig(ctx context.Context, instanceId string, ddosGeoIPBlockConfig antiddos.DDoSGeoIPBlockConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteDDoSGeoIPBlockConfigRequest() - request.InstanceId = &instanceId - request.DDoSGeoIPBlockConfig = &ddosGeoIPBlockConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteDDoSGeoIPBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSSpeedLimitConfig(ctx context.Context, instanceId string, ddosSpeedLimitConfig antiddos.DDoSSpeedLimitConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteDDoSSpeedLimitConfigRequest() - request.InstanceId = &instanceId - request.DDoSSpeedLimitConfig = &ddosSpeedLimitConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteDDoSSpeedLimitConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeletePacketFilterConfig(ctx context.Context, instanceId string, packetFilterConfig antiddos.PacketFilterConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeletePacketFilterConfigRequest() - request.InstanceId = &instanceId - request.PacketFilterConfig = &packetFilterConfig - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeletePacketFilterConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteDDoSThreshold(ctx context.Context, business, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyDDoSThresholdRequest() - request.Business = common.StringPtr(business) - request.Id = common.StringPtr(instanceId) - request.Threshold = helper.IntUint64(0) - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyDDoSThreshold(request) - if err != nil { - if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { - if sdkError.Code == "ResourceUnavailable" { - return nil - } - } - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteyDDoSLevel(ctx context.Context, business, instanceId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyDDoSLevelRequest() - request.Business = common.StringPtr(business) - request.Id = common.StringPtr(instanceId) - request.Method = common.StringPtr("set") - request.DDoSLevel = common.StringPtr("middle") - - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyDDoSLevel(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCCThresholdList(ctx context.Context, business, instanceId string) (result []*antiddos.CCThresholdPolicy, err error) { - request := antiddos.NewDescribeCCThresholdListRequest() - request.Business = &business - request.InstanceId = &instanceId - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCCThresholdList(request) - if e != nil { - err = e - return - } - thresholdList := response.Response.ThresholdList - if len(thresholdList) > 0 { - result = append(result, thresholdList...) - } - if len(thresholdList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) ModifyCCThresholdPolicy(ctx context.Context, instanceId, protocol, ip, domain string, threshold int) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyCCThresholdPolicyRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.Ip = &ip - request.Protocol = &protocol - request.Threshold = helper.IntInt64(threshold) - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyCCThresholdPolicy(request) - if err != nil { - if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { - if sdkError.Code == "ResourceUnavailable" { - return nil - } - } - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCcGeoIPBlockConfigList(ctx context.Context, business, instanceId string) (result []*antiddos.CcGeoIpPolicyNew, err error) { - request := antiddos.NewDescribeCcGeoIPBlockConfigListRequest() - request.Business = &business - request.InstanceId = &instanceId - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCcGeoIPBlockConfigList(request) - if e != nil { - err = e - return - } - ccGeoIpPolicyNew := response.Response.CcGeoIpPolicyList - if len(ccGeoIpPolicyNew) > 0 { - result = append(result, ccGeoIpPolicyNew...) - } - if len(ccGeoIpPolicyNew) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) CreateCcGeoIPBlockConfig(ctx context.Context, instanceId, protocol, ip, domain string, ccGeoIPBlockConfig antiddos.CcGeoIPBlockConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateCcGeoIPBlockConfigRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.IP = &ip - request.Protocol = &protocol - request.CcGeoIPBlockConfig = &ccGeoIPBlockConfig - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateCcGeoIPBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteCcGeoIPBlockConfig(ctx context.Context, instanceId string, ccGeoIPBlockConfig antiddos.CcGeoIPBlockConfig) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCcGeoIPBlockConfigRequest() - request.InstanceId = &instanceId - request.CcGeoIPBlockConfig = &ccGeoIPBlockConfig - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCcGeoIPBlockConfig(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCcBlackWhiteIpList(ctx context.Context, business, instanceId string) (result []*antiddos.CcBlackWhiteIpPolicy, err error) { - request := antiddos.NewDescribeCcBlackWhiteIpListRequest() - request.Business = &business - request.InstanceId = &instanceId - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCcBlackWhiteIpList(request) - if e != nil { - err = e - return - } - ccBlackWhiteIpList := response.Response.CcBlackWhiteIpList - if len(ccBlackWhiteIpList) > 0 { - result = append(result, ccBlackWhiteIpList...) - } - if len(ccBlackWhiteIpList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) CreateCcBlackWhiteIpList(ctx context.Context, instanceId, protocol, ip, domain, ipType string, posIps []string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateCcBlackWhiteIpListRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.Ip = &ip - request.Protocol = &protocol - request.Type = &ipType - ipLists := make([]*antiddos.IpSegment, 0) - for _, posIp := range posIps { - ipLists = append(ipLists, &antiddos.IpSegment{ - Ip: &posIp, - Mask: helper.IntUint64(0), - }) - } - request.IpList = ipLists - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateCcBlackWhiteIpList(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteCcBlackWhiteIpList(ctx context.Context, instanceId, policyId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCcBlackWhiteIpListRequest() - request.InstanceId = &instanceId - request.PolicyId = &policyId - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCcBlackWhiteIpList(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCCPrecisionPlyList(ctx context.Context, business, instanceId string) (result []*antiddos.CCPrecisionPolicy, err error) { - request := antiddos.NewDescribeCCPrecisionPlyListRequest() - request.Business = &business - request.InstanceId = &instanceId - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCCPrecisionPlyList(request) - if e != nil { - err = e - return - } - precisionPolicyList := response.Response.PrecisionPolicyList - if len(precisionPolicyList) > 0 { - result = append(result, precisionPolicyList...) - } - if len(precisionPolicyList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) CreateCCPrecisionPolicy(ctx context.Context, instanceId, protocol, ip, domain, policyAction string, policyList []*antiddos.CCPrecisionPlyRecord) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateCCPrecisionPolicyRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.Ip = &ip - request.Protocol = &protocol - request.PolicyAction = &policyAction - request.PolicyList = policyList - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateCCPrecisionPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteCCPrecisionPolicy(ctx context.Context, instanceId, policyId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCCPrecisionPolicyRequest() - request.InstanceId = &instanceId - request.PolicyId = &policyId - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCCPrecisionPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) ModifyCCLevelPolicy(ctx context.Context, instanceId, ip, domain, protocol, level string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewModifyCCLevelPolicyRequest() - request.InstanceId = &instanceId - request.Ip = &ip - request.Domain = &domain - request.Protocol = &protocol - request.Level = &level - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().ModifyCCLevelPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCCReqLimitPolicyList(ctx context.Context, business, instanceId string) (result []*antiddos.CCReqLimitPolicy, err error) { - request := antiddos.NewDescribeCCReqLimitPolicyListRequest() - request.Business = &business - request.InstanceId = &instanceId - var limit uint64 = 10 - var offset uint64 = 0 - request.Limit = &limit - request.Offset = &offset - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCCReqLimitPolicyList(request) - if e != nil { - err = e - return - } - requestLimitPolicyList := response.Response.RequestLimitPolicyList - if len(requestLimitPolicyList) > 0 { - result = append(result, requestLimitPolicyList...) - } - if len(requestLimitPolicyList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) CreateCCReqLimitPolicy(ctx context.Context, instanceId, protocol, ip, domain string, ccReqLimitPolicyRecord antiddos.CCReqLimitPolicyRecord) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewCreateCCReqLimitPolicyRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.Ip = &ip - request.Protocol = &protocol - request.Policy = &ccReqLimitPolicyRecord - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().CreateCCReqLimitPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteCCRequestLimitPolicy(ctx context.Context, instanceId, policyId string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCCRequestLimitPolicyRequest() - request.InstanceId = &instanceId - request.PolicyId = &policyId - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCCRequestLimitPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeCCLevelPolicy(ctx context.Context, domain, instanceId, ip, protocol string) (level string, err error) { - request := antiddos.NewDescribeCCLevelPolicyRequest() - request.Domain = &domain - request.InstanceId = &instanceId - request.Ip = &ip - request.Protocol = &protocol - - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCCLevelPolicy(request) - if e != nil { - err = e - return - } - level = *response.Response.Level - return -} - -func (me *AntiddosService) DescribeListBGPIPInstanceById(ctx context.Context, business, instanceId string) (result []*antiddos.BGPIPInstance, err error) { - - var limit uint64 = 10 - var offset uint64 = 0 - request := antiddos.NewDescribeListBGPIPInstancesRequest() - request.Limit = &limit - request.Offset = &offset - request.FilterInstanceId = &instanceId - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListBGPIPInstances(request) - if e != nil { - err = e - return - } - bgpipInstanceList := response.Response.InstanceList - if len(bgpipInstanceList) > 0 { - result = append(result, bgpipInstanceList...) - } - if len(bgpipInstanceList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DescribeListBGPInstanceById(ctx context.Context, business, instanceId string) (result []*antiddos.BGPInstance, err error) { - - var limit uint64 = 10 - var offset uint64 = 0 - request := antiddos.NewDescribeListBGPInstancesRequest() - request.Limit = &limit - request.Offset = &offset - request.FilterInstanceId = &instanceId - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeListBGPInstances(request) - if e != nil { - err = e - return - } - bgpipInstanceList := response.Response.InstanceList - if len(bgpipInstanceList) > 0 { - result = append(result, bgpipInstanceList...) - } - if len(bgpipInstanceList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DescribeCCLevelList(ctx context.Context, business, instanceId string) (result []*antiddos.CCLevelPolicy, err error) { - - var limit uint64 = 10 - var offset uint64 = 0 - request := antiddos.NewDescribeCCLevelListRequest() - request.Limit = &limit - request.Offset = &offset - request.InstanceId = &instanceId - request.Business = &business - - for { - ratelimit.Check(request.GetAction()) - response, e := me.client.UseAntiddosClient().DescribeCCLevelList(request) - if e != nil { - err = e - return - } - bgpipInstanceList := response.Response.LevelList - if len(bgpipInstanceList) > 0 { - result = append(result, bgpipInstanceList...) - } - if len(bgpipInstanceList) < int(limit) { - return - } - offset += limit - } -} - -func (me *AntiddosService) DeleteCCLevelPolicy(ctx context.Context, instanceId, ip, domain string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCCLevelPolicyRequest() - request.InstanceId = &instanceId - request.Ip = &ip - request.Domain = &domain - request.Protocol = common.StringPtr("http") - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCCLevelPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DeleteCCThresholdPolicy(ctx context.Context, instanceId, ip, domain string) (err error) { - logId := tccommon.GetLogId(ctx) - request := antiddos.NewDeleteCCThresholdPolicyRequest() - request.InstanceId = &instanceId - request.Ip = &ip - request.Domain = &domain - request.Protocol = common.StringPtr("http") - err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseAntiddosClient().DeleteCCThresholdPolicy(request) - if err != nil { - return resource.RetryableError(err) - } - 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()) - return - } - return -} - -func (me *AntiddosService) DescribeAntiddosBoundipById(ctx context.Context, id string) (boundip *antiddos.BGPInstance, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListBGPInstancesRequest() - request.FilterInstanceId = &id - request.Limit = helper.IntUint64(10) - request.Offset = helper.IntUint64(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.UseAntiddosClient().DescribeListBGPInstances(request) - if err != nil { - errRet = 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.InstanceList) < 1 { - return - } - - boundip = response.Response.InstanceList[0] - return -} - -func (me *AntiddosService) DescribeAntiddosPendingRiskInfoByFilter(ctx context.Context) (pendingRiskInfoResponseParams *antiddos.DescribePendingRiskInfoResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribePendingRiskInfoRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribePendingRiskInfo(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response != nil { - pendingRiskInfoResponseParams = response.Response - } - - return -} - -func (me *AntiddosService) DescribeAntiddosOverviewIndexByFilter(ctx context.Context, param map[string]interface{}) (describeOverviewIndexResponseParams *antiddos.DescribeOverviewIndexResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeOverviewIndexRequest() - ) - - defer 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 == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeOverviewIndex(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - describeOverviewIndexResponseParams = response.Response - return -} - -func (me *AntiddosService) DescribeAntiddosOverviewDdosTrendByFilter(ctx context.Context, param map[string]interface{}) (describeOverviewDDoSTrendResponseParams *antiddos.DescribeOverviewDDoSTrendResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeOverviewDDoSTrendRequest() - ) - - defer 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 == "Period" { - request.Period = v.(*int64) - } - if k == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - if k == "MetricName" { - request.MetricName = v.(*string) - } - if k == "Business" { - request.Business = v.(*string) - } - if k == "IpList" { - request.IpList = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeOverviewDDoSTrend(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response != nil { - describeOverviewDDoSTrendResponseParams = response.Response - } - - return -} - -func (me *AntiddosService) DescribeAntiddosOverviewDdosEventListByFilter(ctx context.Context, param map[string]interface{}) (overviewDdosEventList []*antiddos.OverviewDDoSEvent, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeOverviewDDoSEventListRequest() - ) - - defer 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 == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - if k == "AttackStatus" { - request.AttackStatus = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseAntiddosClient().DescribeOverviewDDoSEventList(request) - if err != nil { - errRet = err - return - } - 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.EventList) < 1 { - break - } - overviewDdosEventList = append(overviewDdosEventList, response.Response.EventList...) - if len(response.Response.EventList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DescribeAntiddosOverviewCcTrendByFilter(ctx context.Context, param map[string]interface{}) (overviewCCTrendResponseParams *antiddos.DescribeOverviewCCTrendResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeOverviewCCTrendRequest() - ) - - defer 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 == "Period" { - request.Period = v.(*int64) - } - if k == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - if k == "MetricName" { - request.MetricName = v.(*string) - } - if k == "Business" { - request.Business = v.(*string) - } - if k == "IpList" { - request.IpList = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeOverviewCCTrend(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response != nil { - overviewCCTrendResponseParams = response.Response - } - - return -} - -func (me *AntiddosService) DescribeAntiddosDdosBlackWhiteIpListById(ctx context.Context, instanceId string) (ddosBlackWhiteIpListResponseParams *antiddos.DescribeDDoSBlackWhiteIpListResponseParams, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeDDoSBlackWhiteIpListRequest() - 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.UseAntiddosClient().DescribeDDoSBlackWhiteIpList(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - ddosBlackWhiteIpListResponseParams = response.Response - - return -} - -func (me *AntiddosService) DeleteAntiddosDdosBlackWhiteIpListById(ctx context.Context, params map[string]interface{}) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeleteDDoSBlackWhiteIpListRequest() - if v, ok := params["instanceId"]; ok { - request.InstanceId = helper.String(v.(string)) - } - if v, ok := params["ipType"]; ok { - request.Type = helper.String(v.(string)) - } - ipSegment := antiddos.IpSegment{} - if v, ok := params["ip"]; ok { - ipSegment.Ip = helper.String(v.(string)) - } - if v, ok := params["ipMask"]; ok { - ipSegment.Mask = helper.IntUint64(v.(int)) - } - request.IpList = []*antiddos.IpSegment{&ipSegment} - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DeleteDDoSBlackWhiteIpList(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosBasicDeviceStatusByFilter(ctx context.Context, param map[string]interface{}) (basicDeviceStatus *antiddos.DescribeBasicDeviceStatusResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeBasicDeviceStatusRequest() - ) - - defer 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 == "IpList" { - request.IpList = v.([]*string) - } - if k == "IdList" { - request.IdList = v.([]*string) - } - if k == "FilterRegion" { - request.FilterRegion = v.(*uint64) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeBasicDeviceStatus(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - basicDeviceStatus = response.Response - return -} - -func (me *AntiddosService) DescribeAntiddosBgpBizTrendByFilter(ctx context.Context, param map[string]interface{}) (bgpBizTrend *antiddos.DescribeBgpBizTrendResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeBgpBizTrendRequest() - ) - - defer 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 == "Business" { - request.Business = v.(*string) - } - if k == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - if k == "MetricName" { - request.MetricName = v.(*string) - } - if k == "InstanceId" { - request.InstanceId = v.(*string) - } - if k == "Flag" { - request.Flag = v.(*uint64) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeBgpBizTrend(request) - if err != nil { - errRet = err - return - } - 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 - } - - bgpBizTrend = response.Response - return -} - -func (me *AntiddosService) DescribeAntiddosListListenerByFilter(ctx context.Context) (listListener *antiddos.DescribeListListenerResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeListListenerRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeListListener(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - listListener = response.Response - return -} - -func (me *AntiddosService) DescribeAntiddosOverviewAttackTrendByFilter(ctx context.Context, param map[string]interface{}) (overviewAttackTrend *antiddos.DescribeOverviewAttackTrendResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = antiddos.NewDescribeOverviewAttackTrendRequest() - ) - - defer 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 == "Type" { - request.Type = v.(*string) - } - if k == "Dimension" { - request.Dimension = v.(*string) - } - if k == "Period" { - request.Period = v.(*uint64) - } - if k == "StartTime" { - request.StartTime = v.(*string) - } - if k == "EndTime" { - request.EndTime = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeOverviewAttackTrend(request) - if err != nil { - errRet = err - return - } - 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 - } - - overviewAttackTrend = response.Response - return -} - -func (me *AntiddosService) DescribeAntiddosDdosGeoIpBlockConfigById(ctx context.Context, instanceId string) (configList []*antiddos.DDoSGeoIPBlockConfigRelation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListDDoSGeoIPBlockConfigRequest() - request.FilterInstanceId = &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 uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseAntiddosClient().DescribeListDDoSGeoIPBlockConfig(request) - if err != nil { - errRet = err - return - } - 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.ConfigList) < 1 { - break - } - configList = append(configList, response.Response.ConfigList...) - if len(response.Response.ConfigList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DeleteAntiddosDdosGeoIpBlockConfigById(ctx context.Context, instanceId string, config *antiddos.DDoSGeoIPBlockConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeleteDDoSGeoIPBlockConfigRequest() - request.InstanceId = &instanceId - request.DDoSGeoIPBlockConfig = config - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DeleteDDoSGeoIPBlockConfig(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosDdosSpeedLimitConfigById(ctx context.Context, instanceId string) (configList []*antiddos.DDoSSpeedLimitConfigRelation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListDDoSSpeedLimitConfigRequest() - request.FilterInstanceId = &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 uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseAntiddosClient().DescribeListDDoSSpeedLimitConfig(request) - if err != nil { - errRet = err - return - } - 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.ConfigList) < 1 { - break - } - configList = append(configList, response.Response.ConfigList...) - if len(response.Response.ConfigList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DeleteAntiddosDdosSpeedLimitConfigById(ctx context.Context, instanceId string, config *antiddos.DDoSSpeedLimitConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeleteDDoSSpeedLimitConfigRequest() - request.InstanceId = &instanceId - request.DDoSSpeedLimitConfig = config - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DeleteDDoSSpeedLimitConfig(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosDefaultAlarmThresholdById(ctx context.Context, instanceType string, filterAlarmType int64) (defaultAlarmThreshold *antiddos.DefaultAlarmThreshold, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeDefaultAlarmThresholdRequest() - request.InstanceType = &instanceType - request.FilterAlarmType = &filterAlarmType - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DescribeDefaultAlarmThreshold(request) - if err != nil { - errRet = 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.DefaultAlarmConfigList) < 1 { - return - } - - defaultAlarmThreshold = response.Response.DefaultAlarmConfigList[0] - return -} - -func (me *AntiddosService) DescribeAntiddosSchedulingDomainUserNameById(ctx context.Context, domainName string) (schedulingDomainUserName *antiddos.SchedulingDomainInfo, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListSchedulingDomainRequest() - request.FilterDomain = &domainName - request.Offset = helper.Uint64(0) - request.Limit = helper.Uint64(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.UseAntiddosClient().DescribeListSchedulingDomain(request) - if err != nil { - errRet = 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.DomainList) < 1 { - return - } - - schedulingDomainUserName = response.Response.DomainList[0] - return -} - -func (me *AntiddosService) DescribeAntiddosIpAlarmThresholdConfigById(ctx context.Context, instanceId, eip string, alarmType int) (ipAlarmThresholdConfig *antiddos.IPAlarmThresholdRelation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListIPAlarmConfigRequest() - request.FilterInstanceId = &instanceId - request.FilterIp = &eip - request.FilterAlarmType = helper.IntInt64(alarmType) - request.Limit = helper.Int64(10) - request.Offset = helper.Int64(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.UseAntiddosClient().DescribeListIPAlarmConfig(request) - if err != nil { - errRet = 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 - } - - ipAlarmThresholdConfig = response.Response.ConfigList[0] - return -} - -func (me *AntiddosService) DescribeAntiddosPacketFilterConfigById(ctx context.Context, instanceId string) (configList []*antiddos.PacketFilterRelation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListPacketFilterConfigRequest() - request.FilterInstanceId = &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.UseAntiddosClient().DescribeListPacketFilterConfig(request) - if err != nil { - errRet = err - return - } - 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.ConfigList) < 1 { - break - } - configList = append(configList, response.Response.ConfigList...) - if len(response.Response.ConfigList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DeleteAntiddosPacketFilterConfigById(ctx context.Context, instanceId string, config *antiddos.PacketFilterConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeletePacketFilterConfigRequest() - request.InstanceId = &instanceId - request.PacketFilterConfig = config - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DeletePacketFilterConfig(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosPortAclConfigById(ctx context.Context, instanceId string) (portAclConfig []*antiddos.AclConfigRelation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeListPortAclListRequest() - request.FilterInstanceId = &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 uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseAntiddosClient().DescribeListPortAclList(request) - if err != nil { - errRet = err - return - } - 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.AclList) < 1 { - break - } - portAclConfig = append(portAclConfig, response.Response.AclList...) - if len(response.Response.AclList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DeleteAntiddosPortAclConfigById(ctx context.Context, instanceId string, config *antiddos.AclConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeletePortAclConfigRequest() - request.InstanceId = &instanceId - request.AclConfig = config - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseAntiddosClient().DeletePortAclConfig(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosCcBlackWhiteIpById(ctx context.Context, business, instanceId, ip, domain, protocol string) (ccBlackWhiteIps []*antiddos.CcBlackWhiteIpPolicy, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeCcBlackWhiteIpListRequest() - request.InstanceId = &instanceId - request.Business = &business - request.Ip = &ip - request.Domain = &domain - request.Protocol = &protocol - - defer func() { - if errRet != nil { - 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.UseAntiddosClient().DescribeCcBlackWhiteIpList(request) - if err != nil { - errRet = err - return - } - 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.CcBlackWhiteIpList) < 1 { - break - } - ccBlackWhiteIps = append(ccBlackWhiteIps, response.Response.CcBlackWhiteIpList...) - if len(response.Response.CcBlackWhiteIpList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *AntiddosService) DeleteAntiddosCcBlackWhiteIpById(ctx context.Context, instanceId, policyId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeleteCcBlackWhiteIpListRequest() - request.InstanceId = &instanceId - request.PolicyId = &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.UseAntiddosClient().DeleteCcBlackWhiteIpList(request) - if err != nil { - 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 *AntiddosService) DescribeAntiddosCcPrecisionPolicyById(ctx context.Context, business, instanceId, ip, domain, protocol string) (ccPrecisionPolicys []*antiddos.CCPrecisionPolicy, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDescribeCCPrecisionPlyListRequest() - request.InstanceId = &instanceId - request.Business = &business - request.Ip = &ip - request.Domain = &domain - request.Protocol = &protocol - - defer func() { - if errRet != nil { - 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.UseAntiddosClient().DescribeCCPrecisionPlyList(request) - if err != nil { - errRet = err - return - } - 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.PrecisionPolicyList) < 1 { - break - } - ccPrecisionPolicys = append(ccPrecisionPolicys, response.Response.PrecisionPolicyList...) - if len(response.Response.PrecisionPolicyList) < int(limit) { - break - } - - offset += limit - } - return -} - -func (me *AntiddosService) DeleteAntiddosCcPrecisionPolicyById(ctx context.Context, instanceId, policyId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := antiddos.NewDeleteCCPrecisionPolicyRequest() - request.InstanceId = &instanceId - request.PolicyId = &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.UseAntiddosClient().DeleteCCPrecisionPolicy(request) - if err != nil { - 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/dayuv2/service_tencentcloud_dayu.go b/tencentcloud/services/dayuv2/service_tencentcloud_dayu.go deleted file mode 100644 index c6d33c341d..0000000000 --- a/tencentcloud/services/dayuv2/service_tencentcloud_dayu.go +++ /dev/null @@ -1,2043 +0,0 @@ -package dayuv2 - -import ( - "context" - "fmt" - "log" - "net/url" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/pkg/errors" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - dayu "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu/v20180709" - - "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 NewDayuService(client *connectivity.TencentCloudClient) DayuService { - return DayuService{client: client} -} - -type DayuService struct { - client *connectivity.TencentCloudClient -} - -func (me *DayuService) DescribeCCSelfdefinePolicies(ctx context.Context, resourceType string, resourceId string, policyName string, policyId string) (infos []*dayu.CCPolicy, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeCCSelfDefinePolicyRequest() - - infos = make([]*dayu.CCPolicy, 0, 100) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - var offset, limit uint64 = 0, 20 - - request.Business = &resourceType - if resourceId != "" { - request.Id = &resourceId - } - - request.Offset = &offset - request.Limit = &limit - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeCCSelfDefinePolicy(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - //this error case is what sdk returns when the dayu service is overdue - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if policyName == "" && policyId == "" { - infos = append(infos, response.Response.Policys...) - } else { - for _, policy := range response.Response.Policys { - if policyName != "" && *policy.Name != policyName { - continue - } - if policyId != "" && *policy.SetId != policyId { - continue - } - infos = append(infos, policy) - } - } - if len(response.Response.Policys) < int(limit) { - if len(infos) > 0 { - has = true - } - return - } - offset += limit - } -} - -func (me *DayuService) DescribeCCSelfdefinePolicy(ctx context.Context, resourceType string, resourceId string, policyId string) (infos *dayu.CCPolicy, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeCCSelfDefinePolicyRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - policies, _, err := me.DescribeCCSelfdefinePolicies(ctx, resourceType, resourceId, "", policyId) - if err != nil { - errRet = err - return - } - - length := len(policies) - if length == 0 { - return - } - if length > 1 { - errRet = fmt.Errorf("Create CC self-define policy returns %d policies", length) - return - } - - infos = policies[0] - has = true - return -} - -func (me *DayuService) CreateCCSelfdefinePolicy(ctx context.Context, resourceType string, resourceId string, ccPolicy dayu.CCPolicy) (policyId string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateCCSelfDefinePolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Policy = &ccPolicy - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateCCSelfDefinePolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - //describe CC self-define policies to get policy ID - policies, has, dErr := me.DescribeCCSelfdefinePolicies(ctx, resourceType, resourceId, *ccPolicy.Name, "") - if dErr != nil { - errRet = dErr - return - } - if !has { - errRet = fmt.Errorf("Create CC self-define policy failed") - return - } - if len(policies) != 1 { - errRet = fmt.Errorf("Create CC self-define policy returns %d policies", len(policies)) - return - } - policyId = *policies[0].SetId - return -} - -func (me *DayuService) ModifyCCSelfdefinePolicy(ctx context.Context, resourceType string, resourceId string, policyId string, ccPolicy dayu.CCPolicy) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyCCSelfDefinePolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.SetId = &policyId - request.Policy = &ccPolicy - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyCCSelfDefinePolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DeleteCCSelfdefinePolicy(ctx context.Context, resourceType string, resourceId string, policyId string) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteCCSelfDefinePolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.SetId = &policyId - request.Business = &resourceType - request.Id = &resourceId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteCCSelfDefinePolicy(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - return -} - -func (me *DayuService) CreateDdosPolicy(ctx context.Context, resourceType string, name string, ddosPolicyDropOption []*dayu.DDoSPolicyDropOption, ddosPolicyPortLimit []*dayu.DDoSPolicyPortLimit, ipBlackWhite []*dayu.IpBlackWhite, ddosPacketFilter []*dayu.DDoSPolicyPacketFilter, waterPrintPolicy []*dayu.WaterPrintPolicy) (policyId string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateDDoSPolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Name = &name - request.Business = &resourceType - request.DropOptions = ddosPolicyDropOption - request.PortLimits = ddosPolicyPortLimit - request.IpAllowDenys = ipBlackWhite - request.PacketFilters = ddosPacketFilter - request.WaterPrint = waterPrintPolicy - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateDDoSPolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if response.Response.PolicyId == nil || *response.Response.PolicyId == "" { - errRet = errors.New("TencentCloud SDK return empty DDoS policy Id") - return - } - policyId = *response.Response.PolicyId - return -} - -func (me *DayuService) DescribeDdosPolicies(ctx context.Context, resourceType string, policyId string) (ddosPolicies []*dayu.DDosPolicy, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeDDoSPolicyRequest() - - ddosPolicies = make([]*dayu.DDosPolicy, 0, 100) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = &resourceType - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeDDoSPolicy(request) - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - //this is when resource is not exist - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if policyId != "" { - for i, p := range response.Response.DDosPolicyList { - if *p.PolicyId == policyId { - ddosPolicies = append(ddosPolicies, response.Response.DDosPolicyList[i]) - return - } - } - } else { - ddosPolicies = append(ddosPolicies, response.Response.DDosPolicyList...) - return - } - return -} - -func (me *DayuService) DescribeDdosPolicy(ctx context.Context, resourceType string, policyId string) (ddosPolicy dayu.DDosPolicy, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeDDoSPolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = &resourceType - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeDDoSPolicy(request) - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if len(response.Response.DDosPolicyList) == 0 { - return - } - - for i, p := range response.Response.DDosPolicyList { - if *p.PolicyId == policyId { - has = true - ddosPolicy = *response.Response.DDosPolicyList[i] - return - } - } - - return -} - -func flattenDdosDropOptionList(list []*dayu.DDoSPolicyDropOption) (mapping []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "drop_tcp": *v.DropTcp > 0, - "drop_udp": *v.DropUdp > 0, - "drop_icmp": *v.DropIcmp > 0, - "drop_other": *v.DropOther > 0, - "drop_abroad": *v.DropAbroad > 0, - "check_sync_conn": *v.CheckSyncConn > 0, - "s_new_limit": int(*v.SdNewLimit), - "d_new_limit": int(*v.DstNewLimit), - "s_conn_limit": int(*v.SdConnLimit), - "d_conn_limit": int(*v.DstConnLimit), - "bad_conn_threshold": int(*v.BadConnThreshold), - "null_conn_enable": *v.NullConnEnable > 0, - "conn_timeout": int(*v.ConnTimeout), - "syn_rate": int(*v.SynRate), - "syn_limit": int(*v.SynLimit), - "tcp_mbps_limit": int(*v.DTcpMbpsLimit), - "udp_mbps_limit": int(*v.DUdpMbpsLimit), - "icmp_mbps_limit": int(*v.DIcmpMbpsLimit), - "other_mbps_limit": int(*v.DOtherMbpsLimit), - } - result = append(result, mapping) - } - return result -} - -func flattenCCRuleList(list []*dayu.CCRule) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "skey": v.Skey, - "operator": v.Operator, - "value": v.Value, - } - result = append(result, mapping) - } - return result -} - -func flattenDdosPortLimitList(list []*dayu.DDoSPolicyPortLimit) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "protocol": v.Protocol, - "action": v.Action, - "kind": int(*v.Kind), - } - if int(*v.Kind) == 0 || int(*v.Kind) == 2 { - mapping["start_port"] = int(*v.DPortStart) - mapping["end_port"] = int(*v.DPortEnd) - } else { - mapping["start_port"] = int(*v.SPortStart) - mapping["end_port"] = int(*v.SPortEnd) - } - result = append(result, mapping) - } - return result -} - -func flattenDdosPacketFilterList(list []*dayu.DDoSPolicyPacketFilter) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "protocol": v.Protocol, - "action": v.Action, - "d_start_port": int(*v.DportStart), - "d_end_port": int(*v.DportEnd), - "s_start_port": int(*v.SportStart), - "s_end_port": int(*v.SportEnd), - "pkt_length_max": int(*v.PktlenMax), - "pkt_length_min": int(*v.PktlenMin), - "match_begin": v.MatchBegin, - "match_type": v.MatchType, - "match_str": v.Str, - "is_include": *v.IsNot > 0, - "depth": int(*v.Depth), - "offset": int(*v.Offset), - } - result = append(result, mapping) - } - return result -} - -func flattenIpBlackWhiteList(list []*dayu.IpBlackWhite) (reB []string, reW []string) { - reB = make([]string, 0) - reW = make([]string, 0) - for _, v := range list { - if *v.Type == DAYU_IP_TYPE_BLACK { - reB = append(reB, *v.Ip) - } - if *v.Type == DAYU_IP_TYPE_WHITE { - reW = append(reW, *v.Ip) - } - - } - return -} - -func flattenWaterPrintPolicyList(list []*dayu.WaterPrintPolicy) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "tcp_port_list": helper.StringsInterfaces(v.TcpPortList), - "udp_port_list": helper.StringsInterfaces(v.UdpPortList), - "offset": int(*v.Offset), - "auto_remove": *v.RemoveSwitch > 0, - "open_switch": *v.OpenStatus > 0, - } - result = append(result, mapping) - } - return result -} - -func flattenWaterPrintKeyList(list []*dayu.WaterPrintKey) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "id": *v.KeyId, - "content": *v.KeyContent, - "create_time": *v.CreateTime, - "open_switch": *v.OpenStatus > 0, - } - result = append(result, mapping) - } - return result -} - -func setDdosPolicyDropOption(mapping []interface{}) (result []*dayu.DDoSPolicyDropOption, err error) { - result = make([]*dayu.DDoSPolicyDropOption, 0, len(mapping)) - for _, vv := range mapping { - v := vv.(map[string]interface{}) - var r dayu.DDoSPolicyDropOption - r.DropTcp = helper.BoolToInt64Pointer(v["drop_tcp"].(bool)) - r.DropUdp = helper.BoolToInt64Pointer(v["drop_udp"].(bool)) - r.DropIcmp = helper.BoolToInt64Pointer(v["drop_icmp"].(bool)) - r.DropOther = helper.BoolToInt64Pointer(v["drop_other"].(bool)) - r.DropAbroad = helper.BoolToInt64Pointer(v["drop_abroad"].(bool)) - r.CheckSyncConn = helper.BoolToInt64Pointer(v["check_sync_conn"].(bool)) - r.SdNewLimit = helper.IntUint64(v["s_new_limit"].(int)) - r.DstNewLimit = helper.IntUint64(v["d_new_limit"].(int)) - r.SdConnLimit = helper.IntUint64(v["s_conn_limit"].(int)) - r.DstConnLimit = helper.IntUint64(v["d_conn_limit"].(int)) - r.BadConnThreshold = helper.IntUint64(v["bad_conn_threshold"].(int)) - r.NullConnEnable = helper.BoolToInt64Pointer(v["null_conn_enable"].(bool)) - r.ConnTimeout = helper.IntUint64(v["conn_timeout"].(int)) - r.SynRate = helper.IntUint64(v["syn_rate"].(int)) - r.SynLimit = helper.IntUint64((v["syn_limit"]).(int)) - r.DTcpMbpsLimit = helper.IntUint64(v["tcp_mbps_limit"].(int)) - r.DUdpMbpsLimit = helper.IntUint64(v["udp_mbps_limit"].(int)) - r.DIcmpMbpsLimit = helper.IntUint64(v["icmp_mbps_limit"].(int)) - r.DOtherMbpsLimit = helper.IntUint64(v["other_mbps_limit"].(int)) - result = append(result, &r) - } - return -} - -func setDdosPolicyPortLimit(mapping []interface{}) (result []*dayu.DDoSPolicyPortLimit, err error) { - result = make([]*dayu.DDoSPolicyPortLimit, 0, len(mapping)) - for _, vv := range mapping { - v := vv.(map[string]interface{}) - var r dayu.DDoSPolicyPortLimit - startPort := v["start_port"].(int) - endPort := v["end_port"].(int) - kind := v["kind"].(int) - if startPort > endPort { - err = fmt.Errorf("The `start_port` should not be greater than `end_port`.") - return - } - if kind == 0 || kind == 2 { - r.DPortStart = helper.IntUint64(startPort) - r.DPortEnd = helper.IntUint64(endPort) - } else if kind == 1 { - r.SPortStart = helper.IntUint64(startPort) - r.SPortEnd = helper.IntUint64(endPort) - } - - r.Protocol = helper.String(v["protocol"].(string)) - r.Action = helper.String(v["action"].(string)) - r.Kind = helper.IntUint64(kind) - result = append(result, &r) - } - return -} - -func setIpBlackWhite(blackIps []interface{}, whiteIps []interface{}) (result []*dayu.IpBlackWhite, err error) { - result = make([]*dayu.IpBlackWhite, 0, len(blackIps)+len(whiteIps)) - for _, vv := range blackIps { - var r dayu.IpBlackWhite - r.Ip = helper.String(vv.(string)) - r.Type = helper.String(DAYU_IP_TYPE_BLACK) - result = append(result, &r) - } - for _, vv := range whiteIps { - var r dayu.IpBlackWhite - r.Ip = helper.String(vv.(string)) - r.Type = helper.String(DAYU_IP_TYPE_WHITE) - result = append(result, &r) - } - return -} - -func setDdosPolicyPacketFilter(mapping []interface{}) (result []*dayu.DDoSPolicyPacketFilter, err error) { - result = make([]*dayu.DDoSPolicyPacketFilter, 0, len(mapping)) - for _, vv := range mapping { - v := vv.(map[string]interface{}) - var r dayu.DDoSPolicyPacketFilter - dStartPort := v["d_start_port"].(int) - dEndPort := v["d_end_port"].(int) - sStartPort := v["s_start_port"].(int) - sEndPort := v["s_end_port"].(int) - if dStartPort > dEndPort { - err = fmt.Errorf("The `d_start_port` should not be greater than `d_end_port`.") - return - } - if sStartPort > sEndPort { - err = fmt.Errorf("The `s_start_port` should not be greater than `s_end_port`.") - return - } - pktLenMax := v["pkt_length_max"].(int) - pktLenMin := v["pkt_length_min"].(int) - if pktLenMax < pktLenMin { - err = fmt.Errorf("The `pkt_length_min` should not be greater than `pkt_length_max`.") - return - } - r.Protocol = helper.String(v["protocol"].(string)) - r.DportStart = helper.IntUint64(dStartPort) - r.DportEnd = helper.IntUint64(dEndPort) - r.SportStart = helper.IntUint64(sStartPort) - r.SportEnd = helper.IntUint64(sEndPort) - r.Action = helper.String(v["action"].(string)) - r.IsNot = helper.BoolToInt64Pointer(v["is_include"].(bool)) - r.PktlenMax = helper.IntUint64(pktLenMax) - r.PktlenMin = helper.IntUint64(pktLenMin) - r.MatchBegin = helper.String(v["match_begin"].(string)) - r.MatchType = helper.String(v["match_type"].(string)) - r.Str = helper.String(v["match_str"].(string)) - r.Depth = helper.IntUint64(v["depth"].(int)) - r.Offset = helper.IntUint64(v["offset"].(int)) - result = append(result, &r) - } - return -} - -func setWaterPrintPolicy(mapping []interface{}) (result []*dayu.WaterPrintPolicy, err error) { - result = make([]*dayu.WaterPrintPolicy, 0, len(mapping)) - for _, vv := range mapping { - v := vv.(map[string]interface{}) - var r dayu.WaterPrintPolicy - tcpPortList := v["tcp_port_list"].([]interface{}) - r.TcpPortList = make([]*string, 0, len(tcpPortList)) - for _, tcpPort := range tcpPortList { - r.TcpPortList = append(r.TcpPortList, helper.String(tcpPort.(string))) - } - udpPortList := v["udp_port_list"].([]interface{}) - r.UdpPortList = make([]*string, 0, len(udpPortList)) - for _, udpPort := range udpPortList { - r.UdpPortList = append(r.UdpPortList, helper.String(udpPort.(string))) - } - r.RemoveSwitch = helper.BoolToInt64Pointer(v["auto_remove"].(bool)) - r.OpenStatus = helper.BoolToInt64Pointer(v["open_switch"].(bool)) - r.Offset = helper.IntUint64(v["offset"].(int)) - result = append(result, &r) - } - return -} - -func (me *DayuService) DeleteDdosPolicy(ctx context.Context, resourceType string, policyId string) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteDDoSPolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.PolicyId = &policyId - request.Business = &resourceType - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteDDoSPolicy(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - return -} - -func (me *DayuService) ModifyDdosPolicy(ctx context.Context, resourceType string, policyId string, ddosPolicyDropOption []*dayu.DDoSPolicyDropOption, ddosPolicyPortLimit []*dayu.DDoSPolicyPortLimit, ipBlackWhite []*dayu.IpBlackWhite, ddosPacketFilter []*dayu.DDoSPolicyPacketFilter, waterPrintPolicy []*dayu.WaterPrintPolicy) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyDDoSPolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = &resourceType - request.PolicyId = &policyId - request.DropOptions = ddosPolicyDropOption - request.PortLimits = ddosPolicyPortLimit - request.IpAllowDenys = ipBlackWhite - request.PacketFilters = ddosPacketFilter - request.WaterPrint = waterPrintPolicy - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyDDoSPolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) ModifyDdosPolicyName(ctx context.Context, resourceType string, policyId string, name string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyDDoSPolicyNameRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = &resourceType - request.PolicyId = &policyId - request.Name = helper.String(url.QueryEscape(name)) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyDDoSPolicyName(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - return -} - -func (me *DayuService) CreateDdosPolicyCase(ctx context.Context, request *dayu.CreateDDoSPolicyCaseRequest) (sceneId string, 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, err := me.client.UseDayuClient().CreateDDoSPolicyCase(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if response.Response.SceneId == nil || *response.Response.SceneId == "" { - errRet = errors.New("TencentCloud SDK return empty DDoS policy case Id") - return - } - sceneId = *response.Response.SceneId - return -} - -func (me *DayuService) DescribeDdosPolicyCase(ctx context.Context, resourceType string, sceneId string) (ddosPolicyCase dayu.KeyValueRecord, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribePolicyCaseRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.SceneId = &sceneId - request.Business = &resourceType - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribePolicyCase(request) - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - //this is when resource is not exist - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if len(response.Response.CaseList) == 0 { - return - } - if len(response.Response.CaseList) != 1 { - errRet = fmt.Errorf("TencentCloud SDK return %d appInfo with one applicationId %s", - len(response.Response.CaseList), sceneId) - return - } - ddosPolicyCase = *response.Response.CaseList[0] - has = true - return -} - -func (me *DayuService) DeleteDdosPolicyCase(ctx context.Context, resourceType string, sceneId string) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteDDoSPolicyCaseRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.SceneId = &sceneId - request.Business = &resourceType - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteDDoSPolicyCase(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - //describe the scene - _, has, err := me.DescribeDdosPolicyCase(ctx, resourceType, sceneId) - if err != nil { - errRet = err - return - } - if !has { - return - } - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - return -} - -func (me *DayuService) ModifyDdosPolicyCase(ctx context.Context, request *dayu.ModifyDDoSPolicyCaseRequest) (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, err := me.client.UseDayuClient().ModifyDDoSPolicyCase(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DescribeDdosPolicyAttachments(ctx context.Context, resourceId string, resourceType string, policyId string) (attachments []map[string]interface{}, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeDDoSPolicyRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - if resourceId != "" { - request.Id = &resourceId - } - request.Business = &resourceType - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeDDoSPolicy(request) - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - //this is when resource is not exist - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if len(response.Response.DDosPolicyList) == 0 { - return - } - - for _, policy := range response.Response.DDosPolicyList { - if policyId != "" && *policy.PolicyId != policyId { - continue - } - for _, resource := range policy.BoundResources { - attachments = append(attachments, map[string]interface{}{"resource_id": *resource, "policy_id": *policy.PolicyId, "resource_type": resourceType}) - } - } - if len(attachments) > 0 { - has = true - } - return -} - -func (me *DayuService) BindDdosPolicy(ctx context.Context, resourceId string, resourceType string, policyId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyResBindDDoSPolicyRequest() - request.PolicyId = &policyId - request.Business = &resourceType - request.Id = &resourceId - request.Method = helper.String("bind") - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyResBindDDoSPolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) UnbindDdosPolicy(ctx context.Context, resourceId string, resourceType string, policyId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyResBindDDoSPolicyRequest() - request.PolicyId = &policyId - request.Business = &resourceType - request.Id = &resourceId - request.Method = helper.String("unbind") - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyResBindDDoSPolicy(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - //when resource is not exist, return - if *response.Response.Success.Code == "InvalidParameterValue" && *response.Response.Success.Message == "resource not exist" { - return - } - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DescribeL7Rules(ctx context.Context, resourceType string, resourceId string, ruleDomain string, ruleId string, protocol string) (infos []*dayu.L7RuleEntry, healths []*dayu.L7RuleHealth, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribleL7RulesRequest() - - infos = make([]*dayu.L7RuleEntry, 0, 100) - healths = make([]*dayu.L7RuleHealth, 0, 100) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - var offset, limit uint64 = 0, 20 - - request.Business = &resourceType - request.Id = &resourceId - if protocol != "" { - request.ProtocolList = []*string{&protocol} - } - - if ruleDomain != "" { - request.Domain = &ruleDomain - } - request.Offset = &offset - request.Limit = &limit - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribleL7Rules(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if ruleId == "" { - infos = append(infos, response.Response.Rules...) - healths = append(healths, response.Response.Healths...) - } else { - for _, rule := range response.Response.Rules { - if *rule.RuleId != ruleId { - continue - } - infos = append(infos, rule) - //get right health, the SDK returns with no order - var theHealth dayu.L7RuleHealth - for _, health := range response.Response.Healths { - if *health.RuleId != *rule.RuleId { - continue - } - theHealth = *health - } - healths = append(healths, &theHealth) - } - } - if len(response.Response.Rules) < int(limit) { - if len(infos) > 0 { - has = true - } - return - } - offset += limit - } -} - -func (me *DayuService) DescribeL7Rule(ctx context.Context, resourceType string, resourceId string, ruleId string) (infos *dayu.L7RuleEntry, health *dayu.L7RuleHealth, has bool, errRet error) { - policies, healths, _, err := me.DescribeL7Rules(ctx, resourceType, resourceId, "", ruleId, "") - if err != nil { - errRet = err - return - } - - length := len(policies) - if length == 0 { - return - } - if length > 1 { - errRet = fmt.Errorf("Create l7 rule returns %d rules", length) - return - } - - infos = policies[0] - if len(healths) > 0 { - health = healths[0] - } - has = true - return -} - -func (me *DayuService) SetL7Health(ctx context.Context, resourceType string, resourceId string, healthCheck dayu.L7HealthConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateL7HealthConfigRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.HealthConfig = []*dayu.L7HealthConfig{&healthCheck} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateL7HealthConfig(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DescribeL7Health(ctx context.Context, resourceType string, resourceId string, ruleId string) (healthCheck *dayu.L7HealthConfig, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeL7HealthConfigRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Id = &resourceId - request.Business = &resourceType - request.RuleIdList = []*string{&ruleId} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeL7HealthConfig(request) - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - //this is when resource is not exist - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - healthChecks := response.Response.HealthConfig - length := len(healthChecks) - if length == 0 { - return - } - if length > 1 { - errRet = fmt.Errorf("Get L7 health check returns %d healthchecks", length) - } - - healthCheck = healthChecks[0] - has = true - return -} - -func (me *DayuService) CreateL7Rule(ctx context.Context, resourceType string, resourceId string, rule dayu.L7RuleEntry) (ruleId string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateL7RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Rules = []*dayu.L7RuleEntry{&rule} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateL7Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - //describe rules to get rule ID - rules, _, has, dErr := me.DescribeL7Rules(ctx, resourceType, resourceId, *rule.Domain, "", "") - if dErr != nil { - errRet = dErr - return - } - if !has { - errRet = fmt.Errorf("Create L7 rule failed") - return - } - if len(rules) != 1 { - errRet = fmt.Errorf("Create L7 rule returns %d rules", len(rules)) - } - ruleId = *rules[0].RuleId - return -} - -func (me *DayuService) ModifyL7Rule(ctx context.Context, resourceType string, resourceId string, rule dayu.L7RuleEntry) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyL7RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Rule = &rule - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyL7Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func flattenSourceList(list []*dayu.L4RuleSource) (re []map[string]interface{}) { - result := make([]map[string]interface{}, 0, len(list)) - for _, v := range list { - mapping := map[string]interface{}{ - "weight": v.Weight, - "source": v.Source, - } - result = append(result, mapping) - } - - return result -} - -func (me *DayuService) DeleteL7Rule(ctx context.Context, resourceType string, resourceId string, ruleId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteL7RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.RuleIdList = []*string{&ruleId} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteL7Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) SetRuleSwitch(ctx context.Context, resourceType string, resourceId string, ruleId string, switchFlag bool, protocol string) (errRet error) { - logId := tccommon.GetLogId(ctx) - if protocol == DAYU_L7_RULE_PROTOCOL_HTTP { - request := dayu.NewModifyCCHostProtectionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.RuleId = &ruleId - if switchFlag { - request.Method = helper.String("open") - } else { - request.Method = helper.String("close") - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyCCHostProtection(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - } else { - request := dayu.NewModifyCCThresholdRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.RuleId = &ruleId - request.Protocol = &protocol - - if !switchFlag { - request.Threshold = helper.IntUint64(DAYU_L7_HTTPS_SWITCH_OFF) - } else { - //this default value can be a request value that asks the whole threshold value if needed - request.Threshold = helper.IntUint64(DAYU_L7_HTTPS_SWITCH_ON_DEFAULT) - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyCCThreshold(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - } - return -} -func (me *DayuService) DescribeNewL4Rules(ctx context.Context, business string, extendParams map[string]interface{}) (infos []*dayu.NewL4RuleEntry, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeNewL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = common.StringPtr(business) - - var offset, limit uint64 = 0, 20 - request.Offset = common.Uint64Ptr(offset) - request.Limit = common.Uint64Ptr(limit) - - if ip, ok := extendParams["ip"]; ok { - request.Ip = common.StringPtr(ip.(string)) - } - if virtualPort, ok := extendParams["virtual_port"]; ok { - request.VirtualPort = common.Uint64Ptr(uint64(virtualPort.(int))) - } - - response, errRet := me.client.UseDayuClient().DescribeNewL4Rules(request) - if errRet != nil { - return - } - infos = response.Response.Rules - return - -} - -func (me *DayuService) DeleteNewL4Rules(ctx context.Context, business string, id string, ip string, ruleIds []string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteNewL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = common.StringPtr(business) - request.Rule = []*dayu.L4DelRule{ - { - Id: common.StringPtr(id), - Ip: common.StringPtr(ip), - RuleIdList: common.StringPtrs(ruleIds), - }, - } - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteNewL4Rules(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if *response.Response.Success.Code == "Success" { - return - } - } -} - -func (me *DayuService) ModifyNewL4Rule(ctx context.Context, business string, id string, singleRule interface{}) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyNewL4RuleRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - rule := singleRule.(map[string]interface{}) - tmpRule := dayu.L4RuleEntry{} - tmpRule.Protocol = common.StringPtr(rule["protocol"].(string)) - tmpRule.SourcePort = common.Uint64Ptr((uint64(rule["source_port"].(int)))) - tmpRule.VirtualPort = common.Uint64Ptr((uint64(rule["virtual_port"].(int)))) - tmpRule.KeepTime = common.Uint64Ptr((uint64(rule["keeptime"].(int)))) - tmpRule.RuleId = common.StringPtr((rule["rule_id"].(string))) - tmpRule.LbType = common.Uint64Ptr((uint64(rule["lb_type"].(int)))) - if rule["keep_enable"].(bool) { - tmpRule.KeepEnable = common.Uint64Ptr((uint64(1))) - } else { - tmpRule.KeepEnable = common.Uint64Ptr((uint64(0))) - } - tmpRule.SourceType = common.Uint64Ptr((uint64(rule["source_type"].(int)))) - if rule["remove_switch"].(bool) { - tmpRule.RemoveSwitch = common.Uint64Ptr((uint64(1))) - } else { - tmpRule.RemoveSwitch = common.Uint64Ptr((uint64(0))) - } - sourceList := rule["source_list"].([]interface{}) - tmpRule.SourceList = make([]*dayu.L4RuleSource, 0) - for _, singleSource := range sourceList { - source := singleSource.(map[string]interface{}) - tSource := source["source"].(string) - tWeight := uint64(source["weight"].(int)) - tmpRule.SourceList = append(tmpRule.SourceList, &dayu.L4RuleSource{Source: &tSource, Weight: &tWeight}) - } - - request.Business = common.StringPtr(business) - request.Id = common.StringPtr(id) - request.Rule = &tmpRule - - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyNewL4Rule(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if *response.Response.Success.Code == "Success" { - return - } - } -} - -func (me *DayuService) CreateNewL4Rules(ctx context.Context, business string, id string, vip string, ruleList []interface{}) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateNewL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - rules := make([]*dayu.L4RuleEntry, 0) - for _, singleRule := range ruleList { - rule := singleRule.(map[string]interface{}) - tmpRule := dayu.L4RuleEntry{} - tmpRule.Protocol = common.StringPtr(rule["protocol"].(string)) - tmpRule.SourcePort = common.Uint64Ptr((uint64(rule["source_port"].(int)))) - tmpRule.VirtualPort = common.Uint64Ptr((uint64(rule["virtual_port"].(int)))) - tmpRule.KeepTime = common.Uint64Ptr((uint64(rule["keeptime"].(int)))) - tmpRule.RuleName = common.StringPtr((rule["rule_name"].(string))) - tmpRule.LbType = common.Uint64Ptr((uint64(rule["lb_type"].(int)))) - if rule["keep_enable"].(bool) { - tmpRule.KeepEnable = common.Uint64Ptr((uint64(1))) - } else { - tmpRule.KeepEnable = common.Uint64Ptr((uint64(0))) - } - tmpRule.SourceType = common.Uint64Ptr((uint64(rule["source_type"].(int)))) - if rule["remove_switch"].(bool) { - tmpRule.RemoveSwitch = common.Uint64Ptr((uint64(1))) - } else { - tmpRule.RemoveSwitch = common.Uint64Ptr((uint64(0))) - } - sourceList := rule["source_list"].([]interface{}) - tmpRule.SourceList = make([]*dayu.L4RuleSource, 0) - for _, singleSource := range sourceList { - source := singleSource.(map[string]interface{}) - tSource := source["source"].(string) - tWeight := uint64(source["weight"].(int)) - tmpRule.SourceList = append(tmpRule.SourceList, &dayu.L4RuleSource{Source: &tSource, Weight: &tWeight}) - } - rules = append(rules, &tmpRule) - } - request.Business = common.StringPtr(business) - request.IdList = common.StringPtrs([]string{id}) - request.VipList = common.StringPtrs([]string{vip}) - request.Rules = rules - - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateNewL4Rules(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if *response.Response.Success.Code == "Success" { - return - } - } -} - -func (me *DayuService) DescribeL4Rules(ctx context.Context, resourceType string, resourceId string, ruleName string, ruleId string) (infos []*dayu.L4RuleEntry, healths []*dayu.L4RuleHealth, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribleL4RulesRequest() - - infos = make([]*dayu.L4RuleEntry, 0, 100) - healths = make([]*dayu.L4RuleHealth, 0, 100) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - var offset, limit uint64 = 0, 20 - - request.Business = &resourceType - request.Id = &resourceId - - request.Offset = &offset - request.Limit = &limit - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribleL4Rules(request) - - if err != nil { - if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == "InvalidParameterValue" { - errRet = nil - return - } - } - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - if ruleId == "" && ruleName == "" { - infos = append(infos, response.Response.Rules...) - healths = append(healths, response.Response.Healths...) - } else { - for _, rule := range response.Response.Rules { - if ruleId != "" && *rule.RuleId != ruleId { - continue - } - if ruleName != "" && *rule.RuleName != ruleName { - continue - } - infos = append(infos, rule) - - //get right health, the SDK returns with no order - var theHealth dayu.L4RuleHealth - for _, health := range response.Response.Healths { - if *health.RuleId != *rule.RuleId { - continue - } - theHealth = *health - } - healths = append(healths, &theHealth) - } - } - if len(response.Response.Rules) < int(limit) { - if len(infos) > 0 { - has = true - } - return - } - offset += limit - } -} - -func (me *DayuService) DescribeL4Rule(ctx context.Context, resourceType string, resourceId string, ruleId string) (infos *dayu.L4RuleEntry, health *dayu.L4RuleHealth, has bool, errRet error) { - policies, healths, _, err := me.DescribeL4Rules(ctx, resourceType, resourceId, "", ruleId) - if err != nil { - errRet = err - return - } - - length := len(policies) - if length == 0 { - return - } - if length > 1 { - errRet = fmt.Errorf("Create L4 rule returns %d rules", length) - return - } - - infos = policies[0] - if len(healths) > 0 { - health = healths[0] - } - has = true - return -} - -func (me *DayuService) SetL4Health(ctx context.Context, resourceType string, resourceId string, healthCheck dayu.L4HealthConfig) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateL4HealthConfigRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.HealthConfig = []*dayu.L4HealthConfig{&healthCheck} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateL4HealthConfig(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DescribeL4Health(ctx context.Context, resourceType string, resourceId string, ruleId string) (healthCheck *dayu.L4HealthConfig, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribeL4HealthConfigRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Id = &resourceId - request.Business = &resourceType - request.RuleIdList = []*string{&ruleId} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribeL4HealthConfig(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - healthChecks := response.Response.HealthConfig - length := len(healthChecks) - if length == 0 { - return - } - if length > 1 { - errRet = fmt.Errorf("Get L4 health check returns %d healthchecks", length) - return - } - healthCheck = healthChecks[0] - has = true - return -} - -func (me *DayuService) CreateL4Rule(ctx context.Context, resourceType string, resourceId string, rule dayu.L4RuleEntry) (ruleId string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Rules = []*dayu.L4RuleEntry{&rule} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().CreateL4Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - //describe rules to get rule ID - rules, _, has, dErr := me.DescribeL4Rules(ctx, resourceType, resourceId, *rule.RuleName, "") - if dErr != nil { - errRet = dErr - return - } - if !has { - errRet = fmt.Errorf("Create L4 rule failed") - return - } - if len(rules) != 1 { - errRet = fmt.Errorf("Create L4 rule returns %d rules", len(rules)) - return - } - ruleId = *rules[0].RuleId - return -} - -func (me *DayuService) ModifyL4Rule(ctx context.Context, resourceType string, resourceId string, rule dayu.L4RuleEntry) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Rule = &rule - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyL4Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DeleteL4Rule(ctx context.Context, resourceType string, resourceId string, ruleId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteL4RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.RuleIdList = []*string{&ruleId} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DeleteL4Rules(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) SetSession(ctx context.Context, resourceType string, resourceId string, ruleId string, switchFlag bool, sessionTime int) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyL4KeepTimeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.RuleId = &ruleId - request.KeepEnable = helper.BoolToInt64Pointer(switchFlag) - request.KeepTime = helper.IntUint64(sessionTime) - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().ModifyL4KeepTime(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.Success == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response,%s", request.GetAction()) - return - } - - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return - } - - return -} - -func (me *DayuService) DescribeL7RulesV2(ctx context.Context, business string, extendParams map[string]interface{}) (rules []*dayu.NewL7RuleEntry, healths []*dayu.L7RuleHealth, errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDescribleNewL7RulesRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.Business = &business - if v, ok := extendParams["protocol"]; ok { - protocol := v.(string) - if protocol != "" { - request.ProtocolList = []*string{&protocol} - } - } - if v, ok := extendParams["domain"]; ok { - domain := v.(string) - if domain != "" { - request.Domain = &domain - } - } - if v, ok := extendParams["ip"]; ok { - ip := v.(string) - if ip != "" { - request.Ip = &ip - } - } - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - - for { - request.Offset = &offset - request.Limit = &limit - ratelimit.Check(request.GetAction()) - response, err := me.client.UseDayuClient().DescribleNewL7Rules(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.Rules) < 1 { - break - } - - rules = append(rules, response.Response.Rules...) - healths = append(healths, response.Response.Healths...) - if len(response.Response.Rules) < int(limit) { - break - } - - offset += limit - } - return -} - -func (me *DayuService) CreateL7RuleV2(ctx context.Context, business string, resourceId string, resourceIp string, ruleList []interface{}) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewCreateNewL7RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - rule := ruleList[0].(map[string]interface{}) - keeptime := uint64(rule["keeptime"].(int)) - domain := rule["domain"].(string) - protocol := rule["protocol"].(string) - sourceType := uint64(rule["source_type"].(int)) - lbType := uint64(rule["lb_type"].(int)) - keepEnable := uint64(rule["keep_enable"].(int)) - certType := uint64(rule["cert_type"].(int)) - sslId := rule["ssl_id"].(string) - ccEnable := uint64(rule["cc_enable"].(int)) - httpsToHttpEnable := uint64(rule["https_to_http_enable"].(int)) - - sourceList := rule["source_list"].([]interface{}) - sources := make([]*dayu.L4RuleSource, 0) - for _, source := range sourceList { - sourceItem := source.(map[string]interface{}) - weight := uint64(sourceItem["weight"].(int)) - subSource := sourceItem["source"].(string) - tmpSource := dayu.L4RuleSource{ - Source: &subSource, - Weight: &weight, - } - sources = append(sources, &tmpSource) - } - - ruleEntry := dayu.L7RuleEntry{ - KeepTime: &keeptime, - Domain: &domain, - Protocol: &protocol, - SourceType: &sourceType, - LbType: &lbType, - KeepEnable: &keepEnable, - SourceList: sources, - CertType: &certType, - SSLId: &sslId, - CCEnable: &ccEnable, - HttpsToHttpEnable: &httpsToHttpEnable, - } - - request.IdList = []*string{&resourceId} - request.VipList = []*string{&resourceIp} - request.Business = &business - request.Rules = []*dayu.L7RuleEntry{&ruleEntry} - errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseDayuClient().CreateNewL7Rules(request) - - if e, ok := errRet.(*sdkError.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if errRet != nil { - return resource.RetryableError(errRet) - } - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return resource.RetryableError(errRet) - } - return nil - }) - return -} - -func (me *DayuService) ModifyL7RuleV2(ctx context.Context, resourceType string, resourceId string, rule *dayu.NewL7RuleEntry) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewModifyNewDomainRulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Id = &resourceId - request.Business = &resourceType - request.Rule = rule - - errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseDayuClient().ModifyNewDomainRules(request) - - if e, ok := errRet.(*sdkError.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if errRet != nil { - return resource.RetryableError(errRet) - } - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return resource.RetryableError(errRet) - } - return nil - }) - - return -} - -func (me *DayuService) DeleteL7RulesV2(ctx context.Context, resourceType string, resourceId string, resourceIp string, ruleId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := dayu.NewDeleteNewL7RulesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.Business = &resourceType - request.Rule = []*dayu.L4DelRule{ - { - Id: &resourceId, - Ip: &resourceIp, - RuleIdList: []*string{&ruleId}, - }, - } - errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseDayuClient().DeleteNewL7Rules(request) - - if e, ok := errRet.(*sdkError.TencentCloudSDKError); ok { - if e.GetCode() == "InternalError.ClusterNotFound" { - return nil - } - } - if errRet != nil { - return resource.RetryableError(errRet) - } - if *response.Response.Success.Code != "Success" { - errRet = fmt.Errorf("TencentCloud SDK return %s response,%s", *response.Response.Success.Code, *response.Response.Success.Message) - return resource.RetryableError(errRet) - } - return nil - }) - return -} diff --git a/tencentcloud/resource_tc_dlc_attach_user_policy_operation.go b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.go similarity index 90% rename from tencentcloud/resource_tc_dlc_attach_user_policy_operation.go rename to tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.go index 337ff4c78e..5858b948c8 100644 --- a/tencentcloud/resource_tc_dlc_attach_user_policy_operation.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.go @@ -1,39 +1,18 @@ -/* -Provides a resource to create a dlc attach_user_policy_operation - -Example Usage - -```hcl -resource "tencentcloud_dlc_attach_user_policy_operation" "attach_user_policy_operation" { - user_id = "100032676511" - policy_set { - database = "test_iac_keep" - catalog = "DataLakeCatalog" - table = "" - operation = "ASSAYER" - policy_type = "DATABASE" - function = "" - view = "" - column = "" - source = "USER" - mode = "COMMON" - } -} -``` - -*/ -package tencentcloud +package dlc 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" dlc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc/v20210125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudDlcAttachUserPolicyOperation() *schema.Resource { +func ResourceTencentCloudDlcAttachUserPolicyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudDlcAttachUserPolicyOperationCreate, Read: resourceTencentCloudDlcAttachUserPolicyOperationRead, @@ -149,10 +128,10 @@ func resourceTencentCloudDlcAttachUserPolicyOperation() *schema.Resource { } func resourceTencentCloudDlcAttachUserPolicyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = dlc.NewAttachUserPolicyRequest() @@ -222,10 +201,10 @@ func resourceTencentCloudDlcAttachUserPolicyOperationCreate(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseDlcClient().AttachUserPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDlcClient().AttachUserPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -242,15 +221,15 @@ func resourceTencentCloudDlcAttachUserPolicyOperationCreate(d *schema.ResourceDa } func resourceTencentCloudDlcAttachUserPolicyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudDlcAttachUserPolicyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_user_policy_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.md b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.md new file mode 100644 index 0000000000..44431a96d9 --- /dev/null +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation.md @@ -0,0 +1,21 @@ +Provides a resource to create a dlc attach_user_policy_operation + +Example Usage + +```hcl +resource "tencentcloud_dlc_attach_user_policy_operation" "attach_user_policy_operation" { + user_id = "100032676511" + policy_set { + database = "test_iac_keep" + catalog = "DataLakeCatalog" + table = "" + operation = "ASSAYER" + policy_type = "DATABASE" + function = "" + view = "" + column = "" + source = "USER" + mode = "COMMON" + } +} +``` diff --git a/tencentcloud/resource_tc_dlc_attach_user_policy_operation_test.go b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation_test.go similarity index 83% rename from tencentcloud/resource_tc_dlc_attach_user_policy_operation_test.go rename to tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation_test.go index 81dba47d6d..3683e08604 100644 --- a/tencentcloud/resource_tc_dlc_attach_user_policy_operation_test.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_user_policy_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package dlc_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 TestAccTencentCloudDlcAttachUserPolicyOperationResource_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: testAccDlcAttachUserPolicyOperation, diff --git a/tencentcloud/resource_tc_dlc_attach_work_group_policy_operation.go b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.go similarity index 89% rename from tencentcloud/resource_tc_dlc_attach_work_group_policy_operation.go rename to tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.go index 73b31eedac..56b589a24b 100644 --- a/tencentcloud/resource_tc_dlc_attach_work_group_policy_operation.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.go @@ -1,38 +1,18 @@ -/* -Provides a resource to create a dlc attach_work_group_policy_operation - -Example Usage - -```hcl -resource "tencentcloud_dlc_attach_work_group_policy_operation" "attach_work_group_policy_operation" { - work_group_id = 23184 - policy_set { - database = "test_iac_keep" - catalog = "DataLakeCatalog" - table = "" - operation = "ASSAYER" - policy_type = "DATABASE" - function = "" - view = "" - column = "" - source = "USER" - mode = "COMMON" - } -} - -*/ -package tencentcloud +package dlc 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" dlc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc/v20210125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudDlcAttachWorkGroupPolicyOperation() *schema.Resource { +func ResourceTencentCloudDlcAttachWorkGroupPolicyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudDlcAttachWorkGroupPolicyOperationCreate, Read: resourceTencentCloudDlcAttachWorkGroupPolicyOperationRead, @@ -148,10 +128,10 @@ func resourceTencentCloudDlcAttachWorkGroupPolicyOperation() *schema.Resource { } func resourceTencentCloudDlcAttachWorkGroupPolicyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = dlc.NewAttachWorkGroupPolicyRequest() @@ -221,10 +201,10 @@ func resourceTencentCloudDlcAttachWorkGroupPolicyOperationCreate(d *schema.Resou } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseDlcClient().AttachWorkGroupPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDlcClient().AttachWorkGroupPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -241,15 +221,15 @@ func resourceTencentCloudDlcAttachWorkGroupPolicyOperationCreate(d *schema.Resou } func resourceTencentCloudDlcAttachWorkGroupPolicyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudDlcAttachWorkGroupPolicyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_attach_work_group_policy_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.md b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.md new file mode 100644 index 0000000000..4e3272a5df --- /dev/null +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation.md @@ -0,0 +1,20 @@ +Provides a resource to create a dlc attach_work_group_policy_operation + +Example Usage + +```hcl +resource "tencentcloud_dlc_attach_work_group_policy_operation" "attach_work_group_policy_operation" { + work_group_id = 23184 + policy_set { + database = "test_iac_keep" + catalog = "DataLakeCatalog" + table = "" + operation = "ASSAYER" + policy_type = "DATABASE" + function = "" + view = "" + column = "" + source = "USER" + mode = "COMMON" + } +} diff --git a/tencentcloud/resource_tc_dlc_attach_work_group_policy_operation_test.go b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation_test.go similarity index 84% rename from tencentcloud/resource_tc_dlc_attach_work_group_policy_operation_test.go rename to tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation_test.go index 17a4c39ecf..7a09416536 100644 --- a/tencentcloud/resource_tc_dlc_attach_work_group_policy_operation_test.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_attach_work_group_policy_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package dlc_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 TestAccTencentCloudDlcAttachWorkGroupPolicyOperationResource_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: testAccDlcAttachWorkGroupPolicyOperation, diff --git a/tencentcloud/resource_tc_dlc_detach_user_policy_operation.go b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.go similarity index 89% rename from tencentcloud/resource_tc_dlc_detach_user_policy_operation.go rename to tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.go index 976e233724..0d220ab7c6 100644 --- a/tencentcloud/resource_tc_dlc_detach_user_policy_operation.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.go @@ -1,39 +1,18 @@ -/* -Provides a resource to create a dlc detach_user_policy_operation - -Example Usage - -```hcl -resource "tencentcloud_dlc_detach_user_policy_operation" "detach_user_policy_operation" { - user_id = 100032676511 - policy_set { - database = "test_iac_keep" - catalog = "DataLakeCatalog" - table = "" - operation = "ASSAYER" - policy_type = "DATABASE" - re_auth = false - source = "USER" - mode = "COMMON" - operator = "100032669045" - id = 102533 - } -} -``` - -*/ -package tencentcloud +package dlc 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" dlc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc/v20210125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudDlcDetachUserPolicyOperation() *schema.Resource { +func ResourceTencentCloudDlcDetachUserPolicyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudDlcDetachUserPolicyOperationCreate, Read: resourceTencentCloudDlcDetachUserPolicyOperationRead, @@ -149,10 +128,10 @@ func resourceTencentCloudDlcDetachUserPolicyOperation() *schema.Resource { } func resourceTencentCloudDlcDetachUserPolicyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = dlc.NewDetachUserPolicyRequest() @@ -222,10 +201,10 @@ func resourceTencentCloudDlcDetachUserPolicyOperationCreate(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseDlcClient().DetachUserPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDlcClient().DetachUserPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -242,15 +221,15 @@ func resourceTencentCloudDlcDetachUserPolicyOperationCreate(d *schema.ResourceDa } func resourceTencentCloudDlcDetachUserPolicyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudDlcDetachUserPolicyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_user_policy_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.md b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.md new file mode 100644 index 0000000000..d475f89a76 --- /dev/null +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation.md @@ -0,0 +1,21 @@ +Provides a resource to create a dlc detach_user_policy_operation + +Example Usage + +```hcl +resource "tencentcloud_dlc_detach_user_policy_operation" "detach_user_policy_operation" { + user_id = 100032676511 + policy_set { + database = "test_iac_keep" + catalog = "DataLakeCatalog" + table = "" + operation = "ASSAYER" + policy_type = "DATABASE" + re_auth = false + source = "USER" + mode = "COMMON" + operator = "100032669045" + id = 102533 + } +} +``` diff --git a/tencentcloud/resource_tc_dlc_detach_user_policy_operation_test.go b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation_test.go similarity index 93% rename from tencentcloud/resource_tc_dlc_detach_user_policy_operation_test.go rename to tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation_test.go index 9913a78c2a..95510c0b08 100644 --- a/tencentcloud/resource_tc_dlc_detach_user_policy_operation_test.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_user_policy_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package dlc_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 TestAccTencentCloudDlcDetachUserPolicyOperationResource_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: testAccDlcDetachUserPolicyOperation, diff --git a/tencentcloud/resource_tc_dlc_detach_work_group_policy_operation.go b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.go similarity index 89% rename from tencentcloud/resource_tc_dlc_detach_work_group_policy_operation.go rename to tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.go index 27fd9de3e3..e64a89e8be 100644 --- a/tencentcloud/resource_tc_dlc_detach_work_group_policy_operation.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.go @@ -1,39 +1,18 @@ -/* -Provides a resource to create a dlc detach_work_group_policy_operation - -Example Usage - -```hcl -resource "tencentcloud_dlc_detach_work_group_policy_operation" "detach_work_group_policy_operation" { - work_group_id = 23184 - policy_set { - database = "test_iac_keep" - catalog = "DataLakeCatalog" - table = "" - operation = "ASSAYER" - policy_type = "DATABASE" - re_auth = false - source = "WORKGROUP" - mode = "COMMON" - operator = "100032669045" - id = 102535 - } -} -``` - -*/ -package tencentcloud +package dlc 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" dlc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dlc/v20210125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudDlcDetachWorkGroupPolicyOperation() *schema.Resource { +func ResourceTencentCloudDlcDetachWorkGroupPolicyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudDlcDetachWorkGroupPolicyOperationCreate, Read: resourceTencentCloudDlcDetachWorkGroupPolicyOperationRead, @@ -149,10 +128,10 @@ func resourceTencentCloudDlcDetachWorkGroupPolicyOperation() *schema.Resource { } func resourceTencentCloudDlcDetachWorkGroupPolicyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = dlc.NewDetachWorkGroupPolicyRequest() @@ -222,10 +201,10 @@ func resourceTencentCloudDlcDetachWorkGroupPolicyOperationCreate(d *schema.Resou } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseDlcClient().DetachWorkGroupPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseDlcClient().DetachWorkGroupPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -242,15 +221,15 @@ func resourceTencentCloudDlcDetachWorkGroupPolicyOperationCreate(d *schema.Resou } func resourceTencentCloudDlcDetachWorkGroupPolicyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudDlcDetachWorkGroupPolicyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dlc_detach_work_group_policy_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.md b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.md new file mode 100644 index 0000000000..45da3204f0 --- /dev/null +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation.md @@ -0,0 +1,21 @@ +Provides a resource to create a dlc detach_work_group_policy_operation + +Example Usage + +```hcl +resource "tencentcloud_dlc_detach_work_group_policy_operation" "detach_work_group_policy_operation" { + work_group_id = 23184 + policy_set { + database = "test_iac_keep" + catalog = "DataLakeCatalog" + table = "" + operation = "ASSAYER" + policy_type = "DATABASE" + re_auth = false + source = "WORKGROUP" + mode = "COMMON" + operator = "100032669045" + id = 102535 + } +} +``` diff --git a/tencentcloud/resource_tc_dlc_detach_work_group_policy_operation_test.go b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation_test.go similarity index 94% rename from tencentcloud/resource_tc_dlc_detach_work_group_policy_operation_test.go rename to tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation_test.go index d3dc43f831..2215106cdb 100644 --- a/tencentcloud/resource_tc_dlc_detach_work_group_policy_operation_test.go +++ b/tencentcloud/services/dlc/resource_tc_dlc_detach_work_group_policy_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package dlc_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 TestAccTencentCloudDlcDetachWorkGroupPolicyOperationResource_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: testAccDlcDetachWorkGroupPolicyOperation, diff --git a/tencentcloud/services/domain/data_source_tc_domains.go b/tencentcloud/services/domain/data_source_tc_domains.go index c9a683dec9..2e0ca40b8c 100644 --- a/tencentcloud/services/domain/data_source_tc_domains.go +++ b/tencentcloud/services/domain/data_source_tc_domains.go @@ -7,6 +7,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" domain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/domain/service_tencentcloud_domain.go b/tencentcloud/services/domain/service_tencentcloud_domain.go index e416cd7826..7b58a97cc0 100644 --- a/tencentcloud/services/domain/service_tencentcloud_domain.go +++ b/tencentcloud/services/domain/service_tencentcloud_domain.go @@ -7,10 +7,15 @@ import ( tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" domain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain/v20180808" + "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 } diff --git a/tencentcloud/services/eb/extension_tags.go b/tencentcloud/services/eb/extension_tags.go deleted file mode 100644 index e549b4d92d..0000000000 --- a/tencentcloud/services/eb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package eb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/eb/resource_tc_eb_event_bus.go b/tencentcloud/services/eb/resource_tc_eb_event_bus.go index 367d00ad58..f86469a37b 100644 --- a/tencentcloud/services/eb/resource_tc_eb_event_bus.go +++ b/tencentcloud/services/eb/resource_tc_eb_event_bus.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -104,7 +105,7 @@ func resourceTencentCloudEbEventBusCreate(d *schema.ResourceData, meta interface ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::eb:%s:uin/:eventbusid/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -155,7 +156,7 @@ func resourceTencentCloudEbEventBusRead(d *schema.ResourceData, meta interface{} } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "eb", "eventbusid", tcClient.Region, d.Id()) if err != nil { return err @@ -229,9 +230,9 @@ func resourceTencentCloudEbEventBusUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("eb", "eventbusid", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/eb/resource_tc_eb_event_rule.go b/tencentcloud/services/eb/resource_tc_eb_event_rule.go index 68b55c4bfa..475488a9c2 100644 --- a/tencentcloud/services/eb/resource_tc_eb_event_rule.go +++ b/tencentcloud/services/eb/resource_tc_eb_event_rule.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -123,7 +124,7 @@ func resourceTencentCloudEbEventRuleCreate(d *schema.ResourceData, meta interfac ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::eb:%s:uin/:ruleid/%s/%s", region, eventBusId, ruleId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -185,7 +186,7 @@ func resourceTencentCloudEbEventRuleRead(d *schema.ResourceData, meta interface{ } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "eb", "ruleid", tcClient.Region, eventBusId+"/"+ruleId) if err != nil { return err @@ -256,9 +257,9 @@ func resourceTencentCloudEbEventRuleUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("eb", "ruleid", tcClient.Region, eventBusId+"/"+ruleId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/eb/service_tencentcloud_tag.go b/tencentcloud/services/eb/service_tencentcloud_tag.go deleted file mode 100644 index 380ef7460e..0000000000 --- a/tencentcloud/services/eb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package eb - -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/emr/extension_mysql.go b/tencentcloud/services/emr/extension_mysql.go deleted file mode 100644 index 7caf8c92ce..0000000000 --- a/tencentcloud/services/emr/extension_mysql.go +++ /dev/null @@ -1,129 +0,0 @@ -package emr - -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/emr/extension_tags.go b/tencentcloud/services/emr/extension_tags.go deleted file mode 100644 index a4e1010927..0000000000 --- a/tencentcloud/services/emr/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package emr - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/emr/resource_tc_emr_cluster.go b/tencentcloud/services/emr/resource_tc_emr_cluster.go index 39c20f5c21..c9fc6adf72 100644 --- a/tencentcloud/services/emr/resource_tc_emr_cluster.go +++ b/tencentcloud/services/emr/resource_tc_emr_cluster.go @@ -6,6 +6,8 @@ import ( "fmt" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -350,7 +352,7 @@ func resourceTencentCloudEmrClusterDelete(d *schema.ResourceData, meta interface if metaDB != nil && *metaDB != "" { // remove metadb - mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + mysqlService := svccdb.NewMysqlService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := mysqlService.OfflineIsolatedInstances(ctx, *metaDB) @@ -392,7 +394,7 @@ func resourceTencentCloudEmrClusterRead(d *schema.ResourceData, meta interface{} return err } - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region tags, err := tagService.DescribeResourceTags(ctx, "emr", "emr-instance", region, d.Id()) if err != nil { diff --git a/tencentcloud/services/emr/resource_tc_emr_cluster_test.go b/tencentcloud/services/emr/resource_tc_emr_cluster_test.go index f579efd253..11c0e943d5 100644 --- a/tencentcloud/services/emr/resource_tc_emr_cluster_test.go +++ b/tencentcloud/services/emr/resource_tc_emr_cluster_test.go @@ -16,6 +16,7 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" emr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr/v20190103" + svccdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" svcemr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/emr" ) @@ -89,7 +90,7 @@ func init() { if metaDB != nil && *metaDB != "" { // remove metadb - mysqlService := svcemr.NewMysqlService(client.GetAPIV3Conn()) + mysqlService := svccdb.NewMysqlService(client.GetAPIV3Conn()) err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := mysqlService.OfflineIsolatedInstances(ctx, *metaDB) diff --git a/tencentcloud/services/emr/service_tencentcloud_emr.go b/tencentcloud/services/emr/service_tencentcloud_emr.go index 03a0a6299f..5c67ba3eca 100644 --- a/tencentcloud/services/emr/service_tencentcloud_emr.go +++ b/tencentcloud/services/emr/service_tencentcloud_emr.go @@ -7,6 +7,7 @@ import ( "strconv" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -290,8 +291,8 @@ func (me *EMRService) DescribeClusterNodes(ctx context.Context, instanceId, node func (me *EMRService) ModifyResourcesTags(ctx context.Context, region string, instanceId string, oldTags, newTags map[string]interface{}) error { resourceName := tccommon.BuildTagResourceName("emr", "emr-instance", region, instanceId) - rTags, dTags := diffTags(oldTags, newTags) - tagService := &TagService{client: me.client} + rTags, dTags := svctag.DiffTags(oldTags, newTags) + tagService := svctag.NewTagService(me.client) if err := tagService.ModifyTags(ctx, resourceName, rTags, dTags); err != nil { return err } diff --git a/tencentcloud/services/emr/service_tencentcloud_mysql.go b/tencentcloud/services/emr/service_tencentcloud_mysql.go deleted file mode 100644 index 9adcb5e58c..0000000000 --- a/tencentcloud/services/emr/service_tencentcloud_mysql.go +++ /dev/null @@ -1,3322 +0,0 @@ -package emr - -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/emr/service_tencentcloud_tag.go b/tencentcloud/services/emr/service_tencentcloud_tag.go deleted file mode 100644 index 0252b1d503..0000000000 --- a/tencentcloud/services/emr/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package emr - -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/es/extension_tags.go b/tencentcloud/services/es/extension_tags.go deleted file mode 100644 index e4b994163f..0000000000 --- a/tencentcloud/services/es/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package es - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/es/resource_tc_elasticsearch_instance.go b/tencentcloud/services/es/resource_tc_elasticsearch_instance.go index 518126d7cb..5f176241dc 100644 --- a/tencentcloud/services/es/resource_tc_elasticsearch_instance.go +++ b/tencentcloud/services/es/resource_tc_elasticsearch_instance.go @@ -3,6 +3,7 @@ package es import ( tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "context" "errors" @@ -439,7 +440,7 @@ func resourceTencentCloudElasticsearchInstanceCreate(d *schema.ResourceData, met // tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region resourceName := fmt.Sprintf("qcs::es:%s:uin/:instance/%s", region, instanceId) err := tagService.ModifyTags(ctx, resourceName, tags, nil) @@ -722,10 +723,8 @@ func resourceTencentCloudElasticsearchInstanceUpdate(d *schema.ResourceData, met if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), - } + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region //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. diff --git a/tencentcloud/services/es/resource_tc_elasticsearch_logstash.go b/tencentcloud/services/es/resource_tc_elasticsearch_logstash.go index af9a476286..db584a4b60 100644 --- a/tencentcloud/services/es/resource_tc_elasticsearch_logstash.go +++ b/tencentcloud/services/es/resource_tc_elasticsearch_logstash.go @@ -7,6 +7,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -302,7 +303,7 @@ func resourceTencentCloudElasticsearchLogstashCreate(d *schema.ResourceData, met d.SetId(instanceId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::es:%s:uin/:logstash/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -389,7 +390,7 @@ func resourceTencentCloudElasticsearchLogstashRead(d *schema.ResourceData, meta } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "es", "logstash", tcClient.Region, d.Id()) if err != nil { return err @@ -430,9 +431,9 @@ func resourceTencentCloudElasticsearchLogstashUpdate(d *schema.ResourceData, met if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("es", "logstash", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/es/service_tencentcloud_tag.go b/tencentcloud/services/es/service_tencentcloud_tag.go deleted file mode 100644 index f22a5d4e64..0000000000 --- a/tencentcloud/services/es/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package es - -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/fl/extension_security_group.go b/tencentcloud/services/fl/extension_security_group.go deleted file mode 100644 index 7f19ec0456..0000000000 --- a/tencentcloud/services/fl/extension_security_group.go +++ /dev/null @@ -1,3 +0,0 @@ -package fl - -const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/fl/extension_tags.go b/tencentcloud/services/fl/extension_tags.go deleted file mode 100644 index 8c7f667f24..0000000000 --- a/tencentcloud/services/fl/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package fl - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/fl/extension_vpc.go b/tencentcloud/services/fl/extension_vpc.go deleted file mode 100644 index 49d5d19c78..0000000000 --- a/tencentcloud/services/fl/extension_vpc.go +++ /dev/null @@ -1,339 +0,0 @@ -package fl - -/* -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 ( - ROUTE_TYPE_STATIC = "STATIC" - ROUTE_TYPE_STATIC_ROUTE = "StaticRoute" - ROUTE_TYPE_POLICY = "Policy" -) - -var VPN_CONNECTION_ROUTE_TYPE = []string{ - ROUTE_TYPE_STATIC, - ROUTE_TYPE_STATIC_ROUTE, - ROUTE_TYPE_POLICY, -} - -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/services/fl/resource_tc_vpc_flow_log.go b/tencentcloud/services/fl/resource_tc_vpc_flow_log.go index fee2148bde..9d75c212b2 100644 --- a/tencentcloud/services/fl/resource_tc_vpc_flow_log.go +++ b/tencentcloud/services/fl/resource_tc_vpc_flow_log.go @@ -8,6 +8,8 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -187,7 +189,7 @@ func resourceTencentCloudVpcFlowLogCreate(d *schema.ResourceData, meta interface if tags := helper.GetTags(d, "tags"); len(tags) > 0 { client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client} + tagService := svctag.NewTagService(client) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceName := tccommon.BuildTagResourceName("vpc", "fl", client.Region, flowLogId) err := tagService.ModifyTags(ctx, resourceName, tags, nil) @@ -207,7 +209,7 @@ func resourceTencentCloudVpcFlowLogRead(d *schema.ResourceData, meta interface{} ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) flowLogId, vpcId, err := resourceTencentCloudGetFlowLogId(d) @@ -276,7 +278,7 @@ func resourceTencentCloudVpcFlowLogRead(d *schema.ResourceData, meta interface{} } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: client} + tagService := svctag.NewTagService(client) tags, err := tagService.DescribeResourceTags(ctx, "vpc", "fl", client.Region, flowLogId) if err != nil { return err @@ -354,9 +356,9 @@ func resourceTencentCloudVpcFlowLogUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client} + tagService := svctag.NewTagService(client) oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("vpc", "fl", client.Region, flowLogId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) @@ -375,7 +377,7 @@ func resourceTencentCloudVpcFlowLogDelete(d *schema.ResourceData, meta interface logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) flowLogId, vpcId, err := resourceTencentCloudGetFlowLogId(d) if err != nil { diff --git a/tencentcloud/services/fl/resource_tc_vpc_flow_log_config.go b/tencentcloud/services/fl/resource_tc_vpc_flow_log_config.go index dd7b3007b6..946bcfab8a 100644 --- a/tencentcloud/services/fl/resource_tc_vpc_flow_log_config.go +++ b/tencentcloud/services/fl/resource_tc_vpc_flow_log_config.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -55,7 +56,7 @@ func resourceTencentCloudVpcFlowLogConfigRead(d *schema.ResourceData, meta inter ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) flowLogId := d.Id() diff --git a/tencentcloud/services/fl/resource_tc_vpc_flow_log_test.go b/tencentcloud/services/fl/resource_tc_vpc_flow_log_test.go index 197b657359..6e10824ca8 100644 --- a/tencentcloud/services/fl/resource_tc_vpc_flow_log_test.go +++ b/tencentcloud/services/fl/resource_tc_vpc_flow_log_test.go @@ -7,12 +7,11 @@ import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - svcfl "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/fl" ) func init() { @@ -25,7 +24,7 @@ func init() { cli, _ := tcacctest.SharedClientForRegion(r) client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := svcfl.NewVpcService(client) + service := svcvpc.NewVpcService(client) request := vpc.NewDescribeFlowLogsRequest() result, err := service.DescribeFlowLogs(ctx, request) diff --git a/tencentcloud/services/fl/service_tencentcloud_tag.go b/tencentcloud/services/fl/service_tencentcloud_tag.go deleted file mode 100644 index a39239696a..0000000000 --- a/tencentcloud/services/fl/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package fl - -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/fl/service_tencentcloud_vpc.go b/tencentcloud/services/fl/service_tencentcloud_vpc.go deleted file mode 100644 index 047312499b..0000000000 --- a/tencentcloud/services/fl/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8150 +0,0 @@ -package fl - -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 -} -func (me *VpcService) DescribeVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (PeerConnectManager *vpc.PeerConnection, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewDescribeVpcPeeringConnectionsRequest() - request.PeeringConnectionIds = []*string{&peeringConnectionId} - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DescribeVpcPeeringConnections(request) - if err != nil { - errRet = err - return - } - 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.PeerConnectionSet) < 1 { - return - } - - PeerConnectManager = response.Response.PeerConnectionSet[0] - return -} -func (me *VpcService) DeleteVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewDeleteVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DeleteVpcPeeringConnection(request) - if err != nil { - 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) DeleteVpcPeerConnectAccecptOrRejectById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewRejectVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().RejectVpcPeeringConnection(request) - if err != nil { - 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/gaap/extension_tags.go b/tencentcloud/services/gaap/extension_tags.go deleted file mode 100644 index aaf51e1c2f..0000000000 --- a/tencentcloud/services/gaap/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package gaap - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/gaap/resource_tc_gaap_global_domain.go b/tencentcloud/services/gaap/resource_tc_gaap_global_domain.go index 3980ffb5b2..5bcd36997b 100644 --- a/tencentcloud/services/gaap/resource_tc_gaap_global_domain.go +++ b/tencentcloud/services/gaap/resource_tc_gaap_global_domain.go @@ -9,6 +9,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -122,7 +123,7 @@ func resourceTencentCloudGaapGlobalDomainCreate(d *schema.ResourceData, meta int if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("gaap", "domain", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -186,7 +187,7 @@ func resourceTencentCloudGaapGlobalDomainRead(d *schema.ResourceData, meta inter } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "gaap", "domain", tcClient.Region, d.Id()) if err != nil { return err @@ -259,10 +260,10 @@ func resourceTencentCloudGaapGlobalDomainUpdate(d *schema.ResourceData, meta int if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("gaap", "domain", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { diff --git a/tencentcloud/services/gaap/resource_tc_gaap_proxy.go b/tencentcloud/services/gaap/resource_tc_gaap_proxy.go index 9f67587b4d..e6e9188367 100644 --- a/tencentcloud/services/gaap/resource_tc_gaap_proxy.go +++ b/tencentcloud/services/gaap/resource_tc_gaap_proxy.go @@ -9,6 +9,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -342,9 +343,9 @@ func resourceTencentCloudGaapProxyUpdate(d *schema.ResourceData, m interface{}) if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - tagService := TagService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(m.(tccommon.ProviderMeta).GetAPIV3Conn()) region := m.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::gaap:%s:uin/:proxy/%s", region, id) diff --git a/tencentcloud/services/gaap/resource_tc_gaap_realserver.go b/tencentcloud/services/gaap/resource_tc_gaap_realserver.go index d5d4133317..5868657c1d 100644 --- a/tencentcloud/services/gaap/resource_tc_gaap_realserver.go +++ b/tencentcloud/services/gaap/resource_tc_gaap_realserver.go @@ -7,6 +7,7 @@ import ( "net" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" gaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529" @@ -104,7 +105,7 @@ func resourceTencentCloudGaapRealserverCreate(d *schema.ResourceData, m interfac if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tagClient := m.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tagClient} + tagService := svctag.NewTagService(tagClient) resourceName := tccommon.BuildTagResourceName("gaap", "realServer", tagClient.Region, id) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -169,7 +170,7 @@ func resourceTencentCloudGaapRealserverRead(d *schema.ResourceData, m interface{ _ = d.Set("project_id", realserver.ProjectId) tagClient := m.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: tagClient} + tagService := svctag.NewTagService(tagClient) tags, err := tagService.DescribeResourceTags(ctx, "gaap", "realServer", tagClient.Region, id) if err != nil { return err @@ -201,9 +202,9 @@ func resourceTencentCloudGaapRealserverUpdate(d *schema.ResourceData, m interfac if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - tagService := TagService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(m.(tccommon.ProviderMeta).GetAPIV3Conn()) region := m.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := tccommon.BuildTagResourceName("gaap", "realServer", region, id) diff --git a/tencentcloud/services/gaap/service_tencentcloud_tag.go b/tencentcloud/services/gaap/service_tencentcloud_tag.go deleted file mode 100644 index 344170759f..0000000000 --- a/tencentcloud/services/gaap/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package gaap - -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/kms/data_source_tc_kms_describe_keys.go b/tencentcloud/services/kms/data_source_tc_kms_describe_keys.go index 12ab418f08..5ff5d9e8fd 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_describe_keys.go +++ b/tencentcloud/services/kms/data_source_tc_kms_describe_keys.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_get_parameters_for_import.go b/tencentcloud/services/kms/data_source_tc_kms_get_parameters_for_import.go index 11a204161e..aad7598498 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_get_parameters_for_import.go +++ b/tencentcloud/services/kms/data_source_tc_kms_get_parameters_for_import.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_keys.go b/tencentcloud/services/kms/data_source_tc_kms_keys.go index d0edec852e..60667a798d 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_keys.go +++ b/tencentcloud/services/kms/data_source_tc_kms_keys.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_list_keys.go b/tencentcloud/services/kms/data_source_tc_kms_list_keys.go index f056e8e5b4..fd2904b025 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_list_keys.go +++ b/tencentcloud/services/kms/data_source_tc_kms_list_keys.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_public_key.go b/tencentcloud/services/kms/data_source_tc_kms_public_key.go index 42d6a051bc..304d73ab0c 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_public_key.go +++ b/tencentcloud/services/kms/data_source_tc_kms_public_key.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_white_box_decrypt_key.go b/tencentcloud/services/kms/data_source_tc_kms_white_box_decrypt_key.go index 198f4afc35..a58a0c0de2 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_white_box_decrypt_key.go +++ b/tencentcloud/services/kms/data_source_tc_kms_white_box_decrypt_key.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_white_box_device_fingerprints.go b/tencentcloud/services/kms/data_source_tc_kms_white_box_device_fingerprints.go index 75cba3eb6b..89c1fe8100 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_white_box_device_fingerprints.go +++ b/tencentcloud/services/kms/data_source_tc_kms_white_box_device_fingerprints.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/data_source_tc_kms_white_box_key_details.go b/tencentcloud/services/kms/data_source_tc_kms_white_box_key_details.go index 620a5a0711..412fc58b4e 100644 --- a/tencentcloud/services/kms/data_source_tc_kms_white_box_key_details.go +++ b/tencentcloud/services/kms/data_source_tc_kms_white_box_key_details.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/extension_tags.go b/tencentcloud/services/kms/extension_tags.go deleted file mode 100644 index f17bf28926..0000000000 --- a/tencentcloud/services/kms/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package kms - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/kms/resource_tc_kms_cloud_resource_attachment.go b/tencentcloud/services/kms/resource_tc_kms_cloud_resource_attachment.go index 49f6b529b1..2b6de15130 100644 --- a/tencentcloud/services/kms/resource_tc_kms_cloud_resource_attachment.go +++ b/tencentcloud/services/kms/resource_tc_kms_cloud_resource_attachment.go @@ -11,6 +11,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/resource_tc_kms_external_key.go b/tencentcloud/services/kms/resource_tc_kms_external_key.go index 8445db92de..d70d3db321 100644 --- a/tencentcloud/services/kms/resource_tc_kms_external_key.go +++ b/tencentcloud/services/kms/resource_tc_kms_external_key.go @@ -6,10 +6,12 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -135,7 +137,7 @@ func resourceTencentCloudKmsExternalKeyCreate(d *schema.ResourceData, meta inter if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) keyMetaData, err := kmsService.DescribeKeyById(ctx, keyId) if err != nil { return err @@ -186,7 +188,7 @@ func resourceTencentCloudKmsExternalKeyRead(d *schema.ResourceData, meta interfa transformKeyState(d) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "kms", "key", tcClient.Region, *key.ResourceId) if err != nil { return err @@ -281,10 +283,10 @@ func resourceTencentCloudKmsExternalKeyUpdate(d *schema.ResourceData, meta inter if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) keyMetaData, err := kmsService.DescribeKeyById(ctx, keyId) if err != nil { return err diff --git a/tencentcloud/services/kms/resource_tc_kms_key.go b/tencentcloud/services/kms/resource_tc_kms_key.go index aa33cf52e1..bc79c5abb5 100644 --- a/tencentcloud/services/kms/resource_tc_kms_key.go +++ b/tencentcloud/services/kms/resource_tc_kms_key.go @@ -6,12 +6,14 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" 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" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -185,7 +187,7 @@ func resourceTencentCloudKmsKeyCreate(d *schema.ResourceData, meta interface{}) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) keyMetaData, err := kmsService.DescribeKeyById(ctx, keyId) if err != nil { return err @@ -240,7 +242,7 @@ func resourceTencentCloudKmsKeyRead(d *schema.ResourceData, meta interface{}) er transformKeyState(d) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "kms", "key", tcClient.Region, *key.ResourceId) if err != nil { return err @@ -330,10 +332,10 @@ func resourceTencentCloudKmsKeyUpdate(d *schema.ResourceData, meta interface{}) if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) keyMetaData, err := kmsService.DescribeKeyById(ctx, keyId) if err != nil { return err diff --git a/tencentcloud/services/kms/resource_tc_kms_overwrite_white_box_device_fingerprints.go b/tencentcloud/services/kms/resource_tc_kms_overwrite_white_box_device_fingerprints.go index da1af1dcb9..2cb6c7f64c 100644 --- a/tencentcloud/services/kms/resource_tc_kms_overwrite_white_box_device_fingerprints.go +++ b/tencentcloud/services/kms/resource_tc_kms_overwrite_white_box_device_fingerprints.go @@ -8,6 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/kms/resource_tc_kms_white_box_key.go b/tencentcloud/services/kms/resource_tc_kms_white_box_key.go index 17c9c2b120..42b50ff28e 100644 --- a/tencentcloud/services/kms/resource_tc_kms_white_box_key.go +++ b/tencentcloud/services/kms/resource_tc_kms_white_box_key.go @@ -6,10 +6,12 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" kms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms/v20190118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -105,7 +107,7 @@ func resourceTencentCloudKmsWhiteBoxKeyCreate(d *schema.ResourceData, meta inter d.SetId(keyId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::kms:%s:uin/:key/%s", region, d.Id()) if err = tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -179,7 +181,7 @@ func resourceTencentCloudKmsWhiteBoxKeyRead(d *schema.ResourceData, meta interfa } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "kms", "key", tcClient.Region, d.Id()) if err != nil { return err @@ -253,9 +255,9 @@ func resourceTencentCloudKmsWhiteBoxKeyUpdate(d *schema.ResourceData, meta inter if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("kms", "key", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/kms/service_tencentcloud_tag.go b/tencentcloud/services/kms/service_tencentcloud_tag.go deleted file mode 100644 index 590ab08987..0000000000 --- a/tencentcloud/services/kms/service_tencentcloud_tag.go +++ /dev/null @@ -1,414 +0,0 @@ -package kms - -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/mariadb/extension_tags.go b/tencentcloud/services/mariadb/extension_tags.go deleted file mode 100644 index a329907830..0000000000 --- a/tencentcloud/services/mariadb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package mariadb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/mariadb/resource_tc_mariadb_dedicatedcluster_db_instance.go b/tencentcloud/services/mariadb/resource_tc_mariadb_dedicatedcluster_db_instance.go index 816498ceb8..99d39c47e2 100644 --- a/tencentcloud/services/mariadb/resource_tc_mariadb_dedicatedcluster_db_instance.go +++ b/tencentcloud/services/mariadb/resource_tc_mariadb_dedicatedcluster_db_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -194,7 +195,7 @@ func resourceTencentCloudMariadbDedicatedclusterDbInstanceCreate(d *schema.Resou } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::mariadb:%s:uin/:mariadb-dedicatedcluster-instance/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -270,7 +271,7 @@ func resourceTencentCloudMariadbDedicatedclusterDbInstanceRead(d *schema.Resourc } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "mariadb", "mariadb-dedicatedcluster-instance", tcClient.Region, d.Id()) if err != nil { return err @@ -360,9 +361,9 @@ func resourceTencentCloudMariadbDedicatedclusterDbInstanceUpdate(d *schema.Resou if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mariadb", "mariadb-dedicatedcluster-instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/mariadb/resource_tc_mariadb_hour_db_instance.go b/tencentcloud/services/mariadb/resource_tc_mariadb_hour_db_instance.go index 382293ae78..ece71f5f77 100644 --- a/tencentcloud/services/mariadb/resource_tc_mariadb_hour_db_instance.go +++ b/tencentcloud/services/mariadb/resource_tc_mariadb_hour_db_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -202,7 +203,7 @@ func resourceTencentCloudMariadbHourDbInstanceCreate(d *schema.ResourceData, met // set Tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::mariadb:%s:uin/:mariadb-hour-instance/%s", region, instanceId) if err = tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -280,7 +281,7 @@ func resourceTencentCloudMariadbHourDbInstanceRead(d *schema.ResourceData, meta } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "mariadb", "mariadb-hour-instance", tcClient.Region, instanceId) if err != nil { return err @@ -356,9 +357,9 @@ func resourceTencentCloudMariadbHourDbInstanceUpdate(d *schema.ResourceData, met if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mariadb", "mariadb-hour-instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/mariadb/resource_tc_mariadb_instance.go b/tencentcloud/services/mariadb/resource_tc_mariadb_instance.go index 11ec10ed65..d55c0d79fc 100644 --- a/tencentcloud/services/mariadb/resource_tc_mariadb_instance.go +++ b/tencentcloud/services/mariadb/resource_tc_mariadb_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -524,7 +525,7 @@ func resourceTencentCloudMariadbInstanceCreate(d *schema.ResourceData, meta inte } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::mariadb:%s:uin/:instance/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -740,7 +741,7 @@ func resourceTencentCloudMariadbInstanceRead(d *schema.ResourceData, meta interf } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region tags, err := tagService.DescribeResourceTags(ctx, "mariadb", "instance", region, instanceId) if err != nil { @@ -810,9 +811,9 @@ func resourceTencentCloudMariadbInstanceUpdate(d *schema.ResourceData, meta inte if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mariadb", "instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/mariadb/service_tencentcloud_tag.go b/tencentcloud/services/mariadb/service_tencentcloud_tag.go deleted file mode 100644 index 4864952b1d..0000000000 --- a/tencentcloud/services/mariadb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package mariadb - -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/mongodb/extension_mongodb.go b/tencentcloud/services/mongodb/extension_mongodb.go index 84c99ced5f..3e86ae46da 100644 --- a/tencentcloud/services/mongodb/extension_mongodb.go +++ b/tencentcloud/services/mongodb/extension_mongodb.go @@ -5,6 +5,7 @@ import ( tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" ) const ( @@ -43,8 +44,8 @@ const ( ) const ( - MONGODB_CHARGE_TYPE_POSTPAID = COMMON_PAYTYPE_POSTPAID - MONGODB_CHARGE_TYPE_PREPAID = COMMON_PAYTYPE_PREPAID + MONGODB_CHARGE_TYPE_POSTPAID = svcpostgresql.COMMON_PAYTYPE_POSTPAID + MONGODB_CHARGE_TYPE_PREPAID = svcpostgresql.COMMON_PAYTYPE_PREPAID ) var MONGODB_CHARGE_TYPE = map[uint64]string{ diff --git a/tencentcloud/services/mongodb/extension_postgresql.go b/tencentcloud/services/mongodb/extension_postgresql.go deleted file mode 100644 index 379ab35e9e..0000000000 --- a/tencentcloud/services/mongodb/extension_postgresql.go +++ /dev/null @@ -1,57 +0,0 @@ -package mongodb - -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/mongodb/extension_tags.go b/tencentcloud/services/mongodb/extension_tags.go deleted file mode 100644 index 05b69a8e6d..0000000000 --- a/tencentcloud/services/mongodb/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package mongodb - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/mongodb/resource_tc_mongodb_instance.go b/tencentcloud/services/mongodb/resource_tc_mongodb_instance.go index 828940b4df..769a689c23 100644 --- a/tencentcloud/services/mongodb/resource_tc_mongodb_instance.go +++ b/tencentcloud/services/mongodb/resource_tc_mongodb_instance.go @@ -8,6 +8,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -250,7 +251,7 @@ func resourceTencentCloudMongodbInstanceCreate(d *schema.ResourceData, meta inte client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() mongodbService := MongodbService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region chargeType := d.Get("charge_type") @@ -319,7 +320,7 @@ func resourceTencentCloudMongodbInstanceRead(d *schema.ResourceData, meta interf instanceId := d.Id() mongodbService := MongodbService{client} - tagService := TagService{client} + tagService := svctag.NewTagService(client) instance, has, err := mongodbService.DescribeInstanceById(ctx, instanceId) if err != nil { return err @@ -440,7 +441,7 @@ func resourceTencentCloudMongodbInstanceUpdate(d *schema.ResourceData, meta inte client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() mongodbService := MongodbService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region d.Partial(true) @@ -513,7 +514,7 @@ func resourceTencentCloudMongodbInstanceUpdate(d *schema.ResourceData, meta inte if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mongodb", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance.go b/tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance.go index c795043517..ff65c31203 100644 --- a/tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance.go +++ b/tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -237,7 +238,7 @@ func resourceMongodbShardingInstanceCreate(d *schema.ResourceData, meta interfac client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() mongodbService := MongodbService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region chargeType := d.Get("charge_type") @@ -423,7 +424,7 @@ func resourceMongodbShardingInstanceUpdate(d *schema.ResourceData, meta interfac client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() mongodbService := MongodbService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region d.Partial(true) @@ -493,7 +494,7 @@ func resourceMongodbShardingInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mongodb", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/mongodb/resource_tc_mongodb_standby_instance.go b/tencentcloud/services/mongodb/resource_tc_mongodb_standby_instance.go index 948f09d09c..d3b8081fda 100644 --- a/tencentcloud/services/mongodb/resource_tc_mongodb_standby_instance.go +++ b/tencentcloud/services/mongodb/resource_tc_mongodb_standby_instance.go @@ -9,6 +9,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -209,7 +210,7 @@ func resourceTencentCloudMongodbStandbyInstanceCreate(d *schema.ResourceData, me client1 := *client mongodbService := MongodbService{client: client} mongodbService1 := MongodbService{client: &client1} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region // collect info from master instance @@ -393,7 +394,7 @@ func resourceTencentCloudMongodbStandbyInstanceUpdate(d *schema.ResourceData, me client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() mongodbService := MongodbService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region d.Partial(true) @@ -449,7 +450,7 @@ func resourceTencentCloudMongodbStandbyInstanceUpdate(d *schema.ResourceData, me if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("mongodb", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/mongodb/service_tencentcloud_tag.go b/tencentcloud/services/mongodb/service_tencentcloud_tag.go deleted file mode 100644 index a4055b18c3..0000000000 --- a/tencentcloud/services/mongodb/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package mongodb - -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/data_source_tc_monitor_alarm_monitor_type_testing_test.go b/tencentcloud/services/monitor/data_source_tc_monitor_alarm_monitor_type_testing_test.go similarity index 79% rename from tencentcloud/data_source_tc_monitor_alarm_monitor_type_testing_test.go rename to tencentcloud/services/monitor/data_source_tc_monitor_alarm_monitor_type_testing_test.go index 6b1fc02e66..846e5f2623 100644 --- a/tencentcloud/data_source_tc_monitor_alarm_monitor_type_testing_test.go +++ b/tencentcloud/services/monitor/data_source_tc_monitor_alarm_monitor_type_testing_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package monitor_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) // go test -test.run TestAccTencentCloudMonitorAlarmMonitorTypeDataSource_basic -v @@ -11,14 +13,14 @@ func TestAccTencentCloudTestingMonitorAlarmMonitorTypeDataSource_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: testAccTestingMonitorAlarmMonitorTypeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_alarm_monitor_type.alarm_monitor_type"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_alarm_monitor_type.alarm_monitor_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_alarm_monitor_type.alarm_monitor_type", "monitor_type_infos.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_alarm_monitor_type.alarm_monitor_type", "monitor_type_infos.0.id"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_alarm_monitor_type.alarm_monitor_type", "monitor_type_infos.0.name"), diff --git a/tencentcloud/data_source_tc_monitor_statistic_data.go b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data.go similarity index 90% rename from tencentcloud/data_source_tc_monitor_statistic_data.go rename to tencentcloud/services/monitor/data_source_tc_monitor_statistic_data.go index 2c0f13f326..2313e9784d 100644 --- a/tencentcloud/data_source_tc_monitor_statistic_data.go +++ b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data.go @@ -1,33 +1,18 @@ -/* -Use this data source to query detailed information of monitor statistic_data - -Example Usage - -```hcl -data "tencentcloud_monitor_statistic_data" "statistic_data" { - module = "monitor" - namespace = "QCE/TKE2" - metric_names = ["cpu_usage"] - conditions { - key = "tke_cluster_instance_id" - operator = "=" - value = ["cls-mw2w40s7"] - } -} -``` -*/ -package tencentcloud +package monitor 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" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMonitorStatisticData() *schema.Resource { +func DataSourceTencentCloudMonitorStatisticData() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMonitorStatisticDataRead, Schema: map[string]*schema.Schema{ @@ -179,12 +164,12 @@ func dataSourceTencentCloudMonitorStatisticData() *schema.Resource { } func dataSourceTencentCloudMonitorStatisticDataRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_monitor_statistic_data.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_monitor_statistic_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("module"); ok { @@ -228,13 +213,13 @@ func dataSourceTencentCloudMonitorStatisticDataRead(d *schema.ResourceData, meta paramMap["GroupBys"] = helper.InterfacesStringsPoint(groupBysSet) } - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MonitorService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var statistic *monitor.DescribeStatisticDataResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMonitorStatisticDataByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } statistic = result return nil @@ -324,7 +309,7 @@ func dataSourceTencentCloudMonitorStatisticDataRead(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/services/monitor/data_source_tc_monitor_statistic_data.md b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data.md new file mode 100644 index 0000000000..848ae54629 --- /dev/null +++ b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data.md @@ -0,0 +1,16 @@ +Use this data source to query detailed information of monitor statistic_data + +Example Usage + +```hcl +data "tencentcloud_monitor_statistic_data" "statistic_data" { + module = "monitor" + namespace = "QCE/TKE2" + metric_names = ["cpu_usage"] + conditions { + key = "tke_cluster_instance_id" + operator = "=" + value = ["cls-mw2w40s7"] + } +} +``` diff --git a/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data_test.go b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data_test.go new file mode 100644 index 0000000000..61fcd3da67 --- /dev/null +++ b/tencentcloud/services/monitor/data_source_tc_monitor_statistic_data_test.go @@ -0,0 +1,42 @@ +package monitor_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixMonitorStatisticDataDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMonitorStatisticDataDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_statistic_data.statistic_data"), + ), + }, + }, + }) +} + +const testAccMonitorStatisticDataDataSource = ` + +data "tencentcloud_monitor_statistic_data" "statistic_data" { + module = "monitor" + namespace = "QCE/TKE2" + metric_names = ["cpu_usage"] + conditions { + key = "tke_cluster_instance_id" + operator = "=" + value = ["cls-mw2w40s7"] + } +} + +` diff --git a/tencentcloud/services/monitor/extension_tke.go b/tencentcloud/services/monitor/extension_tke.go deleted file mode 100644 index 1de9f60859..0000000000 --- a/tencentcloud/services/monitor/extension_tke.go +++ /dev/null @@ -1,149 +0,0 @@ -package monitor - -import ( - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - - svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" -) - -const ( - TKE_CLUSTER_OS_CENTOS72 = "centos7.2x86_64" - TKE_CLUSTER_OS_CENTOS76 = "centos7.6.0_x64" - TKE_CLUSTER_OS_UBUNTU18 = "ubuntu18.04.1x86_64" - TKE_CLUSTER_OS_LINUX24 = "tlinux2.4x86_64" - TKE_CLUSTER_OS_LINUX22 = "tlinux2.2(tkernel3)x86_64" - TKE_CLUSTER_OS_LINUXF22 = "Tencent tlinux release 2.2 (Final)" -) - -// 兼容旧的 cluster_os 定义 -const ( - TkeClusterOsCentOS76 = "centos7.6x86_64" - //TkeClusterOsUbuntu16 = "ubuntu16.04.1 LTSx86_64" - TkeClusterOsUbuntu18 = "ubuntu18.04.1 LTSx86_64" -) - -var TKE_CLUSTER_OS = []string{TKE_CLUSTER_OS_CENTOS76, TKE_CLUSTER_OS_UBUNTU18, TKE_CLUSTER_OS_LINUX24} - -var tkeClusterOsMap = map[string]string{TKE_CLUSTER_OS_CENTOS72: TKE_CLUSTER_OS_CENTOS72, - TKE_CLUSTER_OS_CENTOS76: TKE_CLUSTER_OS_CENTOS76, - TKE_CLUSTER_OS_UBUNTU18: TKE_CLUSTER_OS_UBUNTU18, - TKE_CLUSTER_OS_LINUX24: TKE_CLUSTER_OS_LINUX24, - TKE_CLUSTER_OS_LINUX22: TKE_CLUSTER_OS_LINUX22, - TKE_CLUSTER_OS_LINUXF22: TKE_CLUSTER_OS_LINUXF22, -} - -func tkeToShowClusterOs(apiOs string) string { - for showName, apiName := range tkeClusterOsMap { - if apiName == apiOs { - return showName - } - } - return apiOs -} - -const ( - TKE_DEPLOY_TYPE_MANAGED = "MANAGED_CLUSTER" - TKE_DEPLOY_TYPE_INDEPENDENT = "INDEPENDENT_CLUSTER" -) - -var TKE_DEPLOY_TYPES = []string{TKE_DEPLOY_TYPE_MANAGED, TKE_DEPLOY_TYPE_INDEPENDENT} - -const ( - TKE_RUNTIME_DOCKER = "docker" - TKE_RUNTIME_CONTAINERD = "containerd" -) - -var TKE_RUNTIMES = []string{TKE_RUNTIME_DOCKER, TKE_RUNTIME_CONTAINERD} - -const ( - TKE_ROLE_MASTER_ETCD = "MASTER_ETCD" - TKE_ROLE_WORKER = "WORKER" -) - -var TKE_INSTANCE_CHARGE_TYPE = []string{svccvm.CVM_CHARGE_TYPE_PREPAID, svccvm.CVM_CHARGE_TYPE_POSTPAID} - -const ( - TKE_CLUSTER_OS_TYPE_DOCKER_CUSTOMIZE = "DOCKER_CUSTOMIZE" - TKE_CLUSTER_OS_TYPE_GENERAL = "GENERAL" -) - -var TKE_CLUSTER_OS_TYPES = []string{TKE_CLUSTER_OS_TYPE_GENERAL} - -const ( - TkeInternetStatusCreating = "Creating" - TkeInternetStatusCreateFailed = "CreateFailed" - TkeInternetStatusCreated = "Created" - TkeInternetStatusDeleting = "Deleting" - TkeInternetStatusDeleted = "Deleted" - TkeInternetStatusDeletedFailed = "DeletedFailed" - TkeInternetStatusNotfound = "NotFound" -) - -const ( - TKE_CLUSTER_NETWORK_TYPE_GR = "GR" - TKE_CLUSTER_NETWORK_TYPE_VPC_CNI = "VPC-CNI" - TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY = "CiliumOverlay" -) - -const ( - TKE_CLUSTER_VPC_CNI_STATUS_RUNNING = "Running" - TKE_CLUSTER_VPC_CNI_STATUS_SUCCEED = "Succeed" - TKE_CLUSTER_VPC_CNI_STATUS_FAILED = "Failed" -) - -var TKE_CLUSTER_NETWORK_TYPE = []string{TKE_CLUSTER_NETWORK_TYPE_GR, TKE_CLUSTER_NETWORK_TYPE_VPC_CNI, TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY} - -const ( - TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP = "lan-ip" - TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME = "hostname" -) - -var TKE_CLUSTER_NODE_NAME_TYPE = []string{TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP, TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME} - -const ( - TKE_CLUSTER_KUBE_PROXY_MODE_BPF = "kube-proxy-bpf" -) - -var TKE_CLUSTER_KUBE_PROXY_MODE = []string{TKE_CLUSTER_KUBE_PROXY_MODE_BPF} - -type OverrideSettings struct { - Master []tke.InstanceAdvancedSettings - Work []tke.InstanceAdvancedSettings -} - -const ( - DefaultDesiredPodNum = 0 -) - -const ( - DefaultAuthenticationOptionsIssuer = "https://kubernetes.default.svc.cluster.local" -) - -// This use to filter default values the addon returns. -var TKE_ADDON_DEFAULT_VALUES_KEY = []string{ - "global.image.host", - "global.cluster.id", - "global.cluster.appid", - "global.cluster.uin", - "global.cluster.subuin", - "global.cluster.type", - "global.cluster.clustertype", - "global.cluster.kubeversion", - "global.cluster.kubeminor", -} - -const ( - InstallSecurityAgentCommandId = "cmd-d8jj2skv" -) - -const ( - TKE_CLUSTER_INTERNET = true - TKE_CLUSTER_INTRANET = false - - TKE_CLUSTER_OPEN_ACCESS = true - TKE_CLUSTER_CLOSE_ACCESS = false -) - -const ( - backupStorageLocationStateAvailable = "Available" -) diff --git a/tencentcloud/resource_tc_monitor_policy_group.go b/tencentcloud/services/monitor/resource_tc_monitor_policy_group.go similarity index 87% rename from tencentcloud/resource_tc_monitor_policy_group.go rename to tencentcloud/services/monitor/resource_tc_monitor_policy_group.go index 9ce956f884..39c6a87654 100644 --- a/tencentcloud/resource_tc_monitor_policy_group.go +++ b/tencentcloud/services/monitor/resource_tc_monitor_policy_group.go @@ -1,70 +1,21 @@ -/* -Provides a policy group resource for monitor. - -~> **NOTE:** It has been deprecated and replaced by tencentcloud_monitor_alarm_policy. - -Example Usage - -```hcl -resource "tencentcloud_monitor_policy_group" "group" { - group_name = "nice_group" - policy_view_name = "cvm_device" - remark = "this is a test policy group" - is_union_rule = 1 - conditions { - metric_id = 33 - alarm_notify_type = 1 - alarm_notify_period = 600 - calc_type = 1 - calc_value = 3 - calc_period = 300 - continue_period = 2 - } - conditions { - metric_id = 30 - alarm_notify_type = 1 - alarm_notify_period = 600 - calc_type = 2 - calc_value = 30 - calc_period = 300 - continue_period = 2 - } - event_conditions { - event_id = 39 - alarm_notify_type = 0 - alarm_notify_period = 300 - } - event_conditions { - event_id = 40 - alarm_notify_type = 0 - alarm_notify_period = 300 - } -} -``` -Import - -Policy group instance can be imported, e.g. - -``` -$ terraform import tencentcloud_monitor_policy_group.group group-id -``` - -*/ -package tencentcloud +package monitor import ( "context" "fmt" "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" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { +func ResourceTencentCloudMonitorPolicyGroup() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.59.18. Please use 'tencentcloud_monitor_alarm_policy' instead.", Create: resourceTencentMonitorPolicyGroupCreate, @@ -80,7 +31,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { Type: schema.TypeString, Required: true, Description: "Policy group name, length should between 1 and 20.", - ValidateFunc: validateStringLengthInRange(1, 20), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 20), }, "policy_view_name": { Type: schema.TypeString, @@ -92,7 +43,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(0, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 100), Description: "Policy group's remark information.", }, "project_id": { @@ -106,7 +57,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 0, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "The and or relation of indicator alarm rule. Valid values: `0`, `1`. `0` represents or rule (if any rule is met, the alarm will be raised), `1` represents and rule (if all rules are met, the alarm will be raised).The default is 0.", }, "conditions": { @@ -123,7 +74,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { "alarm_notify_type": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Alarm sending convergence type. `0` continuous alarm, `1` index alarm.", }, "alarm_notify_period": { @@ -135,7 +86,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(1, 12), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 12), Description: "Compare type. Valid value ranges: [1~12]. `1` means more than, `2` means greater than or equal, `3` means less than, `4` means less than or equal to, `5` means equal, `6` means not equal, `7` means days rose, `8` means days fell, `9` means weeks rose, `10` means weeks fell, `11` means period rise, `12` means period fell, refer to `data.tencentcloud_monitor_policy_conditions(calc_type_keys)`.", }, "calc_value": { @@ -173,7 +124,7 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { "alarm_notify_type": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Alarm sending convergence type. `0` continuous alarm, `1` index alarm.", }, "alarm_notify_period": { @@ -325,10 +276,10 @@ func resourceTencentCloudMonitorPolicyGroup() *schema.Resource { } } func resourceTencentMonitorPolicyGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_policy_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_policy_group.create")() var ( - monitorService = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + monitorService = MonitorService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = monitor.NewCreatePolicyGroupRequest() ) @@ -378,11 +329,11 @@ func resourceTencentMonitorPolicyGroupCreate(d *schema.ResourceData, meta interf } var groupId *int64 - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := monitorService.client.UseMonitorClient().CreatePolicyGroup(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } groupId = response.Response.GroupId @@ -395,14 +346,14 @@ func resourceTencentMonitorPolicyGroupCreate(d *schema.ResourceData, meta interf } func resourceTencentMonitorPolicyGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_policy_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_policy_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) var ( - monitorService = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + monitorService = MonitorService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = monitor.NewDescribePolicyGroupInfoRequest() response *monitor.DescribePolicyGroupInfoResponse ) @@ -424,10 +375,10 @@ func resourceTencentMonitorPolicyGroupRead(d *schema.ResourceData, meta interfac request.GroupId = &groupId request.Module = helper.String("monitor") - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if response, err = monitorService.client.UseMonitorClient().DescribePolicyGroupInfo(request); err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -571,12 +522,12 @@ func resourceTencentMonitorPolicyGroupRead(d *schema.ResourceData, meta interfac } func resourceTencentMonitorPolicyGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_policy_group.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_monitor_policy_group.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( - monitorService = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + monitorService = MonitorService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = monitor.NewModifyPolicyGroupRequest() ) groupId, err := strconv.ParseInt(d.Id(), 10, 64) @@ -634,11 +585,11 @@ func resourceTencentMonitorPolicyGroupUpdate(d *schema.ResourceData, meta interf } } - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, err := monitorService.client.UseMonitorClient().ModifyPolicyGroup(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -649,10 +600,10 @@ func resourceTencentMonitorPolicyGroupUpdate(d *schema.ResourceData, meta interf } func resourceTencentMonitorPolicyGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_policy_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_policy_group.delete")() var ( - monitorService = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + monitorService = MonitorService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = monitor.NewDeletePolicyGroupRequest() ) @@ -663,10 +614,10 @@ func resourceTencentMonitorPolicyGroupDelete(d *schema.ResourceData, meta interf request.GroupId = []*int64{&groupId} request.Module = helper.String("monitor") - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err = monitorService.client.UseMonitorClient().DeletePolicyGroup(request); err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { diff --git a/tencentcloud/services/monitor/resource_tc_monitor_policy_group_test.md b/tencentcloud/services/monitor/resource_tc_monitor_policy_group_test.md new file mode 100644 index 0000000000..ec60fda2fe --- /dev/null +++ b/tencentcloud/services/monitor/resource_tc_monitor_policy_group_test.md @@ -0,0 +1,49 @@ +Provides a policy group resource for monitor. + +~> **NOTE:** It has been deprecated and replaced by tencentcloud_monitor_alarm_policy. + +Example Usage + +```hcl +resource "tencentcloud_monitor_policy_group" "group" { + group_name = "nice_group" + policy_view_name = "cvm_device" + remark = "this is a test policy group" + is_union_rule = 1 + conditions { + metric_id = 33 + alarm_notify_type = 1 + alarm_notify_period = 600 + calc_type = 1 + calc_value = 3 + calc_period = 300 + continue_period = 2 + } + conditions { + metric_id = 30 + alarm_notify_type = 1 + alarm_notify_period = 600 + calc_type = 2 + calc_value = 30 + calc_period = 300 + continue_period = 2 + } + event_conditions { + event_id = 39 + alarm_notify_type = 0 + alarm_notify_period = 300 + } + event_conditions { + event_id = 40 + alarm_notify_type = 0 + alarm_notify_period = 300 + } +} +``` +Import + +Policy group instance can be imported, e.g. + +``` +$ terraform import tencentcloud_monitor_policy_group.group group-id +``` diff --git a/tencentcloud/services/monitor/service_tencentcloud_monitor.go b/tencentcloud/services/monitor/service_tencentcloud_monitor.go index 03a7cadd28..5510a757c7 100644 --- a/tencentcloud/services/monitor/service_tencentcloud_monitor.go +++ b/tencentcloud/services/monitor/service_tencentcloud_monitor.go @@ -9,6 +9,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" @@ -20,6 +21,10 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewMonitorService(client *connectivity.TencentCloudClient) MonitorService { + return MonitorService{client: client} +} + type MonitorService struct { client *connectivity.TencentCloudClient } @@ -1197,7 +1202,7 @@ func (me *MonitorService) DescribeTkeTmpConfigById(ctx context.Context, configId } }() - ids, err := me.parseConfigId(configId) + ids, err := me.ParseConfigId(configId) if err != nil { errRet = err return @@ -1237,7 +1242,7 @@ func (me *MonitorService) DeleteTkeTmpConfigByName(ctx context.Context, configId } }() - ids, err := me.parseConfigId(configId) + ids, err := me.ParseConfigId(configId) if err != nil { errRet = err return @@ -1271,7 +1276,7 @@ func (me *MonitorService) DeleteTkeTmpConfigByName(ctx context.Context, configId return } -func (me *MonitorService) parseConfigId(configId string) (ret *PrometheusConfigIds, err error) { +func (me *MonitorService) ParseConfigId(configId string) (ret *svctke.PrometheusConfigIds, err error) { idSplit := strings.Split(configId, tccommon.FILED_SP) if len(idSplit) != 3 { return nil, fmt.Errorf("id is broken,%s", configId) @@ -1284,7 +1289,7 @@ func (me *MonitorService) parseConfigId(configId string) (ret *PrometheusConfigI return nil, fmt.Errorf("id is broken,%s", configId) } - ret = &PrometheusConfigIds{instanceId, clusterType, clusterId} + ret = &svctke.PrometheusConfigIds{InstanceId: instanceId, ClusterType: clusterType, ClusterId: clusterId} return } diff --git a/tencentcloud/services/monitor/service_tencentcloud_tke.go b/tencentcloud/services/monitor/service_tencentcloud_tke.go deleted file mode 100644 index 45b04dc977..0000000000 --- a/tencentcloud/services/monitor/service_tencentcloud_tke.go +++ /dev/null @@ -1,2746 +0,0 @@ -package monitor - -import ( - "context" - "fmt" - "log" - "strings" - - sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" - tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/pkg/errors" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" - svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" -) - -type ClusterBasicSetting struct { - ClusterId string - ClusterOs string - ClusterOsType string - ClusterVersion string - ClusterName string - ClusterDescription string - ClusterLevel *string - AutoUpgradeClusterLevel *bool - VpcId string - ProjectId int64 - ClusterNodeNum int64 - ClusterStatus string - SubnetId string - Tags map[string]string -} - -type ClusterAdvancedSettings struct { - Ipvs bool - AsEnabled bool - EnableCustomizedPodCIDR bool - BasePodNumber int64 - ContainerRuntime string - RuntimeVersion string - NodeNameType string - ExtraArgs ClusterExtraArgs - NetworkType string - IsNonStaticIpMode bool - DeletionProtection bool - KubeProxyMode string - Property string - OsCustomizeType string - VpcCniType string -} - -type ClusterExtraArgs struct { - KubeAPIServer []string - KubeControllerManager []string - KubeScheduler []string -} - -type RunInstancesForNode struct { - Master []string - Work []string -} - -type InstanceAdvancedSettings struct { - MountTarget string - DockerGraphPath string - UserScript string - Unschedulable int64 - DesiredPodNum int64 - Labels []*tke.Label - DataDisks []*tke.DataDisk - ExtraArgs tke.InstanceExtraArgs -} - -type ClusterCidrSettings struct { - ClusterCidr string - IgnoreClusterCidrConflict bool - MaxNodePodNum int64 - MaxClusterServiceNum int64 - ServiceCIDR string - EniSubnetIds []string - ClaimExpiredSeconds int64 -} - -type ClusterInfo struct { - ClusterBasicSetting - ClusterCidrSettings - ClusterAdvancedSettings - - DeployType string - CreatedTime string -} - -type InstanceInfo struct { - InstanceId string - InstanceRole string - InstanceState string - FailedReason string - NodePoolId string - CreatedTime string - InstanceAdvancedSettings *tke.InstanceAdvancedSettings - InstanceDataDiskMountSetting *tke.InstanceDataDiskMountSetting - LanIp string -} - -type PrometheusConfigIds struct { - InstanceId string - ClusterType string - ClusterId string -} - -type Switch struct { - ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` - Audit *SwitchInfo `json:"Audit,omitempty" name:"Audit"` - Event *SwitchInfo `json:"Event,omitempty" name:"Event"` - Log *SwitchInfo `json:"Log,omitempty" name:"Log"` -} - -type SwitchInfo struct { - Enable *bool `json:"Enable,omitempty" name:"Enable"` - LogsetId *string `json:"LogsetId,omitempty" name:"LogsetId"` - TopicId *string `json:"TopicId,omitempty" name:"TopicId"` - Version *string `json:"Version,omitempty" name:"Version"` - UpgradeAble *bool `json:"UpgradeAble,omitempty" name:"UpgradeAble"` -} - -type DescribeLogSwitchesResponseParams struct { - SwitchSet []*Switch `json:"SwitchSet,omitempty" name:"SwitchSet"` - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` -} - -type DescribeLogSwitchesResponse struct { - tchttp.BaseResponse - Response *DescribeLogSwitchesResponseParams `json:"Response"` -} - -type TkeService struct { - client *connectivity.TencentCloudClient -} - -func (me *TkeService) DescribeClusterInstances(ctx context.Context, id string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterInstancesRequest() - - defer 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.ClusterId = &id - masters = make([]InstanceInfo, 0, 100) - workers = make([]InstanceInfo, 0, 100) - var offset int64 = 0 - var limit int64 = 20 - var has = map[string]bool{} - var total int64 = -1 - -getMoreData: - if total >= 0 && offset >= total { - return - } - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = err - return - } - if total < 0 { - total = int64(*response.Response.TotalCount) - } - - if len(response.Response.InstanceSet) > 0 { - offset += limit - } else { - // get empty set, we're done - return - } - - for _, item := range response.Response.InstanceSet { - if has[*item.InstanceId] { - errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) - return - } - has[*item.InstanceId] = true - instanceInfo := InstanceInfo{ - InstanceId: *item.InstanceId, - InstanceRole: *item.InstanceRole, - InstanceState: *item.InstanceState, - FailedReason: *item.FailedReason, - InstanceAdvancedSettings: item.InstanceAdvancedSettings, - } - if item.CreatedTime != nil { - instanceInfo.CreatedTime = *item.CreatedTime - } - if item.NodePoolId != nil { - instanceInfo.NodePoolId = *item.NodePoolId - } - if item.LanIP != nil { - instanceInfo.LanIp = *item.LanIP - } - if instanceInfo.InstanceRole == TKE_ROLE_WORKER { - workers = append(workers, instanceInfo) - } else { - masters = append(masters, instanceInfo) - } - } - goto getMoreData - -} - -func (me *TkeService) DescribeClusterInstancesByRole(ctx context.Context, id, role string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterInstancesRequest() - - defer 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.ClusterId = &id - request.InstanceRole = &role - masters = make([]InstanceInfo, 0, 100) - workers = make([]InstanceInfo, 0, 100) - var offset int64 = 0 - var limit int64 = 20 - var has = map[string]bool{} - var total int64 = -1 - - for { - if total >= 0 && offset >= total { - break - } - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = err - return - } - if total < 0 { - total = int64(*response.Response.TotalCount) - } - - if len(response.Response.InstanceSet) == 0 { - // get empty set, we're done - break - } - - offset += limit - - for _, item := range response.Response.InstanceSet { - if has[*item.InstanceId] { - errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) - return - } - has[*item.InstanceId] = true - instanceInfo := InstanceInfo{ - InstanceId: *item.InstanceId, - InstanceRole: *item.InstanceRole, - InstanceState: *item.InstanceState, - FailedReason: *item.FailedReason, - InstanceAdvancedSettings: item.InstanceAdvancedSettings, - } - if item.CreatedTime != nil { - instanceInfo.CreatedTime = *item.CreatedTime - } - if item.NodePoolId != nil { - instanceInfo.NodePoolId = *item.NodePoolId - } - if item.LanIP != nil { - instanceInfo.LanIp = *item.LanIP - } - if instanceInfo.InstanceRole == TKE_ROLE_WORKER { - workers = append(workers, instanceInfo) - } else { - masters = append(masters, instanceInfo) - } - } - } - - return -} - -func (me *TkeService) DescribeClusters(ctx context.Context, id string, name string) (clusterInfos []ClusterInfo, errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClustersRequest() - - defer 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 id != "" && name != "" { - errRet = fmt.Errorf("cluster_id, cluster_name only one can be set one") - return - } - - if id != "" { - request.ClusterIds = []*string{&id} - } - - if name != "" { - filter := &tke.Filter{ - Name: helper.String("ClusterName"), - Values: []*string{&name}, - } - request.Filters = []*tke.Filter{filter} - } - - response, err := me.client.UseTkeClient().DescribeClusters(request) - - if err != nil { - errRet = err - return - } - - lenClusters := len(response.Response.Clusters) - - if lenClusters == 0 { - return - } - clusterInfos = make([]ClusterInfo, 0, lenClusters) - - for index := range response.Response.Clusters { - cluster := response.Response.Clusters[index] - var clusterInfo ClusterInfo - - clusterInfo.ClusterId = *cluster.ClusterId - clusterInfo.ClusterOs = *cluster.ClusterOs - clusterInfo.ClusterVersion = *cluster.ClusterVersion - clusterInfo.ClusterDescription = *cluster.ClusterDescription - clusterInfo.ClusterName = *cluster.ClusterName - clusterInfo.ClusterStatus = *cluster.ClusterStatus - clusterInfo.ClusterLevel = cluster.ClusterLevel - clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel - - clusterInfo.ProjectId = int64(*cluster.ProjectId) - clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId - clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) - - clusterInfo.IgnoreClusterCidrConflict = *cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict - clusterInfo.ClusterCidr = *cluster.ClusterNetworkSettings.ClusterCIDR - clusterInfo.MaxClusterServiceNum = int64(*cluster.ClusterNetworkSettings.MaxClusterServiceNum) - clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) - - clusterInfo.MaxNodePodNum = int64(*cluster.ClusterNetworkSettings.MaxNodePodNum) - clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) - clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs - clusterInfo.CreatedTime = *cluster.CreatedTime - - projectMap, err := helper.JsonToMap(*cluster.Property) - if err != nil { - errRet = err - return - } - if projectMap["VpcCniType"] != nil { - vpcCniType := projectMap["VpcCniType"].(string) - clusterInfo.VpcCniType = vpcCniType - } - - if len(cluster.TagSpecification) > 0 { - clusterInfo.Tags = make(map[string]string) - for _, tag := range cluster.TagSpecification[0].Tags { - clusterInfo.Tags[*tag.Key] = *tag.Value - } - } - - clusterInfos = append(clusterInfos, clusterInfo) - } - return -} - -func (me *TkeService) DescribeCluster(ctx context.Context, id string) ( - clusterInfo ClusterInfo, - has bool, - errRet error, -) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClustersRequest() - - defer 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.ClusterIds = []*string{&id} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusters(request) - - if err != nil { - errRet = err - return - } - - if len(response.Response.Clusters) == 0 { - return - } - - has = true - cluster := response.Response.Clusters[0] - clusterInfo.ClusterId = *cluster.ClusterId - clusterInfo.ClusterOs = *cluster.ClusterOs - clusterInfo.ClusterVersion = *cluster.ClusterVersion - clusterInfo.ClusterDescription = *cluster.ClusterDescription - clusterInfo.ClusterName = *cluster.ClusterName - clusterInfo.ClusterStatus = *cluster.ClusterStatus - clusterInfo.ClusterLevel = cluster.ClusterLevel - clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel - - clusterInfo.ProjectId = int64(*cluster.ProjectId) - clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId - clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) - - clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) - clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs - clusterInfo.Property = helper.PString(cluster.Property) - clusterInfo.OsCustomizeType = helper.PString(cluster.OsCustomizeType) - clusterInfo.ContainerRuntime = helper.PString(cluster.ContainerRuntime) - clusterInfo.DeletionProtection = helper.PBool(cluster.DeletionProtection) - clusterInfo.RuntimeVersion = helper.PString(cluster.RuntimeVersion) - if cluster.ClusterNetworkSettings != nil { - clusterInfo.KubeProxyMode = helper.PString(cluster.ClusterNetworkSettings.KubeProxyMode) - clusterInfo.IgnoreClusterCidrConflict = helper.PBool(cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict) - clusterInfo.ClusterCidr = helper.PString(cluster.ClusterNetworkSettings.ClusterCIDR) - clusterInfo.MaxClusterServiceNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxClusterServiceNum)) - clusterInfo.MaxNodePodNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxNodePodNum)) - clusterInfo.ServiceCIDR = helper.PString(cluster.ClusterNetworkSettings.ServiceCIDR) - } - clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) - - projectMap, err := helper.JsonToMap(*cluster.Property) - if err != nil { - errRet = err - return - } - if projectMap["VpcCniType"] != nil { - vpcCniType := projectMap["VpcCniType"].(string) - clusterInfo.VpcCniType = vpcCniType - } - if projectMap["NetworkType"] != nil { - networkType := projectMap["NetworkType"].(string) - clusterInfo.NetworkType = networkType - } - - if len(cluster.TagSpecification) > 0 { - clusterInfo.Tags = make(map[string]string) - for _, tag := range cluster.TagSpecification[0].Tags { - clusterInfo.Tags[*tag.Key] = *tag.Value - } - } - - return -} - -func (me *TkeService) DescribeClusterCommonNames(ctx context.Context, request *tke.DescribeClusterCommonNamesRequest) (commonNames []*tke.CommonName, 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.UseTkeClient().DescribeClusterCommonNames(request) - - if err != nil { - errRet = err - return - } - - commonNames = response.Response.CommonNames - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *TkeService) DescribeClusterLevelAttribute(ctx context.Context, id string) (clusterLevels []*tke.ClusterLevelAttribute, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterLevelAttributeRequest() - defer 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 id != "" { - request.ClusterID = &id - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterLevelAttribute(request) - - if err != nil { - errRet = err - return - } - - clusterLevels = 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 *TkeService) DescribeClusterConfig(ctx context.Context, id string, isPublic bool) (config string, errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterKubeconfigRequest() - if isPublic { - request.IsExtranet = &isPublic - } - - defer 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.ClusterId = &id - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterKubeconfig(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - return - } - - config = *response.Response.Kubeconfig - return -} - -func (me *TkeService) GetUpgradeInstanceResult(ctx context.Context, id string) ( - done bool, - errRet error, -) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewGetUpgradeInstanceProgressRequest() - - defer 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.ClusterId = &id - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().GetUpgradeInstanceProgress(request) - - if err != nil { - errRet = err - return - } - - lifeState := *response.Response.LifeState - - // all instances success, lifeState=done - if lifeState == "done" { - return true, nil - } else if lifeState != "process" { - return false, fmt.Errorf("upgrade instances failed, tke response lifeState is:%s", lifeState) - } - - // parent lifeState=process, check whether all instances in processing. - for _, inst := range response.Response.Instances { - if *inst.LifeState == "done" || *inst.LifeState == "pending" { - continue - } - if *inst.LifeState != "process" { - return false, fmt.Errorf("upgrade instances failed, "+ - "instanceId:%s, lifeState is:%s", *inst.InstanceID, *inst.LifeState) - } - // instance lifeState=process, check whether failed or not. - for _, detail := range inst.Detail { - if *detail.LifeState == "failed" { - return false, fmt.Errorf("upgrade instances failed, "+ - "instanceId:%s, detail.lifeState is:%s", *inst.InstanceID, *detail.LifeState) - } - } - } - - return -} - -func (me *TkeService) CreateCluster(ctx context.Context, - basic ClusterBasicSetting, - advanced ClusterAdvancedSettings, - cvms RunInstancesForNode, - iAdvanced InstanceAdvancedSettings, - cidrSetting ClusterCidrSettings, - tags map[string]string, - existedInstance []*tke.ExistedInstancesForNode, - overrideSettings *OverrideSettings, - iDiskMountSettings []*tke.InstanceDataDiskMountSetting, - extensionAddons []*tke.ExtensionAddon, -) (id string, errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewCreateClusterRequest() - - defer 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.ClusterBasicSettings = &tke.ClusterBasicSettings{} - request.ClusterBasicSettings.ClusterOs = &basic.ClusterOs - request.ClusterBasicSettings.ClusterVersion = &basic.ClusterVersion - request.ClusterBasicSettings.ProjectId = &basic.ProjectId - request.ClusterBasicSettings.VpcId = &basic.VpcId - request.ClusterBasicSettings.ClusterDescription = &basic.ClusterDescription - request.ClusterBasicSettings.ClusterName = &basic.ClusterName - request.ClusterBasicSettings.OsCustomizeType = &basic.ClusterOsType - request.ClusterBasicSettings.ClusterLevel = basic.ClusterLevel - if basic.AutoUpgradeClusterLevel != nil { - request.ClusterBasicSettings.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ - IsAutoUpgrade: basic.AutoUpgradeClusterLevel, - } - } - if basic.SubnetId != "" { - request.ClusterBasicSettings.SubnetId = &basic.SubnetId - } - for k, v := range tags { - if len(request.ClusterBasicSettings.TagSpecification) == 0 { - request.ClusterBasicSettings.TagSpecification = []*tke.TagSpecification{{ - ResourceType: helper.String("cluster"), - }} - } - - request.ClusterBasicSettings.TagSpecification[0].Tags = append(request.ClusterBasicSettings.TagSpecification[0].Tags, &tke.Tag{ - Key: helper.String(k), - Value: helper.String(v), - }) - } - - request.ClusterAdvancedSettings = &tke.ClusterAdvancedSettings{} - request.ClusterAdvancedSettings.IPVS = &advanced.Ipvs - request.ClusterAdvancedSettings.AsEnabled = &advanced.AsEnabled - request.ClusterAdvancedSettings.ContainerRuntime = &advanced.ContainerRuntime - request.ClusterAdvancedSettings.RuntimeVersion = &advanced.RuntimeVersion - request.ClusterAdvancedSettings.NodeNameType = &advanced.NodeNameType - request.ClusterAdvancedSettings.EnableCustomizedPodCIDR = &advanced.EnableCustomizedPodCIDR - request.ClusterAdvancedSettings.BasePodNumber = &advanced.BasePodNumber - request.ClusterAdvancedSettings.ExtraArgs = &tke.ClusterExtraArgs{ - KubeAPIServer: common.StringPtrs(advanced.ExtraArgs.KubeAPIServer), - KubeControllerManager: common.StringPtrs(advanced.ExtraArgs.KubeControllerManager), - KubeScheduler: common.StringPtrs(advanced.ExtraArgs.KubeScheduler), - } - request.ClusterAdvancedSettings.NetworkType = &advanced.NetworkType - request.ClusterAdvancedSettings.IsNonStaticIpMode = &advanced.IsNonStaticIpMode - request.ClusterAdvancedSettings.DeletionProtection = &advanced.DeletionProtection - request.ClusterAdvancedSettings.KubeProxyMode = &advanced.KubeProxyMode - request.ClusterAdvancedSettings.VpcCniType = &advanced.VpcCniType - - request.InstanceAdvancedSettings = &tke.InstanceAdvancedSettings{} - request.InstanceAdvancedSettings.MountTarget = &iAdvanced.MountTarget - request.InstanceAdvancedSettings.DockerGraphPath = &iAdvanced.DockerGraphPath - request.InstanceAdvancedSettings.UserScript = &iAdvanced.UserScript - request.InstanceAdvancedSettings.Unschedulable = &iAdvanced.Unschedulable - request.InstanceAdvancedSettings.DesiredPodNumber = &iAdvanced.DesiredPodNum - if len(iAdvanced.ExtraArgs.Kubelet) > 0 { - request.InstanceAdvancedSettings.ExtraArgs = &iAdvanced.ExtraArgs - } - - if len(iAdvanced.Labels) > 0 { - request.InstanceAdvancedSettings.Labels = iAdvanced.Labels - } - - if len(iAdvanced.DataDisks) > 0 { - request.InstanceAdvancedSettings.DataDisks = iAdvanced.DataDisks - } - - if len(extensionAddons) > 0 { - request.ExtensionAddons = extensionAddons - } - - if overrideSettings != nil { - if len(overrideSettings.Master)+len(overrideSettings.Work) > 0 && - len(overrideSettings.Master)+len(overrideSettings.Work) != (len(cvms.Master)+len(cvms.Work)) { - return "", fmt.Errorf("len(overrideSettings) != (len(cvms.Master)+len(cvms.Work))") - } - } - - request.RunInstancesForNode = []*tke.RunInstancesForNode{} - - if len(cvms.Master) != 0 { - - var node tke.RunInstancesForNode - node.NodeRole = helper.String(TKE_ROLE_MASTER_ETCD) - node.RunInstancesPara = []*string{} - request.ClusterType = helper.String(TKE_DEPLOY_TYPE_INDEPENDENT) - for v := range cvms.Master { - node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Master[v]) - if overrideSettings != nil && len(overrideSettings.Master) != 0 { - node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Master[v]) - } - } - request.RunInstancesForNode = append(request.RunInstancesForNode, &node) - - } else { - request.ClusterType = helper.String(TKE_DEPLOY_TYPE_MANAGED) - } - - if len(cvms.Work) != 0 { - var node tke.RunInstancesForNode - node.NodeRole = helper.String(TKE_ROLE_WORKER) - node.RunInstancesPara = []*string{} - for v := range cvms.Work { - node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Work[v]) - if overrideSettings != nil && len(overrideSettings.Work) != 0 { - node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Work[v]) - } - } - request.RunInstancesForNode = append(request.RunInstancesForNode, &node) - } - - if len(iDiskMountSettings) != 0 { - request.InstanceDataDiskMountSettings = iDiskMountSettings - } - - request.ClusterCIDRSettings = &tke.ClusterCIDRSettings{} - - maxNodePodNum := uint64(cidrSetting.MaxNodePodNum) - request.ClusterCIDRSettings.MaxNodePodNum = &maxNodePodNum - - maxClusterServiceNum := uint64(cidrSetting.MaxClusterServiceNum) - request.ClusterCIDRSettings.MaxClusterServiceNum = &maxClusterServiceNum - request.ClusterCIDRSettings.ClusterCIDR = &cidrSetting.ClusterCidr - request.ClusterCIDRSettings.IgnoreClusterCIDRConflict = &cidrSetting.IgnoreClusterCidrConflict - request.ClusterCIDRSettings.ServiceCIDR = &cidrSetting.ServiceCIDR - request.ClusterCIDRSettings.EniSubnetIds = common.StringPtrs(cidrSetting.EniSubnetIds) - request.ClusterCIDRSettings.ClaimExpiredSeconds = &cidrSetting.ClaimExpiredSeconds - - if len(existedInstance) > 0 { - request.ExistedInstancesForNode = existedInstance - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateCluster(request) - - if err != nil { - errRet = err - return - } - - id = *response.Response.ClusterId - return -} - -func (me *TkeService) CreateClusterInstances(ctx context.Context, - id string, runInstancePara string, - iAdvanced tke.InstanceAdvancedSettings) (instanceIds []string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewCreateClusterInstancesRequest() - - defer 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.ClusterId = &id - request.RunInstancePara = &runInstancePara - - request.InstanceAdvancedSettings = &iAdvanced - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateClusterInstances(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("CreateClusterInstances return nil response") - return - } - - instanceIds = make([]string, 0, len(response.Response.InstanceIdSet)) - - for _, v := range response.Response.InstanceIdSet { - - instanceIds = append(instanceIds, *v) - } - return -} - -func (me *TkeService) CheckOneOfClusterNodeReady(ctx context.Context, clusterId string, mustHaveWorkers bool) error { - return resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { - _, workers, err := me.DescribeClusterInstances(ctx, clusterId) - if err != nil { - return tccommon.RetryError(err) - } - - // check serverless node - virtualNodes, err := me.DescribeClusterVirtualNode(ctx, clusterId) - if err != nil { - return tccommon.RetryError(err) - } - - if len(workers) == 0 && len(virtualNodes) == 0 { - if mustHaveWorkers { - return resource.RetryableError(fmt.Errorf("waiting for workers created")) - } - return nil - } - - for i := range workers { - worker := workers[i] - if worker.InstanceState == "running" { - return nil - } - } - for i := range virtualNodes { - virtualNode := virtualNodes[i] - if virtualNode.Phase != nil && *virtualNode.Phase == "Running" { - return nil - } - } - - return resource.RetryableError(fmt.Errorf("cluster %s waiting for one of the workers ready", clusterId)) - }) -} - -/* -if cluster is creating, return error:TencentCloudSDKError] Code=InternalError.ClusterState -*/ -func (me *TkeService) DeleteClusterInstances(ctx context.Context, id string, instanceIds []string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteClusterInstancesRequest() - - defer 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.ClusterId = &id - request.InstanceIds = make([]*string, 0, len(instanceIds)) - - for index := range instanceIds { - request.InstanceIds = append(request.InstanceIds, &instanceIds[index]) - } - - request.InstanceDeleteMode = helper.String("terminate") - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterInstances(request) - return err -} - -func (me *TkeService) DeleteCluster(ctx context.Context, id string) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteClusterRequest() - - defer 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.ClusterId = &id - request.InstanceDeleteMode = helper.String("terminate") - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteCluster(request) - - return err -} - -func (me *TkeService) DescribeClusterSecurity(ctx context.Context, id string) (ret *tke.DescribeClusterSecurityResponse, errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterSecurityRequest() - - defer 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.ClusterId = &id - - return me.client.UseTkeClient().DescribeClusterSecurity(request) -} - -func (me *TkeService) CreateClusterAsGroup(ctx context.Context, id, groupPara, configPara string, labels []*tke.Label, iAdvanced InstanceAdvancedSettings) (asGroupId string, errRet error) { - return "", fmt.Errorf("Cluster AS Group has OFFLINE") -} - -func (me *TkeService) DescribeClusterAsGroupsByGroupId(ctx context.Context, id string, groupId string) (clusterAsGroupSet *tke.ClusterAsGroup, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterAsGroupsRequest() - - request.ClusterId = &id - request.AutoScalingGroupIds = []*string{&groupId} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterAsGroups(request) - - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), err.Error()) - errRet = err - return - } - - if len(response.Response.ClusterAsGroupSet) > 0 { - clusterAsGroupSet = response.Response.ClusterAsGroupSet[0] - } - return -} - -func (me *TkeService) DeleteClusterAsGroups(ctx context.Context, id, asGroupId string) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteClusterAsGroupsRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.AutoScalingGroupIds = []*string{&asGroupId} - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterAsGroups(request) - if err != nil { - errRet = err - } - return -} - -/* -open internet access -*/ -func (me *TkeService) CreateClusterEndpoint(ctx context.Context, id string, subnetId, securityGroupId string, internet bool, domain string, extensiveParameters string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewCreateClusterEndpointRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - request.IsExtranet = &internet - - if subnetId != "" { - request.SubnetId = &subnetId - } - - if securityGroupId != "" && internet { - request.SecurityGroup = &securityGroupId - } - - if domain != "" { - request.Domain = helper.String(domain) - } - - if extensiveParameters != "" { - request.ExtensiveParameters = helper.String(extensiveParameters) - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().CreateClusterEndpoint(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeClusterEndpointStatus(ctx context.Context, id string, isExtranet bool) (status string, message string, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeClusterEndpointStatusRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.IsExtranet = &isExtranet - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterEndpointStatus(request) - if err != nil { - errRet = err - return - } - if response.Response == nil || response.Response.Status == nil { - errRet = fmt.Errorf("sdk DescribeClusterEndpointStatus return empty status") - return - } - status = *response.Response.Status - message = status - return -} -func (me *TkeService) DescribeClusterEndpoints(ctx context.Context, id string) (response tke.DescribeClusterEndpointsResponseParams, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeClusterEndpointsRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().DescribeClusterEndpoints(request) - if err != nil { - errRet = err - return - } - if resp.Response == nil { - errRet = fmt.Errorf("sdk DescribeClusterEndpoints return empty") - return - } - - return *resp.Response, errRet -} - -func (me *TkeService) DeleteClusterEndpoint(ctx context.Context, id string, isInternet bool) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteClusterEndpointRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.IsExtranet = &isInternet - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().DeleteClusterEndpoint(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterEndpointSP(ctx context.Context, id string, securityPolicies []string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyClusterEndpointSPRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SecurityPolicies = helper.Strings(securityPolicies) - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterEndpointSG(ctx context.Context, id string, securityGroup string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyClusterEndpointSPRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SecurityGroup = &securityGroup - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterAttribute(ctx context.Context, id string, projectId int64, clusterName, clusterDesc, clusterLevel string, autoUpgradeClusterLevel bool) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyClusterAttributeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.ProjectId = &projectId - request.ClusterName = &clusterName - request.ClusterDesc = &clusterDesc - - if clusterLevel != "" { - request.ClusterLevel = &clusterLevel - } - - request.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ - IsAutoUpgrade: &autoUpgradeClusterLevel, - } - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().ModifyClusterAttribute(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) EnableVpcCniNetworkType(ctx context.Context, id string, vpcCniType string, enableStaticIp bool, subnets []string, expiredSeconds uint64) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewEnableVpcCniNetworkTypeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - request.ClusterId = &id - request.VpcCniType = &vpcCniType - request.EnableStaticIp = &enableStaticIp - request.Subnets = common.StringPtrs(subnets) - request.ExpiredSeconds = &expiredSeconds - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().EnableVpcCniNetworkType(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DescribeEnableVpcCniProgress(ctx context.Context, id string) (status, message string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeEnableVpcCniProgressRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeEnableVpcCniProgress(request) - if err != nil { - errRet = err - return - } - - status = *response.Response.Status - message = *response.Response.ErrorMessage - return -} - -func (me *TkeService) DisableVpcCniNetworkType(ctx context.Context, id string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDisableVpcCniNetworkTypeRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().DisableVpcCniNetworkType(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) AddVpcCniSubnets(ctx context.Context, id string, subnets []string, vpcId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewAddVpcCniSubnetsRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.SubnetIds = common.StringPtrs(subnets) - request.VpcId = &vpcId - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().AddVpcCniSubnets(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clusterVersion string, extraArgs interface{}) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewUpdateClusterVersionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - if extraArgs != nil && len(extraArgs.([]interface{})) > 0 { - // the first elem is in use - extraInterface := extraArgs.([]interface{}) - extraMap := extraInterface[0].(map[string]interface{}) - - kas := make([]*string, 0) - if kaArgs, exist := extraMap["kube_apiserver"]; exist { - args := kaArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kas = append(kas, &str) - } - } - kcms := make([]*string, 0) - if kcmArgs, exist := extraMap["kube_controller_manager"]; exist { - args := kcmArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kcms = append(kcms, &str) - } - } - kss := make([]*string, 0) - if ksArgs, exist := extraMap["kube_scheduler"]; exist { - args := ksArgs.([]interface{}) - for index := range args { - str := args[index].(string) - kss = append(kss, &str) - } - } - - request.ExtraArgs = &tke.ClusterExtraArgs{ - KubeAPIServer: kas, - KubeControllerManager: kcms, - KubeScheduler: kss, - } - } - - request.ClusterId = &id - request.DstVersion = &clusterVersion - - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().UpdateClusterVersion(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DescribeKubernetesAvailableClusterVersionsByFilter(ctx context.Context, param map[string]interface{}) (availableClusterVersions *tke.DescribeAvailableClusterVersionResponseParams, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = tke.NewDescribeAvailableClusterVersionRequest() - ) - - defer 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 == "cluster_id" { - request.ClusterId = v.(*string) - } - if k == "cluster_ids" { - request.ClusterIds = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response != nil { - availableClusterVersions = response.Response - } - return -} - -func (me *TkeService) CheckClusterVersion(ctx context.Context, id string, clusterVersion string) (isOk bool, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeAvailableClusterVersionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) - if err != nil { - errRet = err - return - } - - if resp == nil || resp.Response == nil || resp.Response.Versions == nil { - return - } - versions := resp.Response.Versions - for _, v := range versions { - if *v == clusterVersion { - isOk = true - return - } - } - - return -} - -func (me *TkeService) CheckInstancesUpgradeAble(ctx context.Context, id string, upgradeType string) (instanceIds []string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewCheckInstancesUpgradeAbleRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.UpgradeType = &upgradeType - ratelimit.Check(request.GetAction()) - - resp, err := me.client.UseTkeClient().CheckInstancesUpgradeAble(request) - if err != nil { - errRet = err - return - } - - if resp == nil || resp.Response == nil || resp.Response.UpgradeAbleInstances == nil { - return - } - for _, inst := range resp.Response.UpgradeAbleInstances { - instanceIds = append(instanceIds, *inst.InstanceId) - } - - return -} - -func (me *TkeService) UpgradeClusterInstances(ctx context.Context, id string, upgradeType string, instanceIds []string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewUpgradeClusterInstancesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - op := "create" - request.Operation = &op - request.ClusterId = &id - request.UpgradeType = &upgradeType - request.InstanceIds = helper.Strings(instanceIds) - ratelimit.Check(request.GetAction()) - - _, err := me.client.UseTkeClient().UpgradeClusterInstances(request) - if err != nil { - errRet = err - return - } - - return -} - -func (me *TkeService) DescribeImages(ctx context.Context) (imageIds []string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeImagesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeImages(request) - if err != nil { - errRet = err - return - } - - for _, image := range response.Response.ImageInstanceSet { - imageIds = append(imageIds, *image.ImageId) - } - return -} - -func GetTkeLabels(d *schema.ResourceData, k string) []*tke.Label { - labels := make([]*tke.Label, 0) - if raw, ok := d.GetOk(k); ok { - for k, v := range raw.(map[string]interface{}) { - labels = append(labels, &tke.Label{Name: helper.String(k), Value: helper.String(v.(string))}) - } - } - return labels -} - -func GetTkeTaints(d *schema.ResourceData, k string) []*tke.Taint { - taints := make([]*tke.Taint, 0) - if raw, ok := d.GetOk(k); ok { - for _, v := range raw.([]interface{}) { - vv := v.(map[string]interface{}) - taints = append(taints, &tke.Taint{Key: helper.String(vv["key"].(string)), Value: helper.String(vv["value"].(string)), Effect: helper.String(vv["effect"].(string))}) - } - } - return taints -} - -func (me *TkeService) ModifyClusterAsGroupAttribute(ctx context.Context, id, asGroupId string, maxSize, minSize int64) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyClusterAsGroupAttributeRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.ClusterAsGroupAttribute = &tke.ClusterAsGroupAttribute{ - AutoScalingGroupId: &asGroupId, - AutoScalingGroupRange: &tke.AutoScalingGroupRange{ - MaxSize: &maxSize, - MinSize: &minSize, - }, - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterAsGroupAttribute(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) CreateClusterNodePool(ctx context.Context, clusterId, name, groupPara, configPara string, enableAutoScale bool, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, iAdvanced tke.InstanceAdvancedSettings, deletionProtection bool) (asGroupId string, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewCreateClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.Name = &name - request.AutoScalingGroupPara = &groupPara - request.LaunchConfigurePara = &configPara - request.InstanceAdvancedSettings = &iAdvanced - request.EnableAutoscale = &enableAutoScale - request.DeletionProtection = &deletionProtection - request.NodePoolOs = &nodeOs - if nodeOsType != "" { - request.OsCustomizeType = &nodeOsType - } - - if len(labels) > 0 { - request.Labels = labels - } - - if len(taints) > 0 { - request.Taints = taints - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().CreateClusterNodePool(request) - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.NodePoolId == nil { - errRet = fmt.Errorf("CreateClusterNodePool return nil response") - return - } - - asGroupId = *response.Response.NodePoolId - return -} - -func (me *TkeService) ModifyClusterNodePool(ctx context.Context, clusterId, nodePoolId string, name string, enableAutoScale bool, minSize int64, maxSize int64, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, tags map[string]string, deletionProtection bool) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.Taints = taints - request.Labels = labels - request.EnableAutoscale = &enableAutoScale - request.DeletionProtection = &deletionProtection - request.MaxNodesNum = &maxSize - request.MinNodesNum = &minSize - request.Name = &name - request.OsName = &nodeOs - request.OsCustomizeType = &nodeOsType - - if len(labels) > 0 { - request.Labels = labels - } - - if len(tags) > 0 { - for k, v := range tags { - key := k - val := v - request.Tags = append(request.Tags, &tke.Tag{ - Key: &key, - Value: &val, - }) - } - } - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterNodePool(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterNodePoolDesiredCapacity(ctx context.Context, clusterId, nodePoolId string, desiredCapacity int64) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyNodePoolDesiredCapacityAboutAsgRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.DesiredCapacity = &desiredCapacity - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyNodePoolDesiredCapacityAboutAsg(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) ModifyClusterNodePoolInstanceTypes(ctx context.Context, clusterId, nodePoolId string, instanceTypes []*string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewModifyNodePoolInstanceTypesRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &clusterId - request.NodePoolId = &nodePoolId - request.InstanceTypes = instanceTypes - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyNodePoolInstanceTypes(request) - if err != nil { - errRet = err - return - } - return -} - -func (me *TkeService) DeleteClusterNodePool(ctx context.Context, id, nodePoolId string, deleteKeepInstance bool) (errRet error) { - - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteClusterNodePoolRequest() - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - request.ClusterId = &id - request.NodePoolIds = []*string{&nodePoolId} - request.KeepInstance = &deleteKeepInstance - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteClusterNodePool(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeNodePool(ctx context.Context, clusterId string, nodePoolId string) ( - nodePool *tke.NodePool, - has bool, - errRet error, -) { - - logId := tccommon.GetLogId(ctx) - //the error code of cluster not exist is InternalError - //check cluster exist first - _, clusterHas, err := me.DescribeCluster(ctx, clusterId) - if err != nil { - errRet = err - return - } - if !clusterHas { - return - } - - request := tke.NewDescribeClusterNodePoolDetailRequest() - - defer 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.ClusterId = helper.String(clusterId) - request.NodePoolId = helper.String(nodePoolId) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterNodePoolDetail(request) - - if err != nil { - errRet = err - return - } - - if response.Response.NodePool == nil { - return - } - - has = true - nodePool = response.Response.NodePool - - return -} - -// node pool global config -func (me *TkeService) ModifyClusterNodePoolGlobalConfig(ctx context.Context, request *tke.ModifyClusterAsGroupOptionAttributeRequest) (errRet error) { - logId := tccommon.GetLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().ModifyClusterAsGroupOptionAttribute(request) - if err != nil { - errRet = err - } - return -} - -func (me *TkeService) DescribeClusterNodePoolGlobalConfig(ctx context.Context, clusterId string) ( - npGlobalConfig *tke.ClusterAsGroupOption, - errRet error, -) { - - logId := tccommon.GetLogId(ctx) - //the error code of cluster not exist is InternalError - //check cluster exist first - _, clusterHas, err := me.DescribeCluster(ctx, clusterId) - if err != nil { - errRet = err - return - } - if !clusterHas { - return - } - - request := tke.NewDescribeClusterAsGroupOptionRequest() - - defer 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.ClusterId = helper.String(clusterId) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterAsGroupOption(request) - - if err != nil { - errRet = err - return - } - - if response == nil || response.Response == nil || response.Response.ClusterAsGroupOption == nil { - return - } - - npGlobalConfig = response.Response.ClusterAsGroupOption - - return -} - -func (me *TkeService) WaitForAuthenticationOptionsUpdateSuccess(ctx context.Context, id string) (info *tke.ServiceAccountAuthenticationOptions, oidc *tke.OIDCConfigAuthenticationOptions, errRet error) { - err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { - options, state, config, err := me.DescribeClusterAuthenticationOptions(ctx, id) - info = options - oidc = config - - if err != nil { - return resource.NonRetryableError(err) - } - - if state == "Success" { - return nil - } - - if state == "Updating" { - return resource.RetryableError(fmt.Errorf("state is %s, retry", state)) - } - - return resource.NonRetryableError(fmt.Errorf("update failed: %s", state)) - }) - - if err != nil { - errRet = err - return - } - return -} - -// DescribeClusterAuthenticationOptions -// Field `ServiceAccounts.AutoCreateDiscoveryAnonymousAuth` will always return null by design -func (me *TkeService) DescribeClusterAuthenticationOptions(ctx context.Context, id string) (options *tke.ServiceAccountAuthenticationOptions, state string, oidcConfig *tke.OIDCConfigAuthenticationOptions, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterAuthenticationOptionsRequest() - request.ClusterId = helper.String(id) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeClusterAuthenticationOptions(request) - if err != nil { - errRet = err - } - - if res.Response != nil { - state = *res.Response.LatestOperationState - options = res.Response.ServiceAccounts - oidcConfig = res.Response.OIDCConfig - } - - return -} - -func (me *TkeService) ModifyClusterAuthenticationOptions(ctx context.Context, request *tke.ModifyClusterAuthenticationOptionsRequest) (errRet error) { - logId := tccommon.GetLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().ModifyClusterAuthenticationOptions(request) - if err != nil { - errRet = 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 *TkeService) ModifyDeletionProtection(ctx context.Context, id string, enable bool) (errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - action string - ) - - if enable { - request := tke.NewEnableClusterDeletionProtectionRequest() - request.ClusterId = &id - action = request.GetAction() - ratelimit.Check(action) - response, err := me.client.UseTkeClient().EnableClusterDeletionProtection(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - } else { - request := tke.NewDisableClusterDeletionProtectionRequest() - request.ClusterId = &id - action = request.GetAction() - ratelimit.Check(action) - response, err := me.client.UseTkeClient().DisableClusterDeletionProtection(request) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - } - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", - logId, action, errRet.Error()) - } - }() - - return -} - -func (me *TkeService) AcquireClusterAdminRole(ctx context.Context, clusterId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewAcquireClusterAdminRoleRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().AcquireClusterAdminRole(request) - - if err != nil { - 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 *TkeService) DescribeExternalNodeSupportConfig(ctx context.Context, clusterId string) (resp *tke.DescribeExternalNodeSupportConfigResponseParams, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeExternalNodeSupportConfigRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeExternalNodeSupportConfig(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response, nil -} - -func (me *TkeService) DescribeClusterExtraArgs(ctx context.Context, clusterId string) (extraArgs *tke.ClusterExtraArgs, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeClusterExtraArgsRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeClusterExtraArgs(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response.ClusterExtraArgs, nil -} - -func (me *TkeService) DescribeIPAMD(ctx context.Context, clusterId string) (resp *tke.DescribeIPAMDResponseParams, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeIPAMDRequest() - defer 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.ClusterId = &clusterId - - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeIPAMD(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response, nil - -} - -func (me *TkeService) DescribeLogSwitches(ctx context.Context, clusterId string) (resp []*tke.Switch, errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDescribeLogSwitchesRequest() - defer 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.ClusterIds = helper.StringsStringsPoint([]string{clusterId}) - request.ClusterType = helper.String("tke") - ratelimit.Check(request.GetAction()) - res, err := me.client.UseTkeClient().DescribeLogSwitches(request) - - if err != nil { - errRet = err - return - } - if res == nil || res.Response == nil && res.Response.RequestId == nil { - return nil, errors.New("invalid response") - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) - - return res.Response.SwitchSet, nil -} - -func (me *TkeService) SwitchLogAgent(ctx context.Context, clusterId, rootDir string, enable bool) error { - if enable { - request := tke.NewInstallLogAgentRequest() - request.ClusterId = &clusterId - if rootDir != "" { - request.KubeletRootDir = &rootDir - } - return me.InstallLogAgent(ctx, request) - } - request := tke.NewUninstallLogAgentRequest() - request.ClusterId = &clusterId - return me.UninstallLogAgent(ctx, request) -} - -func (me *TkeService) SwitchEventPersistence(ctx context.Context, clusterId, logSetId, topicId string, - enable, deleteEventLog bool) error { - if enable { - request := tke.NewEnableEventPersistenceRequest() - request.ClusterId = &clusterId - if logSetId != "" { - request.LogsetId = &logSetId - } - if topicId != "" { - request.TopicId = &topicId - } - return me.EnableEventPersistence(ctx, request) - } - - request := tke.NewDisableEventPersistenceRequest() - request.ClusterId = &clusterId - request.DeleteLogSetAndTopic = &deleteEventLog - return me.DisableEventPersistence(ctx, request) -} - -func (me *TkeService) SwitchClusterAudit(ctx context.Context, clusterId, logSetId, topicId string, - enable, deleteAuditLog bool) error { - if enable { - request := tke.NewEnableClusterAuditRequest() - request.ClusterId = &clusterId - if logSetId != "" { - request.LogsetId = &logSetId - } - if topicId != "" { - request.TopicId = &topicId - } - return me.EnableClusterAudit(ctx, request) - } - request := tke.NewDisableClusterAuditRequest() - request.ClusterId = &clusterId - request.DeleteLogSetAndTopic = &deleteAuditLog - return me.DisableClusterAudit(ctx, request) -} - -func (me *TkeService) InstallLogAgent(ctx context.Context, request *tke.InstallLogAgentRequest) (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.UseTkeClient().InstallLogAgent(request) - - if err != nil { - 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 *TkeService) UninstallLogAgent(ctx context.Context, request *tke.UninstallLogAgentRequest) (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.UseTkeClient().UninstallLogAgent(request) - - if err != nil { - 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 *TkeService) EnableEventPersistence(ctx context.Context, request *tke.EnableEventPersistenceRequest) (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.UseTkeClient().EnableEventPersistence(request) - - if err != nil { - 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 *TkeService) DisableEventPersistence(ctx context.Context, request *tke.DisableEventPersistenceRequest) (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.UseTkeClient().DisableEventPersistence(request) - - if err != nil { - code := err.(*sdkErrors.TencentCloudSDKError).Code - if code == "InternalError.KubernetesDeleteOperationError" { - 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 *TkeService) EnableClusterAudit(ctx context.Context, request *tke.EnableClusterAuditRequest) (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.UseTkeClient().EnableClusterAudit(request) - - if err != nil { - 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 *TkeService) DisableClusterAudit(ctx context.Context, request *tke.DisableClusterAuditRequest) (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.UseTkeClient().DisableClusterAudit(request) - - if err != nil { - 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 *TkeService) DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx context.Context, clusterId, nodePoolId string) (instance *tke.VirtualNodePool, has bool, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeClusterVirtualNodePoolsRequest() - request.ClusterId = common.StringPtr(clusterId) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterVirtualNodePools(request) - - if err != nil { - errRet = err - 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 && len(response.Response.NodePoolSet) > 0 { - for _, nodePool := range response.Response.NodePoolSet { - if nodePool != nil && nodePool.NodePoolId != nil && *nodePool.NodePoolId == nodePoolId { - has = true - instance = nodePool - } - } - } - return -} - -func (me *TkeService) CreateClusterVirtualNodePool(ctx context.Context, request *tke.CreateClusterVirtualNodePoolRequest) (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.UseTkeClient().CreateClusterVirtualNodePool(request) - - if err != nil { - errRet = err - return - } - - 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.NodePoolId != nil { - id = *response.Response.NodePoolId - } - - return -} - -func (me *TkeService) DeleteClusterVirtualNodePool(ctx context.Context, request *tke.DeleteClusterVirtualNodePoolRequest) (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.UseTkeClient().DeleteClusterVirtualNodePool(request) - - if err != nil { - 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 *TkeService) ModifyClusterVirtualNodePool(ctx context.Context, request *tke.ModifyClusterVirtualNodePoolRequest) (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.UseTkeClient().ModifyClusterVirtualNodePool(request) - - if err != nil { - 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 *TkeService) DescribeClusterVirtualNode(ctx context.Context, clusterId string) (virtualNodes []tke.VirtualNode, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeClusterVirtualNodeRequest() - request.ClusterId = common.StringPtr(clusterId) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeClusterVirtualNode(request) - - if err != nil { - errRet = err - 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 && len(response.Response.Nodes) > 0 { - for _, node := range response.Response.Nodes { - if node != nil { - virtualNodes = append(virtualNodes, *node) - } - } - } - return -} - -func ModifySecurityServiceOfCvmInNodePool(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, cvmSvc *svccvm.CvmService, client *connectivity.TencentCloudClient, clusterId string, nodePoolId string) error { - logId := tccommon.GetLogId(ctx) - - if d.HasChange("auto_scaling_config.0.enhanced_security_service") { - workersInsIdOfNodePool := make([]string, 0) - _, workers, err := tkeSvc.DescribeClusterInstances(ctx, clusterId) - if err != nil { - return err - } - for _, worker := range workers { - if worker.NodePoolId != "" && worker.NodePoolId == nodePoolId { - workersInsIdOfNodePool = append(workersInsIdOfNodePool, worker.InstanceId) - } - } - - const BatchProcessedInsLimit = 100 // limit 100 items to change each request - var ( - launchConfigRaw []interface{} - dMap map[string]interface{} - ) - if raw, ok := d.GetOk("auto_scaling_config"); ok { - launchConfigRaw = raw.([]interface{}) - dMap = launchConfigRaw[0].(map[string]interface{}) - } - - if v, ok := dMap["enhanced_security_service"]; ok && !v.(bool) { - // uninstall, cwp/DeleteMachine, need uuid - // https://cloud.tencent.com/document/product/296/19844 - for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { - var reqInstanceIds []string - if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { - reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] - } else { - reqInstanceIds = workersInsIdOfNodePool[i:] - } - // get uuid - instanceSet, err := cvmSvc.DescribeInstanceSetByIds(ctx, helper.StrListValToStr(reqInstanceIds)) - if err != nil { - return err - } - // call cwp/DeleteMachine - for _, ins := range instanceSet { - requestDeleteMachine := cwp.NewDeleteMachineRequest() - requestDeleteMachine.Uuid = ins.Uuid - if _, err := client.UseCwpClient().DeleteMachine(requestDeleteMachine); err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, requestDeleteMachine.GetAction(), requestDeleteMachine.ToJsonString(), err.Error()) - return err - } - } - } - } else { - // default is true, install security agent - // tat/InvokeCommand, CommandId=cmd-d8jj2skv, instanceId is enough - // https://cloud.tencent.com/document/product/1340/52678 - for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { - var reqInstanceIds []string - if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { - reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] - } else { - reqInstanceIds = workersInsIdOfNodePool[i:] - } - requestInvokeCommand := tat.NewInvokeCommandRequest() - requestInvokeCommand.InstanceIds = helper.StringsStringsPoint(reqInstanceIds) - requestInvokeCommand.CommandId = helper.String(InstallSecurityAgentCommandId) - requestInvokeCommand.Parameters = helper.String("{}") - requestInvokeCommand.Timeout = helper.Uint64(60) - _, err := client.UseTatClient().InvokeCommand(requestInvokeCommand) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, requestInvokeCommand.GetAction(), requestInvokeCommand.ToJsonString(), err.Error()) - return err - } - } - } - } - return nil -} - -func ModifyClusterInternetOrIntranetAccess(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, - isInternet bool, enable bool, sg string, subnetId string, domain string) error { - - id := d.Id() - var accessType string - if isInternet { - accessType = "cluster internet" - } else { - accessType = "cluster intranet" - } - // open access - if enable { - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - inErr := tkeSvc.CreateClusterEndpoint(ctx, id, subnetId, sg, isInternet, domain, "") - if inErr != nil { - return tccommon.RetryError(inErr) - } - return nil - }) - if err != nil { - return err - } - err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { - status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) - if inErr != nil { - return tccommon.RetryError(inErr) - } - if status == TkeInternetStatusCreating { - return resource.RetryableError( - fmt.Errorf("%s create %s endpoint status still is %s", id, accessType, status)) - } - if status == TkeInternetStatusNotfound || status == TkeInternetStatusCreated { - return nil - } - return resource.NonRetryableError( - fmt.Errorf("%s create %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) - }) - if err != nil { - return err - } - } else { // close access - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - inErr := tkeSvc.DeleteClusterEndpoint(ctx, id, isInternet) - if inErr != nil { - return tccommon.RetryError(inErr) - } - return nil - }) - if err != nil { - return err - } - err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { - status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) - if inErr != nil { - return tccommon.RetryError(inErr) - } - if status == TkeInternetStatusDeleting { - return resource.RetryableError( - fmt.Errorf("%s close %s endpoint status still is %s", id, accessType, status)) - } - if status == TkeInternetStatusNotfound || status == TkeInternetStatusDeleted || status == TkeInternetStatusCreated { - return nil - } - return resource.NonRetryableError( - fmt.Errorf("%s close %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) - }) - if err != nil { - return err - } - } - return nil -} - -func (me *TkeService) createBackupStorageLocation(ctx context.Context, request *tke.CreateBackupStorageLocationRequest) (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.UseTkeClient().CreateBackupStorageLocation(request) - - if err != nil { - 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 *TkeService) describeBackupStorageLocations(ctx context.Context, names []string) (locations []*tke.BackupStorageLocation, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeBackupStorageLocationsRequest() - request.Names = common.StringPtrs(names) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseTkeClient().DescribeBackupStorageLocations(request) - - if err != nil { - errRet = err - 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 && len(response.Response.BackupStorageLocationSet) > 0 { - locations = append(locations, response.Response.BackupStorageLocationSet...) - } - return - -} - -func (me *TkeService) deleteBackupStorageLocation(ctx context.Context, name string) (errRet error) { - logId := tccommon.GetLogId(ctx) - request := tke.NewDeleteBackupStorageLocationRequest() - - defer 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.Name = common.StringPtr(name) - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseTkeClient().DeleteBackupStorageLocation(request) - return err -} - -func (me *TkeService) DescribeTkeEncryptionProtectionById(ctx context.Context, clusterId string) (encryptionProtection *tke.DescribeEncryptionStatusResponseParams, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeEncryptionStatusRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - encryptionProtection = response.Response - return -} - -func (me *TkeService) DeleteTkeEncryptionProtectionById(ctx context.Context, clusterId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := tke.NewDisableEncryptionProtectionRequest() - request.ClusterId = &clusterId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DisableEncryptionProtection(request) - if err != nil { - 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 *TkeService) TkeEncryptionProtectionStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := tccommon.ContextNil - - logId := tccommon.GetLogId(ctx) - - request := tke.NewDescribeEncryptionStatusRequest() - request.ClusterId = helper.String(clusterId) - - var errRet error - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), errRet.Error()) - } - }() - - object, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) - - if err != nil { - return nil, "", err - } - - if err != nil { - errRet = err - return object, "", err - } - - return object, helper.PString(object.Response.Status), nil - } -} - -func (me *TkeService) DescribeKubernetesClusterInstancesByFilter(ctx context.Context, param map[string]interface{}) (clusterInstances []*tke.Instance, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = tke.NewDescribeClusterInstancesRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "InstanceIds" { - request.InstanceIds = v.([]*string) - } - if k == "InstanceRole" { - request.InstanceRole = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tke.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterInstances(request) - if err != nil { - errRet = 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 - } - - clusterInstances = response.Response.InstanceSet - return -} - -func (me *TkeService) DescribeKubernetesClusterNodePoolsByFilter(ctx context.Context, param map[string]interface{}) (clusterNodePools []*tke.NodePool, errRet error) { - var ( - logId = tccommon.GetLogId(ctx) - request = tke.NewDescribeClusterNodePoolsRequest() - ) - - defer 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 == "ClusterId" { - request.ClusterId = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*tke.Filter) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseTkeClient().DescribeClusterNodePools(request) - if err != nil { - errRet = 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.NodePoolSet) < 1 { - return - } - - clusterNodePools = response.Response.NodePoolSet - return -} diff --git a/tencentcloud/services/pls/extension_security_group.go b/tencentcloud/services/pls/extension_security_group.go deleted file mode 100644 index d6d3164b80..0000000000 --- a/tencentcloud/services/pls/extension_security_group.go +++ /dev/null @@ -1,3 +0,0 @@ -package pls - -const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/pls/extension_vpc.go b/tencentcloud/services/pls/extension_vpc.go deleted file mode 100644 index 35ecd8bb88..0000000000 --- a/tencentcloud/services/pls/extension_vpc.go +++ /dev/null @@ -1,339 +0,0 @@ -package pls - -/* -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 ( - ROUTE_TYPE_STATIC = "STATIC" - ROUTE_TYPE_STATIC_ROUTE = "StaticRoute" - ROUTE_TYPE_POLICY = "Policy" -) - -var VPN_CONNECTION_ROUTE_TYPE = []string{ - ROUTE_TYPE_STATIC, - ROUTE_TYPE_STATIC_ROUTE, - ROUTE_TYPE_POLICY, -} - -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/services/pls/resource_tc_vpc_end_point.go b/tencentcloud/services/pls/resource_tc_vpc_end_point.go index 8306f63d4f..3dd6c78da7 100644 --- a/tencentcloud/services/pls/resource_tc_vpc_end_point.go +++ b/tencentcloud/services/pls/resource_tc_vpc_end_point.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -135,7 +136,7 @@ func resourceTencentCloudVpcEndPointRead(d *schema.ResourceData, meta interface{ ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) endPointId := d.Id() @@ -238,7 +239,7 @@ func resourceTencentCloudVpcEndPointDelete(d *schema.ResourceData, meta interfac logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) endPointId := d.Id() if err := service.DeleteVpcEndPointById(ctx, endPointId); err != nil { diff --git a/tencentcloud/services/pls/resource_tc_vpc_end_point_service.go b/tencentcloud/services/pls/resource_tc_vpc_end_point_service.go index b46f8bd73a..ad0477217f 100644 --- a/tencentcloud/services/pls/resource_tc_vpc_end_point_service.go +++ b/tencentcloud/services/pls/resource_tc_vpc_end_point_service.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -142,7 +143,7 @@ func resourceTencentCloudVpcEndPointServiceRead(d *schema.ResourceData, meta int ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) endPointServiceId := d.Id() @@ -264,7 +265,7 @@ func resourceTencentCloudVpcEndPointServiceDelete(d *schema.ResourceData, meta i logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) endPointServiceId := d.Id() if err := service.DeleteVpcEndPointServiceById(ctx, endPointServiceId); err != nil { diff --git a/tencentcloud/services/pls/resource_tc_vpc_end_point_service_white_list.go b/tencentcloud/services/pls/resource_tc_vpc_end_point_service_white_list.go index b1583cb0cc..3d89bde39a 100644 --- a/tencentcloud/services/pls/resource_tc_vpc_end_point_service_white_list.go +++ b/tencentcloud/services/pls/resource_tc_vpc_end_point_service_white_list.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -110,7 +111,7 @@ func resourceTencentCloudVpcEndPointServiceWhiteListRead(d *schema.ResourceData, ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { @@ -210,7 +211,7 @@ func resourceTencentCloudVpcEndPointServiceWhiteListDelete(d *schema.ResourceDat logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svcvpc.NewVpcService(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/services/pls/service_tencentcloud_vpc.go b/tencentcloud/services/pls/service_tencentcloud_vpc.go deleted file mode 100644 index f19057b69f..0000000000 --- a/tencentcloud/services/pls/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8146 +0,0 @@ -package pls - -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 -} - -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 -} -func (me *VpcService) DescribeVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (PeerConnectManager *vpc.PeerConnection, errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewDescribeVpcPeeringConnectionsRequest() - request.PeeringConnectionIds = []*string{&peeringConnectionId} - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DescribeVpcPeeringConnections(request) - if err != nil { - errRet = err - return - } - 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.PeerConnectionSet) < 1 { - return - } - - PeerConnectManager = response.Response.PeerConnectionSet[0] - return -} -func (me *VpcService) DeleteVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewDeleteVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().DeleteVpcPeeringConnection(request) - if err != nil { - 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) DeleteVpcPeerConnectAccecptOrRejectById(ctx context.Context, peeringConnectionId string) (errRet error) { - logId := tccommon.GetLogId(ctx) - - request := vpc.NewRejectVpcPeeringConnectionRequest() - request.PeeringConnectionId = &peeringConnectionId - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s 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().RejectVpcPeeringConnection(request) - if err != nil { - 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/postgresql/data_source_tc_postgresql_instances.go b/tencentcloud/services/postgresql/data_source_tc_postgresql_instances.go index 5560894a8c..2ef2a5c724 100644 --- a/tencentcloud/services/postgresql/data_source_tc_postgresql_instances.go +++ b/tencentcloud/services/postgresql/data_source_tc_postgresql_instances.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" @@ -180,7 +181,7 @@ func dataSourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta i ids := make([]string, 0, len(instanceList)) list := make([]map[string]interface{}, 0, len(instanceList)) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) for _, v := range instanceList { listItem := make(map[string]interface{}) diff --git a/tencentcloud/services/postgresql/extension_redis.go b/tencentcloud/services/postgresql/extension_redis.go deleted file mode 100644 index 959fcf7084..0000000000 --- a/tencentcloud/services/postgresql/extension_redis.go +++ /dev/null @@ -1,95 +0,0 @@ -package postgresql - -// 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/postgresql/extension_tags.go b/tencentcloud/services/postgresql/extension_tags.go deleted file mode 100644 index 6260ebb0fb..0000000000 --- a/tencentcloud/services/postgresql/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package postgresql - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/postgresql/extension_vpc.go b/tencentcloud/services/postgresql/extension_vpc.go deleted file mode 100644 index 8fa91d7c75..0000000000 --- a/tencentcloud/services/postgresql/extension_vpc.go +++ /dev/null @@ -1,327 +0,0 @@ -package postgresql - -/* -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/services/postgresql/resource_tc_postgresql_base_backup.go b/tencentcloud/services/postgresql/resource_tc_postgresql_base_backup.go index 2ec1a85680..b5250b3b5f 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_base_backup.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_base_backup.go @@ -7,6 +7,7 @@ import ( "strings" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -88,7 +89,7 @@ func resourceTencentCloudPostgresqlBaseBackupCreate(d *schema.ResourceData, meta ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::postgres:%s:uin/:dbInstanceId/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -136,7 +137,7 @@ func resourceTencentCloudPostgresqlBaseBackupRead(d *schema.ResourceData, meta i } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "postgres", "dbInstanceId", tcClient.Region, d.Id()) if err != nil { return err @@ -195,9 +196,9 @@ func resourceTencentCloudPostgresqlBaseBackupUpdate(d *schema.ResourceData, meta if d.HasChange("tags") { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("postgres", "dbInstanceId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/resource_tc_postgresql_common_db_instance_operation_test.go b/tencentcloud/services/postgresql/resource_tc_postgresql_common_db_instance_operation_test.go similarity index 79% rename from tencentcloud/resource_tc_postgresql_common_db_instance_operation_test.go rename to tencentcloud/services/postgresql/resource_tc_postgresql_common_db_instance_operation_test.go index af25d26d54..3348bb9095 100644 --- a/tencentcloud/resource_tc_postgresql_common_db_instance_operation_test.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_common_db_instance_operation_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package postgresql_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) const testAccPostgresqlInstanceOperation_disisolate = "tencentcloud_postgresql_disisolate_db_instance_operation.disisolate_db_instance_operation" @@ -15,16 +17,16 @@ func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_all(t *testi // t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccPreCheck(t) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccPostgresqlCommonDbInstanceOperation_restart, PreConfig: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_restart, "id"), @@ -34,8 +36,8 @@ func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_all(t *testi { Config: testAccPostgresqlCommonDbInstanceOperation_isolate, PreConfig: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_isolate, "id"), @@ -45,8 +47,8 @@ func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_all(t *testi { Config: testAccPostgresqlCommonDbInstanceOperation_disisolate, PreConfig: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_disisolate, "id"), @@ -63,16 +65,16 @@ func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_renew(t *tes // t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccPreCheck(t) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccPostgresqlCommonDbInstanceOperation_renew, PreConfig: func() { - testAccStepSetRegion(t, "ap-guangzhou") - testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-guangzhou") + tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet(testAccPostgresqlInstanceOperation_renew, "id"), @@ -85,7 +87,7 @@ func TestAccTencentCloudPostgresqlCommonDbInstanceOperationResource_renew(t *tes }) } -const testAccPostgresqlCommonDbInstanceOperation_isolate = OperationPresetPGSQL + ` +const testAccPostgresqlCommonDbInstanceOperation_isolate = tcacctest.OperationPresetPGSQL + ` resource "tencentcloud_postgresql_isolate_db_instance_operation" "isolate_db_instance_operation" { db_instance_id_set = [local.pgsql_id] @@ -93,7 +95,7 @@ resource "tencentcloud_postgresql_isolate_db_instance_operation" "isolate_db_ins ` -const testAccPostgresqlCommonDbInstanceOperation_disisolate = OperationPresetPGSQL + ` +const testAccPostgresqlCommonDbInstanceOperation_disisolate = tcacctest.OperationPresetPGSQL + ` resource "tencentcloud_postgresql_disisolate_db_instance_operation" "disisolate_db_instance_operation" { db_instance_id_set = [local.pgsql_id] @@ -103,7 +105,7 @@ resource "tencentcloud_postgresql_disisolate_db_instance_operation" "disisolate_ ` -const testAccPostgresqlCommonDbInstanceOperation_restart = OperationPresetPGSQL + ` +const testAccPostgresqlCommonDbInstanceOperation_restart = tcacctest.OperationPresetPGSQL + ` resource "tencentcloud_postgresql_restart_db_instance_operation" "restart_db_instance_operation" { db_instance_id = local.pgsql_id @@ -121,7 +123,7 @@ resource "tencentcloud_postgresql_renew_db_instance_operation" "renew_db_instanc ` -const testAccPostgresqlInstanceCommonBase_PREPAID = defaultAzVariable + ` +const testAccPostgresqlInstanceCommonBase_PREPAID = tcacctest.DefaultAzVariable + ` data "tencentcloud_security_groups" "sg" { name = "default" diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go index 078a4e77af..081f91723b 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance.go @@ -10,6 +10,8 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" @@ -558,7 +560,7 @@ func resourceTencentCloudPostgresqlInstanceCreate(d *schema.ResourceData, meta i //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 { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) resourceName := tccommon.BuildTagResourceName("postgres", "DBInstanceId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -935,7 +937,7 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i if d.HasChange("security_groups") { // Only redis service support modify Generic DB instance security groups - service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ids := d.Get("security_groups").(*schema.Set).List() var sgIds []*string for _, id := range ids { @@ -1072,11 +1074,11 @@ func resourceTencentCloudPostgresqlInstanceUpdate(d *schema.ResourceData, meta i if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) //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. tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) //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. resourceName := tccommon.BuildTagResourceName("postgres", "DBInstanceId", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) @@ -1216,7 +1218,7 @@ func resourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta int // security groups // Only redis service support modify Generic DB instance security groups - redisService := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + redisService := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) sg, err := redisService.DescribeDBSecurityGroups(ctx, "postgres", d.Id()) if err != nil { return err @@ -1297,7 +1299,7 @@ func resourceTencentCloudPostgresqlInstanceRead(d *schema.ResourceData, meta int // ignore spec_code // qcs::postgres:ap-guangzhou:uin/123435236:DBInstanceId/postgres-xxx tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "postgres", "DBInstanceId", tcClient.Region, d.Id()) if err != nil { return err diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go b/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go index 4e16b93dc5..fb3f57c6e3 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_instance_test.go @@ -10,6 +10,7 @@ import ( tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" @@ -28,7 +29,7 @@ func init() { cli, _ := tcacctest.SharedClientForRegion(r) client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() postgresqlService := svcpostgresql.NewPostgresqlService(client) - vpcService := svcpostgresql.NewVpcService(client) + vpcService := svcvpc.NewVpcService(client) instances, err := postgresqlService.DescribePostgresqlInstances(ctx, nil) if err != nil { diff --git a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go index 53dcdd3998..0d37c603bf 100644 --- a/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go +++ b/tencentcloud/services/postgresql/resource_tc_postgresql_readonly_instance.go @@ -8,6 +8,7 @@ import ( "time" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" postgresql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/postgres/v20170312" @@ -355,7 +356,7 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceRead(d *schema.ResourceData, // security groups // Only redis service support modify Generic DB instance security groups - redisService := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + redisService := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) sg, err := redisService.DescribeDBSecurityGroups(ctx, "postgres", d.Id()) if err != nil { return err @@ -517,7 +518,7 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceUpdate(d *schema.ResourceData if d.HasChange("security_groups_ids") { // Only redis service support modify Generic DB instance security groups - service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svccrs.NewRedisService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ids := d.Get("security_groups_ids").(*schema.Set).List() var sgIds []*string for _, id := range ids { @@ -536,7 +537,7 @@ func resourceTencentCloudPostgresqlReadOnlyInstanceUpdate(d *schema.ResourceData // replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) // // tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - // tagService := &TagService{client: tcClient} + // tagService := svctag.NewTagService(tcClient) // resourceName := tccommon.BuildTagResourceName("postgres", "DBInstanceId", tcClient.Region, d.Id()) // err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) // if err != nil { diff --git a/tencentcloud/services/postgresql/service_tencentcloud_redis.go b/tencentcloud/services/postgresql/service_tencentcloud_redis.go deleted file mode 100644 index a7ffba3842..0000000000 --- a/tencentcloud/services/postgresql/service_tencentcloud_redis.go +++ /dev/null @@ -1,1929 +0,0 @@ -package postgresql - -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" -) - -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/postgresql/service_tencentcloud_tag.go b/tencentcloud/services/postgresql/service_tencentcloud_tag.go deleted file mode 100644 index 86146c67f5..0000000000 --- a/tencentcloud/services/postgresql/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package postgresql - -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/postgresql/service_tencentcloud_vpc.go b/tencentcloud/services/postgresql/service_tencentcloud_vpc.go deleted file mode 100644 index a208eb3f67..0000000000 --- a/tencentcloud/services/postgresql/service_tencentcloud_vpc.go +++ /dev/null @@ -1,8076 +0,0 @@ -package postgresql - -import ( - "context" - "encoding/base64" - "encoding/json" - "errors" - "fmt" - "log" - "net" - "regexp" - "strconv" - "strings" - "sync" - "time" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" - - "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(svccvm.DESCRIBE_SECURITY_GROUP_LIMIT)) - - offset := 0 - count := svccvm.DESCRIBE_SECURITY_GROUP_LIMIT - // run loop at least once - for count == svccvm.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 -} diff --git a/tencentcloud/services/privatedns/extension_tags.go b/tencentcloud/services/privatedns/extension_tags.go deleted file mode 100644 index f201ba491c..0000000000 --- a/tencentcloud/services/privatedns/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package privatedns - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/privatedns/resource_tc_private_dns_zone.go b/tencentcloud/services/privatedns/resource_tc_private_dns_zone.go index dc7b2dadae..cf7672a6ef 100644 --- a/tencentcloud/services/privatedns/resource_tc_private_dns_zone.go +++ b/tencentcloud/services/privatedns/resource_tc_private_dns_zone.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -211,7 +212,7 @@ func resourceTencentCloudDPrivateDnsZoneCreate(d *schema.ResourceData, meta inte d.SetId(id) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region if tags := helper.GetTags(d, "tags"); len(tags) > 0 { @@ -268,7 +269,7 @@ func resourceTencentCloudDPrivateDnsZoneRead(d *schema.ResourceData, meta interf _ = d.Set("tag_set", tagSets) client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region tags, err := tagService.DescribeResourceTags(ctx, "privatedns", "zone", region, id) @@ -392,12 +393,12 @@ func resourceTencentCloudDPrivateDnsZoneUpdate(d *schema.ResourceData, meta inte } client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("privatedns", "zone", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { diff --git a/tencentcloud/services/privatedns/service_tencentcloud_tag.go b/tencentcloud/services/privatedns/service_tencentcloud_tag.go deleted file mode 100644 index 372be328db..0000000000 --- a/tencentcloud/services/privatedns/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package privatedns - -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/project/data_source_tc_projects.go b/tencentcloud/services/project/data_source_tc_projects.go index c3af53b6e4..f8417ce79b 100644 --- a/tencentcloud/services/project/data_source_tc_projects.go +++ b/tencentcloud/services/project/data_source_tc_projects.go @@ -4,6 +4,7 @@ import ( "context" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -79,7 +80,7 @@ func dataSourceTencentCloudProjectsRead(d *schema.ResourceData, meta interface{} paramMap["AllList"] = helper.IntUint64(v.(int)) } - service := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var projects []*tag.Project diff --git a/tencentcloud/services/project/extension_tags.go b/tencentcloud/services/project/extension_tags.go deleted file mode 100644 index ba3f8f111a..0000000000 --- a/tencentcloud/services/project/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package project - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/project/resource_tc_project.go b/tencentcloud/services/project/resource_tc_project.go index 30cbc0f56f..87bbe82760 100644 --- a/tencentcloud/services/project/resource_tc_project.go +++ b/tencentcloud/services/project/resource_tc_project.go @@ -5,6 +5,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -98,7 +99,7 @@ func resourceTencentCloudProjectCreate(d *schema.ResourceData, meta interface{}) if v.(int) == 1 { ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) projectId := helper.StrToUInt64(d.Id()) if err := service.DisableProjectById(ctx, projectId); err != nil { @@ -118,7 +119,7 @@ func resourceTencentCloudProjectRead(d *schema.ResourceData, meta interface{}) e ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) projectId := helper.StrToUInt64(d.Id()) @@ -216,7 +217,7 @@ func resourceTencentCloudProjectDelete(d *schema.ResourceData, meta interface{}) logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + service := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) projectId := helper.StrToUInt64(d.Id()) if err := service.DisableProjectById(ctx, projectId); err != nil { diff --git a/tencentcloud/services/project/service_tencentcloud_tag.go b/tencentcloud/services/project/service_tencentcloud_tag.go deleted file mode 100644 index 3ce5f109d7..0000000000 --- a/tencentcloud/services/project/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package project - -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/rum/extension_tags.go b/tencentcloud/services/rum/extension_tags.go deleted file mode 100644 index d3b19914ec..0000000000 --- a/tencentcloud/services/rum/extension_tags.go +++ /dev/null @@ -1,3 +0,0 @@ -package rum - -const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/rum/resource_tc_rum_release_file.go b/tencentcloud/services/rum/resource_tc_rum_release_file.go index c944805cdb..93caec1ac1 100644 --- a/tencentcloud/services/rum/resource_tc_rum_release_file.go +++ b/tencentcloud/services/rum/resource_tc_rum_release_file.go @@ -38,6 +38,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" rum "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/rum/v20210622" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/rum/resource_tc_rum_taw_instance.go b/tencentcloud/services/rum/resource_tc_rum_taw_instance.go index 6e381669a0..76d0ad7858 100644 --- a/tencentcloud/services/rum/resource_tc_rum_taw_instance.go +++ b/tencentcloud/services/rum/resource_tc_rum_taw_instance.go @@ -6,6 +6,7 @@ import ( "log" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -192,7 +193,7 @@ func resourceTencentCloudRumTawInstanceCreate(d *schema.ResourceData, meta inter ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::rum:%s:uin/:Instance/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -291,7 +292,7 @@ func resourceTencentCloudRumTawInstanceRead(d *schema.ResourceData, meta interfa } tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "rum", "Instance", tcClient.Region, d.Id()) if err != nil { return err @@ -352,9 +353,9 @@ func resourceTencentCloudRumTawInstanceUpdate(d *schema.ResourceData, meta inter if d.HasChange("tags") { tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - tagService := &TagService{client: tcClient} + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) resourceName := tccommon.BuildTagResourceName("rum", "Instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err diff --git a/tencentcloud/services/rum/service_tencentcloud_tag.go b/tencentcloud/services/rum/service_tencentcloud_tag.go deleted file mode 100644 index 8d350939d3..0000000000 --- a/tencentcloud/services/rum/service_tencentcloud_tag.go +++ /dev/null @@ -1,415 +0,0 @@ -package rum - -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/data_source_tc_scf_account_info.go b/tencentcloud/services/scf/data_source_tc_scf_account_info.go similarity index 95% rename from tencentcloud/data_source_tc_scf_account_info.go rename to tencentcloud/services/scf/data_source_tc_scf_account_info.go index c3e7e8903b..1452e2af26 100644 --- a/tencentcloud/data_source_tc_scf_account_info.go +++ b/tencentcloud/services/scf/data_source_tc_scf_account_info.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfAccountInfo() *schema.Resource { +func DataSourceTencentCloudScfAccountInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfAccountInfoRead, Schema: map[string]*schema.Schema{ @@ -233,21 +236,21 @@ func dataSourceTencentCloudScfAccountInfo() *schema.Resource { } func dataSourceTencentCloudScfAccountInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_account_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_account_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) - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var accountInfo *scf.GetAccountResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfAccountInfo(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accountInfo = result return nil @@ -436,7 +439,7 @@ func dataSourceTencentCloudScfAccountInfoRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), accountInfoMap); e != nil { + if e := tccommon.WriteToFile(output.(string), accountInfoMap); e != nil { return e } } diff --git a/tencentcloud/services/scf/data_source_tc_scf_account_info_test.go b/tencentcloud/services/scf/data_source_tc_scf_account_info_test.go new file mode 100644 index 0000000000..25b58fbf3a --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_account_info_test.go @@ -0,0 +1,31 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfAccountInfoDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfAccountInfoDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_account_info.account_info")), + }, + }, + }) +} + +const testAccScfAccountInfoDataSource = ` + +data "tencentcloud_scf_account_info" "account_info" {} + +` diff --git a/tencentcloud/data_source_tc_scf_async_event_management.go b/tencentcloud/services/scf/data_source_tc_scf_async_event_management.go similarity index 89% rename from tencentcloud/data_source_tc_scf_async_event_management.go rename to tencentcloud/services/scf/data_source_tc_scf_async_event_management.go index c1277faefa..744f8fb8e2 100644 --- a/tencentcloud/data_source_tc_scf_async_event_management.go +++ b/tencentcloud/services/scf/data_source_tc_scf_async_event_management.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfAsyncEventManagement() *schema.Resource { +func DataSourceTencentCloudScfAsyncEventManagement() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfAsyncEventManagementRead, Schema: map[string]*schema.Schema{ @@ -117,12 +120,12 @@ func dataSourceTencentCloudScfAsyncEventManagement() *schema.Resource { } func dataSourceTencentCloudScfAsyncEventManagementRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_async_event_management.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_async_event_management.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("function_name"); ok { @@ -159,14 +162,14 @@ func dataSourceTencentCloudScfAsyncEventManagementRead(d *schema.ResourceData, m paramMap["InvokeRequestId"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var eventList []*scf.AsyncEvent - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfAsyncEventManagementByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } eventList = result return nil @@ -216,7 +219,7 @@ func dataSourceTencentCloudScfAsyncEventManagementRead(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/services/scf/data_source_tc_scf_async_event_management_test.go b/tencentcloud/services/scf/data_source_tc_scf_async_event_management_test.go new file mode 100644 index 0000000000..71373341e7 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_async_event_management_test.go @@ -0,0 +1,37 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfAsyncEventManagementDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfAsyncEventManagementDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_async_event_management.async_event_management")), + }, + }, + }) +} + +const testAccScfAsyncEventManagementDataSource = ` + +data "tencentcloud_scf_async_event_management" "async_event_management" { + function_name = "keep-1676351130" + namespace = "default" + qualifier = "$LATEST" + order = "ASC" + orderby = "StartTime" +} + +` diff --git a/tencentcloud/data_source_tc_scf_async_event_status.go b/tencentcloud/services/scf/data_source_tc_scf_async_event_status.go similarity index 78% rename from tencentcloud/data_source_tc_scf_async_event_status.go rename to tencentcloud/services/scf/data_source_tc_scf_async_event_status.go index 562ee655b1..07ff146382 100644 --- a/tencentcloud/data_source_tc_scf_async_event_status.go +++ b/tencentcloud/services/scf/data_source_tc_scf_async_event_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfAsyncEventStatus() *schema.Resource { +func DataSourceTencentCloudScfAsyncEventStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfAsyncEventStatusRead, Schema: map[string]*schema.Schema{ @@ -54,12 +57,12 @@ func dataSourceTencentCloudScfAsyncEventStatus() *schema.Resource { } func dataSourceTencentCloudScfAsyncEventStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_async_event_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_async_event_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 ( result *scf.AsyncEventStatus @@ -72,11 +75,11 @@ func dataSourceTencentCloudScfAsyncEventStatusRead(d *schema.ResourceData, meta paramMap["InvokeRequestId"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { res, e := service.DescribeScfAsyncEventStatus(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = res return nil @@ -106,7 +109,7 @@ func dataSourceTencentCloudScfAsyncEventStatusRead(d *schema.ResourceData, meta d.SetId(invokeRequestId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), asyncEventStatusMap); e != nil { + if e := tccommon.WriteToFile(output.(string), asyncEventStatusMap); e != nil { return e } } diff --git a/tencentcloud/services/scf/data_source_tc_scf_async_event_status_test.go b/tencentcloud/services/scf/data_source_tc_scf_async_event_status_test.go new file mode 100644 index 0000000000..a63ba7dda0 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_async_event_status_test.go @@ -0,0 +1,33 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixScfAsyncEventStatusDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfAsyncEventStatusDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_async_event_status.async_event_status")), + }, + }, + }) +} + +const testAccScfAsyncEventStatusDataSource = ` + +data "tencentcloud_scf_async_event_status" "async_event_status" { + invoke_request_id = "9de9405a-e33a-498d-bb59-e80b7bed1191" +} + +` diff --git a/tencentcloud/data_source_tc_scf_function_address.go b/tencentcloud/services/scf/data_source_tc_scf_function_address.go similarity index 76% rename from tencentcloud/data_source_tc_scf_function_address.go rename to tencentcloud/services/scf/data_source_tc_scf_function_address.go index b6afbe49ad..911e120019 100644 --- a/tencentcloud/data_source_tc_scf_function_address.go +++ b/tencentcloud/services/scf/data_source_tc_scf_function_address.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfFunctionAddress() *schema.Resource { +func DataSourceTencentCloudScfFunctionAddress() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfFunctionAddressRead, Schema: map[string]*schema.Schema{ @@ -53,12 +56,12 @@ func dataSourceTencentCloudScfFunctionAddress() *schema.Resource { } func dataSourceTencentCloudScfFunctionAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_function_address.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_function_address.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("function_name"); ok { @@ -73,14 +76,14 @@ func dataSourceTencentCloudScfFunctionAddressRead(d *schema.ResourceData, meta i paramMap["Namespace"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var res *scf.GetFunctionAddressResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfFunctionAddress(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } res = result return nil @@ -105,7 +108,7 @@ func dataSourceTencentCloudScfFunctionAddressRead(d *schema.ResourceData, meta i output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), resMap); e != nil { + if e := tccommon.WriteToFile(output.(string), resMap); e != nil { return e } } diff --git a/tencentcloud/services/scf/data_source_tc_scf_function_address_test.go b/tencentcloud/services/scf/data_source_tc_scf_function_address_test.go new file mode 100644 index 0000000000..99f45ae473 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_function_address_test.go @@ -0,0 +1,35 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfFunctionAddressDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfFunctionAddressDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_address.function_address")), + }, + }, + }) +} + +const testAccScfFunctionAddressDataSource = ` + +data "tencentcloud_scf_function_address" "function_address" { + function_name = "keep-1676351130" + namespace = "default" + qualifier = "$LATEST" +} + +` diff --git a/tencentcloud/data_source_tc_scf_function_aliases.go b/tencentcloud/services/scf/data_source_tc_scf_function_aliases.go similarity index 92% rename from tencentcloud/data_source_tc_scf_function_aliases.go rename to tencentcloud/services/scf/data_source_tc_scf_function_aliases.go index a7ebcece2f..f96fce564c 100644 --- a/tencentcloud/data_source_tc_scf_function_aliases.go +++ b/tencentcloud/services/scf/data_source_tc_scf_function_aliases.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfFunctionAliases() *schema.Resource { +func DataSourceTencentCloudScfFunctionAliases() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfFunctionAliasesRead, Schema: map[string]*schema.Schema{ @@ -133,12 +136,12 @@ func dataSourceTencentCloudScfFunctionAliases() *schema.Resource { } func dataSourceTencentCloudScfFunctionAliasesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_function_aliases.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_function_aliases.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("function_name"); ok { @@ -153,14 +156,14 @@ func dataSourceTencentCloudScfFunctionAliasesRead(d *schema.ResourceData, meta i paramMap["FunctionVersion"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var aliases []*scf.Alias - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfFunctionAliasesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } aliases = result return nil @@ -258,7 +261,7 @@ func dataSourceTencentCloudScfFunctionAliasesRead(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/services/scf/data_source_tc_scf_function_aliases_test.go b/tencentcloud/services/scf/data_source_tc_scf_function_aliases_test.go new file mode 100644 index 0000000000..a39a25ad7c --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_function_aliases_test.go @@ -0,0 +1,34 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfFunctionAliasesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfFunctionAliasesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_aliases.function_aliases")), + }, + }, + }) +} + +const testAccScfFunctionAliasesDataSource = ` + +data "tencentcloud_scf_function_aliases" "function_aliases" { + function_name = "keep-1676351130" + namespace = "default" +} + +` diff --git a/tencentcloud/data_source_tc_scf_function_versions.go b/tencentcloud/services/scf/data_source_tc_scf_function_versions.go similarity index 86% rename from tencentcloud/data_source_tc_scf_function_versions.go rename to tencentcloud/services/scf/data_source_tc_scf_function_versions.go index ff9e5f5f27..235d1d7105 100644 --- a/tencentcloud/data_source_tc_scf_function_versions.go +++ b/tencentcloud/services/scf/data_source_tc_scf_function_versions.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfFunctionVersions() *schema.Resource { +func DataSourceTencentCloudScfFunctionVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfFunctionVersionsRead, Schema: map[string]*schema.Schema{ @@ -82,12 +85,12 @@ func dataSourceTencentCloudScfFunctionVersions() *schema.Resource { } func dataSourceTencentCloudScfFunctionVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_function_versions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_function_versions.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("function_name"); ok { @@ -106,14 +109,14 @@ func dataSourceTencentCloudScfFunctionVersionsRead(d *schema.ResourceData, meta paramMap["OrderBy"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var versions []*scf.FunctionVersion - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfFunctionVersionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } versions = result return nil @@ -159,7 +162,7 @@ func dataSourceTencentCloudScfFunctionVersionsRead(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/services/scf/data_source_tc_scf_function_versions_test.go b/tencentcloud/services/scf/data_source_tc_scf_function_versions_test.go new file mode 100644 index 0000000000..11efea0a52 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_function_versions_test.go @@ -0,0 +1,34 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfFunctionVersionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfFunctionVersionsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_function_versions.function_versions")), + }, + }, + }) +} + +const testAccScfFunctionVersionsDataSource = ` + +data "tencentcloud_scf_function_versions" "function_versions" { + function_name = "keep-1676351130" + namespace = "default" +} + +` diff --git a/tencentcloud/data_source_tc_scf_functions.go b/tencentcloud/services/scf/data_source_tc_scf_functions.go similarity index 96% rename from tencentcloud/data_source_tc_scf_functions.go rename to tencentcloud/services/scf/data_source_tc_scf_functions.go index b985589abc..ae66471b83 100644 --- a/tencentcloud/data_source_tc_scf_functions.go +++ b/tencentcloud/services/scf/data_source_tc_scf_functions.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf import ( "context" @@ -6,12 +6,15 @@ import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfFunctions() *schema.Resource { +func DataSourceTencentCloudScfFunctions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfFunctionsRead, Schema: map[string]*schema.Schema{ @@ -331,11 +334,11 @@ func dataSourceTencentCloudScfFunctions() *schema.Resource { } func dataSourceTencentCloudScfFunctionsRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_functions.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_scf_functions.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( name *string @@ -514,7 +517,7 @@ func dataSourceTencentCloudScfFunctionsRead(d *schema.ResourceData, m interface{ d.SetId(helper.DataResourceIdsHash(ids)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), functions); err != nil { + if err := tccommon.WriteToFile(output.(string), functions); err != nil { err = errors.WithStack(err) log.Printf("[CRITAL]%s output file[%s] fail, reason: %+v", logId, output.(string), err) return err diff --git a/tencentcloud/data_source_tc_scf_functions_test.go b/tencentcloud/services/scf/data_source_tc_scf_functions_test.go similarity index 92% rename from tencentcloud/data_source_tc_scf_functions_test.go rename to tencentcloud/services/scf/data_source_tc_scf_functions_test.go index 4b717868b5..17d3337464 100644 --- a/tencentcloud/data_source_tc_scf_functions_test.go +++ b/tencentcloud/services/scf/data_source_tc_scf_functions_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package scf_test import ( "fmt" "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudScfFunctions_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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfFunctions), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.0.name", regexp.MustCompile(`ci-test-function`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.handler"), @@ -47,13 +49,13 @@ func TestAccDataSourceTencentCloudScfFunctions_basic(t *testing.T) { func TestAccDataSourceTencentCloudScfFunctions_namespace(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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfFunctionsNamespace), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), resource.TestCheckResourceAttr("data.tencentcloud_scf_functions.foo", "functions.#", "1"), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.0.name", regexp.MustCompile(`ci-test-function`)), resource.TestCheckResourceAttr("data.tencentcloud_scf_functions.foo", "functions.0.handler", "first.do_it_first"), @@ -82,13 +84,13 @@ func TestAccDataSourceTencentCloudScfFunctions_namespace(t *testing.T) { func TestAccDataSourceTencentCloudScfFunctions_Desc(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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfFunctionsDesc), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.name"), resource.TestCheckResourceAttr("data.tencentcloud_scf_functions.foo", "functions.0.description", "test"), @@ -118,13 +120,13 @@ func TestAccDataSourceTencentCloudScfFunctions_Desc(t *testing.T) { func TestAccDataSourceTencentCloudScfFunctions_tag(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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfFunctionsTag), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.handler"), @@ -154,13 +156,13 @@ func TestAccDataSourceTencentCloudScfFunctions_tag(t *testing.T) { func TestAccDataSourceTencentCloudScfFunctions_IntranetConfig(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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfFunctionsIntranetConfig), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_functions.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_functions.foo", "functions.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_functions.foo", "functions.0.handler"), @@ -204,7 +206,7 @@ data "tencentcloud_scf_functions" "foo" { const TestAccDataSourceTencentCloudScfFunctionsNamespace = ` resource "tencentcloud_scf_function" "foo" { - namespace = "` + defaultScfNamespace + `" + namespace = "` + tcacctest.DefaultScfNamespace + `" name = "%s" handler = "first.do_it_first" runtime = "Python3.6" @@ -253,7 +255,7 @@ data "tencentcloud_scf_functions" "foo" { } ` -var TestAccDataSourceTencentCloudScfFunctionsIntranetConfig = fmt.Sprintf(defaultVpcVariable+` +var TestAccDataSourceTencentCloudScfFunctionsIntranetConfig = fmt.Sprintf(tcacctest.DefaultVpcVariable+` resource "tencentcloud_scf_function" "foo" { name = "%s" handler = "first.do_it_first" diff --git a/tencentcloud/data_source_tc_scf_layer_versions.go b/tencentcloud/services/scf/data_source_tc_scf_layer_versions.go similarity index 87% rename from tencentcloud/data_source_tc_scf_layer_versions.go rename to tencentcloud/services/scf/data_source_tc_scf_layer_versions.go index 445adf21f0..d099f4e086 100644 --- a/tencentcloud/data_source_tc_scf_layer_versions.go +++ b/tencentcloud/services/scf/data_source_tc_scf_layer_versions.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfLayerVersions() *schema.Resource { +func DataSourceTencentCloudScfLayerVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfLayerVersionsRead, Schema: map[string]*schema.Schema{ @@ -91,12 +94,12 @@ func dataSourceTencentCloudScfLayerVersions() *schema.Resource { } func dataSourceTencentCloudScfLayerVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_layer_versions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_layer_versions.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("layer_name"); ok { @@ -108,14 +111,14 @@ func dataSourceTencentCloudScfLayerVersionsRead(d *schema.ResourceData, meta int paramMap["CompatibleRuntime"] = helper.InterfacesStringsPoint(compatibleRuntimeSet) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var layerVersions []*scf.LayerVersionInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfLayerVersions(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } layerVersions = result return nil @@ -173,7 +176,7 @@ func dataSourceTencentCloudScfLayerVersionsRead(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/services/scf/data_source_tc_scf_layer_versions_test.go b/tencentcloud/services/scf/data_source_tc_scf_layer_versions_test.go new file mode 100644 index 0000000000..29d5e46f30 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_layer_versions_test.go @@ -0,0 +1,33 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixScfLayerVersionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfLayerVersionsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_layer_versions.layer_versions")), + }, + }, + }) +} + +const testAccScfLayerVersionsDataSource = ` + +data "tencentcloud_scf_layer_versions" "layer_versions" { + layer_name = "tf-test" +} + +` diff --git a/tencentcloud/data_source_tc_scf_layers.go b/tencentcloud/services/scf/data_source_tc_scf_layers.go similarity index 87% rename from tencentcloud/data_source_tc_scf_layers.go rename to tencentcloud/services/scf/data_source_tc_scf_layers.go index 05f991c998..a8810c3cc5 100644 --- a/tencentcloud/data_source_tc_scf_layers.go +++ b/tencentcloud/services/scf/data_source_tc_scf_layers.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfLayers() *schema.Resource { +func DataSourceTencentCloudScfLayers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfLayersRead, Schema: map[string]*schema.Schema{ @@ -88,12 +91,12 @@ func dataSourceTencentCloudScfLayers() *schema.Resource { } func dataSourceTencentCloudScfLayersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_layers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_layers.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("compatible_runtime"); ok { @@ -104,14 +107,14 @@ func dataSourceTencentCloudScfLayersRead(d *schema.ResourceData, meta interface{ paramMap["SearchKey"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var layers []*scf.LayerVersionInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfLayersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } layers = result return nil @@ -169,7 +172,7 @@ func dataSourceTencentCloudScfLayersRead(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/services/scf/data_source_tc_scf_layers_test.go b/tencentcloud/services/scf/data_source_tc_scf_layers_test.go new file mode 100644 index 0000000000..d86bc84636 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_layers_test.go @@ -0,0 +1,30 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfLayersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfLayersDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_layers.layers")), + }, + }, + }) +} + +const testAccScfLayersDataSource = ` + +data "tencentcloud_scf_layers" "layers" {} +` diff --git a/tencentcloud/data_source_tc_scf_logs.go b/tencentcloud/services/scf/data_source_tc_scf_logs.go similarity index 89% rename from tencentcloud/data_source_tc_scf_logs.go rename to tencentcloud/services/scf/data_source_tc_scf_logs.go index 09aca29cb5..e74c1bde47 100644 --- a/tencentcloud/data_source_tc_scf_logs.go +++ b/tencentcloud/services/scf/data_source_tc_scf_logs.go @@ -1,16 +1,19 @@ -package tencentcloud +package scf import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfLogs() *schema.Resource { +func DataSourceTencentCloudScfLogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfLogsRead, Schema: map[string]*schema.Schema{ @@ -34,21 +37,21 @@ func dataSourceTencentCloudScfLogs() *schema.Resource { "order": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(SCF_LOGS_ORDERS), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCF_LOGS_ORDERS), Default: SCF_LOGS_ORDER_DESC, Description: "Order to sort the log, optional values `desc` and `asc`, default `desc`.", }, "order_by": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(SCF_LOGS_ORDER_BY), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCF_LOGS_ORDER_BY), Default: SCF_LOGS_ORDER_BY_START_TIME, Description: "Sort the logs according to the following fields: `function_name`, `duration`, `mem_usage`, `start_time`, default `start_time`.", }, "ret_code": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(SCF_LOGS_RET_CODES), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCF_LOGS_RET_CODES), Description: "Use to filter log, optional value: `not0` only returns the error log. `is0` only returns the correct log. `TimeLimitExceeded` returns the log of the function call timeout. `ResourceLimitExceeded` returns the function call generation resource overrun log. `UserCodeException` returns logs of the user code error that occurred in the function call. Not passing the parameter means returning all logs.", }, "namespace": { @@ -65,13 +68,13 @@ func dataSourceTencentCloudScfLogs() *schema.Resource { "start_time": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateTime(SCF_LOGS_DESCRIBE_TIME_FORMAT), + ValidateFunc: tccommon.ValidateTime(SCF_LOGS_DESCRIBE_TIME_FORMAT), Description: "The start time of the query, the format is `2017-05-16 20:00:00`, which can only be within one day from `end_time`.", }, "end_time": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateTime(SCF_LOGS_DESCRIBE_TIME_FORMAT), + ValidateFunc: tccommon.ValidateTime(SCF_LOGS_DESCRIBE_TIME_FORMAT), Description: "The end time of the query, the format is `2017-05-16 20:00:00`, which can only be within one day from `start_time`.", }, "result_output_file": { @@ -155,11 +158,11 @@ func dataSourceTencentCloudScfLogs() *schema.Resource { } func dataSourceTencentCloudScfLogsRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_logs.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_scf_logs.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} functionName := d.Get("function_name").(string) namespace := d.Get("namespace").(string) @@ -241,7 +244,7 @@ func dataSourceTencentCloudScfLogsRead(d *schema.ResourceData, m interface{}) er d.SetId(helper.DataResourceIdsHash(ids)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), logs); err != nil { + if err := tccommon.WriteToFile(output.(string), logs); err != nil { err = errors.WithStack(err) log.Printf("[CRITAL]%s output file[%s] fail, reason: %+v", logId, output.(string), err) return err diff --git a/tencentcloud/data_source_tc_scf_logs_test.go b/tencentcloud/services/scf/data_source_tc_scf_logs_test.go similarity index 85% rename from tencentcloud/data_source_tc_scf_logs_test.go rename to tencentcloud/services/scf/data_source_tc_scf_logs_test.go index 3f139d72bf..3671e90ccc 100644 --- a/tencentcloud/data_source_tc_scf_logs_test.go +++ b/tencentcloud/services/scf/data_source_tc_scf_logs_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package scf_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudScfLogs_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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfLogs), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_logs.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_logs.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_logs.foo", "function_name", regexp.MustCompile(`ci-test-function`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_logs.foo", "logs.#"), ), @@ -28,13 +30,13 @@ func TestAccDataSourceTencentCloudScfLogs_basic(t *testing.T) { func TestAccDataSourceTencentCloudScfLogs_allArgWithoutReqId(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: scfFunctionCodeEmbed("first.zip", TestAccDataSourceTencentCloudScfLogsAllArgWithoutReqId), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_logs.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_logs.foo"), resource.TestMatchResourceAttr("data.tencentcloud_scf_logs.foo", "function_name", regexp.MustCompile(`ci-test-function`)), resource.TestCheckResourceAttr("data.tencentcloud_scf_logs.foo", "offset", "0"), resource.TestCheckResourceAttr("data.tencentcloud_scf_logs.foo", "limit", "100"), diff --git a/tencentcloud/data_source_tc_scf_namespaces.go b/tencentcloud/services/scf/data_source_tc_scf_namespaces.go similarity index 85% rename from tencentcloud/data_source_tc_scf_namespaces.go rename to tencentcloud/services/scf/data_source_tc_scf_namespaces.go index ec5fc2ef95..21e9b8df27 100644 --- a/tencentcloud/data_source_tc_scf_namespaces.go +++ b/tencentcloud/services/scf/data_source_tc_scf_namespaces.go @@ -1,16 +1,19 @@ -package tencentcloud +package scf import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfNamespaces() *schema.Resource { +func DataSourceTencentCloudScfNamespaces() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfNamespacesRead, Schema: map[string]*schema.Schema{ @@ -70,11 +73,11 @@ func dataSourceTencentCloudScfNamespaces() *schema.Resource { } func dataSourceTencentCloudScfNamespacesRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_namespaces.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_scf_namespaces.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( namespace *string @@ -120,7 +123,7 @@ func dataSourceTencentCloudScfNamespacesRead(d *schema.ResourceData, m interface d.SetId(helper.DataResourceIdsHash(ids)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), namespaces); err != nil { + if err := tccommon.WriteToFile(output.(string), namespaces); err != nil { err = errors.WithStack(err) log.Printf("[CRITAL]%s output file[%s] fail, reason: %+v", logId, output.(string), err) return err diff --git a/tencentcloud/data_source_tc_scf_namespaces_test.go b/tencentcloud/services/scf/data_source_tc_scf_namespaces_test.go similarity index 78% rename from tencentcloud/data_source_tc_scf_namespaces_test.go rename to tencentcloud/services/scf/data_source_tc_scf_namespaces_test.go index 4aced912ad..4042cc8356 100644 --- a/tencentcloud/data_source_tc_scf_namespaces_test.go +++ b/tencentcloud/services/scf/data_source_tc_scf_namespaces_test.go @@ -1,25 +1,27 @@ -package tencentcloud +package scf_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudScfNamespaces_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: TestAccDataSourceTencentCloudScfNamespaces, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_namespaces.foo"), - resource.TestCheckResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespace", defaultScfNamespace), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_namespaces.foo"), + resource.TestCheckResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespace", tcacctest.DefaultScfNamespace), resource.TestMatchResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespaces.#", regexp.MustCompile(`^[1-9]\d*$`)), - resource.TestCheckResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespaces.0.namespace", defaultScfNamespace), + resource.TestCheckResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespaces.0.namespace", tcacctest.DefaultScfNamespace), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_namespaces.foo", "namespaces.0.create_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_namespaces.foo", "namespaces.0.modify_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_namespaces.foo", "namespaces.0.type"), @@ -32,13 +34,13 @@ func TestAccDataSourceTencentCloudScfNamespaces_basic(t *testing.T) { func TestAccDataSourceTencentCloudScfNamespaces_desc(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: TestAccDataSourceTencentCloudScfNamespacesDesc, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_scf_namespaces.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_namespaces.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_namespaces.foo", "description"), resource.TestMatchResourceAttr("data.tencentcloud_scf_namespaces.foo", "namespaces.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_scf_namespaces.foo", "namespaces.0.namespace"), @@ -54,7 +56,7 @@ func TestAccDataSourceTencentCloudScfNamespaces_desc(t *testing.T) { const TestAccDataSourceTencentCloudScfNamespaces = ` data "tencentcloud_scf_namespaces" "foo" { - namespace = "` + defaultScfNamespace + `" + namespace = "` + tcacctest.DefaultScfNamespace + `" } ` diff --git a/tencentcloud/data_source_tc_scf_request_status.go b/tencentcloud/services/scf/data_source_tc_scf_request_status.go similarity index 88% rename from tencentcloud/data_source_tc_scf_request_status.go rename to tencentcloud/services/scf/data_source_tc_scf_request_status.go index 235b52c905..15167692ee 100644 --- a/tencentcloud/data_source_tc_scf_request_status.go +++ b/tencentcloud/services/scf/data_source_tc_scf_request_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfRequestStatus() *schema.Resource { +func DataSourceTencentCloudScfRequestStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfRequestStatusRead, Schema: map[string]*schema.Schema{ @@ -103,12 +106,12 @@ func dataSourceTencentCloudScfRequestStatus() *schema.Resource { } func dataSourceTencentCloudScfRequestStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_request_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_request_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("function_name"); ok { @@ -131,14 +134,14 @@ func dataSourceTencentCloudScfRequestStatusRead(d *schema.ResourceData, meta int paramMap["EndTime"] = helper.String(v.(string)) } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var data []*scf.RequestStatus - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfRequestStatusByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result return nil @@ -196,7 +199,7 @@ func dataSourceTencentCloudScfRequestStatusRead(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/services/scf/data_source_tc_scf_request_status_test.go b/tencentcloud/services/scf/data_source_tc_scf_request_status_test.go new file mode 100644 index 0000000000..63bd5903e7 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_request_status_test.go @@ -0,0 +1,35 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfRequestStatusDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfRequestStatusDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_request_status.request_status")), + }, + }, + }) +} + +const testAccScfRequestStatusDataSource = ` + +data "tencentcloud_scf_request_status" "request_status" { + function_name = "keep-1676351130" + function_request_id = "9de9405a-e33a-498d-bb59-e80b7bed1191" + namespace = "default" +} + +` diff --git a/tencentcloud/data_source_tc_scf_triggers.go b/tencentcloud/services/scf/data_source_tc_scf_triggers.go similarity index 91% rename from tencentcloud/data_source_tc_scf_triggers.go rename to tencentcloud/services/scf/data_source_tc_scf_triggers.go index edbb7b3d85..0ea0c696b6 100644 --- a/tencentcloud/data_source_tc_scf_triggers.go +++ b/tencentcloud/services/scf/data_source_tc_scf_triggers.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudScfTriggers() *schema.Resource { +func DataSourceTencentCloudScfTriggers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudScfTriggersRead, Schema: map[string]*schema.Schema{ @@ -140,12 +143,12 @@ func dataSourceTencentCloudScfTriggers() *schema.Resource { } func dataSourceTencentCloudScfTriggersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_scf_triggers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_scf_triggers.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("function_name"); ok { @@ -184,14 +187,14 @@ func dataSourceTencentCloudScfTriggersRead(d *schema.ResourceData, meta interfac paramMap["Filters"] = tmpSet } - service := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var triggers []*scf.TriggerInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeScfTriggersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } triggers = result return nil @@ -265,7 +268,7 @@ func dataSourceTencentCloudScfTriggersRead(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/services/scf/data_source_tc_scf_triggers_test.go b/tencentcloud/services/scf/data_source_tc_scf_triggers_test.go new file mode 100644 index 0000000000..364de65d75 --- /dev/null +++ b/tencentcloud/services/scf/data_source_tc_scf_triggers_test.go @@ -0,0 +1,36 @@ +package scf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudScfTriggersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccScfTriggersDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_scf_triggers.triggers")), + }, + }, + }) +} + +const testAccScfTriggersDataSource = ` + +data "tencentcloud_scf_triggers" "triggers" { + function_name = "keep-1676351130" + namespace = "default" + order_by = "add_time" + order = "DESC" +} + +` diff --git a/tencentcloud/extension_scf.go b/tencentcloud/services/scf/extension_scf.go similarity index 99% rename from tencentcloud/extension_scf.go rename to tencentcloud/services/scf/extension_scf.go index 3f6308d0cf..e89b44129b 100644 --- a/tencentcloud/extension_scf.go +++ b/tencentcloud/services/scf/extension_scf.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf const ( SCF_FUNCTION_TYPE_EVENT = "Event" diff --git a/tencentcloud/resource_tc_scf_function.go b/tencentcloud/services/scf/resource_tc_scf_function.go similarity index 94% rename from tencentcloud/resource_tc_scf_function.go rename to tencentcloud/services/scf/resource_tc_scf_function.go index 034baf9ced..4334f79ad0 100644 --- a/tencentcloud/resource_tc_scf_function.go +++ b/tencentcloud/services/scf/resource_tc_scf_function.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf import ( "context" @@ -12,11 +12,15 @@ import ( "time" "unicode" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" "github.com/pkg/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -51,7 +55,7 @@ func scfFunctionValidate(allowDot bool) schema.SchemaValidateFunc { } } -func resourceTencentCloudScfFunction() *schema.Resource { +func ResourceTencentCloudScfFunction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfFunctionCreate, Read: resourceTencentCloudScfFunctionRead, @@ -67,7 +71,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Required: true, ForceNew: true, ValidateFunc: helper.ComposeValidateFunc( - validateStringLengthInRange(2, 60), + tccommon.ValidateStringLengthInRange(2, 60), scfFunctionValidate(false), ), Description: "Name of the SCF function. Name supports 26 English letters, numbers, connectors, and underscores, it should start with a letter. The last character cannot be `-` or `_`. Available length is 2-60.", @@ -76,7 +80,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Type: schema.TypeString, Optional: true, ValidateFunc: helper.ComposeValidateFunc( - validateStringLengthInRange(2, 60), + tccommon.ValidateStringLengthInRange(2, 60), scfFunctionValidate(true), ), Description: "Handler of the SCF function. The format of name is `.`, and it supports 26 English letters, numbers, connectors, and underscores, it should start with a letter. The last character cannot be `-` or `_`. Available length is 2-60.", @@ -85,7 +89,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Type: schema.TypeString, Optional: true, Default: "", - ValidateFunc: validateStringLengthInRange(0, 1000), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 1000), Description: "Description of the SCF function. Description supports English letters, numbers, spaces, commas, newlines, periods and Chinese, the maximum length is 1000.", }, "mem_size": { @@ -93,7 +97,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Optional: true, Default: 128, ValidateFunc: helper.ComposeValidateFunc( - //validateIntegerInRange(128, 1536), + //tccommon.ValidateIntegerInRange(128, 1536), func(v interface{}, k string) (wss []string, errs []error) { if v.(int)%128 != 0 { errs = append(errs, errors.Errorf("%s should be with 128M as the ladder", k)) @@ -107,7 +111,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 3, - ValidateFunc: validateIntegerInRange(1, 900), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 900), Description: "Timeout of the SCF function, unit is second. Default `3`. Available value is 1-900.", }, "environment": { @@ -195,7 +199,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Optional: true, ForceNew: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{SCF_FUNCTION_OPEN, SCF_FUNCTION_CLOSE}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{SCF_FUNCTION_OPEN, SCF_FUNCTION_CLOSE}), Description: "Whether SCF function asynchronous attribute is enabled. `TRUE` is open, `FALSE` is close.", }, "enable_public_net": { @@ -221,7 +225,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Type: schema.TypeString, Optional: true, ConflictsWith: []string{"zip_file", "image_config"}, - ValidateFunc: validateStringSuffix(".zip", ".jar"), + ValidateFunc: tccommon.ValidateStringSuffix(".zip", ".jar"), Description: "Cos object name of the SCF function, should have suffix `.zip` or `.jar`, conflict with `zip_file`.", }, "cos_bucket_region": { @@ -250,7 +254,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { "image_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{"personal", "enterprise"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"personal", "enterprise"}), Description: "The image type. personal or enterprise.", }, "image_uri": { @@ -288,7 +292,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 9000, - ValidateFunc: validateIntegerInRange(-1, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(-1, 65535), Description: "Image function port setting. Default is `9000`, -1 indicates no port mirroring function. Other value ranges 0 ~ 65535.", }, }, @@ -304,7 +308,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "Name of the SCF function trigger, if `type` is `ckafka`, the format of name must be `-`; if `type` is `cos`, the name is cos bucket id, other In any case, it can be combined arbitrarily. It can only contain English letters, numbers, connectors and underscores. The maximum length is 100.", }, "cos_region": { @@ -315,7 +319,7 @@ func resourceTencentCloudScfFunction() *schema.Resource { "type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(SCF_TRIGGER_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCF_TRIGGER_TYPES), Description: "Type of the SCF function trigger, support `cos`, `cmq`, `timer`, `ckafka`, `apigw`.", }, "trigger_desc": { @@ -524,11 +528,11 @@ func resourceTencentCloudScfFunction() *schema.Resource { } func resourceTencentCloudScfFunctionCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_scf_function.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := m.(*TencentCloudClient).apiV3Conn + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() scfService := ScfService{client: client} var functionInfo scfFunctionInfo @@ -741,10 +745,10 @@ func resourceTencentCloudScfFunctionCreate(d *schema.ResourceData, m interface{} if tags := helper.GetTags(d, "tags"); len(tags) > 0 { functionInfo.tags = tags - tagService := TagService{client: m.(*TencentCloudClient).apiV3Conn} - region := m.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(m.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := m.(tccommon.ProviderMeta).GetAPIV3Conn().Region functionId := fmt.Sprintf("%s/function/%s", *functionInfo.namespace, functionInfo.name) - resourceName := BuildTagResourceName(SCF_SERVICE, SCF_FUNCTION_RESOURCE_PREFIX, region, functionId) + resourceName := tccommon.BuildTagResourceName(SCF_SERVICE, SCF_FUNCTION_RESOURCE_PREFIX, region, functionId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { log.Printf("[CRITAL]%s create function tags failed: %+v", logId, err) return err @@ -847,13 +851,13 @@ func resourceTencentCloudScfFunctionCreate(d *schema.ResourceData, m interface{} } func resourceTencentCloudScfFunctionRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function.read")() + defer tccommon.InconsistentCheck(d, m)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() split := strings.Split(id, "+") @@ -1034,13 +1038,13 @@ func resourceTencentCloudScfFunctionRead(d *schema.ResourceData, m interface{}) } func resourceTencentCloudScfFunctionUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_scf_function.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := m.(*TencentCloudClient).apiV3Conn + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() scfService := ScfService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region id := d.Id() @@ -1413,8 +1417,8 @@ func resourceTencentCloudScfFunctionUpdate(d *schema.ResourceData, m interface{} functionId := fmt.Sprintf("%s/function/%s", fnNamespace, fnName) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName(SCF_SERVICE, SCF_FUNCTION_RESOURCE_PREFIX, region, functionId) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName(SCF_SERVICE, SCF_FUNCTION_RESOURCE_PREFIX, region, functionId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { log.Printf("[CRITAL]%s update function tags failed: %+v", logId, err) @@ -1431,11 +1435,11 @@ func resourceTencentCloudScfFunctionUpdate(d *schema.ResourceData, m interface{} } func resourceTencentCloudScfFunctionDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_scf_function.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ScfService{client: m.(*TencentCloudClient).apiV3Conn} + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() split := strings.Split(id, "+") diff --git a/tencentcloud/resource_tc_scf_function_alias.go b/tencentcloud/services/scf/resource_tc_scf_function_alias.go similarity index 86% rename from tencentcloud/resource_tc_scf_function_alias.go rename to tencentcloud/services/scf/resource_tc_scf_function_alias.go index 0c33e114aa..9287d4c618 100644 --- a/tencentcloud/resource_tc_scf_function_alias.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_alias.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfFunctionAlias() *schema.Resource { +func ResourceTencentCloudScfFunctionAlias() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfFunctionAliasCreate, Read: resourceTencentCloudScfFunctionAliasRead, @@ -115,10 +118,10 @@ func resourceTencentCloudScfFunctionAlias() *schema.Resource { } func resourceTencentCloudScfFunctionAliasCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_alias.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_alias.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewCreateAliasRequest() @@ -186,10 +189,10 @@ func resourceTencentCloudScfFunctionAliasCreate(d *schema.ResourceData, meta int request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().CreateAlias(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().CreateAlias(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -200,22 +203,22 @@ func resourceTencentCloudScfFunctionAliasCreate(d *schema.ResourceData, meta int return err } - d.SetId(namespace + FILED_SP + functionName + FILED_SP + name) + d.SetId(namespace + tccommon.FILED_SP + functionName + tccommon.FILED_SP + name) return resourceTencentCloudScfFunctionAliasRead(d, meta) } func resourceTencentCloudScfFunctionAliasRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_alias.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_alias.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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{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()) } @@ -304,14 +307,14 @@ func resourceTencentCloudScfFunctionAliasRead(d *schema.ResourceData, meta inter } func resourceTencentCloudScfFunctionAliasUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_alias.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_alias.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := scf.NewUpdateAliasRequest() - 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()) } @@ -377,10 +380,10 @@ func resourceTencentCloudScfFunctionAliasUpdate(d *schema.ResourceData, meta int request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().UpdateAlias(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().UpdateAlias(request) if e != nil { - return retryError(e) + return tccommon.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,14 +399,14 @@ func resourceTencentCloudScfFunctionAliasUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudScfFunctionAliasDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_alias.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_alias.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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ScfService{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_scf_function_alias_test.go b/tencentcloud/services/scf/resource_tc_scf_function_alias_test.go similarity index 90% rename from tencentcloud/resource_tc_scf_function_alias_test.go rename to tencentcloud/services/scf/resource_tc_scf_function_alias_test.go index e63e5024d5..13412e0f6c 100644 --- a/tencentcloud/resource_tc_scf_function_alias_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_alias_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfFunctionAliasResource_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: testAccScfFunctionAlias, diff --git a/tencentcloud/resource_tc_scf_function_event_invoke_config.go b/tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config.go similarity index 79% rename from tencentcloud/resource_tc_scf_function_event_invoke_config.go rename to tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config.go index 5c9cba2bfa..1fe50c8e2f 100644 --- a/tencentcloud/resource_tc_scf_function_event_invoke_config.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfFunctionEventInvokeConfig() *schema.Resource { +func ResourceTencentCloudScfFunctionEventInvokeConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfFunctionEventInvokeConfigCreate, Read: resourceTencentCloudScfFunctionEventInvokeConfigRead, @@ -68,28 +71,28 @@ func resourceTencentCloudScfFunctionEventInvokeConfig() *schema.Resource { } func resourceTencentCloudScfFunctionEventInvokeConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_event_invoke_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_event_invoke_config.create")() + defer tccommon.InconsistentCheck(d, meta)() functionName := d.Get("function_name").(string) namespace := d.Get("namespace").(string) - d.SetId(functionName + FILED_SP + namespace) + d.SetId(functionName + tccommon.FILED_SP + namespace) return resourceTencentCloudScfFunctionEventInvokeConfigUpdate(d, meta) } func resourceTencentCloudScfFunctionEventInvokeConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_event_invoke_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_event_invoke_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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{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 +143,14 @@ func resourceTencentCloudScfFunctionEventInvokeConfigRead(d *schema.ResourceData } func resourceTencentCloudScfFunctionEventInvokeConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_event_invoke_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_event_invoke_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := scf.NewUpdateFunctionEventInvokeConfigRequest() - 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 resourceTencentCloudScfFunctionEventInvokeConfigUpdate(d *schema.ResourceDa request.AsyncTriggerConfig = &asyncTriggerConfig } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().UpdateFunctionEventInvokeConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().UpdateFunctionEventInvokeConfig(request) if e != nil { - return retryError(e) + return tccommon.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,8 +196,8 @@ func resourceTencentCloudScfFunctionEventInvokeConfigUpdate(d *schema.ResourceDa } func resourceTencentCloudScfFunctionEventInvokeConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_function_event_invoke_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_event_invoke_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_scf_function_event_invoke_config_test.go b/tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config_test.go similarity index 84% rename from tencentcloud/resource_tc_scf_function_event_invoke_config_test.go rename to tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config_test.go index d829f2e6d9..6b2a97b214 100644 --- a/tencentcloud/resource_tc_scf_function_event_invoke_config_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_event_invoke_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudNeedFixScfFunctionEventInvokeConfigResource_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: testAccScfFunctionEventInvokeConfig, diff --git a/tencentcloud/resource_tc_scf_function_test.go b/tencentcloud/services/scf/resource_tc_scf_function_test.go similarity index 92% rename from tencentcloud/resource_tc_scf_function_test.go rename to tencentcloud/services/scf/resource_tc_scf_function_test.go index 487fabe2b4..6ef152784d 100644 --- a/tencentcloud/resource_tc_scf_function_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf_test import ( "context" @@ -12,6 +12,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcscf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/scf" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -24,12 +28,12 @@ func init() { resource.AddTestSweepers("tencentcloud_scf", &resource.Sweeper{ Name: "tencentcloud_scf", 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 := ScfService{client: client} + service := svcscf.NewScfService(client) nss, err := service.DescribeNamespaces(ctx) if err != nil { return nil @@ -41,14 +45,14 @@ func init() { continue } for _, fun := range funs { - createTime := stringTotime(*fun.AddTime) + createTime := tccommon.StringToTime(*fun.AddTime) now := time.Now() interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(*fun.FunctionName, keepResource) || strings.HasPrefix(*fun.FunctionName, defaultResource) { + if strings.HasPrefix(*fun.FunctionName, tcacctest.KeepResource) || strings.HasPrefix(*fun.FunctionName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } err := service.DeleteFunction(ctx, *fun.FunctionName, *nsName) @@ -67,8 +71,8 @@ func TestAccTencentCloudScfFunction_basic(t *testing.T) { var fnId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -96,7 +100,7 @@ func TestAccTencentCloudScfFunction_basic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"), @@ -158,8 +162,8 @@ func TestAccTencentCloudScfFunction_cos(t *testing.T) { } resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -190,7 +194,7 @@ func TestAccTencentCloudScfFunction_cos(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"), @@ -209,7 +213,7 @@ func TestAccTencentCloudScfFunction_cos(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), ), }, @@ -222,8 +226,8 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) { var fnId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -239,7 +243,7 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "vpc_id", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "subnet_id", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "namespace", "default"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", defaultScfRoleName1), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", DefaultScfRoleName1), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "cls_logset_id"), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "cls_topic_id"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "l5_enable", "false"), @@ -250,7 +254,7 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"), @@ -262,14 +266,14 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) { Config: scfFunctionCodeEmbed("first.zip", testAccScfFunctionRoleUpdate), Check: resource.ComposeTestCheckFunc( testAccCheckScfFunctionExists("tencentcloud_scf_function.foo", &fnId), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", defaultScfRoleName2), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", DefaultScfRoleName2), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), ), }, @@ -282,8 +286,8 @@ func TestAccTencentCloudScfFunction_trigger(t *testing.T) { var fnId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -311,7 +315,7 @@ func TestAccTencentCloudScfFunction_trigger(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"), @@ -332,7 +336,7 @@ func TestAccTencentCloudScfFunction_trigger(t *testing.T) { testAccCheckScfFunctionExists("tencentcloud_scf_function.foo", &fnId), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "triggers.#", "1"), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "trigger_info.#", "1"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "trigger_info.0.enable", "true"), @@ -349,8 +353,8 @@ func TestAccTencentCloudScfFunction_customNamespace(t *testing.T) { var fnId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -365,7 +369,7 @@ func TestAccTencentCloudScfFunction_customNamespace(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "runtime", "Python3.6"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "vpc_id", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "subnet_id", ""), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "namespace", defaultScfNamespace), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "namespace", tcacctest.DefaultScfNamespace), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "cls_logset_id"), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "cls_topic_id"), @@ -378,7 +382,7 @@ func TestAccTencentCloudScfFunction_customNamespace(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""), resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"), - resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", SCF_FUNCTION_STATUS_ACTIVE), + resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"), resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"), @@ -396,8 +400,8 @@ func TestAccTencentCloudScfFunction_fs(t *testing.T) { var fnId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfFunctionDestroy(&fnId), Steps: []resource.TestStep{ { @@ -462,7 +466,7 @@ func testAccCheckScfFunctionExists(n string, id *string) resource.TestCheckFunc split := strings.Split(rs.Primary.ID, "+") namespace, name := split[0], split[1] - service := ScfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcscf.NewScfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) fn, err := service.DescribeFunction(context.TODO(), name, namespace) if err != nil { @@ -481,8 +485,8 @@ func testAccCheckScfFunctionExists(n string, id *string) resource.TestCheckFunc func testAccCheckScfFunctionDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := ScfService{client: client} + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcscf.NewScfService(client) split := strings.Split(*id, "+") if len(split) != 2 { @@ -563,7 +567,7 @@ resource "tencentcloud_scf_function" "foo" { } ` -var testAccScfFunctionBasicUpdate = fmt.Sprintf(defaultVpcVariable+` +var testAccScfFunctionBasicUpdate = fmt.Sprintf(tcacctest.DefaultVpcVariable+` resource "tencentcloud_scf_function" "foo" { name = "%s" handler = "second.do_it_second" @@ -614,7 +618,7 @@ resource "tencentcloud_scf_function" "foo" { cos_bucket_name = local.bucket_name cos_object_name = tencentcloud_cos_bucket_object.myobject.key cos_bucket_region = "ap-guangzhou" -}`, defaultSCFCosBucket, codeSource) +}`, tcacctest.DefaultSCFCosBucket, codeSource) } func testAccScfFunctionCosUpdateCode(codeSource string) string { @@ -644,11 +648,11 @@ resource "tencentcloud_scf_function" "foo" { cos_bucket_name = local.bucket_name cos_object_name = tencentcloud_cos_bucket_object.bar.key cos_bucket_region = "ap-guangzhou" -}`, defaultSCFCosBucket, codeSource, codeSource, scfFunctionRandomName()) +}`, tcacctest.DefaultSCFCosBucket, codeSource, codeSource, scfFunctionRandomName()) } -const defaultScfRoleName1 = "preset-scf-role" -const defaultScfRoleName2 = "preset-scf-role-new" +const DefaultScfRoleName1 = "preset-scf-role" +const DefaultScfRoleName2 = "preset-scf-role-new" var testAccScfFunctionRole = fmt.Sprintf(` variable "role_document" { @@ -675,7 +679,7 @@ resource "tencentcloud_scf_function" "foo" { zip_file = "%s" } -`, "%s", defaultScfRoleName1, "%s") +`, "%s", DefaultScfRoleName1, "%s") var testAccScfFunctionRoleUpdate = fmt.Sprintf(` # use this docment to create role if migrate @@ -703,7 +707,7 @@ resource "tencentcloud_scf_function" "foo" { zip_file = "%s" } -`, "%s", defaultScfRoleName2, "%s") +`, "%s", DefaultScfRoleName2, "%s") var testAccScfFunctionTrigger = fmt.Sprintf(` %s @@ -729,7 +733,7 @@ resource "tencentcloud_scf_function" "foo" { trigger_desc = "{\"event\":\"cos:ObjectCreated:Put\",\"filter\":{\"Prefix\":\"\",\"Suffix\":\"\"}}" } } -`, defaultSCFCosBucket, "%s", "%s") +`, tcacctest.DefaultSCFCosBucket, "%s", "%s") var testAccScfFunctionTriggerUpdate = fmt.Sprintf(` @@ -749,7 +753,7 @@ resource "tencentcloud_scf_function" "foo" { } `, "%s", "%s") -var testAccScfFunctionCfsConfigs = fmt.Sprintf(defaultVpcVariable+defaultFileSystem+` +var testAccScfFunctionCfsConfigs = fmt.Sprintf(tcacctest.DefaultVpcVariable+tcacctest.DefaultFileSystem+` resource "tencentcloud_scf_function" "foo" { name = "%s" @@ -780,7 +784,7 @@ resource "tencentcloud_scf_function" "foo" { zip_file = "%s" } `, "%s", "%s") -var testAccScfFunctionCfsConfigsUpdate = fmt.Sprintf(defaultVpcVariable+defaultFileSystem+` +var testAccScfFunctionCfsConfigsUpdate = fmt.Sprintf(tcacctest.DefaultVpcVariable+tcacctest.DefaultFileSystem+` resource "tencentcloud_scf_function" "foo" { name = "%s" diff --git a/tencentcloud/services/scf/resource_tc_scf_function_version.go b/tencentcloud/services/scf/resource_tc_scf_function_version.go new file mode 100644 index 0000000000..481252a967 --- /dev/null +++ b/tencentcloud/services/scf/resource_tc_scf_function_version.go @@ -0,0 +1,182 @@ +package scf + +import ( + "context" + "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" + scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudScfFunctionVersion() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudScfFunctionVersionCreate, + Read: resourceTencentCloudScfFunctionVersionRead, + Delete: resourceTencentCloudScfFunctionVersionDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "function_name": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "Name of the released function.", + }, + + "description": { + Optional: true, + Type: schema.TypeString, + ForceNew: true, + Description: "Function description.", + }, + + "namespace": { + Optional: true, + Type: schema.TypeString, + ForceNew: true, + Description: "Function namespace.", + }, + + "function_version": { + Computed: true, + Type: schema.TypeString, + Description: "Version of the released function.", + }, + }, + } +} + +func resourceTencentCloudScfFunctionVersionCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_version.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = scf.NewPublishVersionRequest() + response = scf.NewPublishVersionResponse() + functionName string + namespace string + functionVersion string + ) + if v, ok := d.GetOk("function_name"); ok { + functionName = v.(string) + request.FunctionName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOk("namespace"); ok { + namespace = v.(string) + request.Namespace = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().PublishVersion(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 scf FunctionVersion failed, reason:%+v", logId, err) + return err + } + + functionVersion = *response.Response.FunctionVersion + d.SetId(functionName + tccommon.FILED_SP + namespace + tccommon.FILED_SP + functionVersion) + + // wait ready + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + err = waitScfFunctionReady(ctx, functionName, namespace, client.UseScfClient()) + if err != nil { + return err + } + + return resourceTencentCloudScfFunctionVersionRead(d, meta) +} + +func resourceTencentCloudScfFunctionVersionRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_version.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{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()) + } + functionName := idSplit[0] + namespace := idSplit[1] + functionVersion := idSplit[2] + + version, err := service.DescribeScfFunctionVersionById(ctx, functionName, namespace, functionVersion) + if err != nil { + return err + } + + if version == nil { + d.SetId("") + log.Printf("[WARN]%s resource `ScfFunctionVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if version.Response.FunctionName != nil { + _ = d.Set("function_name", version.Response.FunctionName) + } + + if version.Response.Description != nil { + _ = d.Set("description", version.Response.Description) + } + + if version.Response.Namespace != nil { + _ = d.Set("namespace", version.Response.Namespace) + } + + if version.Response.FunctionVersion != nil { + _ = d.Set("function_version", version.Response.FunctionVersion) + } + + return nil +} + +func resourceTencentCloudScfFunctionVersionDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_function_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{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()) + } + functionName := idSplit[0] + namespace := idSplit[1] + functionVersion := idSplit[2] + + if err := service.DeleteScfFunctionVersionById(ctx, functionName, namespace, functionVersion); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_scf_function_version_test.go b/tencentcloud/services/scf/resource_tc_scf_function_version_test.go similarity index 82% rename from tencentcloud/resource_tc_scf_function_version_test.go rename to tencentcloud/services/scf/resource_tc_scf_function_version_test.go index 1aa8e9ed54..ea0895f368 100644 --- a/tencentcloud/resource_tc_scf_function_version_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_function_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfFunctionVersionResource_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: testAccScfFunctionVersion, diff --git a/tencentcloud/resource_tc_scf_invoke_function.go b/tencentcloud/services/scf/resource_tc_scf_invoke_function.go similarity index 82% rename from tencentcloud/resource_tc_scf_invoke_function.go rename to tencentcloud/services/scf/resource_tc_scf_invoke_function.go index 0b89e42c50..714516d264 100644 --- a/tencentcloud/resource_tc_scf_invoke_function.go +++ b/tencentcloud/services/scf/resource_tc_scf_invoke_function.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfInvokeFunction() *schema.Resource { +func ResourceTencentCloudScfInvokeFunction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfInvokeFunctionCreate, Read: resourceTencentCloudScfInvokeFunctionRead, @@ -68,10 +71,10 @@ func resourceTencentCloudScfInvokeFunction() *schema.Resource { } func resourceTencentCloudScfInvokeFunctionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_invoke_function.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_invoke_function.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewInvokeRequest() @@ -105,10 +108,10 @@ func resourceTencentCloudScfInvokeFunctionCreate(d *schema.ResourceData, meta in request.RoutingKey = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().Invoke(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().Invoke(request) if e != nil { - return retryError(e) + return tccommon.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,15 +131,15 @@ func resourceTencentCloudScfInvokeFunctionCreate(d *schema.ResourceData, meta in } func resourceTencentCloudScfInvokeFunctionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_invoke_function.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_invoke_function.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudScfInvokeFunctionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_invoke_function.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_invoke_function.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_scf_invoke_function_test.go b/tencentcloud/services/scf/resource_tc_scf_invoke_function_test.go similarity index 78% rename from tencentcloud/resource_tc_scf_invoke_function_test.go rename to tencentcloud/services/scf/resource_tc_scf_invoke_function_test.go index 61ca169894..79fbf02c97 100644 --- a/tencentcloud/resource_tc_scf_invoke_function_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_invoke_function_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfInvokeFunctionResource_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: testAccScfInvokeFunction, diff --git a/tencentcloud/resource_tc_scf_layer.go b/tencentcloud/services/scf/resource_tc_scf_layer.go similarity index 84% rename from tencentcloud/resource_tc_scf_layer.go rename to tencentcloud/services/scf/resource_tc_scf_layer.go index 21a92af707..40d500c074 100644 --- a/tencentcloud/resource_tc_scf_layer.go +++ b/tencentcloud/services/scf/resource_tc_scf_layer.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf import ( "encoding/base64" @@ -8,11 +8,14 @@ import ( "os" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/mitchellh/go-homedir" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -28,7 +31,7 @@ func LayerContent() map[string]*schema.Schema { "cos_object_name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringSuffix(".zip", ".jar"), + ValidateFunc: tccommon.ValidateStringSuffix(".zip", ".jar"), Description: "Cos object name of the SCF layer, should have suffix `.zip` or `.jar`, conflict with `zip_file`.", }, "cos_bucket_region": { @@ -45,7 +48,7 @@ func LayerContent() map[string]*schema.Schema { } } -func resourceTencentCloudScfLayer() *schema.Resource { +func ResourceTencentCloudScfLayer() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfLayerCreate, Read: resourceTencentCloudScfLayerRead, @@ -121,10 +124,10 @@ func resourceTencentCloudScfLayer() *schema.Resource { } func resourceTencentCloudScfLayerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_layer.create")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_scf_layer.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) var ( - scfService = ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + scfService = ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = scf.NewPublishLayerVersionRequest() layerName *string layerVersion *int64 @@ -188,13 +191,13 @@ func resourceTencentCloudScfLayerCreate(d *schema.ResourceData, meta interface{} request.LicenseInfo = helper.String(v.(string)) } - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := scfService.client.UseScfClient().PublishLayerVersion(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, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -205,7 +208,7 @@ func resourceTencentCloudScfLayerCreate(d *schema.ResourceData, meta interface{} return err } - d.SetId(*layerName + FILED_SP + helper.Int64ToStr(*layerVersion)) + d.SetId(*layerName + tccommon.FILED_SP + helper.Int64ToStr(*layerVersion)) return resourceTencentCloudScfLayerRead(d, meta) } @@ -214,19 +217,19 @@ func resourceTencentCloudScfLayerUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudScfLayerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_layer.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_layer.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 ( - scfService = ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + scfService = ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} layerRequest = scf.NewGetLayerVersionRequest() layerResponse = scf.GetLayerVersionResponse{} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("scf layer id is borken, id is %s", d.Id()) } @@ -236,13 +239,13 @@ func resourceTencentCloudScfLayerRead(d *schema.ResourceData, meta interface{}) layerRequest.LayerName = &layerName layerRequest.LayerVersion = helper.Int64(helper.StrToInt64(layerVersion)) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(layerRequest.GetAction()) response, err := scfService.client.UseScfClient().GetLayerVersion(layerRequest) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, layerRequest.GetAction(), layerRequest.ToJsonString(), err.Error()) - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -280,16 +283,16 @@ func resourceTencentCloudScfLayerRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudScfLayerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_layer.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_scf_layer.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( - scfService = ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + scfService = ScfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = scf.NewDeleteLayerVersionRequest() ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("scf layer id is borken, id is %s", d.Id()) } @@ -299,12 +302,12 @@ func resourceTencentCloudScfLayerDelete(d *schema.ResourceData, meta interface{} request.LayerName = &layerName request.LayerVersion = helper.Int64(helper.StrToInt64(layerVersion)) - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := scfService.client.UseScfClient().DeleteLayerVersion(request); 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, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { diff --git a/tencentcloud/services/scf/resource_tc_scf_namespace.go b/tencentcloud/services/scf/resource_tc_scf_namespace.go new file mode 100644 index 0000000000..dee35aecd4 --- /dev/null +++ b/tencentcloud/services/scf/resource_tc_scf_namespace.go @@ -0,0 +1,130 @@ +package scf + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceTencentCloudScfNamespace() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudScfNamespaceCreate, + Read: resourceTencentCloudScfNamespaceRead, + Update: resourceTencentCloudScfNamespaceUpdate, + Delete: resourceTencentCloudScfNamespaceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "namespace": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the SCF namespace.", + }, + "description": { + Type: schema.TypeString, + Optional: true, + Default: "", + Description: "Description of the SCF namespace.", + }, + + // computed + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "SCF namespace creation time.", + }, + "modify_time": { + Type: schema.TypeString, + Computed: true, + Description: "SCF namespace last modified time.", + }, + "type": { + Type: schema.TypeString, + Computed: true, + Description: "SCF namespace type.", + }, + }, + } +} + +func resourceTencentCloudScfNamespaceCreate(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_namespace.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + namespace := d.Get("namespace").(string) + desc := d.Get("description").(string) + + if err := service.CreateNamespace(ctx, namespace, desc); err != nil { + log.Printf("[CRITAL]%s create namespace failed: %+v", logId, err) + return err + } + + d.SetId(namespace) + + return resourceTencentCloudScfNamespaceRead(d, m) +} + +func resourceTencentCloudScfNamespaceRead(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_namespace.read")() + defer tccommon.InconsistentCheck(d, m)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + id := d.Id() + + namespace, err := service.DescribeNamespace(ctx, id) + if err != nil { + log.Printf("[CRITAL]%s read namespace failed: %+v", logId, err) + return err + } + + if namespace == nil { + d.SetId("") + return nil + } + + _ = d.Set("namespace", namespace.Name) + _ = d.Set("description", namespace.Description) + _ = d.Set("create_time", namespace.AddTime) + _ = d.Set("modify_time", namespace.ModTime) + _ = d.Set("type", namespace.Type) + + return nil +} + +func resourceTencentCloudScfNamespaceUpdate(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_namespace.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + if err := service.ModifyNamespace(ctx, d.Id(), d.Get("description").(string)); err != nil { + log.Printf("[CRITAL]%s update namespace description failed: %+v", logId, err) + return err + } + + return resourceTencentCloudScfNamespaceRead(d, m) +} + +func resourceTencentCloudScfNamespaceDelete(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_namespace.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + return service.DeleteNamespace(ctx, d.Id()) +} diff --git a/tencentcloud/resource_tc_scf_namespace_test.go b/tencentcloud/services/scf/resource_tc_scf_namespace_test.go similarity index 77% rename from tencentcloud/resource_tc_scf_namespace_test.go rename to tencentcloud/services/scf/resource_tc_scf_namespace_test.go index 68cb97405d..0cb73e7e6f 100644 --- a/tencentcloud/resource_tc_scf_namespace_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_namespace_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf_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" + svcscf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/scf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/pkg/errors" @@ -16,11 +20,11 @@ func init() { resource.AddTestSweepers("tencentcloud_scf_namespace", &resource.Sweeper{ Name: "tencentcloud_scf_namespace", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := ScfService{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 := svcscf.NewScfService(client) info, err := service.DescribeNamespaces(ctx) if err != nil { return err @@ -44,8 +48,8 @@ func TestAccTencentCloudScfNamespace_basic(t *testing.T) { var nsId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckScfNamespaceDestroy(&nsId), Steps: []resource.TestStep{ { @@ -82,7 +86,7 @@ func testAccCheckScfNamespaceExists(n string, id *string) resource.TestCheckFunc return errors.New("no scf namespace id is set") } - service := ScfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcscf.NewScfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) fn, err := service.DescribeNamespace(context.TODO(), rs.Primary.ID) if err != nil { @@ -101,8 +105,8 @@ func testAccCheckScfNamespaceExists(n string, id *string) resource.TestCheckFunc func testAccCheckScfNamespaceDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := ScfService{client: client} + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcscf.NewScfService(client) namespace, err := service.DescribeNamespace(context.TODO(), *id) if err != nil { diff --git a/tencentcloud/resource_tc_scf_provisioned_concurrency_config.go b/tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config.go similarity index 85% rename from tencentcloud/resource_tc_scf_provisioned_concurrency_config.go rename to tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config.go index d411110c63..a0c01c640e 100644 --- a/tencentcloud/resource_tc_scf_provisioned_concurrency_config.go +++ b/tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfProvisionedConcurrencyConfig() *schema.Resource { +func ResourceTencentCloudScfProvisionedConcurrencyConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfProvisionedConcurrencyConfigCreate, Read: resourceTencentCloudScfProvisionedConcurrencyConfigRead, @@ -110,10 +113,10 @@ func resourceTencentCloudScfProvisionedConcurrencyConfig() *schema.Resource { } func resourceTencentCloudScfProvisionedConcurrencyConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_provisioned_concurrency_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_provisioned_concurrency_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewPutProvisionedConcurrencyConfigRequest() @@ -176,10 +179,10 @@ func resourceTencentCloudScfProvisionedConcurrencyConfigCreate(d *schema.Resourc request.MaxCapacity = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().PutProvisionedConcurrencyConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().PutProvisionedConcurrencyConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -190,7 +193,7 @@ func resourceTencentCloudScfProvisionedConcurrencyConfigCreate(d *schema.Resourc return err } - d.SetId(functionName + FILED_SP + qualifier + FILED_SP + namespace) + d.SetId(functionName + tccommon.FILED_SP + qualifier + tccommon.FILED_SP + namespace) // dirty code time.Sleep(5 * time.Second) @@ -199,16 +202,16 @@ func resourceTencentCloudScfProvisionedConcurrencyConfigCreate(d *schema.Resourc } func resourceTencentCloudScfProvisionedConcurrencyConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_provisioned_concurrency_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_provisioned_concurrency_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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{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()) } @@ -267,14 +270,14 @@ func resourceTencentCloudScfProvisionedConcurrencyConfigRead(d *schema.ResourceD } func resourceTencentCloudScfProvisionedConcurrencyConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_provisioned_concurrency_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_provisioned_concurrency_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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ScfService{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_scf_provisioned_concurrency_config_test.go b/tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config_test.go similarity index 87% rename from tencentcloud/resource_tc_scf_provisioned_concurrency_config_test.go rename to tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config_test.go index 196f5dd434..2d8f4e5bdd 100644 --- a/tencentcloud/resource_tc_scf_provisioned_concurrency_config_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_provisioned_concurrency_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfProvisionedConcurrencyConfigResource_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: testAccScfProvisionedConcurrencyConfig, diff --git a/tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config.go b/tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config.go new file mode 100644 index 0000000000..8711533574 --- /dev/null +++ b/tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config.go @@ -0,0 +1,154 @@ +package scf + +import ( + "context" + "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" + scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudScfReservedConcurrencyConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudScfReservedConcurrencyConfigCreate, + Read: resourceTencentCloudScfReservedConcurrencyConfigRead, + Delete: resourceTencentCloudScfReservedConcurrencyConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "function_name": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Specifies the function of which you want to configure the reserved quota.", + }, + + "reserved_concurrency_mem": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Reserved memory quota of the function. Note: the upper limit for the total reserved quota of the function is the user's total concurrency memory minus 12800.", + }, + + "namespace": { + Optional: true, + ForceNew: true, + Default: "default", + Type: schema.TypeString, + Description: "Function namespace. Default value: default.", + }, + }, + } +} + +func resourceTencentCloudScfReservedConcurrencyConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_reserved_concurrency_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = scf.NewPutReservedConcurrencyConfigRequest() + namespace string + functionName string + ) + if v, ok := d.GetOk("function_name"); ok { + functionName = v.(string) + request.FunctionName = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("reserved_concurrency_mem"); ok { + request.ReservedConcurrencyMem = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("namespace"); ok { + namespace = v.(string) + request.Namespace = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().PutReservedConcurrencyConfig(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 scf ReservedConcurrencyConfig failed, reason:%+v", logId, err) + return err + } + + d.SetId(namespace + tccommon.FILED_SP + functionName) + + return resourceTencentCloudScfReservedConcurrencyConfigRead(d, meta) +} + +func resourceTencentCloudScfReservedConcurrencyConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_reserved_concurrency_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{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()) + } + namespace := idSplit[0] + functionName := idSplit[1] + + reservedConcurrencyConfig, err := service.DescribeScfReservedConcurrencyConfigById(ctx, namespace, functionName) + if err != nil { + return err + } + + if reservedConcurrencyConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `ScfReservedConcurrencyConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("namespace", namespace) + _ = d.Set("function_name", functionName) + + if reservedConcurrencyConfig.Response.ReservedMem != nil { + _ = d.Set("reserved_concurrency_mem", reservedConcurrencyConfig.Response.ReservedMem) + } + + return nil +} + +func resourceTencentCloudScfReservedConcurrencyConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_scf_reserved_concurrency_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := ScfService{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()) + } + namespace := idSplit[0] + functionName := idSplit[1] + + if err := service.DeleteScfReservedConcurrencyConfigById(ctx, namespace, functionName); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_scf_reserved_concurrency_config_test.go b/tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config_test.go similarity index 83% rename from tencentcloud/resource_tc_scf_reserved_concurrency_config_test.go rename to tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config_test.go index 9441b146a8..ff5c1678b3 100644 --- a/tencentcloud/resource_tc_scf_reserved_concurrency_config_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_reserved_concurrency_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfReservedConcurrencyConfigResource_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: testAccScfReservedConcurrencyConfig, diff --git a/tencentcloud/resource_tc_scf_sync_invoke_function.go b/tencentcloud/services/scf/resource_tc_scf_sync_invoke_function.go similarity index 80% rename from tencentcloud/resource_tc_scf_sync_invoke_function.go rename to tencentcloud/services/scf/resource_tc_scf_sync_invoke_function.go index a4576c3dc7..07fd77aea6 100644 --- a/tencentcloud/resource_tc_scf_sync_invoke_function.go +++ b/tencentcloud/services/scf/resource_tc_scf_sync_invoke_function.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfSyncInvokeFunction() *schema.Resource { +func ResourceTencentCloudScfSyncInvokeFunction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfSyncInvokeFunctionCreate, Read: resourceTencentCloudScfSyncInvokeFunctionRead, @@ -61,10 +64,10 @@ func resourceTencentCloudScfSyncInvokeFunction() *schema.Resource { } func resourceTencentCloudScfSyncInvokeFunctionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_sync_invoke_function.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_sync_invoke_function.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewInvokeFunctionRequest() @@ -95,10 +98,10 @@ func resourceTencentCloudScfSyncInvokeFunctionCreate(d *schema.ResourceData, met request.RoutingKey = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().InvokeFunction(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().InvokeFunction(request) if e != nil { - return retryError(e) + return tccommon.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,15 +120,15 @@ func resourceTencentCloudScfSyncInvokeFunctionCreate(d *schema.ResourceData, met } func resourceTencentCloudScfSyncInvokeFunctionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_sync_invoke_function.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_sync_invoke_function.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudScfSyncInvokeFunctionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_sync_invoke_function.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_sync_invoke_function.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_scf_sync_invoke_function_test.go b/tencentcloud/services/scf/resource_tc_scf_sync_invoke_function_test.go similarity index 79% rename from tencentcloud/resource_tc_scf_sync_invoke_function_test.go rename to tencentcloud/services/scf/resource_tc_scf_sync_invoke_function_test.go index 1caea6baf7..502e910319 100644 --- a/tencentcloud/resource_tc_scf_sync_invoke_function_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_sync_invoke_function_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfSyncInvokeFunctionResource_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: testAccScfSyncInvokeFunction, diff --git a/tencentcloud/resource_tc_scf_terminate_async_event.go b/tencentcloud/services/scf/resource_tc_scf_terminate_async_event.go similarity index 76% rename from tencentcloud/resource_tc_scf_terminate_async_event.go rename to tencentcloud/services/scf/resource_tc_scf_terminate_async_event.go index a38559afb6..b02f4000ab 100644 --- a/tencentcloud/resource_tc_scf_terminate_async_event.go +++ b/tencentcloud/services/scf/resource_tc_scf_terminate_async_event.go @@ -1,15 +1,18 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfTerminateAsyncEvent() *schema.Resource { +func ResourceTencentCloudScfTerminateAsyncEvent() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfTerminateAsyncEventCreate, Read: resourceTencentCloudScfTerminateAsyncEventRead, @@ -47,10 +50,10 @@ func resourceTencentCloudScfTerminateAsyncEvent() *schema.Resource { } func resourceTencentCloudScfTerminateAsyncEventCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_terminate_async_event.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_terminate_async_event.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewTerminateAsyncEventRequest() @@ -73,10 +76,10 @@ func resourceTencentCloudScfTerminateAsyncEventCreate(d *schema.ResourceData, me request.GraceShutdown = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().TerminateAsyncEvent(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().TerminateAsyncEvent(request) if e != nil { - return retryError(e) + return tccommon.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 +96,15 @@ func resourceTencentCloudScfTerminateAsyncEventCreate(d *schema.ResourceData, me } func resourceTencentCloudScfTerminateAsyncEventRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_terminate_async_event.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_terminate_async_event.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudScfTerminateAsyncEventDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_terminate_async_event.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_terminate_async_event.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_scf_terminate_async_event_test.go b/tencentcloud/services/scf/resource_tc_scf_terminate_async_event_test.go similarity index 81% rename from tencentcloud/resource_tc_scf_terminate_async_event_test.go rename to tencentcloud/services/scf/resource_tc_scf_terminate_async_event_test.go index 0e3fea3d09..35fd408609 100644 --- a/tencentcloud/resource_tc_scf_terminate_async_event_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_terminate_async_event_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudNeedFixScfTerminateAsyncEventResource_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: testAccScfTerminateAsyncEvent, diff --git a/tencentcloud/resource_tc_scf_trigger_config.go b/tencentcloud/services/scf/resource_tc_scf_trigger_config.go similarity index 81% rename from tencentcloud/resource_tc_scf_trigger_config.go rename to tencentcloud/services/scf/resource_tc_scf_trigger_config.go index 43143c8703..4f5fb546a4 100644 --- a/tencentcloud/resource_tc_scf_trigger_config.go +++ b/tencentcloud/services/scf/resource_tc_scf_trigger_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package scf 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" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudScfTriggerConfig() *schema.Resource { +func ResourceTencentCloudScfTriggerConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudScfTriggerConfigCreate, Read: resourceTencentCloudScfTriggerConfigRead, @@ -90,10 +93,10 @@ type TriggerDesc struct { } func resourceTencentCloudScfTriggerConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_trigger_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_trigger_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = scf.NewUpdateTriggerRequest() @@ -141,10 +144,10 @@ func resourceTencentCloudScfTriggerConfigCreate(d *schema.ResourceData, meta int request.CustomArgument = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().UpdateTrigger(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().UpdateTrigger(request) if e != nil { - return retryError(e) + return tccommon.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,22 +158,22 @@ func resourceTencentCloudScfTriggerConfigCreate(d *schema.ResourceData, meta int return err } - d.SetId(functionName + FILED_SP + namespace + FILED_SP + triggerName) + d.SetId(functionName + tccommon.FILED_SP + namespace + tccommon.FILED_SP + triggerName) return resourceTencentCloudScfTriggerConfigUpdate(d, meta) } func resourceTencentCloudScfTriggerConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_trigger_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_trigger_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 := ScfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ScfService{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()) } @@ -234,14 +237,14 @@ func resourceTencentCloudScfTriggerConfigRead(d *schema.ResourceData, meta inter } func resourceTencentCloudScfTriggerConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_trigger_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_trigger_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := scf.NewUpdateTriggerRequest() - 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()) } @@ -277,10 +280,10 @@ func resourceTencentCloudScfTriggerConfigUpdate(d *schema.ResourceData, meta int request.CustomArgument = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseScfClient().UpdateTrigger(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseScfClient().UpdateTrigger(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -295,8 +298,8 @@ func resourceTencentCloudScfTriggerConfigUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudScfTriggerConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_scf_trigger_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_scf_trigger_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_scf_trigger_config_test.go b/tencentcloud/services/scf/resource_tc_scf_trigger_config_test.go similarity index 92% rename from tencentcloud/resource_tc_scf_trigger_config_test.go rename to tencentcloud/services/scf/resource_tc_scf_trigger_config_test.go index a1ededbe33..223682baff 100644 --- a/tencentcloud/resource_tc_scf_trigger_config_test.go +++ b/tencentcloud/services/scf/resource_tc_scf_trigger_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package scf_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 TestAccTencentCloudScfTriggerConfigResource_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: testAccScfTriggerConfig, diff --git a/tencentcloud/service_tencentcloud_scf.go b/tencentcloud/services/scf/service_tencentcloud_scf.go similarity index 91% rename from tencentcloud/service_tencentcloud_scf.go rename to tencentcloud/services/scf/service_tencentcloud_scf.go index c8ed5fe17c..b71d890d1d 100644 --- a/tencentcloud/service_tencentcloud_scf.go +++ b/tencentcloud/services/scf/service_tencentcloud_scf.go @@ -1,14 +1,17 @@ -package tencentcloud +package scf import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/pkg/errors" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" scf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" + "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" @@ -56,6 +59,10 @@ type scfTrigger struct { triggerDesc string } +func NewScfService(client *connectivity.TencentCloudClient) ScfService { + return ScfService{client: client} +} + type ScfService struct { client *connectivity.TencentCloudClient } @@ -122,7 +129,7 @@ func (me *ScfService) CreateFunction(ctx context.Context, info scfFunctionInfo) request.DnsCache = info.dnsCache request.IntranetConfig = info.intranetConfig - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.CreateFunction(request); err != nil { @@ -130,7 +137,7 @@ func (me *ScfService) CreateFunction(ctx context.Context, info scfFunctionInfo) if ok && strings.Contains(e.Code, "ResourceInUse") { return resource.NonRetryableError(err) } - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil }); err != nil { @@ -147,7 +154,7 @@ func (me *ScfService) DescribeFunction(ctx context.Context, name, namespace stri request.FunctionName = &name request.Namespace = &namespace - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.GetFunction(request) @@ -160,7 +167,7 @@ func (me *ScfService) DescribeFunction(ctx context.Context, name, namespace stri } } - return retryError(errors.WithStack(err), InternalError) + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError) } resp = response @@ -194,12 +201,12 @@ func (me *ScfService) DescribeFunctions(ctx context.Context, name, namespace, de // at least run loop once for count == SCF_FUNCTION_DESCRIBE_LIMIT { - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.ListFunctions(request) if err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } functions = append(functions, response.Response.Functions...) @@ -231,11 +238,11 @@ func (me *ScfService) ModifyFunctionCode(ctx context.Context, info scfFunctionIn ImageConfig: info.imageConfig, } - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.UpdateFunctionCode(request); err != nil { - return retryError(errors.WithStack(err), InternalError) + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError) } return nil }); err != nil { @@ -302,11 +309,11 @@ func (me *ScfService) ModifyFunctionConfig(ctx context.Context, info scfFunction request.DnsCache = info.dnsCache request.IntranetConfig = info.intranetConfig - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.UpdateFunctionConfiguration(request); err != nil { - return retryError(errors.WithStack(err), InternalError) + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError) } return nil }); err != nil { @@ -323,7 +330,7 @@ func (me *ScfService) DeleteFunction(ctx context.Context, name, namespace string deleteRequest.FunctionName = &name deleteRequest.Namespace = &namespace - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(deleteRequest.GetAction()) if _, err := client.DeleteFunction(deleteRequest); err != nil { @@ -334,7 +341,7 @@ func (me *ScfService) DeleteFunction(ctx context.Context, name, namespace string } } } - return retryError(errors.WithStack(err), InternalError) + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError) } return nil @@ -346,7 +353,7 @@ func (me *ScfService) DeleteFunction(ctx context.Context, name, namespace string descRequest.FunctionName = &name descRequest.Namespace = &namespace - return resource.Retry(readRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(descRequest.GetAction()) if _, err := client.GetFunction(descRequest); err == nil { @@ -360,7 +367,7 @@ func (me *ScfService) DeleteFunction(ctx context.Context, name, namespace string } } - return retryError(errors.WithStack(err), InternalError, "ResourceNotFound.Version") + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError, "ResourceNotFound.Version") } }) } @@ -372,11 +379,11 @@ func (me *ScfService) CreateNamespace(ctx context.Context, namespace, desc strin request.Namespace = &namespace request.Description = &desc - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.CreateNamespace(request); err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil @@ -396,12 +403,12 @@ func (me *ScfService) DescribeNamespace(ctx context.Context, namespace string) ( // at least run loop once for count == SCF_NAMESPACE_DESCRIBE_LIMIT { - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.ListNamespaces(request) if err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } for _, respNs := range response.Response.Namespaces { @@ -440,12 +447,12 @@ func (me *ScfService) DescribeNamespaces(ctx context.Context) (nss []*scf.Namesp // at least run loop once for count == SCF_NAMESPACE_DESCRIBE_LIMIT { - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.ListNamespaces(request) if err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } count = len(response.Response.Namespaces) @@ -469,11 +476,11 @@ func (me *ScfService) ModifyNamespace(ctx context.Context, namespace, desc strin request.Namespace = &namespace request.Description = &desc - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.UpdateNamespace(request); err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil }) @@ -485,11 +492,11 @@ func (me *ScfService) DeleteNamespace(ctx context.Context, namespace string) err request := scf.NewDeleteNamespaceRequest() request.Namespace = &namespace - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.DeleteNamespace(request); err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil @@ -508,11 +515,11 @@ func (me *ScfService) CreateTriggers(ctx context.Context, functionName, namespac request.Namespace = &namespace request.Enable = helper.String("OPEN") - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.CreateTrigger(request); err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil }); err != nil { @@ -534,11 +541,11 @@ func (me *ScfService) DeleteTriggers(ctx context.Context, functionName, namespac request.Type = &trigger.triggerType request.TriggerDesc = &trigger.triggerDesc - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) if _, err := client.DeleteTrigger(request); err != nil { - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } return nil }); err != nil { @@ -571,7 +578,7 @@ func (me *ScfService) DescribeLogs( request.StartTime = startTime request.EndTime = endTime - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.GetFunctionLogs(request) @@ -583,7 +590,7 @@ func (me *ScfService) DescribeLogs( } } } - return retryError(errors.WithStack(err)) + return tccommon.RetryError(errors.WithStack(err)) } logs = response.Response.Data @@ -600,12 +607,12 @@ func waitScfFunctionReady(ctx context.Context, name, namespace string, client *s request.FunctionName = &name request.Namespace = &namespace - return resource.Retry(readRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.GetFunction(request) if err != nil { - return retryError(errors.WithStack(err), InternalError) + return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError) } switch *response.Response.Status { @@ -622,7 +629,7 @@ func waitScfFunctionReady(ctx context.Context, name, namespace string, client *s } func (me *ScfService) DescribeScfFunctionAliasById(ctx context.Context, namespace string, functionName string, name string) (functionAlias *scf.GetAliasResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewGetAliasRequest() request.Namespace = &namespace @@ -649,7 +656,7 @@ func (me *ScfService) DescribeScfFunctionAliasById(ctx context.Context, namespac } func (me *ScfService) DeleteScfFunctionAliasById(ctx context.Context, namespace string, functionName string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewDeleteAliasRequest() request.Namespace = &namespace @@ -675,7 +682,7 @@ func (me *ScfService) DeleteScfFunctionAliasById(ctx context.Context, namespace } func (me *ScfService) DescribeScfFunctionVersionById(ctx context.Context, functionName string, namespace string, functionVersion string) (FunctionVersion *scf.GetFunctionResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewGetFunctionRequest() request.FunctionName = &functionName @@ -702,7 +709,7 @@ func (me *ScfService) DescribeScfFunctionVersionById(ctx context.Context, functi } func (me *ScfService) DeleteScfFunctionVersionById(ctx context.Context, functionName string, namespace string, functionVersion string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewDeleteFunctionRequest() request.FunctionName = &functionName @@ -728,7 +735,7 @@ func (me *ScfService) DeleteScfFunctionVersionById(ctx context.Context, function } func (me *ScfService) DescribeScfFunctionEventInvokeConfigById(ctx context.Context, namespace string, functionName string) (FunctionEventInvokeConfig *scf.AsyncTriggerConfig, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewGetFunctionEventInvokeConfigRequest() request.Namespace = &namespace @@ -754,7 +761,7 @@ func (me *ScfService) DescribeScfFunctionEventInvokeConfigById(ctx context.Conte } func (me *ScfService) DescribeScfReservedConcurrencyConfigById(ctx context.Context, namespace string, functionName string) (reservedConcurrencyConfig *scf.GetReservedConcurrencyConfigResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewGetReservedConcurrencyConfigRequest() request.Namespace = &namespace @@ -780,7 +787,7 @@ func (me *ScfService) DescribeScfReservedConcurrencyConfigById(ctx context.Conte } func (me *ScfService) DeleteScfReservedConcurrencyConfigById(ctx context.Context, namespace string, functionName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewDeleteReservedConcurrencyConfigRequest() request.Namespace = &namespace @@ -805,7 +812,7 @@ func (me *ScfService) DeleteScfReservedConcurrencyConfigById(ctx context.Context } func (me *ScfService) DescribeScfProvisionedConcurrencyConfigById(ctx context.Context, functionName string, qualifier string, namespace string) (provisionedConcurrencyConfig *scf.VersionProvisionedConcurrencyInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewGetProvisionedConcurrencyConfigRequest() request.FunctionName = &functionName @@ -839,7 +846,7 @@ func (me *ScfService) DescribeScfProvisionedConcurrencyConfigById(ctx context.Co } func (me *ScfService) DeleteScfProvisionedConcurrencyConfigById(ctx context.Context, functionName string, qualifier string, namespace string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewDeleteProvisionedConcurrencyConfigRequest() request.FunctionName = &functionName @@ -866,7 +873,7 @@ func (me *ScfService) DeleteScfProvisionedConcurrencyConfigById(ctx context.Cont func (me *ScfService) DescribeScfAccountInfo(ctx context.Context) (accountInfo *scf.GetAccountResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewGetAccountRequest() ) @@ -892,7 +899,7 @@ func (me *ScfService) DescribeScfAccountInfo(ctx context.Context) (accountInfo * func (me *ScfService) DescribeScfAsyncEventManagementByFilter(ctx context.Context, param map[string]interface{}) (AsyncEventManagement []*scf.AsyncEvent, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListAsyncEventsRequest() ) @@ -961,7 +968,7 @@ func (me *ScfService) DescribeScfAsyncEventManagementByFilter(ctx context.Contex func (me *ScfService) DescribeScfTriggersByFilter(ctx context.Context, param map[string]interface{}) (Triggers []*scf.TriggerInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListTriggersRequest() ) @@ -1021,7 +1028,7 @@ func (me *ScfService) DescribeScfTriggersByFilter(ctx context.Context, param map func (me *ScfService) DescribeScfAsyncEventStatus(ctx context.Context, param map[string]interface{}) (asyncEventStatus *scf.AsyncEventStatus, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewGetAsyncEventStatusRequest() ) @@ -1053,7 +1060,7 @@ func (me *ScfService) DescribeScfAsyncEventStatus(ctx context.Context, param map func (me *ScfService) DescribeScfFunctionAddress(ctx context.Context, param map[string]interface{}) (functionAddress *scf.GetFunctionAddressResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewGetFunctionAddressRequest() ) @@ -1091,7 +1098,7 @@ func (me *ScfService) DescribeScfFunctionAddress(ctx context.Context, param map[ func (me *ScfService) DescribeScfRequestStatusByFilter(ctx context.Context, param map[string]interface{}) (requestStatus []*scf.RequestStatus, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewGetRequestStatusRequest() ) @@ -1135,7 +1142,7 @@ func (me *ScfService) DescribeScfRequestStatusByFilter(ctx context.Context, para func (me *ScfService) DescribeScfFunctionAliasesByFilter(ctx context.Context, param map[string]interface{}) (FunctionAliases []*scf.Alias, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListAliasesRequest() ) @@ -1189,7 +1196,7 @@ func (me *ScfService) DescribeScfFunctionAliasesByFilter(ctx context.Context, pa func (me *ScfService) DescribeScfLayerVersions(ctx context.Context, param map[string]interface{}) (layerVersions []*scf.LayerVersionInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListLayerVersionsRequest() ) @@ -1224,7 +1231,7 @@ func (me *ScfService) DescribeScfLayerVersions(ctx context.Context, param map[st func (me *ScfService) DescribeScfLayersByFilter(ctx context.Context, param map[string]interface{}) (layers []*scf.LayerVersionInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListLayersRequest() ) @@ -1275,7 +1282,7 @@ func (me *ScfService) DescribeScfLayersByFilter(ctx context.Context, param map[s func (me *ScfService) DescribeScfFunctionVersionsByFilter(ctx context.Context, param map[string]interface{}) (functionVersions []*scf.FunctionVersion, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = scf.NewListVersionByFunctionRequest() ) @@ -1331,7 +1338,7 @@ func (me *ScfService) DescribeScfFunctionVersionsByFilter(ctx context.Context, p } func (me *ScfService) DescribeScfTriggerConfigById(ctx context.Context, functionName string, namespace string, triggerName string) (triggerConfig *scf.TriggerInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := scf.NewListTriggersRequest() request.FunctionName = &functionName diff --git a/tencentcloud/data_source_tc_ses_black_email_address.go b/tencentcloud/services/ses/data_source_tc_ses_black_email_address.go similarity index 82% rename from tencentcloud/data_source_tc_ses_black_email_address.go rename to tencentcloud/services/ses/data_source_tc_ses_black_email_address.go index 2267af3515..1baee75921 100644 --- a/tencentcloud/data_source_tc_ses_black_email_address.go +++ b/tencentcloud/services/ses/data_source_tc_ses_black_email_address.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesBlackEmailAddress() *schema.Resource { +func DataSourceTencentCloudSesBlackEmailAddress() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesBlackEmailAddressRead, Schema: map[string]*schema.Schema{ @@ -67,12 +70,12 @@ func dataSourceTencentCloudSesBlackEmailAddress() *schema.Resource { } func dataSourceTencentCloudSesBlackEmailAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_black_email_address.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_black_email_address.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("start_date"); ok { @@ -91,14 +94,14 @@ func dataSourceTencentCloudSesBlackEmailAddressRead(d *schema.ResourceData, meta paramMap["TaskID"] = helper.String(v.(string)) } - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var blackList []*ses.BlackEmailAddress - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesBlackEmailAddressByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } blackList = result return nil @@ -132,7 +135,7 @@ func dataSourceTencentCloudSesBlackEmailAddressRead(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/services/ses/data_source_tc_ses_black_email_address_test.go b/tencentcloud/services/ses/data_source_tc_ses_black_email_address_test.go new file mode 100644 index 0000000000..1dca5d2f6e --- /dev/null +++ b/tencentcloud/services/ses/data_source_tc_ses_black_email_address_test.go @@ -0,0 +1,42 @@ +package ses_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -test.run TestAccTencentCloudSesBlackEmailAddressDataSource_basic -v +func TestAccTencentCloudSesBlackEmailAddressDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSesBlackEmailAddressDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_black_email_address.black_email_address"), + resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.0.bounce_time"), + resource.TestCheckResourceAttrSet("data.tencentcloud_ses_black_email_address.black_email_address", "black_list.0.email_address"), + ), + }, + }, + }) +} + +const testAccSesBlackEmailAddressDataSource = ` + +data "tencentcloud_ses_black_email_address" "black_email_address" { + start_date = "2020-09-22" + end_date = "2023-09-23" + email_address = "terraform-tf@gmail.com" +} + +` diff --git a/tencentcloud/data_source_tc_ses_email_identities.go b/tencentcloud/services/ses/data_source_tc_ses_email_identities.go similarity index 84% rename from tencentcloud/data_source_tc_ses_email_identities.go rename to tencentcloud/services/ses/data_source_tc_ses_email_identities.go index 456caa664d..67800313c3 100644 --- a/tencentcloud/data_source_tc_ses_email_identities.go +++ b/tencentcloud/services/ses/data_source_tc_ses_email_identities.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesEmailIdentities() *schema.Resource { +func DataSourceTencentCloudSesEmailIdentities() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesEmailIdentitiesRead, Schema: map[string]*schema.Schema{ @@ -70,19 +73,19 @@ func dataSourceTencentCloudSesEmailIdentities() *schema.Resource { } func dataSourceTencentCloudSesEmailIdentitiesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_email_identities.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_email_identities.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 := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var emailIdentities *ses.ListEmailIdentitiesResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesEmailIdentitiesByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } emailIdentities = result return nil @@ -136,7 +139,7 @@ func dataSourceTencentCloudSesEmailIdentitiesRead(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_ses_email_identities_test.go b/tencentcloud/services/ses/data_source_tc_ses_email_identities_test.go similarity index 81% rename from tencentcloud/data_source_tc_ses_email_identities_test.go rename to tencentcloud/services/ses/data_source_tc_ses_email_identities_test.go index b2715b8935..044f05b148 100644 --- a/tencentcloud/data_source_tc_ses_email_identities_test.go +++ b/tencentcloud/services/ses/data_source_tc_ses_email_identities_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesEmailIdentitiesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesEmailIdentitiesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_email_identities.email_identities"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_email_identities.email_identities"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_email_identities.email_identities", "email_identities.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_email_identities.email_identities", "email_identities.0.current_reputation_level"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_email_identities.email_identities", "email_identities.0.daily_quota"), diff --git a/tencentcloud/data_source_tc_ses_receivers.go b/tencentcloud/services/ses/data_source_tc_ses_receivers.go similarity index 85% rename from tencentcloud/data_source_tc_ses_receivers.go rename to tencentcloud/services/ses/data_source_tc_ses_receivers.go index 73218b2133..ca9d2d7b3b 100644 --- a/tencentcloud/data_source_tc_ses_receivers.go +++ b/tencentcloud/services/ses/data_source_tc_ses_receivers.go @@ -1,16 +1,19 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesReceivers() *schema.Resource { +func DataSourceTencentCloudSesReceivers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesReceiversRead, Schema: map[string]*schema.Schema{ @@ -76,12 +79,12 @@ func dataSourceTencentCloudSesReceivers() *schema.Resource { } func dataSourceTencentCloudSesReceiversRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_receivers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_receivers.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("status"); v != nil { @@ -92,14 +95,14 @@ func dataSourceTencentCloudSesReceiversRead(d *schema.ResourceData, meta interfa paramMap["KeyWord"] = helper.String(v.(string)) } - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var data []*ses.ReceiverData - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesReceiversByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result return nil @@ -149,7 +152,7 @@ func dataSourceTencentCloudSesReceiversRead(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_ses_receivers_test.go b/tencentcloud/services/ses/data_source_tc_ses_receivers_test.go similarity index 78% rename from tencentcloud/data_source_tc_ses_receivers_test.go rename to tencentcloud/services/ses/data_source_tc_ses_receivers_test.go index f68ca8401c..5eca4507fb 100644 --- a/tencentcloud/data_source_tc_ses_receivers_test.go +++ b/tencentcloud/services/ses/data_source_tc_ses_receivers_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesReceiversDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesReceiversDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_receivers.receivers"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_receivers.receivers"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_receivers.receivers", "data.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_receivers.receivers", "data.0.count"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_receivers.receivers", "data.0.create_time"), diff --git a/tencentcloud/data_source_tc_ses_send_email_status.go b/tencentcloud/services/ses/data_source_tc_ses_send_email_status.go similarity index 91% rename from tencentcloud/data_source_tc_ses_send_email_status.go rename to tencentcloud/services/ses/data_source_tc_ses_send_email_status.go index a554330c56..b0a46e50b1 100644 --- a/tencentcloud/data_source_tc_ses_send_email_status.go +++ b/tencentcloud/services/ses/data_source_tc_ses_send_email_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesSendEmailStatus() *schema.Resource { +func DataSourceTencentCloudSesSendEmailStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesSendEmailStatusRead, Schema: map[string]*schema.Schema{ @@ -111,12 +114,12 @@ func dataSourceTencentCloudSesSendEmailStatus() *schema.Resource { } func dataSourceTencentCloudSesSendEmailStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_send_email_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_send_email_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("request_date"); ok { @@ -131,14 +134,14 @@ func dataSourceTencentCloudSesSendEmailStatusRead(d *schema.ResourceData, meta i paramMap["ToEmailAddress"] = helper.String(v.(string)) } - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var emailStatusList []*ses.SendEmailStatus - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesSendEmailStatusByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } emailStatusList = result return nil @@ -212,7 +215,7 @@ func dataSourceTencentCloudSesSendEmailStatusRead(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_ses_send_email_status_test.go b/tencentcloud/services/ses/data_source_tc_ses_send_email_status_test.go similarity index 86% rename from tencentcloud/data_source_tc_ses_send_email_status_test.go rename to tencentcloud/services/ses/data_source_tc_ses_send_email_status_test.go index 4c6826ff43..2f6db06184 100644 --- a/tencentcloud/data_source_tc_ses_send_email_status_test.go +++ b/tencentcloud/services/ses/data_source_tc_ses_send_email_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesSendEmailStatusDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesSendEmailStatusDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_send_email_status.send_email_status"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_send_email_status.send_email_status"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_email_status.send_email_status", "email_status_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_email_status.send_email_status", "email_status_list.0.deliver_status"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_email_status.send_email_status", "email_status_list.0.deliver_time"), diff --git a/tencentcloud/data_source_tc_ses_send_tasks.go b/tencentcloud/services/ses/data_source_tc_ses_send_tasks.go similarity index 93% rename from tencentcloud/data_source_tc_ses_send_tasks.go rename to tencentcloud/services/ses/data_source_tc_ses_send_tasks.go index 63b368b18e..e2d321b163 100644 --- a/tencentcloud/data_source_tc_ses_send_tasks.go +++ b/tencentcloud/services/ses/data_source_tc_ses_send_tasks.go @@ -1,16 +1,19 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesSendTasks() *schema.Resource { +func DataSourceTencentCloudSesSendTasks() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesSendTasksRead, Schema: map[string]*schema.Schema{ @@ -174,12 +177,12 @@ func dataSourceTencentCloudSesSendTasks() *schema.Resource { } func dataSourceTencentCloudSesSendTasksRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_send_tasks.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_send_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, _ := d.GetOk("status"); v != nil { @@ -194,14 +197,14 @@ func dataSourceTencentCloudSesSendTasksRead(d *schema.ResourceData, meta interfa paramMap["TaskType"] = helper.IntUint64(v.(int)) } - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var data []*ses.SendTaskData - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesSendTasksByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result return nil @@ -321,7 +324,7 @@ func dataSourceTencentCloudSesSendTasksRead(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_ses_send_tasks_test.go b/tencentcloud/services/ses/data_source_tc_ses_send_tasks_test.go similarity index 85% rename from tencentcloud/data_source_tc_ses_send_tasks_test.go rename to tencentcloud/services/ses/data_source_tc_ses_send_tasks_test.go index 278df718ea..623d120b48 100644 --- a/tencentcloud/data_source_tc_ses_send_tasks_test.go +++ b/tencentcloud/services/ses/data_source_tc_ses_send_tasks_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesSendTasksDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesSendTasksDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_send_tasks.send_tasks"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_send_tasks.send_tasks"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_tasks.send_tasks", "data.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_tasks.send_tasks", "data.0.cache_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_send_tasks.send_tasks", "data.0.create_time"), diff --git a/tencentcloud/data_source_tc_ses_statistics_report.go b/tencentcloud/services/ses/data_source_tc_ses_statistics_report.go similarity index 91% rename from tencentcloud/data_source_tc_ses_statistics_report.go rename to tencentcloud/services/ses/data_source_tc_ses_statistics_report.go index d81f9fa5e4..24134bf76a 100644 --- a/tencentcloud/data_source_tc_ses_statistics_report.go +++ b/tencentcloud/services/ses/data_source_tc_ses_statistics_report.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSesStatisticsReport() *schema.Resource { +func DataSourceTencentCloudSesStatisticsReport() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSesStatisticsReportRead, Schema: map[string]*schema.Schema{ @@ -147,12 +150,12 @@ func dataSourceTencentCloudSesStatisticsReport() *schema.Resource { } func dataSourceTencentCloudSesStatisticsReportRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ses_statistics_report.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ses_statistics_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("start_date"); ok { @@ -171,13 +174,13 @@ func dataSourceTencentCloudSesStatisticsReportRead(d *schema.ResourceData, meta paramMap["ReceivingMailboxType"] = helper.String(v.(string)) } - service := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var statisticsReport *ses.GetStatisticsReportResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSesStatisticsReportByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } statisticsReport = result return nil @@ -274,7 +277,7 @@ func dataSourceTencentCloudSesStatisticsReportRead(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_ses_statistics_report_test.go b/tencentcloud/services/ses/data_source_tc_ses_statistics_report_test.go similarity index 88% rename from tencentcloud/data_source_tc_ses_statistics_report_test.go rename to tencentcloud/services/ses/data_source_tc_ses_statistics_report_test.go index 674441030c..c91acfc588 100644 --- a/tencentcloud/data_source_tc_ses_statistics_report_test.go +++ b/tencentcloud/services/ses/data_source_tc_ses_statistics_report_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesStatisticsReportDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesStatisticsReportDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ses_statistics_report.statistics_report"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ses_statistics_report.statistics_report"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_statistics_report.statistics_report", "daily_volumes.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_statistics_report.statistics_report", "daily_volumes.0.accepted_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_ses_statistics_report.statistics_report", "daily_volumes.0.bounce_count"), diff --git a/tencentcloud/resource_tc_ses_batch_send_email.go b/tencentcloud/services/ses/resource_tc_ses_batch_send_email.go similarity index 91% rename from tencentcloud/resource_tc_ses_batch_send_email.go rename to tencentcloud/services/ses/resource_tc_ses_batch_send_email.go index e36839b3db..3343a2d258 100644 --- a/tencentcloud/resource_tc_ses_batch_send_email.go +++ b/tencentcloud/services/ses/resource_tc_ses_batch_send_email.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSesBatchSendEmail() *schema.Resource { +func ResourceTencentCloudSesBatchSendEmail() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSesBatchSendEmailCreate, Read: resourceTencentCloudSesBatchSendEmailRead, @@ -158,10 +161,10 @@ func resourceTencentCloudSesBatchSendEmail() *schema.Resource { } func resourceTencentCloudSesBatchSendEmailCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_batch_send_email.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_batch_send_email.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ses.NewBatchSendEmailRequest() @@ -243,10 +246,10 @@ func resourceTencentCloudSesBatchSendEmailCreate(d *schema.ResourceData, meta in request.ADLocation = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().BatchSendEmail(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().BatchSendEmail(request) if e != nil { - return retryError(e) + return tccommon.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,15 +268,15 @@ func resourceTencentCloudSesBatchSendEmailCreate(d *schema.ResourceData, meta in } func resourceTencentCloudSesBatchSendEmailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_batch_send_email.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_batch_send_email.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSesBatchSendEmailDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_batch_send_email.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_batch_send_email.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ses_batch_send_email_test.go b/tencentcloud/services/ses/resource_tc_ses_batch_send_email_test.go similarity index 86% rename from tencentcloud/resource_tc_ses_batch_send_email_test.go rename to tencentcloud/services/ses/resource_tc_ses_batch_send_email_test.go index cb84d57668..0c92a7e785 100644 --- a/tencentcloud/resource_tc_ses_batch_send_email_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_batch_send_email_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudNeedFixSesBatchSendEmailResource_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: testAccSesBatchSendEmail, diff --git a/tencentcloud/services/ses/resource_tc_ses_black_list_delete.go b/tencentcloud/services/ses/resource_tc_ses_black_list_delete.go new file mode 100644 index 0000000000..a5c7369ffd --- /dev/null +++ b/tencentcloud/services/ses/resource_tc_ses_black_list_delete.go @@ -0,0 +1,80 @@ +package ses + +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" + ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSesBlackListDelete() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSesBlackListDeleteCreate, + Read: resourceTencentCloudSesBlackListDeleteRead, + Delete: resourceTencentCloudSesBlackListDeleteDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "email_address": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Email addresses to be unblocklisted.", + }, + }, + } +} + +func resourceTencentCloudSesBlackListDeleteCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_black_list_delete.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ses.NewDeleteBlackListRequest() + emailAddress string + ) + if v, ok := d.GetOk("email_address"); ok { + emailAddress = v.(string) + request.EmailAddressList = append(request.EmailAddressList, helper.String(v.(string))) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().DeleteBlackList(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 ses BlackList failed, reason:%+v", logId, err) + return err + } + + d.SetId(emailAddress) + + return resourceTencentCloudSesBlackListDeleteRead(d, meta) +} + +func resourceTencentCloudSesBlackListDeleteRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_black_list_delete.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSesBlackListDeleteDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_black_list_delete.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ses_black_list_delete_test.go b/tencentcloud/services/ses/resource_tc_ses_black_list_delete_test.go similarity index 79% rename from tencentcloud/resource_tc_ses_black_list_delete_test.go rename to tencentcloud/services/ses/resource_tc_ses_black_list_delete_test.go index 4d9e8cca4d..cc6a914fe5 100644 --- a/tencentcloud/resource_tc_ses_black_list_delete_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_black_list_delete_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 @@ func TestAccTencentNeedFixCloudSesBlackListResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccStepSetRegion(t, "ap-hongkong") - testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesBlackList, diff --git a/tencentcloud/services/ses/resource_tc_ses_domain.go b/tencentcloud/services/ses/resource_tc_ses_domain.go new file mode 100644 index 0000000000..3ecdaf0112 --- /dev/null +++ b/tencentcloud/services/ses/resource_tc_ses_domain.go @@ -0,0 +1,163 @@ +package ses + +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" + ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSesDomain() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudSesDomainRead, + Create: resourceTencentCloudSesDomainCreate, + Delete: resourceTencentCloudSesDomainDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "email_identity": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Your sender domain. You are advised to use a third-level domain, for example, mail.qcloud.com.", + }, + + "attributes": { + Computed: true, + Type: schema.TypeList, + Description: "DNS configuration details.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "type": { + Type: schema.TypeString, + Computed: true, + Description: "Record Type CNAME | A | TXT | MX.", + }, + "send_domain": { + Type: schema.TypeString, + Computed: true, + Description: "Domain name.", + }, + "expected_value": { + Type: schema.TypeString, + Computed: true, + Description: "Values that need to be configured.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudSesDomainCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ses.NewCreateEmailIdentityRequest() + emailIdentity string + ) + + if v, ok := d.GetOk("email_identity"); ok { + emailIdentity = v.(string) + request.EmailIdentity = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateEmailIdentity(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 ses domain failed, reason:%+v", logId, err) + return err + } + + d.SetId(emailIdentity) + return resourceTencentCloudSesDomainRead(d, meta) +} + +func resourceTencentCloudSesDomainRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + emailIdentity := d.Id() + + attributes, err := service.DescribeSesDomain(ctx, emailIdentity) + + if err != nil { + return err + } + + if attributes == nil { + d.SetId("") + return fmt.Errorf("resource `domain` %s does not exist", emailIdentity) + } + + _ = d.Set("email_identity", emailIdentity) + + if attributes != nil { + attributesList := make([]interface{}, 0, len(attributes)) + for _, v := range attributes { + attributesMap := map[string]interface{}{} + + if v.Type != nil { + attributesMap["type"] = v.Type + } + + if v.SendDomain != nil { + attributesMap["send_domain"] = v.SendDomain + } + + if v.ExpectedValue != nil { + attributesMap["expected_value"] = v.ExpectedValue + } + + attributesList = append(attributesList, attributesMap) + } + + _ = d.Set("attributes", attributesList) + } + + return nil +} + +func resourceTencentCloudSesDomainDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + emailIdentity := d.Id() + + if err := service.DeleteSesDomainById(ctx, emailIdentity); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_ses_domain_test.go b/tencentcloud/services/ses/resource_tc_ses_domain_test.go similarity index 77% rename from tencentcloud/resource_tc_ses_domain_test.go rename to tencentcloud/services/ses/resource_tc_ses_domain_test.go index 281a3636d5..eecb11c27e 100644 --- a/tencentcloud/resource_tc_ses_domain_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_domain_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesDomain_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesDomain, diff --git a/tencentcloud/services/ses/resource_tc_ses_email_address.go b/tencentcloud/services/ses/resource_tc_ses_email_address.go new file mode 100644 index 0000000000..29262dbf3c --- /dev/null +++ b/tencentcloud/services/ses/resource_tc_ses_email_address.go @@ -0,0 +1,132 @@ +package ses + +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" + ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSesEmailAddress() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudSesEmailAddressRead, + Create: resourceTencentCloudSesEmailAddressCreate, + Delete: resourceTencentCloudSesEmailAddressDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "email_address": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Your sender address. (You can create up to 10 sender addresses for each domain.).", + }, + + "email_sender_name": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Sender name.", + }, + }, + } +} + +func resourceTencentCloudSesEmailAddressCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_email_address.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ses.NewCreateEmailAddressRequest() + emailAddress string + ) + + if v, ok := d.GetOk("email_address"); ok { + emailAddress = v.(string) + request.EmailAddress = helper.String(v.(string)) + } + + if v, ok := d.GetOk("email_sender_name"); ok { + request.EmailSenderName = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateEmailAddress(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 ses email_address failed, reason:%+v", logId, err) + return err + } + + d.SetId(emailAddress) + return resourceTencentCloudSesEmailAddressRead(d, meta) +} + +func resourceTencentCloudSesEmailAddressRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_email_address.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + emailAddress := d.Id() + + emailSender, err := service.DescribeSesEmailAddress(ctx, emailAddress) + + if err != nil { + return err + } + + if emailSender == nil { + d.SetId("") + return fmt.Errorf("resource `email_address` %s does not exist", emailAddress) + } + + if emailSender.EmailAddress != nil { + _ = d.Set("email_address", emailSender.EmailAddress) + } + + if emailSender.EmailSenderName != nil { + _ = d.Set("email_sender_name", emailSender.EmailSenderName) + } + + return nil +} + +func resourceTencentCloudSesEmailAddressDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_email_address.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + emailAddressId := d.Id() + + if err := service.DeleteSesEmail_addressById(ctx, emailAddressId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_ses_email_address_test.go b/tencentcloud/services/ses/resource_tc_ses_email_address_test.go similarity index 81% rename from tencentcloud/resource_tc_ses_email_address_test.go rename to tencentcloud/services/ses/resource_tc_ses_email_address_test.go index b6833268ad..726bd11dad 100644 --- a/tencentcloud/resource_tc_ses_email_address_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_email_address_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesEmail_address_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesEmail_address, diff --git a/tencentcloud/resource_tc_ses_receiver.go b/tencentcloud/services/ses/resource_tc_ses_receiver.go similarity index 78% rename from tencentcloud/resource_tc_ses_receiver.go rename to tencentcloud/services/ses/resource_tc_ses_receiver.go index c2b1133e31..a944168cb1 100644 --- a/tencentcloud/resource_tc_ses_receiver.go +++ b/tencentcloud/services/ses/resource_tc_ses_receiver.go @@ -1,17 +1,20 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSesReceiver() *schema.Resource { +func ResourceTencentCloudSesReceiver() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSesReceiverCreate, Read: resourceTencentCloudSesReceiverRead, @@ -61,10 +64,10 @@ func resourceTencentCloudSesReceiver() *schema.Resource { } func resourceTencentCloudSesReceiverCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_receiver.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_receiver.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ses.NewCreateReceiverRequest() @@ -79,10 +82,10 @@ func resourceTencentCloudSesReceiverCreate(d *schema.ResourceData, meta interfac request.Desc = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateReceiver(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateReceiver(request) if e != nil { - return retryError(e) + return tccommon.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,10 +128,10 @@ func resourceTencentCloudSesReceiverCreate(d *schema.ResourceData, meta interfac request := ses.NewCreateReceiverDetailWithDataRequest() request.ReceiverId = &receiverId request.Datas = dataList - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateReceiverDetailWithData(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateReceiverDetailWithData(request) if e != nil { - return retryError(e) + return tccommon.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,10 +146,10 @@ func resourceTencentCloudSesReceiverCreate(d *schema.ResourceData, meta interfac request := ses.NewCreateReceiverDetailRequest() request.ReceiverId = &receiverId request.Emails = emilList - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateReceiverDetail(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateReceiverDetail(request) if e != nil { - return retryError(e) + return tccommon.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,14 +168,14 @@ func resourceTencentCloudSesReceiverCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudSesReceiverRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_receiver.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_receiver.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 := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} receiverId := d.Id() receiver, err := service.DescribeSesReceiverById(ctx, receiverId) @@ -221,13 +224,13 @@ func resourceTencentCloudSesReceiverRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudSesReceiverDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_receiver.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_receiver.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 := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} receiverId := d.Id() if err := service.DeleteSesReceiverById(ctx, receiverId); err != nil { diff --git a/tencentcloud/services/ses/resource_tc_ses_receiver_test.go b/tencentcloud/services/ses/resource_tc_ses_receiver_test.go new file mode 100644 index 0000000000..a0dcd9c13f --- /dev/null +++ b/tencentcloud/services/ses/resource_tc_ses_receiver_test.go @@ -0,0 +1,111 @@ +package ses_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcses "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ses" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -test.run TestAccTencentCloudSesReceiverResource_basic -v +func TestAccTencentCloudSesReceiverResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccStepSetRegion(t, "ap-hongkong") + tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckSesReceiverDestroy, + Steps: []resource.TestStep{ + { + Config: testAccSesReceiver, + Check: resource.ComposeTestCheckFunc( + testAccCheckSesReceiverExists("tencentcloud_ses_receiver.receiver"), + resource.TestCheckResourceAttrSet("tencentcloud_ses_receiver.receiver", "id"), + resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "receivers_name", "terraform_test"), + resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "desc", "description"), + resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.0.email", "abc@abc.com"), + resource.TestCheckResourceAttr("tencentcloud_ses_receiver.receiver", "data.0.template_data", "{\"name\":\"xxx\",\"age\":\"xx\"}"), + ), + }, + { + ResourceName: "tencentcloud_ses_receiver.receiver", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckSesReceiverDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcses.NewSesService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_ses_receiver" { + continue + } + + res, err := service.DescribeSesReceiverById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("ses receiver %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckSesReceiverExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svcses.NewSesService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeSesReceiverById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("ses receiver %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccSesReceiver = ` + +resource "tencentcloud_ses_receiver" "receiver" { + receivers_name = "terraform_test" + desc = "description" + + data { + email = "abc@abc.com" + template_data = "{\"name\":\"xxx\",\"age\":\"xx\"}" + } + + data { + email = "abcd@abcd.com" + template_data = "{\"name\":\"xxx\",\"age\":\"xx\"}" + } +} + +` diff --git a/tencentcloud/resource_tc_ses_send_email.go b/tencentcloud/services/ses/resource_tc_ses_send_email.go similarity index 91% rename from tencentcloud/resource_tc_ses_send_email.go rename to tencentcloud/services/ses/resource_tc_ses_send_email.go index 19e72baf4b..d7153a7513 100644 --- a/tencentcloud/resource_tc_ses_send_email.go +++ b/tencentcloud/services/ses/resource_tc_ses_send_email.go @@ -1,15 +1,18 @@ -package tencentcloud +package ses 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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSesSendEmail() *schema.Resource { +func ResourceTencentCloudSesSendEmail() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSesSendEmailCreate, Read: resourceTencentCloudSesSendEmailRead, @@ -130,10 +133,10 @@ func resourceTencentCloudSesSendEmail() *schema.Resource { } func resourceTencentCloudSesSendEmailCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_send_email.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_send_email.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ses.NewSendEmailRequest() @@ -209,10 +212,10 @@ func resourceTencentCloudSesSendEmailCreate(d *schema.ResourceData, meta interfa request.TriggerType = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().SendEmail(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().SendEmail(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -231,15 +234,15 @@ func resourceTencentCloudSesSendEmailCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudSesSendEmailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_send_email.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_send_email.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSesSendEmailDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_send_email.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_send_email.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ses_send_email_test.go b/tencentcloud/services/ses/resource_tc_ses_send_email_test.go similarity index 84% rename from tencentcloud/resource_tc_ses_send_email_test.go rename to tencentcloud/services/ses/resource_tc_ses_send_email_test.go index efa7fde686..59640d6165 100644 --- a/tencentcloud/resource_tc_ses_send_email_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_send_email_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudNeedFixSesSendEmailResource_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: testAccSesSendEmail, diff --git a/tencentcloud/resource_tc_ses_template.go b/tencentcloud/services/ses/resource_tc_ses_template.go similarity index 77% rename from tencentcloud/resource_tc_ses_template.go rename to tencentcloud/services/ses/resource_tc_ses_template.go index ce5310a6dd..0c2f68e11c 100644 --- a/tencentcloud/resource_tc_ses_template.go +++ b/tencentcloud/services/ses/resource_tc_ses_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ses import ( "context" @@ -7,13 +7,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" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSesTemplate() *schema.Resource { +func ResourceTencentCloudSesTemplate() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudSesTemplateRead, Create: resourceTencentCloudSesTemplateCreate, @@ -54,10 +57,10 @@ func resourceTencentCloudSesTemplate() *schema.Resource { } func resourceTencentCloudSesTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ses.NewCreateEmailTemplateRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudSesTemplateCreate(d *schema.ResourceData, meta interfac request.TemplateContent = &prometheusTemp } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().CreateEmailTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().CreateEmailTemplate(request) if e != nil { - return retryError(e) + return tccommon.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,13 +109,13 @@ func resourceTencentCloudSesTemplateCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudSesTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_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 := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateID := d.Id() templateId, ee := strconv.Atoi(templateID) @@ -163,10 +166,10 @@ func resourceTencentCloudSesTemplateRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudSesTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ses.NewUpdateEmailTemplateRequest() @@ -194,10 +197,10 @@ func resourceTencentCloudSesTemplateUpdate(d *schema.ResourceData, meta interfac request.TemplateContent = &prometheusTemp } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSesClient().UpdateEmailTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().UpdateEmailTemplate(request) if e != nil { - return retryError(e) + return tccommon.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,13 +217,13 @@ func resourceTencentCloudSesTemplateUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudSesTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ses_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ses_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 := SesService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateID, ee := strconv.Atoi(d.Id()) if ee != nil { diff --git a/tencentcloud/resource_tc_ses_template_test.go b/tencentcloud/services/ses/resource_tc_ses_template_test.go similarity index 79% rename from tencentcloud/resource_tc_ses_template_test.go rename to tencentcloud/services/ses/resource_tc_ses_template_test.go index def0610439..8509ab360b 100644 --- a/tencentcloud/resource_tc_ses_template_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudSesTemplate_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckBusiness(t, ACCOUNT_TYPE_SES) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckBusiness(t, tcacctest.ACCOUNT_TYPE_SES) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSesTemplate, diff --git a/tencentcloud/services/ses/resource_tc_ses_verify_domain.go b/tencentcloud/services/ses/resource_tc_ses_verify_domain.go new file mode 100644 index 0000000000..3802d31c75 --- /dev/null +++ b/tencentcloud/services/ses/resource_tc_ses_verify_domain.go @@ -0,0 +1,87 @@ +package ses + +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" + ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSesVerifyDomain() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSesVerifyDomainCreate, + Read: resourceTencentCloudSesVerifyDomainRead, + Delete: resourceTencentCloudSesVerifyDomainDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "email_identity": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Domain name requested for verification.", + }, + }, + } +} + +func resourceTencentCloudSesVerifyDomainCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_verify_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + request = ses.NewUpdateEmailIdentityRequest() + emailIdentity string + ) + if v, ok := d.GetOk("email_identity"); ok { + emailIdentity = v.(string) + request.EmailIdentity = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSesClient().UpdateEmailIdentity(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 ses verifyDomain failed, reason:%+v", logId, err) + return err + } + + d.SetId(emailIdentity) + + service := SesService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + if err := service.CheckEmailIdentityById(ctx, emailIdentity); err != nil { + return err + } + + return resourceTencentCloudSesVerifyDomainRead(d, meta) +} + +func resourceTencentCloudSesVerifyDomainRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_verify_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSesVerifyDomainDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ses_verify_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ses_verify_domain_test.go b/tencentcloud/services/ses/resource_tc_ses_verify_domain_test.go similarity index 77% rename from tencentcloud/resource_tc_ses_verify_domain_test.go rename to tencentcloud/services/ses/resource_tc_ses_verify_domain_test.go index 2d81f25745..f5094f6e34 100644 --- a/tencentcloud/resource_tc_ses_verify_domain_test.go +++ b/tencentcloud/services/ses/resource_tc_ses_verify_domain_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ses_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 TestAccTencentCloudNeedFixSesVerifyDomainResource_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: testAccSesVerifyDomain, diff --git a/tencentcloud/service_tencentcloud_ses.go b/tencentcloud/services/ses/service_tencentcloud_ses.go similarity index 95% rename from tencentcloud/service_tencentcloud_ses.go rename to tencentcloud/services/ses/service_tencentcloud_ses.go index 7123ed023f..263134f139 100644 --- a/tencentcloud/service_tencentcloud_ses.go +++ b/tencentcloud/services/ses/service_tencentcloud_ses.go @@ -1,4 +1,4 @@ -package tencentcloud +package ses import ( "context" @@ -6,20 +6,27 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ses "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ses/v20201002" + "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 NewSesService(client *connectivity.TencentCloudClient) SesService { + return SesService{client: client} +} + type SesService struct { client *connectivity.TencentCloudClient } func (me *SesService) DescribeSesTemplateMetadata(ctx context.Context, templateId uint64) (templatesMetadata *ses.TemplatesMetadata, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListEmailTemplatesRequest() ) @@ -73,7 +80,7 @@ func (me *SesService) DescribeSesTemplateMetadata(ctx context.Context, templateI func (me *SesService) DescribeSesTemplate(ctx context.Context, templateId uint64) (templateResponse *ses.GetEmailTemplateResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewGetEmailTemplateRequest() ) @@ -100,7 +107,7 @@ func (me *SesService) DescribeSesTemplate(ctx context.Context, templateId uint64 } func (me *SesService) DeleteSesTemplateById(ctx context.Context, templateID uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ses.NewDeleteEmailTemplateRequest() @@ -127,7 +134,7 @@ func (me *SesService) DeleteSesTemplateById(ctx context.Context, templateID uint func (me *SesService) DescribeSesEmailAddress(ctx context.Context, emailAddress string) (emailSender *ses.EmailSender, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListEmailAddressRequest() ) @@ -162,7 +169,7 @@ func (me *SesService) DescribeSesEmailAddress(ctx context.Context, emailAddress } func (me *SesService) DeleteSesEmail_addressById(ctx context.Context, emailAddress string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ses.NewDeleteEmailAddressRequest() @@ -189,7 +196,7 @@ func (me *SesService) DeleteSesEmail_addressById(ctx context.Context, emailAddre func (me *SesService) DescribeSesDomain(ctx context.Context, emailIdentity string) (attributes []*ses.DNSAttributes, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewGetEmailIdentityRequest() ) @@ -218,7 +225,7 @@ func (me *SesService) DescribeSesDomain(ctx context.Context, emailIdentity strin } func (me *SesService) DeleteSesDomainById(ctx context.Context, emailIdentity string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ses.NewDeleteEmailIdentityRequest() @@ -245,7 +252,7 @@ func (me *SesService) DeleteSesDomainById(ctx context.Context, emailIdentity str func (me *SesService) DescribeSesReceiversByFilter(ctx context.Context, param map[string]interface{}) (receivers []*ses.ReceiverData, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListReceiversRequest() ) @@ -296,7 +303,7 @@ func (me *SesService) DescribeSesReceiversByFilter(ctx context.Context, param ma func (me *SesService) DescribeSesSendTasksByFilter(ctx context.Context, param map[string]interface{}) (sendTasks []*ses.SendTaskData, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListSendTasksRequest() ) @@ -350,7 +357,7 @@ func (me *SesService) DescribeSesSendTasksByFilter(ctx context.Context, param ma func (me *SesService) DescribeSesEmailIdentitiesByFilter(ctx context.Context) (emailIdentities *ses.ListEmailIdentitiesResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListEmailIdentitiesRequest() ) @@ -379,7 +386,7 @@ func (me *SesService) DescribeSesEmailIdentitiesByFilter(ctx context.Context) (e func (me *SesService) DescribeSesBlackEmailAddressByFilter(ctx context.Context, param map[string]interface{}) (blackEmailAddress []*ses.BlackEmailAddress, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewListBlackEmailAddressRequest() ) @@ -436,7 +443,7 @@ func (me *SesService) DescribeSesBlackEmailAddressByFilter(ctx context.Context, func (me *SesService) DescribeSesStatisticsReportByFilter(ctx context.Context, param map[string]interface{}) (statisticsReport *ses.GetStatisticsReportResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewGetStatisticsReportRequest() ) @@ -480,7 +487,7 @@ func (me *SesService) DescribeSesStatisticsReportByFilter(ctx context.Context, p func (me *SesService) DescribeSesSendEmailStatusByFilter(ctx context.Context, param map[string]interface{}) (sendEmailStatus []*ses.SendEmailStatus, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ses.NewGetSendEmailStatusRequest() ) @@ -534,7 +541,7 @@ func (me *SesService) DescribeSesSendEmailStatusByFilter(ctx context.Context, pa } func (me *SesService) DescribeSesReceiverById(ctx context.Context, receiverId string) (Receiver *ses.ReceiverData, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) id, err := strconv.Atoi(receiverId) if err != nil { @@ -587,7 +594,7 @@ func (me *SesService) DescribeSesReceiverById(ctx context.Context, receiverId st } func (me *SesService) DescribeSesReceiverDetailById(ctx context.Context, receiverId string) (receiverDetail []*ses.ReceiverDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) id, err := strconv.Atoi(receiverId) if err != nil { @@ -635,7 +642,7 @@ func (me *SesService) DescribeSesReceiverDetailById(ctx context.Context, receive } func (me *SesService) DeleteSesReceiverById(ctx context.Context, receiverId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) id, _ := strconv.Atoi(receiverId) @@ -661,7 +668,7 @@ func (me *SesService) DeleteSesReceiverById(ctx context.Context, receiverId stri } func (me *SesService) DescribeSesVerifyDomainById(ctx context.Context, emailIdentity string) (verifyDomain *ses.GetEmailIdentityResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ses.NewGetEmailIdentityRequest() request.EmailIdentity = &emailIdentity @@ -690,9 +697,9 @@ func (me *SesService) DescribeSesVerifyDomainById(ctx context.Context, emailIden } func (me *SesService) CheckEmailIdentityById(ctx context.Context, emailIdentity string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { verifyDomain, e := me.DescribeSesVerifyDomainById(ctx, emailIdentity) if e != nil { return resource.NonRetryableError(e) diff --git a/tencentcloud/resource_tc_sms_sign.go b/tencentcloud/services/sms/resource_tc_sms_sign.go similarity index 77% rename from tencentcloud/resource_tc_sms_sign.go rename to tencentcloud/services/sms/resource_tc_sms_sign.go index 47abc88d6b..3177ef24a0 100644 --- a/tencentcloud/resource_tc_sms_sign.go +++ b/tencentcloud/services/sms/resource_tc_sms_sign.go @@ -1,4 +1,4 @@ -package tencentcloud +package sms 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" sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSmsSign() *schema.Resource { +func ResourceTencentCloudSmsSign() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudSmsSignRead, Create: resourceTencentCloudSmsSignCreate, @@ -72,10 +75,10 @@ func resourceTencentCloudSmsSign() *schema.Resource { } func resourceTencentCloudSmsSignCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_sign.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sms_sign.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = sms.NewAddSmsSignRequest() @@ -117,10 +120,10 @@ func resourceTencentCloudSmsSignCreate(d *schema.ResourceData, meta interface{}) request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().AddSmsSign(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSmsClient().AddSmsSign(request) if e != nil { - return retryError(e) + return tccommon.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,20 +138,20 @@ func resourceTencentCloudSmsSignCreate(d *schema.ResourceData, meta interface{}) } signId = *response.Response.AddSignStatus.SignId - d.SetId(helper.UInt64ToStr(signId) + FILED_SP + strconv.Itoa(international)) + d.SetId(helper.UInt64ToStr(signId) + tccommon.FILED_SP + strconv.Itoa(international)) return resourceTencentCloudSmsSignRead(d, meta) } func resourceTencentCloudSmsSignRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_sign.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sms_sign.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 := SmsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SmsService{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()) } @@ -178,14 +181,14 @@ func resourceTencentCloudSmsSignRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudSmsSignUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_sign.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sms_sign.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := sms.NewModifySmsSignRequest() - 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,10 +228,10 @@ func resourceTencentCloudSmsSignUpdate(d *schema.ResourceData, meta interface{}) request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSmsClient().ModifySmsSign(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSmsClient().ModifySmsSign(request) if e != nil { - return retryError(e) + return tccommon.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,15 +248,15 @@ func resourceTencentCloudSmsSignUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudSmsSignDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sms_sign.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sms_sign.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 := SmsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SmsService{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_sms_sign_test.go b/tencentcloud/services/sms/resource_tc_sms_sign_test.go similarity index 75% rename from tencentcloud/resource_tc_sms_sign_test.go rename to tencentcloud/services/sms/resource_tc_sms_sign_test.go index a60c5a9cce..0ae5ebc02d 100644 --- a/tencentcloud/resource_tc_sms_sign_test.go +++ b/tencentcloud/services/sms/resource_tc_sms_sign_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sms_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 TestAccTencentCloudSmsSign_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_SMS) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SMS) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSmsSign, diff --git a/tencentcloud/services/sms/resource_tc_sms_template.go b/tencentcloud/services/sms/resource_tc_sms_template.go new file mode 100644 index 0000000000..242b9ee7d8 --- /dev/null +++ b/tencentcloud/services/sms/resource_tc_sms_template.go @@ -0,0 +1,235 @@ +package sms + +import ( + "context" + "fmt" + "log" + "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" + sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSmsTemplate() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudSmsTemplateRead, + Create: resourceTencentCloudSmsTemplateCreate, + Update: resourceTencentCloudSmsTemplateUpdate, + Delete: resourceTencentCloudSmsTemplateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "template_name": { + Type: schema.TypeString, + Required: true, + Description: "Message Template name, which must be unique.", + }, + + "template_content": { + Type: schema.TypeString, + Required: true, + Description: "Message Template Content.", + }, + + "international": { + Type: schema.TypeInt, + Required: true, + Description: "Whether it is Global SMS: 0: Mainland China SMS; 1: Global SMS.", + }, + + "sms_type": { + Type: schema.TypeInt, + Required: true, + Description: "SMS type. 0: regular SMS, 1: marketing SMS.", + }, + + "remark": { + Type: schema.TypeString, + Required: true, + Description: "Template remarks, such as reason for application and use case.", + }, + }, + } +} + +func resourceTencentCloudSmsTemplateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sms_template.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = sms.NewAddSmsTemplateRequest() + response *sms.AddSmsTemplateResponse + templateId string + international int + ) + + if v, ok := d.GetOk("template_name"); ok { + request.TemplateName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("template_content"); ok { + request.TemplateContent = helper.String(v.(string)) + } + + if v, _ := d.GetOk("international"); v != nil { + international = v.(int) + request.International = helper.IntUint64(international) + } + + if v, _ := d.GetOk("sms_type"); v != nil { + request.SmsType = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSmsClient().AddSmsTemplate(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 sms template failed, reason:%+v", logId, err) + return err + } + + templateId = *response.Response.AddTemplateStatus.TemplateId + + d.SetId(templateId + tccommon.FILED_SP + strconv.Itoa(international)) + return resourceTencentCloudSmsTemplateRead(d, meta) +} + +func resourceTencentCloudSmsTemplateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sms_template.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SmsService{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()) + } + templateId := idSplit[0] + international := idSplit[1] + + template, err := service.DescribeSmsTemplate(ctx, templateId, international) + + if err != nil { + return err + } + + if template == nil { + d.SetId("") + return fmt.Errorf("resource `template` %s does not exist", templateId) + } + + if template.TemplateName != nil { + _ = d.Set("template_name", template.TemplateName) + } + + if template.TemplateContent != nil { + _ = d.Set("template_content", template.TemplateContent) + } + + if template.International != nil { + _ = d.Set("international", template.International) + } + + return nil +} + +func resourceTencentCloudSmsTemplateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sms_template.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + request := sms.NewModifySmsTemplateRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + templateId := idSplit[0] + + request.TemplateId = helper.Uint64(helper.StrToUInt64(templateId)) + + if v, ok := d.GetOk("template_name"); ok { + request.TemplateName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("template_content"); ok { + request.TemplateContent = helper.String(v.(string)) + } + + if v, _ := d.GetOk("international"); v != nil { + request.International = helper.IntUint64(v.(int)) + } + + if v, _ := d.GetOk("sms_type"); v != nil { + request.SmsType = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSmsClient().ModifySmsTemplate(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 sms template failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSmsTemplateRead(d, meta) +} + +func resourceTencentCloudSmsTemplateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sms_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := SmsService{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()) + } + templateId := idSplit[0] + + if err := service.DeleteSmsTemplateById(ctx, templateId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_sms_template_test.go b/tencentcloud/services/sms/resource_tc_sms_template_test.go similarity index 83% rename from tencentcloud/resource_tc_sms_template_test.go rename to tencentcloud/services/sms/resource_tc_sms_template_test.go index c7c6255407..7b8bb9038c 100644 --- a/tencentcloud/resource_tc_sms_template_test.go +++ b/tencentcloud/services/sms/resource_tc_sms_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sms_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 TestAccTencentCloudSmsTemplate_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_SMS) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SMS) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSmsTemplate, diff --git a/tencentcloud/service_tencentcloud_sms.go b/tencentcloud/services/sms/service_tencentcloud_sms.go similarity index 94% rename from tencentcloud/service_tencentcloud_sms.go rename to tencentcloud/services/sms/service_tencentcloud_sms.go index e127f6ad15..99f6bf6929 100644 --- a/tencentcloud/service_tencentcloud_sms.go +++ b/tencentcloud/services/sms/service_tencentcloud_sms.go @@ -1,10 +1,13 @@ -package tencentcloud +package sms import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20210111" + "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" @@ -16,7 +19,7 @@ type SmsService struct { func (me *SmsService) DescribeSmsSign(ctx context.Context, signId string, international string) (sign *sms.DescribeSignListStatus, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sms.NewDescribeSmsSignListRequest() ) @@ -46,7 +49,7 @@ func (me *SmsService) DescribeSmsSign(ctx context.Context, signId string, intern } func (me *SmsService) DeleteSmsSignById(ctx context.Context, signId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sms.NewDeleteSmsSignRequest() request.SignId = helper.Uint64(helper.StrToUInt64(signId)) @@ -72,7 +75,7 @@ func (me *SmsService) DeleteSmsSignById(ctx context.Context, signId string) (err func (me *SmsService) DescribeSmsTemplate(ctx context.Context, templateId string, international string) (template *sms.DescribeTemplateListStatus, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sms.NewDescribeSmsTemplateListRequest() ) @@ -102,7 +105,7 @@ func (me *SmsService) DescribeSmsTemplate(ctx context.Context, templateId string } func (me *SmsService) DeleteSmsTemplateById(ctx context.Context, templateId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sms.NewDeleteSmsTemplateRequest() diff --git a/tencentcloud/data_source_tc_sqlserver_account_db_attachments.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments.go similarity index 81% rename from tencentcloud/data_source_tc_sqlserver_account_db_attachments.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments.go index c176f73a87..aa881edfbc 100644 --- a/tencentcloud/data_source_tc_sqlserver_account_db_attachments.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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 dataSourceTencentCloudSqlserverAccountDBAttachments() *schema.Resource { +func DataSourceTencentCloudSqlserverAccountDBAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverAccountDBAttachmentsRead, Schema: map[string]*schema.Schema{ @@ -70,12 +73,12 @@ func dataSourceTencentCloudSqlserverAccountDBAttachments() *schema.Resource { } func dataSourceTencentSqlserverAccountDBAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_account_db_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_account_db_attachments.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) instanceId := d.Get("instance_id").(string) @@ -100,7 +103,7 @@ func dataSourceTencentSqlserverAccountDBAttachmentsRead(d *schema.ResourceData, } list = append(list, mapping) - ids = append(ids, fmt.Sprintf("%s%s%s%s%s", instanceId, FILED_SP, accountName, FILED_SP, dbName)) + ids = append(ids, fmt.Sprintf("%s%s%s%s%s", instanceId, tccommon.FILED_SP, accountName, tccommon.FILED_SP, dbName)) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -111,7 +114,7 @@ func dataSourceTencentSqlserverAccountDBAttachmentsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_sqlserver_account_db_attachments_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments_test.go similarity index 83% rename from tencentcloud/data_source_tc_sqlserver_account_db_attachments_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments_test.go index e9fffa347a..ad19bb0646 100644 --- a/tencentcloud/data_source_tc_sqlserver_account_db_attachments_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_account_db_attachments_test.go @@ -1,10 +1,13 @@ -package tencentcloud +package sqlserver_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + svcclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" @@ -17,8 +20,8 @@ var testDataSqlserverAccountDBAttachmentsName = "data.tencentcloud_sqlserver_acc func TestAccDataSourceTencentCloudSqlserverAccountDBAttachments_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{ { @@ -38,9 +41,7 @@ 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(), - } + clbService := svcclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_lb" { continue @@ -56,7 +57,7 @@ func testAccCheckLBDestroy(s *terraform.State) error { const testAccSQLServerAttachDataDB = "test_db_attachment" -const testAccTencentCloudDataSqlserverAccountDBAttachmentsBasic = CommonPresetSQLServerAccount + ` +const testAccTencentCloudDataSqlserverAccountDBAttachmentsBasic = tcacctest.CommonPresetSQLServerAccount + ` data "tencentcloud_sqlserver_account_db_attachments" "test"{ instance_id = local.sqlserver_id account_name = tencentcloud_sqlserver_account_db_attachment.test.account_name diff --git a/tencentcloud/data_source_tc_sqlserver_accounts.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts.go similarity index 83% rename from tencentcloud/data_source_tc_sqlserver_accounts.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts.go index 00272ef243..861c39b0b8 100644 --- a/tencentcloud/data_source_tc_sqlserver_accounts.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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 dataSourceTencentCloudSqlserverAccounts() *schema.Resource { +func DataSourceTencentCloudSqlserverAccounts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverAccountsRead, Schema: map[string]*schema.Schema{ @@ -74,14 +77,14 @@ func dataSourceTencentCloudSqlserverAccounts() *schema.Resource { } func dataSourceTencentSqlserverAccountsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_accounts.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_accounts.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) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accounts, err := sqlserverService.DescribeSqlserverAccounts(ctx, instanceId) @@ -105,7 +108,7 @@ func dataSourceTencentSqlserverAccountsRead(d *schema.ResourceData, meta interfa continue } list = append(list, mapping) - ids = append(ids, fmt.Sprintf("%s%s%s", instanceId, FILED_SP, *item.Name)) + ids = append(ids, fmt.Sprintf("%s%s%s", instanceId, tccommon.FILED_SP, *item.Name)) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -115,7 +118,7 @@ func dataSourceTencentSqlserverAccountsRead(d *schema.ResourceData, meta interfa } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_sqlserver_accounts_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts_test.go similarity index 76% rename from tencentcloud/data_source_tc_sqlserver_accounts_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts_test.go index 365923eae9..61041edb79 100644 --- a/tencentcloud/data_source_tc_sqlserver_accounts_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_accounts_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 testDataSqlserverAccountsName = "data.tencentcloud_sqlserver_accounts.test" func TestAccDataSourceTencentCloudSqlserverAccounts(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{ { @@ -30,4 +32,4 @@ func TestAccDataSourceTencentCloudSqlserverAccounts(t *testing.T) { }) } -const testAccTencentCloudDataSqlserverAccountsBasic = CommonPresetSQLServerAccount +const testAccTencentCloudDataSqlserverAccountsBasic = tcacctest.CommonPresetSQLServerAccount diff --git a/tencentcloud/data_source_tc_sqlserver_backup_by_flow_id.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_by_flow_id.go similarity index 88% rename from tencentcloud/data_source_tc_sqlserver_backup_by_flow_id.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_by_flow_id.go index 1552fa925f..d12436cf05 100644 --- a/tencentcloud/data_source_tc_sqlserver_backup_by_flow_id.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_by_flow_id.go @@ -1,14 +1,16 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" ) -func dataSourceTencentCloudSqlserverBackupByFlowId() *schema.Resource { +func DataSourceTencentCloudSqlserverBackupByFlowId() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverBackupByFlowIdRead, Schema: map[string]*schema.Schema{ @@ -88,13 +90,13 @@ func dataSourceTencentCloudSqlserverBackupByFlowId() *schema.Resource { } func dataSourceTencentCloudSqlserverBackupByFlowIdRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_backup_by_flow_id.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_backup_by_flow_id.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} response *sqlserver.DescribeBackupByFlowIdResponseParams instanceId string flowId string @@ -108,10 +110,10 @@ func dataSourceTencentCloudSqlserverBackupByFlowIdRead(d *schema.ResourceData, m flowId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeBackupByFlowId(ctx, instanceId, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result.Response @@ -170,7 +172,7 @@ func dataSourceTencentCloudSqlserverBackupByFlowIdRead(d *schema.ResourceData, m 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/sqlserver/data_source_tc_sqlserver_backup_by_flow_id_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_by_flow_id_test.go new file mode 100644 index 0000000000..56a06a62a3 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_by_flow_id_test.go @@ -0,0 +1,36 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverBackupByFlowIdDataSource_basic -v +func TestAccTencentCloudSqlserverBackupByFlowIdDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckSqlserverGeneralBackupDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverBackupByFlowIdDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_backup_by_flow_id.example"), + ), + }, + }, + }) +} + +const testAccSqlserverBackupByFlowIdDataSource = testAccSqlserverGeneralBackup + ` +data "tencentcloud_sqlserver_backup_by_flow_id" "example" { + instance_id = tencentcloud_sqlserver_general_backup.example.instance_id + flow_id = tencentcloud_sqlserver_general_backup.example.flow_id +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_backup_commands.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands.go similarity index 82% rename from tencentcloud/data_source_tc_sqlserver_backup_commands.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands.go index eaaccada17..c247d4ca49 100644 --- a/tencentcloud/data_source_tc_sqlserver_backup_commands.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands.go @@ -1,17 +1,20 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverBackupCommands() *schema.Resource { +func DataSourceTencentCloudSqlserverBackupCommands() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverBackupCommandsRead, Schema: map[string]*schema.Schema{ @@ -64,12 +67,12 @@ func dataSourceTencentCloudSqlserverBackupCommands() *schema.Resource { } func dataSourceTencentCloudSqlserverBackupCommandsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_backup_commands.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_backup_commands.read")() + 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) command []*sqlserver.DescribeBackupCommandResponseParams ) @@ -90,12 +93,12 @@ func dataSourceTencentCloudSqlserverBackupCommandsRead(d *schema.ResourceData, m paramMap["LocalPath"] = helper.String(v.(string)) } - service := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := service.DescribeSqlserverBackupCommand(ctx, paramMap) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } command = result @@ -125,7 +128,7 @@ func dataSourceTencentCloudSqlserverBackupCommandsRead(d *schema.ResourceData, m output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), command); e != nil { + if e := tccommon.WriteToFile(output.(string), command); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_sqlserver_backup_commands_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands_test.go similarity index 80% rename from tencentcloud/data_source_tc_sqlserver_backup_commands_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands_test.go index 20eff202db..f075c2e58a 100644 --- a/tencentcloud/data_source_tc_sqlserver_backup_commands_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_commands_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverBackupCommands_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: testAccSqlserverBackupCommands, diff --git a/tencentcloud/data_source_tc_sqlserver_backup_upload_size.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_upload_size.go similarity index 80% rename from tencentcloud/data_source_tc_sqlserver_backup_upload_size.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_upload_size.go index cda69a7714..5fdcb08f4c 100644 --- a/tencentcloud/data_source_tc_sqlserver_backup_upload_size.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_upload_size.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverBackupUploadSize() *schema.Resource { +func DataSourceTencentCloudSqlserverBackupUploadSize() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverBackupUploadSizeRead, Schema: map[string]*schema.Schema{ @@ -57,13 +60,13 @@ func dataSourceTencentCloudSqlserverBackupUploadSize() *schema.Resource { } func dataSourceTencentCloudSqlserverBackupUploadSizeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_backup_upload_size.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_backup_upload_size.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} cosUploadBackupFileSet []*sqlserver.CosUploadBackupFile ) @@ -80,10 +83,10 @@ func dataSourceTencentCloudSqlserverBackupUploadSizeRead(d *schema.ResourceData, paramMap["IncrementalMigrationId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverBackupUploadSizeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } cosUploadBackupFileSet = result @@ -119,7 +122,7 @@ func dataSourceTencentCloudSqlserverBackupUploadSizeRead(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/services/sqlserver/data_source_tc_sqlserver_backup_upload_size_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_upload_size_test.go new file mode 100644 index 0000000000..b516edf46a --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backup_upload_size_test.go @@ -0,0 +1,35 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverBackupUploadSizeDataSource_basic -v +func TestAccTencentCloudSqlserverBackupUploadSizeDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverBackupUploadSizeDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_backup_upload_size.backup_upload_size"), + ), + }, + }, + }) +} + +const testAccSqlserverBackupUploadSizeDataSource = ` +data "tencentcloud_sqlserver_backup_upload_size" "example" { + instance_id = "mssql-4gmc5805" + backup_migration_id = "mssql-backup-migration-9tj0sxnz" +} +` diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.go new file mode 100644 index 0000000000..4ceed50b6f --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.go @@ -0,0 +1,171 @@ +package sqlserver + +import ( + "context" + "fmt" + "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" +) + +func DataSourceTencentCloudSqlserverBackups() *schema.Resource { + + return &schema.Resource{ + Read: dataSourceTencentSqlserverBackupsRead, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance ID.", + }, + "backup_name": { + Type: schema.TypeString, + Optional: true, + Description: "Filter by backup name, do not filter if left blank.", + }, + "start_time": { + Type: schema.TypeString, + Required: true, + Description: "Start time of the instance list, like yyyy-MM-dd HH:mm:ss.", + }, + "end_time": { + Type: schema.TypeString, + Required: true, + Description: "End time of the instance list, like yyyy-MM-dd HH:mm:ss.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to store results.", + }, + // Computed values + "list": { + Type: schema.TypeList, + Computed: true, + Description: "A list of SQL Server backup. Each element contains the following attributes:", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "id": { + Type: schema.TypeString, + Computed: true, + Description: "ID of the backup.", + }, + "instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Instance ID.", + }, + "file_name": { + Type: schema.TypeString, + Computed: true, + Description: "File name of the backup.", + }, + "start_time": { + Type: schema.TypeString, + Computed: true, + Description: "Start time of the backup.", + }, + "end_time": { + Type: schema.TypeString, + Computed: true, + Description: "End time of the backup.", + }, + "db_list": { + Type: schema.TypeList, + Elem: &schema.Schema{Type: schema.TypeString}, + Computed: true, + Description: "Database name list of the backup.", + }, + "strategy": { + Type: schema.TypeInt, + Computed: true, + Description: "Strategy of the backup. `0` for instance backup, `1` for multi-databases backup.", + }, + "trigger_model": { + Type: schema.TypeInt, + Computed: true, + Description: "The way to trigger backup. `0` for timed trigger, `1` for manual trigger.", + }, + "status": { + Type: schema.TypeInt, + Computed: true, + Description: "Status of the backup. `1` for creating, `2` for successfully created, 3 for failed.", + }, + "size": { + Type: schema.TypeInt, + Computed: true, + Description: "The size of backup file. Unit is KB.", + }, + "intranet_url": { + Type: schema.TypeString, + Computed: true, + Description: "URL for downloads internally.", + }, + "internet_url": { + Type: schema.TypeString, + Computed: true, + Description: "URL for downloads externally.", + }, + }, + }, + }, + }, + } +} + +func dataSourceTencentSqlserverBackupsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_backups.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + instanceId := d.Get("instance_id").(string) + backupName := d.Get("backup_name").(string) + startTime := d.Get("start_time").(string) + endTime := d.Get("end_time").(string) + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + backInfoItems, err := sqlserverService.DescribeSqlserverBackups(ctx, instanceId, backupName, startTime, endTime) + + if err != nil { + return fmt.Errorf("api[DescribeBackups]fail, return %s", err.Error()) + } + + var list []map[string]interface{} + var ids = make([]string, len(backInfoItems)) + + for _, item := range backInfoItems { + mapping := map[string]interface{}{ + "start_time": item.StartTime, + "end_time": item.EndTime, + "size": item.Size, + "trigger_model": item.BackupWay, + "intranet_url": item.InternalAddr, + "internet_url": item.ExternalAddr, + "status": item.Status, + "file_name": item.FileName, + "instance_id": instanceId, + "id": strconv.Itoa(int(*item.Id)), + "db_list": helper.StringsInterfaces(item.DBs), + } + list = append(list, mapping) + ids = append(ids, fmt.Sprintf("%d", *item.Id)) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + if e := d.Set("list", list); e != nil { + log.Printf("[CRITAL]%s provider set list fail, reason:%s\n", logId, e.Error()) + return e + } + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + return tccommon.WriteToFile(output.(string), list) + } + + return nil +} diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.md b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.md new file mode 100644 index 0000000000..de6c654315 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups.md @@ -0,0 +1,78 @@ +Use this data source to query the list of SQL Server backups. + +Example Usage + +```hcl +data "tencentcloud_availability_zones_by_product" "zones" { + product = "sqlserver" +} + +data "tencentcloud_sqlserver_backups" "example" { + instance_id = tencentcloud_sqlserver_general_backup.example.instance_id + start_time = "2023-08-01 00:00:00" + end_time = "2023-08-07 00:00:00" +} + +resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name + name = "subnet-example" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false +} + +resource "tencentcloud_security_group" "security_group" { + name = "sg-example" + description = "desc." +} + +resource "tencentcloud_sqlserver_basic_instance" "example" { + name = "tf-example" + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name + charge_type = "POSTPAID_BY_HOUR" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + project_id = 0 + memory = 4 + storage = 100 + cpu = 2 + machine_type = "CLOUD_PREMIUM" + maintenance_week_set = [1, 2, 3] + maintenance_start_time = "09:00" + maintenance_time_span = 3 + security_groups = [tencentcloud_security_group.security_group.id] + + tags = { + "test" = "test" + } +} + +resource "tencentcloud_sqlserver_db" "example" { + instance_id = tencentcloud_sqlserver_basic_instance.example.id + name = "tf_example_db" + charset = "Chinese_PRC_BIN" + remark = "test-remark" +} + +resource "tencentcloud_sqlserver_general_backup" "example" { + instance_id = tencentcloud_sqlserver_db.example.instance_id + backup_name = "tf_example_backup" + strategy = 0 +} +``` + +Filter by backup name + +```hcl +data "tencentcloud_sqlserver_backups" "example" { + instance_id = tencentcloud_sqlserver_general_backup.example.instance_id + start_time = "2023-08-01 00:00:00" + end_time = "2023-08-07 00:00:00" + backup_name = "tf-example-backup" +} +``` diff --git a/tencentcloud/data_source_tc_sqlserver_backups_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups_test.go similarity index 90% rename from tencentcloud/data_source_tc_sqlserver_backups_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups_test.go index 64ce83073d..4371f089c0 100644 --- a/tencentcloud/data_source_tc_sqlserver_backups_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_backups_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package sqlserver_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -17,8 +19,8 @@ func TestAccDataSourceTencentCloudSqlserverBackups(t *testing.T) { startTime := time.Now().AddDate(0, 0, -7).In(loc).Format("2006-01-02 15:04:05") endTime := time.Now().AddDate(0, 0, 1).In(loc).Format("2006-01-02 15:04:05") resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckLBDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_sqlserver_basic_instances.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances.go similarity index 88% rename from tencentcloud/data_source_tc_sqlserver_basic_instances.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances.go index d1be248801..5b2c16a329 100644 --- a/tencentcloud/data_source_tc_sqlserver_basic_instances.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances.go @@ -1,14 +1,19 @@ -package tencentcloud +package sqlserver import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverBasicInstances() *schema.Resource { +func DataSourceTencentCloudSqlserverBasicInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverBasicInstanceRead, Schema: map[string]*schema.Schema{ @@ -141,13 +146,13 @@ func dataSourceTencentCloudSqlserverBasicInstances() *schema.Resource { } func dataSourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_basic_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_basic_instances.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - tcClient = meta.(*TencentCloudClient).apiV3Conn - tagService = &TagService{client: tcClient} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient = meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService = svctag.NewTagService(tcClient) service = SqlserverService{client: tcClient} id = d.Get("id").(string) name = d.Get("name").(string) @@ -190,9 +195,9 @@ func dataSourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, me listItem["cpu"] = v.Cpu if *v.PayMode == 1 { - listItem["charge_type"] = COMMON_PAYTYPE_PREPAID + listItem["charge_type"] = svcpostgresql.COMMON_PAYTYPE_PREPAID } else { - listItem["charge_type"] = COMMON_PAYTYPE_POSTPAID + listItem["charge_type"] = svcpostgresql.COMMON_PAYTYPE_POSTPAID } tagList, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, *v.InstanceId) if err != nil { @@ -211,7 +216,7 @@ func dataSourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, me } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances_test.go new file mode 100644 index 0000000000..f97214c540 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_basic_instances_test.go @@ -0,0 +1,36 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testDataSqlserverBasicInstancesName = "data.tencentcloud_sqlserver_basic_instances.id_test" + +// go test -i; go test -test.run TestAccDataSourceTencentCloudSqlserverBasicInstances -v +func TestAccDataSourceTencentCloudSqlserverBasicInstances(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckSqlserverBasicInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataSqlserverBasicInstancesBasic, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testDataSqlserverBasicInstancesName, "name"), + resource.TestCheckResourceAttrSet(testDataSqlserverBasicInstancesName, "instance_list.#"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataSqlserverBasicInstancesBasic = tcacctest.TestAccSqlserverAZ + ` +data "tencentcloud_sqlserver_basic_instances" "id_test"{ + name = "keep" +} +` diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone.go new file mode 100644 index 0000000000..8328a1f645 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone.go @@ -0,0 +1,93 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudSqlserverCrossRegionZone() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSqlserverCrossRegionZoneRead, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID in the format of mssql-j8kv137v.", + }, + "region": { + Computed: true, + Type: schema.TypeString, + Description: "The string ID of the region where the standby machine is located, such as: ap-guangzhou.", + }, + "zone": { + Computed: true, + Type: schema.TypeString, + Description: "The string ID of the availability zone where the standby machine is located, such as: ap-guangzhou-1.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSqlserverCrossRegionZoneRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_cross_region_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + crossRegion *sqlserver.DescribeCrossRegionZoneResponseParams + instanceId string + ) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_id"); ok { + paramMap["InstanceId"] = helper.String(v.(string)) + instanceId = v.(string) + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSqlserverCrossRegionZoneByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + + crossRegion = result + return nil + }) + + if err != nil { + return err + } + + if crossRegion.Region != nil { + _ = d.Set("region", crossRegion.Region) + } + + if crossRegion.Zone != nil { + _ = d.Set("zone", crossRegion.Zone) + } + + d.SetId(instanceId) + + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone_test.go new file mode 100644 index 0000000000..93345f7a14 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_cross_region_zone_test.go @@ -0,0 +1,32 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverCrossRegionZoneDataSource_basic -v +func TestAccTencentCloudSqlserverCrossRegionZoneDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverCrossRegionZoneDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_cross_region_zone.example")), + }, + }, + }) +} + +const testAccSqlserverCrossRegionZoneDataSource = ` +data "tencentcloud_sqlserver_cross_region_zone" "example" { + instance_id = "mssql-qelbzgwf" +} +` diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets.go new file mode 100644 index 0000000000..9e1e398cd5 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets.go @@ -0,0 +1,82 @@ +package sqlserver + +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 DataSourceTencentCloudSqlserverDBCharsets() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSqlserverDBCharsetsRead, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID in the format of mssql-j8kv137v.", + }, + "database_charsets": { + Computed: true, + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Description: "Database character set list.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSqlserverDBCharsetsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_db_charsets.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId string + databaseCharsets []*string + ) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("instance_id"); ok { + paramMap["InstanceId"] = helper.String(v.(string)) + instanceId = v.(string) + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSqlserverDatasourceDBCharsetsByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + + databaseCharsets = result + return nil + }) + + if err != nil { + return err + } + + if databaseCharsets != nil { + _ = d.Set("database_charsets", databaseCharsets) + } + + d.SetId(instanceId) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + return nil +} diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets_test.go new file mode 100644 index 0000000000..6b2c114fc6 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_db_charsets_test.go @@ -0,0 +1,32 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverDBCharsetsDataSource_basic -v +func TestAccTencentCloudSqlserverDBCharsetsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverDBCharsetsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_db_charsets.example")), + }, + }, + }) +} + +const testAccSqlserverDBCharsetsDataSource = ` +data "tencentcloud_sqlserver_db_charsets" "example" { + instance_id = "mssql-qelbzgwf" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_dbs.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs.go similarity index 85% rename from tencentcloud/data_source_tc_sqlserver_dbs.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs.go index f0d8021f29..f3460bc3d3 100644 --- a/tencentcloud/data_source_tc_sqlserver_dbs.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs.go @@ -1,14 +1,16 @@ -package tencentcloud +package sqlserver import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentSqlserverDBs() *schema.Resource { +func DataSourceTencentCloudSqlserverDBs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverDBRead, Schema: map[string]*schema.Schema{ @@ -67,11 +69,11 @@ func dataSourceTencentSqlserverDBs() *schema.Resource { } func dataSourceTencentSqlserverDBRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencent_sqlserver_dbs.read")() + defer tccommon.LogElapsed("data_source.tencent_sqlserver_dbs.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} // precheck instanceId := d.Get("instance_id").(string) @@ -102,7 +104,7 @@ func dataSourceTencentSqlserverDBRead(d *schema.ResourceData, meta interface{}) d.SetId(instanceId) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), dbList); err != nil { + if err := tccommon.WriteToFile(output.(string), dbList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) } diff --git a/tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs_test.go new file mode 100644 index 0000000000..d3792b83cb --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_dbs_test.go @@ -0,0 +1,38 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccDataSourceTencentCloudSqlserverDBs_basic -v +func TestAccDataSourceTencentCloudSqlserverDBs_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: TestAccDataSourceTencentCloudSqlserverDB, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_dbs.foo"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "instance_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.name"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.charset"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.remark"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.create_time"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_dbs.foo", "db_list.0.status"), + ), + }, + }, + }) +} + +const TestAccDataSourceTencentCloudSqlserverDB = tcacctest.CommonPresetSQLServer + ` +data "tencentcloud_sqlserver_dbs" "foo" { + instance_id = local.sqlserver_id +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_desc_ha_log.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log.go similarity index 85% rename from tencentcloud/data_source_tc_sqlserver_desc_ha_log.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log.go index e8f067a46b..606f8a7950 100644 --- a/tencentcloud/data_source_tc_sqlserver_desc_ha_log.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverDescHaLog() *schema.Resource { +func DataSourceTencentCloudSqlserverDescHaLog() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverDescHaLogRead, Schema: map[string]*schema.Schema{ @@ -77,13 +80,13 @@ func dataSourceTencentCloudSqlserverDescHaLog() *schema.Resource { } func dataSourceTencentCloudSqlserverDescHaLogRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_desc_ha_log.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_desc_ha_log.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} switchLogs []*sqlserver.SwitchLog instanceId string ) @@ -106,10 +109,10 @@ func dataSourceTencentCloudSqlserverDescHaLogRead(d *schema.ResourceData, meta i paramMap["SwitchType"] = helper.IntUint64(v.(int)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverDescHaLogByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } switchLogs = result @@ -155,7 +158,7 @@ func dataSourceTencentCloudSqlserverDescHaLogRead(d *schema.ResourceData, meta i 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/sqlserver/data_source_tc_sqlserver_desc_ha_log.md b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log.md similarity index 100% rename from tencentcloud/sqlserver/data_source_tc_sqlserver_desc_ha_log.md rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log.md diff --git a/tencentcloud/data_source_tc_sqlserver_desc_ha_log_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log_test.go similarity index 81% rename from tencentcloud/data_source_tc_sqlserver_desc_ha_log_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log_test.go index de90952867..30551f1c5c 100644 --- a/tencentcloud/data_source_tc_sqlserver_desc_ha_log_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_desc_ha_log_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverDescHaLogDataSource_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(testAccSqlserverDescHaLogDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_desc_ha_log.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_desc_ha_log.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_desc_ha_log.example", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_desc_ha_log.example", "start_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_desc_ha_log.example", "end_time"), diff --git a/tencentcloud/data_source_tc_sqlserver_ins_attribute.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_ins_attribute.go similarity index 90% rename from tencentcloud/data_source_tc_sqlserver_ins_attribute.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_ins_attribute.go index c9891d39b1..be3db966bf 100644 --- a/tencentcloud/data_source_tc_sqlserver_ins_attribute.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_ins_attribute.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverInsAttribute() *schema.Resource { +func DataSourceTencentCloudSqlserverInsAttribute() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverInsAttributeRead, Schema: map[string]*schema.Schema{ @@ -111,13 +114,13 @@ func dataSourceTencentCloudSqlserverInsAttribute() *schema.Resource { } func dataSourceTencentCloudSqlserverInsAttributeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_ins_attribute.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_ins_attribute.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} insAttribute *sqlserver.DescribeDBInstancesAttributeResponseParams instanceId string ) @@ -128,10 +131,10 @@ func dataSourceTencentCloudSqlserverInsAttributeRead(d *schema.ResourceData, met instanceId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverInsAttributeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } insAttribute = result @@ -217,7 +220,7 @@ func dataSourceTencentCloudSqlserverInsAttributeRead(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/services/sqlserver/data_source_tc_sqlserver_ins_attribute_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_ins_attribute_test.go new file mode 100644 index 0000000000..50057fce50 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_ins_attribute_test.go @@ -0,0 +1,35 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverInsAttributeDataSource_basic -v +func TestAccTencentCloudSqlserverInsAttributeDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverDatasourceInsAttributeDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_ins_attribute.example"), + resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_ins_attribute.example", "instance_id"), + ), + }, + }, + }) +} + +const testAccSqlserverDatasourceInsAttributeDataSource = ` +data "tencentcloud_sqlserver_ins_attribute" "example" { + instance_id = "mssql-gyg9xycl" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_instance_param_records.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instance_param_records.go similarity index 83% rename from tencentcloud/data_source_tc_sqlserver_instance_param_records.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_instance_param_records.go index d11f105b2f..7aa93e0ffb 100644 --- a/tencentcloud/data_source_tc_sqlserver_instance_param_records.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instance_param_records.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverInstanceParamRecords() *schema.Resource { +func DataSourceTencentCloudSqlserverInstanceParamRecords() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverInstanceParamRecordsRead, Schema: map[string]*schema.Schema{ @@ -67,13 +70,13 @@ func dataSourceTencentCloudSqlserverInstanceParamRecords() *schema.Resource { } func dataSourceTencentCloudSqlserverInstanceParamRecordsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_instance_param_records.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_instance_param_records.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string ) @@ -85,10 +88,10 @@ func dataSourceTencentCloudSqlserverInstanceParamRecordsRead(d *schema.ResourceD var items []*sqlserver.ParamRecord - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverInstanceParamRecordsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -137,7 +140,7 @@ func dataSourceTencentCloudSqlserverInstanceParamRecordsRead(d *schema.ResourceD 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/services/sqlserver/data_source_tc_sqlserver_instance_param_records_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instance_param_records_test.go new file mode 100644 index 0000000000..a26fc65d4f --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instance_param_records_test.go @@ -0,0 +1,32 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverInstanceParamRecordsDataSource_basic -v +func TestAccTencentCloudSqlserverInstanceParamRecordsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverInstanceParamRecordsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_instance_param_records.example")), + }, + }, + }) +} + +const testAccSqlserverInstanceParamRecordsDataSource = ` +data "tencentcloud_sqlserver_instance_param_records" "example" { + instance_id = "mssql-qelbzgwf" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_instances.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances.go similarity index 88% rename from tencentcloud/data_source_tc_sqlserver_instances.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances.go index 3d24de8fac..f704dc7ee9 100644 --- a/tencentcloud/data_source_tc_sqlserver_instances.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances.go @@ -1,14 +1,19 @@ -package tencentcloud +package sqlserver import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverInstances() *schema.Resource { +func DataSourceTencentCloudSqlserverInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverInstanceRead, Schema: map[string]*schema.Schema{ @@ -146,13 +151,13 @@ func dataSourceTencentCloudSqlserverInstances() *schema.Resource { } func dataSourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_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) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) service := SqlserverService{client: tcClient} id := d.Get("id").(string) @@ -199,9 +204,9 @@ func dataSourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta in listItem["ro_flag"] = v.ROFlag if *v.PayMode == 1 { - listItem["charge_type"] = COMMON_PAYTYPE_PREPAID + listItem["charge_type"] = svcpostgresql.COMMON_PAYTYPE_PREPAID } else { - listItem["charge_type"] = COMMON_PAYTYPE_POSTPAID + listItem["charge_type"] = svcpostgresql.COMMON_PAYTYPE_POSTPAID } tagList, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, *v.InstanceId) @@ -221,7 +226,7 @@ func dataSourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta in } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_sqlserver_instances_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances_test.go similarity index 90% rename from tencentcloud/data_source_tc_sqlserver_instances_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances_test.go index 7b1138ad49..0f81549db4 100644 --- a/tencentcloud/data_source_tc_sqlserver_instances_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 testDataSqlserverInstancesName = "data.tencentcloud_sqlserver_instances.exam func TestAccDataSourceTencentCloudSqlserverInstances(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: testAccCheckSqlserverInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_sqlserver_project_security_groups.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_project_security_groups.go similarity index 90% rename from tencentcloud/data_source_tc_sqlserver_project_security_groups.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_project_security_groups.go index af60f05157..1b3beaf884 100644 --- a/tencentcloud/data_source_tc_sqlserver_project_security_groups.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_project_security_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverProjectSecurityGroups() *schema.Resource { +func DataSourceTencentCloudSqlserverProjectSecurityGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverProjectSecurityGroupsRead, Schema: map[string]*schema.Schema{ @@ -131,13 +134,13 @@ func dataSourceTencentCloudSqlserverProjectSecurityGroups() *schema.Resource { } func dataSourceTencentCloudSqlserverProjectSecurityGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_project_security_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_project_security_groups.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} projectId string ) @@ -149,10 +152,10 @@ func dataSourceTencentCloudSqlserverProjectSecurityGroupsRead(d *schema.Resource var securityGroupSet []*sqlserver.SecurityGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverProjectSecurityGroupsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } securityGroupSet = result @@ -260,7 +263,7 @@ func dataSourceTencentCloudSqlserverProjectSecurityGroupsRead(d *schema.Resource d.SetId(projectId) 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/sqlserver/data_source_tc_sqlserver_project_security_groups_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_project_security_groups_test.go new file mode 100644 index 0000000000..6688c9c63a --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_project_security_groups_test.go @@ -0,0 +1,32 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverProjectSecurityGroupsDataSource_basic -v +func TestAccTencentCloudSqlserverProjectSecurityGroupsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverProjectSecurityGroupsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_project_security_groups.example")), + }, + }, + }) +} + +const testAccSqlserverProjectSecurityGroupsDataSource = ` +data "tencentcloud_sqlserver_project_security_groups" "example" { + project_id = 0 +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_publish_subscribes.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes.go similarity index 91% rename from tencentcloud/data_source_tc_sqlserver_publish_subscribes.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes.go index 66cd75dcfc..3178dd8502 100644 --- a/tencentcloud/data_source_tc_sqlserver_publish_subscribes.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes.go @@ -1,14 +1,17 @@ -package tencentcloud +package sqlserver 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 dataSourceTencentSqlserverPublishSubscribes() *schema.Resource { +func DataSourceTencentCloudSqlserverPublishSubscribes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverPublishSubscribesRead, Schema: map[string]*schema.Schema{ @@ -135,11 +138,11 @@ func dataSourceTencentSqlserverPublishSubscribes() *schema.Resource { } func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_publish_subscribes.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_publish_subscribes.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} paramMap := make(map[string]interface{}) paramMap["instanceId"] = d.Get("instance_id").(string) if v, ok := d.GetOk("pub_or_sub_instance_id"); ok { @@ -191,7 +194,7 @@ func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, met "subscribe_instance_name": publishSubscribe.SubscribeInstanceName, "database_tuples": databaseTupleStatus, } - resourceId := *publishSubscribe.PublishInstanceId + FILED_SP + *publishSubscribe.SubscribeInstanceId + resourceId := *publishSubscribe.PublishInstanceId + tccommon.FILED_SP + *publishSubscribe.SubscribeInstanceId instanceList = append(instanceList, instance) ids = append(ids, resourceId) } @@ -204,7 +207,7 @@ func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, met 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_sqlserver_publish_subscribes_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes_test.go similarity index 76% rename from tencentcloud/data_source_tc_sqlserver_publish_subscribes_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes_test.go index 4036a0c3c7..7d8f3002dd 100644 --- a/tencentcloud/data_source_tc_sqlserver_publish_subscribes_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_publish_subscribes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverPublishSubscribeDataSource(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: testAccCheckSqlserverPublishSubscribeDestroy, Steps: []resource.TestStep{ { @@ -24,7 +26,7 @@ func TestAccTencentCloudSqlserverPublishSubscribeDataSource(t *testing.T) { }) } -const testAccTencentCloudSqlServerPublishSubscribeDataSourceConfig = CommonPresetSQLServer + ` +const testAccTencentCloudSqlServerPublishSubscribeDataSourceConfig = tcacctest.CommonPresetSQLServer + ` data "tencentcloud_sqlserver_publish_subscribes" "example" { instance_id = local.sqlserver_id } diff --git a/tencentcloud/data_source_tc_sqlserver_query_xevent.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent.go similarity index 87% rename from tencentcloud/data_source_tc_sqlserver_query_xevent.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent.go index 6251cc4d4c..e32a7da628 100644 --- a/tencentcloud/data_source_tc_sqlserver_query_xevent.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverQueryXevent() *schema.Resource { +func DataSourceTencentCloudSqlserverQueryXevent() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverQueryXeventRead, Schema: map[string]*schema.Schema{ @@ -97,13 +100,13 @@ func dataSourceTencentCloudSqlserverQueryXevent() *schema.Resource { } func dataSourceTencentCloudSqlserverQueryXeventRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_query_xevent.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_query_xevent.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} events []*sqlserver.Events instanceId string ) @@ -126,10 +129,10 @@ func dataSourceTencentCloudSqlserverQueryXeventRead(d *schema.ResourceData, meta paramMap["EndTime"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverQueryXeventByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } events = result @@ -191,7 +194,7 @@ func dataSourceTencentCloudSqlserverQueryXeventRead(d *schema.ResourceData, meta 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_sqlserver_query_xevent_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent_test.go similarity index 82% rename from tencentcloud/data_source_tc_sqlserver_query_xevent_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent_test.go index aa95c6659e..d812f3fc90 100644 --- a/tencentcloud/data_source_tc_sqlserver_query_xevent_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_query_xevent_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverQueryXeventDataSource_basic(t *testing.T) { endTime := time.Now().AddDate(0, 0, 1).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(testAccSqlserverQueryXeventDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_query_xevent.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_query_xevent.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_query_xevent.example", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_query_xevent.example", "event_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_query_xevent.example", "start_time"), diff --git a/tencentcloud/data_source_tc_sqlserver_readonly_groups.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups.go similarity index 88% rename from tencentcloud/data_source_tc_sqlserver_readonly_groups.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups.go index fe7d85f6bd..5752581e5f 100644 --- a/tencentcloud/data_source_tc_sqlserver_readonly_groups.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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 dataSourceTencentCloudSqlserverReadonlyGroups() *schema.Resource { +func DataSourceTencentCloudSqlserverReadonlyGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverReadonlyGroups, @@ -90,13 +93,13 @@ func dataSourceTencentCloudSqlserverReadonlyGroups() *schema.Resource { } func dataSourceTencentSqlserverReadonlyGroups(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_readonly_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_readonly_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) instanceId := d.Get("master_instance_id").(string) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupList, err := sqlserverService.DescribeReadonlyGroupList(ctx, instanceId) @@ -135,7 +138,7 @@ func dataSourceTencentSqlserverReadonlyGroups(d *schema.ResourceData, meta inter } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_sqlserver_readonly_groups_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups_test.go similarity index 85% rename from tencentcloud/data_source_tc_sqlserver_readonly_groups_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups_test.go index 7b36967c22..41753253b7 100644 --- a/tencentcloud/data_source_tc_sqlserver_readonly_groups_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_readonly_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 testDataSqlserverReadonlyGroupsName = "data.tencentcloud_sqlserver_readonly_ func TestAccDataSourceTencentCloudSqlserverReadonlyGroups(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{ { @@ -36,7 +38,7 @@ func TestAccDataSourceTencentCloudSqlserverReadonlyGroups(t *testing.T) { }) } -const testAccTencentCloudDataSqlserverReadonlyGroupsBasic = CommonPresetSQLServer + ` +const testAccTencentCloudDataSqlserverReadonlyGroupsBasic = tcacctest.CommonPresetSQLServer + ` data "tencentcloud_sqlserver_readonly_groups" "test"{ master_instance_id = local.sqlserver_id } diff --git a/tencentcloud/data_source_tc_sqlserver_regions.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_regions.go similarity index 79% rename from tencentcloud/data_source_tc_sqlserver_regions.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_regions.go index 743734eea9..5597c3bded 100644 --- a/tencentcloud/data_source_tc_sqlserver_regions.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_regions.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverRegions() *schema.Resource { +func DataSourceTencentCloudSqlserverRegions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverRegionsRead, Schema: map[string]*schema.Schema{ @@ -53,20 +56,20 @@ func dataSourceTencentCloudSqlserverRegions() *schema.Resource { } func dataSourceTencentCloudSqlserverRegionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_regions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_regions.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} regionSet []*sqlserver.RegionInfo ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverDatasourceRegionsByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } regionSet = result @@ -110,7 +113,7 @@ func dataSourceTencentCloudSqlserverRegionsRead(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/services/sqlserver/data_source_tc_sqlserver_regions_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_regions_test.go new file mode 100644 index 0000000000..2d7741e068 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_regions_test.go @@ -0,0 +1,30 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverRegionsDataSource_basic -v +func TestAccTencentCloudSqlserverRegionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverRegionsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_regions.example")), + }, + }, + }) +} + +const testAccSqlserverRegionsDataSource = ` +data "tencentcloud_sqlserver_regions" "example" {} +` diff --git a/tencentcloud/data_source_tc_sqlserver_rollback_time.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_rollback_time.go similarity index 81% rename from tencentcloud/data_source_tc_sqlserver_rollback_time.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_rollback_time.go index 798959dffe..32dea443ce 100644 --- a/tencentcloud/data_source_tc_sqlserver_rollback_time.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_rollback_time.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverRollbackTime() *schema.Resource { +func DataSourceTencentCloudSqlserverRollbackTime() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverRollbackTimeRead, Schema: map[string]*schema.Schema{ @@ -60,13 +63,13 @@ func dataSourceTencentCloudSqlserverRollbackTime() *schema.Resource { } func dataSourceTencentCloudSqlserverRollbackTimeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_rollback_time.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_rollback_time.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} details []*sqlserver.DbRollbackTimeInfo instanceId string ) @@ -82,10 +85,10 @@ func dataSourceTencentCloudSqlserverRollbackTimeRead(d *schema.ResourceData, met paramMap["DBs"] = helper.InterfacesStringsPoint(dBsSet) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverRollbackTimeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } details = result @@ -123,7 +126,7 @@ func dataSourceTencentCloudSqlserverRollbackTimeRead(d *schema.ResourceData, met 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/services/sqlserver/data_source_tc_sqlserver_rollback_time_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_rollback_time_test.go new file mode 100644 index 0000000000..724dc3863a --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_rollback_time_test.go @@ -0,0 +1,33 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverRollbackTimeDataSource_basic -v +func TestAccTencentCloudSqlserverRollbackTimeDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverRollbackTimeDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_rollback_time.example")), + }, + }, + }) +} + +const testAccSqlserverRollbackTimeDataSource = ` +data "tencentcloud_sqlserver_rollback_time" "example" { + instance_id = "mssql-qelbzgwf" + dbs = ["keep_pubsub_db"] +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_slowlogs.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_slowlogs.go similarity index 85% rename from tencentcloud/data_source_tc_sqlserver_slowlogs.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_slowlogs.go index 0ee8ab4b24..7ebf488e23 100644 --- a/tencentcloud/data_source_tc_sqlserver_slowlogs.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_slowlogs.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverSlowlogs() *schema.Resource { +func DataSourceTencentCloudSqlserverSlowlogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverSlowlogsRead, Schema: map[string]*schema.Schema{ @@ -87,13 +90,13 @@ func dataSourceTencentCloudSqlserverSlowlogs() *schema.Resource { } func dataSourceTencentCloudSqlserverSlowlogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_slowlogs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_slowlogs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string ) @@ -113,10 +116,10 @@ func dataSourceTencentCloudSqlserverSlowlogsRead(d *schema.ResourceData, meta in var slowlogs []*sqlserver.SlowlogInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverSlowlogsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } slowlogs = result @@ -174,7 +177,7 @@ func dataSourceTencentCloudSqlserverSlowlogsRead(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/services/sqlserver/data_source_tc_sqlserver_slowlogs_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_slowlogs_test.go new file mode 100644 index 0000000000..6f7ca34e81 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_slowlogs_test.go @@ -0,0 +1,39 @@ +package sqlserver_test + +import ( + "fmt" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverSlowlogsDataSource_basic -v +func TestAccTencentCloudSqlserverSlowlogsDataSource_basic(t *testing.T) { + t.Parallel() + loc, _ := time.LoadLocation("Asia/Chongqing") + startTime := time.Now().AddDate(0, 0, -7).In(loc).Format("2006-01-02 15:04:05") + endTime := time.Now().AddDate(0, 0, 1).In(loc).Format("2006-01-02 15:04:05") + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccSqlserverSlowlogsDataSource, startTime, endTime), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_slowlogs.example")), + }, + }, + }) +} + +const testAccSqlserverSlowlogsDataSource = ` +data "tencentcloud_sqlserver_slowlogs" "example" { + instance_id = "mssql-qelbzgwf" + start_time = "%s" + end_time = "%s" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_upload_backup_info.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_backup_info.go similarity index 83% rename from tencentcloud/data_source_tc_sqlserver_upload_backup_info.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_backup_info.go index 492fdcc20a..1c89f3a426 100644 --- a/tencentcloud/data_source_tc_sqlserver_upload_backup_info.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_backup_info.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverUploadBackupInfo() *schema.Resource { +func DataSourceTencentCloudSqlserverUploadBackupInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverUploadBackupInfoRead, Schema: map[string]*schema.Schema{ @@ -73,13 +76,13 @@ func dataSourceTencentCloudSqlserverUploadBackupInfo() *schema.Resource { } func dataSourceTencentCloudSqlserverUploadBackupInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_upload_backup_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_upload_backup_info.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uploadBackupInfo *sqlserver.DescribeUploadBackupInfoResponseParams instanceId string ) @@ -94,10 +97,10 @@ func dataSourceTencentCloudSqlserverUploadBackupInfoRead(d *schema.ResourceData, paramMap["BackupMigrationId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverUploadBackupInfoByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } uploadBackupInfo = result @@ -143,7 +146,7 @@ func dataSourceTencentCloudSqlserverUploadBackupInfoRead(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/services/sqlserver/data_source_tc_sqlserver_upload_backup_info_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_backup_info_test.go new file mode 100644 index 0000000000..119bbb7373 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_backup_info_test.go @@ -0,0 +1,33 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverUploadBackupInfoDataSource_basic -v +func TestAccTencentCloudSqlserverUploadBackupInfoDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverUploadBackupInfoDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_upload_backup_info.example")), + }, + }, + }) +} + +const testAccSqlserverUploadBackupInfoDataSource = ` +data "tencentcloud_sqlserver_upload_backup_info" "example" { + instance_id = "mssql-qelbzgwf" + backup_migration_id = "mssql-backup-migration-8a0f3eht" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_upload_incremental_info.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_incremental_info.go similarity index 84% rename from tencentcloud/data_source_tc_sqlserver_upload_incremental_info.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_incremental_info.go index 5be6cf0f2d..753218f7a7 100644 --- a/tencentcloud/data_source_tc_sqlserver_upload_incremental_info.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_incremental_info.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSqlserverUploadIncrementalInfo() *schema.Resource { +func DataSourceTencentCloudSqlserverUploadIncrementalInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSqlserverUploadIncrementalInfoRead, Schema: map[string]*schema.Schema{ @@ -78,13 +81,13 @@ func dataSourceTencentCloudSqlserverUploadIncrementalInfo() *schema.Resource { } func dataSourceTencentCloudSqlserverUploadIncrementalInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sqlserver_upload_incremental_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sqlserver_upload_incremental_info.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uploadIncrementalInfo *sqlserver.DescribeUploadIncrementalInfoResponseParams instanceId string ) @@ -103,10 +106,10 @@ func dataSourceTencentCloudSqlserverUploadIncrementalInfoRead(d *schema.Resource paramMap["IncrementalMigrationId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSqlserverUploadIncrementalInfoByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } uploadIncrementalInfo = result @@ -152,7 +155,7 @@ func dataSourceTencentCloudSqlserverUploadIncrementalInfoRead(d *schema.Resource 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/sqlserver/data_source_tc_sqlserver_upload_incremental_info_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_incremental_info_test.go new file mode 100644 index 0000000000..61c5281ba9 --- /dev/null +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_upload_incremental_info_test.go @@ -0,0 +1,35 @@ +package sqlserver_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSqlserverUploadIncrementalInfoDataSource_basic -v +func TestAccTencentCloudSqlserverUploadIncrementalInfoDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckSqlserverIncreBackupMigrationDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverUploadIncrementalInfoDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_upload_incremental_info.example")), + }, + }, + }) +} + +const testAccSqlserverUploadIncrementalInfoDataSource = ` +data "tencentcloud_sqlserver_upload_incremental_info" "example" { + instance_id = "mssql-4tgeyeeh" + backup_migration_id = "mssql-backup-migration-83t5u3tv" + incremental_migration_id = "mssql-incremental-migration-h36gkdxn" +} +` diff --git a/tencentcloud/data_source_tc_sqlserver_zone_config.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config.go similarity index 90% rename from tencentcloud/data_source_tc_sqlserver_zone_config.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config.go index 4921854e0d..30ba41f4f5 100644 --- a/tencentcloud/data_source_tc_sqlserver_zone_config.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config.go @@ -1,14 +1,16 @@ -package tencentcloud +package sqlserver import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentSqlserverZoneConfig() *schema.Resource { +func DataSourceTencentCloudSqlserverZoneConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentSqlserverZoneConfigRead, Schema: map[string]*schema.Schema{ @@ -100,12 +102,12 @@ func dataSourceTencentSqlserverZoneConfig() *schema.Resource { } func dataSourceTencentSqlserverZoneConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencent_sqlserver_zone_config.read")() + defer tccommon.LogElapsed("data_source.tencent_sqlserver_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) - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} // get zoneinfo zoneInfoList, err := sqlserverService.DescribeZones(ctx) @@ -158,7 +160,7 @@ func dataSourceTencentSqlserverZoneConfigRead(d *schema.ResourceData, meta inter d.SetId("zone_config") if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), zoneList); err != nil { + if err := tccommon.WriteToFile(output.(string), zoneList); 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_sqlserver_zone_config_test.go b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config_test.go similarity index 87% rename from tencentcloud/data_source_tc_sqlserver_zone_config_test.go rename to tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config_test.go index fbd7cdee22..52b86f4349 100644 --- a/tencentcloud/data_source_tc_sqlserver_zone_config_test.go +++ b/tencentcloud/services/sqlserver/data_source_tc_sqlserver_zone_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 @@ import ( func TestAccDataSourceTencentCloudSqlserverZoneConfig_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: TestAccDataSourceTencentCloudSqlserverZoneConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_zone_config.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sqlserver_zone_config.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.availability_zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.zone_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_zone_config.foo", "zone_list.0.specinfo_list.0.spec_id"), diff --git a/tencentcloud/extension_sqlserver.go b/tencentcloud/services/sqlserver/extension_sqlserver.go similarity index 99% rename from tencentcloud/extension_sqlserver.go rename to tencentcloud/services/sqlserver/extension_sqlserver.go index b3dba048da..c4e31c11ec 100644 --- a/tencentcloud/extension_sqlserver.go +++ b/tencentcloud/services/sqlserver/extension_sqlserver.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver const ( SQLSERVER_CHARGE_TYPE_PREPAID = "PREPAID" diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_account.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account.go new file mode 100644 index 0000000000..7b8176b913 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account.go @@ -0,0 +1,280 @@ +package sqlserver + +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 ResourceTencentCloudSqlserverAccount() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverAccountCreate, + Read: resourceTencentCloudSqlserverAccountRead, + Update: resourceTencentCloudSqlserverAccountUpdate, + Delete: resourceTencentCLoudSqlserverAccountDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: "Name of the SQL Server account.", + }, + "password": { + Type: schema.TypeString, + Required: true, + Sensitive: true, + Description: "Password of the SQL Server account.", + }, + "is_admin": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Indicate that the account is root account or not.", + }, + "remark": { + Type: schema.TypeString, + Optional: true, + Default: "", + Description: "Remark of the SQL Server account.", + }, + "instance_id": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Instance ID that the account belongs to.", + }, + //computed + "status": { + Type: schema.TypeInt, + Computed: true, + Description: "Status of the SQL Server account. Valid values: 1, 2, 3, 4. 1 for creating, 2 for running, 3 for modifying, 4 for resetting password, -1 for deleting.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the SQL Server account.", + }, + "update_time": { + Type: schema.TypeString, + Computed: true, + Description: "Last updated time of the SQL Server account.", + }, + }, + } +} + +func resourceTencentCloudSqlserverAccountCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + name = d.Get("name").(string) + password = d.Get("password").(string) + remark = d.Get("remark").(string) + isAdmin = d.Get("is_admin").(bool) + instanceId = d.Get("instance_id").(string) + ) + + var outErr, inErr error + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.CreateSqlserverAccount(ctx, instanceId, name, password, remark, isAdmin) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(instanceId + tccommon.FILED_SP + name) + + return resourceTencentCloudSqlserverAccountRead(d, meta) +} + +func resourceTencentCloudSqlserverAccountUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 2 { + return fmt.Errorf("invalid SQL Server account id %s", id) + } + instanceId := idStrs[0] + name := idStrs[1] + d.Partial(true) + + var outErr, inErr error + + //update is_admin + if d.HasChange("is_admin") { + return fmt.Errorf("is_admin is not allowed to change") + } + + //update password + if d.HasChange("password") { + password := d.Get("password").(string) + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.ResetSqlserverAccountPassword(ctx, instanceId, name, password) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + } + + //update remark + if d.HasChange("remark") { + remark := d.Get("remark").(string) + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.ModifySqlserverAccountRemark(ctx, instanceId, name, remark) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + } + + d.Partial(false) + + return resourceTencentCloudSqlserverAccountRead(d, meta) +} + +func resourceTencentCloudSqlserverAccountRead(d *schema.ResourceData, meta interface{}) error { + + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 2 { + return fmt.Errorf("invalid SQL Server account id %s", id) + } + instanceId := idStrs[0] + name := idStrs[1] + + var outErr, inErr error + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + account, has, outErr := sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + account, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("name", account.Name) + if *account.Remark == "--" { + _ = d.Set("remark", "") + } else { + _ = d.Set("remark", account.Remark) + } + _ = d.Set("create_time", account.CreateTime) + _ = d.Set("update_time", account.UpdateTime) + _ = d.Set("status", account.Status) + + return nil +} + +func resourceTencentCLoudSqlserverAccountDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 2 { + return fmt.Errorf("invalid SQL Server account id %s", id) + } + instanceId := idStrs[0] + name := idStrs[1] + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var outErr, inErr error + var has bool + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + if !has { + return nil + } + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.DeleteSqlserverAccount(ctx, instanceId, name) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, name) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + inErr = fmt.Errorf("delete SQL Server account %s fail, account still exists from SDK DescribeSqlserverAccountById", id) + return resource.RetryableError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + return nil +} diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment.go new file mode 100644 index 0000000000..3e7ea1fcd7 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment.go @@ -0,0 +1,259 @@ +package sqlserver + +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 ResourceTencentCloudSqlserverAccountDBAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverAccountDBAttachmentCreate, + Read: resourceTencentCloudSqlserverAccountDBAttachmentRead, + Update: resourceTencentCloudSqlserverAccountDBAttachmentUpdate, + Delete: resourceTencentCLoudSqlserverAccountDBAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "SQL Server instance ID that the account belongs to.", + }, + "account_name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "SQL Server account name.", + }, + "db_name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "SQL Server DB name.", + }, + "privilege": { + Type: schema.TypeString, + Required: true, + Description: "Privilege of the account on DB. Valid values: `ReadOnly`, `ReadWrite`.", + }, + }, + } +} + +func resourceTencentCloudSqlserverAccountDBAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account_db_attachment.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + accountName = d.Get("account_name").(string) + dbName = d.Get("db_name").(string) + instanceId = d.Get("instance_id").(string) + privilege = d.Get("privilege").(string) + ) + + var outErr, inErr error + + //check account exists + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, has, inErr := sqlserverService.DescribeSqlserverAccountById(ctx, instanceId, accountName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if !has { + return resource.NonRetryableError(fmt.Errorf(" SQL Server account %s, instance ID %s is not exist", accountName, instanceId)) + } + return nil + }) + if outErr != nil { + return outErr + } + + //check db exists + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, has, inErr := sqlserverService.DescribeDBDetailsById(ctx, instanceId+tccommon.FILED_SP+dbName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if !has { + return resource.NonRetryableError(fmt.Errorf(" SQL Server DB %s, instance ID %s is not exist", dbName, instanceId)) + } + return nil + }) + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(instanceId + tccommon.FILED_SP + accountName + tccommon.FILED_SP + dbName) + + return resourceTencentCloudSqlserverAccountDBAttachmentRead(d, meta) +} + +func resourceTencentCloudSqlserverAccountDBAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account_db_attachment.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 3 { + return fmt.Errorf("invalid SQL Server account DB attachment %s", id) + } + instanceId := idStrs[0] + accountName := idStrs[1] + dbName := idStrs[2] + + var outErr, inErr error + + //update privilege + if d.HasChange("privilege") { + privilege := d.Get("privilege").(string) + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudSqlserverAccountDBAttachmentRead(d, meta) +} + +func resourceTencentCloudSqlserverAccountDBAttachmentRead(d *schema.ResourceData, meta interface{}) error { + + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account_db_attachment.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 3 { + return fmt.Errorf("invalid SQL Server account DB attachment ID %s", id) + } + instanceId := idStrs[0] + accountName := idStrs[1] + dbName := idStrs[2] + + var outErr, inErr error + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + attachment, has, outErr := sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) + if outErr != nil { + inErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + attachment, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + + if !has { + d.SetId("") + return nil + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("account_name", accountName) + _ = d.Set("db_name", dbName) + _ = d.Set("privilege", attachment["privilege"]) + + return nil +} + +func resourceTencentCLoudSqlserverAccountDBAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_account_db_attachment.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + idStrs := strings.Split(id, tccommon.FILED_SP) + if len(idStrs) != 3 { + return fmt.Errorf("invalid SQL Server account DB attachment id %s", id) + } + instanceId := idStrs[0] + accountName := idStrs[1] + dbName := idStrs[2] + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var outErr, inErr error + var has bool + privilege := "Delete" + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + if !has { + return nil + } + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = sqlserverService.ModifyAccountDBAttachment(ctx, instanceId, accountName, dbName, privilege) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = sqlserverService.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + inErr = fmt.Errorf("delete SQL Server account DB attachment %s fail, account still exists from SDK DescribeSqlserverAccountDBAttachmentById", id) + return resource.RetryableError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_account_db_attachment_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment_test.go similarity index 78% rename from tencentcloud/resource_tc_sqlserver_account_db_attachment_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment_test.go index 7cbb467099..28d1538998 100644 --- a/tencentcloud/resource_tc_sqlserver_account_db_attachment_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_db_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,31 +22,31 @@ func init() { resource.AddTestSweepers(testSqlserverAccountDBAttachmentResourceName, &resource.Sweeper{ Name: testSqlserverAccountDBAttachmentResourceName, F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SqlserverService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcsqlserver.NewSqlserverService(client) - db, err := service.DescribeSqlserverInstances(ctx, "", defaultSQLServerName, -1, "", "", -1) + db, err := service.DescribeSqlserverInstances(ctx, "", tcacctest.DefaultSQLServerName, -1, "", "", -1) if err != nil { return err } if len(db) == 0 { - return fmt.Errorf("%s not exists", defaultSQLServerName) + return fmt.Errorf("%s not exists", tcacctest.DefaultSQLServerName) } instanceId := *db[0].InstanceId - records, err := service.DescribeAccountDBAttachments(ctx, instanceId, defaultSQLServerAccount, defaultSQLServerDB) + records, err := service.DescribeAccountDBAttachments(ctx, instanceId, tcacctest.DefaultSQLServerAccount, tcacctest.DefaultSQLServerDB) if err != nil { return err } if len(records) > 0 { - err = service.ModifyAccountDBAttachment(ctx, instanceId, defaultSQLServerAccount, defaultSQLServerDB, "Delete") + err = service.ModifyAccountDBAttachment(ctx, instanceId, tcacctest.DefaultSQLServerAccount, tcacctest.DefaultSQLServerDB, "Delete") } if err != nil { @@ -57,8 +61,8 @@ func init() { func TestAccTencentCloudSqlserverAccountDBAttachmentResource(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: testAccCheckSqlserverAccountDBAttachmentDestroy, Steps: []resource.TestStep{ { @@ -95,11 +99,11 @@ func testAccCheckSqlserverAccountDBAttachmentDestroy(s *terraform.State) error { if rs.Type != testSqlserverAccountDBAttachmentResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := rs.Primary.ID - idStrs := strings.Split(id, FILED_SP) + idStrs := strings.Split(id, tccommon.FILED_SP) if len(idStrs) != 3 { return fmt.Errorf("invalid SQL server account id %s", id) } @@ -107,7 +111,7 @@ func testAccCheckSqlserverAccountDBAttachmentDestroy(s *terraform.State) error { accountName := idStrs[1] dbName := idStrs[2] - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) if err != nil { @@ -128,11 +132,11 @@ func testAccCheckSqlserverAccountDBAttachmentExists(n string) resource.TestCheck 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) id := rs.Primary.ID - idStrs := strings.Split(id, FILED_SP) + idStrs := strings.Split(id, tccommon.FILED_SP) if len(idStrs) != 3 { return fmt.Errorf("invalid SQL server account id %s", id) } @@ -140,7 +144,7 @@ func testAccCheckSqlserverAccountDBAttachmentExists(n string) resource.TestCheck accountName := idStrs[1] dbName := idStrs[2] - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeAccountDBAttachmentById(ctx, instanceId, accountName, dbName) if err != nil { @@ -157,7 +161,7 @@ func testAccCheckSqlserverAccountDBAttachmentExists(n string) resource.TestCheck } } -const testAccSqlserverAccountDBAttachment string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverAccountDBAttachment string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -205,7 +209,7 @@ resource "tencentcloud_sqlserver_account_db_attachment" "example" { } ` -const testAccSqlserverAccountDBAttachmentUpdate string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverAccountDBAttachmentUpdate string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_account_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_test.go similarity index 79% rename from tencentcloud/resource_tc_sqlserver_account_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_account_test.go index 9ba1b90a71..1e886c8cc0 100644 --- a/tencentcloud/resource_tc_sqlserver_account_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_account_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -19,21 +23,21 @@ func init() { resource.AddTestSweepers("tencentcloud_sqlserver_account", &resource.Sweeper{ Name: "tencentcloud_sqlserver_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 := SqlserverService{client} + service := svcsqlserver.NewSqlserverService(client) - db, err := service.DescribeSqlserverInstances(ctx, "", defaultSQLServerName, -1, "", "", -1) + db, err := service.DescribeSqlserverInstances(ctx, "", tcacctest.DefaultSQLServerName, -1, "", "", -1) if err != nil { return err } if len(db) == 0 { - return fmt.Errorf("%s not exists", defaultSQLServerName) + return fmt.Errorf("%s not exists", tcacctest.DefaultSQLServerName) } instanceId := *db[0].InstanceId @@ -47,7 +51,7 @@ func init() { if err != nil { created = time.Time{} } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } err = service.DeleteSqlserverAccount(ctx, instanceId, name) @@ -64,8 +68,8 @@ func init() { func TestAccTencentCloudSqlserverAccountResource(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: testAccCheckSqlserverAccountDestroy, Steps: []resource.TestStep{ { @@ -111,18 +115,18 @@ func testAccCheckSqlserverAccountDestroy(s *terraform.State) error { if rs.Type != testSqlserverAccountResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := rs.Primary.ID - idStrs := strings.Split(id, FILED_SP) + idStrs := strings.Split(id, tccommon.FILED_SP) if len(idStrs) != 2 { return fmt.Errorf("invalid SQL server account id %s", id) } instanceId := idStrs[0] name := idStrs[1] - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverAccountById(ctx, instanceId, name) @@ -145,18 +149,18 @@ func testAccCheckSqlserverAccountExists(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) id := rs.Primary.ID - idStrs := strings.Split(id, FILED_SP) + idStrs := strings.Split(id, tccommon.FILED_SP) if len(idStrs) != 2 { return fmt.Errorf("invalid SQL server account id %s", id) } instanceId := idStrs[0] name := idStrs[1] - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverAccountById(ctx, instanceId, name) if err != nil { @@ -173,7 +177,7 @@ func testAccCheckSqlserverAccountExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverAccount string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverAccount string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -207,7 +211,7 @@ resource "tencentcloud_sqlserver_account" "example" { } ` -const testAccSqlserverAccountUpdate string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverAccountUpdate string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_basic_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance.go similarity index 77% rename from tencentcloud/resource_tc_sqlserver_basic_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance.go index b992795d2f..2c34bf88bb 100644 --- a/tencentcloud/resource_tc_sqlserver_basic_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance.go @@ -1,16 +1,21 @@ -package tencentcloud +package sqlserver import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverBasicInstance() *schema.Resource { +func ResourceTencentCloudSqlserverBasicInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverBasicInstanceCreate, @@ -24,7 +29,7 @@ func resourceTencentCloudSqlserverBasicInstance() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the SQL Server basic instance.", }, "cpu": { @@ -45,15 +50,15 @@ func resourceTencentCloudSqlserverBasicInstance() *schema.Resource { "machine_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{CLOUD_PREMIUM, CLOUD_SSD, CLOUD_HSSD, CLOUD_BSSD}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CLOUD_PREMIUM, CLOUD_SSD, CLOUD_HSSD, CLOUD_BSSD}), Description: "The host type of the purchased instance, `CLOUD_PREMIUM` for virtual machine high-performance cloud disk, `CLOUD_SSD` for virtual machine SSD cloud disk, `CLOUD_HSSD` for virtual machine enhanced cloud disk, `CLOUD_BSSD` for virtual machine general purpose SSD cloud disk.", }, "charge_type": { Type: schema.TypeString, Optional: true, - Default: COMMON_PAYTYPE_POSTPAID, + Default: svcpostgresql.COMMON_PAYTYPE_POSTPAID, ForceNew: true, - ValidateFunc: validateAllowedStringValue([]string{COMMON_PAYTYPE_PREPAID, COMMON_PAYTYPE_POSTPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcpostgresql.COMMON_PAYTYPE_PREPAID, svcpostgresql.COMMON_PAYTYPE_POSTPAID}), Description: "Pay type of the SQL Server basic instance. For now, only `POSTPAID_BY_HOUR` is valid.", }, "vpc_id": { @@ -79,7 +84,7 @@ func resourceTencentCloudSqlserverBasicInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 1, - ValidateFunc: validateIntegerInRange(1, 48), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 48), Description: "Purchase instance period, the default value is 1, which means one month. The value does not exceed 48.", }, "security_groups": { @@ -177,14 +182,14 @@ func resourceTencentCloudSqlserverBasicInstance() *schema.Resource { } func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_basic_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_basic_instance.create")() var ( - 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() sqlserverService = SqlserverService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) region = client.Region paramMap = make(map[string]interface{}) name = d.Get("name").(string) @@ -193,7 +198,7 @@ func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, me voucherIds = make([]string, 0) weekSet = make([]int, 0) ) - if payType == COMMON_PAYTYPE_POSTPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_POSTPAID { payType = "POSTPAID" paramMap["autoRenew"] = 0 } else { @@ -252,10 +257,10 @@ func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, me var instanceId string var outErr, inErr error - outErr = resource.Retry(12*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(12*tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceId, inErr = sqlserverService.CreateSqlserverBasicInstance(ctx, paramMap, weekSet, voucherIds, securityGroups) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -266,10 +271,10 @@ func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, me d.SetId(instanceId) //set name - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -278,7 +283,7 @@ func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, me } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -287,14 +292,14 @@ func resourceTencentCloudSqlserverBasicInstanceCreate(d *schema.ResourceData, me } func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_basic_instance.read")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_basic_instance.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var outErr, inErr error instanceId := d.Id() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instance, has, outErr := sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if outErr != nil { @@ -310,10 +315,10 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta _ = d.Set("vpc_id", instance.UniqVpcId) _ = d.Set("machine_type", instance.Type) if int(*chargeType) == 1 { - _ = d.Set("charge_type", COMMON_PAYTYPE_PREPAID) + _ = d.Set("charge_type", svcpostgresql.COMMON_PAYTYPE_PREPAID) _ = d.Set("auto_renew", instance.RenewFlag) } else { - _ = d.Set("charge_type", COMMON_PAYTYPE_POSTPAID) + _ = d.Set("charge_type", svcpostgresql.COMMON_PAYTYPE_POSTPAID) _ = d.Set("auto_renew", 0) } _ = d.Set("name", instance.Name) @@ -333,10 +338,10 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta var weekSet []int var startTime string var timeSpan int - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { weekSet, startTime, timeSpan, inErr = sqlserverService.DescribeMaintenanceSpan(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -348,10 +353,10 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta _ = d.Set("maintenance_time_span", timeSpan) var securityGroup []string - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { securityGroup, inErr = sqlserverService.DescribeInstanceSecurityGroups(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -361,8 +366,8 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta } _ = d.Set("security_groups", securityGroup) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, d.Id()) if err != nil { return err @@ -372,13 +377,13 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_basic_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_basic_instance.update")() - 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() sqlserverService := SqlserverService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region payType := d.Get("charge_type").(string) @@ -396,10 +401,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me //update name if d.HasChange("name") { name := d.Get("name").(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -422,10 +427,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me voucherIds = append(voucherIds, id.(string)) } } - outErr = resource.Retry(12*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(12*tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.UpgradeSqlserverBasicInstance(ctx, instanceId, memory, storage, cpu, autoVoucher, voucherIds) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -444,10 +449,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me for _, v := range oldSet { sgId := v.(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.RemoveSecurityGroup(ctx, instanceId, sgId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -457,10 +462,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me } for _, v := range newSet { sgId := v.(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.AddSecurityGroup(ctx, instanceId, sgId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -473,10 +478,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me //update project id if d.HasChange("project_id") { projectId := d.Get("project_id").(int) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceProjectId(ctx, instanceId, projectId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -496,10 +501,10 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me } startTime := d.Get("maintenance_start_time").(string) timeSpan := d.Get("maintenance_time_span").(int) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceMaintenanceSpan(ctx, instanceId, weekSet, startTime, timeSpan) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -509,15 +514,15 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me } - if payType == COMMON_PAYTYPE_PREPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_PREPAID { if d.HasChange("auto_renew") { var renewFlag int _, newValue := d.GetChange("auto_renew") renewFlag = newValue.(int) - outErr = resource.Retry(2*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(2*tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.NewModifyDBInstanceRenewFlag(ctx, instanceId, renewFlag) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -529,9 +534,9 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me } if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -542,22 +547,22 @@ func resourceTencentCloudSqlserverBasicInstanceUpdate(d *schema.ResourceData, me } func resourceTencentCLoudSqlserverBasicInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_basic_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_basic_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() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error var has bool var instance *sqlserver.DBInstance - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, inErr = sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -574,10 +579,10 @@ func resourceTencentCLoudSqlserverBasicInstanceDelete(d *schema.ResourceData, me return fmt.Errorf("PREPAID instances are not allowed to be deleted now, please terminate them on console") } //terminate sql instance - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.TerminateSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -586,10 +591,10 @@ func resourceTencentCLoudSqlserverBasicInstanceDelete(d *schema.ResourceData, me return outErr } - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.DeleteSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -598,10 +603,10 @@ func resourceTencentCLoudSqlserverBasicInstanceDelete(d *schema.ResourceData, me return outErr } - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if has { inErr = fmt.Errorf("delete SQL Server basic instance %s fail, instance still exists from SDK DescribeSqlserverInstanceById", instanceId) diff --git a/tencentcloud/resource_tc_sqlserver_basic_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance_test.go similarity index 81% rename from tencentcloud/resource_tc_sqlserver_basic_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance_test.go index 169121cd5d..36139aa057 100644 --- a/tencentcloud/resource_tc_sqlserver_basic_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package sqlserver_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,8 +19,8 @@ var testSqlserverBasicInstanceResourceKey = testSqlserverBasicInstanceResourceNa func TestAccTencentCloudNeedFixSqlserverBasicInstanceResource(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: testAccCheckSqlserverBasicInstanceDestroy, Steps: []resource.TestStep{ { @@ -56,9 +60,9 @@ func TestAccTencentCloudNeedFixSqlserverBasicInstanceResource(t *testing.T) { } func testAccCheckSqlserverBasicInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != testSqlserverBasicInstanceResourceName { continue @@ -81,10 +85,10 @@ func testAccCheckSqlserverBasicInstanceExists(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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverInstanceById(ctx, rs.Primary.ID) if err != nil { @@ -97,7 +101,7 @@ func testAccCheckSqlserverBasicInstanceExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverBasicInstancePostpaid string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverBasicInstancePostpaid string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file.go new file mode 100644 index 0000000000..86cab8f6e9 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file.go @@ -0,0 +1,181 @@ +package sqlserver + +import ( + "context" + "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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverBusinessIntelligenceFile() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverBusinessIntelligenceFileCreate, + Read: resourceTencentCloudSqlserverBusinessIntelligenceFileRead, + Delete: resourceTencentCloudSqlserverBusinessIntelligenceFileDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "instance id.", + }, + "file_url": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Cos Url.", + }, + "file_type": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "File Type FLAT - Flat File as Data Source, SSIS - ssis project package.", + }, + "remark": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "remark.", + }, + }, + } +} + +func resourceTencentCloudSqlserverBusinessIntelligenceFileCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + CreateBIFRequest = sqlserver.NewCreateBusinessIntelligenceFileRequest() + CreateBIFResponse = sqlserver.NewCreateBusinessIntelligenceFileResponse() + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + CreateBIFRequest.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("file_url"); ok { + CreateBIFRequest.FileURL = helper.String(v.(string)) + } + + if v, ok := d.GetOk("file_type"); ok { + CreateBIFRequest.FileType = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + CreateBIFRequest.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateBusinessIntelligenceFile(CreateBIFRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, CreateBIFRequest.GetAction(), CreateBIFRequest.ToJsonString(), result.ToJsonString()) + } + + if result == nil { + e = fmt.Errorf("sqlserver CreateBusinessIntelligenceFile not exists") + return resource.NonRetryableError(e) + } + + CreateBIFResponse = result + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver businessIntelligenceFile failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{instanceId, *CreateBIFResponse.Response.FileTaskId}, tccommon.FILED_SP)) + + return resourceTencentCloudSqlserverBusinessIntelligenceFileRead(d, meta) +} + +func resourceTencentCloudSqlserverBusinessIntelligenceFileRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + + instanceId := idSplit[0] + fileName := idSplit[1] + + businessIntelligenceFile, err := service.DescribeSqlserverBusinessIntelligenceFileById(ctx, instanceId, fileName) + if err != nil { + return err + } + + if businessIntelligenceFile == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverBusinessIntelligenceFile` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if businessIntelligenceFile.InstanceId != nil { + _ = d.Set("instance_id", businessIntelligenceFile.InstanceId) + } + + if businessIntelligenceFile.FileURL != nil { + _ = d.Set("file_url", businessIntelligenceFile.FileURL) + } + + if businessIntelligenceFile.FileType != nil { + _ = d.Set("file_type", businessIntelligenceFile.FileType) + } + + if businessIntelligenceFile.Remark != nil { + _ = d.Set("remark", businessIntelligenceFile.Remark) + } + + return nil +} + +func resourceTencentCloudSqlserverBusinessIntelligenceFileDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_file.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + + instanceId := idSplit[0] + fileName := idSplit[1] + + if err := service.DeleteSqlserverBusinessIntelligenceFileById(ctx, instanceId, fileName); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_business_intelligence_file_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file_test.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_business_intelligence_file_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file_test.go index ffdea5e684..05ecaaae74 100644 --- a/tencentcloud/resource_tc_sqlserver_business_intelligence_file_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_file_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,10 +19,10 @@ func TestAccTencentCloudSqlserverBusinessIntelligenceFileResource_basic(t *testi t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverBusinessIntelligenceFileDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverBusinessIntelligenceFile, @@ -41,11 +45,11 @@ func testAccCheckSqlserverBusinessIntelligenceFileDestroy(s *terraform.State) er if rs.Type != "tencentcloud_sqlserver_business_intelligence_file" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } @@ -72,11 +76,11 @@ func testAccCheckSqlserverBusinessIntelligenceFileExists(n string) resource.Test return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } @@ -97,7 +101,7 @@ func testAccCheckSqlserverBusinessIntelligenceFileExists(n string) resource.Test } } -const testAccSqlserverBusinessIntelligenceFile = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverBusinessIntelligenceFile = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_business_intelligence_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_business_intelligence_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance.go index e94af9a4e8..fadb94a94d 100644 --- a/tencentcloud/resource_tc_sqlserver_business_intelligence_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance.go @@ -1,17 +1,20 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverBusinessIntelligenceInstance() *schema.Resource { +func ResourceTencentCloudSqlserverBusinessIntelligenceInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate, Read: resourceTencentCloudSqlserverBusinessIntelligenceInstanceRead, @@ -126,11 +129,11 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstance() *schema.Resourc } func resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) CreateDBIRequest = sqlserver.NewCreateBusinessDBInstancesRequest() DescRequest = sqlserver.NewDescribeDBInstancesRequest() ModifyRequest = sqlserver.NewModifyDBInstanceNameRequest() @@ -212,10 +215,10 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate(d *schema.R instanceName = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateBusinessDBInstances(CreateDBIRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateBusinessDBInstances(CreateDBIRequest) 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, CreateDBIRequest.GetAction(), CreateDBIRequest.ToJsonString(), result.ToJsonString()) } @@ -233,10 +236,10 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate(d *schema.R return err } - err = resource.Retry(5*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeDBInstances(DescRequest) + err = resource.Retry(5*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeDBInstances(DescRequest) 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, DescRequest.GetAction(), DescRequest.ToJsonString(), result.ToJsonString()) } @@ -272,10 +275,10 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate(d *schema.R ModifyRequest.InstanceId = &instanceId ModifyRequest.InstanceName = &instanceName - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBInstanceName(ModifyRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBInstanceName(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] ", logId, ModifyRequest.GetAction(), ModifyRequest.ToJsonString(), result.ToJsonString()) } @@ -294,13 +297,13 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceCreate(d *schema.R } func resourceTencentCloudSqlserverBusinessIntelligenceInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) @@ -410,8 +413,8 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceRead(d *schema.Res } func resourceTencentCloudSqlserverBusinessIntelligenceInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"zone", "memory", "storage", "cpu", "machine_type", "project_id", "goods_num", "subnet_id", "vpc_id", "d_b_version", "security_group_list", "weekly", "start_time", "span", "resource_tags"} @@ -422,7 +425,7 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceUpdate(d *schema.R } var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyDBInstanceNameRequest() instanceId = d.Id() ) @@ -437,10 +440,10 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceUpdate(d *schema.R return nil } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBInstanceName(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBInstanceName(request) 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()) } @@ -457,13 +460,13 @@ func resourceTencentCloudSqlserverBusinessIntelligenceInstanceUpdate(d *schema.R } func resourceTencentCloudSqlserverBusinessIntelligenceInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_business_intelligence_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) diff --git a/tencentcloud/resource_tc_sqlserver_business_intelligence_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance_test.go similarity index 80% rename from tencentcloud/resource_tc_sqlserver_business_intelligence_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance_test.go index cbb3846fc0..adb3f5aea6 100644 --- a/tencentcloud/resource_tc_sqlserver_business_intelligence_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_business_intelligence_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package sqlserver_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,10 +18,10 @@ func TestAccTencentCloudSqlserverBusinessIntelligenceInstanceResource_basic(t *t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverBusinessIntelligenceInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverBusinessIntelligenceInstance, @@ -47,9 +51,9 @@ func testAccCheckSqlserverBusinessIntelligenceInstanceDestroy(s *terraform.State if rs.Type != "tencentcloud_sqlserver_business_intelligence_instance" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := rs.Primary.ID result, err := service.DescribeSqlserverBusinessIntelligenceInstanceById(ctx, instanceId) @@ -71,9 +75,9 @@ func testAccCheckSqlserverBusinessIntelligenceInstanceExists(n string) resource. return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := rs.Primary.ID result, err := service.DescribeSqlserverBusinessIntelligenceInstanceById(ctx, instanceId) @@ -89,7 +93,7 @@ func testAccCheckSqlserverBusinessIntelligenceInstanceExists(n string) resource. } } -const testAccSqlserverBusinessIntelligenceInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverBusinessIntelligenceInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion.go new file mode 100644 index 0000000000..9cf7867790 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion.go @@ -0,0 +1,115 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverCompleteExpansion() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverCompleteExpansionCreate, + Read: resourceTencentCloudSqlserverCompleteExpansionRead, + Delete: resourceTencentCloudSqlserverCompleteExpansionDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ID of imported target instance.", + }, + }, + } +} + +func resourceTencentCloudSqlserverCompleteExpansionCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_complete_expansion.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewCompleteExpansionRequest() + response = sqlserver.NewCompleteExpansionResponse() + flowRequest = sqlserver.NewDescribeFlowStatusRequest() + instanceId string + flowId int64 + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CompleteExpansion(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()) + } + + if result == nil { + e = fmt.Errorf("sqlserver complete expansion %s not exists", instanceId) + return resource.NonRetryableError(e) + } + + response = result + flowId = int64(*response.Response.FlowId) + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s operate sqlserver completeExpansion failed, reason:%+v", logId, err) + return err + } + + flowRequest.FlowId = &flowId + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) + if e != nil { + return tccommon.RetryError(e) + } + + if *result.Response.Status == SQLSERVER_TASK_SUCCESS { + return nil + } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver completeExpansion status is running")) + } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { + return resource.NonRetryableError(fmt.Errorf("sqlserver completeExpansion status is fail")) + } else { + e = fmt.Errorf("sqlserver completeExpansion status illegal") + return resource.NonRetryableError(e) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver completeExpansion failed, reason:%+v", logId, err) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverCompleteExpansionRead(d, meta) +} + +func resourceTencentCloudSqlserverCompleteExpansionRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_complete_expansion.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSqlserverCompleteExpansionDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_complete_expansion.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_complete_expansion_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_complete_expansion_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion_test.go index a8c0f9f8d7..b98a1f0f7c 100644 --- a/tencentcloud/resource_tc_sqlserver_complete_expansion_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_complete_expansion_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,10 +14,10 @@ func TestAccTencentCloudSqlserverCompleteExpansionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccNewSqlserverInstance, @@ -35,7 +37,7 @@ func TestAccTencentCloudSqlserverCompleteExpansionResource_basic(t *testing.T) { }) } -const testAccNewSqlserverInstance string = defaultVpcVariable + defaultSecurityGroupData + ` +const testAccNewSqlserverInstance string = tcacctest.DefaultVpcVariable + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -59,7 +61,7 @@ resource "tencentcloud_sqlserver_instance" "example" { } ` -const testAccUpdateNewSqlserverInstance string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccUpdateNewSqlserverInstance string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_config_backup_strategy.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy.go similarity index 87% rename from tencentcloud/resource_tc_sqlserver_config_backup_strategy.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy.go index e0e5a7d89f..56c549998b 100644 --- a/tencentcloud/resource_tc_sqlserver_config_backup_strategy.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy.go @@ -1,16 +1,19 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverConfigBackupStrategy() *schema.Resource { +func ResourceTencentCloudSqlserverConfigBackupStrategy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverConfigBackupStrategyCreate, Read: resourceTencentCloudSqlserverConfigBackupStrategyRead, @@ -99,8 +102,8 @@ func resourceTencentCloudSqlserverConfigBackupStrategy() *schema.Resource { } func resourceTencentCloudSqlserverConfigBackupStrategyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -113,14 +116,14 @@ func resourceTencentCloudSqlserverConfigBackupStrategyCreate(d *schema.ResourceD } func resourceTencentCloudSqlserverConfigBackupStrategyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_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 := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -187,10 +190,10 @@ func resourceTencentCloudSqlserverConfigBackupStrategyRead(d *schema.ResourceDat } func resourceTencentCloudSqlserverConfigBackupStrategyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := sqlserver.NewModifyBackupStrategyRequest() @@ -257,10 +260,10 @@ func resourceTencentCloudSqlserverConfigBackupStrategyUpdate(d *schema.ResourceD request.RegularBackupStartTime = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyBackupStrategy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyBackupStrategy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -276,8 +279,8 @@ func resourceTencentCloudSqlserverConfigBackupStrategyUpdate(d *schema.ResourceD } func resourceTencentCloudSqlserverConfigBackupStrategyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_backup_strategy.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_config_backup_strategy_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy_test.go similarity index 93% rename from tencentcloud/resource_tc_sqlserver_config_backup_strategy_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy_test.go index 411c230f80..51df6fd9a7 100644 --- a/tencentcloud/resource_tc_sqlserver_config_backup_strategy_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_backup_strategy_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package sqlserver_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -14,9 +16,9 @@ func TestAccTencentCloudSqlserverConfigBackupStrategyResource_basic(t *testing.T startTime := time.Now().In(loc).Format("2006-01-02") resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverConfigBackupStrategy_daily, @@ -84,7 +86,7 @@ func TestAccTencentCloudSqlserverConfigBackupStrategyResource_basic(t *testing.T }) } -const testAccSqlserverConfigBackupStrategy_daily = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigBackupStrategy_daily = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -125,7 +127,7 @@ resource "tencentcloud_sqlserver_config_backup_strategy" "example" { } ` -const testAccSqlserverConfigBackupStrategy_weekly = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigBackupStrategy_weekly = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -165,7 +167,7 @@ resource "tencentcloud_sqlserver_config_backup_strategy" "example" { } ` -const testAccSqlserverConfigBackupStrategy_regular_months = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigBackupStrategy_regular_months = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -205,7 +207,7 @@ resource "tencentcloud_sqlserver_config_backup_strategy" "example" { } ` -const testAccSqlserverConfigBackupStrategy_regular_yearly = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigBackupStrategy_regular_yearly = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc.go new file mode 100644 index 0000000000..26bbd714e8 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc.go @@ -0,0 +1,203 @@ +package sqlserver + +import ( + "context" + "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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverConfigDatabaseCDC() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverConfigDatabaseCDCCreate, + Read: resourceTencentCloudSqlserverConfigDatabaseCDCRead, + Update: resourceTencentCloudSqlserverConfigDatabaseCDCUpdate, + Delete: resourceTencentCloudSqlserverConfigDatabaseCDCDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "db_name": { + Required: true, + Type: schema.TypeString, + Description: "database name.", + }, + "modify_type": { + Required: true, + Type: schema.TypeString, + Description: "Enable or disable CDC. Valid values: enable, disable.", + }, + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverConfigDatabaseCDCCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_cdc.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + instanceId string + dbName string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("db_name"); ok { + dbName = v.(string) + } + + d.SetId(strings.Join([]string{instanceId, dbName}, tccommon.FILED_SP)) + + return resourceTencentCloudSqlserverConfigDatabaseCDCUpdate(d, meta) +} + +func resourceTencentCloudSqlserverConfigDatabaseCDCRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_cdc.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + Name string + modifyType string + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + instanceId := idSplit[0] + dbName := idSplit[1] + + configDatabaseCDC, err := service.DescribeSqlserverConfigDatabaseCDCById(ctx, instanceId) + if err != nil { + return err + } + + if configDatabaseCDC == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverConfigDatabaseCDC` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + for _, i := range configDatabaseCDC { + if *i.Name == dbName { + if *i.IsCdcEnabled == "0" { + modifyType = "disable" + } else { + modifyType = "enable" + } + Name = *i.Name + break + } + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("db_name", Name) + _ = d.Set("modify_type", modifyType) + + return nil +} + +func resourceTencentCloudSqlserverConfigDatabaseCDCUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_cdc.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewModifyDatabaseCDCRequest() + flowRequest = sqlserver.NewDescribeFlowStatusRequest() + flowId int64 + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + instanceId := idSplit[0] + dbName := idSplit[1] + + if v, ok := d.GetOk("modify_type"); ok { + request.ModifyType = helper.String(v.(string)) + } + + request.InstanceId = &instanceId + dbNames := make([]*string, 0) + dbNames = append(dbNames, &dbName) + request.DBNames = dbNames + + if v, ok := d.GetOk("modify_type"); ok { + request.ModifyType = helper.String(v.(string)) + } + + request.InstanceId = &instanceId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDatabaseCDC(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()) + } + + if result == nil { + e = fmt.Errorf("sqlserver configDatabaseCDC not exists") + return resource.NonRetryableError(e) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver configDatabaseCDC failed, reason:%+v", logId, err) + return err + } + + flowRequest.FlowId = &flowId + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) + if e != nil { + return tccommon.RetryError(e) + } + if *result.Response.Status == SQLSERVER_TASK_SUCCESS { + return nil + } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver configDatabaseCDC status is running")) + } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { + return resource.NonRetryableError(fmt.Errorf("sqlserver configDatabaseCDC status is fail")) + } else { + e = fmt.Errorf("sqlserver configDatabaseCDC status illegal") + return resource.NonRetryableError(e) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver configDatabaseCDC failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverConfigDatabaseCDCRead(d, meta) +} + +func resourceTencentCloudSqlserverConfigDatabaseCDCDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_cdc.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_config_database_cdc_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_config_database_cdc_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc_test.go index 6f1434cb37..bcb0772e23 100644 --- a/tencentcloud/resource_tc_sqlserver_config_database_cdc_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_cdc_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverConfigDatabaseCDCResource_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: testAccSqlserverConfigDatabaseCDC, @@ -30,7 +32,7 @@ func TestAccTencentCloudSqlserverConfigDatabaseCDCResource_basic(t *testing.T) { }) } -const testAccSqlserverConfigDatabaseCDC = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigDatabaseCDC = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_config_database_ct.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_config_database_ct.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct.go index 9370cd1e15..98ba476bf4 100644 --- a/tencentcloud/resource_tc_sqlserver_config_database_ct.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverConfigDatabaseCT() *schema.Resource { +func ResourceTencentCloudSqlserverConfigDatabaseCT() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverConfigDatabaseCTCreate, Read: resourceTencentCloudSqlserverConfigDatabaseCTRead, @@ -49,8 +52,8 @@ func resourceTencentCloudSqlserverConfigDatabaseCT() *schema.Resource { } func resourceTencentCloudSqlserverConfigDatabaseCTCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_c_t.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_c_t.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -65,26 +68,26 @@ func resourceTencentCloudSqlserverConfigDatabaseCTCreate(d *schema.ResourceData, dbName = v.(string) } - d.SetId(strings.Join([]string{instanceId, dbName}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, dbName}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverConfigDatabaseCTUpdate(d, meta) } func resourceTencentCloudSqlserverConfigDatabaseCTRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_c_t.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_c_t.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} Name string modifyType string retentionPeriod string changeRetentionDay int ) - 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) } @@ -125,17 +128,17 @@ func resourceTencentCloudSqlserverConfigDatabaseCTRead(d *schema.ResourceData, m } func resourceTencentCloudSqlserverConfigDatabaseCTUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_c_t.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_c_t.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyDatabaseCTRequest() flowRequest = sqlserver.NewDescribeFlowStatusRequest() 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) } @@ -155,10 +158,10 @@ func resourceTencentCloudSqlserverConfigDatabaseCTUpdate(d *schema.ResourceData, dbNames = append(dbNames, &dbName) request.DBNames = dbNames - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDatabaseCT(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDatabaseCT(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudSqlserverConfigDatabaseCTUpdate(d *schema.ResourceData, } flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.Response.Status == SQLSERVER_TASK_SUCCESS { return nil @@ -204,8 +207,8 @@ func resourceTencentCloudSqlserverConfigDatabaseCTUpdate(d *schema.ResourceData, } func resourceTencentCloudSqlserverConfigDatabaseCTDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_database_c_t.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_c_t.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_config_database_ct_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_config_database_ct_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct_test.go index dc0680beeb..2827660d96 100644 --- a/tencentcloud/resource_tc_sqlserver_config_database_ct_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_ct_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverConfigDatabaseCTResource_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: testAccSqlserverConfigDatabaseCT, @@ -28,7 +30,7 @@ func TestAccTencentCloudSqlserverConfigDatabaseCTResource_basic(t *testing.T) { }) } -const testAccSqlserverConfigDatabaseCT = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigDatabaseCT = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf.go new file mode 100644 index 0000000000..ebd6297fc9 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf.go @@ -0,0 +1,181 @@ +package sqlserver + +import ( + "context" + "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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" +) + +func ResourceTencentCloudSqlserverConfigDatabaseMdf() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverConfigDatabaseMdfCreate, + Read: resourceTencentCloudSqlserverConfigDatabaseMdfRead, + Update: resourceTencentCloudSqlserverConfigDatabaseMdfUpdate, + Delete: resourceTencentCloudSqlserverConfigDatabaseMdfDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "db_name": { + Required: true, + Type: schema.TypeString, + Description: "Array of database names.", + }, + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverConfigDatabaseMdfCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_mdf.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + instanceId string + dbName string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("db_name"); ok { + dbName = v.(string) + } + + d.SetId(strings.Join([]string{instanceId, dbName}, tccommon.FILED_SP)) + + return resourceTencentCloudSqlserverConfigDatabaseMdfUpdate(d, meta) +} + +func resourceTencentCloudSqlserverConfigDatabaseMdfRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_mdf.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + Name string + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + instanceId := idSplit[0] + dbName := idSplit[1] + + configDatabaseMdf, err := service.DescribeSqlserverConfigDatabaseMdfById(ctx, instanceId) + if err != nil { + return err + } + + if configDatabaseMdf == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverConfigDatabaseMdf` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + for _, i := range configDatabaseMdf { + if *i.Name == dbName { + Name = *i.Name + break + } + } + + _ = d.Set("instance_id", instanceId) + _ = d.Set("db_name", Name) + + return nil +} + +func resourceTencentCloudSqlserverConfigDatabaseMdfUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_mdf.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewModifyDatabaseMdfRequest() + flowRequest = sqlserver.NewDescribeFlowStatusRequest() + flowId int64 + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + instanceId := idSplit[0] + dbName := idSplit[1] + + request.InstanceId = &instanceId + dbNames := make([]*string, 0) + dbNames = append(dbNames, &dbName) + request.DBNames = dbNames + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDatabaseMdf(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()) + } + + if result == nil { + e = fmt.Errorf("sqlserver configDatabaseMdf not exists") + return resource.NonRetryableError(e) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver configDatabaseMdf failed, reason:%+v", logId, err) + return err + } + + flowRequest.FlowId = &flowId + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) + if e != nil { + return tccommon.RetryError(e) + } + + if *result.Response.Status == SQLSERVER_TASK_SUCCESS { + return nil + } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver configDatabaseMdf status is running")) + } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { + return resource.NonRetryableError(fmt.Errorf("sqlserver configDatabaseMdf status is fail")) + } else { + e = fmt.Errorf("sqlserver configDatabaseMdf status illegal") + return resource.NonRetryableError(e) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver configDatabaseMdf failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverConfigDatabaseMdfRead(d, meta) +} + +func resourceTencentCloudSqlserverConfigDatabaseMdfDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_database_mdf.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_config_database_mdf_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_config_database_mdf_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf_test.go index 60db7065e9..871f5565de 100644 --- a/tencentcloud/resource_tc_sqlserver_config_database_mdf_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_database_mdf_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverConfigDatabaseMdfResource_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: testAccSqlserverConfigDatabaseMdf, @@ -28,7 +30,7 @@ func TestAccTencentCloudSqlserverConfigDatabaseMdfResource_basic(t *testing.T) { }) } -const testAccSqlserverConfigDatabaseMdf = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigDatabaseMdf = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_param.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param.go similarity index 78% rename from tencentcloud/resource_tc_sqlserver_config_instance_param.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param.go index 6c64260b60..49d80fe014 100644 --- a/tencentcloud/resource_tc_sqlserver_config_instance_param.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverConfigInstanceParam() *schema.Resource { +func ResourceTencentCloudSqlserverConfigInstanceParam() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverConfigInstanceParamCreate, Read: resourceTencentCloudSqlserverConfigInstanceParamRead, @@ -51,8 +54,8 @@ func resourceTencentCloudSqlserverConfigInstanceParam() *schema.Resource { } func resourceTencentCloudSqlserverConfigInstanceParamCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_param.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_param.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string @@ -73,22 +76,22 @@ func resourceTencentCloudSqlserverConfigInstanceParamCreate(d *schema.ResourceDa } } - d.SetId(strings.Join(params, FILED_SP)) + d.SetId(strings.Join(params, tccommon.FILED_SP)) return resourceTencentCloudSqlserverConfigInstanceParamUpdate(d, meta) } func resourceTencentCloudSqlserverConfigInstanceParamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_param.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_param.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) == 1 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -131,15 +134,15 @@ func resourceTencentCloudSqlserverConfigInstanceParamRead(d *schema.ResourceData } func resourceTencentCloudSqlserverConfigInstanceParamUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_param.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_param.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyInstanceParamRequest() ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) == 1 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -161,10 +164,10 @@ func resourceTencentCloudSqlserverConfigInstanceParamUpdate(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyInstanceParam(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().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()) } @@ -186,8 +189,8 @@ func resourceTencentCloudSqlserverConfigInstanceParamUpdate(d *schema.ResourceDa } func resourceTencentCloudSqlserverConfigInstanceParamDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_param.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_param.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_param_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param_test.go similarity index 85% rename from tencentcloud/resource_tc_sqlserver_config_instance_param_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param_test.go index 1abb36069e..680a2aa5c7 100644 --- a/tencentcloud/resource_tc_sqlserver_config_instance_param_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_param_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,10 +13,10 @@ func TestAccTencentCloudSqlserverConfigInstanceParamResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverConfigInstanceParam, @@ -31,7 +33,7 @@ func TestAccTencentCloudSqlserverConfigInstanceParamResource_basic(t *testing.T) }) } -const testAccSqlserverConfigInstanceParam = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigInstanceParam = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_ro_group.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group.go similarity index 85% rename from tencentcloud/resource_tc_sqlserver_config_instance_ro_group.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group.go index d29cb46d70..c1d097cc90 100644 --- a/tencentcloud/resource_tc_sqlserver_config_instance_ro_group.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverConfigInstanceRoGroup() *schema.Resource { +func ResourceTencentCloudSqlserverConfigInstanceRoGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverConfigInstanceRoGroupCreate, Read: resourceTencentCloudSqlserverConfigInstanceRoGroupRead, @@ -87,8 +90,8 @@ func resourceTencentCloudSqlserverConfigInstanceRoGroup() *schema.Resource { } func resourceTencentCloudSqlserverConfigInstanceRoGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -117,22 +120,22 @@ func resourceTencentCloudSqlserverConfigInstanceRoGroupCreate(d *schema.Resource balanceWeight = "0" } - d.SetId(strings.Join([]string{instanceId, readOnlyGroupId, autoWeight, balanceWeight}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, readOnlyGroupId, autoWeight, balanceWeight}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverConfigInstanceRoGroupUpdate(d, meta) } func resourceTencentCloudSqlserverConfigInstanceRoGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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, id is %s", d.Id()) } @@ -207,15 +210,15 @@ func resourceTencentCloudSqlserverConfigInstanceRoGroupRead(d *schema.ResourceDa } func resourceTencentCloudSqlserverConfigInstanceRoGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyReadOnlyGroupDetailsRequest() ) - 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, id is %s", d.Id()) } @@ -263,10 +266,10 @@ func resourceTencentCloudSqlserverConfigInstanceRoGroupUpdate(d *schema.Resource request.BalanceWeight = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyReadOnlyGroupDetails(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyReadOnlyGroupDetails(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -288,8 +291,8 @@ func resourceTencentCloudSqlserverConfigInstanceRoGroupUpdate(d *schema.Resource } func resourceTencentCloudSqlserverConfigInstanceRoGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_ro_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_ro_group_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group_test.go similarity index 89% rename from tencentcloud/resource_tc_sqlserver_config_instance_ro_group_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group_test.go index fcdebc4bbe..39eb716735 100644 --- a/tencentcloud/resource_tc_sqlserver_config_instance_ro_group_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_ro_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverConfigInstanceRoGroupResource_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: testAccSqlserverConfigInstanceRoGroup, @@ -30,7 +32,7 @@ func TestAccTencentCloudSqlserverConfigInstanceRoGroupResource_basic(t *testing. }) } -const testAccSqlserverConfigInstanceRoGroup = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigInstanceRoGroup = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.go new file mode 100644 index 0000000000..0390740b40 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.go @@ -0,0 +1,131 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverConfigInstanceSecurityGroups() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsCreate, + Read: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead, + Update: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate, + Delete: resourceTencentCloudSqlserverConfigInstanceSecurityGroupsDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + "security_group_id_set": { + Required: true, + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Description: "A list of security group IDs to modify, an array of one or more security group IDs.", + }, + }, + } +} + +func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate(d, meta) +} + +func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + configInstanceSecurityGroups, err := service.DescribeSqlserverConfigInstanceSecurityGroupsById(ctx, instanceId) + if err != nil { + return err + } + + if configInstanceSecurityGroups == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverConfigInstanceSecurityGroups` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + sgList := []interface{}{} + for _, sg := range configInstanceSecurityGroups { + sgList = append(sgList, sg.SecurityGroupId) + } + _ = d.Set("security_group_id_set", sgList) + + return nil +} + +func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewModifyDBInstanceSecurityGroupsRequest() + instanceId = d.Id() + ) + + if v, ok := d.GetOk("security_group_id_set"); ok { + for _, item := range v.(*schema.Set).List() { + request.SecurityGroupIdSet = append(request.SecurityGroupIdSet, helper.String(item.(string))) + } + } + + request.InstanceId = &instanceId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBInstanceSecurityGroups(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver configInstanceSecurityGroups failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverConfigInstanceSecurityGroupsRead(d, meta) +} + +func resourceTencentCloudSqlserverConfigInstanceSecurityGroupsDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_instance_security_groups.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.md b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.md new file mode 100644 index 0000000000..f53a2193cb --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups.md @@ -0,0 +1,60 @@ +Provides a resource to create a sqlserver config_instance_security_groups + +Example Usage + +```hcl +data "tencentcloud_availability_zones_by_product" "zones" { + product = "sqlserver" +} + +resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name + name = "subnet-example" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false +} + +resource "tencentcloud_security_group" "security_group" { + name = "sg-example" + description = "desc." +} + +resource "tencentcloud_sqlserver_basic_instance" "example" { + name = "tf-example" + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.4.name + charge_type = "POSTPAID_BY_HOUR" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + project_id = 0 + memory = 4 + storage = 100 + cpu = 2 + machine_type = "CLOUD_PREMIUM" + maintenance_week_set = [1, 2, 3] + maintenance_start_time = "09:00" + maintenance_time_span = 3 + + tags = { + "test" = "test" + } +} + +resource "tencentcloud_sqlserver_config_instance_security_groups" "example" { + instance_id = tencentcloud_sqlserver_basic_instance.example.id + security_group_id_set = [tencentcloud_security_group.security_group.id] +} +``` + +Import + +sqlserver config_instance_security_groups can be imported using the id, e.g. + +``` +terraform import tencentcloud_sqlserver_config_instance_security_groups.example mssql-i9ma6oy7 +``` diff --git a/tencentcloud/resource_tc_sqlserver_config_instance_security_groups_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups_test.go similarity index 84% rename from tencentcloud/resource_tc_sqlserver_config_instance_security_groups_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups_test.go index 264488a6c9..45b78f8963 100644 --- a/tencentcloud/resource_tc_sqlserver_config_instance_security_groups_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_instance_security_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverConfigInstanceSecurityGroupsResource_basic(t *t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverConfigInstanceSecurityGroups, @@ -30,7 +32,7 @@ func TestAccTencentCloudSqlserverConfigInstanceSecurityGroupsResource_basic(t *t }) } -const testAccSqlserverConfigInstanceSecurityGroups = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigInstanceSecurityGroups = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance.go new file mode 100644 index 0000000000..622022dfc5 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance.go @@ -0,0 +1,113 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" +) + +func ResourceTencentCloudSqlserverConfigTerminateDBInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverConfigTerminateDBInstanceCreate, + Read: resourceTencentCloudSqlserverConfigTerminateDBInstanceRead, + Update: resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate, + Delete: resourceTencentCloudSqlserverConfigTerminateDBInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverConfigTerminateDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate(d, meta) +} + +func resourceTencentCloudSqlserverConfigTerminateDBInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + configTerminateDBInstance, err := service.DescribeSqlserverConfigTerminateDBInstanceById(ctx, instanceId) + if err != nil { + return err + } + + if configTerminateDBInstance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverConfigTerminateDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if configTerminateDBInstance.InstanceId != nil { + _ = d.Set("instance_id", configTerminateDBInstance.InstanceId) + } + + return nil +} + +func resourceTencentCloudSqlserverConfigTerminateDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewTerminateDBInstanceRequest() + instanceId = d.Id() + ) + + request.InstanceIdSet = []*string{&instanceId} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().TerminateDBInstance(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver configTerminateDBInstance failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverConfigTerminateDBInstanceRead(d, meta) +} + +func resourceTencentCloudSqlserverConfigTerminateDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_config_terminate_db_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_config_terminate_db_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance_test.go similarity index 84% rename from tencentcloud/resource_tc_sqlserver_config_terminate_db_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance_test.go index c06ee86ae9..6a9d2a6632 100644 --- a/tencentcloud/resource_tc_sqlserver_config_terminate_db_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_config_terminate_db_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,10 +13,10 @@ func TestAccTencentCloudSqlserverConfigTerminateDBInstanceResource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverConfigTerminateDBInstance, @@ -31,7 +33,7 @@ func TestAccTencentCloudSqlserverConfigTerminateDBInstanceResource_basic(t *test }) } -const testAccSqlserverConfigTerminateDBInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverConfigTerminateDBInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde.go new file mode 100644 index 0000000000..347c292241 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde.go @@ -0,0 +1,230 @@ +package sqlserver + +import ( + "context" + "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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverDatabaseTDE() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverDatabaseTDECreate, + Read: resourceTencentCloudSqlserverDatabaseTDERead, + Update: resourceTencentCloudSqlserverDatabaseTDEUpdate, + Delete: resourceTencentCloudSqlserverDatabaseTDEDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + "db_names": { + Required: true, + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Description: "Database name list.", + }, + "encryption": { + Required: true, + Type: schema.TypeString, + Description: "`enable` - enable encryption, `disable` - disable encryption.", + }, + }, + } +} + +func resourceTencentCloudSqlserverDatabaseTDECreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_database_tde.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + dbNameList := make([]string, 0) + if v, ok := d.GetOk("db_names"); ok { + dbNames := v.(*schema.Set).List() + for i := range dbNames { + dbName := dbNames[i].(string) + dbNameList = append(dbNameList, dbName) + } + } + + dbNameListStr := strings.Join(dbNameList, tccommon.COMMA_SP) + d.SetId(strings.Join([]string{instanceId, dbNameListStr}, tccommon.FILED_SP)) + + return resourceTencentCloudSqlserverDatabaseTDEUpdate(d, meta) +} + +func resourceTencentCloudSqlserverDatabaseTDERead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_database_tde.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + encryption string + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + instanceId := idSplit[0] + dbNameListStr := idSplit[1] + dbNameList := strings.Split(dbNameListStr, tccommon.COMMA_SP) + + databaseTDE, err := service.DescribeSqlserverDatabaseTDEById(ctx, instanceId, dbNameList) + if err != nil { + return err + } + + if databaseTDE == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverDatabaseTDE` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if databaseTDE.InstanceId != nil { + _ = d.Set("instance_id", databaseTDE.InstanceId) + } + + if databaseTDE.DBDetails != nil { + tmpList := make([]string, 0) + checkEncryption := make(map[string]string, 0) + for _, item := range databaseTDE.DBDetails { + if item.Name != nil { + tmpList = append(tmpList, *item.Name) + } + + if item.Encryption != nil { + encryption = *item.Encryption + checkEncryption[encryption] = "" + } + } + + if len(checkEncryption) != 1 { + return fmt.Errorf("sqlserver database tde encryption result is not normal, id is %s", d.Id()) + } + + _ = d.Set("db_names", tmpList) + _ = d.Set("encryption", encryption) + } + + return nil +} + +func resourceTencentCloudSqlserverDatabaseTDEUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_database_tde.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = sqlserver.NewModifyDBEncryptAttributesRequest() + encryption string + flowId int64 + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + instanceId := idSplit[0] + dbNameListStr := idSplit[1] + dbNameList := strings.Split(dbNameListStr, tccommon.COMMA_SP) + + request.InstanceId = &instanceId + + if v, ok := d.GetOk("encryption"); ok { + encryption = v.(string) + } + + for _, v := range dbNameList { + parameter := sqlserver.DBTDEEncrypt{} + parameter.DBName = helper.String(v) + parameter.Encryption = helper.String(encryption) + request.DBTDEEncrypt = append(request.DBTDEEncrypt, ¶meter) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBEncryptAttributes(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()) + } + + if result == nil { + e = fmt.Errorf("qlserver databaseTDE not exists") + return resource.NonRetryableError(e) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver databaseTDE failed, reason:%+v", logId, err) + return err + } + + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil { + e = fmt.Errorf("sqlserver databaseTDE instanceId %s flowId %d not exists", instanceId, flowId) + return resource.NonRetryableError(e) + } + + if *result.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver databaseTDE task status is running")) + } + + if *result.Status == SQLSERVER_TASK_SUCCESS { + return nil + } + + if *result.Status == SQLSERVER_TASK_FAIL { + return resource.NonRetryableError(fmt.Errorf("sqlserver databaseTDE task status is failed")) + } + + e = fmt.Errorf("sqlserver databaseTDE task status is %v, we won't wait for it finish", *result.Status) + return resource.NonRetryableError(e) + }) + + if err != nil { + log.Printf("[CRITAL]%s sqlserver databaseTDE task fail, reason:%s\n ", logId, err.Error()) + return err + } + + return resourceTencentCloudSqlserverDatabaseTDERead(d, meta) +} + +func resourceTencentCloudSqlserverDatabaseTDEDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_database_tde.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_database_tde_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde_test.go similarity index 89% rename from tencentcloud/resource_tc_sqlserver_database_tde_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde_test.go index e7f8b6bb26..1fe7ca6674 100644 --- a/tencentcloud/resource_tc_sqlserver_database_tde_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_database_tde_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverDatabaseTDEResource_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: testAccSqlserverDatabaseTDE, @@ -36,7 +38,7 @@ func TestAccTencentCloudSqlserverDatabaseTDEResource_basic(t *testing.T) { }) } -const testAccSqlserverDatabaseTDE = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverDatabaseTDE = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -76,7 +78,7 @@ resource "tencentcloud_sqlserver_database_tde" "example" { } ` -const testAccSqlserverDatabaseTDEUpdate = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverDatabaseTDEUpdate = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_db.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_db.go new file mode 100644 index 0000000000..c418841770 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_db.go @@ -0,0 +1,169 @@ +package sqlserver + +import ( + "context" + "fmt" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceTencentCloudSqlserverDB() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverDBCreate, + Read: resourceTencentCloudSqlserverDBRead, + Update: resourceTencentCloudSqlserverDBUpdate, + Delete: resourceTencentCloudSqlserverDBDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "SQL Server instance ID which DB belongs to.", + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of SQL Server DB. The database name must be unique and must be composed of numbers, letters and underlines, and the first one can not be underline.", + }, + "charset": { + Type: schema.TypeString, + Optional: true, + Default: "Chinese_PRC_CI_AS", + ForceNew: true, + Description: "Character set DB uses. Valid values: `Chinese_PRC_CI_AS`, `Chinese_PRC_CS_AS`, `Chinese_PRC_BIN`, `Chinese_Taiwan_Stroke_CI_AS`, `SQL_Latin1_General_CP1_CI_AS`, and `SQL_Latin1_General_CP1_CS_AS`. Default value is `Chinese_PRC_CI_AS`.", + }, + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remark of the DB.", + }, + // Computed + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Database creation time.", + }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "Database status, could be `creating`, `running`, `modifying` which means changing the remark, and `deleting`.", + }, + }, + } +} + +func resourceTencentCloudSqlserverDBCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_db.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + instanceId := d.Get("instance_id").(string) + _, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId) + if err != nil { + return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById fail, reason:%s\n", logId, err) + } + if !has { + return fmt.Errorf("[CRITAL]%s SQL Server instance %s dose not exist for DB creation", logId, instanceId) + } + + dbName := d.Get("name").(string) + charset := d.Get("charset").(string) + remark := d.Get("remark").(string) + + if err := sqlserverService.CreateSqlserverDB(ctx, instanceId, dbName, charset, remark); err != nil { + return err + } + + d.SetId(instanceId + tccommon.FILED_SP + dbName) + return resourceTencentCloudSqlserverDBRead(d, meta) +} + +func resourceTencentCloudSqlserverDBRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_db.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + id := d.Id() + dbInfo, has, err := sqlserverService.DescribeDBDetailsById(ctx, id) + if err != nil { + return err + } + if !has { + d.SetId("") + return nil + } + idItem := strings.Split(id, tccommon.FILED_SP) + if len(idItem) < 2 { + return fmt.Errorf("broken ID %s of SQL Server DB", id) + } + instanceId := idItem[0] + dbName := idItem[1] + _ = d.Set("instance_id", instanceId) + _ = d.Set("name", dbName) + _ = d.Set("charset", dbInfo.Charset) + _ = d.Set("remark", dbInfo.Remark) + _ = d.Set("create_time", dbInfo.CreateTime) + _ = d.Set("status", SQLSERVER_DB_STATUS[*dbInfo.Status]) + + return nil +} + +func resourceTencentCloudSqlserverDBUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_db.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId := d.Get("instance_id").(string) + + if d.HasChange("remark") { + if err := sqlserverService.ModifySqlserverDBRemark(ctx, instanceId, d.Get("name").(string), d.Get("remark").(string)); err != nil { + return err + } + } + + return nil +} + +func resourceTencentCloudSqlserverDBDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_db.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId := d.Get("instance_id").(string) + name := d.Get("name").(string) + + // precheck before delete + _, has, err := sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId) + if err != nil { + return fmt.Errorf("[CRITAL]%s DescribeSqlserverInstanceById when deleting SQL Server DB fail, reason:%s\n", logId, err) + } + if !has { + return nil + } + id := d.Id() + _, has, err = sqlserverService.DescribeDBDetailsById(ctx, id) + if err != nil { + return err + } + if !has { + return nil + } + + return sqlserverService.DeleteSqlserverDB(ctx, instanceId, []*string{&name}) +} diff --git a/tencentcloud/resource_tc_sqlserver_db_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_db_test.go similarity index 78% rename from tencentcloud/resource_tc_sqlserver_db_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_db_test.go index d1de7cde65..28914229c0 100644 --- a/tencentcloud/resource_tc_sqlserver_db_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_db_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -16,11 +20,11 @@ func init() { resource.AddTestSweepers("tencentcloud_sqlserver_db", &resource.Sweeper{ Name: "tencentcloud_sqlserver_db", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SqlserverService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcsqlserver.NewSqlserverService(client) instances, err := service.DescribeSqlserverInstances(ctx, "", "", -1, "", "", -1) @@ -34,10 +38,10 @@ func init() { ) for _, v := range instances { - if *v.Name == defaultSQLServerName { + if *v.Name == tcacctest.DefaultSQLServerName { insId = *v.InstanceId } - if *v.Name == defaultSubSQLServerName { + if *v.Name == tcacctest.DefaultSubSQLServerName { subInsId = *v.InstanceId } } @@ -64,7 +68,7 @@ func init() { for i := range subDbs { db := subDbs[i] - if *db.Name == defaultSQLServerPubSubDB { + if *db.Name == tcacctest.DefaultSQLServerPubSubDB { err = service.DeleteSqlserverDB(ctx, subInsId, []*string{db.Name}) break } @@ -81,8 +85,8 @@ func init() { func TestAccTencentCloudSqlserverDB_basic_and_update(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: testAccCheckSqlserverDBDestroy, Steps: []resource.TestStep{ { @@ -114,9 +118,9 @@ func TestAccTencentCloudSqlserverDB_basic_and_update(t *testing.T) { } func testAccCheckSqlserverDBDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_sqlserver_db" { continue @@ -134,8 +138,8 @@ func testAccCheckSqlserverDBDestroy(s *terraform.State) error { func testAccCheckSqlserverDBExists(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 { @@ -145,7 +149,7 @@ func testAccCheckSqlserverDBExists(n string) resource.TestCheckFunc { return fmt.Errorf("SQL Server DB id is not set") } - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := sqlserverService.DescribeDBDetailsById(ctx, rs.Primary.ID) if !has { return fmt.Errorf("SQL Server DB %s is not found", rs.Primary.ID) @@ -158,7 +162,7 @@ func testAccCheckSqlserverDBExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverDB_basic = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverDB_basic = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -192,7 +196,7 @@ resource "tencentcloud_sqlserver_db" "example" { } ` -const testAccSqlserverDB_basic_update_remark = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverDB_basic_update_remark = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_full_backup_migration.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration.go similarity index 77% rename from tencentcloud/resource_tc_sqlserver_full_backup_migration.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration.go index f9a671d891..448f33b3c3 100644 --- a/tencentcloud/resource_tc_sqlserver_full_backup_migration.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverFullBackupMigration() *schema.Resource { +func ResourceTencentCloudSqlserverFullBackupMigration() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverFullBackupMigrationCreate, Read: resourceTencentCloudSqlserverFullBackupMigrationRead, @@ -58,11 +61,11 @@ func resourceTencentCloudSqlserverFullBackupMigration() *schema.Resource { } func resourceTencentCloudSqlserverFullBackupMigrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_full_backup_migration.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_full_backup_migration.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewCreateBackupMigrationRequest() response = sqlserver.NewCreateBackupMigrationResponse() instanceId string @@ -90,10 +93,10 @@ func resourceTencentCloudSqlserverFullBackupMigrationCreate(d *schema.ResourceDa request.BackupFiles = helper.InterfacesStringsPoint(v.([]interface{})) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateBackupMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateBackupMigration(request) if e != nil { - return retryError(e) + return tccommon.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,22 +116,22 @@ func resourceTencentCloudSqlserverFullBackupMigrationCreate(d *schema.ResourceDa } backupMigrationId = *response.Response.BackupMigrationId - d.SetId(strings.Join([]string{instanceId, backupMigrationId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, backupMigrationId}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverFullBackupMigrationRead(d, meta) } func resourceTencentCloudSqlserverFullBackupMigrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_full_backup_migration.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_full_backup_migration.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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) } @@ -173,8 +176,8 @@ func resourceTencentCloudSqlserverFullBackupMigrationRead(d *schema.ResourceData } func resourceTencentCloudSqlserverFullBackupMigrationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_full_backup_migration.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_full_backup_migration.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"instance_id", "backup_files"} @@ -185,11 +188,11 @@ func resourceTencentCloudSqlserverFullBackupMigrationUpdate(d *schema.ResourceDa } var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyBackupMigrationRequest() ) - 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) } @@ -218,10 +221,10 @@ func resourceTencentCloudSqlserverFullBackupMigrationUpdate(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyBackupMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyBackupMigration(request) if e != nil { - return retryError(e) + return tccommon.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,16 +246,16 @@ func resourceTencentCloudSqlserverFullBackupMigrationUpdate(d *schema.ResourceDa } func resourceTencentCloudSqlserverFullBackupMigrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_full_backup_migration.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_full_backup_migration.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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_sqlserver_full_backup_migration_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration_test.go similarity index 84% rename from tencentcloud/resource_tc_sqlserver_full_backup_migration_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration_test.go index 8a2133f12f..9474397fcd 100644 --- a/tencentcloud/resource_tc_sqlserver_full_backup_migration_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_full_backup_migration_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "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" @@ -20,10 +24,10 @@ func TestAccTencentCloudSqlserverFullBackupMigrationResource_basic(t *testing.T) endTime := time.Now().AddDate(0, 0, 1).In(loc).Format("2006-01-02 15:04:05") resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverFullBackupMigrationDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccSqlserverFullBackupMigration, startTime, endTime), @@ -53,11 +57,11 @@ func testAccCheckSqlserverFullBackupMigrationDestroy(s *terraform.State) error { if rs.Type != "tencentcloud_sqlserver_full_backup_migration" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } @@ -90,11 +94,11 @@ func testAccCheckSqlserverFullBackupMigrationExists(n string) resource.TestCheck return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } @@ -115,7 +119,7 @@ func testAccCheckSqlserverFullBackupMigrationExists(n string) resource.TestCheck } } -const testAccSqlserverFullBackupMigration = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverFullBackupMigration = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -170,7 +174,7 @@ resource "tencentcloud_sqlserver_full_backup_migration" "example" { } ` -const testAccSqlserverFullBackupMigrationUpdate = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverFullBackupMigrationUpdate = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_general_backup.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup.go similarity index 76% rename from tencentcloud/resource_tc_sqlserver_general_backup.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup.go index a0a920eac8..d1de0a4338 100644 --- a/tencentcloud/resource_tc_sqlserver_general_backup.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverGeneralBackup() *schema.Resource { +func ResourceTencentCloudSqlserverGeneralBackup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverGeneralBackupCreate, Read: resourceTencentCloudSqlserverGeneralBackupRead, @@ -27,7 +30,7 @@ func resourceTencentCloudSqlserverGeneralBackup() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Backup policy (0: instance backup, 1: multi-database backup).", }, "db_names": { @@ -57,13 +60,13 @@ func resourceTencentCloudSqlserverGeneralBackup() *schema.Resource { } func resourceTencentCloudSqlserverGeneralBackupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_backup.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_backup.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewCreateBackupRequest() instanceId string flowId string @@ -95,10 +98,10 @@ func resourceTencentCloudSqlserverGeneralBackupCreate(d *schema.ResourceData, me request.BackupName = helper.String(v.(string)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateBackup(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateBackup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -117,10 +120,10 @@ func resourceTencentCloudSqlserverGeneralBackupCreate(d *schema.ResourceData, me } // waiting for backup done. - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeBackupByFlowId(ctx, instanceId, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -153,18 +156,18 @@ func resourceTencentCloudSqlserverGeneralBackupCreate(d *schema.ResourceData, me return err } - d.SetId(strings.Join([]string{instanceId, strconv.Itoa(int(backupId)), flowId, startStr, endStr, fileName}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, strconv.Itoa(int(backupId)), flowId, startStr, endStr, fileName}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverGeneralBackupRead(d, meta) } func resourceTencentCloudSqlserverGeneralBackupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_backup.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_backup.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string flowId string startStr string @@ -173,7 +176,7 @@ func resourceTencentCloudSqlserverGeneralBackupRead(d *schema.ResourceData, meta strategy int64 ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 6 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -220,8 +223,8 @@ func resourceTencentCloudSqlserverGeneralBackupRead(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverGeneralBackupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_backup.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_backup.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"strategy", "db_names", "instance_id"} @@ -232,13 +235,13 @@ func resourceTencentCloudSqlserverGeneralBackupUpdate(d *schema.ResourceData, me } var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyBackupNameRequest() instanceId string backupId uint64 ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 6 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -256,10 +259,10 @@ func resourceTencentCloudSqlserverGeneralBackupUpdate(d *schema.ResourceData, me } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyBackupName(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyBackupName(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -275,18 +278,18 @@ func resourceTencentCloudSqlserverGeneralBackupUpdate(d *schema.ResourceData, me } func resourceTencentCloudSqlserverGeneralBackupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_backup.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_backup.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string fileName string ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 6 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_sqlserver_general_backup_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup_test.go similarity index 80% rename from tencentcloud/resource_tc_sqlserver_general_backup_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup_test.go index 06cb57e390..9a3f9a8563 100644 --- a/tencentcloud/resource_tc_sqlserver_general_backup_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_backup_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "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" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudSqlserverGeneralBackupResource_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: testAccCheckSqlserverGeneralBackupDestroy, Steps: []resource.TestStep{ { @@ -48,11 +52,11 @@ func testAccCheckSqlserverGeneralBackupDestroy(s *terraform.State) error { if rs.Type != "tencentcloud_sqlserver_general_backup" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) != 6 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -71,7 +75,7 @@ func testAccCheckSqlserverGeneralBackupDestroy(s *terraform.State) error { } if result != nil { - if *result.Response.Status == SQLSERVER_BACKUP_FAIL { + if *result.Response.Status == svcsqlserver.SQLSERVER_BACKUP_FAIL { return nil } @@ -88,11 +92,11 @@ func testAccCheckSqlserverBackupExists(n string) resource.TestCheckFunc { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) != 6 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -111,7 +115,7 @@ func testAccCheckSqlserverBackupExists(n string) resource.TestCheckFunc { } if result != nil { - if *result.Response.Status == SQLSERVER_BACKUP_FAIL { + if *result.Response.Status == svcsqlserver.SQLSERVER_BACKUP_FAIL { return fmt.Errorf("sqlserver general_backup %s is not found", rs.Primary.ID) } return nil @@ -121,7 +125,7 @@ func testAccCheckSqlserverBackupExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverGeneralBackup = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralBackup = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -161,7 +165,7 @@ resource "tencentcloud_sqlserver_general_backup" "example" { } ` -const testAccSqlserverGeneralBackupUpdate = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralBackupUpdate = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_general_clone.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_general_clone.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone.go index c4f5f7bfc7..ec886f77cd 100644 --- a/tencentcloud/resource_tc_sqlserver_general_clone.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverGeneralClone() *schema.Resource { +func ResourceTencentCloudSqlserverGeneralClone() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverGeneralCloneCreate, Read: resourceTencentCloudSqlserverGeneralCloneRead, @@ -44,13 +47,13 @@ func resourceTencentCloudSqlserverGeneralClone() *schema.Resource { } func resourceTencentCloudSqlserverGeneralCloneCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_clone.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_clone.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewCloneDBRequest() response = sqlserver.NewCloneDBResponse() instanceId string @@ -77,8 +80,8 @@ func resourceTencentCloudSqlserverGeneralCloneCreate(d *schema.ResourceData, met request.RenameRestore = append(request.RenameRestore, &renameRestore) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CloneDB(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CloneDB(request) if e != nil { if sdkerr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if sdkerr.Code == "FailedOperation.DBError" { @@ -86,7 +89,7 @@ func resourceTencentCloudSqlserverGeneralCloneCreate(d *schema.ResourceData, met return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -105,10 +108,10 @@ func resourceTencentCloudSqlserverGeneralCloneCreate(d *schema.ResourceData, met } // wait for sqlserver clone done. - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -137,25 +140,25 @@ func resourceTencentCloudSqlserverGeneralCloneCreate(d *schema.ResourceData, met return err } - d.SetId(strings.Join([]string{instanceId, oldName, newName}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, oldName, newName}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverGeneralCloneRead(d, meta) } func resourceTencentCloudSqlserverGeneralCloneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_clone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_clone.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string oldName string newName string ) - 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()) } @@ -186,13 +189,13 @@ func resourceTencentCloudSqlserverGeneralCloneRead(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverGeneralCloneUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_clone.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_clone.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewModifyDBNameRequest() instanceId string flowId int64 @@ -200,7 +203,7 @@ func resourceTencentCloudSqlserverGeneralCloneUpdate(d *schema.ResourceData, met newName string ) - 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()) } @@ -221,11 +224,11 @@ func resourceTencentCloudSqlserverGeneralCloneUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBName(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBName(request) if e != nil { - return retryError(e) + return tccommon.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,10 +248,10 @@ func resourceTencentCloudSqlserverGeneralCloneUpdate(d *schema.ResourceData, met } // wait for sqlserver clone update done. - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -277,24 +280,24 @@ func resourceTencentCloudSqlserverGeneralCloneUpdate(d *schema.ResourceData, met return err } - d.SetId(strings.Join([]string{instanceId, oldName, newName}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, oldName, newName}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverGeneralCloneRead(d, meta) } func resourceTencentCloudSqlserverGeneralCloneDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_clone.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_clone.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId string dbName string flowId int64 ) - 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()) } @@ -312,10 +315,10 @@ func resourceTencentCloudSqlserverGeneralCloneDelete(d *schema.ResourceData, met flowId = *result.Response.FlowId // wait for sqlserver clone delete done. - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { cloneStatus, e := service.DescribeCloneStatusByFlowId(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if cloneStatus == nil { diff --git a/tencentcloud/resource_tc_sqlserver_general_clone_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone_test.go similarity index 80% rename from tencentcloud/resource_tc_sqlserver_general_clone_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone_test.go index 864963b286..5b69bcd0b4 100644 --- a/tencentcloud/resource_tc_sqlserver_general_clone_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_clone_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "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" @@ -16,9 +20,9 @@ func TestAccTencentCloudSqlserverGeneralCloneResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSqlserverGeneralCloneDestroy, Steps: []resource.TestStep{ { @@ -44,11 +48,11 @@ func testAccCheckSqlserverGeneralCloneDestroy(s *terraform.State) error { if rs.Type != "tencentcloud_sqlserver_general_clone" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) } @@ -82,11 +86,11 @@ func testAccCheckSqlserverCloneExists(n string) resource.TestCheckFunc { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) } @@ -111,7 +115,7 @@ func testAccCheckSqlserverCloneExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverGeneralClone = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralClone = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -151,7 +155,7 @@ resource "tencentcloud_sqlserver_general_clone" "example" { } ` -const testAccSqlserverGeneralCloneUpdate = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralCloneUpdate = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_general_cloud_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_general_cloud_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance.go index e96db89afe..11848d6546 100644 --- a/tencentcloud/resource_tc_sqlserver_general_cloud_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance.go @@ -1,17 +1,20 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource { +func ResourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverGeneralCloudInstanceCreate, Read: resourceTencentCloudSqlserverGeneralCloudInstanceRead, @@ -24,7 +27,7 @@ func resourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the SQL Server instance.", }, "zone": { @@ -75,7 +78,7 @@ func resourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource { "period": { Optional: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(1, 48), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 48), Description: "Purchase instance period, the default value is 1, which means one month. The value cannot exceed 48. Valid only when the 'instance_charge_type' parameter value is 'PREPAID'.", }, "db_version": { @@ -152,13 +155,13 @@ func resourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource { } func resourceTencentCloudSqlserverGeneralCloudInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewCreateCloudDBInstancesRequest() instanceId string instanceName string @@ -266,10 +269,10 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceCreate(d *schema.ResourceD request.TimeZone = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateCloudDBInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateCloudDBInstances(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudSqlserverGeneralCloudInstanceCreate(d *schema.ResourceD } // set name - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.ModifySqlserverInstanceName(ctx, instanceId, instanceName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil @@ -308,13 +311,13 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceCreate(d *schema.ResourceD } func resourceTencentCloudSqlserverGeneralCloudInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) @@ -451,13 +454,13 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceRead(d *schema.ResourceDat } func resourceTencentCloudSqlserverGeneralCloudInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - 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() sqlserverService = SqlserverService{client: client} request = sqlserver.NewUpgradeDBInstanceRequest() instanceId = d.Id() @@ -480,10 +483,10 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceUpdate(d *schema.ResourceD instanceName = v.(string) // set name - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, instanceName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil @@ -522,10 +525,10 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceUpdate(d *schema.ResourceD waitSwitch = 0 request.WaitSwitch = &waitSwitch - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().UpgradeDBInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().UpgradeDBInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -548,13 +551,13 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceUpdate(d *schema.ResourceD } func resourceTencentCloudSqlserverGeneralCloudInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) diff --git a/tencentcloud/resource_tc_sqlserver_general_cloud_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance_test.go similarity index 91% rename from tencentcloud/resource_tc_sqlserver_general_cloud_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance_test.go index 3e6716d4f9..af08eec3b3 100644 --- a/tencentcloud/resource_tc_sqlserver_general_cloud_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,10 +13,10 @@ func TestAccTencentCloudSqlserverGeneralCloudInstanceResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverGeneralCloudInstance, @@ -40,7 +42,7 @@ func TestAccTencentCloudSqlserverGeneralCloudInstanceResource_basic(t *testing.T }) } -const testAccSqlserverGeneralCloudInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralCloudInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_general_cloud_ro_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance.go similarity index 85% rename from tencentcloud/resource_tc_sqlserver_general_cloud_ro_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance.go index 379b9fd5f9..15d5718026 100644 --- a/tencentcloud/resource_tc_sqlserver_general_cloud_ro_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver import ( "context" @@ -7,13 +7,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverGeneralCloudRoInstance() *schema.Resource { +func ResourceTencentCloudSqlserverGeneralCloudRoInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverGeneralCloudRoInstanceCreate, Read: resourceTencentCloudSqlserverGeneralCloudRoInstanceRead, @@ -40,7 +44,7 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstance() *schema.Resource { "read_only_group_type": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(1, 3), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 3), Description: "Read-only group type option, 1- Ship according to one instance and one read-only group, 2 - Ship after creating a read-only group, all instances are under this read-only group, 3 - All instances shipped are in the existing Some read-only groups below.", }, "memory": { @@ -111,7 +115,7 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstance() *schema.Resource { "period": { Optional: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(1, 48), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 48), Description: "Purchase instance period, the default value is 1, which means one month. The value cannot exceed 48.", }, "security_group_list": { @@ -145,13 +149,13 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstance() *schema.Resource { } func resourceTencentCloudSqlserverGeneralCloudRoInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewCreateCloudReadOnlyDBInstancesRequest() response = sqlserver.NewCreateCloudReadOnlyDBInstancesResponse() timeout = d.Timeout(schema.TimeoutCreate) @@ -253,9 +257,9 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceCreate(d *schema.Resourc request.GoodsNum = helper.IntInt64(1) err := resource.Retry(timeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateCloudReadOnlyDBInstances(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateCloudReadOnlyDBInstances(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -276,30 +280,30 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceCreate(d *schema.Resourc } if tags := helper.GetTags(d, "resource_tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::sqlserver:%s:uin/:instance/%s", region, roInstanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } } - d.SetId(strings.Join([]string{instanceId, roInstanceId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, roInstanceId}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverGeneralCloudRoInstanceRead(d, meta) } func resourceTencentCloudSqlserverGeneralCloudRoInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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) } @@ -367,8 +371,8 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceRead(d *schema.ResourceD _ = d.Set("time_zone", generalCloudRoInstance.TimeZone) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, roInstanceId) if err != nil { return err @@ -433,20 +437,20 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceRead(d *schema.ResourceD } func resourceTencentCloudSqlserverGeneralCloudRoInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - 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() sqlserverService = SqlserverService{client: client} request = sqlserver.NewUpgradeDBInstanceRequest() timeout = d.Timeout(schema.TimeoutUpdate) dealId 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", idSplit) } @@ -477,9 +481,9 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceUpdate(d *schema.Resourc } err := resource.Retry(timeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().UpgradeDBInstance(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().UpgradeDBInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -503,16 +507,16 @@ func resourceTencentCloudSqlserverGeneralCloudRoInstanceUpdate(d *schema.Resourc } func resourceTencentCloudSqlserverGeneralCloudRoInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_cloud_ro_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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_sqlserver_general_cloud_ro_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance_test.go similarity index 82% rename from tencentcloud/resource_tc_sqlserver_general_cloud_ro_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance_test.go index f885a71179..7ce6f7866a 100644 --- a/tencentcloud/resource_tc_sqlserver_general_cloud_ro_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_ro_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -17,10 +21,10 @@ func TestAccTencentCloudNeedFixSqlserverGeneralCloudRoInstanceResource_basic(t * t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverGeneralCloudRoInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverGeneralCloudRoInstance, @@ -45,11 +49,11 @@ func testAccCheckSqlserverGeneralCloudRoInstanceDestroy(s *terraform.State) erro if rs.Type != "tencentcloud_sqlserver_general_cloud_ro_instance" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) } @@ -80,11 +84,11 @@ func testAccCheckSqlserverRoInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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) } @@ -103,7 +107,7 @@ func testAccCheckSqlserverRoInstanceExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverGeneralCloudRoInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralCloudRoInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -157,7 +161,7 @@ resource "tencentcloud_sqlserver_general_cloud_ro_instance" "example" { } ` -const testAccSqlserverGeneralCloudRoInstanceUpdate = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralCloudRoInstanceUpdate = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication.go new file mode 100644 index 0000000000..89c45c4874 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication.go @@ -0,0 +1,174 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverGeneralCommunication() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverGeneralCommunicationCreate, + Read: resourceTencentCloudSqlserverGeneralCommunicationRead, + Delete: resourceTencentCloudSqlserverGeneralCommunicationDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ID of instances.", + }, + }, + } +} + +func resourceTencentCloudSqlserverGeneralCommunicationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_communication.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewOpenInterCommunicationRequest() + response = sqlserver.NewOpenInterCommunicationResponse() + flowRequest = sqlserver.NewDescribeFlowStatusRequest() + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceIdSet = append(request.InstanceIdSet, helper.String(v.(string))) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().OpenInterCommunication(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()) + } + + if result == nil { + e = fmt.Errorf("sqlserver generalCommunication not exists") + return resource.NonRetryableError(e) + } + + response = result + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver generalCommunication failed, reason:%+v", logId, err) + return err + } + + instanceId := *response.Response.InterInstanceFlowSet[0].InstanceId + flowId := *response.Response.InterInstanceFlowSet[0].FlowId + flowRequest.FlowId = &flowId + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) + if e != nil { + return tccommon.RetryError(e) + } + if *result.Response.Status == SQLSERVER_TASK_SUCCESS { + return nil + } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver generalCommunication status is running")) + } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { + return resource.NonRetryableError(fmt.Errorf("sqlserver bgeneralCommunication status is fail")) + } else { + e = fmt.Errorf("sqlserver generalCommunication status illegal") + return resource.NonRetryableError(e) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s create sqlserver generalCommunication failed, reason:%+v", logId, err) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverGeneralCommunicationRead(d, meta) +} + +func resourceTencentCloudSqlserverGeneralCommunicationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_communication.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + generalCommunication, err := service.DescribeSqlserverGeneralCommunicationById(ctx, instanceId) + if err != nil { + return err + } + + if generalCommunication == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverGeneralCommunication` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if generalCommunication.InstanceId != nil { + _ = d.Set("instance_id", generalCommunication.InstanceId) + } + + return nil +} + +func resourceTencentCloudSqlserverGeneralCommunicationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_general_communication.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + flowRequest = sqlserver.NewDescribeFlowStatusRequest() + instanceId = d.Id() + ) + + flowId, err := service.DeleteSqlserverGeneralCommunicationById(ctx, instanceId) + if err != nil { + log.Printf("[CRITAL]%s delete sqlserver generalCommunication failed, reason:%+v", logId, err) + return err + } + + flowRequest.FlowId = &flowId + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) + if e != nil { + return tccommon.RetryError(e) + } + if *result.Response.Status == SQLSERVER_TASK_SUCCESS { + return nil + } else if *result.Response.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver generalCommunication status is running")) + } else if *result.Response.Status == int64(SQLSERVER_TASK_FAIL) { + return resource.NonRetryableError(fmt.Errorf("sqlserver bgeneralCommunication status is fail")) + } else { + e = fmt.Errorf("sqlserver generalCommunication status illegal") + return resource.NonRetryableError(e) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s delete sqlserver generalCommunication status failed, reason:%+v", logId, err) + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_general_communication_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication_test.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_general_communication_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication_test.go index 7a567108bc..4dd533fb2d 100644 --- a/tencentcloud/resource_tc_sqlserver_general_communication_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_general_communication_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package sqlserver_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,10 +18,10 @@ func TestAccTencentCloudSqlserverGeneralCommunicationResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverGeneralCommunicationDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverGeneralCommunication, @@ -40,9 +44,9 @@ func testAccCheckSqlserverGeneralCommunicationDestroy(s *terraform.State) error if rs.Type != "tencentcloud_sqlserver_general_communication" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := rs.Primary.ID result, err := service.DescribeSqlserverGeneralCommunicationById(ctx, instanceId) @@ -64,9 +68,9 @@ func testAccCheckSqlserverGeneralCommunicationExists(n string) resource.TestChec return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := rs.Primary.ID result, err := service.DescribeSqlserverGeneralCommunicationById(ctx, instanceId) @@ -82,7 +86,7 @@ func testAccCheckSqlserverGeneralCommunicationExists(n string) resource.TestChec } } -const testAccSqlserverGeneralCommunication = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverGeneralCommunication = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_incre_backup_migration.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration.go similarity index 76% rename from tencentcloud/resource_tc_sqlserver_incre_backup_migration.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration.go index 5ccd7dcb44..c8a7e9847d 100644 --- a/tencentcloud/resource_tc_sqlserver_incre_backup_migration.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverIncreBackupMigration() *schema.Resource { +func ResourceTencentCloudSqlserverIncreBackupMigration() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverIncreBackupMigrationCreate, Read: resourceTencentCloudSqlserverIncreBackupMigrationRead, @@ -54,11 +57,11 @@ func resourceTencentCloudSqlserverIncreBackupMigration() *schema.Resource { } func resourceTencentCloudSqlserverIncreBackupMigrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewCreateIncrementalMigrationRequest() response = sqlserver.NewCreateIncrementalMigrationResponse() instanceId string @@ -83,10 +86,10 @@ func resourceTencentCloudSqlserverIncreBackupMigrationCreate(d *schema.ResourceD request.IsRecovery = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateIncrementalMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateIncrementalMigration(request) if e != nil { - return retryError(e) + return tccommon.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,22 +108,22 @@ func resourceTencentCloudSqlserverIncreBackupMigrationCreate(d *schema.ResourceD return err } - d.SetId(strings.Join([]string{instanceId, backupMigrationId, *response.Response.IncrementalMigrationId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, backupMigrationId, *response.Response.IncrementalMigrationId}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverIncreBackupMigrationRead(d, meta) } func resourceTencentCloudSqlserverIncreBackupMigrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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) } @@ -160,8 +163,8 @@ func resourceTencentCloudSqlserverIncreBackupMigrationRead(d *schema.ResourceDat } func resourceTencentCloudSqlserverIncreBackupMigrationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"instance_id", "backup_migration_id"} @@ -172,11 +175,11 @@ func resourceTencentCloudSqlserverIncreBackupMigrationUpdate(d *schema.ResourceD } var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyIncrementalMigrationRequest() ) - 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) } @@ -201,10 +204,10 @@ func resourceTencentCloudSqlserverIncreBackupMigrationUpdate(d *schema.ResourceD } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyIncrementalMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyIncrementalMigration(request) if e != nil { - return retryError(e) + return tccommon.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,16 +224,16 @@ func resourceTencentCloudSqlserverIncreBackupMigrationUpdate(d *schema.ResourceD } func resourceTencentCloudSqlserverIncreBackupMigrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_incre_backup_migration.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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) } diff --git a/tencentcloud/resource_tc_sqlserver_incre_backup_migration_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration_test.go similarity index 77% rename from tencentcloud/resource_tc_sqlserver_incre_backup_migration_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration_test.go index 1f8714d242..87f8e13923 100644 --- a/tencentcloud/resource_tc_sqlserver_incre_backup_migration_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_incre_backup_migration_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,10 +19,10 @@ func TestAccTencentCloudSqlserverIncreBackupMigrationResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverIncreBackupMigrationDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverIncreBackupMigration, @@ -48,11 +52,11 @@ func testAccCheckSqlserverIncreBackupMigrationDestroy(s *terraform.State) error if rs.Type != "tencentcloud_sqlserver_incre_backup_migration" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } @@ -80,11 +84,11 @@ func testAccCheckSqlserverIncreBackupMigrationExists(n string) resource.TestChec return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcsqlserver.NewSqlserverService(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, id is %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_sqlserver_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go similarity index 78% rename from tencentcloud/resource_tc_sqlserver_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go index 2678a68d4c..369375b3b0 100644 --- a/tencentcloud/resource_tc_sqlserver_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance.go @@ -1,6 +1,10 @@ -package tencentcloud +package sqlserver import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -8,6 +12,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -16,21 +21,21 @@ func TencentSqlServerBasicInfo(isROInstance bool) map[string]*schema.Schema { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the SQL Server instance.", }, "charge_type": { Type: schema.TypeString, Optional: true, - Default: COMMON_PAYTYPE_POSTPAID, + Default: svcpostgresql.COMMON_PAYTYPE_POSTPAID, ForceNew: true, - ValidateFunc: validateAllowedStringValue([]string{COMMON_PAYTYPE_PREPAID, COMMON_PAYTYPE_POSTPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcpostgresql.COMMON_PAYTYPE_PREPAID, svcpostgresql.COMMON_PAYTYPE_POSTPAID}), Description: "Pay type of the SQL Server instance. Available values `PREPAID`, `POSTPAID_BY_HOUR`.", }, "period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 48), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 48), Description: "Purchase instance period in month. The value does not exceed 48.", }, "auto_voucher": { @@ -132,7 +137,7 @@ func TencentSqlServerBasicInfo(isROInstance bool) map[string]*schema.Schema { return basicSchema } -func resourceTencentCloudSqlserverInstance() *schema.Resource { +func ResourceTencentCloudSqlserverInstance() *schema.Resource { specialInfo := map[string]*schema.Schema{ "multi_zones": { Type: schema.TypeBool, @@ -201,14 +206,14 @@ func resourceTencentCloudSqlserverInstance() *schema.Resource { } func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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() sqlserverService := SqlserverService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region var ( name = d.Get("name").(string) @@ -254,10 +259,10 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in request.HAType = &haType request.MultiZones = &multiZones - if payType == COMMON_PAYTYPE_POSTPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_POSTPAID { request.InstanceChargeType = helper.String("POSTPAID") } - if payType == COMMON_PAYTYPE_PREPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_PREPAID { request.InstanceChargeType = helper.String("PREPAID") if v, ok := d.Get("auto_renew").(int); ok { request.AutoRenewFlag = helper.IntInt64(v) @@ -302,10 +307,10 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in request.GoodsNum = helper.IntInt64(1) request.Zone = &zone - outErr = resource.Retry(6*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceId, inErr = sqlserverService.CreateSqlserverInstance(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -316,10 +321,10 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in d.SetId(instanceId) //set name - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -328,7 +333,7 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -337,9 +342,9 @@ func resourceTencentCloudSqlserverInstanceCreate(d *schema.ResourceData, meta in } func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() sqlserverService := SqlserverService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region instanceId := d.Id() @@ -362,10 +367,10 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, //update name if d.HasChange("name") { name := d.Get("name").(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -383,10 +388,10 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, for _, v := range oldSet { sgId := v.(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.RemoveSecurityGroup(ctx, instanceId, sgId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -396,10 +401,10 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, } for _, v := range newSet { sgId := v.(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.AddSecurityGroup(ctx, instanceId, sgId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -411,9 +416,9 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -424,7 +429,7 @@ func sqlServerAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, func sqlServerAllInstanceNetUpdate(d *schema.ResourceData, meta interface{}) error { var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewModifyDBInstanceNetworkRequest() flowRequest = sqlserver.NewDescribeFlowStatusRequest() flowId int64 @@ -437,10 +442,10 @@ func sqlServerAllInstanceNetUpdate(d *schema.ResourceData, meta interface{}) err request.InstanceId = &instanceId request.NewVpcId = &vpcId request.NewSubnetId = &subnetId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyDBInstanceNetwork(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBInstanceNetwork(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -460,10 +465,10 @@ func sqlServerAllInstanceNetUpdate(d *schema.ResourceData, meta interface{}) err } flowRequest.FlowId = &flowId - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().DescribeFlowStatus(flowRequest) + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.Response.Status == SQLSERVER_TASK_SUCCESS { @@ -487,10 +492,10 @@ func sqlServerAllInstanceNetUpdate(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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) d.Partial(true) //basic info update @@ -506,17 +511,17 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in var outErr, inErr error instanceId := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() sqlserverService := SqlserverService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region //update project id if d.HasChange("project_id") { projectId := d.Get("project_id").(int) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceProjectId(ctx, instanceId, projectId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -537,10 +542,10 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in startTime := d.Get("maintenance_start_time").(string) timeSpan := d.Get("maintenance_time_span").(int) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.ModifySqlserverInstanceMaintenanceSpan(ctx, instanceId, weekSet, startTime, timeSpan) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -551,9 +556,9 @@ func resourceTencentCloudSqlserverInstanceUpdate(d *schema.ResourceData, meta in } if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -571,15 +576,15 @@ func tencentSqlServerBasicInfoRead(ctx context.Context, d *schema.ResourceData, return } instanceId := d.Id() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error instance, has, outErr = sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, inErr = sqlserverService.DescribeSqlserverInstanceById(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -600,19 +605,19 @@ func tencentSqlServerBasicInfoRead(ctx context.Context, d *schema.ResourceData, _ = d.Set("charge_type", helper.Int64ToStr(*instance.PayMode)) if int(*instance.PayMode) == 1 { - _ = d.Set("charge_type", COMMON_PAYTYPE_PREPAID) + _ = d.Set("charge_type", svcpostgresql.COMMON_PAYTYPE_PREPAID) if _, ok := d.GetOk("auto_renew"); ok { _ = d.Set("auto_renew", instance.RenewFlag) } } else { - _ = d.Set("charge_type", COMMON_PAYTYPE_POSTPAID) + _ = d.Set("charge_type", svcpostgresql.COMMON_PAYTYPE_POSTPAID) } var securityGroup []string - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { securityGroup, inErr = sqlserverService.DescribeInstanceSecurityGroups(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -633,14 +638,14 @@ func tencentSqlServerBasicInfoRead(ctx context.Context, d *schema.ResourceData, } func resourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance.read")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var outErr, inErr error instanceId := d.Id() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instance, has, err := tencentSqlServerBasicInfoRead(ctx, d, meta) if err != nil { @@ -657,10 +662,10 @@ func resourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta inte //maintanence weekSet, startTime, timeSpan, outErr := sqlserverService.DescribeMaintenanceSpan(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { weekSet, startTime, timeSpan, inErr = sqlserverService.DescribeMaintenanceSpan(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -672,8 +677,8 @@ func resourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta inte _ = d.Set("maintenance_start_time", startTime) _ = d.Set("maintenance_time_span", timeSpan) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, d.Id()) if err != nil { return err @@ -684,21 +689,21 @@ func resourceTencentCloudSqlserverInstanceRead(d *schema.ResourceData, meta inte } func resourceTencentCLoudSqlserverInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error var has bool - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -715,10 +720,10 @@ func resourceTencentCLoudSqlserverInstanceDelete(d *schema.ResourceData, meta in outErr = sqlserverService.TerminateSqlserverInstance(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.TerminateSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -731,10 +736,10 @@ func resourceTencentCLoudSqlserverInstanceDelete(d *schema.ResourceData, meta in outErr = sqlserverService.DeleteSqlserverInstance(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.DeleteSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl.go new file mode 100644 index 0000000000..c197e4df5b --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl.go @@ -0,0 +1,179 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverInstanceSsl() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverInstanceSslCreate, + Read: resourceTencentCloudSqlserverInstanceSslRead, + Update: resourceTencentCloudSqlserverInstanceSslUpdate, + Delete: resourceTencentCloudSqlserverInstanceSslDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + "type": { + Required: true, + Type: schema.TypeString, + ValidateFunc: tccommon.ValidateAllowedStringValue(SSL_TYPE), + Description: "Operation type. enable: turn on SSL; disable: turn off SSL; renew: update the certificate validity period.", + }, + }, + } +} + +func resourceTencentCloudSqlserverInstanceSslCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_ssl.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverInstanceSslUpdate(d, meta) +} + +func resourceTencentCloudSqlserverInstanceSslRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_ssl.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + sslType string + ) + + if v, ok := d.GetOk("type"); ok { + sslType = v.(string) + } + + instanceSsl, err := service.DescribeSqlserverInstanceSslById(ctx, instanceId) + if err != nil { + return err + } + + if instanceSsl == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverInstanceSsl` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if instanceSsl.InstanceId != nil { + _ = d.Set("instance_id", instanceSsl.InstanceId) + } + + if instanceSsl.SSLConfig.Encryption != nil { + if sslType == SSL_TYPE_ENABLE || sslType == SSL_TYPE_DISABLE { + _ = d.Set("type", instanceSsl.SSLConfig.Encryption) + } else { + _ = d.Set("type", SSL_TYPE_RENEW) + } + } + + return nil +} + +func resourceTencentCloudSqlserverInstanceSslUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_ssl.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewModifyDBInstanceSSLRequest() + attrRequest = sqlserver.NewDescribeDBInstancesAttributeRequest() + instanceId = d.Id() + sslType string + ) + + if v, ok := d.GetOk("type"); ok { + request.Type = helper.String(v.(string)) + sslType = v.(string) + } + + request.InstanceId = &instanceId + request.WaitSwitch = helper.IntUint64(0) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyDBInstanceSSL(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver instanceSsl failed, reason:%+v", logId, err) + return err + } + + // wait + attrRequest.InstanceId = &instanceId + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeDBInstancesAttribute(attrRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attrRequest.GetAction(), attrRequest.ToJsonString(), result.ToJsonString()) + } + + if result == nil { + e = fmt.Errorf("Describe DBInstances Attribute not exists.") + return resource.NonRetryableError(e) + } + + if sslType == SSL_TYPE_ENABLE { + if *result.Response.SSLConfig.Encryption == SSL_TYPE_ENABLE { + return nil + } + } else if sslType == SSL_TYPE_DISABLE { + if *result.Response.SSLConfig.Encryption == SSL_TYPE_DISABLE { + return nil + } + } else { + if *result.Response.SSLConfig.Encryption == SSL_TYPE_ENABLE { + return nil + } + } + + return resource.RetryableError(fmt.Errorf("Modify DBInstance SSL is processing, status is: %s", *result.Response.SSLConfig.Encryption)) + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver instanceSsl failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverInstanceSslRead(d, meta) +} + +func resourceTencentCloudSqlserverInstanceSslDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_ssl.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/sqlserver/resource_tc_sqlserver_instance_ssl.md b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl.md similarity index 100% rename from tencentcloud/sqlserver/resource_tc_sqlserver_instance_ssl.md rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl.md diff --git a/tencentcloud/resource_tc_sqlserver_instance_ssl_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl_test.go similarity index 91% rename from tencentcloud/resource_tc_sqlserver_instance_ssl_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl_test.go index aff6a1bcbc..a2320a7721 100644 --- a/tencentcloud/resource_tc_sqlserver_instance_ssl_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_ssl_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverInstanceSslResource_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: testAccSqlserverInstanceSslEnable, diff --git a/tencentcloud/resource_tc_sqlserver_instance_tde.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_instance_tde.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde.go index 69fb292515..b102334e5d 100644 --- a/tencentcloud/resource_tc_sqlserver_instance_tde.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde.go @@ -1,17 +1,20 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverInstanceTDE() *schema.Resource { +func ResourceTencentCloudSqlserverInstanceTDE() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverInstanceTDECreate, Read: resourceTencentCloudSqlserverInstanceTDERead, @@ -41,8 +44,8 @@ func resourceTencentCloudSqlserverInstanceTDE() *schema.Resource { } func resourceTencentCloudSqlserverInstanceTDECreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_tde.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_tde.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -58,13 +61,13 @@ func resourceTencentCloudSqlserverInstanceTDECreate(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverInstanceTDERead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_tde.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_tde.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) @@ -95,13 +98,13 @@ func resourceTencentCloudSqlserverInstanceTDERead(d *schema.ResourceData, meta i } func resourceTencentCloudSqlserverInstanceTDEUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_tde.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_tde.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewModifyInstanceEncryptAttributesRequest() instanceId = d.Id() flowId int64 @@ -117,10 +120,10 @@ func resourceTencentCloudSqlserverInstanceTDEUpdate(d *schema.ResourceData, meta request.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyInstanceEncryptAttributes(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyInstanceEncryptAttributes(request) if e != nil { - return retryError(e) + return tccommon.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,10 +142,10 @@ func resourceTencentCloudSqlserverInstanceTDEUpdate(d *schema.ResourceData, meta return err } - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -175,8 +178,8 @@ func resourceTencentCloudSqlserverInstanceTDEUpdate(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverInstanceTDEDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_instance_tde.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_instance_tde.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_instance_tde_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde_test.go similarity index 87% rename from tencentcloud/resource_tc_sqlserver_instance_tde_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde_test.go index d68e35e3c0..5cbe368134 100644 --- a/tencentcloud/resource_tc_sqlserver_instance_tde_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_tde_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudNeedFixSqlserverInstanceTDEResource_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: testAccSqlserverInstanceTDE, @@ -33,7 +35,7 @@ func TestAccTencentCloudNeedFixSqlserverInstanceTDEResource_basic(t *testing.T) }) } -const testAccSqlserverInstanceTDE = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverInstanceTDE = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_test.go index cb224acb16..fc8998b13c 100644 --- a/tencentcloud/resource_tc_sqlserver_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -21,11 +25,11 @@ func init() { resource.AddTestSweepers("tencentcloud_sqlserver_instance", &resource.Sweeper{ Name: "tencentcloud_sqlserver_instance", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SqlserverService{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 := svcsqlserver.NewSqlserverService(client) instances, err := service.DescribeSqlserverInstances(ctx, "", "", -1, "", "", 1) if err != nil { @@ -43,7 +47,7 @@ func init() { }) } -func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService, instances []*sqlserver.DBInstance) error { +func batchDeleteSQLServerInstances(ctx context.Context, service svcsqlserver.SqlserverService, instances []*sqlserver.DBInstance) error { wg := sync.WaitGroup{} wg.Add(len(instances)) @@ -57,24 +61,24 @@ func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService createTime := *instances[i].CreateTime now := time.Now() - interval := now.Sub(stringTotime(createTime)).Minutes() + interval := now.Sub(tccommon.StringToTime(createTime)).Minutes() - if isResourcePersist(name, nil) { + if tcacctest.IsResourcePersist(name, nil) { return } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { return } var outErr, inErr error var has bool - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = service.DescribeSqlserverInstanceById(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -91,10 +95,10 @@ func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService outErr = service.TerminateSqlserverInstance(ctx, id) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = service.TerminateSqlserverInstance(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -107,10 +111,10 @@ func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService outErr = service.DeleteSqlserverInstance(ctx, id) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = service.DeleteSqlserverInstance(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -125,10 +129,10 @@ func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService return } - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := service.DescribeSqlserverInstanceById(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if has { inErr = fmt.Errorf("delete SQL Server instance %s fail, instance still exists from SDK DescribeSqlserverInstanceById", id) @@ -151,8 +155,8 @@ func batchDeleteSQLServerInstances(ctx context.Context, service SqlserverService func TestAccTencentCloudSqlserverInstanceResource_PostPaid(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: testAccCheckSqlserverInstanceDestroy, Steps: []resource.TestStep{ { @@ -212,8 +216,8 @@ func TestAccTencentCloudSqlserverInstanceResource_PostPaid(t *testing.T) { // go test -i; go test -test.run TestAccTencentCloudSqlserverInstanceResource_Prepaid -v func TestAccTencentCloudSqlserverInstanceResource_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: testAccCheckSqlserverInstanceDestroy, Steps: []resource.TestStep{ { @@ -242,8 +246,8 @@ func TestAccTencentCloudSqlserverInstanceResource_Prepaid(t *testing.T) { func TestAccTencentCloudSqlserverInstanceMultiClusterResource(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: testAccCheckSqlserverInstanceDestroy, Steps: []resource.TestStep{ { @@ -283,10 +287,10 @@ func testAccCheckSqlserverInstanceDestroy(s *terraform.State) error { if rs.Type != testSqlserverInstanceResourceName { 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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverInstanceById(ctx, rs.Primary.ID) if err != nil { @@ -307,10 +311,10 @@ func testAccCheckSqlserverInstanceExists(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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverInstanceById(ctx, rs.Primary.ID) if err != nil { @@ -327,7 +331,7 @@ func testAccCheckSqlserverInstanceExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverBasicInstanceNetwork = defaultVpcSubnets + defaultSecurityGroupData +const testAccSqlserverBasicInstanceNetwork = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData const testAccSqlserverInstanceBasicPrepaid = ` locals { diff --git a/tencentcloud/resource_tc_sqlserver_migration.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_migration.go similarity index 90% rename from tencentcloud/resource_tc_sqlserver_migration.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_migration.go index e8c207ca5c..8f2da118ab 100644 --- a/tencentcloud/resource_tc_sqlserver_migration.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_migration.go @@ -1,17 +1,20 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverMigration() *schema.Resource { +func ResourceTencentCloudSqlserverMigration() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverMigrationCreate, Read: resourceTencentCloudSqlserverMigrationRead, @@ -169,10 +172,10 @@ func resourceTencentCloudSqlserverMigration() *schema.Resource { } func resourceTencentCloudSqlserverMigrationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_migration.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_migration.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = sqlserver.NewCreateMigrationRequest() @@ -269,10 +272,10 @@ func resourceTencentCloudSqlserverMigrationCreate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().CreateMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().CreateMigration(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -291,14 +294,14 @@ func resourceTencentCloudSqlserverMigrationCreate(d *schema.ResourceData, meta i } func resourceTencentCloudSqlserverMigrationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_migration.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_migration.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 := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} migrationId := d.Id() @@ -411,10 +414,10 @@ func resourceTencentCloudSqlserverMigrationRead(d *schema.ResourceData, meta int } func resourceTencentCloudSqlserverMigrationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_migration.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_migration.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := sqlserver.NewModifyMigrationRequest() migrateId := d.Id() @@ -510,10 +513,10 @@ func resourceTencentCloudSqlserverMigrationUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().ModifyMigration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyMigration(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -528,13 +531,13 @@ func resourceTencentCloudSqlserverMigrationUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudSqlserverMigrationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_migration.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_migration.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 := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} migrateId := d.Id() if err := service.DeleteSqlserverMigrationById(ctx, migrateId); err != nil { diff --git a/tencentcloud/resource_tc_sqlserver_migration_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_migration_test.go similarity index 87% rename from tencentcloud/resource_tc_sqlserver_migration_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_migration_test.go index 18571fba9d..2619c0add7 100644 --- a/tencentcloud/resource_tc_sqlserver_migration_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_migration_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "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_sqlserver_migration func testSweepSqlserverMigration(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - sqlServerService := SqlserverService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + sqlServerService := svcsqlserver.NewSqlserverService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) param := map[string]interface{}{} ret, err := sqlServerService.DescribeSqlserverMigrationsByFilter(ctx, param) @@ -34,14 +39,14 @@ func testSweepSqlserverMigration(r string) error { for _, v := range ret { delId := helper.UInt64ToStr(*v.MigrateId) - if strings.HasPrefix(*v.MigrateName, keepResource) || strings.HasPrefix(*v.MigrateName, defaultResource) { + if strings.HasPrefix(*v.MigrateName, tcacctest.KeepResource) || strings.HasPrefix(*v.MigrateName, tcacctest.DefaultResource) { continue } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := sqlServerService.DeleteSqlserverMigrationById(ctx, delId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -57,9 +62,9 @@ func TestAccTencentCloudSqlserverMigrationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSqlserverMigrationDestroy, Steps: []resource.TestStep{ { @@ -98,17 +103,17 @@ func testAccCheckSqlserverMigrationDestroy(s *terraform.State) error { if rs.Type != "tencentcloud_sqlserver_migration" { 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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ret, err := service.DescribeSqlserverMigrationById(ctx, rs.Primary.ID) if err != nil { return fmt.Errorf("testAccCheckSqlserverMigrationDestroy found err:%v, id:%s", err.Error(), rs.Primary.ID) } if ret != nil { status := *ret.Status - if status != SQLSERVER_MIGRATION_TERMINATED { + if status != svcsqlserver.SQLSERVER_MIGRATION_TERMINATED { return fmt.Errorf("SQL Server migration still exist, Id: %v, status:%v", rs.Primary.ID, status) } } @@ -122,10 +127,10 @@ func testAccCheckSqlserverMigrationExists(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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ret, err := service.DescribeSqlserverMigrationById(ctx, rs.Primary.ID) if err != nil { @@ -138,7 +143,7 @@ func testAccCheckSqlserverMigrationExists(n string) resource.TestCheckFunc { } } -const testAccSqlserverMigration_basic = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverMigration_basic = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -248,7 +253,7 @@ resource "tencentcloud_sqlserver_migration" "migration" { } ` -const testAccSqlserverMigration_update = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverMigration_update = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_publish_subscribe.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe.go similarity index 85% rename from tencentcloud/resource_tc_sqlserver_publish_subscribe.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe.go index fd86e89b8f..ece6808295 100644 --- a/tencentcloud/resource_tc_sqlserver_publish_subscribe.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe.go @@ -1,15 +1,17 @@ -package tencentcloud +package sqlserver import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" ) -func resourceTencentCloudSqlserverPublishSubscribe() *schema.Resource { +func ResourceTencentCloudSqlserverPublishSubscribe() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverPublishSubscribeCreate, Read: resourceTencentCloudSqlserverPublishSubscribeRead, @@ -70,13 +72,13 @@ func resourceTencentCloudSqlserverPublishSubscribe() *schema.Resource { } func resourceTencentCloudSqlserverPublishSubscribeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_publish_subscribe.create")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_publish_subscribe.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 ( - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} publishInstanceId = d.Get("publish_instance_id").(string) subscribeInstanceId = d.Get("subscribe_instance_id").(string) publishSubscribeName = d.Get("publish_subscribe_name").(string) @@ -111,19 +113,19 @@ func resourceTencentCloudSqlserverPublishSubscribeCreate(d *schema.ResourceData, if !hasExist { return fmt.Errorf("this Sqlserver Publish Subscribe %s Create Failed", subscribeInstanceId) } - d.SetId(publishInstanceId + FILED_SP + subscribeInstanceId) + d.SetId(publishInstanceId + tccommon.FILED_SP + subscribeInstanceId) return resourceTencentCloudSqlserverPublishSubscribeRead(d, meta) } func resourceTencentCloudSqlserverPublishSubscribeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_publish_subscribe.read")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_publish_subscribe.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() - idItem = strings.Split(id, FILED_SP) + idItem = strings.Split(id, tccommon.FILED_SP) ) if len(idItem) < 2 { @@ -154,12 +156,12 @@ func resourceTencentCloudSqlserverPublishSubscribeRead(d *schema.ResourceData, m } func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_publish_subscribe.update")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_publish_subscribe.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} publishInstanceId = d.Get("publish_instance_id").(string) subscribeInstanceId = d.Get("subscribe_instance_id").(string) deleteSubscribeDb = d.Get("delete_subscribe_db").(bool) @@ -229,12 +231,12 @@ func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData, } func resourceTencentCloudSqlserverPublishSubscribeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_publish_subscribe.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_publish_subscribe.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} publishInstanceId = d.Get("publish_instance_id").(string) subscribeInstanceId = d.Get("subscribe_instance_id").(string) deleteSubscribeDb = d.Get("delete_subscribe_db").(bool) diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe_test.go new file mode 100644 index 0000000000..2f21ca6ed5 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_publish_subscribe_test.go @@ -0,0 +1,245 @@ +package sqlserver_test + +import ( + "context" + "fmt" + "log" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_sqlserver_publish_subscribe + resource.AddTestSweepers("tencentcloud_sqlserver_publish_subscribe", &resource.Sweeper{ + Name: "tencentcloud_sqlserver_publish_subscribe", + F: testAccTencentCloudSQLServerPubSubSweeper, + }) +} + +func testAccTencentCloudSQLServerPubSubSweeper(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcsqlserver.NewSqlserverService(client) + instance, err := service.DescribeSqlserverInstances(ctx, "", tcacctest.DefaultPubSQLServerName, -1, "", "", 1) + if err != nil { + return err + } + subInstances, err := service.DescribeSqlserverInstances(ctx, "", tcacctest.DefaultSubSQLServerName, -1, "", "", 1) + + if err != nil { + return err + } + + pubInstanceId := *instance[0].InstanceId + subInstanceId := *subInstances[0].InstanceId + + testAccUnsubscribePubDB(ctx, &service, pubInstanceId) + + database, err := service.DescribeDBsOfInstance(ctx, subInstanceId) + if err != nil { + return err + } + + if len(database) == 0 { + log.Printf("no DBs in %s", subInstanceId) + return nil + } + + for i := range database { + item := database[i] + created := time.Time{} + name := *item.Name + if item.CreateTime != nil { + created = tccommon.StringToTime(*item.CreateTime) + } + if name != tcacctest.DefaultSQLServerPubSubDB || tcacctest.IsResourcePersist("", &created) { + continue + } + if err = service.DeleteSqlserverDB(ctx, subInstanceId, []*string{item.Name}); err != nil { + log.Printf("err: %s", err.Error()) + } + } + return err +} + +func testAccCheckPubSubsExists() error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(tcacctest.DefaultRegion) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcsqlserver.NewSqlserverService(client) + instance, err := service.DescribeSqlserverInstances(ctx, "", tcacctest.DefaultPubSQLServerName, -1, "", "", 1) + if err != nil { + return err + } + + pubInstanceId := *instance[0].InstanceId + + pubsubs, _ := service.DescribeSqlserverPublishSubscribes(ctx, map[string]interface{}{ + "instanceId": pubInstanceId, + }) + + if len(pubsubs) > 0 { + return fmt.Errorf("pubsub of %s still exists", tcacctest.DefaultPubSQLServerName) + } + return nil +} + +func testAccUnsubscribePubDB(ctx context.Context, service *svcsqlserver.SqlserverService, instanceId string) { + + pubsubs, _ := service.DescribeSqlserverPublishSubscribes(ctx, map[string]interface{}{ + "instanceId": instanceId, + }) + + if len(pubsubs) == 0 { + log.Printf("NO pubsub result") + return + } + + pubSubId := *pubsubs[0].Id + + pubSub := &sqlserver.PublishSubscribe{ + Id: &pubSubId, + } + tuples := []*sqlserver.DatabaseTuple{ + { + PublishDatabase: helper.String(tcacctest.DefaultSQLServerPubSubDB), + SubscribeDatabase: helper.String(tcacctest.DefaultSQLServerPubSubDB), + }, + } + err := service.DeletePublishSubscribe(ctx, pubSub, tuples) + if err != nil { + fmt.Printf("[ERROR] %s", err.Error()) + } +} + +// go test -i; go test -test.run TestAccTencentCloudSqlserverPublishSubscribeResource -v +func TestAccTencentCloudSqlserverPublishSubscribeResource(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + if err := testAccCheckPubSubsExists(); err != nil { + t.Errorf("Precheck failed: %s", err.Error()) + } + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckSqlserverPublishSubscribeDestroy, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverPublishSubscribe_basic, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckSqlserverPublishSubscribeExists("tencentcloud_sqlserver_publish_subscribe.example"), + resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_publish_subscribe.example", "publish_instance_id"), + resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_publish_subscribe.example", "subscribe_instance_id"), + resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "publish_subscribe_name", "example"), + resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "database_tuples.#", "1"), + ), + }, + { + Config: testAccSqlserverPublishSubscribe_basic_update_name, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckSqlserverPublishSubscribeExists("tencentcloud_sqlserver_publish_subscribe.example"), + resource.TestCheckResourceAttr("tencentcloud_sqlserver_publish_subscribe.example", "publish_subscribe_name", "example1"), + ), + }, + { + ResourceName: "tencentcloud_sqlserver_publish_subscribe.example", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"delete_subscribe_db"}, + }, + }, + }) +} + +func testAccCheckSqlserverPublishSubscribeDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_sqlserver_publish_subscribe" { + continue + } + split := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(split) < 2 { + continue + } + _, has, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, split[0], split[1]) + if err != nil { + return err + } + if has { + return fmt.Errorf("SQL Server Publish Subscribe %s still exists", split[0]+tccommon.FILED_SP+split[1]) + } + } + return nil +} + +func testAccCheckSqlserverPublishSubscribeExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("SQL Server Publish Subscribe %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("SQL Server Publish Subscribe id is not set") + } + + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + split := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(split) < 2 { + return fmt.Errorf("SQL Server Publish Subscribe is not set: %s", rs.Primary.ID) + } + _, has, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, split[0], split[1]) + if err != nil { + return err + } + if !has { + return fmt.Errorf("SQL Server Publish Subscribe %s is not found", rs.Primary.ID) + } + return nil + } +} + +const testAccSqlserverPublishSubscribe_basic = tcacctest.CommonPubSubSQLServer + ` +resource "tencentcloud_sqlserver_publish_subscribe" "example" { + publish_instance_id = "mssql-qelbzgwf" + subscribe_instance_id = "mssql-jdk2pwld" + publish_subscribe_name = "example" + delete_subscribe_db = false + database_tuples { + publish_database = local.sqlserver_pub_db + subscribe_database = local.sqlserver_sub_db + } +} +` + +const testAccSqlserverPublishSubscribe_basic_update_name = tcacctest.CommonPubSubSQLServer + ` +resource "tencentcloud_sqlserver_publish_subscribe" "example" { + publish_instance_id = "mssql-qelbzgwf" + subscribe_instance_id = "mssql-jdk2pwld" + publish_subscribe_name = "example_update" + delete_subscribe_db = false + database_tuples { + publish_database = local.sqlserver_pub_db + subscribe_database = local.sqlserver_sub_db + } +} +` diff --git a/tencentcloud/resource_tc_sqlserver_readonly_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go similarity index 79% rename from tencentcloud/resource_tc_sqlserver_readonly_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go index 08b4265d2e..598c529c80 100644 --- a/tencentcloud/resource_tc_sqlserver_readonly_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance.go @@ -1,6 +1,10 @@ -package tencentcloud +package sqlserver import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcpostgresql "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/postgresql" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +13,11 @@ import ( "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 resourceTencentCloudSqlserverReadonlyInstance() *schema.Resource { +func ResourceTencentCloudSqlserverReadonlyInstance() *schema.Resource { readonlyInstanceInfo := map[string]*schema.Schema{ "master_instance_id": { Type: schema.TypeString, @@ -24,7 +29,7 @@ func resourceTencentCloudSqlserverReadonlyInstance() *schema.Resource { Type: schema.TypeInt, ForceNew: true, Required: true, - ValidateFunc: validateAllowedIntValue([]int{1, 3}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 3}), Description: "Type of readonly group. Valid values: `1`, `3`. `1` for one auto-assigned readonly instance per one readonly group, `2` for creating new readonly group, `3` for all exist readonly instances stay in the exist readonly group. For now, only `1` and `3` are supported.", }, "force_upgrade": { @@ -82,14 +87,14 @@ func resourceTencentCloudSqlserverReadonlyInstance() *schema.Resource { } func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_readonly_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() sqlserverService := SqlserverService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region var ( @@ -159,10 +164,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, request.SecurityGroupList = append(request.SecurityGroupList, &v) } - if payType == COMMON_PAYTYPE_POSTPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_POSTPAID { request.InstanceChargeType = helper.String("POSTPAID") } - if payType == COMMON_PAYTYPE_PREPAID { + if payType == svcpostgresql.COMMON_PAYTYPE_PREPAID { request.InstanceChargeType = helper.String("PREPAID") if v, ok := d.Get("period").(int); ok { @@ -181,10 +186,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, var instanceId string var outErr, inErr error - outErr = resource.Retry(12*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(12*tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceId, inErr = sqlserverService.CreateSqlserverReadonlyInstance(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -195,10 +200,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, d.SetId(instanceId) //set name - outErr = resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := sqlserverService.ModifySqlserverInstanceName(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -207,7 +212,7 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("sqlserver", "instance", region, instanceId) + resourceName := tccommon.BuildTagResourceName("sqlserver", "instance", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -216,14 +221,14 @@ func resourceTencentCloudSqlserverReadonlyInstanceCreate(d *schema.ResourceData, } func resourceTencentCloudSqlserverReadonlyInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_readonly_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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) instanceId := d.Id() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instance, has, err := tencentSqlServerBasicInfoRead(ctx, d, meta) if err != nil { @@ -258,8 +263,8 @@ func resourceTencentCloudSqlserverReadonlyInstanceRead(d *schema.ResourceData, m _ = d.Set("readonly_groups_max_delay_time", readOnlyInstance.ReadOnlyMaxDelayTime) _ = d.Set("readonly_groups_min_in_group", readOnlyInstance.MinReadOnlyInGroup) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "sqlserver", "instance", tcClient.Region, d.Id()) if err != nil { return err @@ -270,10 +275,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceRead(d *schema.ResourceData, m } func resourceTencentCloudSqlserverReadonlyInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_readonly_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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) //basic info update if err := sqlServerAllInstanceRoleUpdate(ctx, d, meta); err != nil { @@ -284,21 +289,21 @@ func resourceTencentCloudSqlserverReadonlyInstanceUpdate(d *schema.ResourceData, } func resourceTencentCloudSqlserverReadonlyInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_readonly_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_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() - sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + sqlserverService := SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error var has bool - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -315,10 +320,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceDelete(d *schema.ResourceData, outErr = sqlserverService.TerminateSqlserverInstance(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.TerminateSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -331,10 +336,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceDelete(d *schema.ResourceData, outErr = sqlserverService.DeleteSqlserverInstance(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = sqlserverService.DeleteSqlserverInstance(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -344,10 +349,10 @@ func resourceTencentCloudSqlserverReadonlyInstanceDelete(d *schema.ResourceData, return outErr } - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := sqlserverService.DescribeSqlserverInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if has { inErr = fmt.Errorf("delete SQL Server readonly instance %s fail, instance still exists from SDK DescribeSqlserverInstanceById", instanceId) diff --git a/tencentcloud/resource_tc_sqlserver_readonly_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance_test.go similarity index 87% rename from tencentcloud/resource_tc_sqlserver_readonly_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance_test.go index 42ca307684..61d80f4408 100644 --- a/tencentcloud/resource_tc_sqlserver_readonly_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_readonly_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package sqlserver_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,8 +19,8 @@ var testReadonlySqlserverInstanceResourceKey = testReadonlySqlserverInstanceReso func TestAccTencentCloudReadonlySqlserverInstanceResource(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: testAccCheckReadonlySqlserverInstanceDestroy, Steps: []resource.TestStep{ { @@ -74,10 +78,10 @@ func testAccCheckReadonlySqlserverInstanceDestroy(s *terraform.State) error { if rs.Type != testReadonlySqlserverInstanceResourceName { 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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverInstanceById(ctx, rs.Primary.ID) if err != nil { @@ -98,10 +102,10 @@ func testAccCheckReadonlySqlserverInstanceExists(n string) resource.TestCheckFun 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 := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSqlserverInstanceById(ctx, rs.Primary.ID) if err != nil { @@ -118,7 +122,7 @@ func testAccCheckReadonlySqlserverInstanceExists(n string) resource.TestCheckFun } } -const testAccReadonlySqlserverInstance string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccReadonlySqlserverInstance string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } @@ -162,7 +166,7 @@ resource "tencentcloud_sqlserver_readonly_instance" "example" { } ` -const testAccReadonlySqlserverInstanceUpdate string = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccReadonlySqlserverInstanceUpdate string = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance.go new file mode 100644 index 0000000000..7b51871da7 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance.go @@ -0,0 +1,151 @@ +package sqlserver + +import ( + "context" + "fmt" + "log" + "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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverRenewDBInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverRenewDBInstanceCreate, + Read: resourceTencentCloudSqlserverRenewDBInstanceRead, + Update: resourceTencentCloudSqlserverRenewDBInstanceUpdate, + Delete: resourceTencentCloudSqlserverRenewDBInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + "period": { + Optional: true, + Type: schema.TypeInt, + Default: 1, + Description: "How many months to renew, the value range is 1-48, the default is 1.", + }, + }, + } +} + +func resourceTencentCloudSqlserverRenewDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_db_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + instanceId string + period string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + if v, ok := d.GetOk("period"); ok { + period = strconv.Itoa(v.(int)) + } else { + period = "1" + } + + d.SetId(strings.Join([]string{instanceId, period}, tccommon.FILED_SP)) + + return resourceTencentCloudSqlserverRenewDBInstanceUpdate(d, meta) +} + +func resourceTencentCloudSqlserverRenewDBInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_db_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + instanceId := idSplit[0] + period := idSplit[1] + + renewDBInstance, err := service.DescribeSqlserverRenewDBInstanceById(ctx, instanceId) + if err != nil { + return err + } + + if renewDBInstance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverRenewDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if renewDBInstance.InstanceId != nil { + _ = d.Set("instance_id", renewDBInstance.InstanceId) + } + + tmpPeriod, _ := strconv.Atoi(period) + _ = d.Set("period", tmpPeriod) + + return nil +} + +func resourceTencentCloudSqlserverRenewDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_db_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewRenewDBInstanceRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + instanceId := idSplit[0] + + if v, ok := d.GetOk("period"); ok { + request.Period = helper.IntUint64(v.(int)) + } + + request.InstanceId = &instanceId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().RenewDBInstance(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver renewDBInstance failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverRenewDBInstanceRead(d, meta) +} + +func resourceTencentCloudSqlserverRenewDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_db_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_renew_db_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance_test.go similarity index 82% rename from tencentcloud/resource_tc_sqlserver_renew_db_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance_test.go index 46e5df56f4..31fe8c2695 100644 --- a/tencentcloud/resource_tc_sqlserver_renew_db_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_db_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverRenewDBInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverRenewDBInstance, @@ -29,7 +31,7 @@ func TestAccTencentCloudSqlserverRenewDBInstanceResource_basic(t *testing.T) { }) } -const testAccSqlserverRenewDBInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverRenewDBInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance.go new file mode 100644 index 0000000000..47c0e47380 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance.go @@ -0,0 +1,113 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" +) + +func ResourceTencentCloudSqlserverRenewPostpaidDBInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverRenewPostpaidDBInstanceCreate, + Read: resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead, + Update: resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate, + Delete: resourceTencentCloudSqlserverRenewPostpaidDBInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverRenewPostpaidDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate(d, meta) +} + +func resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + renewPostpaidDBInstance, err := service.DescribeSqlserverRenewPostpaidDBInstanceById(ctx, instanceId) + if err != nil { + return err + } + + if renewPostpaidDBInstance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverRenewPostpaidDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if renewPostpaidDBInstance.InstanceId != nil { + _ = d.Set("instance_id", renewPostpaidDBInstance.InstanceId) + } + + return nil +} + +func resourceTencentCloudSqlserverRenewPostpaidDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = sqlserver.NewRenewPostpaidDBInstanceRequest() + instanceId = d.Id() + ) + + request.InstanceId = &instanceId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().RenewPostpaidDBInstance(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver renewPostpaidDBInstance failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSqlserverRenewPostpaidDBInstanceRead(d, meta) +} + +func resourceTencentCloudSqlserverRenewPostpaidDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_renew_postpaid_db_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance_test.go similarity index 86% rename from tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance_test.go index 27f47eec20..a4876024f2 100644 --- a/tencentcloud/resource_tc_sqlserver_renew_postpaid_db_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_renew_postpaid_db_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,10 +13,10 @@ func TestAccTencentCloudSqlserverRenewPostpaidDBInstanceResource_basic(t *testin t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverRenewPostpaidDBInstance, @@ -31,7 +33,7 @@ func TestAccTencentCloudSqlserverRenewPostpaidDBInstanceResource_basic(t *testin }) } -const testAccSqlserverRenewPostpaidDBInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverRenewPostpaidDBInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance.go new file mode 100644 index 0000000000..cc70a94038 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance.go @@ -0,0 +1,154 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" +) + +func ResourceTencentCloudSqlserverRestartDBInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverRestartDBInstanceCreate, + Read: resourceTencentCloudSqlserverRestartDBInstanceRead, + Update: resourceTencentCloudSqlserverRestartDBInstanceUpdate, + Delete: resourceTencentCloudSqlserverRestartDBInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverRestartDBInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverRestartDBInstanceUpdate(d, meta) +} + +func resourceTencentCloudSqlserverRestartDBInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + ) + + restartDBInstance, err := service.DescribeSqlserverRestartDBInstanceById(ctx, instanceId) + if err != nil { + return err + } + + if restartDBInstance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SqlserverRestartDBInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if restartDBInstance.InstanceId != nil { + _ = d.Set("instance_id", restartDBInstance.InstanceId) + } + + return nil +} + +func resourceTencentCloudSqlserverRestartDBInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + request = sqlserver.NewRestartDBInstanceRequest() + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instanceId = d.Id() + flowId uint64 + ) + + request.InstanceId = &instanceId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().RestartDBInstance(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()) + } + + if result == nil { + e = fmt.Errorf("sqlserver business restartDBInstance not exists") + return resource.NonRetryableError(e) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update sqlserver restartDBInstance failed, reason:%+v", logId, err) + return err + } + + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil { + e = fmt.Errorf("sqlserver restartDBInstance instanceId %s flowId %d not exists", instanceId, flowId) + return resource.NonRetryableError(e) + } + + if *result.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("restart sqlserver restartDBInstance task status is running")) + } + + if *result.Status == SQLSERVER_TASK_SUCCESS { + return nil + } + + if *result.Status == SQLSERVER_TASK_FAIL { + return resource.NonRetryableError(fmt.Errorf("restart sqlserver restartDBInstance task status is failed")) + } + + e = fmt.Errorf("restart sqlserver restartDBInstance task status is %v, we won't wait for it finish", *result.Status) + return resource.NonRetryableError(e) + }) + + if err != nil { + log.Printf("[CRITAL]%s restart sqlserver restartDBInstance task fail, reason:%s\n ", logId, err.Error()) + return err + } + + return resourceTencentCloudSqlserverRestartDBInstanceRead(d, meta) +} + +func resourceTencentCloudSqlserverRestartDBInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restart_d_b_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_restart_db_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance_test.go similarity index 84% rename from tencentcloud/resource_tc_sqlserver_restart_db_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance_test.go index 294ff897b6..fa249d30a9 100644 --- a/tencentcloud/resource_tc_sqlserver_restart_db_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restart_db_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,10 +13,10 @@ func TestAccTencentCloudSqlserverRestartDBInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckSqlserverInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverRestartDBInstance, @@ -31,7 +33,7 @@ func TestAccTencentCloudSqlserverRestartDBInstanceResource_basic(t *testing.T) { }) } -const testAccSqlserverRestartDBInstance = defaultVpcSubnets + defaultSecurityGroupData + ` +const testAccSqlserverRestartDBInstance = tcacctest.DefaultVpcSubnets + tcacctest.DefaultSecurityGroupData + ` data "tencentcloud_availability_zones_by_product" "zones" { product = "sqlserver" } diff --git a/tencentcloud/resource_tc_sqlserver_restore_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance.go similarity index 78% rename from tencentcloud/resource_tc_sqlserver_restore_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance.go index 93454d7c4b..be197280c3 100644 --- a/tencentcloud/resource_tc_sqlserver_restore_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverRestoreInstance() *schema.Resource { +func ResourceTencentCloudSqlserverRestoreInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverRestoreInstanceCreate, Read: resourceTencentCloudSqlserverRestoreInstanceRead, @@ -76,8 +79,8 @@ func resourceTencentCloudSqlserverRestoreInstance() *schema.Resource { } func resourceTencentCloudSqlserverRestoreInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restore_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restore_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -106,25 +109,25 @@ func resourceTencentCloudSqlserverRestoreInstanceCreate(d *schema.ResourceData, } } - oldNameListStr := strings.Join(oldNameList, COMMA_SP) - newNameListStr := strings.Join(newNameList, COMMA_SP) + oldNameListStr := strings.Join(oldNameList, tccommon.COMMA_SP) + newNameListStr := strings.Join(newNameList, tccommon.COMMA_SP) - d.SetId(strings.Join([]string{instanceId, backupId, oldNameListStr, newNameListStr}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, backupId, oldNameListStr, newNameListStr}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverRestoreInstanceUpdate(d, meta) } func resourceTencentCloudSqlserverRestoreInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restore_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restore_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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, id is %s", d.Id()) } @@ -132,8 +135,8 @@ func resourceTencentCloudSqlserverRestoreInstanceRead(d *schema.ResourceData, me backupId := idSplit[1] oldNameListStr := idSplit[2] newNameListStr := idSplit[3] - oldNameList := strings.Split(oldNameListStr, COMMA_SP) - newNameList := strings.Split(newNameListStr, COMMA_SP) + oldNameList := strings.Split(oldNameListStr, tccommon.COMMA_SP) + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) allNameList := append(oldNameList, newNameList...) restoreInstance, err := service.DescribeSqlserverRestoreInstanceById(ctx, instanceId, allNameList) if err != nil { @@ -181,18 +184,18 @@ func resourceTencentCloudSqlserverRestoreInstanceRead(d *schema.ResourceData, me } func resourceTencentCloudSqlserverRestoreInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restore_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restore_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewRestoreInstanceRequest() flowId int64 ) - 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, id is %s", d.Id()) } @@ -217,10 +220,10 @@ func resourceTencentCloudSqlserverRestoreInstanceUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().RestoreInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().RestoreInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -234,10 +237,10 @@ func resourceTencentCloudSqlserverRestoreInstanceUpdate(d *schema.ResourceData, return err } - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCloneStatusByFlowId(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -270,22 +273,22 @@ func resourceTencentCloudSqlserverRestoreInstanceUpdate(d *schema.ResourceData, } func resourceTencentCloudSqlserverRestoreInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_restore_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_restore_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{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, id is %s", d.Id()) } instanceId := idSplit[0] newNameListStr := idSplit[3] - newNameList := strings.Split(newNameListStr, COMMA_SP) + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) if len(newNameList) == 0 { return nil diff --git a/tencentcloud/resource_tc_sqlserver_restore_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance_test.go similarity index 75% rename from tencentcloud/resource_tc_sqlserver_restore_instance_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance_test.go index e42ccabdbd..92f19b1c2c 100644 --- a/tencentcloud/resource_tc_sqlserver_restore_instance_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_restore_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver_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" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,10 +22,10 @@ func TestAccTencentCloudSqlserverRestoreInstanceResource_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) }, CheckDestroy: testAccCheckSqlserverRestoreDBDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccSqlserverRestoreInstance, startTime, endTime), @@ -39,22 +43,22 @@ func TestAccTencentCloudSqlserverRestoreInstanceResource_basic(t *testing.T) { } func testAccCheckSqlserverRestoreDBDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService := SqlserverService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_sqlserver_restore_instance" { 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("id is broken, id is %s", rs.Primary.ID) } instanceId := idSplit[0] newNameListStr := idSplit[3] - newNameList := strings.Split(newNameListStr, COMMA_SP) + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) for _, name := range newNameList { result, err := sqlserverService.DescribeSqlserverDBS(ctx, instanceId, name) diff --git a/tencentcloud/resource_tc_sqlserver_rollback_instance.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance.go similarity index 76% rename from tencentcloud/resource_tc_sqlserver_rollback_instance.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance.go index 68b27a13b4..bd1b0a016a 100644 --- a/tencentcloud/resource_tc_sqlserver_rollback_instance.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverRollbackInstance() *schema.Resource { +func ResourceTencentCloudSqlserverRollbackInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverRollbackInstanceCreate, Read: resourceTencentCloudSqlserverRollbackInstanceRead, @@ -75,8 +78,8 @@ func resourceTencentCloudSqlserverRollbackInstance() *schema.Resource { } func resourceTencentCloudSqlserverRollbackInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_rollback_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_rollback_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -105,25 +108,25 @@ func resourceTencentCloudSqlserverRollbackInstanceCreate(d *schema.ResourceData, } } - oldNameListStr := strings.Join(oldNameList, COMMA_SP) - newNameListStr := strings.Join(newNameList, COMMA_SP) + oldNameListStr := strings.Join(oldNameList, tccommon.COMMA_SP) + newNameListStr := strings.Join(newNameList, tccommon.COMMA_SP) - d.SetId(strings.Join([]string{instanceId, tmpTime, oldNameListStr, newNameListStr}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, tmpTime, oldNameListStr, newNameListStr}, tccommon.FILED_SP)) return resourceTencentCloudSqlserverRollbackInstanceUpdate(d, meta) } func resourceTencentCloudSqlserverRollbackInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_rollback_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_rollback_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{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, id is %s", d.Id()) } @@ -131,8 +134,8 @@ func resourceTencentCloudSqlserverRollbackInstanceRead(d *schema.ResourceData, m tmpTime := idSplit[1] oldNameListStr := idSplit[2] newNameListStr := idSplit[3] - oldNameList := strings.Split(oldNameListStr, COMMA_SP) - newNameList := strings.Split(newNameListStr, COMMA_SP) + oldNameList := strings.Split(oldNameListStr, tccommon.COMMA_SP) + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) allNameList := append(oldNameList, newNameList...) rollbackInstance, err := service.DescribeSqlserverRollbackInstanceById(ctx, instanceId, allNameList) if err != nil { @@ -179,19 +182,19 @@ func resourceTencentCloudSqlserverRollbackInstanceRead(d *schema.ResourceData, m } func resourceTencentCloudSqlserverRollbackInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_rollback_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_rollback_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = sqlserver.NewRollbackInstanceRequest() flowId uint64 tmpType uint64 ) - 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, id is %s", d.Id()) } @@ -219,10 +222,10 @@ func resourceTencentCloudSqlserverRollbackInstanceUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().RollbackInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().RollbackInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -236,10 +239,10 @@ func resourceTencentCloudSqlserverRollbackInstanceUpdate(d *schema.ResourceData, return err } - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -272,22 +275,22 @@ func resourceTencentCloudSqlserverRollbackInstanceUpdate(d *schema.ResourceData, } func resourceTencentCloudSqlserverRollbackInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_rollback_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_rollback_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService = SqlserverService{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, id is %s", d.Id()) } instanceId := idSplit[0] newNameListStr := idSplit[3] - newNameList := strings.Split(newNameListStr, COMMA_SP) + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) if len(newNameList) == 0 { return nil diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance_test.go new file mode 100644 index 0000000000..9bdc6c23f8 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_rollback_instance_test.go @@ -0,0 +1,93 @@ +package sqlserver_test + +import ( + "context" + "fmt" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcsqlserver "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/sqlserver" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixSqlserverRollbackInstanceResource_basic -v +func TestAccTencentCloudNeedFixSqlserverRollbackInstanceResource_basic(t *testing.T) { + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckSqlserverRollbackDBDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSqlserverRollbackInstance(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_rollback_instance.rollback_instance", "id"), + ), + }, + { + ResourceName: "tencentcloud_sqlserver_rollback_instance.rollback_instance", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckSqlserverRollbackDBDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sqlserverService := svcsqlserver.NewSqlserverService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_sqlserver_rollback_instance" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 4 { + return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) + } + + instanceId := idSplit[0] + newNameListStr := idSplit[3] + newNameList := strings.Split(newNameListStr, tccommon.COMMA_SP) + + for _, name := range newNameList { + result, err := sqlserverService.DescribeSqlserverDBS(ctx, instanceId, name) + if err != nil { + return err + } + + if result != nil { + return fmt.Errorf("SQL Server DB still exists") + } + } + } + + return nil +} + +const testAccSqlserverRollbackInstanceString = ` +resource "tencentcloud_sqlserver_rollback_instance" "rollback_instance" { + instance_id = "mssql-qelbzgwf" + time = "%s" + rename_restore { + old_name = "keep_pubsub_db" + new_name = "rollback_pubsub_db" + } + rename_restore { + old_name = "keep_pubsub_db2" + new_name = "rollback_pubsub_db2" + } +} +` + +func testAccSqlserverRollbackInstance() string { + var currentTime = time.Now().AddDate(0, 0, -1).Format("2006-01-02 15:04:05") + return fmt.Sprintf(testAccSqlserverRollbackInstanceString, currentTime) +} diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration.go new file mode 100644 index 0000000000..5f0d7e7672 --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration.go @@ -0,0 +1,128 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverStartBackupFullMigration() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverStartBackupFullMigrationCreate, + Read: resourceTencentCloudSqlserverStartBackupFullMigrationRead, + Delete: resourceTencentCloudSqlserverStartBackupFullMigrationDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ID of imported target instance.", + }, + "backup_migration_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Backup import task ID, returned by the CreateBackupMigration interface.", + }, + }, + } +} + +func resourceTencentCloudSqlserverStartBackupFullMigrationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = sqlserver.NewStartBackupMigrationRequest() + instanceId string + flowId uint64 + ) + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("backup_migration_id"); ok { + request.BackupMigrationId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().StartBackupMigration(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()) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s operate sqlserver startBackupFullMigration failed, reason:%+v", logId, err) + return err + } + + // wait + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil { + e = fmt.Errorf("sqlserver startBackupFullMigration instanceId %s flowId %d not exists", instanceId, flowId) + return resource.NonRetryableError(e) + } + + if *result.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver startBackupFullMigration task status is running")) + } + + if *result.Status == SQLSERVER_TASK_SUCCESS { + return nil + } + + if *result.Status == SQLSERVER_TASK_FAIL { + return resource.NonRetryableError(fmt.Errorf("sqlserver startBackupFullMigration task status is failed")) + } + + e = fmt.Errorf("sqlserver startBackupFullMigration task status is %v, we won't wait for it finish", *result.Status) + return resource.NonRetryableError(e) + }) + + if err != nil { + log.Printf("[CRITAL]%s sqlserver startBackupFullMigration task fail, reason:%s\n ", logId, err.Error()) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverStartBackupFullMigrationRead(d, meta) +} + +func resourceTencentCloudSqlserverStartBackupFullMigrationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSqlserverStartBackupFullMigrationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_full_migration.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_start_backup_full_migration_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration_test.go similarity index 81% rename from tencentcloud/resource_tc_sqlserver_start_backup_full_migration_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration_test.go index 908e009288..1ceb2e5322 100644 --- a/tencentcloud/resource_tc_sqlserver_start_backup_full_migration_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_full_migration_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudNeedFixSqlserverStartBackupFullMigrationResource_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: testAccSqlserverStartBackupFullMigration, diff --git a/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration.go new file mode 100644 index 0000000000..0cfa6d08db --- /dev/null +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration.go @@ -0,0 +1,138 @@ +package sqlserver + +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" + sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSqlserverStartBackupIncrementalMigration() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSqlserverStartBackupIncrementalMigrationCreate, + Read: resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead, + Delete: resourceTencentCloudSqlserverStartBackupIncrementalMigrationDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ID of imported target instance.", + }, + "backup_migration_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Backup import task ID, returned by the CreateBackupMigration interface.", + }, + "incremental_migration_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Incremental backup import task ID.", + }, + }, + } +} + +func resourceTencentCloudSqlserverStartBackupIncrementalMigrationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SqlserverService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = sqlserver.NewStartIncrementalMigrationRequest() + instanceId string + flowId uint64 + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("backup_migration_id"); ok { + request.BackupMigrationId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("incremental_migration_id"); ok { + request.IncrementalMigrationId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().StartIncrementalMigration(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()) + } + + flowId = *result.Response.FlowId + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s operate sqlserver startBackupIncrementalMigration failed, reason:%+v", logId, err) + return err + } + + // wait + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeCloneStatusByFlowId(ctx, int64(flowId)) + if e != nil { + return tccommon.RetryError(e) + } + + if result == nil { + e = fmt.Errorf("sqlserver startBackupIncrementalMigration instanceId %s flowId %d not exists", instanceId, flowId) + return resource.NonRetryableError(e) + } + + if *result.Status == SQLSERVER_TASK_RUNNING { + return resource.RetryableError(fmt.Errorf("sqlserver startBackupIncrementalMigration task status is running")) + } + + if *result.Status == SQLSERVER_TASK_SUCCESS { + return nil + } + + if *result.Status == SQLSERVER_TASK_FAIL { + return resource.NonRetryableError(fmt.Errorf("sqlserver startBackupIncrementalMigration task status is failed")) + } + + e = fmt.Errorf("sqlserver startBackupIncrementalMigration task status is %v, we won't wait for it finish", *result.Status) + return resource.NonRetryableError(e) + }) + + if err != nil { + log.Printf("[CRITAL]%s sqlserver startBackupIncrementalMigration task fail, reason:%s\n ", logId, err.Error()) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead(d, meta) +} + +func resourceTencentCloudSqlserverStartBackupIncrementalMigrationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSqlserverStartBackupIncrementalMigrationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_backup_incremental_migration.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration_test.go similarity index 83% rename from tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration_test.go index 8050bc3b2b..b83fcb39ba 100644 --- a/tencentcloud/resource_tc_sqlserver_start_backup_incremental_migration_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_backup_incremental_migration_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudNeedFixSqlserverStartBackupIncrementalMigrationResource_ t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSqlserverStartBackupIncrementalMigration, diff --git a/tencentcloud/resource_tc_sqlserver_start_xevent.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent.go similarity index 76% rename from tencentcloud/resource_tc_sqlserver_start_xevent.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent.go index d7b1412032..d594c8f158 100644 --- a/tencentcloud/resource_tc_sqlserver_start_xevent.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent.go @@ -1,15 +1,18 @@ -package tencentcloud +package sqlserver 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" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSqlserverStartXevent() *schema.Resource { +func ResourceTencentCloudSqlserverStartXevent() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSqlserverStartXeventCreate, Read: resourceTencentCloudSqlserverStartXeventRead, @@ -47,11 +50,11 @@ func resourceTencentCloudSqlserverStartXevent() *schema.Resource { } func resourceTencentCloudSqlserverStartXeventCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_xevent.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_xevent.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = sqlserver.NewStartInstanceXEventRequest() instanceId string ) @@ -74,10 +77,10 @@ func resourceTencentCloudSqlserverStartXeventCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSqlserverClient().StartInstanceXEvent(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().StartInstanceXEvent(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudSqlserverStartXeventCreate(d *schema.ResourceData, meta } func resourceTencentCloudSqlserverStartXeventRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_xevent.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_xevent.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSqlserverStartXeventDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_sqlserver_start_xevent.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_start_xevent.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_sqlserver_start_xevent_test.go b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent_test.go similarity index 91% rename from tencentcloud/resource_tc_sqlserver_start_xevent_test.go rename to tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent_test.go index 81c4f56c7f..d2d37d0284 100644 --- a/tencentcloud/resource_tc_sqlserver_start_xevent_test.go +++ b/tencentcloud/services/sqlserver/resource_tc_sqlserver_start_xevent_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package sqlserver_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 TestAccTencentCloudSqlserverStartXeventResource_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: testAccSqlserverStartXevent, diff --git a/tencentcloud/service_tencentcloud_sqlserver.go b/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go similarity index 94% rename from tencentcloud/service_tencentcloud_sqlserver.go rename to tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go index 8d5dc1661e..0980fa0e18 100644 --- a/tencentcloud/service_tencentcloud_sqlserver.go +++ b/tencentcloud/services/sqlserver/service_tencentcloud_sqlserver.go @@ -1,4 +1,4 @@ -package tencentcloud +package sqlserver import ( "context" @@ -7,21 +7,28 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/pkg/errors" SDKErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328" + "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 NewSqlserverService(client *connectivity.TencentCloudClient) SqlserverService { + return SqlserverService{client: client} +} + type SqlserverService struct { client *connectivity.TencentCloudClient } func (me *SqlserverService) DescribeZones(ctx context.Context) (zoneInfoList []*sqlserver.ZoneInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeZonesRequest() defer func() { @@ -32,12 +39,12 @@ func (me *SqlserverService) DescribeZones(ctx context.Context) (zoneInfoList []* }() var response *sqlserver.DescribeZonesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseSqlserverClient().DescribeZones(request) if e != nil { log.Printf("[CRITAL]%s DescribeZones fail, reason:%s\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -53,7 +60,7 @@ func (me *SqlserverService) DescribeZones(ctx context.Context) (zoneInfoList []* } func (me *SqlserverService) DescribeProductConfig(ctx context.Context, zone string) (specInfoList []*sqlserver.SpecInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeProductConfigRequest() request.Zone = &zone @@ -65,12 +72,12 @@ func (me *SqlserverService) DescribeProductConfig(ctx context.Context, zone stri }() var response *sqlserver.DescribeProductConfigResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseSqlserverClient().DescribeProductConfig(request) if e != nil { log.Printf("[CRITAL]%s DescribeProductConfig fail, reason:%s\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -86,7 +93,7 @@ func (me *SqlserverService) DescribeProductConfig(ctx context.Context, zone stri } func (me *SqlserverService) CreateSqlserverInstance(ctx context.Context, request *sqlserver.CreateDBInstancesRequest) (instanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason[%s]", logId, request.GetAction(), errRet.Error()) @@ -120,7 +127,7 @@ func (me *SqlserverService) CreateSqlserverInstance(ctx context.Context, request } func (me *SqlserverService) ModifySqlserverInstanceName(ctx context.Context, instanceId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyDBInstanceNameRequest() request.InstanceId = &instanceId request.InstanceName = &name @@ -136,7 +143,7 @@ func (me *SqlserverService) ModifySqlserverInstanceName(ctx context.Context, ins } func (me *SqlserverService) ModifySqlserverInstanceProjectId(ctx context.Context, instanceId string, projectId int) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyDBInstanceProjectRequest() request.InstanceIdSet = []*string{&instanceId} request.ProjectId = helper.IntInt64(projectId) @@ -152,7 +159,7 @@ func (me *SqlserverService) ModifySqlserverInstanceProjectId(ctx context.Context } func (me *SqlserverService) UpgradeSqlserverInstance(ctx context.Context, instanceId string, memory, storage, autoVoucher int, voucherIds []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewUpgradeDBInstanceRequest() request.InstanceId = &instanceId request.Memory = helper.IntInt64(memory) @@ -178,10 +185,10 @@ func (me *SqlserverService) UpgradeSqlserverInstance(ctx context.Context, instan startPending := false //check status not expanding - errRet = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := me.DescribeSqlserverInstanceById(ctx, instanceId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return resource.NonRetryableError(fmt.Errorf("cannot find SQL Server instance %s", instanceId)) @@ -199,7 +206,7 @@ func (me *SqlserverService) UpgradeSqlserverInstance(ctx context.Context, instan } func (me *SqlserverService) RemoveSecurityGroup(ctx context.Context, instanceId string, securityGroupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDisassociateSecurityGroupsRequest() request.InstanceIdSet = []*string{&instanceId} request.SecurityGroupId = &securityGroupId @@ -217,7 +224,7 @@ func (me *SqlserverService) RemoveSecurityGroup(ctx context.Context, instanceId } func (me *SqlserverService) AddSecurityGroup(ctx context.Context, instanceId string, securityGroupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewAssociateSecurityGroupsRequest() request.InstanceIdSet = []*string{&instanceId} request.SecurityGroupId = &securityGroupId @@ -235,7 +242,7 @@ func (me *SqlserverService) AddSecurityGroup(ctx context.Context, instanceId str } func (me *SqlserverService) ModifySqlserverInstanceMaintenanceSpan(ctx context.Context, instanceId string, weekSet []int, startTime string, timeSpan int) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyMaintenanceSpanRequest() request.InstanceId = &instanceId if len(weekSet) > 0 { @@ -263,7 +270,7 @@ func (me *SqlserverService) ModifySqlserverInstanceMaintenanceSpan(ctx context.C } func (me *SqlserverService) TerminateSqlserverInstance(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewTerminateDBInstanceRequest() request.InstanceIdSet = []*string{&instanceId} defer func() { @@ -278,7 +285,7 @@ func (me *SqlserverService) TerminateSqlserverInstance(ctx context.Context, inst } func (me *SqlserverService) DeleteSqlserverInstance(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteDBInstanceRequest() request.InstanceId = &instanceId defer func() { @@ -293,7 +300,7 @@ func (me *SqlserverService) DeleteSqlserverInstance(ctx context.Context, instanc } func (me *SqlserverService) DescribeSqlserverInstances(ctx context.Context, instanceId, instanceName string, projectId int, vpcId, subnetId string, netType int) (instanceList []*sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() defer func() { if errRet != nil { @@ -365,7 +372,7 @@ func (me *SqlserverService) DescribeSqlserverInstanceById(ctx context.Context, i } func (me *SqlserverService) DescribeMaintenanceSpan(ctx context.Context, instanceId string) (weekSet []int, startTime string, timeSpan int, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeMaintenanceSpanRequest() request.InstanceId = &instanceId defer func() { @@ -394,7 +401,7 @@ func (me *SqlserverService) DescribeMaintenanceSpan(ctx context.Context, instanc } func (me *SqlserverService) DescribeInstanceSecurityGroups(ctx context.Context, instanceId string) (securityGroups []string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBSecurityGroupsRequest() request.InstanceId = &instanceId defer func() { @@ -421,7 +428,7 @@ func (me *SqlserverService) DescribeInstanceSecurityGroups(ctx context.Context, } func (me *SqlserverService) DescribeSqlserverBackups(ctx context.Context, instanceId, backupName string, startTime string, endTime string) (backupList []*sqlserver.Backup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeBackupsRequest() defer func() { if errRet != nil { @@ -460,7 +467,7 @@ func (me *SqlserverService) DescribeSqlserverBackups(ctx context.Context, instan } func (me *SqlserverService) DescribeReadonlyGroupList(ctx context.Context, instanceId string) (groupList []*sqlserver.ReadOnlyGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeReadOnlyGroupListRequest() request.InstanceId = &instanceId defer func() { @@ -485,7 +492,7 @@ func (me *SqlserverService) DescribeReadonlyGroupList(ctx context.Context, insta } func (me *SqlserverService) CreateSqlserverReadonlyInstance(ctx context.Context, request *sqlserver.CreateReadOnlyDBInstancesRequest) (instanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason[%s]", logId, request.GetAction(), errRet.Error()) @@ -521,7 +528,7 @@ func (me *SqlserverService) CreateSqlserverReadonlyInstance(ctx context.Context, } func (me *SqlserverService) DescribeReadonlyGroupListByReadonlyInstanceId(ctx context.Context, instanceId string) (readonlyInstance *sqlserver.DescribeReadOnlyGroupByReadOnlyInstanceResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeReadOnlyGroupByReadOnlyInstanceRequest() request.InstanceId = &instanceId defer func() { @@ -545,7 +552,7 @@ func (me *SqlserverService) DescribeReadonlyGroupListByReadonlyInstanceId(ctx co } func (me *SqlserverService) CreateSqlserverAccount(ctx context.Context, instanceId string, userName string, password string, remark string, isAdmin bool) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewCreateAccountRequest() defer func() { if errRet != nil { @@ -580,7 +587,7 @@ func (me *SqlserverService) CreateSqlserverAccount(ctx context.Context, instance } func (me *SqlserverService) DescribeSqlserverAccounts(ctx context.Context, instanceId string) (accounts []*sqlserver.AccountDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeAccountsRequest() defer func() { if errRet != nil { @@ -640,7 +647,7 @@ func (me *SqlserverService) DescribeSqlserverAccountById(ctx context.Context, in } func (me *SqlserverService) ModifySqlserverAccountRemark(ctx context.Context, instanceId string, userName string, remark string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyAccountRemarkRequest() request.InstanceId = &instanceId request.Accounts = []*sqlserver.AccountRemark{{UserName: &userName, Remark: &remark}} @@ -656,7 +663,7 @@ func (me *SqlserverService) ModifySqlserverAccountRemark(ctx context.Context, in } func (me *SqlserverService) ResetSqlserverAccountPassword(ctx context.Context, instanceId string, userName string, password string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewResetAccountPasswordRequest() request.InstanceId = &instanceId request.Accounts = []*sqlserver.AccountPassword{{UserName: &userName, Password: &password}} @@ -674,13 +681,13 @@ func (me *SqlserverService) ResetSqlserverAccountPassword(ctx context.Context, i } //check status not resetting - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := me.DescribeSqlserverAccountById(ctx, instanceId, userName) if err != nil { return resource.NonRetryableError(errors.WithStack(err)) } if !has { - return resource.NonRetryableError(fmt.Errorf("cannot find SQL Server account %s%s%s", instanceId, FILED_SP, userName)) + return resource.NonRetryableError(fmt.Errorf("cannot find SQL Server account %s%s%s", instanceId, tccommon.FILED_SP, userName)) } if int(*instance.Status) == 4 { return resource.RetryableError(fmt.Errorf("resetting , SQL Server instance ID %s, name %s, status %d.... ", instanceId, userName, *instance.Status)) @@ -693,7 +700,7 @@ func (me *SqlserverService) ResetSqlserverAccountPassword(ctx context.Context, i } func (me *SqlserverService) DeleteSqlserverAccount(ctx context.Context, instanceId string, userName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteAccountRequest() request.UserNames = []*string{&userName} request.InstanceId = &instanceId @@ -715,7 +722,7 @@ func (me *SqlserverService) DeleteSqlserverAccount(ctx context.Context, instance } //check status not deleting - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := me.DescribeSqlserverAccountById(ctx, instanceId, userName) if err != nil { return resource.NonRetryableError(errors.WithStack(err)) @@ -734,7 +741,7 @@ func (me *SqlserverService) DeleteSqlserverAccount(ctx context.Context, instance } func (me *SqlserverService) ModifyAccountDBAttachment(ctx context.Context, instanceId, accountName, dbName, privilege string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyAccountPrivilegeRequest() request.InstanceId = &instanceId request.Accounts = []*sqlserver.AccountPrivilegeModifyInfo{{UserName: &accountName, DBPrivileges: []*sqlserver.DBPrivilegeModifyInfo{{DBName: &dbName, Privilege: &privilege}}}} @@ -757,7 +764,7 @@ func (me *SqlserverService) ModifyAccountDBAttachment(ctx context.Context, insta } //check db exists - _, has, err = me.DescribeDBDetailsById(ctx, fmt.Sprintf("%s%s%s", instanceId, FILED_SP, dbName)) + _, has, err = me.DescribeDBDetailsById(ctx, fmt.Sprintf("%s%s%s", instanceId, tccommon.FILED_SP, dbName)) if err != nil { return err } @@ -847,7 +854,7 @@ func (me *SqlserverService) DescribeAccountDBAttachmentById(ctx context.Context, } func (me *SqlserverService) GetInfoFromDeal(ctx context.Context, dealId string, timeout ...time.Duration) (instanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeOrdersRequest() request.DealNames = []*string{&dealId} defer func() { @@ -861,7 +868,7 @@ func (me *SqlserverService) GetInfoFromDeal(ctx context.Context, dealId string, if timeout != nil { retryTimeout = timeout[0] } else { - retryTimeout = readRetryTimeout * 20 + retryTimeout = tccommon.ReadRetryTimeout * 20 } outErr := resource.Retry(retryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) @@ -904,7 +911,7 @@ func (me *SqlserverService) GetInfoFromDeal(ctx context.Context, dealId string, } func (me *SqlserverService) WaitForTaskFinish(ctx context.Context, flowId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeFlowStatusRequest() request.FlowId = &flowId @@ -915,7 +922,7 @@ func (me *SqlserverService) WaitForTaskFinish(ctx context.Context, flowId int64) } }() - errRet = resource.Retry(6*writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { taskResponse, err := me.client.UseSqlserverClient().DescribeFlowStatus(request) ratelimit.Check(request.GetAction()) if err != nil { @@ -932,7 +939,7 @@ func (me *SqlserverService) WaitForTaskFinish(ctx context.Context, flowId int64) } func (me *SqlserverService) CreateSqlserverDB(ctx context.Context, instanceID string, dbname string, charset string, remark string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewCreateDBRequest() // set instance id @@ -955,12 +962,12 @@ func (me *SqlserverService) CreateSqlserverDB(ctx context.Context, instanceID st }() var response *sqlserver.CreateDBResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseSqlserverClient().CreateDB(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s\n", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -977,7 +984,7 @@ func (me *SqlserverService) CreateSqlserverDB(ctx context.Context, instanceID st } func (me *SqlserverService) DescribeDBsOfInstance(ctx context.Context, instanceId string) (instanceDBList []*sqlserver.DBDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsRequest() defer func() { if errRet != nil { @@ -994,12 +1001,12 @@ func (me *SqlserverService) DescribeDBsOfInstance(ctx context.Context, instanceI request.Offset = &offset request.Limit = &limit var response *sqlserver.DescribeDBsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseSqlserverClient().DescribeDBs(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s\n", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -1027,7 +1034,7 @@ func (me *SqlserverService) DescribeDBsOfInstance(ctx context.Context, instanceI } func (me *SqlserverService) DescribeDBDetailsById(ctx context.Context, dbId string) (dbInfo *sqlserver.DBDetail, has bool, errRet error) { - idItem := strings.Split(dbId, FILED_SP) + idItem := strings.Split(dbId, tccommon.FILED_SP) if len(idItem) < 2 { errRet = fmt.Errorf("broken ID of SQLServer DB %s", dbId) return @@ -1057,7 +1064,7 @@ func (me *SqlserverService) DescribeDBDetailsById(ctx context.Context, dbId stri } func (me *SqlserverService) ModifySqlserverDBRemark(ctx context.Context, instanceId string, dbName string, remark string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyDBRemarkRequest() request.InstanceId = &instanceId request.DBRemarks = []*sqlserver.DBRemark{{Name: &dbName, Remark: &remark}} @@ -1067,12 +1074,12 @@ func (me *SqlserverService) ModifySqlserverDBRemark(ctx context.Context, instanc } }() - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, e := me.client.UseSqlserverClient().ModifyDBRemark(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s\n", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -1084,7 +1091,7 @@ func (me *SqlserverService) ModifySqlserverDBRemark(ctx context.Context, instanc } func (me *SqlserverService) DeleteSqlserverDB(ctx context.Context, instanceId string, names []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteDBRequest() request.InstanceId = &instanceId request.Names = names @@ -1095,12 +1102,12 @@ func (me *SqlserverService) DeleteSqlserverDB(ctx context.Context, instanceId st }() var response *sqlserver.DeleteDBResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseSqlserverClient().DeleteDB(request) if e != nil { log.Printf("[CRITAL]%s %s fail, reason:%s", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -1116,7 +1123,7 @@ func (me *SqlserverService) DeleteSqlserverDB(ctx context.Context, instanceId st } func (me *SqlserverService) CreateSqlserverPublishSubscribe(ctx context.Context, publishInstanceId, subscribeInstanceId, publishSubscribeName string, databaseTuples []interface{}) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewCreatePublishSubscribeRequest() defer func() { if errRet != nil { @@ -1132,7 +1139,7 @@ func (me *SqlserverService) CreateSqlserverPublishSubscribe(ctx context.Context, } var response *sqlserver.CreatePublishSubscribeResponse - errRet = resource.Retry(2*writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(2*tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseSqlserverClient().CreatePublishSubscribe(request) if errRet != nil { @@ -1193,7 +1200,7 @@ func (me *SqlserverService) DescribeSqlserverPublishSubscribeById(ctx context.Co } func (me *SqlserverService) DescribeSqlserverPublishSubscribes(ctx context.Context, paramMap map[string]interface{}) (publishSubscribeList []*sqlserver.PublishSubscribe, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribePublishSubscribeRequest() defer func() { if errRet != nil { @@ -1233,12 +1240,12 @@ func (me *SqlserverService) DescribeSqlserverPublishSubscribes(ctx context.Conte ratelimit.Check(request.GetAction()) var response *sqlserver.DescribePublishSubscribeResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseSqlserverClient().DescribePublishSubscribe(request) if err != nil { log.Printf("[CRITAL]%s DescribePublishSubscribe fail, reason:%s", logId, err.Error()) - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1260,7 +1267,7 @@ func (me *SqlserverService) DescribeSqlserverPublishSubscribes(ctx context.Conte return } func (me *SqlserverService) ModifyPublishSubscribeName(ctx context.Context, id uint64, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewModifyPublishSubscribeNameRequest() defer func() { if errRet != nil { @@ -1269,12 +1276,12 @@ func (me *SqlserverService) ModifyPublishSubscribeName(ctx context.Context, id u }() request.PublishSubscribeId = &id request.PublishSubscribeName = &name - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, e := me.client.UseSqlserverClient().ModifyPublishSubscribeName(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -1282,7 +1289,7 @@ func (me *SqlserverService) ModifyPublishSubscribeName(ctx context.Context, id u } func (me *SqlserverService) DeletePublishSubscribe(ctx context.Context, publishSubscribe *sqlserver.PublishSubscribe, deleteDatabaseTuples []*sqlserver.DatabaseTuple) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeletePublishSubscribeRequest() defer func() { if errRet != nil { @@ -1293,12 +1300,12 @@ func (me *SqlserverService) DeletePublishSubscribe(ctx context.Context, publishS request.DatabaseTupleSet = deleteDatabaseTuples var response *sqlserver.DeletePublishSubscribeResponse var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseSqlserverClient().DeletePublishSubscribe(request) if err != nil { log.Printf("[CRITAL]%s %s fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1311,7 +1318,7 @@ func (me *SqlserverService) DeletePublishSubscribe(ctx context.Context, publishS } func (me *SqlserverService) RecycleDBInstance(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewRecycleDBInstanceRequest() request.InstanceId = &instanceId defer func() { @@ -1320,7 +1327,7 @@ func (me *SqlserverService) RecycleDBInstance(ctx context.Context, instanceId st } }() var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, err = me.client.UseSqlserverClient().RecycleDBInstance(request) if err != nil { @@ -1329,7 +1336,7 @@ func (me *SqlserverService) RecycleDBInstance(ctx context.Context, instanceId st if code == "InvalidAction" { return nil } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1340,7 +1347,7 @@ func (me *SqlserverService) RecycleDBInstance(ctx context.Context, instanceId st } func (me *SqlserverService) CreateSqlserverBasicInstance(ctx context.Context, paramMap map[string]interface{}, weekSet []int, voucherIds, securityGroups []string) (instanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewCreateBasicDBInstancesRequest() defer func() { if errRet != nil { @@ -1426,7 +1433,7 @@ func (me *SqlserverService) CreateSqlserverBasicInstance(ctx context.Context, pa } func (me *SqlserverService) UpgradeSqlserverBasicInstance(ctx context.Context, instanceId string, memory int, storage, cpu, autoVoucher int, voucherIds []string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewUpgradeDBInstanceRequest() request.InstanceId = &instanceId request.Memory = helper.IntInt64(memory) @@ -1453,10 +1460,10 @@ func (me *SqlserverService) UpgradeSqlserverBasicInstance(ctx context.Context, i startPending := false - errRet = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := me.DescribeSqlserverInstanceById(ctx, instanceId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return resource.NonRetryableError(fmt.Errorf("cannot find SQL Server basic instance %s", instanceId)) @@ -1475,7 +1482,7 @@ func (me *SqlserverService) UpgradeSqlserverBasicInstance(ctx context.Context, i } func (me *SqlserverService) NewModifyDBInstanceRenewFlag(ctx context.Context, instanceId string, renewFlag int) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) var instanceRenewInfo = make([]*sqlserver.InstanceRenewInfo, 1) instanceRenewInfo[0] = &sqlserver.InstanceRenewInfo{ InstanceId: &instanceId, @@ -1497,7 +1504,7 @@ func (me *SqlserverService) NewModifyDBInstanceRenewFlag(ctx context.Context, in } func (me *SqlserverService) DescribeSqlserverMigrationById(ctx context.Context, migrateId string) (migration *sqlserver.DescribeMigrationDetailResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeMigrationDetailRequest() request.MigrateId = helper.StrToUint64Point(migrateId) @@ -1522,7 +1529,7 @@ func (me *SqlserverService) DescribeSqlserverMigrationById(ctx context.Context, } func (me *SqlserverService) DeleteSqlserverMigrationById(ctx context.Context, migrateId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteMigrationRequest() request.MigrateId = helper.StrToUint64Point(migrateId) @@ -1547,7 +1554,7 @@ func (me *SqlserverService) DeleteSqlserverMigrationById(ctx context.Context, mi func (me *SqlserverService) DescribeSqlserverMigrationsByFilter(ctx context.Context, param map[string]interface{}) (migrateTasks []*sqlserver.MigrateTask, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeMigrationsRequest() ) @@ -1608,7 +1615,7 @@ func (me *SqlserverService) DescribeSqlserverMigrationsByFilter(ctx context.Cont } func (me *SqlserverService) DescribeSqlserverConfigBackupStrategyById(ctx context.Context, instanceId string) (configBackupStrategy *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -1637,7 +1644,7 @@ func (me *SqlserverService) DescribeSqlserverConfigBackupStrategyById(ctx contex } func (me *SqlserverService) DescribeSqlserverBackupByBackupId(ctx context.Context, instanceId string, startTime string, endTime string, backupId uint64) (backupList []*sqlserver.Backup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeBackupsRequest() defer func() { if errRet != nil { @@ -1676,7 +1683,7 @@ func (me *SqlserverService) DescribeSqlserverBackupByBackupId(ctx context.Contex func (me *SqlserverService) DescribeBackupByFlowId(ctx context.Context, instanceId, flowId string) (BackupInfo *sqlserver.DescribeBackupByFlowIdResponse, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeBackupByFlowIdRequest() ) @@ -1702,7 +1709,7 @@ func (me *SqlserverService) DescribeBackupByFlowId(ctx context.Context, instance } func (me *SqlserverService) DescribeSqlserverBackupsById(ctx context.Context, instanceId, groupId string) (generalBackups *sqlserver.BackupFile, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeBackupFilesRequest() request.InstanceId = &instanceId @@ -1732,7 +1739,7 @@ func (me *SqlserverService) DescribeSqlserverBackupsById(ctx context.Context, in } func (me *SqlserverService) DeleteSqlserverGeneralBackupsById(ctx context.Context, instanceId, backupName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewRemoveBackupsRequest() request.InstanceId = &instanceId @@ -1757,7 +1764,7 @@ func (me *SqlserverService) DeleteSqlserverGeneralBackupsById(ctx context.Contex func (me *SqlserverService) DescribeSqlserverBackupCommand(ctx context.Context, param map[string]interface{}) (datasourceBackupCommand []*sqlserver.DescribeBackupCommandResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeBackupCommandRequest() ) @@ -1799,7 +1806,7 @@ func (me *SqlserverService) DescribeSqlserverBackupCommand(ctx context.Context, func (me *SqlserverService) DescribeCloneStatusByFlowId(ctx context.Context, flowId int64) (cloneStatus *sqlserver.DescribeFlowStatusResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeFlowStatusRequest() ) @@ -1824,7 +1831,7 @@ func (me *SqlserverService) DescribeCloneStatusByFlowId(ctx context.Context, flo } func (me *SqlserverService) DescribeSqlserverGeneralCloneById(ctx context.Context, instanceId string) (generalCommunication []*sqlserver.DbNormalDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsNormalRequest() request.InstanceId = &instanceId @@ -1852,7 +1859,7 @@ func (me *SqlserverService) DescribeSqlserverGeneralCloneById(ctx context.Contex } func (me *SqlserverService) DeleteSqlserverGeneralCloneDB(ctx context.Context, instanceId, dbName string) (deleteResp *sqlserver.DeleteDBResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteDBRequest() request.InstanceId = &instanceId request.Names = []*string{&dbName} @@ -1876,7 +1883,7 @@ func (me *SqlserverService) DeleteSqlserverGeneralCloneDB(ctx context.Context, i } func (me *SqlserverService) DescribeSqlserverFullBackupMigrationById(ctx context.Context, instanceId, backupMigrationId string) (fullBackupMigration *sqlserver.Migration, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeBackupMigrationRequest() request.InstanceId = &instanceId request.BackupMigrationId = &backupMigrationId @@ -1905,7 +1912,7 @@ func (me *SqlserverService) DescribeSqlserverFullBackupMigrationById(ctx context } func (me *SqlserverService) DeleteSqlserverFullBackupMigrationById(ctx context.Context, instanceId, backupMigrationId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteBackupMigrationRequest() request.InstanceId = &instanceId request.BackupMigrationId = &backupMigrationId @@ -1930,7 +1937,7 @@ func (me *SqlserverService) DeleteSqlserverFullBackupMigrationById(ctx context.C } func (me *SqlserverService) DescribeSqlserverIncreBackupMigrationById(ctx context.Context, instanceId, backupMigrationId, incrementalMigrationId string) (increBackupMigration *sqlserver.Migration, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeIncrementalMigrationRequest() request.InstanceId = &instanceId request.BackupMigrationId = &backupMigrationId @@ -1959,7 +1966,7 @@ func (me *SqlserverService) DescribeSqlserverIncreBackupMigrationById(ctx contex } func (me *SqlserverService) DeleteSqlserverIncreBackupMigrationById(ctx context.Context, instanceId, backupMigrationId, incrementalMigrationId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteIncrementalMigrationRequest() request.InstanceId = &instanceId @@ -1986,7 +1993,7 @@ func (me *SqlserverService) DeleteSqlserverIncreBackupMigrationById(ctx context. } func (me *SqlserverService) DescribeSqlserverBusinessIntelligenceFileById(ctx context.Context, instanceId, fileName string) (businessIntelligenceFile *sqlserver.BusinessIntelligenceFile, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeBusinessIntelligenceFileRequest() request.InstanceId = &instanceId @@ -2016,7 +2023,7 @@ func (me *SqlserverService) DescribeSqlserverBusinessIntelligenceFileById(ctx co } func (me *SqlserverService) DeleteSqlserverBusinessIntelligenceFileById(ctx context.Context, instanceId, fileName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteBusinessIntelligenceFileRequest() request.InstanceId = &instanceId @@ -2041,7 +2048,7 @@ func (me *SqlserverService) DeleteSqlserverBusinessIntelligenceFileById(ctx cont } func (me *SqlserverService) DescribeSqlserverBusinessIntelligenceInstanceById(ctx context.Context, instanceId string) (businessIntelligenceInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2070,7 +2077,7 @@ func (me *SqlserverService) DescribeSqlserverBusinessIntelligenceInstanceById(ct } func (me *SqlserverService) DescribeMaintenanceSpanById(ctx context.Context, instanceId string) (maintenanceSpan *sqlserver.DescribeMaintenanceSpanResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeMaintenanceSpanRequest() request.InstanceId = &instanceId @@ -2100,7 +2107,7 @@ func (me *SqlserverService) DescribeMaintenanceSpanById(ctx context.Context, ins } func (me *SqlserverService) TerminateSqlserverInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewTerminateDBInstanceRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2123,7 +2130,7 @@ func (me *SqlserverService) TerminateSqlserverInstanceById(ctx context.Context, } func (me *SqlserverService) DeleteSqlserverInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteDBInstanceRequest() request.InstanceId = &instanceId @@ -2146,7 +2153,7 @@ func (me *SqlserverService) DeleteSqlserverInstanceById(ctx context.Context, ins } func (me *SqlserverService) DescribeSqlserverGeneralCommunicationById(ctx context.Context, instanceId string) (generalCommunication *sqlserver.InterInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstanceInterRequest() request.InstanceId = &instanceId @@ -2177,7 +2184,7 @@ func (me *SqlserverService) DescribeSqlserverGeneralCommunicationById(ctx contex } func (me *SqlserverService) DeleteSqlserverGeneralCommunicationById(ctx context.Context, instanceId string) (flowId int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewCloseInterCommunicationRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2205,7 +2212,7 @@ func (me *SqlserverService) DeleteSqlserverGeneralCommunicationById(ctx context. func (me *SqlserverService) DescribeSqlserverBackupUploadSizeByFilter(ctx context.Context, param map[string]interface{}) (datasourceBackupUploadSize []*sqlserver.CosUploadBackupFile, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeBackupUploadSizeRequest() ) @@ -2247,7 +2254,7 @@ func (me *SqlserverService) DescribeSqlserverBackupUploadSizeByFilter(ctx contex func (me *SqlserverService) DescribeSqlserverCrossRegionZoneByFilter(ctx context.Context, param map[string]interface{}) (datasourceCrossRegionZone *sqlserver.DescribeCrossRegionZoneResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeCrossRegionZoneRequest() ) @@ -2284,7 +2291,7 @@ func (me *SqlserverService) DescribeSqlserverCrossRegionZoneByFilter(ctx context func (me *SqlserverService) DescribeSqlserverDatasourceDBCharsetsByFilter(ctx context.Context, param map[string]interface{}) (databaseCharsets []*string, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeDBCharsetsRequest() ) @@ -2319,7 +2326,7 @@ func (me *SqlserverService) DescribeSqlserverDatasourceDBCharsetsByFilter(ctx co func (me *SqlserverService) DescribeSqlserverInstanceParamRecordsByFilter(ctx context.Context, param map[string]interface{}) (instanceParamRecords []*sqlserver.ParamRecord, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeInstanceParamRecordsRequest() ) @@ -2370,7 +2377,7 @@ func (me *SqlserverService) DescribeSqlserverInstanceParamRecordsByFilter(ctx co func (me *SqlserverService) DescribeSqlserverProjectSecurityGroupsByFilter(ctx context.Context, param map[string]interface{}) (projectSecurityGroups []*sqlserver.SecurityGroup, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeProjectSecurityGroupsRequest() ) @@ -2407,7 +2414,7 @@ func (me *SqlserverService) DescribeSqlserverProjectSecurityGroupsByFilter(ctx c func (me *SqlserverService) DescribeSqlserverDatasourceRegionsByFilter(ctx context.Context) (datasourceRegions []*sqlserver.RegionInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeRegionsRequest() ) @@ -2438,7 +2445,7 @@ func (me *SqlserverService) DescribeSqlserverDatasourceRegionsByFilter(ctx conte func (me *SqlserverService) DescribeSqlserverRollbackTimeByFilter(ctx context.Context, param map[string]interface{}) (rollbackTime []*sqlserver.DbRollbackTimeInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeRollbackTimeRequest() ) @@ -2478,7 +2485,7 @@ func (me *SqlserverService) DescribeSqlserverRollbackTimeByFilter(ctx context.Co func (me *SqlserverService) DescribeSqlserverSlowlogsByFilter(ctx context.Context, param map[string]interface{}) (slowlogs []*sqlserver.SlowlogInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeSlowlogsRequest() ) @@ -2535,7 +2542,7 @@ func (me *SqlserverService) DescribeSqlserverSlowlogsByFilter(ctx context.Contex func (me *SqlserverService) DescribeSqlserverUploadBackupInfoByFilter(ctx context.Context, param map[string]interface{}) (uploadBackupInfo *sqlserver.DescribeUploadBackupInfoResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeUploadBackupInfoRequest() ) @@ -2575,7 +2582,7 @@ func (me *SqlserverService) DescribeSqlserverUploadBackupInfoByFilter(ctx contex func (me *SqlserverService) DescribeSqlserverUploadIncrementalInfoByFilter(ctx context.Context, param map[string]interface{}) (uploadIncrementalInfo *sqlserver.DescribeUploadIncrementalInfoResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeUploadIncrementalInfoRequest() ) @@ -2617,7 +2624,7 @@ func (me *SqlserverService) DescribeSqlserverUploadIncrementalInfoByFilter(ctx c } func (me *SqlserverService) DescribeSqlserverConfigDatabaseCDCById(ctx context.Context, instanceId string) (configDatabaseCDC []*sqlserver.DbNormalDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsNormalRequest() request.InstanceId = &instanceId @@ -2647,7 +2654,7 @@ func (me *SqlserverService) DescribeSqlserverConfigDatabaseCDCById(ctx context.C } func (me *SqlserverService) DescribeSqlserverGeneralCloudInstanceById(ctx context.Context, instanceId string) (generalCloudInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2677,7 +2684,7 @@ func (me *SqlserverService) DescribeSqlserverGeneralCloudInstanceById(ctx contex } func (me *SqlserverService) DescribeSqlserverConfigDatabaseCTById(ctx context.Context, instanceId string) (configDatabaseCT []*sqlserver.DbNormalDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsNormalRequest() request.InstanceId = &instanceId @@ -2707,7 +2714,7 @@ func (me *SqlserverService) DescribeSqlserverConfigDatabaseCTById(ctx context.Co } func (me *SqlserverService) DescribeSqlserverConfigDatabaseMdfById(ctx context.Context, instanceId string) (configDatabaseMdf []*sqlserver.DbNormalDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsNormalRequest() request.InstanceId = &instanceId @@ -2737,7 +2744,7 @@ func (me *SqlserverService) DescribeSqlserverConfigDatabaseMdfById(ctx context.C } func (me *SqlserverService) DescribeSqlserverConfigInstanceNetworkById(ctx context.Context, instanceId string) (configInstanceNetwork *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2767,7 +2774,7 @@ func (me *SqlserverService) DescribeSqlserverConfigInstanceNetworkById(ctx conte } func (me *SqlserverService) DescribeSqlserverConfigInstanceParamById(ctx context.Context, instanceId string) (configInstanceParam []*sqlserver.ParameterDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeInstanceParamsRequest() request.InstanceId = &instanceId @@ -2797,7 +2804,7 @@ func (me *SqlserverService) DescribeSqlserverConfigInstanceParamById(ctx context } func (me *SqlserverService) DescribeSqlserverConfigInstanceRoGroupById(ctx context.Context, instanceId, readOnlyGroupId string) (configInstanceRoGroup *sqlserver.DescribeReadOnlyGroupDetailsResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeReadOnlyGroupDetailsRequest() request.InstanceId = &instanceId @@ -2828,7 +2835,7 @@ func (me *SqlserverService) DescribeSqlserverConfigInstanceRoGroupById(ctx conte } func (me *SqlserverService) DescribeSqlserverConfigInstanceSecurityGroupsById(ctx context.Context, instanceId string) (configInstanceSecurityGroups []*sqlserver.SecurityGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBSecurityGroupsRequest() request.InstanceId = &instanceId @@ -2857,7 +2864,7 @@ func (me *SqlserverService) DescribeSqlserverConfigInstanceSecurityGroupsById(ct } func (me *SqlserverService) DescribeSqlserverRenewDBInstanceById(ctx context.Context, instanceId string) (renewDBInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2886,7 +2893,7 @@ func (me *SqlserverService) DescribeSqlserverRenewDBInstanceById(ctx context.Con } func (me *SqlserverService) DescribeSqlserverRenewPostpaidDBInstanceById(ctx context.Context, instanceId string) (renewPostpaidDBInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2915,7 +2922,7 @@ func (me *SqlserverService) DescribeSqlserverRenewPostpaidDBInstanceById(ctx con } func (me *SqlserverService) DescribeSqlserverRestartDBInstanceById(ctx context.Context, instanceId string) (restartDBInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2944,7 +2951,7 @@ func (me *SqlserverService) DescribeSqlserverRestartDBInstanceById(ctx context.C } func (me *SqlserverService) DescribeSqlserverRestoreInstanceById(ctx context.Context, instanceId string, allNameList []string) (restoreInstance *sqlserver.InstanceDBDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsRequest() request.InstanceIdSet = []*string{&instanceId} @@ -2986,7 +2993,7 @@ func (me *SqlserverService) DescribeSqlserverRestoreInstanceById(ctx context.Con } func (me *SqlserverService) DescribeSqlserverRollbackInstanceById(ctx context.Context, instanceId string, allNameList []string) (rollBackInstance *sqlserver.InstanceDBDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3028,7 +3035,7 @@ func (me *SqlserverService) DescribeSqlserverRollbackInstanceById(ctx context.Co } func (me *SqlserverService) DescribeSqlserverConfigTerminateDBInstanceById(ctx context.Context, instanceId string) (configTerminateDBInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3057,7 +3064,7 @@ func (me *SqlserverService) DescribeSqlserverConfigTerminateDBInstanceById(ctx c } func (me *SqlserverService) DescribeSqlserverDBS(ctx context.Context, instanceId, dbName string) (restoreInstance *sqlserver.InstanceDBDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3088,7 +3095,7 @@ func (me *SqlserverService) DescribeSqlserverDBS(ctx context.Context, instanceId } func (me *SqlserverService) DescribeSqlserverGeneralCloudRoInstanceById(ctx context.Context, instanceId string) (generalCloudRoInstance *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3118,7 +3125,7 @@ func (me *SqlserverService) DescribeSqlserverGeneralCloudRoInstanceById(ctx cont } func (me *SqlserverService) DeleteSqlserverGeneralCloudRoInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDeleteDBInstanceRequest() request.InstanceId = &instanceId @@ -3143,7 +3150,7 @@ func (me *SqlserverService) DeleteSqlserverGeneralCloudRoInstanceById(ctx contex func (me *SqlserverService) DescribeSqlserverQueryXeventByFilter(ctx context.Context, param map[string]interface{}) (queryXevent []*sqlserver.Events, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeXEventsRequest() ) @@ -3200,7 +3207,7 @@ func (me *SqlserverService) DescribeSqlserverQueryXeventByFilter(ctx context.Con func (me *SqlserverService) DescribeSqlserverInsAttributeByFilter(ctx context.Context, param map[string]interface{}) (datasourceInsAttribute *sqlserver.DescribeDBInstancesAttributeResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeDBInstancesAttributeRequest() ) @@ -3236,7 +3243,7 @@ func (me *SqlserverService) DescribeSqlserverInsAttributeByFilter(ctx context.Co } func (me *SqlserverService) DescribeSqlserverInstanceTDEById(ctx context.Context, instanceId string) (instanceTDE *sqlserver.DescribeDBInstancesAttributeResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesAttributeRequest() request.InstanceId = &instanceId @@ -3262,7 +3269,7 @@ func (me *SqlserverService) DescribeSqlserverInstanceTDEById(ctx context.Context } func (me *SqlserverService) DescribeSqlserverDatabaseTDEById(ctx context.Context, instanceId string, dbNameList []string) (databaseTDE *sqlserver.InstanceDBDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBsRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3303,7 +3310,7 @@ func (me *SqlserverService) DescribeSqlserverDatabaseTDEById(ctx context.Context } func (me *SqlserverService) DescribeSqlserverInstanceHaById(ctx context.Context, instanceId string) (instanceHa *sqlserver.DBInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesRequest() request.InstanceIdSet = []*string{&instanceId} @@ -3333,7 +3340,7 @@ func (me *SqlserverService) DescribeSqlserverInstanceHaById(ctx context.Context, } func (me *SqlserverService) DescribeSqlserverInstanceSslById(ctx context.Context, instanceId string) (instanceSsl *sqlserver.DescribeDBInstancesAttributeResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := sqlserver.NewDescribeDBInstancesAttributeRequest() request.InstanceId = &instanceId @@ -3360,7 +3367,7 @@ func (me *SqlserverService) DescribeSqlserverInstanceSslById(ctx context.Context func (me *SqlserverService) DescribeSqlserverDescHaLogByFilter(ctx context.Context, param map[string]interface{}) (descHaLog []*sqlserver.SwitchLog, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sqlserver.NewDescribeHASwitchLogRequest() ) diff --git a/tencentcloud/data_source_tc_ssl_certificates.go b/tencentcloud/services/ssl/data_source_tc_ssl_certificates.go similarity index 90% rename from tencentcloud/data_source_tc_ssl_certificates.go rename to tencentcloud/services/ssl/data_source_tc_ssl_certificates.go index fdf5afaefa..dcfc177b9b 100644 --- a/tencentcloud/data_source_tc_ssl_certificates.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_certificates.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslCertificates() *schema.Resource { +func DataSourceTencentCloudSslCertificates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslCertificatesRead, Schema: map[string]*schema.Schema{ @@ -147,9 +150,9 @@ func dataSourceTencentCloudSslCertificates() *schema.Resource { } func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_certificates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_certificates.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( name *string @@ -169,7 +172,7 @@ func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interfa id = helper.String(raw.(string)) } - sslService := SSLService{client: m.(*TencentCloudClient).apiV3Conn} + sslService := SSLService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} certificateList, err := GetCertificateList(ctx, sslService, id, name, certType) if err != nil { return err @@ -178,7 +181,7 @@ func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interfa certificates := make([]map[string]interface{}, 0, len(certificateList)) ids := make([]string, 0, len(certificateList)) for _, certificate := range certificateList { - if nilNames := CheckNil(certificate, map[string]string{ + if nilNames := tccommon.CheckNil(certificate, map[string]string{ "CertificateId": "id", "Alias": "name", "CertificateType": "type", @@ -225,10 +228,10 @@ func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interfa describeRequest.CertificateId = certificate.CertificateId var outErr, inErr error var describeResponse *ssl.DescribeCertificateDetailResponse - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { describeResponse, inErr = sslService.DescribeCertificateDetail(ctx, describeRequest) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -267,7 +270,7 @@ func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interfa d.SetId(helper.DataResourceIdsHash(ids)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), certificates); err != nil { + if err := tccommon.WriteToFile(output.(string), certificates); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err @@ -278,7 +281,7 @@ func dataSourceTencentCloudSslCertificatesRead(d *schema.ResourceData, m interfa } func GetCertificateList(ctx context.Context, sslService SSLService, id, name, certType *string) (certificateList []*ssl.Certificates, errRet error) { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( outErr, inErr error @@ -288,10 +291,10 @@ func GetCertificateList(ctx context.Context, sslService SSLService, id, name, ce if id == nil && name == nil { describeRequest := ssl.NewDescribeCertificatesRequest() describeRequest.CertificateType = certType - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { certificateList, inErr = sslService.DescribeCertificates(ctx, describeRequest) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -307,10 +310,10 @@ func GetCertificateList(ctx context.Context, sslService SSLService, id, name, ce describeRequest := ssl.NewDescribeCertificatesRequest() describeRequest.CertificateType = certType describeRequest.SearchKey = id - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { certificatesById, inErr = sslService.DescribeCertificates(ctx, describeRequest) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -324,10 +327,10 @@ func GetCertificateList(ctx context.Context, sslService SSLService, id, name, ce describeRequest := ssl.NewDescribeCertificatesRequest() describeRequest.CertificateType = certType describeRequest.SearchKey = name - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { certificatesByName, inErr = sslService.DescribeCertificates(ctx, describeRequest) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) diff --git a/tencentcloud/data_source_tc_ssl_certificates_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_certificates_test.go similarity index 90% rename from tencentcloud/data_source_tc_ssl_certificates_test.go rename to tencentcloud/services/ssl/data_source_tc_ssl_certificates_test.go index cd772ef790..2bc7e4b360 100644 --- a/tencentcloud/data_source_tc_ssl_certificates_test.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_certificates_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package ssl_test import ( "fmt" "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudSslCertificatesDataSource_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: TestAccDataSourceTencentCloudSslCertificatesBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), resource.TestMatchResourceAttr("data.tencentcloud_ssl_certificates.foo", "certificates.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_ssl_certificates.foo", "certificates.0.id"), resource.TestCheckResourceAttr("data.tencentcloud_ssl_certificates.foo", "certificates.0.name", "keep-ssl-ca"), @@ -39,13 +41,13 @@ func TestAccTencentCloudSslCertificatesDataSource_basic(t *testing.T) { func TestAccTencentCloudSslCertificatesDataSource_type(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: TestAccDataSourceTencentCloudSslCertificatesType, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), resource.TestMatchResourceAttr("data.tencentcloud_ssl_certificates.foo", "certificates.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_ssl_certificates.foo", "certificates.0.id"), resource.TestCheckResourceAttrSet("data.tencentcloud_ssl_certificates.foo", "certificates.0.name"), @@ -67,13 +69,13 @@ func TestAccTencentCloudSslCertificatesDataSource_type(t *testing.T) { func TestAccTencentCloudSslCertificatesDataSource_id(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: TestAccDataSourceTencentCloudSslCertificatesId, 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"), resource.TestCheckResourceAttrSet("data.tencentcloud_ssl_certificates.foo", "certificates.0.id"), resource.TestCheckResourceAttrSet("data.tencentcloud_ssl_certificates.foo", "certificates.0.name"), diff --git a/tencentcloud/data_source_tc_ssl_describe_certificate.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate.go similarity index 98% rename from tencentcloud/data_source_tc_ssl_describe_certificate.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate.go index 2ac46f49e2..eb64635f03 100644 --- a/tencentcloud/data_source_tc_ssl_describe_certificate.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate.go @@ -1,14 +1,16 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" ) -func dataSourceTencentCloudSslDescribeCertificate() *schema.Resource { +func DataSourceTencentCloudSslDescribeCertificate() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeCertificateRead, Schema: map[string]*schema.Schema{ @@ -524,20 +526,20 @@ func dataSourceTencentCloudSslDescribeCertificate() *schema.Resource { } func dataSourceTencentCloudSslDescribeCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_certificate.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_certificate.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 := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} responese := ssl.DescribeCertificateResponseParams{} CertificateId := d.Get("certificate_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeCertificateByID(ctx, CertificateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } responese = *result return nil @@ -906,7 +908,7 @@ func dataSourceTencentCloudSslDescribeCertificateRead(d *schema.ResourceData, me output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), sslResponseMap); e != nil { + if e := tccommon.WriteToFile(output.(string), sslResponseMap); e != nil { return e } } diff --git a/tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate_test.go new file mode 100644 index 0000000000..4d48e83170 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_certificate_test.go @@ -0,0 +1,33 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeCertificateDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeCertificateDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_certificate.describe_certificate"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_certificate.describe_certificate", "certificate_id", "8mCN3eKd")), + }, + }, + }) +} + +const testAccSslDescribeCertificateDataSource = ` + +data "tencentcloud_ssl_describe_certificate" "describe_certificate" { + certificate_id = "8mCN3eKd" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_companies.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_companies.go similarity index 86% rename from tencentcloud/data_source_tc_ssl_describe_companies.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_companies.go index 527aeca923..410a57340c 100644 --- a/tencentcloud/data_source_tc_ssl_describe_companies.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_companies.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeCompanies() *schema.Resource { +func DataSourceTencentCloudSslDescribeCompanies() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeCompaniesRead, Schema: map[string]*schema.Schema{ @@ -84,26 +87,26 @@ func dataSourceTencentCloudSslDescribeCompanies() *schema.Resource { } func dataSourceTencentCloudSslDescribeCompaniesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_companies.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_companies.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("company_id"); v != nil { paramMap["CompanyId"] = helper.IntInt64(v.(int)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var companies []*ssl.CompanyInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeCompaniesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } companies = result return nil @@ -165,7 +168,7 @@ func dataSourceTencentCloudSslDescribeCompaniesRead(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/services/ssl/data_source_tc_ssl_describe_companies_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_companies_test.go new file mode 100644 index 0000000000..521b9523fa --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_companies_test.go @@ -0,0 +1,36 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeCompaniesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeCompaniesDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_companies.describe_companies"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_companies.describe_companies", "company_id", "122"), + ), + }, + }, + }) +} + +const testAccSslDescribeCompaniesDataSource = ` + +data "tencentcloud_ssl_describe_companies" "describe_companies" { + company_id = 122 +} + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list.go similarity index 88% rename from tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list.go index 4d17334542..82ff5eb42a 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_api_gateway_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostApiGatewayInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostApiGatewayInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostApiGatewayInstanceListRead, Schema: map[string]*schema.Schema{ @@ -102,12 +105,12 @@ func dataSourceTencentCloudSslDescribeHostApiGatewayInstanceList() *schema.Resou } func dataSourceTencentCloudSslDescribeHostApiGatewayInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_api_gateway_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_api_gateway_instance_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("certificate_id"); ok { @@ -145,14 +148,14 @@ func dataSourceTencentCloudSslDescribeHostApiGatewayInstanceListRead(d *schema.R paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.ApiGatewayInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostApiGatewayInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -198,7 +201,7 @@ func dataSourceTencentCloudSslDescribeHostApiGatewayInstanceListRead(d *schema.R 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/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go new file mode 100644 index 0000000000..f16a79e22c --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_api_gateway_instance_list_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostApiGatewayInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccStepSetRegion(t, "ap-nanjing") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostApiGatewayInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list", "certificate_id", "9Bpk7XOu"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_api_gateway_instance_list.describe_host_api_gateway_instance_list", "resource_type", "apiGateway"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostApiGatewayInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_api_gateway_instance_list" "describe_host_api_gateway_instance_list" { + certificate_id = "9Bpk7XOu" + resource_type = "apiGateway" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cdn_instance_list.go similarity index 90% rename from tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cdn_instance_list.go index f3d7f3b112..160f1a87bb 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_cdn_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cdn_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostCdnInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostCdnInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostCdnInstanceListRead, Schema: map[string]*schema.Schema{ @@ -121,12 +124,12 @@ func dataSourceTencentCloudSslDescribeHostCdnInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostCdnInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_cdn_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_cdn_instance_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("certificate_id"); ok { @@ -168,14 +171,14 @@ func dataSourceTencentCloudSslDescribeHostCdnInstanceListRead(d *schema.Resource paramMap["AsyncCache"] = helper.IntInt64(v.(int)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList *ssl.DescribeHostCdnInstanceListResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostCdnInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -228,7 +231,7 @@ func dataSourceTencentCloudSslDescribeHostCdnInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_cdn_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cdn_instance_list_test.go new file mode 100644 index 0000000000..89bcc6cd65 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cdn_instance_list_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostCdnInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostCdnInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list", "certificate_id", "8mCN3eKd"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cdn_instance_list.describe_host_cdn_instance_list", "resource_type", "cdn"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostCdnInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_cdn_instance_list" "describe_host_cdn_instance_list" { + certificate_id = "8mCN3eKd" + resource_type = "cdn" +} + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_clb_instance_list.go similarity index 95% rename from tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_clb_instance_list.go index 3d1750f62e..126e7029ba 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_clb_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_clb_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostClbInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostClbInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostClbInstanceListRead, Schema: map[string]*schema.Schema{ @@ -238,12 +241,12 @@ func dataSourceTencentCloudSslDescribeHostClbInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostClbInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_clb_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_clb_instance_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("certificate_id"); ok { @@ -281,14 +284,14 @@ func dataSourceTencentCloudSslDescribeHostClbInstanceListRead(d *schema.Resource paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList *ssl.DescribeHostClbInstanceListResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostClbInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -436,7 +439,7 @@ func dataSourceTencentCloudSslDescribeHostClbInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_clb_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_clb_instance_list_test.go new file mode 100644 index 0000000000..1ceaaf1d29 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_clb_instance_list_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostClbInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostClbInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_clb_instance_list.describe_host_clb_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_clb_instance_list.describe_host_clb_instance_list", "certificate_id", "9Bpk7XOu"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostClbInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_clb_instance_list" "describe_host_clb_instance_list" { + certificate_id = "9Bpk7XOu" +} + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cos_instance_list.go similarity index 90% rename from tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cos_instance_list.go index 91a0a677aa..7c8f7730bb 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_cos_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cos_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostCosInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostCosInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostCosInstanceListRead, Schema: map[string]*schema.Schema{ @@ -114,12 +117,12 @@ func dataSourceTencentCloudSslDescribeHostCosInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostCosInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_cos_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_cos_instance_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("certificate_id"); ok { @@ -153,14 +156,14 @@ func dataSourceTencentCloudSslDescribeHostCosInstanceListRead(d *schema.Resource paramMap["filters"] = tmpSet } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList *ssl.DescribeHostCosInstanceListResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostCosInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -219,7 +222,7 @@ func dataSourceTencentCloudSslDescribeHostCosInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_cos_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cos_instance_list_test.go new file mode 100644 index 0000000000..3f5b98c709 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_cos_instance_list_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostCosInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostCosInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list", "certificate_id", "8mCN3eKd"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_cos_instance_list.describe_host_cos_instance_list", "resource_type", "cos"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostCosInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_cos_instance_list" "describe_host_cos_instance_list" { + certificate_id = "8mCN3eKd" + resource_type = "cos" +} + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list.go similarity index 88% rename from tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list.go index 2b0f2d6d2d..4287c399a6 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_ddos_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostDdosInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostDdosInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostDdosInstanceListRead, Schema: map[string]*schema.Schema{ @@ -102,12 +105,12 @@ func dataSourceTencentCloudSslDescribeHostDdosInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostDdosInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_ddos_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_ddos_instance_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("certificate_id"); ok { @@ -145,14 +148,14 @@ func dataSourceTencentCloudSslDescribeHostDdosInstanceListRead(d *schema.Resourc paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.DdosInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostDdosInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -198,7 +201,7 @@ func dataSourceTencentCloudSslDescribeHostDdosInstanceListRead(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/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list_test.go new file mode 100644 index 0000000000..4ee1a43e3f --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_ddos_instance_list_test.go @@ -0,0 +1,36 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostDdosInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostDdosInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list", "certificate_id", "8mCN3eKd"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_ddos_instance_list.describe_host_ddos_instance_list", "resource_type", "ddos"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostDdosInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_ddos_instance_list" "describe_host_ddos_instance_list" { + certificate_id = "8mCN3eKd" + resource_type = "ddos" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record.go similarity index 85% rename from tencentcloud/data_source_tc_ssl_describe_host_deploy_record.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record.go index 9e8414065b..7b32dd8188 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostDeployRecord() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostDeployRecord() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostDeployRecordRead, Schema: map[string]*schema.Schema{ @@ -80,12 +83,12 @@ func dataSourceTencentCloudSslDescribeHostDeployRecord() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostDeployRecordRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_deploy_record.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_deploy_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("certificate_id"); ok { @@ -96,14 +99,14 @@ func dataSourceTencentCloudSslDescribeHostDeployRecordRead(d *schema.ResourceDat paramMap["ResourceType"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var deployRecordList []*ssl.DeployRecordInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostDeployRecordByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } deployRecordList = result return nil @@ -157,7 +160,7 @@ func dataSourceTencentCloudSslDescribeHostDeployRecordRead(d *schema.ResourceDat 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_ssl_describe_host_deploy_record_detail.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_detail.go similarity index 93% rename from tencentcloud/data_source_tc_ssl_describe_host_deploy_record_detail.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_detail.go index 1e9bd1d2ee..b3194d955c 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_deploy_record_detail.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostDeployRecordDetail() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostDeployRecordDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostDeployRecordDetailRead, Schema: map[string]*schema.Schema{ @@ -165,27 +168,27 @@ func dataSourceTencentCloudSslDescribeHostDeployRecordDetail() *schema.Resource } func dataSourceTencentCloudSslDescribeHostDeployRecordDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_deploy_record_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_deploy_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("deploy_record_id"); ok { paramMap["DeployRecordId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var deployRecordDetailList []*ssl.DeployRecordDetail var successTotalCount, failedTotalCount, runningTotalCount *int64 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, successTotal, failedTotal, runningTotal, e := service.DescribeSslDescribeHostDeployRecordDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } deployRecordDetailList = result successTotalCount, failedTotalCount, runningTotalCount = successTotal, failedTotal, runningTotal @@ -308,7 +311,7 @@ func dataSourceTencentCloudSslDescribeHostDeployRecordDetailRead(d *schema.Resou 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/ssl/data_source_tc_ssl_describe_host_deploy_record_detail_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_detail_test.go new file mode 100644 index 0000000000..bc980c5cc6 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_detail_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostDeployRecordDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostDeployRecordDetailDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_deploy_record_detail.describe_host_deploy_record_detail"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record_detail.describe_host_deploy_record_detail", "deploy_record_id", "35364"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostDeployRecordDetailDataSource = ` + +data "tencentcloud_ssl_describe_host_deploy_record_detail" "describe_host_deploy_record_detail" { + deploy_record_id = "35364" +} + +` diff --git a/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_test.go new file mode 100644 index 0000000000..59c059a4fc --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_deploy_record_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostDeployRecordDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostDeployRecordDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record", "certificate_id", "9D3qRt7r"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_deploy_record.describe_host_deploy_record", "resource_type", "ddos"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostDeployRecordDataSource = ` + +data "tencentcloud_ssl_describe_host_deploy_record" "describe_host_deploy_record" { + certificate_id = "9D3qRt7r" + resource_type = "ddos" + } + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list.go similarity index 87% rename from tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list.go index 0b7cb85543..0d24d28d5c 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_lighthouse_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostLighthouseInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostLighthouseInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostLighthouseInstanceListRead, Schema: map[string]*schema.Schema{ @@ -97,12 +100,12 @@ func dataSourceTencentCloudSslDescribeHostLighthouseInstanceList() *schema.Resou } func dataSourceTencentCloudSslDescribeHostLighthouseInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_lighthouse_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_lighthouse_instance_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("certificate_id"); ok { @@ -136,14 +139,14 @@ func dataSourceTencentCloudSslDescribeHostLighthouseInstanceListRead(d *schema.R paramMap["filters"] = tmpSet } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.LighthouseInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostLighthouseInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -185,7 +188,7 @@ func dataSourceTencentCloudSslDescribeHostLighthouseInstanceListRead(d *schema.R 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/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go new file mode 100644 index 0000000000..3f31166afc --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_lighthouse_instance_list_test.go @@ -0,0 +1,36 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostLighthouseInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostLighthouseInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list", "certificate_id", "9D3mK31W"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_lighthouse_instance_list.describe_host_lighthouse_instance_list", "resource_type", "lighthouse"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostLighthouseInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_lighthouse_instance_list" "describe_host_lighthouse_instance_list" { + certificate_id = "9D3mK31W" + resource_type = "lighthouse" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_live_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_live_instance_list.go similarity index 87% rename from tencentcloud/data_source_tc_ssl_describe_host_live_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_live_instance_list.go index a252e3b011..6bd0b7db61 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_live_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_live_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostLiveInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostLiveInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostLiveInstanceListRead, Schema: map[string]*schema.Schema{ @@ -92,12 +95,12 @@ func dataSourceTencentCloudSslDescribeHostLiveInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostLiveInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_live_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_live_instance_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("certificate_id"); ok { @@ -135,14 +138,14 @@ func dataSourceTencentCloudSslDescribeHostLiveInstanceListRead(d *schema.Resourc paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.LiveInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostLiveInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -180,7 +183,7 @@ func dataSourceTencentCloudSslDescribeHostLiveInstanceListRead(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/services/ssl/data_source_tc_ssl_describe_host_live_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_live_instance_list_test.go new file mode 100644 index 0000000000..7c8b707f0f --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_live_instance_list_test.go @@ -0,0 +1,36 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostLiveInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostLiveInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list", "certificate_id", "9D3qRt7r"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_live_instance_list.describe_host_live_instance_list", "resource_type", "live"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostLiveInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_live_instance_list" "describe_host_live_instance_list" { + certificate_id = "9D3qRt7r" + resource_type = "live" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_teo_instance_list.go similarity index 87% rename from tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_teo_instance_list.go index 55588a1fb4..41bd2ac4b9 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_teo_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_teo_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostTeoInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostTeoInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostTeoInstanceListRead, Schema: map[string]*schema.Schema{ @@ -97,12 +100,12 @@ func dataSourceTencentCloudSslDescribeHostTeoInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostTeoInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_teo_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_teo_instance_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("certificate_id"); ok { @@ -140,14 +143,14 @@ func dataSourceTencentCloudSslDescribeHostTeoInstanceListRead(d *schema.Resource paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.TeoInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostTeoInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -189,7 +192,7 @@ func dataSourceTencentCloudSslDescribeHostTeoInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_teo_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_teo_instance_list_test.go new file mode 100644 index 0000000000..5f7500762c --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_teo_instance_list_test.go @@ -0,0 +1,36 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostTeoInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostTeoInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list", "certificate_id", "9D3qRt7r"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_teo_instance_list.describe_host_teo_instance_list", "resource_type", "teo"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostTeoInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_teo_instance_list" "describe_host_teo_instance_list" { + certificate_id = "9D3qRt7r" + resource_type = "teo" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_tke_instance_list.go similarity index 93% rename from tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_tke_instance_list.go index 56994621a5..6a949f94f9 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_tke_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_tke_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostTkeInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostTkeInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostTkeInstanceListRead, Schema: map[string]*schema.Schema{ @@ -186,12 +189,12 @@ func dataSourceTencentCloudSslDescribeHostTkeInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostTkeInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_tke_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_tke_instance_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("certificate_id"); ok { @@ -229,15 +232,15 @@ func dataSourceTencentCloudSslDescribeHostTkeInstanceListRead(d *schema.Resource paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.TkeInstanceDetail var asyncTotalNum, asyncOffset *int64 var asyncCacheTime *string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, total, offset, cacheTime, e := service.DescribeSslDescribeHostTkeInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result asyncTotalNum = total @@ -355,7 +358,7 @@ func dataSourceTencentCloudSslDescribeHostTkeInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_tke_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_tke_instance_list_test.go new file mode 100644 index 0000000000..7061e92d22 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_tke_instance_list_test.go @@ -0,0 +1,34 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostTkeInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostTkeInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_tke_instance_list.describe_host_tke_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_tke_instance_list.describe_host_tke_instance_list", "certificate_id", "9D3qRt7r"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostTkeInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_tke_instance_list" "describe_host_tke_instance_list" { + certificate_id = "9D3qRt7r" +} +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_update_record.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record.go similarity index 86% rename from tencentcloud/data_source_tc_ssl_describe_host_update_record.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record.go index f4bde9384d..9f883912b8 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_update_record.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostUpdateRecord() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostUpdateRecord() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostUpdateRecordRead, Schema: map[string]*schema.Schema{ @@ -91,12 +94,12 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecord() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostUpdateRecordRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_update_record.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_update_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("certificate_id"); ok { @@ -107,14 +110,14 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecordRead(d *schema.ResourceDat paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var deployRecordList []*ssl.UpdateRecordInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostUpdateRecordByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } deployRecordList = result return nil @@ -172,7 +175,7 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecordRead(d *schema.ResourceDat 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_ssl_describe_host_update_record_detail.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_detail.go similarity index 93% rename from tencentcloud/data_source_tc_ssl_describe_host_update_record_detail.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_detail.go index d75f5539e2..f08ae96f8a 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_update_record_detail.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostUpdateRecordDetail() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostUpdateRecordDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostUpdateRecordDetailRead, Schema: map[string]*schema.Schema{ @@ -189,12 +192,12 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecordDetail() *schema.Resource } func dataSourceTencentCloudSslDescribeHostUpdateRecordDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_update_record_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_update_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) var id string paramMap := make(map[string]interface{}) if v, ok := d.GetOk("deploy_record_id"); ok { @@ -202,14 +205,14 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecordDetailRead(d *schema.Resou paramMap["DeployRecordId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var recordDetailList []*ssl.UpdateRecordDetails var successTotalCount, failedTotalCount, runningTotalCount *int64 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, successTotal, failedTotal, runningTotal, e := service.DescribeSslDescribeHostUpdateRecordDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } recordDetailList = result successTotalCount, failedTotalCount, runningTotalCount = successTotal, failedTotal, runningTotal @@ -353,7 +356,7 @@ func dataSourceTencentCloudSslDescribeHostUpdateRecordDetailRead(d *schema.Resou d.SetId(id) 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/ssl/data_source_tc_ssl_describe_host_update_record_detail_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_detail_test.go new file mode 100644 index 0000000000..931ca5bf38 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_detail_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostUpdateRecordDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostUpdateRecordDetailDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_update_record_detail.describe_host_update_record_detail"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_update_record_detail.describe_host_update_record_detail", "deploy_record_id", "1666"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostUpdateRecordDetailDataSource = ` + +data "tencentcloud_ssl_describe_host_update_record_detail" "describe_host_update_record_detail" { + deploy_record_id = "1666" +} + +` diff --git a/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_test.go new file mode 100644 index 0000000000..1fd24ffd3d --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_update_record_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostUpdateRecordDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostUpdateRecordDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_update_record.describe_host_update_record"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_update_record.describe_host_update_record", "old_certificate_id", "9D3qRt7r"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostUpdateRecordDataSource = ` + +data "tencentcloud_ssl_describe_host_update_record" "describe_host_update_record" { + old_certificate_id = "9D3qRt7r" + } + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_vod_instance_list.go similarity index 86% rename from tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_vod_instance_list.go index 8447a6f93b..609380485c 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_vod_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_vod_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostVodInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostVodInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostVodInstanceListRead, Schema: map[string]*schema.Schema{ @@ -87,12 +90,12 @@ func dataSourceTencentCloudSslDescribeHostVodInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostVodInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_vod_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_vod_instance_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("certificate_id"); ok { @@ -130,14 +133,14 @@ func dataSourceTencentCloudSslDescribeHostVodInstanceListRead(d *schema.Resource paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.VodInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostVodInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -171,7 +174,7 @@ func dataSourceTencentCloudSslDescribeHostVodInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_vod_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_vod_instance_list_test.go new file mode 100644 index 0000000000..ce0cc6b2df --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_vod_instance_list_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostVodInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostVodInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list", "certificate_id", "9D3qRt7r"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_vod_instance_list.describe_host_vod_instance_list", "resource_type", "vod"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostVodInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_vod_instance_list" "describe_host_vod_instance_list" { + certificate_id = "9D3qRt7r" + resource_type = "vod" + } + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_waf_instance_list.go similarity index 87% rename from tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_host_waf_instance_list.go index a1bde633aa..b3d4059ebe 100644 --- a/tencentcloud/data_source_tc_ssl_describe_host_waf_instance_list.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_waf_instance_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeHostWafInstanceList() *schema.Resource { +func DataSourceTencentCloudSslDescribeHostWafInstanceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeHostWafInstanceListRead, Schema: map[string]*schema.Schema{ @@ -92,12 +95,12 @@ func dataSourceTencentCloudSslDescribeHostWafInstanceList() *schema.Resource { } func dataSourceTencentCloudSslDescribeHostWafInstanceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_host_waf_instance_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_host_waf_instance_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("certificate_id"); ok { @@ -135,14 +138,14 @@ func dataSourceTencentCloudSslDescribeHostWafInstanceListRead(d *schema.Resource paramMap["OldCertificateId"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*ssl.LiveInstanceDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeHostWafInstanceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -180,7 +183,7 @@ func dataSourceTencentCloudSslDescribeHostWafInstanceListRead(d *schema.Resource 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/ssl/data_source_tc_ssl_describe_host_waf_instance_list_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_waf_instance_list_test.go new file mode 100644 index 0000000000..e92cc9a48c --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_host_waf_instance_list_test.go @@ -0,0 +1,37 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeHostWafInstanceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeHostWafInstanceListDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list", "certificate_id", "9D3qRt7r"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_host_waf_instance_list.describe_host_waf_instance_list", "resource_type", "waf"), + ), + }, + }, + }) +} + +const testAccSslDescribeHostWafInstanceListDataSource = ` + +data "tencentcloud_ssl_describe_host_waf_instance_list" "describe_host_waf_instance_list" { + certificate_id = "9D3qRt7r" + resource_type = "waf" + } + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_manager_detail.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_manager_detail.go similarity index 92% rename from tencentcloud/data_source_tc_ssl_describe_manager_detail.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_manager_detail.go index 0ee9c904d7..f72d7be302 100644 --- a/tencentcloud/data_source_tc_ssl_describe_manager_detail.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_manager_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeManagerDetail() *schema.Resource { +func DataSourceTencentCloudSslDescribeManagerDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeManagerDetailRead, Schema: map[string]*schema.Schema{ @@ -180,20 +183,20 @@ func dataSourceTencentCloudSslDescribeManagerDetail() *schema.Resource { } func dataSourceTencentCloudSslDescribeManagerDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_manager_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_manager_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) managerId := d.Get("manager_id") - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var response *ssl.DescribeManagerDetailResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeManagerDetailByFilter(ctx, helper.IntToStr(managerId.(int))) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -318,7 +321,7 @@ func dataSourceTencentCloudSslDescribeManagerDetailRead(d *schema.ResourceData, d.SetId(helper.IntToStr(managerId.(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/services/ssl/data_source_tc_ssl_describe_manager_detail_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_manager_detail_test.go new file mode 100644 index 0000000000..c091f9b448 --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_manager_detail_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeManagerDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeManagerDetailDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_manager_detail.describe_manager_detail"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_manager_detail.describe_manager_detail", "manager_id", "12895"), + ), + }, + }, + }) +} + +const testAccSslDescribeManagerDetailDataSource = ` + +data "tencentcloud_ssl_describe_manager_detail" "describe_manager_detail" { + manager_id = "12895" +} + +` diff --git a/tencentcloud/data_source_tc_ssl_describe_managers.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_managers.go similarity index 91% rename from tencentcloud/data_source_tc_ssl_describe_managers.go rename to tencentcloud/services/ssl/data_source_tc_ssl_describe_managers.go index e58b46dc7c..58b9368fa2 100644 --- a/tencentcloud/data_source_tc_ssl_describe_managers.go +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_managers.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSslDescribeManagers() *schema.Resource { +func DataSourceTencentCloudSslDescribeManagers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSslDescribeManagersRead, Schema: map[string]*schema.Schema{ @@ -133,12 +136,12 @@ func dataSourceTencentCloudSslDescribeManagers() *schema.Resource { } func dataSourceTencentCloudSslDescribeManagersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssl_describe_managers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssl_describe_managers.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 companyId string paramMap := make(map[string]interface{}) if v, _ := d.GetOk("company_id"); v != nil { @@ -162,14 +165,14 @@ func dataSourceTencentCloudSslDescribeManagersRead(d *schema.ResourceData, meta paramMap["SearchKey"] = helper.String(v.(string)) } - service := SslService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SslService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var managers []*ssl.ManagerInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSslDescribeManagersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } managers = result return nil @@ -249,7 +252,7 @@ func dataSourceTencentCloudSslDescribeManagersRead(d *schema.ResourceData, meta d.SetId(companyId) 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/ssl/data_source_tc_ssl_describe_managers_test.go b/tencentcloud/services/ssl/data_source_tc_ssl_describe_managers_test.go new file mode 100644 index 0000000000..0c7f8b1a2c --- /dev/null +++ b/tencentcloud/services/ssl/data_source_tc_ssl_describe_managers_test.go @@ -0,0 +1,35 @@ +package ssl_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudSslDescribeManagersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSslDescribeManagersDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_describe_managers.describe_managers"), + resource.TestCheckResourceAttr("data.tencentcloud_ssl_describe_managers.describe_managers", "company_id", "11772"), + ), + }, + }, + }) +} + +const testAccSslDescribeManagersDataSource = ` + +data "tencentcloud_ssl_describe_managers" "describe_managers" { + company_id = "11772" + } + +` diff --git a/tencentcloud/services/ssl/extension_ssl.go b/tencentcloud/services/ssl/extension_ssl.go new file mode 100644 index 0000000000..b920e62940 --- /dev/null +++ b/tencentcloud/services/ssl/extension_ssl.go @@ -0,0 +1,88 @@ +package ssl + +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/resource_tc_ssl_certificate.go b/tencentcloud/services/ssl/resource_tc_ssl_certificate.go similarity index 77% rename from tencentcloud/resource_tc_ssl_certificate.go rename to tencentcloud/services/ssl/resource_tc_ssl_certificate.go index a394efeaa9..dcdc753222 100644 --- a/tencentcloud/resource_tc_ssl_certificate.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_certificate.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssl import ( "context" @@ -8,14 +8,18 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSslCertificate() *schema.Resource { +func ResourceTencentCloudSslCertificate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSslCertificateCreate, Read: resourceTencentCloudSslCertificateRead, @@ -35,7 +39,7 @@ func resourceTencentCloudSslCertificate() *schema.Resource { "type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(SSL_CERT_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(SSL_CERT_TYPE), ForceNew: true, Description: "Type of the SSL certificate. Valid values: `CA` and `SVR`.", }, @@ -130,12 +134,12 @@ func resourceTencentCloudSslCertificate() *schema.Resource { } func resourceTencentCloudSslCertificateCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_certificate.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_certificate.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sslService = SSLService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService = SSLService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} outErr, inErr error id string describeResponse *ssl.DescribeCertificateDetailResponse @@ -153,10 +157,10 @@ func resourceTencentCloudSslCertificateCreate(d *schema.ResourceData, m interfac return errors.New("when type is SVR, key can't be empty") } - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { id, inErr = sslService.UploadCertificate(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -167,14 +171,14 @@ func resourceTencentCloudSslCertificateCreate(d *schema.ResourceData, m interfac describeRequest := ssl.NewDescribeCertificateDetailRequest() describeRequest.CertificateId = &id - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { describeResponse, inErr = sslService.DescribeCertificateDetail(ctx, describeRequest) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if describeResponse == nil || describeResponse.Response == nil { err := fmt.Errorf("TencentCloud SDK %s return empty response", describeRequest.GetAction()) - return retryError(err) + return tccommon.RetryError(err) } if describeResponse.Response.Status == nil { err := fmt.Errorf("api[%s] certificate status is nil", describeRequest.GetAction()) @@ -193,9 +197,9 @@ func resourceTencentCloudSslCertificateCreate(d *schema.ResourceData, m interfac } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagClient := m.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tagClient} - resourceName := BuildTagResourceName("ssl", "certificate", tagClient.Region, id) + tagClient := m.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tagClient) + resourceName := tccommon.BuildTagResourceName("ssl", "certificate", tagClient.Region, id) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -206,13 +210,13 @@ func resourceTencentCloudSslCertificateCreate(d *schema.ResourceData, m interfac } func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_certificate.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_certificate.read")() + defer tccommon.InconsistentCheck(d, m)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sslService = SSLService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService = SSLService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} outErr, inErr error id = d.Id() describeResponse *ssl.DescribeCertificateDetailResponse @@ -220,7 +224,7 @@ func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{ describeRequest := ssl.NewDescribeCertificateDetailRequest() describeRequest.CertificateId = &id - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { describeResponse, inErr = sslService.DescribeCertificateDetail(ctx, describeRequest) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { @@ -228,7 +232,7 @@ func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{ return nil } } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -243,7 +247,7 @@ func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{ } certificate := describeResponse.Response - if nilNames := CheckNil(certificate, map[string]string{ + if nilNames := tccommon.CheckNil(certificate, map[string]string{ "Alias": "name", "CertificateType": "type", "ProjectId": "project id", @@ -279,8 +283,8 @@ func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{ } _ = d.Set("subject_names", subjectAltNames) - tagClient := m.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: tagClient} + tagClient := m.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tagClient) tags, err := tagService.DescribeResourceTags(ctx, "ssl", "certificate", tagClient.Region, d.Id()) if err != nil { @@ -291,13 +295,13 @@ func resourceTencentCloudSslCertificateRead(d *schema.ResourceData, m interface{ } func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_certificate.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_certificate.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) id = d.Id() - sslService = SSLService{client: m.(*TencentCloudClient).apiV3Conn} + sslService = SSLService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} ) d.Partial(true) @@ -307,7 +311,7 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac _, alias := d.GetChange("name") aliasRequest.Alias = helper.String(alias.(string)) - if outErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if outErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if inErr := sslService.ModifyCertificateAlias(ctx, aliasRequest); inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { code := sdkErr.GetCode() @@ -315,7 +319,7 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac return resource.NonRetryableError(sdkErr) } } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }); outErr != nil { @@ -331,7 +335,7 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac _, projectId := d.GetChange("project_id") projectRequest.ProjectId = helper.Uint64(uint64(projectId.(int))) - if outErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if outErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if inErr := sslService.ModifyCertificateProject(ctx, projectRequest); inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { code := sdkErr.GetCode() @@ -339,7 +343,7 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac return resource.NonRetryableError(sdkErr) } } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }); outErr != nil { @@ -350,10 +354,10 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagClient := m.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: tagClient} - resourceName := BuildTagResourceName("ssl", "certificate", tagClient.Region, id) + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagClient := m.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tagClient) + resourceName := tccommon.BuildTagResourceName("ssl", "certificate", tagClient.Region, id) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -364,11 +368,11 @@ func resourceTencentCloudSslCertificateUpdate(d *schema.ResourceData, m interfac } func resourceTencentCloudSslCertificateDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_certificate.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_certificate.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sslService = SSLService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService = SSLService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} outErr, inErr error id = d.Id() deleteResult bool @@ -376,10 +380,10 @@ func resourceTencentCloudSslCertificateDelete(d *schema.ResourceData, m interfac request := ssl.NewDeleteCertificateRequest() request.CertificateId = helper.String(id) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { deleteResult, inErr = sslService.DeleteCertificate(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if !deleteResult { return resource.NonRetryableError(errors.New("failed to delete certificate")) diff --git a/tencentcloud/resource_tc_ssl_certificate_test.go b/tencentcloud/services/ssl/resource_tc_ssl_certificate_test.go similarity index 91% rename from tencentcloud/resource_tc_ssl_certificate_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_certificate_test.go index 194112e55f..3cd6137fe3 100644 --- a/tencentcloud/resource_tc_ssl_certificate_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_certificate_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssl_test import ( "context" @@ -9,6 +9,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcssl "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssl" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -26,18 +30,16 @@ func init() { } func testSweepSslCertificate(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) - sslService := SSLService{ - client: client.apiV3Conn, - } + sslService := svcssl.NewSSLService(client.GetAPIV3Conn()) describeRequest := ssl.NewDescribeCertificatesRequest() instances, err := sslService.DescribeCertificates(ctx, describeRequest) if err != nil { @@ -49,14 +51,14 @@ func testSweepSslCertificate(region string) error { instanceId := *v.CertificateId instanceName := *v.Alias now := time.Now() - createTime := stringTotime(*v.CertBeginTime) + createTime := tccommon.StringToTime(*v.CertBeginTime) 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 } @@ -73,8 +75,8 @@ func testSweepSslCertificate(region string) error { func TestAccTencentCloudSslCertificate_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: testAccCheckSslCertificateDestroy, Steps: []resource.TestStep{ { @@ -107,8 +109,8 @@ func TestAccTencentCloudSslCertificate_basic(t *testing.T) { func TestAccTencentCloudSslCertificate_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: testAccCheckSslCertificateDestroy, Steps: []resource.TestStep{ { @@ -138,8 +140,8 @@ func TestAccTencentCloudSslCertificate_tags(t *testing.T) { func TestAccTencentCloudSslCertificate_svr(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: testAccCheckSslCertificateDestroy, Steps: []resource.TestStep{ { @@ -165,12 +167,10 @@ func TestAccTencentCloudSslCertificate_svr(t *testing.T) { } func testAccCheckSslCertificateDestroy(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) - sslService := SSLService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + sslService := svcssl.NewSSLService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ssl_certificate" { continue @@ -182,15 +182,15 @@ func testAccCheckSslCertificateDestroy(s *terraform.State) error { describeResponse *ssl.DescribeCertificateDetailResponse outErr, inErr error ) - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { describeResponse, inErr = sslService.DescribeCertificateDetail(ctx, describeRequest) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == CertificateNotFound { + if sdkErr.Code == svcssl.CertificateNotFound { return nil } } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -207,11 +207,9 @@ func testAccCheckSslCertificateDestroy(s *terraform.State) error { func testAccCheckSslCertificateExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sslService := SSLService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService := svcssl.NewSSLService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -227,15 +225,15 @@ func testAccCheckSslCertificateExists(n string) resource.TestCheckFunc { describeResponse *ssl.DescribeCertificateDetailResponse outErr, inErr error ) - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { describeResponse, inErr = sslService.DescribeCertificateDetail(ctx, describeRequest) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == CertificateNotFound { + if sdkErr.Code == svcssl.CertificateNotFound { return nil } } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) diff --git a/tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation.go new file mode 100644 index 0000000000..24e3bf0158 --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation.go @@ -0,0 +1,85 @@ +package ssl + +import ( + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/go-uuid" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslCheckCertificateChainOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslCheckCertificateChainCreate, + Read: resourceTencentCloudSslCheckCertificateChainRead, + Delete: resourceTencentCloudSslCheckCertificateChainDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "certificate_chain": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "The certificate chain to check.", + }, + }, + } +} + +func resourceTencentCloudSslCheckCertificateChainCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewCheckCertificateChainRequest() + ) + if v, ok := d.GetOk("certificate_chain"); ok { + request.CertificateChain = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().CheckCertificateChain(request) + if e != nil { + return tccommon.RetryError(e) + } + if result != nil && result.Response != nil && !*result.Response.IsValid { + err := fmt.Errorf("[DEBUG]%s Certificate chain failed to check, IsValid [%v]\n", logId, *result.Response.IsValid) + return tccommon.RetryError(err) + } + 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 ssl checkCertificateChain failed, reason:%+v", logId, err) + return err + } + id, err := uuid.GenerateUUID() + if err != nil { + return err + } + d.SetId(id) + return resourceTencentCloudSslCheckCertificateChainRead(d, meta) +} + +func resourceTencentCloudSslCheckCertificateChainRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslCheckCertificateChainDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_check_certificate_chain_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_check_certificate_chain_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation_test.go similarity index 95% rename from tencentcloud/resource_tc_ssl_check_certificate_chain_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation_test.go index 0c403853db..dbd4343a64 100644 --- a/tencentcloud/resource_tc_ssl_check_certificate_chain_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_check_certificate_chain_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslCheckCertificateChainResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslCheckCertificateChain, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation.go new file mode 100644 index 0000000000..d108a753f1 --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation.go @@ -0,0 +1,83 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslCompleteCertificateOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslCompleteCertificateCreate, + Read: resourceTencentCloudSslCompleteCertificateRead, + Delete: resourceTencentCloudSslCompleteCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "certificate_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID.", + }, + }, + } +} + +func resourceTencentCloudSslCompleteCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_complete_certificate_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewCompleteCertificateRequest() + response = ssl.NewCompleteCertificateResponse() + certificateId string + ) + if v, ok := d.GetOk("certificate_id"); ok { + request.CertificateId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().CompleteCertificate(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 operate ssl completeCertificate failed, reason:%+v", logId, err) + return err + } + if response != nil && response.Response != nil && response.Response.CertificateId != nil { + certificateId = *response.Response.CertificateId + } + d.SetId(certificateId) + + return resourceTencentCloudSslCompleteCertificateRead(d, meta) +} + +func resourceTencentCloudSslCompleteCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_complete_certificate_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslCompleteCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_complete_certificate_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_complete_certificate_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation_test.go similarity index 79% rename from tencentcloud/resource_tc_ssl_complete_certificate_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation_test.go index e9cacb81fa..88ebb9f985 100644 --- a/tencentcloud/resource_tc_ssl_complete_certificate_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_complete_certificate_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslCompleteCertificateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslCompleteCertificate, diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation.go similarity index 77% rename from tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation.go rename to tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation.go index 1d397f7ec5..c38bc15e5e 100644 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSslDeployCertificateInstanceOperation() *schema.Resource { +func ResourceTencentCloudSslDeployCertificateInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSslDeployCertificateInstanceCreate, Read: resourceTencentCloudSslDeployCertificateInstanceRead, @@ -53,10 +56,10 @@ func resourceTencentCloudSslDeployCertificateInstanceOperation() *schema.Resourc } func resourceTencentCloudSslDeployCertificateInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ssl.NewDeployCertificateInstanceRequest() @@ -83,10 +86,10 @@ func resourceTencentCloudSslDeployCertificateInstanceCreate(d *schema.ResourceDa request.Status = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().DeployCertificateInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().DeployCertificateInstance(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudSslDeployCertificateInstanceCreate(d *schema.ResourceDa } func resourceTencentCloudSslDeployCertificateInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSslDeployCertificateInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation_test.go similarity index 85% rename from tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation_test.go index bb8aa0ca71..40c6d0eeed 100644 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_instance_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_instance_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslDeployCertificateInstanceResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslDeployCertificateInstance, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation.go new file mode 100644 index 0000000000..8ae9082182 --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation.go @@ -0,0 +1,91 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslDeployCertificateRecordRetryOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslDeployCertificateRecordRetryCreate, + Read: resourceTencentCloudSslDeployCertificateRecordRetryRead, + Delete: resourceTencentCloudSslDeployCertificateRecordRetryDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "deploy_record_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Deployment record ID to be retried.", + }, + + "deploy_record_detail_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Deployment record details ID to be retried.", + }, + }, + } +} + +func resourceTencentCloudSslDeployCertificateRecordRetryCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewDeployCertificateRecordRetryRequest() + deployRecordId uint64 + ) + if v, _ := d.GetOk("deploy_record_id"); v != nil { + deployRecordId = (uint64)(v.(int)) + request.DeployRecordId = helper.IntInt64(v.(int)) + } + + if v, _ := d.GetOk("deploy_record_detail_id"); v != nil { + request.DeployRecordDetailId = helper.IntInt64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().DeployCertificateRecordRetry(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 ssl deployCertificateRecordRetry failed, reason:%+v", logId, err) + return err + } + + d.SetId(helper.UInt64ToStr(deployRecordId)) + + return resourceTencentCloudSslDeployCertificateRecordRetryRead(d, meta) +} + +func resourceTencentCloudSslDeployCertificateRecordRetryRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslDeployCertificateRecordRetryDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_retry_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go similarity index 80% rename from tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go index 0cf4626de9..ae84306fe6 100644 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_retry_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslDeployCertificateRecordRetryResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslDeployCertificateRecordRetry, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation.go new file mode 100644 index 0000000000..eac2d8daec --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation.go @@ -0,0 +1,83 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslDeployCertificateRecordRollbackOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslDeployCertificateRecordRollbackCreate, + Read: resourceTencentCloudSslDeployCertificateRecordRollbackRead, + Delete: resourceTencentCloudSslDeployCertificateRecordRollbackDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "deploy_record_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Deployment record ID to be rollback.", + }, + }, + } +} + +func resourceTencentCloudSslDeployCertificateRecordRollbackCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewDeployCertificateRecordRollbackRequest() + response = ssl.NewDeployCertificateRecordRollbackResponse() + deployRecordId int64 + ) + if v, _ := d.GetOk("deploy_record_id"); v != nil { + request.DeployRecordId = helper.IntInt64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().DeployCertificateRecordRollback(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 operate ssl deployCertificateRecordRollback failed, reason:%+v", logId, err) + return err + } + if response != nil && response.Response != nil && response.Response.DeployRecordId != nil { + deployRecordId = *response.Response.DeployRecordId + } + d.SetId(helper.Int64ToStr(deployRecordId)) + + return resourceTencentCloudSslDeployCertificateRecordRollbackRead(d, meta) +} + +func resourceTencentCloudSslDeployCertificateRecordRollbackRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslDeployCertificateRecordRollbackDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_deploy_certificate_record_rollback_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go similarity index 81% rename from tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go index 0b91c4eccd..f515521e99 100644 --- a/tencentcloud/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_deploy_certificate_record_rollback_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslDeployCertificateRecordRollbackResource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslDeployCertificateRecordRollback, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation.go new file mode 100644 index 0000000000..9699c25b2c --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation.go @@ -0,0 +1,108 @@ +package ssl + +import ( + "encoding/base64" + "io/ioutil" + "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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslDownloadCertificateOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslDownloadCertificateCreate, + Read: resourceTencentCloudSslDownloadCertificateRead, + Delete: resourceTencentCloudSslDownloadCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "certificate_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID.", + }, + "output_path": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID.", + }, + }, + } +} + +func resourceTencentCloudSslDownloadCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_download_certificate_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewDownloadCertificateRequest() + response = ssl.NewDownloadCertificateResponse() + certificateId uint64 + outputPath string + ) + if v, ok := d.GetOk("certificate_id"); ok { + certificateId = helper.StrToUInt64(v.(string)) + request.CertificateId = helper.String(v.(string)) + } + if v, ok := d.GetOk("output_path"); ok { + outputPath = v.(string) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().DownloadCertificate(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 operate ssl downloadCertificate failed, reason:%+v", logId, err) + return err + } + + if response != nil && response.Response.Content != nil { + zipBytes, err := base64.StdEncoding.DecodeString(*response.Response.Content) + if err != nil { + return err + } + + // 保存为Zip文件 + err = ioutil.WriteFile("output.zip", zipBytes, 0644) + if err != nil { + return err + } + + log.Printf("Zip file saved successfully. certificateId[%v] path[%s]", certificateId, outputPath) + } + d.SetId(helper.UInt64ToStr(certificateId)) + + return resourceTencentCloudSslDownloadCertificateRead(d, meta) +} + +func resourceTencentCloudSslDownloadCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_download_certificate_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslDownloadCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_download_certificate_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_download_certificate_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation_test.go similarity index 81% rename from tencentcloud/resource_tc_ssl_download_certificate_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation_test.go index 608ffa7fb5..36298dc9a1 100644 --- a/tencentcloud/resource_tc_ssl_download_certificate_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_download_certificate_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslDownloadCertificateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslDownloadCertificate, diff --git a/tencentcloud/resource_tc_ssl_free_certificate.go b/tencentcloud/services/ssl/resource_tc_ssl_free_certificate.go similarity index 89% rename from tencentcloud/resource_tc_ssl_free_certificate.go rename to tencentcloud/services/ssl/resource_tc_ssl_free_certificate.go index 6c4614701e..264bde5bb9 100644 --- a/tencentcloud/resource_tc_ssl_free_certificate.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_free_certificate.go @@ -1,17 +1,20 @@ -package tencentcloud +package ssl import ( "context" "fmt" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + ssl2 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSSLFreeCertificate() *schema.Resource { +func ResourceTencentCloudSSLFreeCertificate() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudFreeCertificateRead, Create: resourceTencentCloudFreeCertificateCreate, @@ -173,12 +176,12 @@ func resourceTencentCloudSSLFreeCertificate() *schema.Resource { } func resourceTencentCloudFreeCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_free_certificate.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_free_certificate.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 := SSLService{client} id := d.Id() @@ -274,11 +277,11 @@ func resourceTencentCloudFreeCertificateRead(d *schema.ResourceData, meta interf } func resourceTencentCloudFreeCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_free_certificate.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_free_certificate.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 := SSLService{client} var ( @@ -333,11 +336,11 @@ func resourceTencentCloudFreeCertificateCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudFreeCertificateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_free_certificate.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_free_certificate.update")() - 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 := SSLService{client} id := d.Id() @@ -390,11 +393,11 @@ func resourceTencentCloudFreeCertificateUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudFreeCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_free_certificate.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_free_certificate.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 := SSLService{client} id := d.Id() diff --git a/tencentcloud/resource_tc_ssl_free_certificate_test.go b/tencentcloud/services/ssl/resource_tc_ssl_free_certificate_test.go similarity index 79% rename from tencentcloud/resource_tc_ssl_free_certificate_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_free_certificate_test.go index 2ec1dfbdd6..ef7d2f5930 100644 --- a/tencentcloud/resource_tc_ssl_free_certificate_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_free_certificate_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ssl_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcssl "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssl" + "context" "testing" "time" @@ -8,6 +12,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ssl2 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -16,11 +21,11 @@ func init() { resource.AddTestSweepers("tencentcloud_ssl_free_certificate", &resource.Sweeper{ Name: "tencentcloud_ssl_free_certificate", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := SSLService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcssl.NewSSLService(client) request := ssl2.NewDescribeCertificatesRequest() request.SearchKey = helper.String("my_free_cert") @@ -37,7 +42,7 @@ func init() { created = time.Time{} } - if isResourcePersist(*name, &created) { + if tcacctest.IsResourcePersist(*name, &created) { continue } request := ssl2.NewDeleteCertificateRequest() @@ -57,8 +62,8 @@ func init() { func TestAccTencentCloudNeedFixSSLFreeCertificate(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: testAccSSLFreeCertificateDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_ssl_pay_certificate.go b/tencentcloud/services/ssl/resource_tc_ssl_pay_certificate.go similarity index 89% rename from tencentcloud/resource_tc_ssl_pay_certificate.go rename to tencentcloud/services/ssl/resource_tc_ssl_pay_certificate.go index 6486ee6e87..04cd9b367a 100644 --- a/tencentcloud/resource_tc_ssl_pay_certificate.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_pay_certificate.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssl import ( "context" @@ -8,14 +8,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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSSLInstance() *schema.Resource { +func ResourceTencentCloudSSLInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSSLInstanceCreate, Read: resourceTencentCloudSSLInstanceRead, @@ -30,7 +33,7 @@ func resourceTencentCloudSSLInstance() *schema.Resource { Type: schema.TypeInt, Required: true, ForceNew: true, - ValidateFunc: validateIntegerInRange(3, 56), + ValidateFunc: tccommon.ValidateIntegerInRange(3, 56), Description: "Certificate commodity ID. Valid value ranges: (3~42). `3` means SecureSite enhanced Enterprise Edition (EV Pro), " + "`4` means SecureSite enhanced (EV), `5` means SecureSite Enterprise Professional Edition (OV Pro), " + "`6` means SecureSite Enterprise (OV), `7` means SecureSite Enterprise Type (OV) wildcard, " + @@ -100,7 +103,7 @@ func resourceTencentCloudSSLInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CsrTypeOnline, - ValidateFunc: validateAllowedStringValue(CsrTypeArr), + ValidateFunc: tccommon.ValidateAllowedStringValue(CsrTypeArr), Description: "CSR generation method. Valid values: `online`, `parse`. " + "`online` means online generation, `parse` means manual upload.", }, @@ -157,7 +160,7 @@ func resourceTencentCloudSSLInstance() *schema.Resource { "verify_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(VerifyType), + ValidateFunc: tccommon.ValidateAllowedStringValue(VerifyType), Description: "Certificate verification method. Valid values: `DNS_AUTO`, `DNS`, `FILE`. " + "`DNS_AUTO` means automatic DNS verification, this verification type is only supported for " + "domain names resolved by Tencent Cloud and the resolution status is normal, " + @@ -278,13 +281,13 @@ func resourceTencentCloudSSLInstance() *schema.Resource { } func resourceTencentCloudSSLInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_pay_certificate.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_pay_certificate.create")() var ( productId = int64(d.Get("product_id").(int)) - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sslService = SSLService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService = SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} certificateId string err error ) @@ -294,7 +297,7 @@ func resourceTencentCloudSSLInstanceCreate(d *schema.ResourceData, meta interfac request.DomainNum = helper.Int64(int64(d.Get("domain_num").(int))) request.TimeSpan = helper.Int64(int64(d.Get("time_span").(int))) - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { certificateId, _, err = sslService.CreateCertificate(ctx, request) if err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { @@ -303,7 +306,7 @@ func resourceTencentCloudSSLInstanceCreate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -312,38 +315,38 @@ func resourceTencentCloudSSLInstanceCreate(d *schema.ResourceData, meta interfac d.SetId(strings.Join([]string{certificateId, strconv.FormatInt(*request.ProductId, 10), strconv.FormatInt(*request.DomainNum, 10), - strconv.FormatInt(*request.TimeSpan, 10)}, FILED_SP)) + strconv.FormatInt(*request.TimeSpan, 10)}, tccommon.FILED_SP)) return resourceTencentCloudSSLInstanceUpdate(d, meta) } func resourceTencentCloudSSLInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_pay_certificate.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_pay_certificate.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - sslService = SSLService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService = SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error response *ssl.DescribeCertificateDetailResponse ) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("ids param is error. id: %s", id) } request := ssl.NewDescribeCertificateDetailRequest() request.CertificateId = helper.String(ids[0]) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, err = sslService.DescribeCertificateDetail(ctx, request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if response == nil || response.Response == nil { err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -398,16 +401,16 @@ func resourceTencentCloudSSLInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_pay_certificate.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_pay_certificate.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) id = d.Id() - sslService = SSLService{client: meta.(*TencentCloudClient).apiV3Conn} + sslService = SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("ids param is error. id: %s", id) } @@ -423,7 +426,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac _, alias := d.GetChange("alias") aliasRequest.Alias = helper.String(alias.(string)) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := sslService.ModifyCertificateAlias(ctx, aliasRequest); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -431,7 +434,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -447,7 +450,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac _, projectId := d.GetChange("project_id") projectRequest.ProjectId = helper.Uint64(uint64(projectId.(int))) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := sslService.ModifyCertificateProject(ctx, projectRequest); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -455,7 +458,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -495,7 +498,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac infoRequest := getSubmitInfoRequest(d) infoRequest.CertificateId = helper.String(certificateId) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := sslService.SubmitCertificateInformation(ctx, infoRequest); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -503,7 +506,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -512,7 +515,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac commitInfoRequest := ssl.NewCommitCertificateInformationRequest() commitInfoRequest.CertificateId = helper.String(certificateId) - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = sslService.CommitCertificateInformation(ctx, commitInfoRequest); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -520,7 +523,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -532,7 +535,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac uploadConfirmLetterRequest := ssl.NewUploadConfirmLetterRequest() uploadConfirmLetterRequest.CertificateId = helper.String(certificateId) uploadConfirmLetterRequest.ConfirmLetter = helper.String(confirmLetter) - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = sslService.UploadConfirmLetter(ctx, uploadConfirmLetterRequest); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -540,7 +543,7 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -554,16 +557,16 @@ func resourceTencentCloudSSLInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudSSLInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_pay_certificate.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_pay_certificate.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() - sslService = SSLService{client: meta.(*TencentCloudClient).apiV3Conn} + sslService = SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err error ) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("ids param is error. id: %s", id) } @@ -571,7 +574,7 @@ func resourceTencentCloudSSLInstanceDelete(d *schema.ResourceData, meta interfac request := ssl.NewCancelCertificateOrderRequest() request.CertificateId = helper.String(ids[0]) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = sslService.CancelCertificateOrder(ctx, request); err != nil { if sdkError, ok := err.(*errors.TencentCloudSDKError); ok { code := sdkError.GetCode() @@ -579,7 +582,7 @@ func resourceTencentCloudSSLInstanceDelete(d *schema.ResourceData, meta interfac return resource.NonRetryableError(sdkError) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_ssl_pay_certificate_test.go b/tencentcloud/services/ssl/resource_tc_ssl_pay_certificate_test.go similarity index 91% rename from tencentcloud/resource_tc_ssl_pay_certificate_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_pay_certificate_test.go index fb4c810ab7..f66649c5a7 100644 --- a/tencentcloud/resource_tc_ssl_pay_certificate_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_pay_certificate_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssl_test import ( "context" @@ -6,9 +6,14 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcssl "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssl" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -18,8 +23,8 @@ func TestAccTencentCloudSSLInstance(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: testAccCheckSSLInstanceDestroy, Steps: []resource.TestStep{ { @@ -107,18 +112,16 @@ func TestAccTencentCloudSSLInstance(t *testing.T) { } func testAccCheckSSLInstanceDestroy(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) - sslService := SSLService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + sslService := svcssl.NewSSLService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ssl_pay_certificate" { continue } resourceId := rs.Primary.ID - ids := strings.Split(resourceId, FILED_SP) + ids := strings.Split(resourceId, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("ids param is error. id: %s", resourceId) } @@ -149,11 +152,9 @@ func testAccCheckSSLInstanceDestroy(s *terraform.State) error { func testAccCheckSSLInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sslService := SSLService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sslService := svcssl.NewSSLService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -163,7 +164,7 @@ func testAccCheckSSLInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("[TECENT_TERRAFORM_CHECK][SSL instance][Exists] check: SSL instance certificateId is not set") } resourceId := rs.Primary.ID - ids := strings.Split(resourceId, FILED_SP) + ids := strings.Split(resourceId, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("ids param is error. id: %s", resourceId) } diff --git a/tencentcloud/resource_tc_ssl_replace_certificate_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation.go similarity index 83% rename from tencentcloud/resource_tc_ssl_replace_certificate_operation.go rename to tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation.go index 90c2a85ca9..689ad04903 100644 --- a/tencentcloud/resource_tc_ssl_replace_certificate_operation.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSslReplaceCertificateOperation() *schema.Resource { +func ResourceTencentCloudSslReplaceCertificateOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSslReplaceCertificateCreate, Read: resourceTencentCloudSslReplaceCertificateRead, @@ -78,10 +81,10 @@ func resourceTencentCloudSslReplaceCertificateOperation() *schema.Resource { } func resourceTencentCloudSslReplaceCertificateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_replace_certificate_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_replace_certificate_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ssl.NewReplaceCertificateRequest() @@ -120,10 +123,10 @@ func resourceTencentCloudSslReplaceCertificateCreate(d *schema.ResourceData, met request.CertCSRKeyParameter = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().ReplaceCertificate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().ReplaceCertificate(request) if e != nil { - return retryError(e) + return tccommon.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,15 +147,15 @@ func resourceTencentCloudSslReplaceCertificateCreate(d *schema.ResourceData, met } func resourceTencentCloudSslReplaceCertificateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_replace_certificate_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_replace_certificate_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSslReplaceCertificateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_replace_certificate_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_replace_certificate_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ssl_replace_certificate_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation_test.go similarity index 83% rename from tencentcloud/resource_tc_ssl_replace_certificate_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation_test.go index 8cf01a43dc..db722ff762 100644 --- a/tencentcloud/resource_tc_ssl_replace_certificate_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_replace_certificate_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslReplaceCertificateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslReplaceCertificate, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation.go new file mode 100644 index 0000000000..c544f000af --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation.go @@ -0,0 +1,97 @@ +package ssl + +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" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslRevokeCertificateOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslRevokeCertificateCreate, + Read: resourceTencentCloudSslRevokeCertificateRead, + Delete: resourceTencentCloudSslRevokeCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "certificate_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID.", + }, + + "reason": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Reasons for revoking certificate.", + }, + }, + } +} + +func resourceTencentCloudSslRevokeCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewRevokeCertificateRequest() + certificateId string + ) + if v, ok := d.GetOk("certificate_id"); ok { + certificateId = v.(string) + request.CertificateId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("reason"); ok { + request.Reason = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().RevokeCertificate(request) + if e != nil { + if sdkerr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { + if sdkerr.Code == "FailedOperation.OrderAlreadyReplaced" { + return 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 ssl revokeCertificate failed, reason:%+v", logId, err) + return err + } + + d.SetId(certificateId) + + return resourceTencentCloudSslRevokeCertificateRead(d, meta) +} + +func resourceTencentCloudSslRevokeCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslRevokeCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_revoke_certificate_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_revoke_certificate_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation_test.go similarity index 78% rename from tencentcloud/resource_tc_ssl_revoke_certificate_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation_test.go index 02b2da03f0..790c8a3c57 100644 --- a/tencentcloud/resource_tc_ssl_revoke_certificate_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_revoke_certificate_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslRevokeCertificateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslRevokeCertificate, diff --git a/tencentcloud/resource_tc_ssl_update_certificate_instance_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation.go similarity index 88% rename from tencentcloud/resource_tc_ssl_update_certificate_instance_operation.go rename to tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation.go index 702e07b1cc..ddb1f62204 100644 --- a/tencentcloud/resource_tc_ssl_update_certificate_instance_operation.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation.go @@ -1,16 +1,19 @@ -package tencentcloud +package ssl 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" ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSslUpdateCertificateInstanceOperation() *schema.Resource { +func ResourceTencentCloudSslUpdateCertificateInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSslUpdateCertificateInstanceOperationCreate, Read: resourceTencentCloudSslUpdateCertificateInstanceOperationRead, @@ -115,10 +118,10 @@ func resourceTencentCloudSslUpdateCertificateInstanceOperation() *schema.Resourc } func resourceTencentCloudSslUpdateCertificateInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ssl.NewUpdateCertificateInstanceRequest() @@ -187,10 +190,10 @@ func resourceTencentCloudSslUpdateCertificateInstanceOperationCreate(d *schema.R request.ProjectId = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSSLCertificateClient().UpdateCertificateInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().UpdateCertificateInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -216,15 +219,15 @@ func resourceTencentCloudSslUpdateCertificateInstanceOperationCreate(d *schema.R } func resourceTencentCloudSslUpdateCertificateInstanceOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudSslUpdateCertificateInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ssl_update_certificate_instance_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation_test.go similarity index 85% rename from tencentcloud/resource_tc_ssl_update_certificate_instance_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation_test.go index 8848b2c1b5..72c66eee4c 100644 --- a/tencentcloud/resource_tc_ssl_update_certificate_instance_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_instance_operation_test.go @@ -1,17 +1,20 @@ -package tencentcloud +package ssl_test import ( - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudSslUpdateCertificateInstanceOperationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslUpdateCertificateInstanceOperation, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation.go new file mode 100644 index 0000000000..935be1cf17 --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation.go @@ -0,0 +1,91 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslUpdateCertificateRecordRetryOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslUpdateCertificateRecordRetryCreate, + Read: resourceTencentCloudSslUpdateCertificateRecordRetryRead, + Delete: resourceTencentCloudSslUpdateCertificateRecordRetryDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "deploy_record_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Deployment record ID to be retried.", + }, + + "deploy_record_detail_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Deployment record details ID to be retried.", + }, + }, + } +} + +func resourceTencentCloudSslUpdateCertificateRecordRetryCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewUpdateCertificateRecordRetryRequest() + deployRecordId int + ) + if v, _ := d.GetOk("deploy_record_id"); v != nil { + deployRecordId = v.(int) + request.DeployRecordId = helper.IntInt64(v.(int)) + } + + if v, _ := d.GetOk("deploy_record_detail_id"); v != nil { + request.DeployRecordDetailId = helper.IntInt64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().UpdateCertificateRecordRetry(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 ssl updateCertificateRecordRetry failed, reason:%+v", logId, err) + return err + } + + d.SetId(helper.IntToStr(deployRecordId)) + + return resourceTencentCloudSslUpdateCertificateRecordRetryRead(d, meta) +} + +func resourceTencentCloudSslUpdateCertificateRecordRetryRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslUpdateCertificateRecordRetryDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_retry_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation_test.go similarity index 83% rename from tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation_test.go index 385b4b0c54..3fcfaee064 100644 --- a/tencentcloud/resource_tc_ssl_update_certificate_record_retry_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_retry_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslUpdateCertificateRecordRetryResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslUpdateCertificateRecordRetry, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation.go new file mode 100644 index 0000000000..21a56df0a8 --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation.go @@ -0,0 +1,83 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslUpdateCertificateRecordRollbackOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslUpdateCertificateRecordRollbackCreate, + Read: resourceTencentCloudSslUpdateCertificateRecordRollbackRead, + Delete: resourceTencentCloudSslUpdateCertificateRecordRollbackDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "deploy_record_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Deployment record ID to be rolled back.", + }, + }, + } +} + +func resourceTencentCloudSslUpdateCertificateRecordRollbackCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewUpdateCertificateRecordRollbackRequest() + response = ssl.NewUpdateCertificateRecordRollbackResponse() + deployRecordId int64 + ) + if v, _ := d.GetOk("deploy_record_id"); v != nil { + request.DeployRecordId = helper.StrToInt64Point(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().UpdateCertificateRecordRollback(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 operate ssl updateCertificateRecordRollback failed, reason:%+v", logId, err) + return err + } + if response != nil && response.Response != nil && response.Response.DeployRecordId != nil { + deployRecordId = *response.Response.DeployRecordId + } + d.SetId(helper.Int64ToStr(deployRecordId)) + + return resourceTencentCloudSslUpdateCertificateRecordRollbackRead(d, meta) +} + +func resourceTencentCloudSslUpdateCertificateRecordRollbackRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslUpdateCertificateRecordRollbackDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_update_certificate_record_rollback_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation_test.go similarity index 81% rename from tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation_test.go index 538edb4193..7e2bd83d87 100644 --- a/tencentcloud/resource_tc_ssl_update_certificate_record_rollback_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_update_certificate_record_rollback_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslUpdateCertificateRecordRollbackResource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslUpdateCertificateRecordRollback, diff --git a/tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation.go b/tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation.go new file mode 100644 index 0000000000..9922cc11de --- /dev/null +++ b/tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation.go @@ -0,0 +1,94 @@ +package ssl + +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" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSslUploadRevokeLetterOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSslUploadRevokeLetterCreate, + Read: resourceTencentCloudSslUploadRevokeLetterRead, + Delete: resourceTencentCloudSslUploadRevokeLetterDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "certificate_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID.", + }, + + "revoke_letter": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "The format of the base64-encoded certificate confirmation letter file should be jpg, jpeg, png, or pdf, and the size should be between 1kb and 1.4M.", + }, + }, + } +} + +func resourceTencentCloudSslUploadRevokeLetterCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = ssl.NewUploadRevokeLetterRequest() + response = ssl.NewUploadRevokeLetterResponse() + certificateId string + ) + if v, ok := d.GetOk("certificate_id"); ok { + request.CertificateId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("revoke_letter"); ok { + request.RevokeLetter = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSSLCertificateClient().UploadRevokeLetter(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 operate ssl uploadRevokeLetter failed, reason:%+v", logId, err) + return err + } + if response != nil && response.Response != nil && response.Response.CertificateId != nil { + certificateId = *response.Response.CertificateId + } + d.SetId(certificateId) + + return resourceTencentCloudSslUploadRevokeLetterRead(d, meta) +} + +func resourceTencentCloudSslUploadRevokeLetterRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSslUploadRevokeLetterDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssl_upload_revoke_letter_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssl_upload_revoke_letter_operation_test.go b/tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation_test.go similarity index 81% rename from tencentcloud/resource_tc_ssl_upload_revoke_letter_operation_test.go rename to tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation_test.go index f87aa09326..e962e205f5 100644 --- a/tencentcloud/resource_tc_ssl_upload_revoke_letter_operation_test.go +++ b/tencentcloud/services/ssl/resource_tc_ssl_upload_revoke_letter_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssl_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 TestAccTencentCloudSslUploadRevokeLetterResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_SSL) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SSL) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccSslUploadRevokeLetter, diff --git a/tencentcloud/services/ssl/service_tencent_ssl_certificate.go b/tencentcloud/services/ssl/service_tencent_ssl_certificate.go new file mode 100644 index 0000000000..197276a0d7 --- /dev/null +++ b/tencentcloud/services/ssl/service_tencent_ssl_certificate.go @@ -0,0 +1,1493 @@ +package ssl + +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" +) + +func NewSSLService(client *connectivity.TencentCloudClient) SSLService { + return SSLService{client: client} +} + +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/ssl/service_tencentcloud_ssl.go b/tencentcloud/services/ssl/service_tencentcloud_ssl.go new file mode 100644 index 0000000000..bb9ba4161b --- /dev/null +++ b/tencentcloud/services/ssl/service_tencentcloud_ssl.go @@ -0,0 +1,248 @@ +package ssl + +import ( + "context" + "errors" + "fmt" + "log" + "strconv" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss/v20180426" + + "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/ssm/data_source_tc_ssm_products.go b/tencentcloud/services/ssm/data_source_tc_ssm_products.go new file mode 100644 index 0000000000..af627ddc97 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_products.go @@ -0,0 +1,71 @@ +package ssm + +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 DataSourceTencentCloudSsmProducts() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSsmProductsRead, + Schema: map[string]*schema.Schema{ + "products": { + Computed: true, + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Description: "List of supported services.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSsmProductsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_products.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + products []*string + ) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSsmProductsByFilter(ctx) + if e != nil { + return tccommon.RetryError(e) + } + + products = result + return nil + }) + + if err != nil { + return err + } + + if products != nil { + _ = d.Set("products", products) + } + + d.SetId(helper.StrListToStr(products)) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), products); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/ssm/data_source_tc_ssm_products_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_products_test.go new file mode 100644 index 0000000000..4f6c2e9539 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_products_test.go @@ -0,0 +1,32 @@ +package ssm_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSsmProductsDataSource_basic -v +func TestAccTencentCloudSsmProductsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSsmProductsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_products.products"), + ), + }, + }, + }) +} + +const testAccSsmProductsDataSource = ` +data "tencentcloud_ssm_products" "products" {} +` diff --git a/tencentcloud/data_source_tc_ssm_rotation_detail.go b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_detail.go similarity index 77% rename from tencentcloud/data_source_tc_ssm_rotation_detail.go rename to tencentcloud/services/ssm/data_source_tc_ssm_rotation_detail.go index 30235c193d..27f873d576 100644 --- a/tencentcloud/data_source_tc_ssm_rotation_detail.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssm 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" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSsmRotationDetail() *schema.Resource { +func DataSourceTencentCloudSsmRotationDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSsmRotationDetailRead, Schema: map[string]*schema.Schema{ @@ -48,13 +51,13 @@ func dataSourceTencentCloudSsmRotationDetail() *schema.Resource { } func dataSourceTencentCloudSsmRotationDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_rotation_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_rotation_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} rotationDetail *ssm.DescribeRotationDetailResponseParams secretName string ) @@ -65,10 +68,10 @@ func dataSourceTencentCloudSsmRotationDetailRead(d *schema.ResourceData, meta in secretName = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSsmRotationDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } rotationDetail = result @@ -98,7 +101,7 @@ func dataSourceTencentCloudSsmRotationDetailRead(d *schema.ResourceData, meta in d.SetId(secretName) 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/ssm/data_source_tc_ssm_rotation_detail_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_detail_test.go new file mode 100644 index 0000000000..1e53e721d5 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_detail_test.go @@ -0,0 +1,34 @@ +package ssm_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixSsmRotationDetailDataSource_basic -v +func TestAccTencentCloudNeedFixSsmRotationDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSsmRotationDetailDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_rotation_detail.example"), + ), + }, + }, + }) +} + +const testAccSsmRotationDetailDataSource = ` +data "tencentcloud_ssm_rotation_detail" "example" { + secret_name = "tf_example" +} +` diff --git a/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history.go b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history.go new file mode 100644 index 0000000000..372f5239f0 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history.go @@ -0,0 +1,83 @@ +package ssm + +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 DataSourceTencentCloudSsmRotationHistory() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSsmRotationHistoryRead, + Schema: map[string]*schema.Schema{ + "secret_name": { + Required: true, + Type: schema.TypeString, + Description: "Secret name.", + }, + "version_ids": { + Computed: true, + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Description: "The number of version numbers. The maximum number of version numbers that can be displayed to users is 10.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSsmRotationHistoryRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_rotation_history.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + versionIDs []*string + secretName string + ) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("secret_name"); ok { + paramMap["SecretName"] = helper.String(v.(string)) + secretName = v.(string) + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSsmRotationHistoryByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + + versionIDs = result + return nil + }) + + if err != nil { + return err + } + + if versionIDs != nil { + _ = d.Set("version_ids", versionIDs) + } + + d.SetId(secretName) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history_test.go new file mode 100644 index 0000000000..989360d3a5 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_rotation_history_test.go @@ -0,0 +1,34 @@ +package ssm_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixSsmRotationHistoryDataSource_basic -v +func TestAccTencentCloudNeedFixSsmRotationHistoryDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSsmRotationHistoryDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_rotation_history.example"), + ), + }, + }, + }) +} + +const testAccSsmRotationHistoryDataSource = ` +data "tencentcloud_ssm_rotation_history" "example" { + secret_name = "keep_terraform" +} +` diff --git a/tencentcloud/data_source_tc_ssm_secret_versions.go b/tencentcloud/services/ssm/data_source_tc_ssm_secret_versions.go similarity index 80% rename from tencentcloud/data_source_tc_ssm_secret_versions.go rename to tencentcloud/services/ssm/data_source_tc_ssm_secret_versions.go index 60bb00b793..883ae34add 100644 --- a/tencentcloud/data_source_tc_ssm_secret_versions.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_secret_versions.go @@ -1,17 +1,20 @@ -package tencentcloud +package ssm 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" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSsmSecretVersions() *schema.Resource { +func DataSourceTencentCloudSsmSecretVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSsmSecretVersionsRead, Schema: map[string]*schema.Schema{ @@ -59,21 +62,21 @@ func dataSourceTencentCloudSsmSecretVersions() *schema.Resource { } func dataSourceTencentCloudSsmSecretVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_secret_versions.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_secret_versions.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} secretName = d.Get("secret_name").(string) outErr, inErr error secretInfo *SecretInfo ) - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil @@ -101,10 +104,10 @@ func dataSourceTencentCloudSsmSecretVersionsRead(d *schema.ResourceData, meta in if v, ok := d.GetOk("version_id"); ok { versionIds = append(versionIds, v.(string)) } else { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { versionIds, inErr = ssmService.DescribeSecretVersionIdsByName(ctx, secretName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -115,10 +118,10 @@ func dataSourceTencentCloudSsmSecretVersionsRead(d *schema.ResourceData, meta in } for _, versionId := range versionIds { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { secretVersionInfo, inErr := ssmService.DescribeSecretVersion(ctx, secretName, versionId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } secretVersionInfos = append(secretVersionInfos, secretVersionInfo) return nil @@ -139,7 +142,7 @@ func dataSourceTencentCloudSsmSecretVersionsRead(d *schema.ResourceData, meta in } secretVersionList = append(secretVersionList, mapping) - ids = append(ids, strings.Join([]string{secretVersionInfo.secretName, secretVersionInfo.versionId}, FILED_SP)) + ids = append(ids, strings.Join([]string{secretVersionInfo.secretName, secretVersionInfo.versionId}, tccommon.FILED_SP)) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -149,7 +152,7 @@ func dataSourceTencentCloudSsmSecretVersionsRead(d *schema.ResourceData, meta in } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), secretVersionList) + return tccommon.WriteToFile(output.(string), secretVersionList) } return nil diff --git a/tencentcloud/data_source_tc_ssm_secret_versions_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_secret_versions_test.go similarity index 83% rename from tencentcloud/data_source_tc_ssm_secret_versions_test.go rename to tencentcloud/services/ssm/data_source_tc_ssm_secret_versions_test.go index 2a78ab2b2a..6e844d7e62 100644 --- a/tencentcloud/data_source_tc_ssm_secret_versions_test.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_secret_versions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,13 +14,13 @@ func TestAccTencentCloudSsmSecretVersionsDataSource(t *testing.T) { dataSourceName := "data.tencentcloud_ssm_secret_versions.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccTencentCloudSsmSecretVersionsDataSourceConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(dataSourceName), + tcacctest.AccCheckTencentCloudDataSourceID(dataSourceName), resource.TestCheckResourceAttr(dataSourceName, "secret_version_list.0.version_id", "v1"), resource.TestCheckResourceAttr(dataSourceName, "secret_version_list.0.secret_binary", "MTIzMTIzMTIzMTIzMTIzQQ=="), ), diff --git a/tencentcloud/data_source_tc_ssm_secrets.go b/tencentcloud/services/ssm/data_source_tc_ssm_secrets.go similarity index 93% rename from tencentcloud/data_source_tc_ssm_secrets.go rename to tencentcloud/services/ssm/data_source_tc_ssm_secrets.go index 0f4156d9e2..0859e24442 100644 --- a/tencentcloud/data_source_tc_ssm_secrets.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_secrets.go @@ -1,16 +1,19 @@ -package tencentcloud +package ssm 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" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSsmSecrets() *schema.Resource { +func DataSourceTencentCloudSsmSecrets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSsmSecretsRead, Schema: map[string]*schema.Schema{ @@ -162,12 +165,12 @@ func dataSourceTencentCloudSsmSecrets() *schema.Resource { } func dataSourceTencentCloudSsmSecretsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_secrets.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_secrets.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} secrets []*ssm.SecretMetadata ) @@ -196,10 +199,10 @@ func dataSourceTencentCloudSsmSecretsRead(d *schema.ResourceData, meta interface param["product_name"] = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := ssmService.DescribeSecretsByFilter(ctx, param) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } secrets = results @@ -247,7 +250,7 @@ func dataSourceTencentCloudSsmSecretsRead(d *schema.ResourceData, meta interface } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), secretList) + return tccommon.WriteToFile(output.(string), secretList) } return nil diff --git a/tencentcloud/data_source_tc_ssm_secrets_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_secrets_test.go similarity index 83% rename from tencentcloud/data_source_tc_ssm_secrets_test.go rename to tencentcloud/services/ssm/data_source_tc_ssm_secrets_test.go index 22e849fc9b..4230351d23 100644 --- a/tencentcloud/data_source_tc_ssm_secrets_test.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_secrets_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,13 +14,13 @@ func TestAccTencentCloudSsmSecretsDataSource(t *testing.T) { dataSourceName := "data.tencentcloud_ssm_secrets.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccTencentCloudSsmSecretsDataSourceConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(dataSourceName), + tcacctest.AccCheckTencentCloudDataSourceID(dataSourceName), resource.TestCheckResourceAttr(dataSourceName, "secret_list.0.secret_name", "tf_example_ssm_secret"), resource.TestCheckResourceAttr(dataSourceName, "secret_list.0.description", "desc."), resource.TestCheckResourceAttrSet(dataSourceName, "secret_list.0.kms_key_id"), diff --git a/tencentcloud/services/ssm/data_source_tc_ssm_service_status.go b/tencentcloud/services/ssm/data_source_tc_ssm_service_status.go new file mode 100644 index 0000000000..09c5642581 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_service_status.go @@ -0,0 +1,89 @@ +package ssm + +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" + ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" +) + +func DataSourceTencentCloudSsmServiceStatus() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudSsmServiceStatusRead, + Schema: map[string]*schema.Schema{ + "service_enabled": { + Computed: true, + Type: schema.TypeBool, + Description: "True means the service has been activated, false means the service has not been activated yet.", + }, + "invalid_type": { + Computed: true, + Type: schema.TypeInt, + Description: "Service unavailability type: 0-Not purchased, 1-Normal, 2-Service suspended due to arrears, 3-Resource release.", + }, + "access_key_escrow_enabled": { + Computed: true, + Type: schema.TypeBool, + Description: "True means that the user can already use the key safe hosting function, false means that the user cannot use the key safe hosting function temporarily.", + }, + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudSsmServiceStatusRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_service_status.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + serviceStatus *ssm.GetServiceStatusResponseParams + ) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeSsmServiceStatusByFilter(ctx) + if e != nil { + return tccommon.RetryError(e) + } + + serviceStatus = result + return nil + }) + + if err != nil { + return err + } + + if serviceStatus.ServiceEnabled != nil { + _ = d.Set("service_enabled", serviceStatus.ServiceEnabled) + } + + if serviceStatus.InvalidType != nil { + _ = d.Set("invalid_type", serviceStatus.InvalidType) + } + + if serviceStatus.AccessKeyEscrowEnabled != nil { + _ = d.Set("access_key_escrow_enabled", serviceStatus.AccessKeyEscrowEnabled) + } + + d.SetId(strconv.FormatInt(time.Now().Unix(), 10)) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), d); e != nil { + return e + } + } + + return nil +} diff --git a/tencentcloud/services/ssm/data_source_tc_ssm_service_status_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_service_status_test.go new file mode 100644 index 0000000000..df2ef11ee2 --- /dev/null +++ b/tencentcloud/services/ssm/data_source_tc_ssm_service_status_test.go @@ -0,0 +1,31 @@ +package ssm_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudSsmServiceStatusDataSource_basic -v +func TestAccTencentCloudSsmServiceStatusDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccSsmServiceStatusDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_service_status.example")), + }, + }, + }) +} + +const testAccSsmServiceStatusDataSource = ` +data "tencentcloud_ssm_service_status" "example" {} +` diff --git a/tencentcloud/data_source_tc_ssm_ssh_key_pair_value.go b/tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value.go similarity index 81% rename from tencentcloud/data_source_tc_ssm_ssh_key_pair_value.go rename to tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value.go index 8a04fcbcce..329a96970b 100644 --- a/tencentcloud/data_source_tc_ssm_ssh_key_pair_value.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value.go @@ -1,15 +1,18 @@ -package tencentcloud +package ssm 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" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSsmSshKeyPairValue() *schema.Resource { +func DataSourceTencentCloudSsmSshKeyPairValue() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSsmSshKeyPairValueRead, Schema: map[string]*schema.Schema{ @@ -60,13 +63,13 @@ func dataSourceTencentCloudSsmSshKeyPairValue() *schema.Resource { } func dataSourceTencentCloudSsmSshKeyPairValueRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ssm_ssh_key_pair_value.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ssm_ssh_key_pair_value.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} sshKeyPairValue *ssm.GetSSHKeyPairValueResponseParams sshKeyID string ) @@ -80,10 +83,10 @@ func dataSourceTencentCloudSsmSshKeyPairValueRead(d *schema.ResourceData, meta i paramMap["SSHKeyId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeSsmSshKeyPairValueByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } sshKeyPairValue = result @@ -122,7 +125,7 @@ func dataSourceTencentCloudSsmSshKeyPairValueRead(d *schema.ResourceData, meta i d.SetId(sshKeyID) 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_ssm_ssh_key_pair_value_test.go b/tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value_test.go similarity index 75% rename from tencentcloud/data_source_tc_ssm_ssh_key_pair_value_test.go rename to tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value_test.go index 5e208a02d2..a1c8320ea0 100644 --- a/tencentcloud/data_source_tc_ssm_ssh_key_pair_value_test.go +++ b/tencentcloud/services/ssm/data_source_tc_ssm_ssh_key_pair_value_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssm_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 TestAccTencentCloudSsmSshKeyPairValueDataSource_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: testAccSsmSshKeyPairValueDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_ssh_key_pair_value.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssm_ssh_key_pair_value.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_ssm_ssh_key_pair_value.example", "secret_name"), resource.TestCheckResourceAttrSet("data.tencentcloud_ssm_ssh_key_pair_value.example", "ssh_key_id"), ), diff --git a/tencentcloud/extension_ssm.go b/tencentcloud/services/ssm/extension_ssm.go similarity index 91% rename from tencentcloud/extension_ssm.go rename to tencentcloud/services/ssm/extension_ssm.go index 638d8f1f2b..43f1dceb05 100644 --- a/tencentcloud/extension_ssm.go +++ b/tencentcloud/services/ssm/extension_ssm.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssm const ( SSM_PAGE_LIMIT = 200 diff --git a/tencentcloud/resource_tc_ssm_product_secret.go b/tencentcloud/services/ssm/resource_tc_ssm_product_secret.go similarity index 81% rename from tencentcloud/resource_tc_ssm_product_secret.go rename to tencentcloud/services/ssm/resource_tc_ssm_product_secret.go index deae5c3fcf..aa6e7fcf1b 100644 --- a/tencentcloud/resource_tc_ssm_product_secret.go +++ b/tencentcloud/services/ssm/resource_tc_ssm_product_secret.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssm import ( "context" @@ -6,13 +6,17 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudSsmProductSecret() *schema.Resource { +func ResourceTencentCloudSsmProductSecret() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSsmProductSecretCreate, Read: resourceTencentCloudSsmProductSecretRead, @@ -118,7 +122,7 @@ func resourceTencentCloudSsmProductSecret() *schema.Resource { Optional: true, Type: schema.TypeString, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{"Enabled", "Disabled"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"Enabled", "Disabled"}), Description: "Enable or Disable Secret. Valid values is `Enabled` or `Disabled`. Default is `Enabled`.", }, "create_time": { @@ -136,13 +140,13 @@ func resourceTencentCloudSsmProductSecret() *schema.Resource { } func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_product_secret.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssm_product_secret.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = ssm.NewCreateProductSecretRequest() response = ssm.NewCreateProductSecretResponse() secretInfo *SecretInfo @@ -220,10 +224,10 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int request.RotationFrequency = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().CreateProductSecret(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().CreateProductSecret(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -240,7 +244,7 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int secretName = *response.Response.SecretName d.SetId(secretName) flowId := *response.Response.FlowID - conf := BuildStateChangeConf([]string{}, []string{"1"}, readRetryTimeout, time.Second, service.SsmProductSecretStateRefreshFunc(flowId, []string{"0"})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, tccommon.ReadRetryTimeout, time.Second, service.SsmProductSecretStateRefreshFunc(flowId, []string{"0"})) if _, e := conf.WaitForState(); e != nil { return e @@ -250,7 +254,7 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int if v, ok := d.GetOk("status"); ok { status := v.(string) if status == "Disabled" { - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) err = service.DisableSecret(ctx, secretName) if err != nil { return err @@ -259,10 +263,10 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { secretInfo, err = service.DescribeSecretByName(ctx, secretName) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil @@ -272,9 +276,9 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int return err } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) if err = tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -284,13 +288,13 @@ func resourceTencentCloudSsmProductSecretCreate(d *schema.ResourceData, meta int } func resourceTencentCloudSsmProductSecretRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_product_secret.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssm_product_secret.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} secretInfo *SecretInfo secretName = d.Id() ) @@ -349,10 +353,10 @@ func resourceTencentCloudSsmProductSecretRead(d *schema.ResourceData, meta inter _ = d.Set("secret_type", productSecret.SecretType) } - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { secretInfo, err = service.DescribeSecretByName(ctx, secretName) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil @@ -362,8 +366,8 @@ func resourceTencentCloudSsmProductSecretRead(d *schema.ResourceData, meta inter return outErr } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "ssm", "secret", tcClient.Region, secretInfo.resourceId) if err != nil { return err @@ -375,13 +379,13 @@ func resourceTencentCloudSsmProductSecretRead(d *schema.ResourceData, meta inter } func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_product_secret.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssm_product_secret.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - ssmService = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} secretName = d.Id() ) @@ -404,10 +408,10 @@ func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta int request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().UpdateDescription(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().UpdateDescription(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -420,7 +424,7 @@ func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta int } if d.HasChange("status") { - service := SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if v, ok := d.GetOk("status"); ok { status := v.(string) @@ -454,10 +458,10 @@ func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta int request.Frequency = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseSsmClient().UpdateRotationStatus(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().UpdateRotationStatus(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -470,17 +474,17 @@ func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta int } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) secretInfo, err := ssmService.DescribeSecretByName(ctx, secretName) if err != nil { return err } - resourceName := BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) if err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -491,13 +495,13 @@ func resourceTencentCloudSsmProductSecretUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudSsmProductSecretDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ssm_product_secret.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ssm_product_secret.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = SsmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} secretName = d.Id() ) diff --git a/tencentcloud/resource_tc_ssm_product_secret_test.go b/tencentcloud/services/ssm/resource_tc_ssm_product_secret_test.go similarity index 93% rename from tencentcloud/resource_tc_ssm_product_secret_test.go rename to tencentcloud/services/ssm/resource_tc_ssm_product_secret_test.go index f29c870b12..275cd18b2c 100644 --- a/tencentcloud/resource_tc_ssm_product_secret_test.go +++ b/tencentcloud/services/ssm/resource_tc_ssm_product_secret_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssm_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 TestAccTencentCloudSsmProductSecretResource_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: testAccSsmProductSecret, diff --git a/tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret.go b/tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret.go new file mode 100644 index 0000000000..f230d5a7ca --- /dev/null +++ b/tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret.go @@ -0,0 +1,108 @@ +package ssm + +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" + ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSsmRotateProductSecret() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSsmRotateProductSecretCreate, + Read: resourceTencentCloudSsmRotateProductSecretRead, + Delete: resourceTencentCloudSsmRotateProductSecretDelete, + + Schema: map[string]*schema.Schema{ + "secret_name": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Secret name.", + }, + }, + } +} + +func resourceTencentCloudSsmRotateProductSecretCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_rotate_product_secret.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = ssm.NewRotateProductSecretRequest() + response = ssm.NewRotateProductSecretResponse() + asyncRequest = ssm.NewDescribeAsyncRequestInfoRequest() + secretName string + flowId int64 + ) + + if v, ok := d.GetOk("secret_name"); ok { + request.SecretName = helper.String(v.(string)) + secretName = v.(string) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().RotateProductSecret(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 operate ssm rotateProductSecret failed, reason:%+v", logId, err) + return err + } + + d.SetId(secretName) + + // wait + flowId = *response.Response.FlowID + asyncRequest.FlowID = &flowId + err = resource.Retry(tccommon.WriteRetryTimeout*3, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().DescribeAsyncRequestInfo(asyncRequest) + 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()) + } + + if *result.Response.TaskStatus == 1 { + return nil + } + + return resource.RetryableError(fmt.Errorf("operate ssm describeAsyncRequestInfo status is %d", *result.Response.TaskStatus)) + }) + + if err != nil { + log.Printf("[CRITAL]%s operate ssm describeAsyncRequestInfo failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudSsmRotateProductSecretRead(d, meta) +} + +func resourceTencentCloudSsmRotateProductSecretRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_rotate_product_secret.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudSsmRotateProductSecretDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_rotate_product_secret.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_ssm_rotate_product_secret_test.go b/tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret_test.go similarity index 82% rename from tencentcloud/resource_tc_ssm_rotate_product_secret_test.go rename to tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret_test.go index ef495c6bbe..24afe81c12 100644 --- a/tencentcloud/resource_tc_ssm_rotate_product_secret_test.go +++ b/tencentcloud/services/ssm/resource_tc_ssm_rotate_product_secret_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ssm_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 TestAccTencentCloudNeedFixSsmRotateProductSecretResource_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: testAccSsmRotateProductSecret, diff --git a/tencentcloud/services/ssm/resource_tc_ssm_secret.go b/tencentcloud/services/ssm/resource_tc_ssm_secret.go new file mode 100644 index 0000000000..dc05700352 --- /dev/null +++ b/tencentcloud/services/ssm/resource_tc_ssm_secret.go @@ -0,0 +1,406 @@ +package ssm + +import ( + "context" + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + + "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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSsmSecret() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSsmSecretCreate, + Read: resourceTencentCloudSsmSecretRead, + Update: resourceTencentCloudSsmSecretUpdate, + Delete: resourceTencentCloudSsmSecretDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "secret_name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of secret which cannot be repeated in the same region. The maximum length is 128 bytes. The name can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", + }, + "description": { + Type: schema.TypeString, + Optional: true, + Description: "Description of secret. The maximum is 2048 bytes.", + }, + "kms_key_id": { + Type: schema.TypeString, + ForceNew: true, + Optional: true, + Computed: true, + Description: "KMS keyId used to encrypt secret. If it is empty, it means that the CMK created by SSM for you by default is used for encryption. You can also specify the KMS CMK created by yourself in the same region for encryption.", + }, + "secret_type": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Type of secret. `0`: user-defined secret. `4`: redis secret. Default is `0`.", + }, + "additional_config": { + Type: schema.TypeString, + Optional: true, + Description: "Additional config for specific secret types in JSON string format.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tags of secret.", + }, + "is_enabled": { + Type: schema.TypeBool, + Optional: true, + Default: true, + Description: "Specify whether to enable secret. Default value is `true`.", + }, + "recovery_window_in_days": { + Type: schema.TypeInt, + Optional: true, + Default: 0, + Description: "Specify the scheduled deletion date. Default value is `0` that means to delete immediately. 1-30 means the number of days reserved, completely deleted after this date.", + }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "Status of secret.", + }, + }, + } +} + +func resourceTencentCloudSsmSecretCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret.create")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = ssm.NewCreateSecretRequest() + response = ssm.NewCreateSecretResponse() + secretInfo *SecretInfo + outErr, inErr error + secretName string + secretType int + ) + + if v, ok := d.GetOk("secret_name"); ok { + request.SecretName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kms_key_id"); ok { + request.KmsKeyId = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("secret_type"); ok { + secretType = v.(int) + request.SecretType = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("additional_config"); ok { + request.AdditionalConfig = helper.String(v.(string)) + } + + if secretType == 0 { + request.VersionId = helper.String("default") + request.SecretString = helper.String("default") + } + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().CreateSecret(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 outErr != nil { + return outErr + } + + secretName = *response.Response.SecretName + d.SetId(secretName) + + //delete default version info + if secretType == 0 { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = ssmService.DeleteSecretVersion(ctx, secretName, "default") + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + } + + if isEnabled := d.Get("is_enabled").(bool); !isEnabled { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = ssmService.DisableSecret(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + } + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudSsmSecretRead(d, meta) +} + +func resourceTencentCloudSsmSecretRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret.read")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretName = d.Id() + outErr, inErr error + secretInfo *SecretInfo + ) + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + if secretInfo == nil { + d.SetId("") + return nil + } + + _ = d.Set("secret_name", secretInfo.secretName) + _ = d.Set("description", secretInfo.description) + _ = d.Set("kms_key_id", secretInfo.kmsKeyId) + _ = d.Set("secret_type", secretInfo.secretType) + _ = d.Set("additional_config", secretInfo.additionalConfig) + _ = d.Set("status", secretInfo.status) + + if secretInfo.status == SSM_STATUS_ENABLED { + _ = d.Set("is_enabled", true) + } else { + _ = d.Set("is_enabled", false) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err != nil { + return err + } + + _ = d.Set("tags", tags) + return nil +} + +func resourceTencentCloudSsmSecretUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret.update")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretName = d.Id() + ) + + d.Partial(true) + + immutableArgs := []string{ + "secret_type", + "additional_config", + } + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("description") { + description := d.Get("description").(string) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.UpdateSecretDescription(ctx, secretName, description) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s modify SSM secret description failed, reason:%+v", logId, err) + return err + } + + } + + if d.HasChange("is_enabled") { + isEnabled := d.Get("is_enabled").(bool) + err := updateSecretIsEnabled(ctx, ssmService, secretName, isEnabled) + if err != nil { + log.Printf("[CRITAL]%s modify SSM secret status failed, reason:%+v", logId, err) + return err + } + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + + oldValue, newValue := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + secretInfo, err := ssmService.DescribeSecretByName(ctx, secretName) + if err != nil { + return err + } + + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + + } + + d.Partial(false) + return resourceTencentCloudSsmSecretRead(d, meta) +} + +func resourceTencentCloudSsmSecretDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret.delete")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretName = d.Id() + ) + + recoveryWindowInDays := d.Get("recovery_window_in_days").(int) + isEnabled := d.Get("is_enabled").(bool) + if isEnabled { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.DisableSecret(ctx, secretName) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s modify SSM secret status failed, reason:%+v", logId, err) + return err + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.DeleteSecret(ctx, secretName, uint64(recoveryWindowInDays)) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s delete SSM secret failed, reason:%+v", logId, err) + return err + } + + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, e := ssmService.DescribeSecretByName(ctx, secretName) + if e != nil { + if sdkError, ok := e.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { + return nil + } + + return tccommon.RetryError(err) + } + + if secretInfo.status == SSM_STATUS_PENDINGDELETE { + return nil + } + + return resource.RetryableError(fmt.Errorf("delete fail")) + }) +} + +func updateSecretIsEnabled(ctx context.Context, ssmService SsmService, secretName string, isEnabled bool) error { + var err error + if isEnabled { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.EnableSecret(ctx, secretName) + if e != nil { + return tccommon.RetryError(e) + } + return nil + }) + + } else { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.DisableSecret(ctx, secretName) + if e != nil { + return tccommon.RetryError(e) + } + return nil + }) + } + return err +} diff --git a/tencentcloud/services/ssm/resource_tc_ssm_secret_test.go b/tencentcloud/services/ssm/resource_tc_ssm_secret_test.go new file mode 100644 index 0000000000..29c8dbe409 --- /dev/null +++ b/tencentcloud/services/ssm/resource_tc_ssm_secret_test.go @@ -0,0 +1,179 @@ +package ssm_test + +import ( + "context" + "fmt" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcssm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssm" + + ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_ssm_secret + resource.AddTestSweepers("tencentcloud_ssm_secret", &resource.Sweeper{ + Name: "tencentcloud_ssm_secret", + F: func(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcssm.NewSsmService(client) + + secrets, err := service.DescribeSecretsByFilter(ctx, nil) + + if err != nil { + return err + } + + for i := range secrets { + ss := secrets[i] + name := *ss.SecretName + createTime := ss.CreateTime + created := time.Time{} + if createTime != nil { + created = time.Unix(int64(*createTime), 0) + } + if tcacctest.IsResourcePersist(name, &created) { + continue + } + err = service.DisableSecret(ctx, name) + if err != nil { + continue + } + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := service.DeleteSecret(ctx, name, 0) + if err != nil { + return tccommon.RetryError(err, ssm.FAILEDOPERATION) + } + return nil + }) + if err != nil { + continue + } + } + + return nil + }, + }) +} + +// go test -i; go test -test.run TestAccTencentCloudSsmSecret_basic -v +func TestAccTencentCloudSsmSecret_basic(t *testing.T) { + t.Parallel() + resourceName := "tencentcloud_ssm_secret.example" + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckSsmSecretDestroy, + Steps: []resource.TestStep{ + { + Config: TestAccTencentCloudSsmSecretBasic, + Check: resource.ComposeTestCheckFunc( + testAccCheckSsmSecretExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "secret_name", "tf-example"), + resource.TestCheckResourceAttr(resourceName, "is_enabled", "false"), + resource.TestCheckResourceAttr(resourceName, "description", "desc."), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttrSet(resourceName, "status"), + ), + }, + { + Config: TestAccTencentCloudSsmSecretBasicUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckSsmSecretExists(resourceName), + resource.TestCheckResourceAttr(resourceName, "is_enabled", "true"), + resource.TestCheckResourceAttr(resourceName, "description", "update desc."), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"recovery_window_in_days"}, + }, + }, + }) +} + +func testAccCheckSsmSecretDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ssmService := svcssm.NewSsmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_ssm_secret" { + continue + } + + secret, err := ssmService.DescribeSecretByName(ctx, rs.Primary.ID) + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == "ResourceNotFound" { + return nil + } + } + return err + } + if secret != nil && secret.Status() != svcssm.SSM_STATUS_PENDINGDELETE { + return fmt.Errorf("[CHECK][SSM secret][Destroy] check: SSM secret still exists: %s", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckSsmSecretExists(name string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[name] + if !ok { + return fmt.Errorf("[CHECK][SSM secret][Exists] check: SSM secret %s is not found", name) + } + if rs.Primary.ID == "" { + return fmt.Errorf("[CHECK][SSM secret][Exists] check:SSM secret id is not set") + } + ssmService := svcssm.NewSsmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + secret, err := ssmService.DescribeSecretByName(ctx, rs.Primary.ID) + if err != nil { + return err + } + if secret == nil { + return fmt.Errorf("[CHECK][SSM secret][Exists] id %s is not exist", rs.Primary.ID) + } + return nil + } +} + +const TestAccTencentCloudSsmSecretBasic = ` +resource "tencentcloud_ssm_secret" "example" { + secret_name = "tf-example" + description = "desc." + is_enabled = false + + tags = { + createBy = "terraform" + } +} +` + +const TestAccTencentCloudSsmSecretBasicUpdate = ` +resource "tencentcloud_ssm_secret" "example" { + secret_name = "tf-example" + description = "update desc." + is_enabled = true + + tags = { + createBy = "terraform" + } +} +` diff --git a/tencentcloud/services/ssm/resource_tc_ssm_secret_version.go b/tencentcloud/services/ssm/resource_tc_ssm_secret_version.go new file mode 100644 index 0000000000..ccad26df32 --- /dev/null +++ b/tencentcloud/services/ssm/resource_tc_ssm_secret_version.go @@ -0,0 +1,285 @@ +package ssm + +import ( + "context" + "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" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +func ResourceTencentCloudSsmSecretVersion() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSsmSecretVersionCreate, + Read: resourceTencentCloudSsmSecretVersionRead, + Update: resourceTencentCloudSsmSecretVersionUpdate, + Delete: resourceTencentCloudSsmSecretVersionDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "secret_name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of secret which cannot be repeated in the same region. The maximum length is 128 bytes. The name can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", + }, + "version_id": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Version of secret. The maximum length is 64 bytes. The version_id can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.", + }, + "secret_binary": { + Type: schema.TypeString, + Optional: true, + ExactlyOneOf: []string{"secret_string"}, + Description: "The base64-encoded binary secret. secret_binary and secret_string must be set only one, and the maximum support is 4096 bytes. When secret status is `Disabled`, this field will not update anymore.", + }, + "secret_string": { + Type: schema.TypeString, + Optional: true, + ExactlyOneOf: []string{"secret_binary"}, + Description: "The string text of secret. secret_binary and secret_string must be set only one, and the maximum support is 4096 bytes. When secret status is `Disabled`, this field will not update anymore.", + }, + }, + } +} + +func resourceTencentCloudSsmSecretVersionCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret_version.create")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr, inErr error + secretName, versionId string + ) + + param := make(map[string]interface{}) + param["secret_name"] = d.Get("secret_name").(string) + param["version_id"] = d.Get("version_id").(string) + if v, ok := d.GetOk("secret_binary"); ok { + param["secret_binary"] = v.(string) + } + + if v, ok := d.GetOk("secret_string"); ok { + param["secret_string"] = v.(string) + } + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + secretName, versionId, inErr = ssmService.PutSecretValue(ctx, param) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + d.SetId(strings.Join([]string{secretName, versionId}, tccommon.FILED_SP)) + return resourceTencentCloudSsmSecretVersionRead(d, meta) +} + +func resourceTencentCloudSsmSecretVersionRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret_version.read")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr, inErr error + secretInfo *SecretInfo + ) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) + } + secretName := ids[0] + versionId := ids[1] + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + var versionIds []string + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + versionIds, inErr = ssmService.DescribeSecretVersionIdsByName(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + var hasVersionId bool + for _, id := range versionIds { + if id == versionId { + hasVersionId = true + break + } + } + + if !hasVersionId { + d.SetId("") + return nil + } + + if secretInfo.status == SSM_STATUS_ENABLED { + var secretVersionInfo *SecretVersionInfo + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretVersionInfo, inErr = ssmService.DescribeSecretVersion(ctx, secretName, versionId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + _ = d.Set("secret_name", secretVersionInfo.secretName) + _ = d.Set("version_id", secretVersionInfo.versionId) + _ = d.Set("secret_binary", secretVersionInfo.secretBinary) + _ = d.Set("secret_string", secretVersionInfo.secretString) + } + + return nil +} + +func resourceTencentCloudSsmSecretVersionUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret_version.update")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr, inErr error + secretInfo *SecretInfo + ) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) + } + secretName := ids[0] + versionId := ids[1] + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, inErr = ssmService.DescribeSecretByName(ctx, secretName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + if secretInfo.status == SSM_STATUS_ENABLED { + d.Partial(true) + + param := make(map[string]interface{}) + param["secret_name"] = secretName + param["version_id"] = versionId + if v, ok := d.GetOk("secret_binary"); ok { + param["secret_binary"] = v.(string) + } + + if v, ok := d.GetOk("secret_string"); ok { + param["secret_string"] = v.(string) + } + + if d.HasChange("secret_binary") || d.HasChange("secret_string") { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.UpdateSecret(ctx, param) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s modify SSM secret content failed, reason:%+v", logId, err) + return err + } + } + + d.Partial(false) + } + + return resourceTencentCloudSsmSecretVersionRead(d, meta) +} + +func resourceTencentCloudSsmSecretVersionDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_secret_version.delete")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("SSM secret version id can't read, id is borken, id is %s", d.Id()) + } + secretName := ids[0] + versionId := ids[1] + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + e := ssmService.DeleteSecretVersion(ctx, secretName, versionId) + if e != nil { + return tccommon.RetryError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s delete SSM secret version failed, reason:%+v", logId, err) + return err + } + + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := ssmService.DescribeSecretVersion(ctx, secretName, versionId) + if e != nil { + if sdkError, ok := e.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { + return nil + } + + return tccommon.RetryError(err) + } + + return resource.RetryableError(fmt.Errorf("delete fail")) + }) +} diff --git a/tencentcloud/resource_tc_ssm_secret_version_test.go b/tencentcloud/services/ssm/resource_tc_ssm_secret_version_test.go similarity index 81% rename from tencentcloud/resource_tc_ssm_secret_version_test.go rename to tencentcloud/services/ssm/resource_tc_ssm_secret_version_test.go index e3d540f296..4d97117431 100644 --- a/tencentcloud/resource_tc_ssm_secret_version_test.go +++ b/tencentcloud/services/ssm/resource_tc_ssm_secret_version_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package ssm_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" + svcssm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ssm" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -18,8 +22,8 @@ func TestAccTencentCloudSsmSecretVersion_basic(t *testing.T) { resourceV2Name := "tencentcloud_ssm_secret_version.v2" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSsmSecretVersionDestroy, Steps: []resource.TestStep{ { @@ -55,18 +59,16 @@ func TestAccTencentCloudSsmSecretVersion_basic(t *testing.T) { } func testAccCheckSsmSecretVersionDestroy(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) - ssmService := SsmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + ssmService := svcssm.NewSsmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ssm_secret_version" { continue } - 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) } @@ -91,8 +93,8 @@ func testAccCheckSsmSecretVersionDestroy(s *terraform.State) error { func testAccCheckSsmSecretVersionExists(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 { @@ -101,11 +103,9 @@ func testAccCheckSsmSecretVersionExists(name string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][SSM secret version][Exists] check:SSM secret version id is not set") } - ssmService := SsmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + ssmService := svcssm.NewSsmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) - 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) } diff --git a/tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret.go b/tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret.go new file mode 100644 index 0000000000..1c6bb40b5f --- /dev/null +++ b/tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret.go @@ -0,0 +1,372 @@ +package ssm + +import ( + "context" + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSsmSshKeyPairSecret() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSsmSshKeyPairSecretCreate, + Read: resourceTencentCloudSsmSshKeyPairSecretRead, + Update: resourceTencentCloudSsmSshKeyPairSecretUpdate, + Delete: resourceTencentCloudSsmSshKeyPairSecretDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "secret_name": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "Secret name, which must be unique in the same region. It can contain 128 bytes of letters, digits, hyphens and underscores and must begin with a letter or digit.", + }, + "description": { + Optional: true, + Type: schema.TypeString, + Description: "Description, such as what it is used for. It contains up to 2,048 bytes.", + }, + "kms_key_id": { + Optional: true, + Type: schema.TypeString, + Description: "Specifies a KMS CMK to encrypt the secret.If this parameter is left empty, the CMK created by Secrets Manager by default will be used for encryption.You can also specify a custom KMS CMK created in the same region for encryption.", + }, + "project_id": { + Required: true, + Type: schema.TypeInt, + Description: "ID of the project to which the created SSH key belongs.", + }, + "ssh_key_name": { + Optional: true, + Type: schema.TypeString, + Description: "Name of the SSH key pair, which only contains digits, letters and underscores and must start with a digit or letter. The maximum length is 25 characters.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tags of secret.", + }, + "status": { + Optional: true, + Type: schema.TypeString, + Computed: true, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"Enabled", "Disabled"}), + Description: "Enable or Disable Secret. Valid values is `Enabled` or `Disabled`. Default is `Enabled`.", + }, + "clean_ssh_key": { + Optional: true, + Type: schema.TypeBool, + Description: "Specifies whether to delete the SSH key from both the secret and the SSH key list in the CVM console. This field is only take effect when delete SSH key secrets. Valid values: " + + "`True`: deletes SSH key from both the secret and SSH key list in the CVM console. Note that the deletion will fail if the SSH key is already bound to a CVM instance." + + "`False`: only deletes the SSH key information in the secret.", + }, + "create_time": { + Type: schema.TypeInt, + Computed: true, + Description: "Credential creation time in UNIX timestamp format.", + }, + "secret_type": { + Type: schema.TypeInt, + Computed: true, + Description: "`0`: user-defined secret. `1`: Tencent Cloud services secret. `2`: SSH key secret. `3`: Tencent Cloud API key secret. Note: this field may return `null`, indicating that no valid values can be obtained.", + }, + }, + } +} + +func resourceTencentCloudSsmSshKeyPairSecretCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = ssm.NewCreateSSHKeyPairSecretRequest() + response = ssm.NewCreateSSHKeyPairSecretResponse() + secretInfo *SecretInfo + secretName string + ) + + if v, ok := d.GetOk("secret_name"); ok { + request.SecretName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kms_key_id"); ok { + request.KmsKeyId = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("project_id"); ok { + request.ProjectId = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("ssh_key_name"); ok { + request.SSHKeyName = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().CreateSSHKeyPairSecret(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 ssm sshKeyPairSecret failed, reason:%+v", logId, err) + return err + } + + secretName = *response.Response.SecretName + d.SetId(secretName) + + // update status if disabled + if v, ok := d.GetOk("status"); ok { + status := v.(string) + if status == "Disabled" { + err = ssmService.DisableSecret(ctx, secretName) + if err != nil { + return err + } + } + } + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, err = ssmService.DescribeSecretByName(ctx, secretName) + if err != nil { + return tccommon.RetryError(err) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err = tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudSsmSshKeyPairSecretRead(d, meta) +} + +func resourceTencentCloudSsmSshKeyPairSecretRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretInfo *SecretInfo + secretName = d.Id() + ) + + sshKeyPairSecret, err := service.DescribeSecretById(ctx, secretName, 2) + if err != nil { + return err + } + + if sshKeyPairSecret == nil { + d.SetId("") + log.Printf("[WARN]%s resource `SsmSshKeyPairSecret` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if sshKeyPairSecret.SecretName != nil { + _ = d.Set("secret_name", sshKeyPairSecret.SecretName) + } + + if sshKeyPairSecret.ProjectID != nil { + _ = d.Set("project_id", sshKeyPairSecret.ProjectID) + } + + if sshKeyPairSecret.Description != nil { + _ = d.Set("description", sshKeyPairSecret.Description) + } + + if sshKeyPairSecret.KmsKeyId != nil { + _ = d.Set("kms_key_id", sshKeyPairSecret.KmsKeyId) + } + + if sshKeyPairSecret.ResourceName != nil { + _ = d.Set("ssh_key_name", sshKeyPairSecret.ResourceName) + } + + if sshKeyPairSecret.Status != nil { + _ = d.Set("status", sshKeyPairSecret.Status) + } + + if sshKeyPairSecret.CreateTime != nil { + _ = d.Set("create_time", sshKeyPairSecret.CreateTime) + } + + if sshKeyPairSecret.SecretType != nil { + _ = d.Set("secret_type", sshKeyPairSecret.SecretType) + } + + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + secretInfo, err = service.DescribeSecretByName(ctx, secretName) + if err != nil { + return tccommon.RetryError(err) + } + + return nil + }) + + if outErr != nil { + return outErr + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err != nil { + return err + } + + _ = d.Set("tags", tags) + return nil +} + +func resourceTencentCloudSsmSshKeyPairSecretUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ssmService = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretName = d.Id() + ) + + immutableArgs := []string{ + "project_id", + "kms_key_id", + "ssh_key_name", + } + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("description") { + request := ssm.NewUpdateDescriptionRequest() + request.SecretName = &secretName + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSsmClient().UpdateDescription(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update ssm sshKeyPairSecret failed, reason:%+v", logId, err) + return err + } + } + + if d.HasChange("status") { + service := SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + if v, ok := d.GetOk("status"); ok { + status := v.(string) + if status == "Disabled" { + err := service.DisableSecret(ctx, secretName) + if err != nil { + return err + } + } else { + err := service.EnableSecret(ctx, secretName) + if err != nil { + return err + } + } + } + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + + oldValue, newValue := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + secretInfo, err := ssmService.DescribeSecretByName(ctx, secretName) + if err != nil { + return err + } + + resourceName := tccommon.BuildTagResourceName("ssm", "secret", tcClient.Region, secretInfo.resourceId) + if err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + + } + + return resourceTencentCloudSsmSshKeyPairSecretRead(d, meta) +} + +func resourceTencentCloudSsmSshKeyPairSecretDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ssm_ssh_key_pair_secret.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = SsmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + secretName = d.Id() + ) + + // disable before destroy + err := service.DisableSecret(ctx, secretName) + if err != nil { + return err + } + + var cleanSSHKey *bool + + if v, ok := d.GetOkExists("clean_ssh_key"); ok { + cleanSSHKey = helper.Bool(v.(bool)) + } + + if err = service.DeleteSsmSshKeyPairSecretById(ctx, secretName, cleanSSHKey); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_ssm_ssh_key_pair_secret_test.go b/tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret_test.go similarity index 93% rename from tencentcloud/resource_tc_ssm_ssh_key_pair_secret_test.go rename to tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret_test.go index 154bf5feec..51355eaa0f 100644 --- a/tencentcloud/resource_tc_ssm_ssh_key_pair_secret_test.go +++ b/tencentcloud/services/ssm/resource_tc_ssm_ssh_key_pair_secret_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package ssm_test import ( "fmt" "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" ) @@ -14,9 +16,9 @@ func TestAccTencentCloudSsmSshKeyPairSecretResource_basic(t *testing.T) { rName := fmt.Sprintf("tf-testacc-kms-key-%s", acctest.RandString(13)) resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccSsmSshKeyPairSecret, rName), diff --git a/tencentcloud/service_tencentcloud_ssm.go b/tencentcloud/services/ssm/service_tencentcloud_ssm.go similarity index 94% rename from tencentcloud/service_tencentcloud_ssm.go rename to tencentcloud/services/ssm/service_tencentcloud_ssm.go index cf09324249..6111a78d0d 100644 --- a/tencentcloud/service_tencentcloud_ssm.go +++ b/tencentcloud/services/ssm/service_tencentcloud_ssm.go @@ -1,17 +1,24 @@ -package tencentcloud +package ssm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ssm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssm/v20190923" + "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 NewSsmService(client *connectivity.TencentCloudClient) SsmService { + return SsmService{client: client} +} + type SsmService struct { client *connectivity.TencentCloudClient } @@ -29,6 +36,10 @@ type SecretInfo struct { resourceId string } +func (info SecretInfo) Status() string { + return info.status +} + type SecretVersionInfo struct { secretName string versionId string @@ -37,7 +48,7 @@ type SecretVersionInfo struct { } func (me *SsmService) DescribeSecretsByFilter(ctx context.Context, param map[string]interface{}) (secrets []*ssm.SecretMetadata, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewListSecretsRequest() for k, v := range param { @@ -90,7 +101,7 @@ func (me *SsmService) DescribeSecretsByFilter(ctx context.Context, param map[str } func (me *SsmService) DescribeSecretByName(ctx context.Context, secretName string) (secret *SecretInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDescribeSecretRequest() request.SecretName = helper.String(secretName) ratelimit.Check(request.GetAction()) @@ -119,7 +130,7 @@ func (me *SsmService) DescribeSecretByName(ctx context.Context, secretName strin } func (me *SsmService) DescribeSecretVersionIdsByName(ctx context.Context, secretName string) (versionIds []string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewListSecretVersionIdsRequest() request.SecretName = helper.String(secretName) ratelimit.Check(request.GetAction()) @@ -140,7 +151,7 @@ func (me *SsmService) DescribeSecretVersionIdsByName(ctx context.Context, secret } func (me *SsmService) DescribeSecretVersion(ctx context.Context, secretName, versionId string) (secretVersion *SecretVersionInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewGetSecretValueRequest() request.SecretName = helper.String(secretName) request.VersionId = helper.String(versionId) @@ -164,7 +175,7 @@ func (me *SsmService) DescribeSecretVersion(ctx context.Context, secretName, ver } func (me *SsmService) CreateSecret(ctx context.Context, param map[string]interface{}) (secretName string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewCreateSecretRequest() for k, v := range param { @@ -208,7 +219,7 @@ func (me *SsmService) CreateSecret(ctx context.Context, param map[string]interfa } func (me *SsmService) UpdateSecretDescription(ctx context.Context, secretName, description string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewUpdateDescriptionRequest() request.SecretName = helper.String(secretName) request.Description = helper.String(description) @@ -225,7 +236,7 @@ func (me *SsmService) UpdateSecretDescription(ctx context.Context, secretName, d } func (me *SsmService) UpdateSecret(ctx context.Context, param map[string]interface{}) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewUpdateSecretRequest() for k, v := range param { if k == "secret_name" { @@ -254,7 +265,7 @@ func (me *SsmService) UpdateSecret(ctx context.Context, param map[string]interfa } func (me *SsmService) EnableSecret(ctx context.Context, secretName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewEnableSecretRequest() request.SecretName = helper.String(secretName) ratelimit.Check(request.GetAction()) @@ -270,7 +281,7 @@ func (me *SsmService) EnableSecret(ctx context.Context, secretName string) (errR } func (me *SsmService) DisableSecret(ctx context.Context, secretName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDisableSecretRequest() request.SecretName = helper.String(secretName) ratelimit.Check(request.GetAction()) @@ -286,7 +297,7 @@ func (me *SsmService) DisableSecret(ctx context.Context, secretName string) (err } func (me *SsmService) PutSecretValue(ctx context.Context, param map[string]interface{}) (secretName, versionId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewPutSecretValueRequest() for k, v := range param { if k == "secret_name" { @@ -318,7 +329,7 @@ func (me *SsmService) PutSecretValue(ctx context.Context, param map[string]inter } func (me *SsmService) DeleteSecretVersion(ctx context.Context, secretName, versionId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDeleteSecretVersionRequest() request.SecretName = helper.String(secretName) request.VersionId = helper.String(versionId) @@ -335,7 +346,7 @@ func (me *SsmService) DeleteSecretVersion(ctx context.Context, secretName, versi } func (me *SsmService) DeleteSecret(ctx context.Context, secretName string, recoveryWindowInDays uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDeleteSecretRequest() request.SecretName = helper.String(secretName) request.RecoveryWindowInDays = helper.Uint64(recoveryWindowInDays) @@ -352,7 +363,7 @@ func (me *SsmService) DeleteSecret(ctx context.Context, secretName string, recov } func (me *SsmService) DescribeSecretById(ctx context.Context, secretName string, serviceType uint64) (sshKeyPairSecret *ssm.SecretMetadata, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewListSecretsRequest() request.SearchSecretName = &secretName @@ -400,7 +411,7 @@ func (me *SsmService) DescribeSecretById(ctx context.Context, secretName string, } func (me *SsmService) DeleteSsmSshKeyPairSecretById(ctx context.Context, secretName string, cleanSSHKey *bool) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDeleteSecretRequest() request.SecretName = &secretName @@ -428,7 +439,7 @@ func (me *SsmService) DeleteSsmSshKeyPairSecretById(ctx context.Context, secretN } func (me *SsmService) DeleteSsmProductSecretById(ctx context.Context, secretName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDeleteSecretRequest() request.SecretName = &secretName @@ -452,7 +463,7 @@ func (me *SsmService) DeleteSsmProductSecretById(ctx context.Context, secretName } func (me *SsmService) DescribeAsyncRequestInfo(ctx context.Context, flowID int64) (taskStatus int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ssm.NewDescribeAsyncRequestInfoRequest() request.FlowID = helper.Int64(flowID) @@ -478,7 +489,7 @@ func (me *SsmService) DescribeAsyncRequestInfo(ctx context.Context, flowID int64 func (me *SsmService) SsmProductSecretStateRefreshFunc(flowId int64, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil taskStatus, err := me.DescribeAsyncRequestInfo(ctx, flowId) @@ -492,7 +503,7 @@ func (me *SsmService) SsmProductSecretStateRefreshFunc(flowId int64, failStates func (me *SsmService) DescribeSsmProductsByFilter(ctx context.Context) (products []*string, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ssm.NewDescribeSupportedProductsRequest() ) @@ -517,7 +528,7 @@ func (me *SsmService) DescribeSsmProductsByFilter(ctx context.Context) (products func (me *SsmService) DescribeSsmRotationDetailByFilter(ctx context.Context, param map[string]interface{}) (rotationDetail *ssm.DescribeRotationDetailResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ssm.NewDescribeRotationDetailRequest() ) @@ -553,7 +564,7 @@ func (me *SsmService) DescribeSsmRotationDetailByFilter(ctx context.Context, par func (me *SsmService) DescribeSsmRotationHistoryByFilter(ctx context.Context, param map[string]interface{}) (rotationHistory []*string, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ssm.NewDescribeRotationHistoryRequest() ) @@ -589,7 +600,7 @@ func (me *SsmService) DescribeSsmRotationHistoryByFilter(ctx context.Context, pa func (me *SsmService) DescribeSsmServiceStatusByFilter(ctx context.Context) (ServiceStatus *ssm.GetServiceStatusResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ssm.NewGetServiceStatusRequest() ) @@ -619,7 +630,7 @@ func (me *SsmService) DescribeSsmServiceStatusByFilter(ctx context.Context) (Ser func (me *SsmService) DescribeSsmSshKeyPairValueByFilter(ctx context.Context, param map[string]interface{}) (sshKeyPairValue *ssm.GetSSHKeyPairValueResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = ssm.NewGetSSHKeyPairValueRequest() ) diff --git a/tencentcloud/data_source_tc_sts_caller_identity.go b/tencentcloud/services/sts/data_source_tc_sts_caller_identity.go similarity index 80% rename from tencentcloud/data_source_tc_sts_caller_identity.go rename to tencentcloud/services/sts/data_source_tc_sts_caller_identity.go index 5c7d5b170d..8f13053147 100644 --- a/tencentcloud/data_source_tc_sts_caller_identity.go +++ b/tencentcloud/services/sts/data_source_tc_sts_caller_identity.go @@ -1,15 +1,17 @@ -package tencentcloud +package sts 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" sts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts/v20180813" ) -func dataSourceTencentCloudStsCallerIdentity() *schema.Resource { +func DataSourceTencentCloudStsCallerIdentity() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudStsCallerIdentityRead, Schema: map[string]*schema.Schema{ @@ -53,19 +55,19 @@ func dataSourceTencentCloudStsCallerIdentity() *schema.Resource { } func dataSourceTencentCloudStsCallerIdentityRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_sts_caller_identity.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_sts_caller_identity.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) - stsService := StsService{client: meta.(*TencentCloudClient).apiV3Conn} + stsService := StsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var callerIdentity *sts.GetCallerIdentityResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := stsService.DescribeStsCallerIdentityByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } callerIdentity = results return nil @@ -99,7 +101,7 @@ func dataSourceTencentCloudStsCallerIdentityRead(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{}{ "arn": callerIdentity.Arn, "account_id": callerIdentity.AccountId, "user_id": callerIdentity.UserId, diff --git a/tencentcloud/services/sts/data_source_tc_sts_caller_identity_test.go b/tencentcloud/services/sts/data_source_tc_sts_caller_identity_test.go new file mode 100644 index 0000000000..f768977e96 --- /dev/null +++ b/tencentcloud/services/sts/data_source_tc_sts_caller_identity_test.go @@ -0,0 +1,34 @@ +package sts_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudStsCallerIdentityDataSource -v +func TestAccTencentCloudStsCallerIdentityDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceStsCallerIdentity, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_sts_caller_identity.caller_identity"), + ), + }, + }, + }) +} + +const testAccDataSourceStsCallerIdentity = ` + +data "tencentcloud_sts_caller_identity" "caller_identity" { +} + +` diff --git a/tencentcloud/service_tencentcloud_sts.go b/tencentcloud/services/sts/service_tencentcloud_sts.go similarity index 89% rename from tencentcloud/service_tencentcloud_sts.go rename to tencentcloud/services/sts/service_tencentcloud_sts.go index e35bb50b2d..ba8c7d7176 100644 --- a/tencentcloud/service_tencentcloud_sts.go +++ b/tencentcloud/services/sts/service_tencentcloud_sts.go @@ -1,10 +1,13 @@ -package tencentcloud +package sts import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + sts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts/v20180813" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -15,7 +18,7 @@ type StsService struct { func (me *StsService) DescribeStsCallerIdentityByFilter(ctx context.Context) (callerIdentity *sts.GetCallerIdentityResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = sts.NewGetCallerIdentityRequest() ) diff --git a/tencentcloud/services/tag/extension_tags.go b/tencentcloud/services/tag/extension_tags.go new file mode 100644 index 0000000000..e90d5ec222 --- /dev/null +++ b/tencentcloud/services/tag/extension_tags.go @@ -0,0 +1,3 @@ +package tag + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/tag/resource_tc_tag.go b/tencentcloud/services/tag/resource_tc_tag.go new file mode 100644 index 0000000000..c6dcbba844 --- /dev/null +++ b/tencentcloud/services/tag/resource_tc_tag.go @@ -0,0 +1,143 @@ +package tag + +import ( + "context" + "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" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTag() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTagResourceCreate, + Read: resourceTencentCloudTagResourceRead, + Delete: resourceTencentCloudTagResourceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "tag_key": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "tag key.", + }, + + "tag_value": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "tag value.", + }, + }, + } +} + +func resourceTencentCloudTagResourceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tag.NewCreateTagRequest() + tagKey string + tagValue string + ) + if v, ok := d.GetOk("tag_key"); ok { + tagKey = v.(string) + request.TagKey = helper.String(v.(string)) + } + + if v, ok := d.GetOk("tag_value"); ok { + tagValue = v.(string) + request.TagValue = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTagClient().CreateTag(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 tag tag failed, reason:%+v", logId, err) + return err + } + + d.SetId(tagKey + tccommon.FILED_SP + tagValue) + + return resourceTencentCloudTagResourceRead(d, meta) +} + +func resourceTencentCloudTagResourceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TagService{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()) + } + tagKey := idSplit[0] + tagValue := idSplit[1] + + tagRes, err := service.DescribeTagResourceById(ctx, tagKey, tagValue) + if err != nil { + return err + } + + if tagRes == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TagTag` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if tagRes.TagKey != nil { + _ = d.Set("tag_key", tagRes.TagKey) + } + + if tagRes.TagValue != nil { + _ = d.Set("tag_value", tagRes.TagValue) + } + + return nil +} + +func resourceTencentCloudTagResourceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TagService{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()) + } + tagKey := idSplit[0] + tagValue := idSplit[1] + + if err := service.DeleteTagResourceById(ctx, tagKey, tagValue); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tag/resource_tc_tag_attachment.go b/tencentcloud/services/tag/resource_tc_tag_attachment.go new file mode 100644 index 0000000000..d388bfde99 --- /dev/null +++ b/tencentcloud/services/tag/resource_tc_tag_attachment.go @@ -0,0 +1,164 @@ +package tag + +import ( + "context" + "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" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTagAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTagAttachmentCreate, + Read: resourceTencentCloudTagAttachmentRead, + Delete: resourceTencentCloudTagAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "tag_key": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "tag key.", + }, + + "tag_value": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "tag value.", + }, + + "resource": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "[Six-segment description of resources](https://cloud.tencent.com/document/product/598/10606).", + }, + }, + } +} + +func resourceTencentCloudTagAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tag.NewAddResourceTagRequest() + tagKey string + tagValue string + resourceId string + ) + if v, ok := d.GetOk("tag_key"); ok { + tagKey = v.(string) + request.TagKey = helper.String(v.(string)) + } + + if v, ok := d.GetOk("tag_value"); ok { + tagValue = v.(string) + request.TagValue = helper.String(v.(string)) + } + + if v, ok := d.GetOk("resource"); ok { + resourceId = v.(string) + request.Resource = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTagClient().AddResourceTag(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 tag tagAttachment failed, reason:%+v", logId, err) + return err + } + + d.SetId(tagKey + tccommon.FILED_SP + tagValue + tccommon.FILED_SP + resourceId) + + return resourceTencentCloudTagAttachmentRead(d, meta) +} + +func resourceTencentCloudTagAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TagService{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()) + } + tagKey := idSplit[0] + tagValue := idSplit[1] + resource := idSplit[2] + + tagAttachment, err := service.DescribeTagTagAttachmentById(ctx, tagKey, tagValue, resource) + if err != nil { + return err + } + + if tagAttachment == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TagResourceTag` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + if len(tagAttachment.Tags) < 1 { + log.Printf("[WARN]%s resource `TagResourceTag` [%s] Tags is null, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + if tagAttachment.Tags[0].TagKey != nil { + _ = d.Set("tag_key", tagAttachment.Tags[0].TagKey) + } + + if tagAttachment.Tags[0].TagValue != nil { + _ = d.Set("tag_value", tagAttachment.Tags[0].TagValue) + } + + if tagAttachment.Resource != nil { + _ = d.Set("resource", tagAttachment.Resource) + } + + return nil +} + +func resourceTencentCloudTagAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tag_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TagService{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()) + } + tagKey := idSplit[0] + resource := idSplit[2] + + if err := service.DeleteTagTagAttachmentById(ctx, tagKey, resource); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tag/resource_tc_tag_attachment_test.go b/tencentcloud/services/tag/resource_tc_tag_attachment_test.go new file mode 100644 index 0000000000..2d903d1bf2 --- /dev/null +++ b/tencentcloud/services/tag/resource_tc_tag_attachment_test.go @@ -0,0 +1,101 @@ +package tag_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTagAttachmentResource_basic -v +func TestAccTencentCloudTagAttachmentResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTagAttachmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTagResourceTag, + Check: resource.ComposeTestCheckFunc( + testAccCheckTagAttachmentExists("tencentcloud_tag_attachment.tag_attachment"), + resource.TestCheckResourceAttr("tencentcloud_tag_attachment.tag_attachment", "tag_key", "test_terraform_tagAttachment_key"), + resource.TestCheckResourceAttr("tencentcloud_tag_attachment.tag_attachment", "tag_value", "Terraform_tagAttachment_value"), + resource.TestCheckResourceAttrSet("tencentcloud_tag_attachment.tag_attachment", "resource")), + }, + { + ResourceName: "tencentcloud_tag_attachment.tag_attachment", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} +func testAccCheckTagAttachmentDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tag_attachment" { + continue + } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctag.NewTagService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + tags, err := service.DescribeTagTagAttachmentById(ctx, rs.Primary.Attributes["tag_key"], + rs.Primary.Attributes["tag_value"], rs.Primary.Attributes["resource"]) + if err != nil { + return err + } + if tags == nil { + return nil + } + return fmt.Errorf("delete tagAttachment key %s fail, still on server", rs.Primary.Attributes["tag_key"]) + } + return nil +} + +func testAccCheckTagAttachmentExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctag.NewTagService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTagTagAttachmentById(ctx, rs.Primary.Attributes["tag_key"], + rs.Primary.Attributes["tag_value"], rs.Primary.Attributes["resource"]) + if err != nil { + return err + } + if res != nil && res.Resource != nil && res.Tags != nil { + return nil + } + + return fmt.Errorf("tagAttachment %s not found on server", rs.Primary.Attributes["tag_key"]) + } +} + +const testAccTagResourceTag = tcacctest.DefaultCvmModificationVariable + ` +data "tencentcloud_user_info" "info" {} + +locals { + uin = data.tencentcloud_user_info.info.uin +} + +resource "tencentcloud_tag_attachment" "tag_attachment" { + tag_key = "test_terraform_tagAttachment_key" + tag_value = "Terraform_tagAttachment_value" + resource = "qcs::cvm:ap-guangzhou:uin/${local.uin}:instance/${var.cvm_id}" +} + +` diff --git a/tencentcloud/services/tag/resource_tc_tag_test.go b/tencentcloud/services/tag/resource_tc_tag_test.go new file mode 100644 index 0000000000..2189943397 --- /dev/null +++ b/tencentcloud/services/tag/resource_tc_tag_test.go @@ -0,0 +1,93 @@ +package tag_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTagResource_basic -v +func TestAccTencentCloudTagResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTagDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTag, + Check: resource.ComposeTestCheckFunc( + testAccCheckTagExists("tencentcloud_tag.tag"), + resource.TestCheckResourceAttr("tencentcloud_tag.tag", "tag_key", "test_terraform_tag_key"), + resource.TestCheckResourceAttr("tencentcloud_tag.tag", "tag_value", "Terraform_tag_value")), + }, + { + ResourceName: "tencentcloud_tag.tag", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTagDestroy(s *terraform.State) error { + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tag" { + continue + } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctag.NewTagService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + tags, err := service.DescribeTagResourceById(ctx, rs.Primary.Attributes["tag_key"], rs.Primary.Attributes["tag_value"]) + if err != nil { + return err + } + if tags == nil { + return nil + } + return fmt.Errorf("delete tag key %s fail, still on server", rs.Primary.Attributes["tag_key"]) + } + return nil +} + +func testAccCheckTagExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctag.NewTagService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + tags, err := service.DescribeTagResourceById(ctx, rs.Primary.Attributes["tag_key"], rs.Primary.Attributes["tag_value"]) + if err != nil { + return err + } + if tags != nil && tags.TagKey != nil && tags.TagValue != nil { + return nil + } + + return fmt.Errorf("tag %s not found on server", rs.Primary.Attributes["tag_key"]) + } +} + +const testAccTag = ` + +resource "tencentcloud_tag" "tag" { + tag_key = "test_terraform_tag_key" + tag_value = "Terraform_tag_value" +} + +` diff --git a/tencentcloud/services/tag/service_tencentcloud_tag.go b/tencentcloud/services/tag/service_tencentcloud_tag.go new file mode 100644 index 0000000000..d02dee6330 --- /dev/null +++ b/tencentcloud/services/tag/service_tencentcloud_tag.go @@ -0,0 +1,419 @@ +package tag + +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. + +func NewTagService(client *connectivity.TencentCloudClient) TagService { + return TagService{client: client} +} + +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/data_source_tc_tat_agent.go b/tencentcloud/services/tat/data_source_tc_tat_agent.go similarity index 89% rename from tencentcloud/data_source_tc_tat_agent.go rename to tencentcloud/services/tat/data_source_tc_tat_agent.go index 9c5ce55f09..5d59b5e9b8 100644 --- a/tencentcloud/data_source_tc_tat_agent.go +++ b/tencentcloud/services/tat/data_source_tc_tat_agent.go @@ -1,15 +1,18 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTatAgent() *schema.Resource { +func DataSourceTencentCloudTatAgent() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTatAgentRead, Schema: map[string]*schema.Schema{ @@ -98,12 +101,12 @@ func dataSourceTencentCloudTatAgent() *schema.Resource { } func dataSourceTencentCloudTatAgentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tat_agent.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tat_agent.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 { @@ -131,14 +134,14 @@ func dataSourceTencentCloudTatAgentRead(d *schema.ResourceData, meta interface{} paramMap["filters"] = tmpSet } - service := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var automationAgentSet []*tat.AutomationAgentInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTatAgentByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } automationAgentSet = result return nil @@ -188,7 +191,7 @@ func dataSourceTencentCloudTatAgentRead(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_tat_agent_test.go b/tencentcloud/services/tat/data_source_tc_tat_agent_test.go similarity index 83% rename from tencentcloud/data_source_tc_tat_agent_test.go rename to tencentcloud/services/tat/data_source_tc_tat_agent_test.go index 6a80cbc6b1..092f1f994a 100644 --- a/tencentcloud/data_source_tc_tat_agent_test.go +++ b/tencentcloud/services/tat/data_source_tc_tat_agent_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatAgentDataSource_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: testAccTatAgentDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tat_agent.agent"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tat_agent.agent"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_agent.agent", "automation_agent_set.0.agent_status"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_agent.agent", "automation_agent_set.0.environment"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_agent.agent", "automation_agent_set.0.instance_id"), diff --git a/tencentcloud/data_source_tc_tat_command.go b/tencentcloud/services/tat/data_source_tc_tat_command.go similarity index 91% rename from tencentcloud/data_source_tc_tat_command.go rename to tencentcloud/services/tat/data_source_tc_tat_command.go index cd31f13892..cd2f219fc2 100644 --- a/tencentcloud/data_source_tc_tat_command.go +++ b/tencentcloud/services/tat/data_source_tc_tat_command.go @@ -1,16 +1,19 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTatCommand() *schema.Resource { +func DataSourceTencentCloudTatCommand() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTatCommandRead, Schema: map[string]*schema.Schema{ @@ -157,11 +160,11 @@ func dataSourceTencentCloudTatCommand() *schema.Resource { } func dataSourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tat_command.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tat_command.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, ok := d.GetOk("command_id"); ok { @@ -180,13 +183,13 @@ func dataSourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface paramMap["created_by"] = helper.String(v.(string)) } - tatService := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + tatService := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var commandSet []*tat.Command - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tatService.DescribeTatCommandByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } commandSet = results return nil @@ -211,7 +214,7 @@ func dataSourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface commandSetMap["description"] = commandSet.Description } if commandSet.Content != nil { - content, err := Base64ToString(*commandSet.Content) + content, err := tccommon.Base64ToString(*commandSet.Content) if err == nil { commandSetMap["content"] = content } else { @@ -280,7 +283,7 @@ func dataSourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), commandSetList); e != nil { + if e := tccommon.WriteToFile(output.(string), commandSetList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tat_command_test.go b/tencentcloud/services/tat/data_source_tc_tat_command_test.go similarity index 87% rename from tencentcloud/data_source_tc_tat_command_test.go rename to tencentcloud/services/tat/data_source_tc_tat_command_test.go index 894e008d98..154da1585f 100644 --- a/tencentcloud/data_source_tc_tat_command_test.go +++ b/tencentcloud/services/tat/data_source_tc_tat_command_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatCommandDataSource(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: testAccDataSourceTatCommand, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tat_command.command"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tat_command.command"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_command.command", "command_set.0.command_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_command.command", "command_set.0.command_name"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_command.command", "command_set.0.command_type"), diff --git a/tencentcloud/data_source_tc_tat_invocation_task.go b/tencentcloud/services/tat/data_source_tc_tat_invocation_task.go similarity index 94% rename from tencentcloud/data_source_tc_tat_invocation_task.go rename to tencentcloud/services/tat/data_source_tc_tat_invocation_task.go index a4eb574359..aa7ba2159c 100644 --- a/tencentcloud/data_source_tc_tat_invocation_task.go +++ b/tencentcloud/services/tat/data_source_tc_tat_invocation_task.go @@ -1,15 +1,18 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTatInvocationTask() *schema.Resource { +func DataSourceTencentCloudTatInvocationTask() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTatInvocationTaskRead, Schema: map[string]*schema.Schema{ @@ -214,12 +217,12 @@ func dataSourceTencentCloudTatInvocationTask() *schema.Resource { } func dataSourceTencentCloudTatInvocationTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tat_invocation_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tat_invocation_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("invocation_task_ids"); ok { @@ -251,14 +254,14 @@ func dataSourceTencentCloudTatInvocationTaskRead(d *schema.ResourceData, meta in paramMap["HideOutput"] = helper.Bool(v.(bool)) } - service := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var invocationTaskSet []*tat.InvocationTask - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTatInvocationTaskByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } invocationTaskSet = result return nil @@ -396,7 +399,7 @@ func dataSourceTencentCloudTatInvocationTaskRead(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_tat_invocation_task_test.go b/tencentcloud/services/tat/data_source_tc_tat_invocation_task_test.go similarity index 93% rename from tencentcloud/data_source_tc_tat_invocation_task_test.go rename to tencentcloud/services/tat/data_source_tc_tat_invocation_task_test.go index 07e9c0b569..f1deb1e76a 100644 --- a/tencentcloud/data_source_tc_tat_invocation_task_test.go +++ b/tencentcloud/services/tat/data_source_tc_tat_invocation_task_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatInvocationTaskDataSource_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: testAccTatInvocationTaskDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invocation_task.invocation_task"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invocation_task.invocation_task"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invocation_task.invocation_task", "invocation_task_set.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invocation_task.invocation_task", "invocation_task_set.0.command_document.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invocation_task.invocation_task", "invocation_task_set.0.command_document.0.command_type"), diff --git a/tencentcloud/data_source_tc_tat_invoker.go b/tencentcloud/services/tat/data_source_tc_tat_invoker.go similarity index 90% rename from tencentcloud/data_source_tc_tat_invoker.go rename to tencentcloud/services/tat/data_source_tc_tat_invoker.go index 5a6b3d9e03..64d0638b84 100644 --- a/tencentcloud/data_source_tc_tat_invoker.go +++ b/tencentcloud/services/tat/data_source_tc_tat_invoker.go @@ -1,16 +1,19 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTatInvoker() *schema.Resource { +func DataSourceTencentCloudTatInvoker() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTatInvokerRead, Schema: map[string]*schema.Schema{ @@ -129,11 +132,11 @@ func dataSourceTencentCloudTatInvoker() *schema.Resource { } func dataSourceTencentCloudTatInvokerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tat_invoker.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tat_invoker.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, ok := d.GetOk("invoker_id"); ok { @@ -148,13 +151,13 @@ func dataSourceTencentCloudTatInvokerRead(d *schema.ResourceData, meta interface paramMap["type"] = helper.String(v.(string)) } - tatService := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + tatService := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var invokerSet []*tat.Invoker - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tatService.DescribeTatInvokerByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } invokerSet = results return nil @@ -224,7 +227,7 @@ func dataSourceTencentCloudTatInvokerRead(d *schema.ResourceData, meta interface output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), invokerSetList); e != nil { + if e := tccommon.WriteToFile(output.(string), invokerSetList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tat_invoker_records.go b/tencentcloud/services/tat/data_source_tc_tat_invoker_records.go similarity index 83% rename from tencentcloud/data_source_tc_tat_invoker_records.go rename to tencentcloud/services/tat/data_source_tc_tat_invoker_records.go index 349d66be89..6ff7708957 100644 --- a/tencentcloud/data_source_tc_tat_invoker_records.go +++ b/tencentcloud/services/tat/data_source_tc_tat_invoker_records.go @@ -1,15 +1,18 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTatInvokerRecords() *schema.Resource { +func DataSourceTencentCloudTatInvokerRecords() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTatInvokerRecordsRead, Schema: map[string]*schema.Schema{ @@ -67,12 +70,12 @@ func dataSourceTencentCloudTatInvokerRecords() *schema.Resource { } func dataSourceTencentCloudTatInvokerRecordsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tat_invoker_records.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tat_invoker_records.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("invoker_ids"); ok { @@ -80,14 +83,14 @@ func dataSourceTencentCloudTatInvokerRecordsRead(d *schema.ResourceData, meta in paramMap["InvokerIds"] = helper.InterfacesStringsPoint(invokerIdsSet) } - service := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var invokerRecordSet []*tat.InvokerRecord - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTatInvokerRecordsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } invokerRecordSet = result return nil @@ -133,7 +136,7 @@ func dataSourceTencentCloudTatInvokerRecordsRead(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/services/tat/data_source_tc_tat_invoker_records_test.go b/tencentcloud/services/tat/data_source_tc_tat_invoker_records_test.go new file mode 100644 index 0000000000..7800697d8a --- /dev/null +++ b/tencentcloud/services/tat/data_source_tc_tat_invoker_records_test.go @@ -0,0 +1,34 @@ +package tat_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTatInvokerRecordsDataSource_basic -v +func TestAccTencentCloudNeedFixTatInvokerRecordsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTatInvokerRecordsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invoker_records.invoker_records")), + }, + }, + }) +} + +const testAccTatInvokerRecordsDataSource = ` + +data "tencentcloud_tat_invoker_records" "invoker_records" { + invoker_ids = "" +} + +` diff --git a/tencentcloud/data_source_tc_tat_invoker_test.go b/tencentcloud/services/tat/data_source_tc_tat_invoker_test.go similarity index 85% rename from tencentcloud/data_source_tc_tat_invoker_test.go rename to tencentcloud/services/tat/data_source_tc_tat_invoker_test.go index 428e7e8a2d..24203de554 100644 --- a/tencentcloud/data_source_tc_tat_invoker_test.go +++ b/tencentcloud/services/tat/data_source_tc_tat_invoker_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatInvokerDataSource(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: testAccDataSourceTatInvoker, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invoker.invoker"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tat_invoker.invoker"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invoker.invoker", "invoker_set.0.command_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invoker.invoker", "invoker_set.0.created_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_tat_invoker.invoker", "invoker_set.0.enable"), diff --git a/tencentcloud/resource_tc_tat_command.go b/tencentcloud/services/tat/resource_tc_tat_command.go similarity index 86% rename from tencentcloud/resource_tc_tat_command.go rename to tencentcloud/services/tat/resource_tc_tat_command.go index b78625f3f2..efee42a94f 100644 --- a/tencentcloud/resource_tc_tat_command.go +++ b/tencentcloud/services/tat/resource_tc_tat_command.go @@ -1,17 +1,20 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTatCommand() *schema.Resource { +func ResourceTencentCloudTatCommand() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTatCommandRead, Create: resourceTencentCloudTatCommandCreate, @@ -135,10 +138,10 @@ func resourceTencentCloudTatCommand() *schema.Resource { } func resourceTencentCloudTatCommandCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_command.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_command.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tat.NewCreateCommandRequest() @@ -151,7 +154,7 @@ func resourceTencentCloudTatCommandCreate(d *schema.ResourceData, meta interface } if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(StringToBase64(v.(string))) + request.Content = helper.String(tccommon.StringToBase64(v.(string))) } if v, ok := d.GetOk("description"); ok { @@ -205,10 +208,10 @@ func resourceTencentCloudTatCommandCreate(d *schema.ResourceData, meta interface request.OutputCOSKeyPrefix = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().CreateCommand(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().CreateCommand(request) if e != nil { - return retryError(e) + return tccommon.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,13 +232,13 @@ func resourceTencentCloudTatCommandCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_command.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_command.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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} commandId := d.Id() @@ -255,7 +258,7 @@ func resourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface{} } if command.Content != nil { - content, err := Base64ToString(*command.Content) + content, err := tccommon.Base64ToString(*command.Content) if err != nil { return fmt.Errorf("`Content` [%v] base64 to string failed, err: %v.", *command.Content, err) } @@ -334,10 +337,10 @@ func resourceTencentCloudTatCommandRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudTatCommandUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_command.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_command.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tat.NewModifyCommandRequest() @@ -352,7 +355,7 @@ func resourceTencentCloudTatCommandUpdate(d *schema.ResourceData, meta interface if d.HasChange("content") { if v, ok := d.GetOk("content"); ok { - request.Content = helper.String(StringToBase64(v.(string))) + request.Content = helper.String(tccommon.StringToBase64(v.(string))) } } @@ -412,10 +415,10 @@ func resourceTencentCloudTatCommandUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().ModifyCommand(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().ModifyCommand(request) if e != nil { - return retryError(e) + return tccommon.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,13 +435,13 @@ func resourceTencentCloudTatCommandUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudTatCommandDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_command.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_command.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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} commandId := d.Id() diff --git a/tencentcloud/services/tat/resource_tc_tat_command_test.go b/tencentcloud/services/tat/resource_tc_tat_command_test.go new file mode 100644 index 0000000000..c8a8fdc8a2 --- /dev/null +++ b/tencentcloud/services/tat/resource_tc_tat_command_test.go @@ -0,0 +1,101 @@ +package tat_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctat "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tat" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTatCommandResource_basic -v +func TestAccTencentCloudTatCommandResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTatCommandeDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTatCommand, + Check: resource.ComposeTestCheckFunc( + testAccCheckTatCommandExists("tencentcloud_tat_command.command"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "username", "root"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "command_name", "ls"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "content", "ls"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "description", "shell desc"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "command_type", "SHELL"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "working_directory", "/root"), + resource.TestCheckResourceAttr("tencentcloud_tat_command.command", "timeout", "50"), + ), + }, + { + ResourceName: "tencentcloud_tat_command.command", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTatCommandeDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctat.NewTatService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tat_command" { + continue + } + + command, err := service.DescribeTatCommand(ctx, rs.Primary.ID) + if command != nil { + return fmt.Errorf("tat command %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTatCommandExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctat.NewTatService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + command, err := service.DescribeTatCommand(ctx, rs.Primary.ID) + if command == nil { + return fmt.Errorf("tat command %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTatCommand = ` + +resource "tencentcloud_tat_command" "command" { + username = "root" + command_name = "ls" + content = "ls" + description = "shell desc" + command_type = "SHELL" + working_directory = "/root" + timeout = 50 +} + +` diff --git a/tencentcloud/resource_tc_tat_invocation_command_attachment.go b/tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment.go similarity index 87% rename from tencentcloud/resource_tc_tat_invocation_command_attachment.go rename to tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment.go index ae8cfef0a5..2db6a480e8 100644 --- a/tencentcloud/resource_tc_tat_invocation_command_attachment.go +++ b/tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTatInvocationCommandAttachment() *schema.Resource { +func ResourceTencentCloudTatInvocationCommandAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTatInvocationCommandAttachmentCreate, Read: resourceTencentCloudTatInvocationCommandAttachmentRead, @@ -130,10 +133,10 @@ func resourceTencentCloudTatInvocationCommandAttachment() *schema.Resource { } func resourceTencentCloudTatInvocationCommandAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_command_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_command_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tat.NewRunCommandRequest() @@ -198,10 +201,10 @@ func resourceTencentCloudTatInvocationCommandAttachmentCreate(d *schema.Resource request.OutputCOSKeyPrefix = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().RunCommand(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().RunCommand(request) if e != nil { - return retryError(e) + return tccommon.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,22 +217,22 @@ func resourceTencentCloudTatInvocationCommandAttachmentCreate(d *schema.Resource } invocationId = *response.Response.InvocationId - d.SetId(invocationId + FILED_SP + instanceId) + d.SetId(invocationId + tccommon.FILED_SP + instanceId) return resourceTencentCloudTatInvocationCommandAttachmentRead(d, meta) } func resourceTencentCloudTatInvocationCommandAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_command_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_command_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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{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()) } @@ -309,15 +312,15 @@ func resourceTencentCloudTatInvocationCommandAttachmentRead(d *schema.ResourceDa } func resourceTencentCloudTatInvocationCommandAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_command_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_command_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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{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_tat_invocation_command_attachment_test.go b/tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment_test.go similarity index 90% rename from tencentcloud/resource_tc_tat_invocation_command_attachment_test.go rename to tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment_test.go index b4b382b159..5ccc9e69e2 100644 --- a/tencentcloud/resource_tc_tat_invocation_command_attachment_test.go +++ b/tencentcloud/services/tat/resource_tc_tat_invocation_command_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatInvocationCommandAttachmentResource_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: testAccTatInvocationCommandAttachment, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "id"), - resource.TestCheckResourceAttr("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "instance_id", defaultInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "instance_id", tcacctest.DefaultInstanceId), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "working_directory", "/root"), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "timeout", "100"), // resource.TestCheckResourceAttr("tencentcloud_tat_invocation_command_attachment.invocation_command_attachment", "description", "shell test"), @@ -35,7 +37,7 @@ func TestAccTencentCloudTatInvocationCommandAttachmentResource_basic(t *testing. const testAccTatInvocationCommandAttachmentVar = ` variable "instance_id" { - default = "` + defaultInstanceId + `" + default = "` + tcacctest.DefaultInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_tat_invocation_invoke_attachment.go b/tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment.go similarity index 82% rename from tencentcloud/resource_tc_tat_invocation_invoke_attachment.go rename to tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment.go index 95e8f2c32e..a9a683e901 100644 --- a/tencentcloud/resource_tc_tat_invocation_invoke_attachment.go +++ b/tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTatInvocationInvokeAttachment() *schema.Resource { +func ResourceTencentCloudTatInvocationInvokeAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTatInvocationInvokeAttachmentCreate, Read: resourceTencentCloudTatInvocationInvokeAttachmentRead, @@ -82,10 +85,10 @@ func resourceTencentCloudTatInvocationInvokeAttachment() *schema.Resource { } func resourceTencentCloudTatInvocationInvokeAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_invoke_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_invoke_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tat.NewInvokeCommandRequest() @@ -126,10 +129,10 @@ func resourceTencentCloudTatInvocationInvokeAttachmentCreate(d *schema.ResourceD request.CommandId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().InvokeCommand(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().InvokeCommand(request) if e != nil { - return retryError(e) + return tccommon.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,22 +145,22 @@ func resourceTencentCloudTatInvocationInvokeAttachmentCreate(d *schema.ResourceD } invocationId = *response.Response.InvocationId - d.SetId(invocationId + FILED_SP + instanceId) + d.SetId(invocationId + tccommon.FILED_SP + instanceId) return resourceTencentCloudTatInvocationInvokeAttachmentRead(d, meta) } func resourceTencentCloudTatInvocationInvokeAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_invoke_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_invoke_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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{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()) } @@ -209,14 +212,14 @@ func resourceTencentCloudTatInvocationInvokeAttachmentRead(d *schema.ResourceDat } func resourceTencentCloudTatInvocationInvokeAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invocation_invoke_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invocation_invoke_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TatService{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_tat_invocation_invoke_attachment_test.go b/tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment_test.go similarity index 86% rename from tencentcloud/resource_tc_tat_invocation_invoke_attachment_test.go rename to tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment_test.go index ac30f9215d..6f98222aec 100644 --- a/tencentcloud/resource_tc_tat_invocation_invoke_attachment_test.go +++ b/tencentcloud/services/tat/resource_tc_tat_invocation_invoke_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,20 +13,20 @@ func TestAccTencentCloudTatInvocationInvokeAttachmentResource_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: testAccTatInvocationInvokeAttachment, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "id"), - resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "instance_id", defaultInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "instance_id", tcacctest.DefaultInstanceId), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "working_directory", "/root"), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "timeout", "100"), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "username", "root"), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "output_cos_bucket_url", "https://BucketName-123454321.cos.ap-beijing.myqcloud.com"), resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "output_cos_key_prefix", "log"), - resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "command_id", defaultCommandId), + resource.TestCheckResourceAttr("tencentcloud_tat_invocation_invoke_attachment.invocation_invoke_attachment", "command_id", tcacctest.DefaultCommandId), ), }, { @@ -38,11 +40,11 @@ func TestAccTencentCloudTatInvocationInvokeAttachmentResource_basic(t *testing.T const testAccTatInvocationInvokeAttachmentVar = ` variable "instance_id" { - default = "` + defaultInstanceId + `" + default = "` + tcacctest.DefaultInstanceId + `" } variable "command_id" { - default = "` + defaultCommandId + `" + default = "` + tcacctest.DefaultCommandId + `" } ` const testAccTatInvocationInvokeAttachment = testAccTatInvocationInvokeAttachmentVar + ` diff --git a/tencentcloud/resource_tc_tat_invoker.go b/tencentcloud/services/tat/resource_tc_tat_invoker.go similarity index 84% rename from tencentcloud/resource_tc_tat_invoker.go rename to tencentcloud/services/tat/resource_tc_tat_invoker.go index 3db9551f6f..38b4889e82 100644 --- a/tencentcloud/resource_tc_tat_invoker.go +++ b/tencentcloud/services/tat/resource_tc_tat_invoker.go @@ -1,17 +1,20 @@ -package tencentcloud +package tat 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" tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTatInvoker() *schema.Resource { +func ResourceTencentCloudTatInvoker() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTatInvokerRead, Create: resourceTencentCloudTatInvokerCreate, @@ -114,10 +117,10 @@ func resourceTencentCloudTatInvoker() *schema.Resource { } func resourceTencentCloudTatInvokerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tat.NewCreateInvokerRequest() @@ -168,10 +171,10 @@ func resourceTencentCloudTatInvokerCreate(d *schema.ResourceData, meta interface request.ScheduleSettings = &scheduleSettings } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().CreateInvoker(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().CreateInvoker(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudTatInvokerCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudTatInvokerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker.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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} invokerId := d.Id() @@ -272,10 +275,10 @@ func resourceTencentCloudTatInvokerRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudTatInvokerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tat.NewModifyInvokerRequest() @@ -340,10 +343,10 @@ func resourceTencentCloudTatInvokerUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTatClient().ModifyInvoker(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().ModifyInvoker(request) if e != nil { - return retryError(e) + return tccommon.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,13 +363,13 @@ func resourceTencentCloudTatInvokerUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudTatInvokerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tat_invoker.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker.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 := TatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} invokerId := d.Id() diff --git a/tencentcloud/services/tat/resource_tc_tat_invoker_config.go b/tencentcloud/services/tat/resource_tc_tat_invoker_config.go new file mode 100644 index 0000000000..ec5215bb7c --- /dev/null +++ b/tencentcloud/services/tat/resource_tc_tat_invoker_config.go @@ -0,0 +1,145 @@ +package tat + +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" + tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" +) + +func ResourceTencentCloudTatInvokerConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTatInvokerConfigCreate, + Read: resourceTencentCloudTatInvokerConfigRead, + Update: resourceTencentCloudTatInvokerConfigUpdate, + Delete: resourceTencentCloudTatInvokerConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "invoker_id": { + Required: true, + Type: schema.TypeString, + Description: "ID of the invoker to be enabled.", + }, + + "invoker_status": { + Required: true, + Type: schema.TypeString, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"on", "off"}), + Description: "Invoker on and off state, Values: `on`, `off`.", + }, + }, + } +} + +func resourceTencentCloudTatInvokerConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + invokerId string + ) + if v, ok := d.GetOk("invoker_id"); ok { + invokerId = v.(string) + } + + d.SetId(invokerId) + + return resourceTencentCloudTatInvokerConfigUpdate(d, meta) +} + +func resourceTencentCloudTatInvokerConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + invokerId := d.Id() + + invokerConfig, err := service.DescribeTatInvokerConfigById(ctx, invokerId) + if err != nil { + return err + } + + if invokerConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TatInvokerConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if invokerConfig.InvokerId != nil { + _ = d.Set("invoker_id", invokerConfig.InvokerId) + } + + if invokerConfig.Enable != nil && *invokerConfig.Enable { + _ = d.Set("invoker_status", "on") + } else { + _ = d.Set("invoker_status", "off") + } + + return nil +} + +func resourceTencentCloudTatInvokerConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + disableInvokerRequest = tat.NewDisableInvokerRequest() + enableInvokerRequest = tat.NewEnableInvokerRequest() + invokerId = d.Id() + err error + ) + + if v, ok := d.GetOk("invoker_status"); ok { + status := v.(string) + if status == "on" { + enableInvokerRequest.InvokerId = &invokerId + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().EnableInvoker(enableInvokerRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableInvokerRequest.GetAction(), enableInvokerRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + } else { + disableInvokerRequest.InvokerId = &invokerId + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTatClient().DisableInvoker(disableInvokerRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, disableInvokerRequest.GetAction(), disableInvokerRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + } + } + + if err != nil { + log.Printf("[CRITAL]%s update tat invokerConfig failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTatInvokerConfigRead(d, meta) +} + +func resourceTencentCloudTatInvokerConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tat_invoker_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_tat_invoker_config_test.go b/tencentcloud/services/tat/resource_tc_tat_invoker_config_test.go similarity index 85% rename from tencentcloud/resource_tc_tat_invoker_config_test.go rename to tencentcloud/services/tat/resource_tc_tat_invoker_config_test.go index 8d9811e69a..c8a3b69625 100644 --- a/tencentcloud/resource_tc_tat_invoker_config_test.go +++ b/tencentcloud/services/tat/resource_tc_tat_invoker_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tat_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 TestAccTencentCloudTatInvokerConfigResource_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: testAccTatInvokerConfig, diff --git a/tencentcloud/services/tat/resource_tc_tat_invoker_test.go b/tencentcloud/services/tat/resource_tc_tat_invoker_test.go new file mode 100644 index 0000000000..8c62a6fe99 --- /dev/null +++ b/tencentcloud/services/tat/resource_tc_tat_invoker_test.go @@ -0,0 +1,111 @@ +package tat_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctat "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tat" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTatInvokerResource_basic -v +func TestAccTencentCloudTatInvokerResource_basic(t *testing.T) { + // t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTatInvokerDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTatInvoker, + Check: resource.ComposeTestCheckFunc( + testAccCheckTatInvokerExists("tencentcloud_tat_invoker.invoker"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "name", "invoker-test"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "type", "SCHEDULE"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "instance_ids.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "username", "root"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "schedule_settings.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tat_invoker.invoker", "schedule_settings.0.policy", "ONCE"), + ), + }, + { + ResourceName: "tencentcloud_tat_invoker.invoker", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTatInvokerDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctat.NewTatService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tat_invoker" { + continue + } + + invoker, err := service.DescribeTatInvoker(ctx, rs.Primary.ID) + if invoker != nil { + return fmt.Errorf("tat invoker %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTatInvokerExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctat.NewTatService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + invoker, err := service.DescribeTatInvoker(ctx, rs.Primary.ID) + if invoker == nil { + return fmt.Errorf("tat invoker %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTatInvokerVar = ` +variable "instance_id" { + default = "` + tcacctest.DefaultInstanceId + `" +} +` +const testAccTatInvoker = testAccTatInvokerVar + testAccTatCommand + ` + +resource "tencentcloud_tat_invoker" "invoker" { + name = "invoker-test" + type = "SCHEDULE" + command_id = tencentcloud_tat_command.command.id + instance_ids = [var.instance_id,] + username = "root" + # parameters = "" + schedule_settings { + policy = "ONCE" + # recurrence = "" + invoke_time = "2099-11-17T16:00:00Z" + + } + } + +` diff --git a/tencentcloud/service_tencentcloud_tat.go b/tencentcloud/services/tat/service_tencentcloud_tat.go similarity index 96% rename from tencentcloud/service_tencentcloud_tat.go rename to tencentcloud/services/tat/service_tencentcloud_tat.go index 636f9e4877..ed7481d11f 100644 --- a/tencentcloud/service_tencentcloud_tat.go +++ b/tencentcloud/services/tat/service_tencentcloud_tat.go @@ -1,22 +1,29 @@ -package tencentcloud +package tat import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + "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 NewTatService(client *connectivity.TencentCloudClient) TatService { + return TatService{client: client} +} + type TatService struct { client *connectivity.TencentCloudClient } func (me *TatService) DescribeTatCommand(ctx context.Context, commandId string) (command *tat.Command, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeCommandsRequest() ) @@ -74,7 +81,7 @@ func (me *TatService) DescribeTatCommand(ctx context.Context, commandId string) } func (me *TatService) DeleteTatCommandById(ctx context.Context, commandId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tat.NewDeleteCommandRequest() @@ -101,7 +108,7 @@ func (me *TatService) DeleteTatCommandById(ctx context.Context, commandId string func (me *TatService) DescribeTatInvoker(ctx context.Context, invokerId string) (invoker *tat.Invoker, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeInvokersRequest() ) @@ -159,7 +166,7 @@ func (me *TatService) DescribeTatInvoker(ctx context.Context, invokerId string) } func (me *TatService) DeleteTatInvokerById(ctx context.Context, invokerId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tat.NewDeleteInvokerRequest() @@ -186,7 +193,7 @@ func (me *TatService) DeleteTatInvokerById(ctx context.Context, invokerId string func (me *TatService) DescribeTatCommandByFilter(ctx context.Context, param map[string]interface{}) (command []*tat.Command, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeCommandsRequest() ) @@ -272,7 +279,7 @@ func (me *TatService) DescribeTatCommandByFilter(ctx context.Context, param map[ func (me *TatService) DescribeTatInvokerByFilter(ctx context.Context, param map[string]interface{}) (invoker []*tat.Invoker, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeInvokersRequest() ) @@ -347,7 +354,7 @@ func (me *TatService) DescribeTatInvokerByFilter(ctx context.Context, param map[ func (me *TatService) DescribeTatAgentByFilter(ctx context.Context, param map[string]interface{}) (agent []*tat.AutomationAgentInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeAutomationAgentStatusRequest() ) @@ -398,7 +405,7 @@ func (me *TatService) DescribeTatAgentByFilter(ctx context.Context, param map[st func (me *TatService) DescribeTatInvokerRecordsByFilter(ctx context.Context, param map[string]interface{}) (invokerRecords []*tat.InvokerRecord, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeInvokerRecordsRequest() ) @@ -445,7 +452,7 @@ func (me *TatService) DescribeTatInvokerRecordsByFilter(ctx context.Context, par } func (me *TatService) DescribeTatInvokerConfigById(ctx context.Context, invokerId string) (invokerAttachment *tat.Invoker, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tat.NewDescribeInvokersRequest() request.InvokerIds = []*string{&invokerId} @@ -492,7 +499,7 @@ func (me *TatService) DescribeTatInvokerConfigById(ctx context.Context, invokerI } func (me *TatService) DescribeTatInvocationById(ctx context.Context, invocationId string) (invocation *tat.Invocation, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tat.NewDescribeInvocationsRequest() request.InvocationIds = []*string{&invocationId} @@ -539,7 +546,7 @@ func (me *TatService) DescribeTatInvocationById(ctx context.Context, invocationI } func (me *TatService) DeleteTatInvocationById(ctx context.Context, invocationId, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tat.NewCancelInvocationRequest() request.InvocationId = &invocationId @@ -565,7 +572,7 @@ func (me *TatService) DeleteTatInvocationById(ctx context.Context, invocationId, func (me *TatService) DescribeTatInvocationTaskByFilter(ctx context.Context, param map[string]interface{}) (invocationTaskDatasource []*tat.InvocationTask, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tat.NewDescribeInvocationTasksRequest() ) diff --git a/tencentcloud/data_source_tc_tcaplus_clusters.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters.go similarity index 90% rename from tencentcloud/data_source_tc_tcaplus_clusters.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters.go index 38a7be2f79..c5943865c1 100644 --- a/tencentcloud/data_source_tc_tcaplus_clusters.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters.go @@ -1,13 +1,15 @@ -package tencentcloud +package tcaplusdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudTcaplusClusters() *schema.Resource { +func DataSourceTencentCloudTcaplusClusters() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcaplusClustersRead, Schema: map[string]*schema.Schema{ @@ -105,13 +107,13 @@ func dataSourceTencentCloudTcaplusClusters() *schema.Resource { } func dataSourceTencentCloudTcaplusClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcaplus_clusters.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcaplus_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) service := TcaplusService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } clusterId := d.Get("cluster_id").(string) @@ -153,7 +155,7 @@ func dataSourceTencentCloudTcaplusClustersRead(d *schema.ResourceData, meta inte } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_tcaplus_clusters_test.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters_test.go similarity index 77% rename from tencentcloud/data_source_tc_tcaplus_clusters_test.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters_test.go index 45cf73abb0..6ef5eacbf0 100644 --- a/tencentcloud/data_source_tc_tcaplus_clusters_test.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_clusters_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcaplusdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,17 +13,17 @@ var testDataTcaplusClustersName = "data.tencentcloud_tcaplus_clusters.tcaplus" func TestAccTencentCloudTcaplusClustersData(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: testAccCheckTcaplusClusterDestroy, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataTcaplusClustersBasic, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr(testDataTcaplusClustersName, "cluster_name", defaultTcaPlusClusterName), + resource.TestCheckResourceAttr(testDataTcaplusClustersName, "cluster_name", tcacctest.DefaultTcaPlusClusterName), resource.TestCheckResourceAttr(testDataTcaplusClustersName, "list.#", "1"), resource.TestCheckResourceAttrSet(testDataTcaplusClustersName, "list.0.cluster_id"), - resource.TestCheckResourceAttr(testDataTcaplusClustersName, "list.0.cluster_name", defaultTcaPlusClusterName), + resource.TestCheckResourceAttr(testDataTcaplusClustersName, "list.0.cluster_name", tcacctest.DefaultTcaPlusClusterName), resource.TestCheckResourceAttr(testDataTcaplusClustersName, "list.0.idl_type", "PROTO"), resource.TestCheckResourceAttrSet(testDataTcaplusClustersName, "list.0.network_type"), resource.TestCheckResourceAttrSet(testDataTcaplusClustersName, "list.0.create_time"), @@ -35,4 +37,4 @@ func TestAccTencentCloudTcaplusClustersData(t *testing.T) { }) } -const testAccTencentCloudDataTcaplusClustersBasic = defaultTcaPlusData +const testAccTencentCloudDataTcaplusClustersBasic = tcacctest.DefaultTcaPlusData diff --git a/tencentcloud/data_source_tc_tcaplus_idls.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls.go similarity index 81% rename from tencentcloud/data_source_tc_tcaplus_idls.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls.go index 02f805ce27..cc7d9a08c7 100644 --- a/tencentcloud/data_source_tc_tcaplus_idls.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -6,10 +6,12 @@ import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudTcaplusIdls() *schema.Resource { +func DataSourceTencentCloudTcaplusIdls() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcaplusIdlsRead, Schema: map[string]*schema.Schema{ @@ -42,13 +44,13 @@ func dataSourceTencentCloudTcaplusIdls() *schema.Resource { } func dataSourceTencentCloudTcaplusIdlsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcaplus_idls.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcaplus_idls.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 := TcaplusService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } clusterId := d.Get("cluster_id").(string) @@ -87,7 +89,7 @@ func dataSourceTencentCloudTcaplusIdlsRead(d *schema.ResourceData, meta interfac } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_tcaplus_idls_test.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls_test.go similarity index 87% rename from tencentcloud/data_source_tc_tcaplus_idls_test.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls_test.go index 28bacee593..47aa98c583 100644 --- a/tencentcloud/data_source_tc_tcaplus_idls_test.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_idls_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcaplusdb_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 testDataTcaplusIdlsName = "data.tencentcloud_tcaplus_idls.id_test" func TestAccTencentCloudTcaplusIdlsData(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: testAccCheckTcaplusIdlDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudTcaplusIdlsData(t *testing.T) { }) } -const testAccTencentCloudDataTcaplusIdlsBaic = defaultTcaPlusData + ` +const testAccTencentCloudDataTcaplusIdlsBaic = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_idl" "test_idl" { cluster_id = local.tcaplus_id diff --git a/tencentcloud/data_source_tc_tcaplus_tablegroups.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups.go similarity index 86% rename from tencentcloud/data_source_tc_tcaplus_tablegroups.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups.go index 5359e0c1b0..24d5e628e6 100644 --- a/tencentcloud/data_source_tc_tcaplus_tablegroups.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups.go @@ -1,14 +1,16 @@ -package tencentcloud +package tcaplusdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudTcaplusTableGroups() *schema.Resource { +func DataSourceTencentCloudTcaplusTableGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcaplusTableGroupsRead, Schema: map[string]*schema.Schema{ @@ -71,13 +73,13 @@ func dataSourceTencentCloudTcaplusTableGroups() *schema.Resource { } func dataSourceTencentCloudTcaplusTableGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcaplus_tablegroups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcaplus_tablegroups.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 := TcaplusService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } clusterId := d.Get("cluster_id").(string) @@ -112,7 +114,7 @@ func dataSourceTencentCloudTcaplusTableGroupsRead(d *schema.ResourceData, meta i } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_tcaplus_tablegroups_test.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups_test.go similarity index 81% rename from tencentcloud/data_source_tc_tcaplus_tablegroups_test.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups_test.go index f1bbf0bcfa..feec9e814a 100644 --- a/tencentcloud/data_source_tc_tcaplus_tablegroups_test.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tablegroups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcaplusdb_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 testDataTcaplusGroupsName = "data.tencentcloud_tcaplus_tablegroups.id_test" func TestAccTencentCloudTcaplusGroupsData(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: testAccCheckTcaplusGroupDestroy, Steps: []resource.TestStep{ { @@ -32,7 +34,7 @@ func TestAccTencentCloudTcaplusGroupsData(t *testing.T) { }) } -const testAccTencentCloudDataTcaplusGroupsBasic = defaultTcaPlusData + ` +const testAccTencentCloudDataTcaplusGroupsBasic = tcacctest.DefaultTcaPlusData + ` data "tencentcloud_tcaplus_tablegroups" "id_test" { cluster_id = local.tcaplus_id diff --git a/tencentcloud/data_source_tc_tcaplus_tables.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables.go similarity index 92% rename from tencentcloud/data_source_tc_tcaplus_tables.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables.go index 74b1a1fd58..f4cc24c4de 100644 --- a/tencentcloud/data_source_tc_tcaplus_tables.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -6,10 +6,12 @@ import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudTcaplusTables() *schema.Resource { +func DataSourceTencentCloudTcaplusTables() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcaplusTablesRead, Schema: map[string]*schema.Schema{ @@ -122,13 +124,13 @@ func dataSourceTencentCloudTcaplusTables() *schema.Resource { } func dataSourceTencentCloudTcaplusTablesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcaplus_tables.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcaplus_tables.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 := TcaplusService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } clusterId := d.Get("cluster_id").(string) @@ -220,7 +222,7 @@ func dataSourceTencentCloudTcaplusTablesRead(d *schema.ResourceData, meta interf } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_tcaplus_tables_test.go b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables_test.go similarity index 87% rename from tencentcloud/data_source_tc_tcaplus_tables_test.go rename to tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables_test.go index eed5008f07..4eb483c8ac 100644 --- a/tencentcloud/data_source_tc_tcaplus_tables_test.go +++ b/tencentcloud/services/tcaplusdb/data_source_tc_tcaplus_tables_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcaplusdb_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 testDataTcaplusTablesName = "data.tencentcloud_tcaplus_tables.id_test" func TestAccTencentCloudTcaplusTablesData(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: testAccCheckTcaplusTableDestroy, Steps: []resource.TestStep{ { @@ -40,7 +42,7 @@ func TestAccTencentCloudTcaplusTablesData(t *testing.T) { }) } -const testAccTencentCloudDataTcaplusTablesBasic = defaultTcaPlusData + ` +const testAccTencentCloudDataTcaplusTablesBasic = tcacctest.DefaultTcaPlusData + ` data "tencentcloud_tcaplus_tables" "id_test" { cluster_id = local.tcaplus_id table_name = local.tcaplus_table diff --git a/tencentcloud/extension_tcaplus.go b/tencentcloud/services/tcaplusdb/extension_tcaplus.go similarity index 98% rename from tencentcloud/extension_tcaplus.go rename to tencentcloud/services/tcaplusdb/extension_tcaplus.go index 7ae9f97aec..5af551faeb 100644 --- a/tencentcloud/extension_tcaplus.go +++ b/tencentcloud/services/tcaplusdb/extension_tcaplus.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb const ( TCAPLUS_IDL_TYPE_PROTO = "PROTO" diff --git a/tencentcloud/resource_tc_tcaplus_cluster.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster.go similarity index 77% rename from tencentcloud/resource_tc_tcaplus_cluster.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster.go index 8aaccf6612..a5af0e49c1 100644 --- a/tencentcloud/resource_tc_tcaplus_cluster.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -6,12 +6,14 @@ 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" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) -func resourceTencentCloudTcaplusCluster() *schema.Resource { +func ResourceTencentCloudTcaplusCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcaplusClusterCreate, Read: resourceTencentCloudTcaplusClusterRead, @@ -26,13 +28,13 @@ func resourceTencentCloudTcaplusCluster() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(TCAPLUS_IDL_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TCAPLUS_IDL_TYPES), Description: "IDL type of the TcaplusDB cluster. Valid values: `PROTO` and `TDR`.", }, "cluster_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 30), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 30), Description: "Name of the TcaplusDB cluster. Name length should be between 1 and 30.", }, "vpc_id": { @@ -86,7 +88,7 @@ func resourceTencentCloudTcaplusCluster() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 3600, - ValidateFunc: validateIntegerMin(300), + ValidateFunc: tccommon.ValidateIntegerMin(300), Description: "Expiration time of old password after password update, unit: second.", }, @@ -132,12 +134,12 @@ func resourceTencentCloudTcaplusCluster() *schema.Resource { func resourceTencentCloudTcaplusClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_cluster.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( idlType = d.Get("idl_type").(string) @@ -150,10 +152,10 @@ func resourceTencentCloudTcaplusClusterCreate(d *schema.ResourceData, meta inter var clusterId string var inErr, outErr error - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { clusterId, inErr = tcaplusService.CreateCluster(ctx, idlType, clusterName, vpcId, subnetId, password) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -166,20 +168,20 @@ func resourceTencentCloudTcaplusClusterCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTcaplusClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_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) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterInfo, has, err := tcaplusService.DescribeCluster(ctx, d.Id()) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { clusterInfo, has, err = tcaplusService.DescribeCluster(ctx, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -212,20 +214,20 @@ func resourceTencentCloudTcaplusClusterRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTcaplusClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_clusterupdate")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_clusterupdate")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} d.Partial(true) if d.HasChange("cluster_name") { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := tcaplusService.ModifyClusterName(ctx, d.Id(), d.Get("cluster_name").(string)) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -236,7 +238,7 @@ func resourceTencentCloudTcaplusClusterUpdate(d *schema.ResourceData, meta inter if d.HasChange("password") { oldPwd, newPwd := d.GetChange("password") - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := tcaplusService.ModifyClusterPassword(ctx, d.Id(), oldPwd.(string), newPwd.(string), @@ -249,7 +251,7 @@ func resourceTencentCloudTcaplusClusterUpdate(d *schema.ResourceData, meta inter } } if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -264,20 +266,20 @@ func resourceTencentCloudTcaplusClusterUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTcaplusClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_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) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, err := tcaplusService.DeleteCluster(ctx, d.Id()) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err = tcaplusService.DeleteCluster(ctx, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -289,10 +291,10 @@ func resourceTencentCloudTcaplusClusterDelete(d *schema.ResourceData, meta inter _, has, err := tcaplusService.DescribeCluster(ctx, d.Id()) if err != nil || has { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = tcaplusService.DescribeCluster(ctx, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if has { diff --git a/tencentcloud/resource_tc_tcaplus_cluster_test.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster_test.go similarity index 79% rename from tencentcloud/resource_tc_tcaplus_cluster_test.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster_test.go index 1947917ff7..d39e4fe6f4 100644 --- a/tencentcloud/resource_tc_tcaplus_cluster_test.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_cluster_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcaplusdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcaplusdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,11 +22,11 @@ func init() { resource.AddTestSweepers("tencentcloud_tcaplus_cluster", &resource.Sweeper{ Name: "tencentcloud_tcaplus_cluster", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TcaplusService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctcaplusdb.NewTcaplusService(client) clusters, err := service.DescribeClusters(ctx, "", "") if err != nil { @@ -37,7 +41,7 @@ func init() { if err != nil { created = time.Time{} } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } _, err = service.DeleteCluster(ctx, id) @@ -54,8 +58,8 @@ func init() { func TestAccTencentCloudTcaplusClusterResource(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: testAccCheckTcaplusClusterDestroy, Steps: []resource.TestStep{ { @@ -106,10 +110,10 @@ func testAccCheckTcaplusClusterDestroy(s *terraform.State) error { if rs.Type != testTcaplusClusterResourceName { 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 := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { @@ -133,10 +137,10 @@ func testAccCheckTcaplusClusterExists(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 := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { @@ -154,7 +158,7 @@ func testAccCheckTcaplusClusterExists(n string) resource.TestCheckFunc { } } -const testAccTcaplusCluster string = defaultVpcSubnets + ` +const testAccTcaplusCluster string = tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_tcaplus_cluster" "test_cluster" { idl_type = "PROTO" cluster_name = "tf_te1_guagua" @@ -164,7 +168,7 @@ resource "tencentcloud_tcaplus_cluster" "test_cluster" { old_password_expire_last = 3600 } ` -const testAccTcaplusClusterUpdate string = defaultVpcSubnets + ` +const testAccTcaplusClusterUpdate string = tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_tcaplus_cluster" "test_cluster" { idl_type = "PROTO" cluster_name = "tf_te1_guagua_2" diff --git a/tencentcloud/resource_tc_tcaplus_idl.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl.go similarity index 82% rename from tencentcloud/resource_tc_tcaplus_idl.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl.go index 78faabb776..ba5897cfa1 100644 --- a/tencentcloud/resource_tc_tcaplus_idl.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -6,6 +6,8 @@ import ( "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" ) @@ -19,7 +21,7 @@ type TcaplusIdlId struct { FileType string } -func resourceTencentCloudTcaplusIdl() *schema.Resource { +func ResourceTencentCloudTcaplusIdl() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcaplusIdlCreate, Read: resourceTencentCloudTcaplusIdlRead, @@ -47,14 +49,14 @@ func resourceTencentCloudTcaplusIdl() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(TCAPLUS_IDL_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TCAPLUS_IDL_TYPES), Description: "Type of the IDL file. Valid values are PROTO and TDR.", }, "file_ext_type": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(TCAPLUS_FILE_EXT_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TCAPLUS_FILE_EXT_TYPES), Description: "File ext type of the IDL file. If `file_type` is `PROTO`, `file_ext_type` must be 'proto'; If `file_type` is `TDR`, `file_ext_type` must be 'xml'.", }, "file_content": { @@ -114,12 +116,12 @@ func resourceTencentCloudTcaplusIdl() *schema.Resource { } func resourceTencentCloudTcaplusIdlCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_idl.create")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_idl.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tcaplusIdlId TcaplusIdlId tcaplusIdlId.ClusterId = d.Get("cluster_id").(string) @@ -146,10 +148,10 @@ func resourceTencentCloudTcaplusIdlCreate(d *schema.ResourceData, meta interface idlId, parseTableInfos, err := tcaplusService.VerifyIdlFiles(ctx, tcaplusIdlId, groupId, fileContent) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { idlId, parseTableInfos, err = tcaplusService.VerifyIdlFiles(ctx, tcaplusIdlId, groupId, fileContent) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -193,13 +195,13 @@ func resourceTencentCloudTcaplusIdlCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudTcaplusIdlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_idl.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_idl.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) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tcaplusIdlId TcaplusIdlId @@ -209,10 +211,10 @@ func resourceTencentCloudTcaplusIdlRead(d *schema.ResourceData, meta interface{} parseTableInfos, err := tcaplusService.DesOldIdlFiles(ctx, tcaplusIdlId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { parseTableInfos, err = tcaplusService.DesOldIdlFiles(ctx, tcaplusIdlId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -250,10 +252,10 @@ func resourceTencentCloudTcaplusIdlRead(d *schema.ResourceData, meta interface{} func resourceTencentCloudTcaplusIdlDelete(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) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tcaplusIdlId TcaplusIdlId @@ -264,10 +266,10 @@ func resourceTencentCloudTcaplusIdlDelete(d *schema.ResourceData, meta interface err := tcaplusService.DeleteIdlFiles(ctx, tcaplusIdlId) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = tcaplusService.DeleteIdlFiles(ctx, tcaplusIdlId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_tcaplus_idl_test.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl_test.go similarity index 82% rename from tencentcloud/resource_tc_tcaplus_idl_test.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl_test.go index f0b66bb61c..af83312c6b 100644 --- a/tencentcloud/resource_tc_tcaplus_idl_test.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_idl_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcaplusdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcaplusdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -16,8 +20,8 @@ var testTcaplusIdlResourceNameResourceKey = testTcaplusIdlResourceName + ".test_ func TestAccTencentCloudTcaplusIdlResource(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: testAccCheckTcaplusIdlDestroy, Steps: []resource.TestStep{ { @@ -47,8 +51,8 @@ func TestAccTencentCloudTcaplusIdlResource(t *testing.T) { func TestAccTencentCloudTcaplusTdrIdlResource(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: testAccCheckTcaplusIdlDestroy, Steps: []resource.TestStep{ { @@ -71,26 +75,26 @@ func testAccCheckTcaplusIdlDestroy(s *terraform.State) error { if rs.Type != testTcaplusIdlResourceName { continue } - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - var tcaplusIdlId TcaplusIdlId + var tcaplusIdlId svctcaplusdb.TcaplusIdlId if err := json.Unmarshal([]byte(rs.Primary.ID), &tcaplusIdlId); err != nil { return fmt.Errorf("idl id is broken,%s", err.Error()) } - outerr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outerr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err := service.DescribeIdlFileInfos(ctx, tcaplusIdlId.ClusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if len(infos) == 0 { return nil } for _, info := range infos { if *info.FileId == tcaplusIdlId.FileId { - return retryError(fmt.Errorf("delete failed!")) + return tccommon.RetryError(fmt.Errorf("delete failed!")) } } return nil @@ -108,11 +112,11 @@ func testAccCheckTcaplusIdlExists(n string) resource.TestCheckFunc { if !ok { return fmt.Errorf("resource %s is not found", n) } - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - var tcaplusIdlId TcaplusIdlId + var tcaplusIdlId svctcaplusdb.TcaplusIdlId if err := json.Unmarshal([]byte(rs.Primary.ID), &tcaplusIdlId); err != nil { return fmt.Errorf("idl id is broken,%s", err.Error()) @@ -131,7 +135,7 @@ func testAccCheckTcaplusIdlExists(n string) resource.TestCheckFunc { } } -const testAccTcaplusIdl = defaultTcaPlusData + ` +const testAccTcaplusIdl = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_idl" "test_idl" { cluster_id = local.tcaplus_id tablegroup_id = local.tcaplus_table_group_id @@ -168,7 +172,7 @@ resource "tencentcloud_tcaplus_idl" "test_idl" { } ` -const testAccTcaplusIdlTdr = defaultTcaPlusData + ` +const testAccTcaplusIdlTdr = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_idl" "test_tdr_idl" { cluster_id = data.tencentcloud_tcaplus_clusters.tdr_tcaplus.list.0.cluster_id tablegroup_id = data.tencentcloud_tcaplus_tablegroups.tdr_group.list.0.tablegroup_id diff --git a/tencentcloud/resource_tc_tcaplus_table.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table.go similarity index 79% rename from tencentcloud/resource_tc_tcaplus_table.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table.go index 7c14c84b8a..387e96f96c 100644 --- a/tencentcloud/resource_tc_tcaplus_table.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -6,11 +6,13 @@ 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" ) -func resourceTencentCloudTcaplusTable() *schema.Resource { +func ResourceTencentCloudTcaplusTable() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcaplusTableCreate, Read: resourceTencentCloudTcaplusTableRead, @@ -39,7 +41,7 @@ func resourceTencentCloudTcaplusTable() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(TCAPLUS_TABLE_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TCAPLUS_TABLE_TYPES), Description: "Type of the TcaplusDB table. Valid values are `GENERIC` and `LIST`.", }, "description": { @@ -55,7 +57,7 @@ func resourceTencentCloudTcaplusTable() *schema.Resource { "table_idl_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(TCAPLUS_TABLE_IDL_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TCAPLUS_TABLE_IDL_TYPES), Description: "IDL type of the TcaplusDB table. Valid values: `PROTO` and `TDR`.", }, "reserved_read_cu": { @@ -103,12 +105,12 @@ func resourceTencentCloudTcaplusTable() *schema.Resource { func resourceTencentCloudTcaplusTableCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_table.create")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_table.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tcaplusIdlId TcaplusIdlId @@ -143,10 +145,10 @@ func resourceTencentCloudTcaplusTableCreate(d *schema.ResourceData, meta interfa d.SetId(tableInstanceId) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { info, has, err := tcaplusService.DescribeTask(ctx, clusterId, taskId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return resource.NonRetryableError(fmt.Errorf("create table task has been deleted")) @@ -176,12 +178,12 @@ func resourceTencentCloudTcaplusTableCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTcaplusTableUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_table.update")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_table.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) @@ -196,10 +198,10 @@ func resourceTencentCloudTcaplusTableUpdate(d *schema.ResourceData, meta interfa err := tcaplusService.ModifyTableMemo(ctx, clusterId, groupId, tableId, tableName, d.Get("description").(string)) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = tcaplusService.ModifyTableMemo(ctx, clusterId, groupId, tableId, tableName, d.Get("description").(string)) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -217,10 +219,10 @@ func resourceTencentCloudTcaplusTableUpdate(d *schema.ResourceData, meta interfa } taskId, err := tcaplusService.ModifyTables(ctx, tcaplusIdlId, clusterId, groupId, tableId, tableName, d.Get("table_idl_type").(string)) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { taskId, err = tcaplusService.ModifyTables(ctx, tcaplusIdlId, clusterId, groupId, tableId, tableName, d.Get("table_idl_type").(string)) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -228,10 +230,10 @@ func resourceTencentCloudTcaplusTableUpdate(d *schema.ResourceData, meta interfa if err != nil { return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { info, has, err := tcaplusService.DescribeTask(ctx, clusterId, taskId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return resource.NonRetryableError(fmt.Errorf("modify table idl task has been deleted")) @@ -261,22 +263,22 @@ func resourceTencentCloudTcaplusTableUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTcaplusTableRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_table.read")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_table.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) tableInfo, has, err := tcaplusService.DescribeTable(ctx, clusterId, d.Id()) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { tableInfo, has, err = tcaplusService.DescribeTable(ctx, clusterId, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return nil @@ -310,12 +312,12 @@ func resourceTencentCloudTcaplusTableRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTcaplusTableDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcaplus_table.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_table.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tcaplusService := TcaplusService{client: meta.(*TencentCloudClient).apiV3Conn} + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) groupId := d.Get("tablegroup_id").(string) tableName := d.Get("table_name").(string) @@ -324,10 +326,10 @@ func resourceTencentCloudTcaplusTableDelete(d *schema.ResourceData, meta interfa _, err := tcaplusService.DeleteTable(ctx, clusterId, groupId, instanceTableId, tableName) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err = tcaplusService.DeleteTable(ctx, clusterId, groupId, instanceTableId, tableName) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -339,10 +341,10 @@ func resourceTencentCloudTcaplusTableDelete(d *schema.ResourceData, meta interfa _, has, err := tcaplusService.DescribeTable(ctx, clusterId, instanceTableId) if err != nil || has { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, has, err = tcaplusService.DescribeTable(ctx, clusterId, instanceTableId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if has { err = fmt.Errorf("delete table fail, table still exist from sdk DescribeTable") @@ -361,10 +363,10 @@ func resourceTencentCloudTcaplusTableDelete(d *schema.ResourceData, meta interfa taskId, err := tcaplusService.DeleteTable(ctx, clusterId, groupId, instanceTableId, tableName) if err != nil { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { taskId, err = tcaplusService.DeleteTable(ctx, clusterId, groupId, instanceTableId, tableName) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -373,10 +375,10 @@ func resourceTencentCloudTcaplusTableDelete(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { info, has, err := tcaplusService.DescribeTask(ctx, clusterId, taskId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return resource.NonRetryableError(fmt.Errorf("delete table task has been deleted")) diff --git a/tencentcloud/resource_tc_tcaplus_table_test.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table_test.go similarity index 84% rename from tencentcloud/resource_tc_tcaplus_table_test.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table_test.go index 8f84cb8ded..cd1e374778 100644 --- a/tencentcloud/resource_tc_tcaplus_table_test.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_table_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcaplusdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcaplusdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,20 +22,20 @@ func init() { resource.AddTestSweepers("tencentcloud_tcaplus_table", &resource.Sweeper{ Name: "tencentcloud_tcaplus_table", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TcaplusService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctcaplusdb.NewTcaplusService(client) - clusters, err := service.DescribeClusters(ctx, "", defaultTcaPlusClusterName) + clusters, err := service.DescribeClusters(ctx, "", tcacctest.DefaultTcaPlusClusterName) if err != nil { return err } if len(clusters) == 0 { - return fmt.Errorf("no cluster named %s", defaultTcaPlusClusterName) + return fmt.Errorf("no cluster named %s", tcacctest.DefaultTcaPlusClusterName) } clusterId := *clusters[0].ClusterId @@ -45,7 +49,7 @@ func init() { insId := *table.TableInstanceId created := time.Time{} - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } @@ -54,10 +58,10 @@ func init() { continue } - err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { info, has, err := service.DescribeTask(ctx, clusterId, taskId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { return nil @@ -86,8 +90,8 @@ func init() { func TestAccTencentCloudTcaplusTableResource(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: testAccCheckTcaplusTableDestroy, Steps: []resource.TestStep{ { @@ -136,9 +140,9 @@ func testAccCheckTcaplusTableDestroy(s *terraform.State) error { if rs.Type != testTcaplusTableResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeTable(ctx, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) if err != nil { @@ -162,9 +166,9 @@ func testAccCheckTcaplusTableExists(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) - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeTable(ctx, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) if err != nil { @@ -180,7 +184,7 @@ func testAccCheckTcaplusTableExists(n string) resource.TestCheckFunc { } } -const testAccTcaplusTableBasic = defaultTcaPlusData + ` +const testAccTcaplusTableBasic = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_idl" "test_idl" { cluster_id = local.tcaplus_id tablegroup_id = local.tcaplus_table_group_id diff --git a/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup.go new file mode 100644 index 0000000000..b2c947c218 --- /dev/null +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup.go @@ -0,0 +1,185 @@ +package tcaplusdb + +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" +) + +func ResourceTencentCloudTcaplusTableGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcaplusTableGroupCreate, + Read: resourceTencentCloudTcaplusTableGroupRead, + Update: resourceTencentCloudTcaplusTableGroupUpdate, + Delete: resourceTencentCloudTcaplusTableGroupDelete, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the TcaplusDB cluster to which the table group belongs.", + }, + "tablegroup_name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 30), + Description: "Name of the TcaplusDB table group. Name length should be between 1 and 30.", + }, + // Computed values. + "table_count": { + Type: schema.TypeInt, + Computed: true, + Description: "Number of tables.", + }, + "total_size": { + Type: schema.TypeInt, + Computed: true, + Description: "Total storage size (MB).", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the TcaplusDB table group.", + }, + }, + } +} + +func resourceTencentCloudTcaplusTableGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_tablegroup.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + clusterId = d.Get("cluster_id").(string) + groupName = d.Get("tablegroup_name").(string) + ) + groupId, err := tcaplusService.CreateGroup(ctx, clusterId, groupName) + if err != nil { + return err + } + d.SetId(fmt.Sprintf("%s:%s", clusterId, groupId)) + return resourceTencentCloudTcaplusTableGroupRead(d, meta) +} + +func resourceTencentCloudTcaplusTableGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_tablegroup.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + clusterId := d.Get("cluster_id").(string) + groupId := d.Id() + + info, has, err := tcaplusService.DescribeGroup(ctx, clusterId, groupId) + if err != nil { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, err = tcaplusService.DescribeGroup(ctx, clusterId, groupId) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + } + if err != nil { + return err + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("tablegroup_name", info.TableGroupName) + _ = d.Set("table_count", int(*info.TableCount)) + _ = d.Set("total_size", int(*info.TotalSize)) + _ = d.Set("create_time", info.CreatedTime) + + return nil +} + +func resourceTencentCloudTcaplusTableGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_tablegroup.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + clusterId := d.Get("cluster_id").(string) + groupId := d.Id() + + if d.HasChange("tablegroup_name") { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := tcaplusService.ModifyGroupName(ctx, clusterId, groupId, d.Get("tablegroup_name").(string)) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return err + } + } + return resourceTencentCloudTcaplusTableGroupRead(d, meta) +} + +func resourceTencentCloudTcaplusTableGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcaplus_tablegroup.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcaplusService := TcaplusService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + clusterId := d.Get("cluster_id").(string) + groupId := d.Id() + + err := tcaplusService.DeleteGroup(ctx, clusterId, groupId) + if err != nil { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + err = tcaplusService.DeleteGroup(ctx, clusterId, groupId) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + } + + if err != nil { + return err + } + + _, has, err := tcaplusService.DescribeGroup(ctx, clusterId, groupId) + if err != nil || has { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, err = tcaplusService.DescribeGroup(ctx, clusterId, groupId) + if err != nil { + return tccommon.RetryError(err) + } + if has { + err = fmt.Errorf("delete group fail, group still exist from sdk DescribeGroup") + return resource.RetryableError(err) + } + return nil + }) + } + if err != nil { + return err + } + if !has { + return nil + } else { + return errors.New("delete group fail, group still exist from sdk DescribeGroup") + } +} diff --git a/tencentcloud/resource_tc_tcaplus_tablegroup_test.go b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup_test.go similarity index 75% rename from tencentcloud/resource_tc_tcaplus_tablegroup_test.go rename to tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup_test.go index abc8e6969c..82cab1ba5b 100644 --- a/tencentcloud/resource_tc_tcaplus_tablegroup_test.go +++ b/tencentcloud/services/tcaplusdb/resource_tc_tcaplus_tablegroup_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcaplusdb_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcaplusdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcaplusdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,8 +19,8 @@ var testTcaplusGroupResourceNameResourceKey = testTcaplusGroupResourceName + ".t func TestAccTencentCloudTcaplusGroupResource(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: testAccCheckTcaplusGroupDestroy, Steps: []resource.TestStep{ { @@ -47,9 +51,9 @@ func testAccCheckTcaplusGroupDestroy(s *terraform.State) error { if rs.Type != testTcaplusGroupResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeGroup(ctx, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) @@ -74,9 +78,9 @@ func testAccCheckTcaplusGroupExists(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) - service := TcaplusService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcaplusdb.NewTcaplusService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeGroup(ctx, rs.Primary.Attributes["cluster_id"], rs.Primary.ID) @@ -94,13 +98,13 @@ func testAccCheckTcaplusGroupExists(n string) resource.TestCheckFunc { } } -const testAccTcaplusGroup = defaultTcaPlusData + ` +const testAccTcaplusGroup = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_tablegroup" "test_group" { cluster_id = local.tcaplus_id tablegroup_name = "tf_test_group_name_guagua" } ` -const testAccTcaplusGroupUpdate = defaultTcaPlusData + ` +const testAccTcaplusGroupUpdate = tcacctest.DefaultTcaPlusData + ` resource "tencentcloud_tcaplus_tablegroup" "test_group" { cluster_id = local.tcaplus_id tablegroup_name = "tf_test_group_name_guagua_2" diff --git a/tencentcloud/service_tencentcloud_tcaplus.go b/tencentcloud/services/tcaplusdb/service_tencentcloud_tcaplus.go similarity index 96% rename from tencentcloud/service_tencentcloud_tcaplus.go rename to tencentcloud/services/tcaplusdb/service_tencentcloud_tcaplus.go index 81733e21dc..5ef555966b 100644 --- a/tencentcloud/service_tencentcloud_tcaplus.go +++ b/tencentcloud/services/tcaplusdb/service_tencentcloud_tcaplus.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcaplusdb import ( "context" @@ -9,20 +9,27 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/pkg/errors" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tcaplusdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcaplusdb/v20190823" + "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 NewTcaplusService(client *connectivity.TencentCloudClient) TcaplusService { + return TcaplusService{client: client} +} + type TcaplusService struct { client *connectivity.TencentCloudClient } func (me *TcaplusService) CreateCluster(ctx context.Context, idlType, clusterName, vpcId, subnetId, password string) (id string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewCreateClusterRequest() defer func() { if errRet != nil { @@ -53,7 +60,7 @@ func (me *TcaplusService) CreateCluster(ctx context.Context, idlType, clusterNam } func (me *TcaplusService) DescribeClusters(ctx context.Context, clusterId string, clusterName string) (clusterInfos []*tcaplusdb.ClusterInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeClustersRequest() clusterInfos = make([]*tcaplusdb.ClusterInfo, 0, 100) @@ -106,7 +113,7 @@ func (me *TcaplusService) DescribeClusters(ctx context.Context, clusterId string } func (me *TcaplusService) DescribeCluster(ctx context.Context, id string) (clusterInfo tcaplusdb.ClusterInfo, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeClustersRequest() defer func() { if errRet != nil { @@ -146,7 +153,7 @@ func (me *TcaplusService) DescribeCluster(ctx context.Context, id string) (clust func (me *TcaplusService) DeleteCluster(ctx context.Context, id string) (taskId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDeleteClusterRequest() defer func() { if errRet != nil { @@ -175,7 +182,7 @@ func (me *TcaplusService) DeleteCluster(ctx context.Context, id string) (taskId } func (me *TcaplusService) ModifyClusterName(ctx context.Context, id string, clusterName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewModifyClusterNameRequest() defer func() { if errRet != nil { @@ -199,7 +206,7 @@ func (me *TcaplusService) ModifyClusterName(ctx context.Context, id string, clus func (me *TcaplusService) ModifyClusterPassword(ctx context.Context, id string, oldPassword, newPassword string, oldPasswordExpireLast int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewModifyClusterPasswordRequest() defer func() { if errRet != nil { @@ -234,7 +241,7 @@ func (me *TcaplusService) ModifyClusterPassword(ctx context.Context, id string, } func (me *TcaplusService) DescribeTask(ctx context.Context, clusterId string, taskId string) (taskInfo tcaplusdb.TaskInfoNew, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeTasksRequest() defer func() { if errRet != nil { @@ -268,7 +275,7 @@ func (me *TcaplusService) DescribeTask(ctx context.Context, clusterId string, ta } func (me *TcaplusService) CreateGroup(ctx context.Context, id string, groupName string) (groupId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewCreateTableGroupRequest() defer func() { if errRet != nil { @@ -296,7 +303,7 @@ func (me *TcaplusService) CreateGroup(ctx context.Context, id string, groupName } func (me *TcaplusService) DescribeGroups(ctx context.Context, clusterId string, groupId, groupName string) (infos []*tcaplusdb.TableGroupInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeTableGroupsRequest() infos = make([]*tcaplusdb.TableGroupInfo, 0, 100) @@ -361,7 +368,7 @@ func (me *TcaplusService) DescribeGroups(ctx context.Context, clusterId string, } func (me *TcaplusService) DescribeGroup(ctx context.Context, id string, groupId string) (info tcaplusdb.TableGroupInfo, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeTableGroupsRequest() defer func() { if errRet != nil { @@ -410,7 +417,7 @@ func (me *TcaplusService) DescribeGroup(ctx context.Context, id string, groupId func (me *TcaplusService) DeleteGroup(ctx context.Context, clusterId string, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDeleteTableGroupRequest() defer func() { if errRet != nil { @@ -441,7 +448,7 @@ func (me *TcaplusService) DeleteGroup(ctx context.Context, clusterId string, gro } func (me *TcaplusService) ModifyGroupName(ctx context.Context, id string, groupId, groupName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewModifyTableGroupNameRequest() defer func() { if errRet != nil { @@ -473,7 +480,7 @@ func (me *TcaplusService) ModifyGroupName(ctx context.Context, id string, groupI func (me *TcaplusService) DeleteIdlFiles(ctx context.Context, tid TcaplusIdlId) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDeleteIdlFilesRequest() defer func() { if errRet != nil { @@ -505,7 +512,7 @@ func (me *TcaplusService) DeleteIdlFiles(ctx context.Context, tid TcaplusIdlId) } func (me *TcaplusService) DesOldIdlFiles(ctx context.Context, tid TcaplusIdlId) (tableInfos []*tcaplusdb.ParsedTableInfoNew, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewVerifyIdlFilesRequest() defer func() { @@ -546,7 +553,7 @@ func (me *TcaplusService) DesOldIdlFiles(ctx context.Context, tid TcaplusIdlId) } func (me *TcaplusService) VerifyIdlFiles(ctx context.Context, tid TcaplusIdlId, groupId string, fileContent string) (idlId int64, tableInfos []*tcaplusdb.ParsedTableInfoNew, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewVerifyIdlFilesRequest() defer func() { @@ -606,7 +613,7 @@ func (me *TcaplusService) CreateTables(ctx context.Context, tid TcaplusIdlId, reservedWriteQps, reservedVolume int64) (taskId string, tableInstanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewCreateTablesRequest() defer func() { @@ -676,7 +683,7 @@ func (me *TcaplusService) CreateTables(ctx context.Context, tid TcaplusIdlId, return } func (me *TcaplusService) DescribeTables(ctx context.Context, clusterId string, groupId, tableId, tableName string) (infos []*tcaplusdb.TableInfoNew, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeTablesRequest() infos = make([]*tcaplusdb.TableInfoNew, 0, 100) @@ -754,7 +761,7 @@ func (me *TcaplusService) DescribeTables(ctx context.Context, clusterId string, func (me *TcaplusService) DescribeTable(ctx context.Context, clusterId, tableInstanceId string) (tableInfo tcaplusdb.TableInfoNew, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeTablesRequest() defer func() { @@ -805,7 +812,7 @@ func (me *TcaplusService) DescribeTable(ctx context.Context, clusterId, tableIns func (me *TcaplusService) DeleteTable(ctx context.Context, clusterId, groupId, tableInstanceId, tableName string) (taskId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDeleteTablesRequest() defer func() { @@ -852,7 +859,7 @@ func (me *TcaplusService) DeleteTable(ctx context.Context, clusterId, groupId, t func (me *TcaplusService) ModifyTableMemo(ctx context.Context, clusterId, groupId, tableInstanceId, tableName, newDesc string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewModifyTableMemosRequest() defer func() { @@ -906,7 +913,7 @@ func (me *TcaplusService) ModifyTables(ctx context.Context, tid TcaplusIdlId, tableName, tableIdType string) (taskId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewModifyTablesRequest() defer func() { @@ -965,7 +972,7 @@ func (me *TcaplusService) ModifyTables(ctx context.Context, tid TcaplusIdlId, func (me *TcaplusService) DescribeIdlFileInfos(ctx context.Context, clusterId string) (infos []*tcaplusdb.IdlFileInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcaplusdb.NewDescribeIdlFileInfosRequest() infos = make([]*tcaplusdb.IdlFileInfo, 0, 100) diff --git a/tencentcloud/data_source_tc_tcm_mesh.go b/tencentcloud/services/tcm/data_source_tc_tcm_mesh.go similarity index 92% rename from tencentcloud/data_source_tc_tcm_mesh.go rename to tencentcloud/services/tcm/data_source_tc_tcm_mesh.go index f2a3618175..3ba89b4417 100644 --- a/tencentcloud/data_source_tc_tcm_mesh.go +++ b/tencentcloud/services/tcm/data_source_tc_tcm_mesh.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcm 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" tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcmMesh() *schema.Resource { +func DataSourceTencentCloudTcmMesh() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcmMeshRead, Schema: map[string]*schema.Schema{ @@ -170,12 +173,12 @@ func dataSourceTencentCloudTcmMesh() *schema.Resource { } func dataSourceTencentCloudTcmMeshRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcm_mesh.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcm_mesh.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][]*string) if v, ok := d.GetOk("mesh_id"); ok { @@ -198,14 +201,14 @@ func dataSourceTencentCloudTcmMeshRead(d *schema.ResourceData, meta interface{}) paramMap["MeshCluster"] = helper.InterfacesStringsPoint(meshClusterSet) } - service := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var meshList []*tcm.Mesh - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcmMeshByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } meshList = result return nil @@ -315,7 +318,7 @@ func dataSourceTencentCloudTcmMeshRead(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_tcm_mesh_test.go b/tencentcloud/services/tcm/data_source_tc_tcm_mesh_test.go similarity index 89% rename from tencentcloud/data_source_tc_tcm_mesh_test.go rename to tencentcloud/services/tcm/data_source_tc_tcm_mesh_test.go index ab3f6321af..36c693b6d3 100644 --- a/tencentcloud/data_source_tc_tcm_mesh_test.go +++ b/tencentcloud/services/tcm/data_source_tc_tcm_mesh_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcm_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 TestAccTencentCloudTcmMeshDataSource_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: testAccTcmMeshDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcm_mesh.mesh"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tcm_mesh.mesh"), resource.TestCheckResourceAttr("data.tencentcloud_tcm_mesh.mesh", "mesh_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcm_mesh.mesh", "mesh_list.0.display_name"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcm_mesh.mesh", "mesh_list.0.version"), diff --git a/tencentcloud/resource_tc_tcm_access_log_config.go b/tencentcloud/services/tcm/resource_tc_tcm_access_log_config.go similarity index 87% rename from tencentcloud/resource_tc_tcm_access_log_config.go rename to tencentcloud/services/tcm/resource_tc_tcm_access_log_config.go index adccd324b6..509a0594f2 100644 --- a/tencentcloud/resource_tc_tcm_access_log_config.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_access_log_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package tcm 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" tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmAccessLogConfig() *schema.Resource { +func ResourceTencentCloudTcmAccessLogConfig() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTcmAccessLogConfigRead, Create: resourceTencentCloudTcmAccessLogConfigCreate, @@ -137,8 +140,8 @@ func resourceTencentCloudTcmAccessLogConfig() *schema.Resource { } func resourceTencentCloudTcmAccessLogConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_access_log_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_access_log_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var meshName string if v, ok := d.GetOk("mesh_name"); ok { @@ -149,13 +152,13 @@ func resourceTencentCloudTcmAccessLogConfigCreate(d *schema.ResourceData, meta i } func resourceTencentCloudTcmAccessLogConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_access_log_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_access_log_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshName := d.Id() @@ -243,10 +246,10 @@ func resourceTencentCloudTcmAccessLogConfigRead(d *schema.ResourceData, meta int } func resourceTencentCloudTcmAccessLogConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_access_log_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_access_log_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcm.NewModifyAccessLogConfigRequest() @@ -323,10 +326,10 @@ func resourceTencentCloudTcmAccessLogConfigUpdate(d *schema.ResourceData, meta i request.Address = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().ModifyAccessLogConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().ModifyAccessLogConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -343,8 +346,8 @@ func resourceTencentCloudTcmAccessLogConfigUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudTcmAccessLogConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_access_log_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_access_log_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tcm_access_log_config_test.go b/tencentcloud/services/tcm/resource_tc_tcm_access_log_config_test.go similarity index 90% rename from tencentcloud/resource_tc_tcm_access_log_config_test.go rename to tencentcloud/services/tcm/resource_tc_tcm_access_log_config_test.go index 8c5f345c15..d568cd727b 100644 --- a/tencentcloud/resource_tc_tcm_access_log_config_test.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_access_log_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcm_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudTcmAccessLogConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckPrometheusAttachmentDestroy, Steps: []resource.TestStep{ { @@ -47,15 +51,15 @@ func TestAccTencentCloudTcmAccessLogConfigResource_basic(t *testing.T) { func testAccCheckTcmAccessLogConfigExists(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 := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if mesh.Mesh.Config.AccessLog == nil { return fmt.Errorf("tcm accessLog %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_tcm_cluster_attachment.go b/tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment.go similarity index 78% rename from tencentcloud/resource_tc_tcm_cluster_attachment.go rename to tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment.go index 2ee50b86ac..3e1d9912fa 100644 --- a/tencentcloud/resource_tc_tcm_cluster_attachment.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcm 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" tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmClusterAttachment() *schema.Resource { +func ResourceTencentCloudTcmClusterAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTcmClusterAttachmentRead, Create: resourceTencentCloudTcmClusterAttachmentCreate, @@ -75,12 +78,12 @@ func resourceTencentCloudTcmClusterAttachment() *schema.Resource { } func resourceTencentCloudTcmClusterAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_cluster_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_cluster_attachment.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 = tcm.NewLinkClusterListRequest() meshId string clusterId string @@ -119,10 +122,10 @@ func resourceTencentCloudTcmClusterAttachmentCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().LinkClusterList(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().LinkClusterList(request) if e != nil { - return retryError(e) + return tccommon.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,11 +138,11 @@ func resourceTencentCloudTcmClusterAttachmentCreate(d *schema.ResourceData, meta return err } - service := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { mesh, errRet := service.DescribeTcmMesh(ctx, meshId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } clusterList := mesh.Mesh.ClusterList if len(clusterList) < 1 { @@ -164,20 +167,20 @@ func resourceTencentCloudTcmClusterAttachmentCreate(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{meshId, clusterId}, FILED_SP)) + d.SetId(strings.Join([]string{meshId, clusterId}, tccommon.FILED_SP)) return resourceTencentCloudTcmClusterAttachmentRead(d, meta) } func resourceTencentCloudTcmClusterAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_cluster_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_cluster_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -234,15 +237,15 @@ func resourceTencentCloudTcmClusterAttachmentRead(d *schema.ResourceData, meta i } func resourceTencentCloudTcmClusterAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_cluster_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_cluster_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -254,10 +257,10 @@ func resourceTencentCloudTcmClusterAttachmentDelete(d *schema.ResourceData, meta return err } - err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { mesh, errRet := service.DescribeTcmMesh(ctx, meshId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } clusterList := mesh.Mesh.ClusterList if len(clusterList) < 1 { diff --git a/tencentcloud/resource_tc_tcm_cluster_attachment_test.go b/tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment_test.go similarity index 76% rename from tencentcloud/resource_tc_tcm_cluster_attachment_test.go rename to tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment_test.go index 1dbf81fb36..54432d0b58 100644 --- a/tencentcloud/resource_tc_tcm_cluster_attachment_test.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_cluster_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcm_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" + svctcm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -16,8 +20,8 @@ import ( func TestAccTencentCloudTcmClusterAttachment_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClusterAttachmentDestroy, Steps: []resource.TestStep{ { @@ -26,11 +30,11 @@ func TestAccTencentCloudTcmClusterAttachment_basic(t *testing.T) { testAccCheckClusterAttachmentExists("tencentcloud_tcm_cluster_attachment.basic"), // resource.TestCheckResourceAttrSet("tencentcloud_tcm_cluster_attachment.basic", "mesh_id"), resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.cluster_id", defaultMeshClusterId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.cluster_id", tcacctest.DefaultMeshClusterId), resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.region", "ap-guangzhou"), resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.role", "REMOTE"), - resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.vpc_id", defaultMeshVpcId), - resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.subnet_id", defaultMeshSubnetId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.vpc_id", tcacctest.DefaultMeshVpcId), + resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.subnet_id", tcacctest.DefaultMeshSubnetId), resource.TestCheckResourceAttr("tencentcloud_tcm_cluster_attachment.basic", "cluster_list.0.type", "EKS"), ), }, @@ -44,9 +48,9 @@ func TestAccTencentCloudTcmClusterAttachment_basic(t *testing.T) { } func testAccCheckClusterAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcm_cluster_attachment" { continue @@ -54,7 +58,7 @@ func testAccCheckClusterAttachmentDestroy(s *terraform.State) error { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } @@ -87,8 +91,8 @@ func testAccCheckClusterAttachmentDestroy(s *terraform.State) error { func testAccCheckClusterAttachmentExists(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 { @@ -97,14 +101,14 @@ func testAccCheckClusterAttachmentExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } meshId := ids[0] clusterId := ids[1] - service := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) mesh, err := service.DescribeTcmMesh(ctx, meshId) if err != nil { return err @@ -128,13 +132,13 @@ func testAccCheckClusterAttachmentExists(r string) resource.TestCheckFunc { const testAccTcmClusterAttachmentVar = ` variable "cluster_id" { - default = "` + defaultMeshClusterId + `" + default = "` + tcacctest.DefaultMeshClusterId + `" } variable "vpc_id" { - default = "` + defaultMeshVpcId + `" + default = "` + tcacctest.DefaultMeshVpcId + `" } variable "subnet_id" { - default = "` + defaultMeshSubnetId + `" + default = "` + tcacctest.DefaultMeshSubnetId + `" } ` diff --git a/tencentcloud/resource_tc_tcm_mesh.go b/tencentcloud/services/tcm/resource_tc_tcm_mesh.go similarity index 94% rename from tencentcloud/resource_tc_tcm_mesh.go rename to tencentcloud/services/tcm/resource_tc_tcm_mesh.go index 0563d541b9..371c19c643 100644 --- a/tencentcloud/resource_tc_tcm_mesh.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_mesh.go @@ -1,17 +1,20 @@ -package tencentcloud +package tcm 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" tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmMesh() *schema.Resource { +func ResourceTencentCloudTcmMesh() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTcmMeshRead, Create: resourceTencentCloudTcmMeshCreate, @@ -421,10 +424,10 @@ func resourceTencentCloudTcmMesh() *schema.Resource { } func resourceTencentCloudTcmMeshCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_mesh.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_mesh.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcm.NewCreateMeshRequest() @@ -638,10 +641,10 @@ func resourceTencentCloudTcmMeshCreate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().CreateMesh(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().CreateMesh(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -656,12 +659,12 @@ func resourceTencentCloudTcmMeshCreate(d *schema.ResourceData, meta interface{}) meshId = *response.Response.MeshId - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { mesh, errRet := service.DescribeTcmMesh(ctx, meshId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *mesh.Mesh.State == "PENDING" || *mesh.Mesh.State == "CREATING" || *mesh.Mesh.State != "RUNNING" { return resource.RetryableError(fmt.Errorf("mesh status is %v, retry...", *mesh.Mesh.State)) @@ -677,13 +680,13 @@ func resourceTencentCloudTcmMeshCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTcmMeshRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_mesh.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_mesh.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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshId := d.Id() @@ -953,10 +956,10 @@ func resourceTencentCloudTcmMeshRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudTcmMeshUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_mesh.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_mesh.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcm.NewModifyMeshRequest() meshId := d.Id() @@ -1154,10 +1157,10 @@ func resourceTencentCloudTcmMeshUpdate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().ModifyMesh(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().ModifyMesh(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -1173,13 +1176,13 @@ func resourceTencentCloudTcmMeshUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTcmMeshDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_mesh.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_mesh.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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshId := d.Id() @@ -1187,13 +1190,13 @@ func resourceTencentCloudTcmMeshDelete(d *schema.ResourceData, meta interface{}) return err } - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { mesh, errRet := service.DescribeTcmMesh(ctx, meshId) if errRet != nil { - if isExpectError(errRet, []string{"ResourceNotFound"}) { + if tccommon.IsExpectError(errRet, []string{"ResourceNotFound"}) { return nil } - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if mesh != nil { if *mesh.Mesh.State == "DELETING" { diff --git a/tencentcloud/resource_tc_tcm_mesh_test.go b/tencentcloud/services/tcm/resource_tc_tcm_mesh_test.go similarity index 87% rename from tencentcloud/resource_tc_tcm_mesh_test.go rename to tencentcloud/services/tcm/resource_tc_tcm_mesh_test.go index 94c3c44025..28cbcd3278 100644 --- a/tencentcloud/resource_tc_tcm_mesh_test.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_mesh_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcm_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudTcmMeshResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMeshDestroy, Steps: []resource.TestStep{ { @@ -68,9 +72,9 @@ func TestAccTencentCloudTcmMeshResource_basic(t *testing.T) { } func testAccCheckMeshDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcm_mesh" { continue @@ -78,7 +82,7 @@ func testAccCheckMeshDestroy(s *terraform.State) error { mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if err != nil { - if isExpectError(err, []string{"ResourceNotFound"}) { + if tccommon.IsExpectError(err, []string{"ResourceNotFound"}) { return nil } } @@ -91,15 +95,15 @@ func testAccCheckMeshDestroy(s *terraform.State) error { func testAccCheckMeshExists(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 := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if mesh.Mesh == nil { return fmt.Errorf("tcm mesh %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_tcm_prometheus_attachment.go b/tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment.go similarity index 84% rename from tencentcloud/resource_tc_tcm_prometheus_attachment.go rename to tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment.go index 524116eaa2..a5e9ce3544 100644 --- a/tencentcloud/resource_tc_tcm_prometheus_attachment.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment.go @@ -1,17 +1,20 @@ -package tencentcloud +package tcm 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" tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmPrometheusAttachment() *schema.Resource { +func ResourceTencentCloudTcmPrometheusAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTcmPrometheusAttachmentRead, Create: resourceTencentCloudTcmPrometheusAttachmentCreate, @@ -113,10 +116,10 @@ func resourceTencentCloudTcmPrometheusAttachment() *schema.Resource { } func resourceTencentCloudTcmPrometheusAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_prometheus_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_prometheus_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcm.NewLinkPrometheusRequest() @@ -168,10 +171,10 @@ func resourceTencentCloudTcmPrometheusAttachmentCreate(d *schema.ResourceData, m request.Prometheus = &prometheusConfig } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().LinkPrometheus(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().LinkPrometheus(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -186,12 +189,12 @@ func resourceTencentCloudTcmPrometheusAttachmentCreate(d *schema.ResourceData, m d.SetId(meshID) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { mesh, errRet := service.DescribeTcmMesh(ctx, meshID) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if mesh.Mesh.Status == nil || mesh.Mesh.Status.TPS == nil { return nil @@ -209,13 +212,13 @@ func resourceTencentCloudTcmPrometheusAttachmentCreate(d *schema.ResourceData, m } func resourceTencentCloudTcmPrometheusAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_prometheus_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_prometheus_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshId := d.Id() @@ -299,13 +302,13 @@ func resourceTencentCloudTcmPrometheusAttachmentRead(d *schema.ResourceData, met } func resourceTencentCloudTcmPrometheusAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_prometheus_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_prometheus_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshID := d.Id() diff --git a/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go b/tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment_test.go similarity index 80% rename from tencentcloud/resource_tc_tcm_prometheus_attachment_test.go rename to tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment_test.go index 2561559321..bab53508e0 100644 --- a/tencentcloud/resource_tc_tcm_prometheus_attachment_test.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_prometheus_attachment_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcm_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudTcmPrometheusAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckPrometheusAttachmentDestroy, Steps: []resource.TestStep{ { @@ -29,7 +33,7 @@ func TestAccTencentCloudTcmPrometheusAttachmentResource_basic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.is_public_addr", "false"), resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.url", "http://10.0.0.1:9090"), resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.username", "test"), - resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.vpc_id", defaultMeshVpcId), + resource.TestCheckResourceAttr("tencentcloud_tcm_prometheus_attachment.prometheus_attachment", "prometheus.0.custom_prom.0.vpc_id", tcacctest.DefaultMeshVpcId), ), }, { @@ -42,9 +46,9 @@ func TestAccTencentCloudTcmPrometheusAttachmentResource_basic(t *testing.T) { } func testAccCheckPrometheusAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcm_prometheus_attachment" { continue @@ -52,7 +56,7 @@ func testAccCheckPrometheusAttachmentDestroy(s *terraform.State) error { mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if err != nil { - if isExpectError(err, []string{"ResourceNotFound"}) { + if tccommon.IsExpectError(err, []string{"ResourceNotFound"}) { return nil } } @@ -65,15 +69,15 @@ func testAccCheckPrometheusAttachmentDestroy(s *terraform.State) error { func testAccCheckPrometheusAttachmentExists(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 := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if mesh.Mesh.Config.Prometheus == nil { return fmt.Errorf("tcm prometheusAttachment %s is not found", rs.Primary.ID) @@ -88,7 +92,7 @@ func testAccCheckPrometheusAttachmentExists(r string) resource.TestCheckFunc { const testAccTcmPrometheusAttachmentVar = ` variable "vpc_id" { - default = "` + defaultMeshVpcId + `" + default = "` + tcacctest.DefaultMeshVpcId + `" } ` diff --git a/tencentcloud/resource_tc_tcm_tracing_config.go b/tencentcloud/services/tcm/resource_tc_tcm_tracing_config.go similarity index 81% rename from tencentcloud/resource_tc_tcm_tracing_config.go rename to tencentcloud/services/tcm/resource_tc_tcm_tracing_config.go index 03ddfb4a19..224dc4bf26 100644 --- a/tencentcloud/resource_tc_tcm_tracing_config.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_tracing_config.go @@ -1,10 +1,12 @@ -package tencentcloud +package tcm 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 ( tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" ) -func resourceTencentCloudTcmTracingConfig() *schema.Resource { +func ResourceTencentCloudTcmTracingConfig() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTcmTracingConfigRead, Create: resourceTencentCloudTcmTracingConfigCreate, @@ -86,8 +88,8 @@ func resourceTencentCloudTcmTracingConfig() *schema.Resource { } func resourceTencentCloudTcmTracingConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_tracing_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_tracing_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var meshId string if v, ok := d.GetOk("mesh_id"); ok { @@ -99,13 +101,13 @@ func resourceTencentCloudTcmTracingConfigCreate(d *schema.ResourceData, meta int } func resourceTencentCloudTcmTracingConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_tracing_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_tracing_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 := TcmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} meshId := d.Id() @@ -161,10 +163,10 @@ func resourceTencentCloudTcmTracingConfigRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTcmTracingConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_tracing_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_tracing_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcm.NewModifyTracingConfigRequest() @@ -204,10 +206,10 @@ func resourceTencentCloudTcmTracingConfigUpdate(d *schema.ResourceData, meta int request.Zipkin = &tracingZipkin } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTcmClient().ModifyTracingConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTcmClient().ModifyTracingConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -224,8 +226,8 @@ func resourceTencentCloudTcmTracingConfigUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudTcmTracingConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcm_tracing_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcm_tracing_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tcm_tracing_config_test.go b/tencentcloud/services/tcm/resource_tc_tcm_tracing_config_test.go similarity index 81% rename from tencentcloud/resource_tc_tcm_tracing_config_test.go rename to tencentcloud/services/tcm/resource_tc_tcm_tracing_config_test.go index 81020e2417..20c5b123bd 100644 --- a/tencentcloud/resource_tc_tcm_tracing_config_test.go +++ b/tencentcloud/services/tcm/resource_tc_tcm_tracing_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcm_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcm" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudTcmTracingConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTcmTracingConfig, @@ -40,15 +44,15 @@ func TestAccTencentCloudTcmTracingConfigResource_basic(t *testing.T) { func testAccCheckTcmTracingConfigExists(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 := TcmService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcm.NewTcmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) mesh, err := service.DescribeTcmMesh(ctx, rs.Primary.ID) if mesh.Mesh.Config.Tracing == nil { return fmt.Errorf("tcm tracing %s is not found", rs.Primary.ID) diff --git a/tencentcloud/service_tencentcloud_tcm.go b/tencentcloud/services/tcm/service_tencentcloud_tcm.go similarity index 93% rename from tencentcloud/service_tencentcloud_tcm.go rename to tencentcloud/services/tcm/service_tencentcloud_tcm.go index 3997121331..a2752c61a4 100644 --- a/tencentcloud/service_tencentcloud_tcm.go +++ b/tencentcloud/services/tcm/service_tencentcloud_tcm.go @@ -1,22 +1,29 @@ -package tencentcloud +package tcm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tcm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm/v20210413" + "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 NewTcmService(client *connectivity.TencentCloudClient) TcmService { + return TcmService{client: client} +} + type TcmService struct { client *connectivity.TencentCloudClient } func (me *TcmService) DescribeTcmMesh(ctx context.Context, meshId string) (mesh *tcm.DescribeMeshResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcm.NewDescribeMeshRequest() ) @@ -42,7 +49,7 @@ func (me *TcmService) DescribeTcmMesh(ctx context.Context, meshId string) (mesh } func (me *TcmService) DeleteTcmMeshById(ctx context.Context, meshId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcm.NewDeleteMeshRequest() @@ -68,7 +75,7 @@ func (me *TcmService) DeleteTcmMeshById(ctx context.Context, meshId string) (err } func (me *TcmService) DeleteTcmClusterAttachmentById(ctx context.Context, meshId, clusterId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcm.NewUnlinkClusterRequest() @@ -95,7 +102,7 @@ func (me *TcmService) DeleteTcmClusterAttachmentById(ctx context.Context, meshId } func (me *TcmService) DeleteTcmPrometheusAttachmentById(ctx context.Context, meshID string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcm.NewUnlinkPrometheusRequest() @@ -122,7 +129,7 @@ func (me *TcmService) DeleteTcmPrometheusAttachmentById(ctx context.Context, mes func (me *TcmService) DescribeTcmAccessLogConfig(ctx context.Context, meshName string) (accessLogConfig *tcm.DescribeAccessLogConfigResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcm.NewDescribeAccessLogConfigRequest() ) @@ -149,7 +156,7 @@ func (me *TcmService) DescribeTcmAccessLogConfig(ctx context.Context, meshName s func (me *TcmService) DescribeTcmMeshByFilter(ctx context.Context, param map[string][]*string) (meshs []*tcm.Mesh, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcm.NewDescribeMeshListRequest() ) diff --git a/tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews.go b/tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews.go new file mode 100644 index 0000000000..e35d8307d4 --- /dev/null +++ b/tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews.go @@ -0,0 +1,103 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func DataSourceTencentCloudMonitorGrafanaPluginOverviews() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead, + Schema: map[string]*schema.Schema{ + "plugin_set": { + Computed: true, + Type: schema.TypeList, + Description: "Plugin set.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "plugin_id": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana plugin ID.", + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana plugin version.", + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudMonitorGrafanaPluginOverviewsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_monitor_grafana_plugin_overviews.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + paramMap := make(map[string]interface{}) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var pluginSet []*monitor.GrafanaPlugin + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeMonitorGrafanaPluginOverviewsByFilter(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + pluginSet = result + return nil + }) + if err != nil { + return err + } + + ids := make([]string, 0, len(pluginSet)) + tmpList := make([]map[string]interface{}, 0, len(pluginSet)) + + if pluginSet != nil { + for _, grafanaPlugin := range pluginSet { + grafanaPluginMap := map[string]interface{}{} + + if grafanaPlugin.PluginId != nil { + grafanaPluginMap["plugin_id"] = grafanaPlugin.PluginId + } + + if grafanaPlugin.Version != nil { + grafanaPluginMap["version"] = grafanaPlugin.Version + } + + ids = append(ids, *grafanaPlugin.PluginId) + tmpList = append(tmpList, grafanaPluginMap) + } + + _ = d.Set("plugin_set", tmpList) + } + + d.SetId(helper.DataResourceIdsHash(ids)) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { + return e + } + } + return nil +} diff --git a/tencentcloud/data_source_tc_monitor_grafana_plugin_overviews_test.go b/tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews_test.go similarity index 77% rename from tencentcloud/data_source_tc_monitor_grafana_plugin_overviews_test.go rename to tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews_test.go index 41a03d384d..73cfe26ee2 100644 --- a/tencentcloud/data_source_tc_monitor_grafana_plugin_overviews_test.go +++ b/tencentcloud/services/tcmg/data_source_tc_monitor_grafana_plugin_overviews_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaPluginOverviewsDataSource_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: testAccMonitorGrafanaPluginOverviewsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.0.plugin_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_grafana_plugin_overviews.plugin_overviews", "plugin_set.0.version"), diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config.go new file mode 100644 index 0000000000..9837a32fea --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config.go @@ -0,0 +1,158 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaDnsConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaDnsConfigCreate, + Read: resourceTencentCloudMonitorGrafanaDnsConfigRead, + Update: resourceTencentCloudMonitorGrafanaDnsConfigUpdate, + Delete: resourceTencentCloudMonitorGrafanaDnsConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "name_servers": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "DNS nameserver list.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaDnsConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_dns_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaDnsConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_dns_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + grafanaDnsConfig, err := service.DescribeMonitorGrafanaDnsConfigById(ctx, instanceId) + if err != nil { + return err + } + + if grafanaDnsConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaDnsConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaDnsConfig.NameServers != nil { + _ = d.Set("name_servers", grafanaDnsConfig.NameServers) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaDnsConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_dns_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := monitor.NewUpdateDNSConfigRequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOk("name_servers"); ok { + nameServersSet := v.(*schema.Set).List() + for i := range nameServersSet { + nameServers := nameServersSet[i].(string) + request.NameServers = append(request.NameServers, &nameServers) + } + } + + if len(request.NameServers) < 1 { + request.NameServers = append(request.NameServers, helper.String("")) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateDNSConfig(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaDnsConfig failed, reason:%+v", logId, err) + return err + } + + time.Sleep(3 * time.Second) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + err = resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update dns config failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + return resourceTencentCloudMonitorGrafanaDnsConfigRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaDnsConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_dns_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_dns_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config_test.go similarity index 87% rename from tencentcloud/resource_tc_monitor_grafana_dns_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config_test.go index c4b0eae775..8f6b977213 100644 --- a/tencentcloud/resource_tc_monitor_grafana_dns_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_dns_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaDnsConfigResource_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: testAccMonitorGrafanaDnsConfig, @@ -40,7 +42,7 @@ func TestAccTencentCloudMonitorGrafanaDnsConfigResource_basic(t *testing.T) { const testAccMonitorGrafanaDnsConfigVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config.go new file mode 100644 index 0000000000..deaa4131f1 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config.go @@ -0,0 +1,158 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaEnvConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaEnvConfigCreate, + Read: resourceTencentCloudMonitorGrafanaEnvConfigRead, + Update: resourceTencentCloudMonitorGrafanaEnvConfigUpdate, + Delete: resourceTencentCloudMonitorGrafanaEnvConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "envs": { + Optional: true, + Type: schema.TypeMap, + Description: "Environment variables.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaEnvConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_env_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaEnvConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaEnvConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_env_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaEnvConfig, err := service.DescribeMonitorGrafanaEnvConfigById(ctx, instanceId) + if err != nil { + return err + } + + if grafanaEnvConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaEnvConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaEnvConfig.Envs != nil { + v, err := helper.JsonToMap(*grafanaEnvConfig.Envs) + if err != nil { + return fmt.Errorf("envs `%v` format error", *grafanaEnvConfig.Envs) + } + _ = d.Set("envs", v) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaEnvConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_env_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := monitor.NewUpdateGrafanaEnvironmentsRequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOk("envs"); ok { + evs, o := helper.MapToString(v.(map[string]interface{})) + if !o { + return fmt.Errorf("envs `%s` format error", v) + } + request.Envs = &evs + } else { + request.Envs = helper.String("{}") + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateGrafanaEnvironments(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaEnvConfig failed, reason:%+v", logId, err) + return err + } + + time.Sleep(3 * time.Second) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + err = resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update envs config failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + return resourceTencentCloudMonitorGrafanaEnvConfigRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaEnvConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_env_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_env_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config_test.go similarity index 91% rename from tencentcloud/resource_tc_monitor_grafana_env_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config_test.go index dc99ba7e0b..2b0d96d88a 100644 --- a/tencentcloud/resource_tc_monitor_grafana_env_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_env_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaEnvConfigResource_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: testAccMonitorGrafanaEnvConfig, @@ -49,7 +51,7 @@ func TestAccTencentCloudMonitorGrafanaEnvConfigResource_basic(t *testing.T) { const testAccMonitorGrafanaEnvConfigVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` const testAccMonitorGrafanaEnvConfig = testAccMonitorGrafanaEnvConfigVar + ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance.go new file mode 100644 index 0000000000..bbc30b609a --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance.go @@ -0,0 +1,421 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaInstance() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorGrafanaInstanceRead, + Create: resourceTencentCloudMonitorGrafanaInstanceCreate, + Update: resourceTencentCloudMonitorGrafanaInstanceUpdate, + Delete: resourceTencentCloudMonitorGrafanaInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_name": { + Type: schema.TypeString, + Required: true, + Description: "Instance name.", + }, + + "instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana instance id.", + }, + + "root_url": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana external url which could be accessed by user.", + }, + + "vpc_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Vpc Id.", + }, + + "subnet_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Optional: true, + Computed: true, + Description: "Subnet Id array.", + }, + + "grafana_init_password": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Grafana server admin password.", + }, + + "enable_internet": { + Type: schema.TypeBool, + Optional: true, + Computed: true, + Description: "Control whether grafana could be accessed by internet.", + }, + + "is_distroy": { + Type: schema.TypeBool, + Optional: true, + Deprecated: "It has been deprecated from version 1.81.16.", + Description: "Whether to clean up completely, the default is false.", + }, + + "is_destroy": { + Type: schema.TypeBool, + Optional: true, + Description: "Whether to clean up completely, the default is false.", + }, + + "instance_status": { + Type: schema.TypeInt, + Computed: true, + Description: "Grafana instance status, 1: Creating, 2: Running, 6: Stopped.", + }, + + "internet_url": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana intranet address.", + }, + + "internal_url": { + Type: schema.TypeString, + Computed: true, + Description: "Grafana public address.", + }, + + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreateGrafanaInstanceRequest() + response *monitor.CreateGrafanaInstanceResponse + ) + + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("vpc_id"); ok { + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("subnet_ids"); ok { + subnetIdsSet := v.(*schema.Set).List() + for i := range subnetIdsSet { + subnetIds := subnetIdsSet[i].(string) + request.SubnetIds = append(request.SubnetIds, &subnetIds) + } + } + + if v, ok := d.GetOk("grafana_init_password"); ok { + request.GrafanaInitPassword = helper.String(v.(string)) + } + + if v, _ := d.GetOk("enable_internet"); v != nil { + // Internal account won't open + request.EnableInternet = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateGrafanaInstance(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 monitor grafanaInstance failed, reason:%+v", logId, err) + return err + } + + grafanaInstanceId := *response.Response.InstanceId + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, grafanaInstanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 6 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, operate failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + d.SetId(grafanaInstanceId) + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::monitor:%s:uin/:grafana-instance/%s", region, grafanaInstanceId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + return resourceTencentCloudMonitorGrafanaInstanceRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaInstance, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + + if err != nil { + return err + } + + if grafanaInstance == nil { + d.SetId("") + return fmt.Errorf("resource `grafanaInstance` %s does not exist", instanceId) + } + + if grafanaInstance.InstanceName != nil { + _ = d.Set("instance_name", grafanaInstance.InstanceName) + } + + if grafanaInstance.InstanceId != nil { + _ = d.Set("instance_id", grafanaInstance.InstanceId) + } + + if grafanaInstance.RootUrl != nil { + _ = d.Set("root_url", grafanaInstance.RootUrl) + } + + if grafanaInstance.VpcId != nil { + _ = d.Set("vpc_id", grafanaInstance.VpcId) + } + + if grafanaInstance.SubnetIds != nil { + var subnetIds []string + for _, v := range grafanaInstance.SubnetIds { + subnetIds = append(subnetIds, *v) + } + _ = d.Set("subnet_ids", subnetIds) + } + + if grafanaInstance.InternetUrl != nil && *grafanaInstance.InternetUrl != "" { + _ = d.Set("enable_internet", true) + } else { + _ = d.Set("enable_internet", false) + } + + if grafanaInstance.InternetUrl != nil { + _ = d.Set("internet_url", grafanaInstance.InternetUrl) + } + + if grafanaInstance.InternalUrl != nil { + _ = d.Set("internal_url", grafanaInstance.InternalUrl) + } + + if grafanaInstance.InstanceStatus != nil { + _ = d.Set("instance_status", grafanaInstance.InstanceStatus) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "monitor", "grafana-instance", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudMonitorGrafanaInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + instanceId := d.Id() + + if d.HasChange("instance_name") { + request := monitor.NewModifyGrafanaInstanceRequest() + request.InstanceId = &instanceId + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyGrafanaInstance(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 { + return err + } + } + + if d.HasChange("vpc_id") { + return fmt.Errorf("`vpc_id` do not support change now.") + } + + if d.HasChange("subnet_ids") { + return fmt.Errorf("`subnet_ids` do not support change now.") + } + + if d.HasChange("grafana_init_password") { + return fmt.Errorf("`grafana_init_password` do not support change now.") + } + + if d.HasChange("enable_internet") { + request := monitor.NewEnableGrafanaInternetRequest() + request.InstanceID = &instanceId + + if v, ok := d.GetOk("enable_internet"); ok { + request.EnableInternet = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().EnableGrafanaInternet(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 { + return err + } + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("monitor", "grafana-instance", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudMonitorGrafanaInstanceRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + if err := service.DeleteMonitorGrafanaInstanceById(ctx, instanceId); err != nil { + return err + } + + err := resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 6 { + return nil + } + if *instance.InstanceStatus == 7 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, operate failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + claenFlag := false + if v, ok := d.GetOk("is_distroy"); ok && v.(bool) { + claenFlag = true + } + if v, ok := d.GetOk("is_destroy"); ok && v.(bool) { + claenFlag = true + } + if claenFlag { + if err := service.CleanGrafanaInstanceById(ctx, instanceId); err != nil { + return err + } + + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if instance == nil { + return nil + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_instance_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance_test.go similarity index 77% rename from tencentcloud/resource_tc_monitor_grafana_instance_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance_test.go index 496886322d..3edb444b21 100644 --- a/tencentcloud/resource_tc_monitor_grafana_instance_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcmg_test import ( "context" @@ -7,6 +7,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" ) // go test -i; go test -test.run TestAccTencentCloudMonitorGrafanaInstance_basic -v @@ -14,8 +19,8 @@ func TestAccTencentCloudMonitorGrafanaInstance_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckGrafanaInstanceDestroy, Steps: []resource.TestStep{ { @@ -23,7 +28,7 @@ func TestAccTencentCloudMonitorGrafanaInstance_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckGrafanaInstanceExists("tencentcloud_monitor_grafana_instance.grafanaInstance"), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "instance_name", "test-grafana"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "vpc_id", defaultGrafanaVpcId), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "vpc_id", tcacctest.DefaultGrafanaVpcId), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "subnet_ids.#", "1"), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "enable_internet", "false"), resource.TestCheckResourceAttrSet("tencentcloud_monitor_grafana_instance.grafanaInstance", "internal_url"), @@ -34,7 +39,7 @@ func TestAccTencentCloudMonitorGrafanaInstance_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckGrafanaInstanceExists("tencentcloud_monitor_grafana_instance.grafanaInstance"), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "instance_name", "test-grafana-update"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "vpc_id", defaultGrafanaVpcId), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "vpc_id", tcacctest.DefaultGrafanaVpcId), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "subnet_ids.#", "1"), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_instance.grafanaInstance", "enable_internet", "true"), ), @@ -50,9 +55,9 @@ func TestAccTencentCloudMonitorGrafanaInstance_basic(t *testing.T) { } func testAccCheckGrafanaInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_grafana_instance" { continue @@ -80,8 +85,8 @@ func testAccCheckGrafanaInstanceDestroy(s *terraform.State) error { func testAccCheckGrafanaInstanceExists(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 { @@ -92,7 +97,7 @@ func testAccCheckGrafanaInstanceExists(r string) resource.TestCheckFunc { } instanceId := rs.Primary.ID - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) if err != nil { return err @@ -108,10 +113,10 @@ func testAccCheckGrafanaInstanceExists(r string) resource.TestCheckFunc { const testMonitorGrafanaInstanceVar = ` variable "vpc_id" { - default = "` + defaultGrafanaVpcId + `" + default = "` + tcacctest.DefaultGrafanaVpcId + `" } variable "subnet_id" { - default = "` + defaultGrafanaSubnetId + `" + default = "` + tcacctest.DefaultGrafanaSubnetId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration.go new file mode 100644 index 0000000000..bf09d7656b --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration.go @@ -0,0 +1,231 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaIntegration() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorGrafanaIntegrationRead, + Create: resourceTencentCloudMonitorGrafanaIntegrationCreate, + Update: resourceTencentCloudMonitorGrafanaIntegrationUpdate, + Delete: resourceTencentCloudMonitorGrafanaIntegrationDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "grafana instance id.", + }, + + "integration_id": { + Type: schema.TypeString, + Computed: true, + Description: "integration id.", + }, + + "kind": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "integration json schema kind.", + }, + + "content": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "generated json string of given integration json schema.", + }, + + "description": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "integration desc.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaIntegrationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_integration.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreateGrafanaIntegrationRequest() + response *monitor.CreateGrafanaIntegrationResponse + integrationId string + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kind"); ok { + request.Kind = helper.String(v.(string)) + } + + if v, ok := d.GetOk("content"); ok { + request.Content = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateGrafanaIntegration(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 monitor grafanaIntegration failed, reason:%+v", logId, err) + return err + } + + integrationId = *response.Response.IntegrationId + + d.SetId(strings.Join([]string{integrationId, instanceId}, tccommon.FILED_SP)) + return resourceTencentCloudMonitorGrafanaIntegrationRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaIntegrationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_integration.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + integrationId := idSplit[0] + instanceId := idSplit[1] + + grafanaIntegration, err := service.DescribeMonitorGrafanaIntegration(ctx, integrationId, instanceId) + + if err != nil { + return err + } + + if grafanaIntegration == nil { + d.SetId("") + return fmt.Errorf("resource `grafanaIntegration` %s does not exist", integrationId) + } + + _ = d.Set("instance_id", instanceId) + + if grafanaIntegration.IntegrationId != nil { + _ = d.Set("integration_id", grafanaIntegration.IntegrationId) + } + + if grafanaIntegration.Kind != nil { + _ = d.Set("kind", grafanaIntegration.Kind) + } + + //if grafanaIntegration.Content != nil { + // _ = d.Set("content", grafanaIntegration.Content) + //} + + return nil +} + +func resourceTencentCloudMonitorGrafanaIntegrationUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_integration.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateGrafanaIntegrationRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + integrationId := idSplit[0] + instanceId := idSplit[1] + + request.IntegrationId = &integrationId + request.InstanceId = &instanceId + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + if d.HasChange("kind") { + return fmt.Errorf("`kind` do not support change now.") + } else { + if v, ok := d.GetOk("kind"); ok { + request.Kind = helper.String(v.(string)) + } + } + + if d.HasChange("content") { + if v, ok := d.GetOk("content"); ok { + request.Content = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateGrafanaIntegration(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 { + return err + } + + return resourceTencentCloudMonitorGrafanaIntegrationRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaIntegrationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_integration.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + integrationId := idSplit[0] + instanceId := idSplit[1] + + if err := service.DeleteMonitorGrafanaIntegrationById(ctx, integrationId, instanceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_integration_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration_test.go similarity index 75% rename from tencentcloud/resource_tc_monitor_grafana_integration_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration_test.go index 2676376e81..eba4295ad0 100644 --- a/tencentcloud/resource_tc_monitor_grafana_integration_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_integration_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcmg_test import ( "context" @@ -8,6 +8,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -16,15 +20,15 @@ func TestAccTencentCloudMonitorGrafanaIntegration_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: testAccCheckGrafanaIntegrationDestroy, Steps: []resource.TestStep{ { Config: testAccMonitorGrafanaIntegration, Check: resource.ComposeTestCheckFunc( testAccCheckGrafanaIntegrationExists("tencentcloud_monitor_grafana_integration.grafanaIntegration"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "instance_id", defaultGrafanaInstanceId), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "instance_id", tcacctest.DefaultGrafanaInstanceId), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "kind", "tencentcloud-monitor-app"), ), }, @@ -32,7 +36,7 @@ func TestAccTencentCloudMonitorGrafanaIntegration_basic(t *testing.T) { Config: testAccMonitorGrafanaIntegration_update, Check: resource.ComposeTestCheckFunc( testAccCheckGrafanaIntegrationExists("tencentcloud_monitor_grafana_integration.grafanaIntegration"), - resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "instance_id", defaultGrafanaInstanceId), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "instance_id", tcacctest.DefaultGrafanaInstanceId), resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_integration.grafanaIntegration", "kind", "tencentcloud-monitor-app"), ), }, @@ -41,9 +45,9 @@ func TestAccTencentCloudMonitorGrafanaIntegration_basic(t *testing.T) { } func testAccCheckGrafanaIntegrationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_grafana_integration" { continue @@ -51,7 +55,7 @@ func testAccCheckGrafanaIntegrationDestroy(s *terraform.State) error { if rs.Primary.ID == "" { 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) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -72,8 +76,8 @@ func testAccCheckGrafanaIntegrationDestroy(s *terraform.State) error { func testAccCheckGrafanaIntegrationExists(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 { @@ -82,14 +86,14 @@ func testAccCheckGrafanaIntegrationExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { 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) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } integrationId := idSplit[0] instanceId := idSplit[1] - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := service.DescribeMonitorGrafanaIntegration(ctx, integrationId, instanceId) if err != nil { return err @@ -105,7 +109,7 @@ func testAccCheckGrafanaIntegrationExists(r string) resource.TestCheckFunc { const testMonitorGrafanaIntegrationVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel.go new file mode 100644 index 0000000000..40bcd1148c --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel.go @@ -0,0 +1,263 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaNotificationChannel() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorGrafanaNotificationChannelRead, + Create: resourceTencentCloudMonitorGrafanaNotificationChannelCreate, + Update: resourceTencentCloudMonitorGrafanaNotificationChannelUpdate, + Delete: resourceTencentCloudMonitorGrafanaNotificationChannelDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "grafana instance id.", + }, + + "channel_id": { + Type: schema.TypeString, + Computed: true, + Description: "plugin id.", + }, + + "channel_name": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "channel name.", + }, + + "org_id": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "Grafana organization which channel will be installed, default to 1 representing Main Org.", + }, + + "receivers": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Optional: true, + Computed: true, + Description: "cloud monitor notification template notice-id list.", + }, + + "extra_org_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Optional: true, + Description: "extra grafana organization id list, default to 1 representing Main Org.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaNotificationChannelCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_notification_channel.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreateGrafanaNotificationChannelRequest() + response *monitor.CreateGrafanaNotificationChannelResponse + channelId string + instanceId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("channel_name"); ok { + request.ChannelName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("org_id"); ok { + request.OrgId = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("receivers"); ok { + receiversSet := v.(*schema.Set).List() + for i := range receiversSet { + receivers := receiversSet[i].(string) + request.Receivers = append(request.Receivers, &receivers) + } + } + + if v, ok := d.GetOk("extra_org_ids"); ok { + extraOrgIdsSet := v.(*schema.Set).List() + for i := range extraOrgIdsSet { + extraOrgIds := extraOrgIdsSet[i].(string) + request.ExtraOrgIds = append(request.ExtraOrgIds, &extraOrgIds) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateGrafanaNotificationChannel(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 monitor grafanaNotificationChannel failed, reason:%+v", logId, err) + return err + } + + channelId = *response.Response.ChannelId + + d.SetId(channelId + tccommon.FILED_SP + instanceId) + return resourceTencentCloudMonitorGrafanaNotificationChannelRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaNotificationChannelRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_notification_channel.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + channelId := idSplit[0] + instanceId := idSplit[1] + + grafanaNotificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) + + if err != nil { + return err + } + + if grafanaNotificationChannel == nil { + d.SetId("") + return fmt.Errorf("resource `grafanaNotificationChannel` %s does not exist", channelId) + } + + _ = d.Set("instance_id", instanceId) + + if grafanaNotificationChannel.ChannelId != nil { + _ = d.Set("channel_id", grafanaNotificationChannel.ChannelId) + } + + if grafanaNotificationChannel.ChannelName != nil { + _ = d.Set("channel_name", grafanaNotificationChannel.ChannelName) + } + + _ = d.Set("receivers", grafanaNotificationChannel.Receivers) + + return nil +} + +func resourceTencentCloudMonitorGrafanaNotificationChannelUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_notification_channel.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateGrafanaNotificationChannelRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + channelId := idSplit[0] + instanceId := idSplit[1] + + request.ChannelId = &channelId + request.InstanceId = &instanceId + + if v, ok := d.GetOk("channel_name"); ok { + request.ChannelName = helper.String(v.(string)) + } + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + if d.HasChange("channel_name") { + return fmt.Errorf("`channel_name` do not support change now.") + } + + if d.HasChange("org_id") { + return fmt.Errorf("`org_id` do not support change now.") + } + + if d.HasChange("receivers") { + return fmt.Errorf("`receivers` do not support change now.") + } + + if d.HasChange("extra_org_ids") { + return fmt.Errorf("`extra_org_ids` do not support change now.") + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateGrafanaNotificationChannel(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 { + return err + } + + return resourceTencentCloudMonitorGrafanaNotificationChannelRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaNotificationChannelDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_notification_channel.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + channelId := idSplit[0] + instanceId := idSplit[1] + + if err := service.DeleteMonitorGrafanaNotificationChannelById(ctx, channelId, instanceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel_test.go new file mode 100644 index 0000000000..a0250c26fb --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_notification_channel_test.go @@ -0,0 +1,121 @@ +package tcmg_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudMonitorGrafanaNotificationChannel_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckGrafanaNotificationChannelDestroy, + Steps: []resource.TestStep{ + { + Config: testAccMonitorGrafanaNotificationChannel, + Check: resource.ComposeTestCheckFunc( + testAccCheckGrafanaNotificationChannelExists("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "channel_name", "create-channel-test"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "org_id", "1"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_notification_channel.grafanaNotificationChannel", "receivers.#", "1"), + ), + }, + }, + }) +} + +func testAccCheckGrafanaNotificationChannelDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_grafana_notification_channel" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + channelId := idSplit[0] + instanceId := idSplit[1] + + notificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) + if err != nil { + return err + } + + if notificationChannel != nil { + return fmt.Errorf("GrafanaNotificationChannel %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckGrafanaNotificationChannelExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + channelId := idSplit[0] + instanceId := idSplit[1] + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + notificationChannel, err := service.DescribeMonitorGrafanaNotificationChannel(ctx, channelId, instanceId) + if err != nil { + return err + } + + if notificationChannel == nil { + return fmt.Errorf("GrafanaNotificationChannel %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testMonitorGrafanaNotificationChannelVar = ` +variable "instance_id" { + default = "` + tcacctest.DefaultGrafanaInstanceId + `" +} +variable "receivers" { + default = "` + tcacctest.DefaultGrafanaReceiver + `" +} +` + +const testAccMonitorGrafanaNotificationChannel = testMonitorGrafanaNotificationChannelVar + ` + +resource "tencentcloud_monitor_grafana_notification_channel" "grafanaNotificationChannel" { + instance_id = var.instance_id + channel_name = "create-channel-test" + org_id = 1 + receivers = [var.receivers] + extra_org_ids = [] +} + +` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin.go new file mode 100644 index 0000000000..6d0938c7a9 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin.go @@ -0,0 +1,214 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaPlugin() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorGrafanaPluginRead, + Create: resourceTencentCloudMonitorGrafanaPluginCreate, + Update: resourceTencentCloudMonitorGrafanaPluginUpdate, + Delete: resourceTencentCloudMonitorGrafanaPluginDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Grafana instance id.", + }, + + "plugin_id": { + Type: schema.TypeString, + Required: true, + Description: "Plugin id.", + }, + + "version": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Plugin version.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaPluginCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_plugin.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewInstallPluginsRequest() + //response *monitor.InstallPluginsResponse + pluginId string + instanceId string + descResquest = monitor.NewDescribeInstalledPluginsRequest() + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + var plugin monitor.GrafanaPlugin + if v, ok := d.GetOk("plugin_id"); ok { + pluginId = v.(string) + plugin.PluginId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("version"); ok { + plugin.Version = helper.String(v.(string)) + } + request.Plugins = append(request.Plugins, &plugin) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().InstallPlugins(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 monitor grafanaPlugin failed, reason:%+v", logId, err) + return err + } + + descResquest.PluginId = &pluginId + descResquest.InstanceId = &instanceId + outErr := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().DescribeInstalledPlugins(descResquest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return tccommon.RetryError(err, tccommon.InternalError) + } + if len(response.Response.PluginSet) < 1 { + return resource.RetryableError(fmt.Errorf("Installing pluin %v, retry...", pluginId)) + } + return nil + }) + if outErr != nil { + log.Printf("[CRITAL]%s Inquire monitor grafanaPlugin failed, reason:%+v", logId, outErr) + return outErr + } + + d.SetId(strings.Join([]string{instanceId, pluginId}, tccommon.FILED_SP)) + return resourceTencentCloudMonitorGrafanaPluginRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaPluginRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_plugin.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + instanceId := idSplit[0] + pluginId := idSplit[1] + + grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) + + if err != nil { + return err + } + + if grafanaPlugin == nil { + d.SetId("") + return fmt.Errorf("resource `grafanaPlugin` %s does not exist", pluginId) + } + + _ = d.Set("instance_id", instanceId) + + if grafanaPlugin.PluginId != nil { + _ = d.Set("plugin_id", grafanaPlugin.PluginId) + } + + if grafanaPlugin.Version != nil { + _ = d.Set("version", grafanaPlugin.Version) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaPluginUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_plugin.update")() + defer tccommon.InconsistentCheck(d, meta)() + + request := monitor.NewUninstallGrafanaPluginsRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + instanceId := idSplit[0] + pluginId := idSplit[1] + + request.InstanceId = &instanceId + request.PluginIds = []*string{&pluginId} + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + if d.HasChange("plugin_id") { + return fmt.Errorf("`plugin_id` do not support change now.") + } + + err := resourceTencentCloudMonitorGrafanaPluginDelete(d, meta) + if err != nil { + return err + } + + return resourceTencentCloudMonitorGrafanaPluginCreate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaPluginDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_plugin.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + instanceId := idSplit[0] + pluginId := idSplit[1] + + if err := service.DeleteMonitorGrafanaPluginById(ctx, instanceId, pluginId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin_test.go new file mode 100644 index 0000000000..59a2992a1a --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_plugin_test.go @@ -0,0 +1,127 @@ +package tcmg_test + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudMonitorGrafanaPlugin_basic -v +func TestAccTencentCloudMonitorGrafanaPlugin_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckGrafanaPluginDestroy, + Steps: []resource.TestStep{ + { + Config: testAccMonitorGrafanaPlugin, + Check: resource.ComposeTestCheckFunc( + testAccCheckGrafanaPluginExists("tencentcloud_monitor_grafana_plugin.grafanaPlugin"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_plugin.grafanaPlugin", "plugin_id", tcacctest.DefaultGrafanaPlugin), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_plugin.grafanaPlugin", "version", tcacctest.DefaultGrafanaVersion), + ), + }, + { + ResourceName: "tencentcloud_monitor_grafana_plugin.grafanaPlugin", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckGrafanaPluginDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_grafana_plugin" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + instanceId := idSplit[0] + pluginId := idSplit[1] + + grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) + if err != nil { + return err + } + + if grafanaPlugin != nil { + return fmt.Errorf("GrafanaPlugin %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckGrafanaPluginExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + instanceId := idSplit[0] + pluginId := idSplit[1] + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + grafanaPlugin, err := service.DescribeMonitorGrafanaPlugin(ctx, instanceId, pluginId) + if err != nil { + return err + } + + if grafanaPlugin == nil { + return fmt.Errorf("GrafanaPlugin %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testMonitorGrafanaPluginVar = ` +variable "instance_id" { + default = "` + tcacctest.DefaultGrafanaInstanceId + `" +} +variable "plugin_id" { + default = "` + tcacctest.DefaultGrafanaPlugin + `" +} +variable "plugin_version" { + default = "` + tcacctest.DefaultGrafanaVersion + `" +} +` + +const testAccMonitorGrafanaPlugin = testMonitorGrafanaPluginVar + ` + +resource "tencentcloud_monitor_grafana_plugin" "grafanaPlugin" { + instance_id = var.instance_id + plugin_id = var.plugin_id + version = var.plugin_version +} + +` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account.go new file mode 100644 index 0000000000..449f75ef36 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account.go @@ -0,0 +1,275 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaSsoAccount() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorGrafanaSsoAccountRead, + Create: resourceTencentCloudMonitorGrafanaSsoAccountCreate, + Update: resourceTencentCloudMonitorGrafanaSsoAccountUpdate, + Delete: resourceTencentCloudMonitorGrafanaSsoAccountDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "grafana instance id.", + }, + + "user_id": { + Type: schema.TypeString, + Required: true, + Description: "sub account uin of specific user.", + }, + + "notes": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "account related description.", + }, + + "role": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Description: "grafana role.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "organization": { + Type: schema.TypeString, + Required: true, + Description: "Grafana organization id string.", + }, + "role": { + Type: schema.TypeString, + Required: true, + Description: "Grafana role, one of {Admin,Editor,Viewer}.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaSsoAccountCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_account.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreateSSOAccountRequest() + response *monitor.CreateSSOAccountResponse + instanceId string + userId string + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("user_id"); ok { + request.UserId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("notes"); ok { + request.Notes = helper.String(v.(string)) + } + + if v, ok := d.GetOk("role"); ok { + roleList := v.([]interface{}) + for _, r := range roleList { + rr := r.(map[string]interface{}) + var role monitor.GrafanaAccountRole + if vv, ok := rr["role"]; ok { + role.Role = helper.String(vv.(string)) + } + if vv, ok := rr["organization"]; ok { + role.Organization = helper.String(vv.(string)) + } + request.Role = append(request.Role, &role) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateSSOAccount(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 monitor ssoAccount failed, reason:%+v", logId, err) + return err + } + + userId = *response.Response.UserId + + d.SetId(strings.Join([]string{instanceId, userId}, tccommon.FILED_SP)) + return resourceTencentCloudMonitorGrafanaSsoAccountRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoAccountRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_account.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + instanceId := idSplit[0] + userId := idSplit[1] + + ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) + + if err != nil { + return err + } + + if ssoAccount == nil { + d.SetId("") + return fmt.Errorf("resource `ssoAccount` %s does not exist", userId) + } + + _ = d.Set("instance_id", instanceId) + + if ssoAccount.UserId != nil { + _ = d.Set("user_id", ssoAccount.UserId) + } + + if ssoAccount.Notes != nil { + _ = d.Set("notes", ssoAccount.Notes) + } + + if ssoAccount.Role != nil { + roleList := make([]map[string]interface{}, 0, len(ssoAccount.Role)) + for _, role := range ssoAccount.Role { + roleList = append(roleList, map[string]interface{}{ + "role": role.Role, + "organization": role.Organization, + }) + } + _ = d.Set("role", roleList) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaSsoAccountUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_account.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateSSOAccountRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + instanceId := idSplit[0] + userId := idSplit[1] + + request.InstanceId = &instanceId + request.UserId = &userId + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + if d.HasChange("user_id") { + return fmt.Errorf("`user_id` do not support change now.") + } + + if d.HasChange("notes") { + if v, ok := d.GetOk("notes"); ok { + request.Notes = helper.String(v.(string)) + } + } + + if d.HasChange("role") { + if v, ok := d.GetOk("role"); ok { + roleList := v.([]interface{}) + for _, r := range roleList { + rr := r.(map[string]interface{}) + var role monitor.GrafanaAccountRole + if vv, ok := rr["role"]; ok { + role.Role = helper.String(vv.(string)) + } + if vv, ok := rr["organization"]; ok { + role.Organization = helper.String(vv.(string)) + } + request.Role = append(request.Role, &role) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateSSOAccount(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 { + return err + } + + return resourceTencentCloudMonitorGrafanaSsoAccountRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoAccountDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(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()) + } + instanceId := idSplit[0] + userId := idSplit[1] + + if err := service.DeleteMonitorSsoAccountById(ctx, instanceId, userId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account_test.go new file mode 100644 index 0000000000..704fb7f68e --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_account_test.go @@ -0,0 +1,128 @@ +package tcmg_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudMonitorGrafanaSsoAccount_basic -v +func TestAccTencentCloudMonitorGrafanaSsoAccount_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckSsoAccountDestroy, + Steps: []resource.TestStep{ + { + Config: testAccMonitorGrafanaSsoAccount, + Check: resource.ComposeTestCheckFunc( + testAccCheckSsoAccountExists("tencentcloud_monitor_grafana_sso_account.ssoAccount"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "user_id", "100027012454"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "notes", "desc-100027012454"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.0.role", "Admin"), + resource.TestCheckResourceAttr("tencentcloud_monitor_grafana_sso_account.ssoAccount", "role.0.organization", "Main Org."), + ), + }, + { + ResourceName: "tencentcloud_monitor_grafana_sso_account.ssoAccount", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckSsoAccountDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_grafana_sso_account" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + instanceId := idSplit[0] + userId := idSplit[1] + + ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) + if err != nil { + return err + } + + if ssoAccount != nil { + return fmt.Errorf("SsoAccount %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckSsoAccountExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + instanceId := idSplit[0] + userId := idSplit[1] + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + ssoAccount, err := service.DescribeMonitorSsoAccount(ctx, instanceId, userId) + if err != nil { + return err + } + + if ssoAccount == nil { + return fmt.Errorf("SsoAccount %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testMonitorGrafanaSsoAccountVar = ` +variable "instance_id" { + default = "` + tcacctest.DefaultGrafanaInstanceId + `" +} +` + +const testAccMonitorGrafanaSsoAccount = testMonitorGrafanaSsoAccountVar + ` + +resource "tencentcloud_monitor_grafana_sso_account" "ssoAccount" { + instance_id = var.instance_id + user_id = "100027012454" + notes = "desc-100027012454" + role { + organization = "Main Org." + role = "Admin" + } +} + +` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config.go new file mode 100644 index 0000000000..17ce620431 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config.go @@ -0,0 +1,127 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaSsoCamConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaSsoCamConfigCreate, + Read: resourceTencentCloudMonitorGrafanaSsoCamConfigRead, + Update: resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate, + Delete: resourceTencentCloudMonitorGrafanaSsoCamConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "enable_sso_cam_check": { + Required: true, + Type: schema.TypeBool, + Description: "Whether to enable the CAM authorization: `true` for enabling; `false` for disabling.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaSsoCamConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoCamConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaSsoCamConfig, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if err != nil { + return err + } + + if grafanaSsoCamConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaSsoCamConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaSsoCamConfig.EnableSSOCamCheck != nil { + _ = d.Set("enable_sso_cam_check", grafanaSsoCamConfig.EnableSSOCamCheck) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaSsoCamConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewEnableSSOCamCheckRequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOkExists("enable_sso_cam_check"); ok { + request.EnableSSOCamCheck = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().EnableSSOCamCheck(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaSsoCamConfig failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudMonitorGrafanaSsoCamConfigRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoCamConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_cam_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_cam_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config_test.go similarity index 88% rename from tencentcloud/resource_tc_monitor_grafana_sso_cam_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config_test.go index f2a88fdb6a..3feabba955 100644 --- a/tencentcloud/resource_tc_monitor_grafana_sso_cam_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_cam_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaSsoCamConfigResource_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: testAccMonitorGrafanaSsoCamConfig, @@ -40,7 +42,7 @@ func TestAccTencentCloudMonitorGrafanaSsoCamConfigResource_basic(t *testing.T) { const testAccMonitorGrafanaSsoCamConfigVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config.go new file mode 100644 index 0000000000..f91c51abc0 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config.go @@ -0,0 +1,149 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaSsoConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaSsoConfigCreate, + Read: resourceTencentCloudMonitorGrafanaSsoConfigRead, + Update: resourceTencentCloudMonitorGrafanaSsoConfigUpdate, + Delete: resourceTencentCloudMonitorGrafanaSsoConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "enable_sso": { + Required: true, + Type: schema.TypeBool, + Description: "Whether to enable SSO: `true` for enabling; `false` for disabling.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaSsoConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaSsoConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaSsoConfig, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if err != nil { + return err + } + + if grafanaSsoConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaSsoConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaSsoConfig.EnableSSO != nil { + _ = d.Set("enable_sso", grafanaSsoConfig.EnableSSO) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaSsoConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := monitor.NewEnableGrafanaSSORequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOkExists("enable_sso"); ok { + request.EnableSSO = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().EnableGrafanaSSO(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaSsoConfig failed, reason:%+v", logId, err) + return err + } + + time.Sleep(3 * time.Second) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + err = resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update sso failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + return resourceTencentCloudMonitorGrafanaSsoConfigRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaSsoConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_sso_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_sso_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config_test.go similarity index 87% rename from tencentcloud/resource_tc_monitor_grafana_sso_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config_test.go index 428bd4fb37..de3a11b66a 100644 --- a/tencentcloud/resource_tc_monitor_grafana_sso_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_sso_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaSsoConfigResource_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: testAccMonitorGrafanaSsoConfig, @@ -40,7 +42,7 @@ func TestAccTencentCloudMonitorGrafanaSsoConfigResource_basic(t *testing.T) { const testAccMonitorGrafanaSsoConfigVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade.go new file mode 100644 index 0000000000..1e0b57cffc --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade.go @@ -0,0 +1,148 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaVersionUpgrade() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaVersionUpgradeCreate, + Read: resourceTencentCloudMonitorGrafanaVersionUpgradeRead, + Update: resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate, + Delete: resourceTencentCloudMonitorGrafanaVersionUpgradeDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "alias": { + Required: true, + Type: schema.TypeString, + Description: "Version alias.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaVersionUpgradeCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaVersionUpgradeRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaVersionUpgrade, err := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if err != nil { + return err + } + + if grafanaVersionUpgrade == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaVersionUpgrade` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaVersionUpgrade.Version != nil { + _ = d.Set("alias", grafanaVersionUpgrade.Version) + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaVersionUpgradeUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := monitor.NewUpgradeGrafanaInstanceRequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOk("alias"); ok { + request.Alias = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpgradeGrafanaInstance(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaVersionUpgrade failed, reason:%+v", logId, err) + return err + } + + time.Sleep(3 * time.Second) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + err = resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorGrafanaInstance(ctx, instanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("grafanaInstance status is %v, update version failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("grafanaInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + return resourceTencentCloudMonitorGrafanaVersionUpgradeRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaVersionUpgradeDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_version_upgrade.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_version_upgrade_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade_test.go similarity index 83% rename from tencentcloud/resource_tc_monitor_grafana_version_upgrade_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade_test.go index 1a934f7107..ee2b996e13 100644 --- a/tencentcloud/resource_tc_monitor_grafana_version_upgrade_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_version_upgrade_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaVersionUpgradeResource_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: testAccMonitorGrafanaVersionUpgrade, @@ -33,7 +35,7 @@ func TestAccTencentCloudMonitorGrafanaVersionUpgradeResource_basic(t *testing.T) const testAccMonitorGrafanaVersionUpgradeVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config.go new file mode 100644 index 0000000000..224dbef298 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config.go @@ -0,0 +1,147 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorGrafanaWhitelistConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorGrafanaWhitelistConfigCreate, + Read: resourceTencentCloudMonitorGrafanaWhitelistConfigRead, + Update: resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate, + Delete: resourceTencentCloudMonitorGrafanaWhitelistConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + + "whitelist": { + Optional: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "The addresses in the whitelist.", + }, + }, + } +} + +func resourceTencentCloudMonitorGrafanaWhitelistConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorGrafanaWhitelistConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + grafanaWhitelistConfig, err := service.DescribeMonitorGrafanaWhitelistConfigById(ctx, instanceId) + if err != nil { + return err + } + + if grafanaWhitelistConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorGrafanaWhitelistConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if grafanaWhitelistConfig.WhiteList != nil { + whiteList := grafanaWhitelistConfig.WhiteList + if len(whiteList) == 1 && *whiteList[0] == "" { + return nil + } + if len(whiteList) == 1 && strings.Contains(*whiteList[0], "\n") { + _ = d.Set("whitelist", strings.Split(*whiteList[0], "\n")) + } + if len(whiteList) > 1 { + _ = d.Set("whitelist", whiteList) + } + } + + return nil +} + +func resourceTencentCloudMonitorGrafanaWhitelistConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateGrafanaWhiteListRequest() + + instanceId := d.Id() + + request.InstanceId = &instanceId + + if v, ok := d.GetOk("whitelist"); ok { + whitelistSet := v.(*schema.Set).List() + for i := range whitelistSet { + whitelist := whitelistSet[i].(string) + request.Whitelist = append(request.Whitelist, &whitelist) + } + } + + if len(request.Whitelist) < 1 { + request.Whitelist = append(request.Whitelist, helper.String("")) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateGrafanaWhiteList(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor grafanaWhitelistConfig failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudMonitorGrafanaWhitelistConfigRead(d, meta) +} + +func resourceTencentCloudMonitorGrafanaWhitelistConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_grafana_whitelist_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_grafana_whitelist_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config_test.go similarity index 91% rename from tencentcloud/resource_tc_monitor_grafana_whitelist_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config_test.go index e7f283d353..5f7e018137 100644 --- a/tencentcloud/resource_tc_monitor_grafana_whitelist_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_grafana_whitelist_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmg_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 TestAccTencentCloudMonitorGrafanaWhitelistConfigResource_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: testAccMonitorGrafanaWhitelistConfig, @@ -47,7 +49,7 @@ func TestAccTencentCloudMonitorGrafanaWhitelistConfigResource_basic(t *testing.T const testAccMonitorGrafanaWhitelistConfigVar = ` variable "instance_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config.go b/tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config.go new file mode 100644 index 0000000000..3db08b5ea4 --- /dev/null +++ b/tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config.go @@ -0,0 +1,124 @@ +package tcmg + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpGrafanaConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorTmpGrafanaConfigCreate, + Read: resourceTencentCloudMonitorTmpGrafanaConfigRead, + Update: resourceTencentCloudMonitorTmpGrafanaConfigUpdate, + Delete: resourceTencentCloudMonitorTmpGrafanaConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Instance id.", + }, + + "config": { + Required: true, + Type: schema.TypeString, + Description: "JSON encoded string.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpGrafanaConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_grafana_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var instanceId string + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d, meta) +} + +func resourceTencentCloudMonitorTmpGrafanaConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_grafana_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + tmpGrafanaConfig, err := service.DescribeMonitorTmpGrafanaConfigById(ctx, instanceId) + if err != nil { + return err + } + + if tmpGrafanaConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorTmpGrafanaConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("instance_id", instanceId) + + if tmpGrafanaConfig.Config != nil { + _ = d.Set("config", tmpGrafanaConfig.Config) + } + + return nil +} + +func resourceTencentCloudMonitorTmpGrafanaConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_grafana_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateGrafanaConfigRequest() + + instanceId := d.Id() + request.InstanceId = &instanceId + + if v, ok := d.GetOk("config"); ok { + request.Config = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateGrafanaConfig(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update monitor tmpGrafanaConfig failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudMonitorTmpGrafanaConfigRead(d, meta) +} + +func resourceTencentCloudMonitorTmpGrafanaConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_grafana_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_grafana_config_test.go b/tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config_test.go similarity index 75% rename from tencentcloud/resource_tc_monitor_tmp_grafana_config_test.go rename to tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config_test.go index 062bb53d74..02089090b6 100644 --- a/tencentcloud/resource_tc_monitor_tmp_grafana_config_test.go +++ b/tencentcloud/services/tcmg/resource_tc_monitor_tmp_grafana_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tcmg_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudMonitorTmpGrafanaConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMonitorTmpGrafanaConfig, @@ -36,8 +40,8 @@ func TestAccTencentCloudMonitorTmpGrafanaConfigResource_basic(t *testing.T) { func testAccCheckMonitorTmpGrafanaConfigExists(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 { @@ -48,7 +52,7 @@ func testAccCheckMonitorTmpGrafanaConfigExists(r string) resource.TestCheckFunc } instanceId := rs.Primary.ID - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := service.DescribeMonitorTmpGrafanaConfigById(ctx, instanceId) if err != nil { return err diff --git a/tencentcloud/data_source_tc_tcmq_queue.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_queue.go similarity index 96% rename from tencentcloud/data_source_tc_tcmq_queue.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_queue.go index ab25a777d9..86029fbf61 100644 --- a/tencentcloud/data_source_tc_tcmq_queue.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_queue.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcmq 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" tcmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcmqQueue() *schema.Resource { +func DataSourceTencentCloudTcmqQueue() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcmqQueueRead, Schema: map[string]*schema.Schema{ @@ -312,12 +315,12 @@ func dataSourceTencentCloudTcmqQueue() *schema.Resource { } func dataSourceTencentCloudTcmqQueueRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcmq_queue.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcmq_queue.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("offset"); v != nil { @@ -362,15 +365,15 @@ func dataSourceTencentCloudTcmqQueueRead(d *schema.ResourceData, meta interface{ } - service := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var queueList []*tcmq.CmqQueue queueNames := make([]string, 0) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcmqQueueByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } queueList = result return nil @@ -505,7 +508,7 @@ func dataSourceTencentCloudTcmqQueueRead(d *schema.ResourceData, meta interface{ 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_tcmq_queue_test.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_queue_test.go similarity index 79% rename from tencentcloud/data_source_tc_tcmq_queue_test.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_queue_test.go index 839a907a45..ef74f76111 100644 --- a/tencentcloud/data_source_tc_tcmq_queue_test.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_queue_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmq_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 testDataSourceTcmqQueue = "data.tencentcloud_tcmq_queue.queue" func TestAccTencentCloudTcmqQueueDataSource_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: testAccCheckTcmqQueueDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_tcmq_subscribe.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe.go similarity index 92% rename from tencentcloud/data_source_tc_tcmq_subscribe.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe.go index fac8306636..80c5e8dc04 100644 --- a/tencentcloud/data_source_tc_tcmq_subscribe.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcmq 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" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcmqSubscribe() *schema.Resource { +func DataSourceTencentCloudTcmqSubscribe() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcmqSubscribeRead, Schema: map[string]*schema.Schema{ @@ -125,12 +128,12 @@ func dataSourceTencentCloudTcmqSubscribe() *schema.Resource { } func dataSourceTencentCloudTcmqSubscribeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcmq_subscribe.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcmq_subscribe.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("topic_name"); ok { @@ -149,14 +152,14 @@ func dataSourceTencentCloudTcmqSubscribeRead(d *schema.ResourceData, meta interf paramMap["subscription_name"] = v.(string) } - service := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var subscriptionList []*tdmq.CmqSubscription subscriptionNames := make([]string, 0) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcmqSubscribeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } subscriptionList = result return nil @@ -219,7 +222,7 @@ func dataSourceTencentCloudTcmqSubscribeRead(d *schema.ResourceData, meta interf _ = d.Set("subscription_list", result) 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_tcmq_subscribe_test.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe_test.go similarity index 84% rename from tencentcloud/data_source_tc_tcmq_subscribe_test.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe_test.go index 21161d5316..5c37c58674 100644 --- a/tencentcloud/data_source_tc_tcmq_subscribe_test.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_subscribe_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmq_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 testDataSourceTcmqSubscribe = "data.tencentcloud_tcmq_subscribe.subscribe" func TestAccTencentCloudTcmqSubscribeDataSource_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: testAccTencentCloudTcmqSubscribeDataSource_basic, diff --git a/tencentcloud/data_source_tc_tcmq_topic.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_topic.go similarity index 93% rename from tencentcloud/data_source_tc_tcmq_topic.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_topic.go index 81cd6cb4f1..7e3eb84cf7 100644 --- a/tencentcloud/data_source_tc_tcmq_topic.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_topic.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcmq 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" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcmqTopic() *schema.Resource { +func DataSourceTencentCloudTcmqTopic() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcmqTopicRead, Schema: map[string]*schema.Schema{ @@ -185,12 +188,12 @@ func dataSourceTencentCloudTcmqTopic() *schema.Resource { } func dataSourceTencentCloudTcmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcmq_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcmq_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, _ := d.GetOk("offset"); v != nil { @@ -236,15 +239,15 @@ func dataSourceTencentCloudTcmqTopicRead(d *schema.ResourceData, meta interface{ } - service := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var topicList []*tdmq.CmqTopic topicNames := make([]string, 0) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcmqTopicByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } topicList = result return nil @@ -321,7 +324,7 @@ func dataSourceTencentCloudTcmqTopicRead(d *schema.ResourceData, meta interface{ 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_tcmq_topic_test.go b/tencentcloud/services/tcmq/data_source_tc_tcmq_topic_test.go similarity index 79% rename from tencentcloud/data_source_tc_tcmq_topic_test.go rename to tencentcloud/services/tcmq/data_source_tc_tcmq_topic_test.go index 3988d30ff2..b1e0ebc3fc 100644 --- a/tencentcloud/data_source_tc_tcmq_topic_test.go +++ b/tencentcloud/services/tcmq/data_source_tc_tcmq_topic_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcmq_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 testDataSourceTcmqTopic = "data.tencentcloud_tcmq_topic.topic" func TestAccTencentCloudTcmqTopicDataSource_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: testAccCheckTcmqTopicDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_tcmq_queue.go b/tencentcloud/services/tcmq/resource_tc_tcmq_queue.go similarity index 88% rename from tencentcloud/resource_tc_tcmq_queue.go rename to tencentcloud/services/tcmq/resource_tc_tcmq_queue.go index 844ee4b4b2..13b0673a2a 100644 --- a/tencentcloud/resource_tc_tcmq_queue.go +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_queue.go @@ -1,18 +1,21 @@ -package tencentcloud +package tcmq 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/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tcmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmqQueue() *schema.Resource { +func ResourceTencentCloudTcmqQueue() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcmqQueueCreate, Read: resourceTencentCloudTcmqQueueRead, @@ -128,10 +131,10 @@ func resourceTencentCloudTcmqQueue() *schema.Resource { } func resourceTencentCloudTcmqQueueCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_queue.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_queue.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcmq.NewCreateCmqQueueRequest() @@ -202,10 +205,10 @@ func resourceTencentCloudTcmqQueueCreate(d *schema.ResourceData, meta interface{ request.RetentionSizeInMB = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateCmqQueue(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateCmqQueue(request) if e != nil { - return retryError(e) + return tccommon.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,14 +225,14 @@ func resourceTencentCloudTcmqQueueCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTcmqQueueRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_queue.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_queue.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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} queueName := d.Id() @@ -320,10 +323,10 @@ func resourceTencentCloudTcmqQueueRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTcmqQueueUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_queue.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_queue.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcmq.NewModifyCmqQueueAttributeRequest() @@ -426,10 +429,10 @@ func resourceTencentCloudTcmqQueueUpdate(d *schema.ResourceData, meta interface{ } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyCmqQueueAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyCmqQueueAttribute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -444,13 +447,13 @@ func resourceTencentCloudTcmqQueueUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTcmqQueueDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_queue.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_queue.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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} queueName := d.Id() if err := service.DeleteTcmqQueueById(ctx, queueName); err != nil { diff --git a/tencentcloud/services/tcmq/resource_tc_tcmq_queue_test.go b/tencentcloud/services/tcmq/resource_tc_tcmq_queue_test.go new file mode 100644 index 0000000000..2eaa00250f --- /dev/null +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_queue_test.go @@ -0,0 +1,100 @@ +package tcmq_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcmq" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +func TestAccTencentCloudTcmqQueueResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckTcmqQueueDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTcmqQueue, + Check: resource.ComposeTestCheckFunc( + testAccCheckTcmqQueueExists("tencentcloud_tcmq_queue.queue"), + resource.TestCheckResourceAttrSet("tencentcloud_tcmq_queue.queue", "id"), + resource.TestCheckResourceAttr("tencentcloud_tcmq_queue.queue", "queue_name", "test_queue"), + ), + }, + { + ResourceName: "tencentcloud_tcmq_queue.queue", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"max_receive_count", "max_time_to_live"}, + }, + }, + }) +} + +func testAccCheckTcmqQueueDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctcmq.NewTcmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcmq_queue" { + continue + } + + queue, err := service.DescribeTcmqQueueById(ctx, rs.Primary.ID) + if queue != nil { + return fmt.Errorf("TcmqQueue instance still exists") + } + if err != nil { + if e, ok := err.(*errors.TencentCloudSDKError); ok { + if e.GetCode() == "ResourceNotFound" { + return nil + } + } + return err + } + } + return nil +} + +func testAccCheckTcmqQueueExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TcmqQueue %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TcmqQueue id is not set") + } + + service := svctcmq.NewTcmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + queue, err := service.DescribeTcmqQueueById(ctx, rs.Primary.ID) + if queue == nil { + return fmt.Errorf("TcmqQueue %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTcmqQueue = ` +resource "tencentcloud_tcmq_queue" "queue" { + queue_name="test_queue" +} +` diff --git a/tencentcloud/resource_tc_tcmq_subscribe.go b/tencentcloud/services/tcmq/resource_tc_tcmq_subscribe.go similarity index 84% rename from tencentcloud/resource_tc_tcmq_subscribe.go rename to tencentcloud/services/tcmq/resource_tc_tcmq_subscribe.go index d03bf74706..2a2f2b59e2 100644 --- a/tencentcloud/resource_tc_tcmq_subscribe.go +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_subscribe.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcmq 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" tcmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmqSubscribe() *schema.Resource { +func ResourceTencentCloudTcmqSubscribe() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcmqSubscribeCreate, Read: resourceTencentCloudTcmqSubscribeRead, @@ -88,10 +91,10 @@ func resourceTencentCloudTcmqSubscribe() *schema.Resource { } func resourceTencentCloudTcmqSubscribeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_subscribe.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_subscribe.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcmq.NewCreateCmqSubscribeRequest() @@ -140,10 +143,10 @@ func resourceTencentCloudTcmqSubscribeCreate(d *schema.ResourceData, meta interf request.NotifyContentFormat = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateCmqSubscribe(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateCmqSubscribe(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -154,22 +157,22 @@ func resourceTencentCloudTcmqSubscribeCreate(d *schema.ResourceData, meta interf return err } - d.SetId(topicName + FILED_SP + subscriptionName) + d.SetId(topicName + tccommon.FILED_SP + subscriptionName) return resourceTencentCloudTcmqSubscribeRead(d, meta) } func resourceTencentCloudTcmqSubscribeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_subscribe.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_subscribe.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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{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()) } @@ -220,14 +223,14 @@ func resourceTencentCloudTcmqSubscribeRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudTcmqSubscribeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_subscribe.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_subscribe.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcmq.NewModifyCmqSubscriptionAttributeRequest() - 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()) } @@ -270,10 +273,10 @@ func resourceTencentCloudTcmqSubscribeUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyCmqSubscriptionAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyCmqSubscriptionAttribute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -288,14 +291,14 @@ func resourceTencentCloudTcmqSubscribeUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudTcmqSubscribeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_subscribe.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_subscribe.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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TcmqService{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/services/tcmq/resource_tc_tcmq_subscribe_test.go b/tencentcloud/services/tcmq/resource_tc_tcmq_subscribe_test.go new file mode 100644 index 0000000000..27941c81b8 --- /dev/null +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_subscribe_test.go @@ -0,0 +1,113 @@ +package tcmq_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcmq" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudTcmqSubscribeResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckTcmqSubscribeDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTcmqSubscribe, + Check: resource.ComposeTestCheckFunc( + testAccCheckTcmqSubscribeExists("tencentcloud_tcmq_subscribe.subscribe"), + resource.TestCheckResourceAttrSet("tencentcloud_tcmq_subscribe.subscribe", "id"), + resource.TestCheckResourceAttr("tencentcloud_tcmq_subscribe.subscribe", "topic_name", "test_subscribe_topic"), + resource.TestCheckResourceAttr("tencentcloud_tcmq_subscribe.subscribe", "subscription_name", "test_subscribe"), + ), + }, + { + ResourceName: "tencentcloud_tcmq_subscribe.subscribe", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTcmqSubscribeDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctcmq.NewTcmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcmq_subscribe" { + continue + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + topicName := idSplit[0] + subscriptionName := idSplit[1] + subscribe, err := service.DescribeTcmqSubscribeById(ctx, topicName, subscriptionName) + if subscribe != nil { + return fmt.Errorf("TcmqSubscribe instance still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTcmqSubscribeExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TcmqSubscribe %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TcmqSubscribe id is not set") + } + + service := svctcmq.NewTcmqService(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) + } + topicName := idSplit[0] + subscriptionName := idSplit[1] + subscribe, err := service.DescribeTcmqSubscribeById(ctx, topicName, subscriptionName) + if subscribe == nil { + return fmt.Errorf("TcmqSubscribe %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTcmqSubscribe = ` +resource "tencentcloud_tcmq_topic" "topic" { + topic_name = "test_subscribe_topic" +} + +resource "tencentcloud_tcmq_subscribe" "subscribe" { + topic_name = tencentcloud_tcmq_topic.topic.topic_name + subscription_name = "test_subscribe" + protocol = "http" + endpoint = "http://mikatong.com" +} +` diff --git a/tencentcloud/resource_tc_tcmq_topic.go b/tencentcloud/services/tcmq/resource_tc_tcmq_topic.go similarity index 77% rename from tencentcloud/resource_tc_tcmq_topic.go rename to tencentcloud/services/tcmq/resource_tc_tcmq_topic.go index 278d637151..2a4aace482 100644 --- a/tencentcloud/resource_tc_tcmq_topic.go +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_topic.go @@ -1,18 +1,21 @@ -package tencentcloud +package tcmq 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/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tcmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcmqTopic() *schema.Resource { +func ResourceTencentCloudTcmqTopic() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcmqTopicCreate, Read: resourceTencentCloudTcmqTopicRead, @@ -60,10 +63,10 @@ func resourceTencentCloudTcmqTopic() *schema.Resource { } func resourceTencentCloudTcmqTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_topic.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_topic.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcmq.NewCreateCmqTopicRequest() @@ -90,10 +93,10 @@ func resourceTencentCloudTcmqTopicCreate(d *schema.ResourceData, meta interface{ request.Trace = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateCmqTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateCmqTopic(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudTcmqTopicCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTcmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicName := d.Id() @@ -159,10 +162,10 @@ func resourceTencentCloudTcmqTopicRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTcmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_topic.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_topic.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcmq.NewModifyCmqTopicAttributeRequest() @@ -193,10 +196,10 @@ func resourceTencentCloudTcmqTopicUpdate(d *schema.ResourceData, meta interface{ } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyCmqTopicAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyCmqTopicAttribute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -211,13 +214,13 @@ func resourceTencentCloudTcmqTopicUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTcmqTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcmq_topic.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcmq_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 := TcmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TcmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicName := d.Id() if err := service.DeleteTcmqTopicById(ctx, topicName); err != nil { diff --git a/tencentcloud/services/tcmq/resource_tc_tcmq_topic_test.go b/tencentcloud/services/tcmq/resource_tc_tcmq_topic_test.go new file mode 100644 index 0000000000..3b5239bb2d --- /dev/null +++ b/tencentcloud/services/tcmq/resource_tc_tcmq_topic_test.go @@ -0,0 +1,99 @@ +package tcmq_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcmq" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +func TestAccTencentCloudTcmqTopicResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + CheckDestroy: testAccCheckTcmqTopicDestroy, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTcmqTopic, + Check: resource.ComposeTestCheckFunc( + testAccCheckTcmqTopicExists("tencentcloud_tcmq_topic.topic"), + resource.TestCheckResourceAttrSet("tencentcloud_tcmq_topic.topic", "id"), + resource.TestCheckResourceAttr("tencentcloud_tcmq_topic.topic", "topic_name", "test_topic"), + ), + }, + { + ResourceName: "tencentcloud_tcmq_topic.topic", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"trace"}, + }, + }, + }) +} + +func testAccCheckTcmqTopicDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctcmq.NewTcmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcmq_topic" { + continue + } + topic, err := service.DescribeTcmqTopicById(ctx, rs.Primary.ID) + if topic != nil { + return fmt.Errorf("TcmqTopic instance still exists") + } + if err != nil { + if e, ok := err.(*errors.TencentCloudSDKError); ok { + if e.GetCode() == "ResourceNotFound" { + return nil + } + } + return err + } + } + return nil +} + +func testAccCheckTcmqTopicExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TcmqTopic %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TcmqTopic id is not set") + } + + service := svctcmq.NewTcmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + topic, err := service.DescribeTcmqTopicById(ctx, rs.Primary.ID) + if topic == nil { + return fmt.Errorf("TcmqTopic %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTcmqTopic = ` +resource "tencentcloud_tcmq_topic" "topic" { + topic_name = "test_topic" +} +` diff --git a/tencentcloud/service_tencentcloud_tcmq.go b/tencentcloud/services/tcmq/service_tencentcloud_tcmq.go similarity index 95% rename from tencentcloud/service_tencentcloud_tcmq.go rename to tencentcloud/services/tcmq/service_tencentcloud_tcmq.go index 83916d9588..eca04354b7 100644 --- a/tencentcloud/service_tencentcloud_tcmq.go +++ b/tencentcloud/services/tcmq/service_tencentcloud_tcmq.go @@ -1,10 +1,13 @@ -package tencentcloud +package tcmq import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tcmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "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" @@ -12,12 +15,16 @@ import ( // basic information +func NewTcmqService(client *connectivity.TencentCloudClient) TcmqService { + return TcmqService{client: client} +} + type TcmqService struct { client *connectivity.TencentCloudClient } func (me *TcmqService) DescribeTcmqTopicById(ctx context.Context, topicName string) (topic *tcmq.CmqTopic, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqTopicDetailRequest() request.TopicName = &topicName @@ -46,7 +53,7 @@ func (me *TcmqService) DescribeTcmqTopicById(ctx context.Context, topicName stri } func (me *TcmqService) DeleteTcmqTopicById(ctx context.Context, topicName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDeleteCmqTopicRequest() request.TopicName = &topicName @@ -70,7 +77,7 @@ func (me *TcmqService) DeleteTcmqTopicById(ctx context.Context, topicName string } func (me *TcmqService) DescribeTcmqQueueById(ctx context.Context, queueName string) (queue *tcmq.CmqQueue, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqQueueDetailRequest() request.QueueName = &queueName @@ -95,7 +102,7 @@ func (me *TcmqService) DescribeTcmqQueueById(ctx context.Context, queueName stri } func (me *TcmqService) DescribeTcmqQueueByFilter(ctx context.Context, paramMap map[string]interface{}) (queueList []*tcmq.CmqQueue, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqQueuesRequest() @@ -156,7 +163,7 @@ func (me *TcmqService) DescribeTcmqQueueByFilter(ctx context.Context, paramMap m } func (me *TcmqService) DeleteTcmqQueueById(ctx context.Context, queueName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDeleteCmqQueueRequest() request.QueueName = &queueName @@ -180,7 +187,7 @@ func (me *TcmqService) DeleteTcmqQueueById(ctx context.Context, queueName string } func (me *TcmqService) DescribeTcmqTopicByFilter(ctx context.Context, paramMap map[string]interface{}) (topicList []*tcmq.CmqTopic, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqTopicsRequest() @@ -241,7 +248,7 @@ func (me *TcmqService) DescribeTcmqTopicByFilter(ctx context.Context, paramMap m } func (me *TcmqService) DescribeTcmqSubscribeById(ctx context.Context, topicName string, subscriptionName string) (subscribe *tcmq.CmqSubscription, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqSubscriptionDetailRequest() request.TopicName = &topicName @@ -271,7 +278,7 @@ func (me *TcmqService) DescribeTcmqSubscribeById(ctx context.Context, topicName } func (me *TcmqService) DescribeTcmqSubscribeByFilter(ctx context.Context, paramMap map[string]interface{}) (subscriptionList []*tcmq.CmqSubscription, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDescribeCmqSubscriptionDetailRequest() @@ -308,7 +315,7 @@ func (me *TcmqService) DescribeTcmqSubscribeByFilter(ctx context.Context, paramM } func (me *TcmqService) DeleteTcmqSubscribeById(ctx context.Context, topicName string, subscriptionName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcmq.NewDeleteCmqSubscribeRequest() request.TopicName = &topicName diff --git a/tencentcloud/data_source_tc_organization_members.go b/tencentcloud/services/tco/data_source_tc_organization_members.go similarity index 93% rename from tencentcloud/data_source_tc_organization_members.go rename to tencentcloud/services/tco/data_source_tc_organization_members.go index 60eaf37582..ddbd2ef261 100644 --- a/tencentcloud/data_source_tc_organization_members.go +++ b/tencentcloud/services/tco/data_source_tc_organization_members.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" @@ -10,7 +12,7 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudOrganizationMembers() *schema.Resource { +func DataSourceTencentCloudOrganizationMembers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudOrganizationMembersRead, Schema: map[string]*schema.Schema{ @@ -171,12 +173,12 @@ func dataSourceTencentCloudOrganizationMembers() *schema.Resource { } func dataSourceTencentCloudOrganizationMembersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_organization_members.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_organization_members.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("lang"); ok { @@ -195,14 +197,14 @@ func dataSourceTencentCloudOrganizationMembersRead(d *schema.ResourceData, meta paramMap["Product"] = helper.String(v.(string)) } - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*organization.OrgMember - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeOrganizationMembersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -326,7 +328,7 @@ func dataSourceTencentCloudOrganizationMembersRead(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/services/tco/data_source_tc_organization_members_test.go b/tencentcloud/services/tco/data_source_tc_organization_members_test.go new file mode 100644 index 0000000000..b18913db60 --- /dev/null +++ b/tencentcloud/services/tco/data_source_tc_organization_members_test.go @@ -0,0 +1,31 @@ +package tco_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudOrganizationMembersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccOrganizationMembersDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_members.members")), + }, + }, + }) +} + +const testAccOrganizationMembersDataSource = ` + +data "tencentcloud_organization_members" "members" {} + +` diff --git a/tencentcloud/data_source_tc_organization_org_auth_node.go b/tencentcloud/services/tco/data_source_tc_organization_org_auth_node.go similarity index 82% rename from tencentcloud/data_source_tc_organization_org_auth_node.go rename to tencentcloud/services/tco/data_source_tc_organization_org_auth_node.go index 5b900ae110..88a3216c4a 100644 --- a/tencentcloud/data_source_tc_organization_org_auth_node.go +++ b/tencentcloud/services/tco/data_source_tc_organization_org_auth_node.go @@ -1,15 +1,18 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudOrganizationOrgAuthNode() *schema.Resource { +func DataSourceTencentCloudOrganizationOrgAuthNode() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudOrganizationOrgAuthNodeRead, Schema: map[string]*schema.Schema{ @@ -68,26 +71,26 @@ func dataSourceTencentCloudOrganizationOrgAuthNode() *schema.Resource { } func dataSourceTencentCloudOrganizationOrgAuthNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_organization_org_auth_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_organization_org_auth_node.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("auth_name"); ok { paramMap["AuthName"] = helper.String(v.(string)) } - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*organization.AuthNode - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeOrganizationOrgAuthNodeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -135,7 +138,7 @@ func dataSourceTencentCloudOrganizationOrgAuthNodeRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash(ids)) output3, ok := d.GetOk("result_output_file") if ok && output3.(string) != "" { - if e := writeToFile(output3.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output3.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/services/tco/data_source_tc_organization_org_auth_node_test.go b/tencentcloud/services/tco/data_source_tc_organization_org_auth_node_test.go new file mode 100644 index 0000000000..25a4b57bcf --- /dev/null +++ b/tencentcloud/services/tco/data_source_tc_organization_org_auth_node_test.go @@ -0,0 +1,32 @@ +package tco_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudOrganizationOrgAuthNodeDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccOrganizationOrgAuthNodeDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_auth_node.org_auth_node")), + }, + }, + }) +} + +const testAccOrganizationOrgAuthNodeDataSource = ` + +data "tencentcloud_organization_org_auth_node" "org_auth_node" { + } + +` diff --git a/tencentcloud/data_source_tc_organization_org_financial_by_member.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_member.go similarity index 86% rename from tencentcloud/data_source_tc_organization_org_financial_by_member.go rename to tencentcloud/services/tco/data_source_tc_organization_org_financial_by_member.go index 23d6e959f2..82260bffef 100644 --- a/tencentcloud/data_source_tc_organization_org_financial_by_member.go +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_member.go @@ -1,15 +1,18 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudOrganizationOrgFinancialByMember() *schema.Resource { +func DataSourceTencentCloudOrganizationOrgFinancialByMember() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudOrganizationOrgFinancialByMemberRead, Schema: map[string]*schema.Schema{ @@ -89,12 +92,12 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMember() *schema.Resource { } func dataSourceTencentCloudOrganizationOrgFinancialByMemberRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_organization_org_financial_by_member.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_organization_org_financial_by_member.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("month"); ok { @@ -115,13 +118,13 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMemberRead(d *schema.Resour paramMap["ProductCodes"] = helper.InterfacesStringsPoint(productCodesSet) } - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var response *organization.DescribeOrganizationFinancialByMemberResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeOrganizationOrgFinancialByMemberByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -166,7 +169,7 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMemberRead(d *schema.Resour 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/tco/data_source_tc_organization_org_financial_by_member_test.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_member_test.go new file mode 100644 index 0000000000..9f9bd7b94f --- /dev/null +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_member_test.go @@ -0,0 +1,35 @@ +package tco_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudOrganizationOrgFinancialByMemberDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccOrganizationOrgFinancialByMemberDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_member.org_financial_by_member")), + }, + }, + }) +} + +const testAccOrganizationOrgFinancialByMemberDataSource = ` + +data "tencentcloud_organization_org_financial_by_member" "org_financial_by_member" { + month = "2023-05" + end_month = "2023-10" + member_uins = [100015591986,100029796005] + } + +` diff --git a/tencentcloud/data_source_tc_organization_org_financial_by_month.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_month.go similarity index 84% rename from tencentcloud/data_source_tc_organization_org_financial_by_month.go rename to tencentcloud/services/tco/data_source_tc_organization_org_financial_by_month.go index d6ded22ffb..58217f48af 100644 --- a/tencentcloud/data_source_tc_organization_org_financial_by_month.go +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_month.go @@ -1,15 +1,18 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudOrganizationOrgFinancialByMonth() *schema.Resource { +func DataSourceTencentCloudOrganizationOrgFinancialByMonth() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudOrganizationOrgFinancialByMonthRead, Schema: map[string]*schema.Schema{ @@ -77,12 +80,12 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMonth() *schema.Resource { } func dataSourceTencentCloudOrganizationOrgFinancialByMonthRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_organization_org_financial_by_month.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_organization_org_financial_by_month.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("end_month"); ok { @@ -99,14 +102,14 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMonthRead(d *schema.Resourc paramMap["ProductCodes"] = helper.InterfacesStringsPoint(productCodesSet) } - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*organization.OrgFinancialByMonth - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeOrganizationOrgFinancialByMonthByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -148,7 +151,7 @@ func dataSourceTencentCloudOrganizationOrgFinancialByMonthRead(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/services/tco/data_source_tc_organization_org_financial_by_month_test.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_month_test.go new file mode 100644 index 0000000000..0c5e56ff14 --- /dev/null +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_month_test.go @@ -0,0 +1,38 @@ +package tco_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudOrganizationOrgFinancialByMonthDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccOrganizationOrgFinancialByMonthDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month"), + resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "end_month", "2023-05"), + resource.TestCheckResourceAttrSet("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "member_uins.#"), + resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_month.org_financial_by_month", "member_uins.0", "100026517717"), + ), + }, + }, + }) +} + +const testAccOrganizationOrgFinancialByMonthDataSource = ` + +data "tencentcloud_organization_org_financial_by_month" "org_financial_by_month" { + end_month = "2023-05" + member_uins = [100026517717] + } + +` diff --git a/tencentcloud/data_source_tc_organization_org_financial_by_product.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product.go similarity index 86% rename from tencentcloud/data_source_tc_organization_org_financial_by_product.go rename to tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product.go index f2ea7146e1..aaf6731811 100644 --- a/tencentcloud/data_source_tc_organization_org_financial_by_product.go +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product.go @@ -1,15 +1,18 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudOrganizationOrgFinancialByProduct() *schema.Resource { +func DataSourceTencentCloudOrganizationOrgFinancialByProduct() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudOrganizationOrgFinancialByProductRead, Schema: map[string]*schema.Schema{ @@ -89,12 +92,12 @@ func dataSourceTencentCloudOrganizationOrgFinancialByProduct() *schema.Resource } func dataSourceTencentCloudOrganizationOrgFinancialByProductRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_organization_org_financial_by_product.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_organization_org_financial_by_product.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("month"); ok { @@ -117,12 +120,12 @@ func dataSourceTencentCloudOrganizationOrgFinancialByProductRead(d *schema.Resou var response *organization.DescribeOrganizationFinancialByProductResponseParams - service := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeOrganizationOrgFinancialByProductByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -167,7 +170,7 @@ func dataSourceTencentCloudOrganizationOrgFinancialByProductRead(d *schema.Resou 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_organization_org_financial_by_product_test.go b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product_test.go similarity index 77% rename from tencentcloud/data_source_tc_organization_org_financial_by_product_test.go rename to tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product_test.go index 1ad179994f..bdc4bfb69d 100644 --- a/tencentcloud/data_source_tc_organization_org_financial_by_product_test.go +++ b/tencentcloud/services/tco/data_source_tc_organization_org_financial_by_product_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgFinancialByProductDataSource_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: testAccOrganizationOrgFinancialByProductDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_product.org_financial_by_product"), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_organization_org_financial_by_product.org_financial_by_product"), resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_product.org_financial_by_product", "month", "2023-05"), resource.TestCheckResourceAttr("data.tencentcloud_organization_org_financial_by_product.org_financial_by_product", "end_month", "2023-09"), resource.TestCheckResourceAttrSet("data.tencentcloud_organization_org_financial_by_product.org_financial_by_product", "product_codes.#"), diff --git a/tencentcloud/resource_tc_organization_instance.go b/tencentcloud/services/tco/resource_tc_organization_instance.go similarity index 86% rename from tencentcloud/resource_tc_organization_instance.go rename to tencentcloud/services/tco/resource_tc_organization_instance.go index 09a20e2c0f..f6c84db64c 100644 --- a/tencentcloud/resource_tc_organization_instance.go +++ b/tencentcloud/services/tco/resource_tc_organization_instance.go @@ -1,16 +1,19 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationOrganization() *schema.Resource { +func ResourceTencentCloudOrganizationOrganization() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudOrganizationOrganizationCreate, Read: resourceTencentCloudOrganizationOrganizationRead, @@ -133,20 +136,20 @@ func resourceTencentCloudOrganizationOrganization() *schema.Resource { } func resourceTencentCloudOrganizationOrganizationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewCreateOrganizationRequest() response = organization.NewCreateOrganizationResponse() orgId uint64 ) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().CreateOrganization(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganization(request) if e != nil { - return retryError(e) + return tccommon.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,14 +168,14 @@ func resourceTencentCloudOrganizationOrganizationCreate(d *schema.ResourceData, } func resourceTencentCloudOrganizationOrganizationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} organization, err := service.DescribeOrganizationOrganizationById(ctx) if err != nil { @@ -269,13 +272,13 @@ func resourceTencentCloudOrganizationOrganizationRead(d *schema.ResourceData, me } func resourceTencentCloudOrganizationOrganizationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.DeleteOrganizationOrganizationById(ctx); err != nil { return err diff --git a/tencentcloud/resource_tc_organization_instance_test.go b/tencentcloud/services/tco/resource_tc_organization_instance_test.go similarity index 80% rename from tencentcloud/resource_tc_organization_instance_test.go rename to tencentcloud/services/tco/resource_tc_organization_instance_test.go index 5f3cd60b99..eed3e8369b 100644 --- a/tencentcloud/resource_tc_organization_instance_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrganizationResource_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: testAccOrganizationOrganization, diff --git a/tencentcloud/resource_tc_organization_org_identity.go b/tencentcloud/services/tco/resource_tc_organization_org_identity.go similarity index 81% rename from tencentcloud/resource_tc_organization_org_identity.go rename to tencentcloud/services/tco/resource_tc_organization_org_identity.go index bebd679134..7629ca56be 100644 --- a/tencentcloud/resource_tc_organization_org_identity.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_identity.go @@ -1,17 +1,20 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationOrgIdentity() *schema.Resource { +func ResourceTencentCloudOrganizationOrgIdentity() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudOrganizationOrgIdentityCreate, Read: resourceTencentCloudOrganizationOrgIdentityRead, @@ -67,10 +70,10 @@ func resourceTencentCloudOrganizationOrgIdentity() *schema.Resource { } func resourceTencentCloudOrganizationOrgIdentityCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_identity.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_identity.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewCreateOrganizationIdentityRequest() @@ -105,10 +108,10 @@ func resourceTencentCloudOrganizationOrgIdentityCreate(d *schema.ResourceData, m request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().CreateOrganizationIdentity(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganizationIdentity(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -127,14 +130,14 @@ func resourceTencentCloudOrganizationOrgIdentityCreate(d *schema.ResourceData, m } func resourceTencentCloudOrganizationOrgIdentityRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_identity.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_identity.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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} orgIdentityId := d.Id() @@ -189,10 +192,10 @@ func resourceTencentCloudOrganizationOrgIdentityRead(d *schema.ResourceData, met } func resourceTencentCloudOrganizationOrgIdentityUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_identity.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_identity.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := organization.NewUpdateOrganizationIdentityRequest() @@ -232,10 +235,10 @@ func resourceTencentCloudOrganizationOrgIdentityUpdate(d *schema.ResourceData, m request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().UpdateOrganizationIdentity(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationIdentity(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -250,13 +253,13 @@ func resourceTencentCloudOrganizationOrgIdentityUpdate(d *schema.ResourceData, m } func resourceTencentCloudOrganizationOrgIdentityDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_identity.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_identity.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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} orgIdentityId := d.Id() if err := service.DeleteOrganizationOrgIdentityById(ctx, orgIdentityId); err != nil { diff --git a/tencentcloud/resource_tc_organization_org_identity_test.go b/tencentcloud/services/tco/resource_tc_organization_org_identity_test.go similarity index 94% rename from tencentcloud/resource_tc_organization_org_identity_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_identity_test.go index 057cd1eaba..f6cf725a0c 100644 --- a/tencentcloud/resource_tc_organization_org_identity_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_identity_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgIdentityResource_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: testAccOrganizationOrgIdentity, diff --git a/tencentcloud/resource_tc_organization_org_member.go b/tencentcloud/services/tco/resource_tc_organization_org_member.go similarity index 84% rename from tencentcloud/resource_tc_organization_org_member.go rename to tencentcloud/services/tco/resource_tc_organization_org_member.go index f0247efada..9ef29a5986 100644 --- a/tencentcloud/resource_tc_organization_org_member.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member.go @@ -1,17 +1,20 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationOrgMember() *schema.Resource { +func ResourceTencentCloudOrganizationOrgMember() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudOrganizationOrgMemberRead, Create: resourceTencentCloudOrganizationOrgMemberCreate, @@ -132,10 +135,10 @@ func resourceTencentCloudOrganizationOrgMember() *schema.Resource { } func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewCreateOrganizationMemberRequest() @@ -176,10 +179,10 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met request.PayUin = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().CreateOrganizationMember(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganizationMember(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -200,13 +203,13 @@ func resourceTencentCloudOrganizationOrgMemberCreate(d *schema.ResourceData, met } func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} orgMemberId := d.Id() @@ -299,10 +302,10 @@ func resourceTencentCloudOrganizationOrgMemberRead(d *schema.ResourceData, meta } func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := organization.NewMoveOrganizationNodeMembersRequest() updateRequest := organization.NewUpdateOrganizationMemberRequest() @@ -315,10 +318,10 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met if v, _ := d.GetOk("node_id"); v != nil { request.NodeId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().MoveOrganizationNodeMembers(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().MoveOrganizationNodeMembers(request) if e != nil { - return retryError(e) + return tccommon.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,10 +389,10 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met } } - UpdateErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().UpdateOrganizationMember(updateRequest) + UpdateErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationMember(updateRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, updateRequest.GetAction(), updateRequest.ToJsonString(), result.ToJsonString()) } @@ -403,13 +406,13 @@ func resourceTencentCloudOrganizationOrgMemberUpdate(d *schema.ResourceData, met } func resourceTencentCloudOrganizationOrgMemberDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member.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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} orgMemberId := d.Id() diff --git a/tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment.go b/tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment.go new file mode 100644 index 0000000000..40b592f87f --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment.go @@ -0,0 +1,136 @@ +package tco + +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" + organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudOrganizationOrgMemberAuthIdentityAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentCreate, + Read: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead, + Delete: resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "member_uin": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Member Uin.", + }, + + "identity_ids": { + Required: true, + ForceNew: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "Identity Id list. Up to 5.", + }, + }, + } +} + +func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_auth_identity.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = organization.NewCreateOrganizationMemberAuthIdentityRequest() + memberUin string + ) + if v, ok := d.GetOk("member_uin"); ok { + request.MemberUins = append(request.MemberUins, helper.IntUint64(v.(int))) + memberUin = helper.IntToStr(v.(int)) + } + + if v, ok := d.GetOk("identity_ids"); ok { + identityIdsSet := v.(*schema.Set).List() + for i := range identityIdsSet { + identityIds := identityIdsSet[i].(int) + request.IdentityIds = append(request.IdentityIds, helper.IntUint64(identityIds)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganizationMemberAuthIdentity(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 organization orgMemberAuthIdentity failed, reason:%+v", logId, err) + return err + } + + d.SetId(memberUin) + return resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead(d, meta) +} + +func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_auth_identity.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + memberUin := d.Id() + uin := helper.StrToInt64(memberUin) + identityIds, err := service.DescribeOrganizationOrgMemberAuthIdentityById(ctx, uin) + if err != nil { + return err + } + + if len(identityIds) < 1 { + d.SetId("") + log.Printf("[WARN]%s resource `OrganizationOrgMemberAuthIdentity` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("identity_ids", identityIds) + _ = d.Set("member_uin", uin) + return nil +} + +func resourceTencentCloudOrganizationOrgMemberAuthIdentityAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_auth_identity.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + uin := d.Id() + var identityIds []string + if v, ok := d.GetOk("identity_ids"); ok { + identityIdsSet := v.(*schema.Set).List() + for i := range identityIdsSet { + identityId := identityIdsSet[i].(int) + identityIds = append(identityIds, helper.IntToStr(identityId)) + } + } + + if err := service.DeleteOrganizationOrgMemberAuthIdentityById(ctx, uin, identityIds); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_organization_org_member_auth_identity_attachment_test.go b/tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment_test.go similarity index 88% rename from tencentcloud/resource_tc_organization_org_member_auth_identity_attachment_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment_test.go index c6d48dcbb7..829ce72f11 100644 --- a/tencentcloud/resource_tc_organization_org_member_auth_identity_attachment_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_auth_identity_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgMemberAuthIdentityResource_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: testAccOrganizationOrgMemberAuthIdentity, diff --git a/tencentcloud/resource_tc_organization_org_member_email.go b/tencentcloud/services/tco/resource_tc_organization_org_member_email.go similarity index 80% rename from tencentcloud/resource_tc_organization_org_member_email.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_email.go index 13b4786b78..087e19c539 100644 --- a/tencentcloud/resource_tc_organization_org_member_email.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_email.go @@ -1,4 +1,4 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationOrgMemberEmail() *schema.Resource { +func ResourceTencentCloudOrganizationOrgMemberEmail() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudOrganizationOrgMemberEmailCreate, Read: resourceTencentCloudOrganizationOrgMemberEmailRead, @@ -86,10 +89,10 @@ func resourceTencentCloudOrganizationOrgMemberEmail() *schema.Resource { } func resourceTencentCloudOrganizationOrgMemberEmailCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_email.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_email.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewAddOrganizationMemberEmailRequest() @@ -114,10 +117,10 @@ func resourceTencentCloudOrganizationOrgMemberEmailCreate(d *schema.ResourceData request.Phone = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().AddOrganizationMemberEmail(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddOrganizationMemberEmail(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudOrganizationOrgMemberEmailCreate(d *schema.ResourceData } bindId = *response.Response.BindId - d.SetId(helper.Int64ToStr(memberUin) + FILED_SP + helper.UInt64ToStr(bindId)) + d.SetId(helper.Int64ToStr(memberUin) + tccommon.FILED_SP + helper.UInt64ToStr(bindId)) return resourceTencentCloudOrganizationOrgMemberEmailRead(d, meta) } func resourceTencentCloudOrganizationOrgMemberEmailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_email.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_email.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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{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()) } @@ -205,14 +208,14 @@ func resourceTencentCloudOrganizationOrgMemberEmailRead(d *schema.ResourceData, } func resourceTencentCloudOrganizationOrgMemberEmailUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_email.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_email.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := organization.NewUpdateOrganizationMemberEmailBindRequest() - 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()) } @@ -253,10 +256,10 @@ func resourceTencentCloudOrganizationOrgMemberEmailUpdate(d *schema.ResourceData } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().UpdateOrganizationMemberEmailBind(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationMemberEmailBind(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -271,8 +274,8 @@ func resourceTencentCloudOrganizationOrgMemberEmailUpdate(d *schema.ResourceData } func resourceTencentCloudOrganizationOrgMemberEmailDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_email.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_email.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_organization_org_member_email_test.go b/tencentcloud/services/tco/resource_tc_organization_org_member_email_test.go similarity index 92% rename from tencentcloud/resource_tc_organization_org_member_email_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_email_test.go index e808042646..93acc6576d 100644 --- a/tencentcloud/resource_tc_organization_org_member_email_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_email_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgMemberEmailResource_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: testAccOrganizationOrgMemberEmail, diff --git a/tencentcloud/resource_tc_organization_org_member_policy_attachment.go b/tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment.go similarity index 75% rename from tencentcloud/resource_tc_organization_org_member_policy_attachment.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment.go index ef0801bb6d..2f1a19c532 100644 --- a/tencentcloud/resource_tc_organization_org_member_policy_attachment.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment.go @@ -1,17 +1,20 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationOrgMemberPolicyAttachment() *schema.Resource { +func ResourceTencentCloudOrganizationOrgMemberPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudOrganizationOrgMemberPolicyAttachmentCreate, Read: resourceTencentCloudOrganizationOrgMemberPolicyAttachmentRead, @@ -55,10 +58,10 @@ func resourceTencentCloudOrganizationOrgMemberPolicyAttachment() *schema.Resourc } func resourceTencentCloudOrganizationOrgMemberPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_policy_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_policy_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewCreateOrganizationMembersPolicyRequest() @@ -84,10 +87,10 @@ func resourceTencentCloudOrganizationOrgMemberPolicyAttachmentCreate(d *schema.R request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().CreateOrganizationMembersPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().CreateOrganizationMembersPolicy(request) if e != nil { - return retryError(e) + return tccommon.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,20 +112,20 @@ func resourceTencentCloudOrganizationOrgMemberPolicyAttachmentCreate(d *schema.R } func resourceTencentCloudOrganizationOrgMemberPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudOrganizationOrgMemberPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_org_member_policy_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_member_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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} orgMemberPolicyAttachmentId := d.Id() if err := service.DeleteOrganizationOrgMemberPolicyAttachmentById(ctx, orgMemberPolicyAttachmentId); err != nil { diff --git a/tencentcloud/resource_tc_organization_org_member_policy_attachment_test.go b/tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment_test.go similarity index 84% rename from tencentcloud/resource_tc_organization_org_member_policy_attachment_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment_test.go index 4cd00823cf..145c7bf70f 100644 --- a/tencentcloud/resource_tc_organization_org_member_policy_attachment_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_policy_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgMemberPolicyAttachmentResource_basic(t *t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_ORGANIZATION) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_ORGANIZATION) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccOrganizationOrgMemberPolicyAttachment, diff --git a/tencentcloud/resource_tc_organization_org_member_test.go b/tencentcloud/services/tco/resource_tc_organization_org_member_test.go similarity index 91% rename from tencentcloud/resource_tc_organization_org_member_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_member_test.go index 7c2d3a7abc..38319a678a 100644 --- a/tencentcloud/resource_tc_organization_org_member_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_member_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgMemberResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_ORGANIZATION) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_ORGANIZATION) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccOrganizationOrgMember, diff --git a/tencentcloud/services/tco/resource_tc_organization_org_node.go b/tencentcloud/services/tco/resource_tc_organization_org_node.go new file mode 100644 index 0000000000..427da5d413 --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_org_node.go @@ -0,0 +1,216 @@ +package tco + +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" + organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudOrganizationOrgNode() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudOrganizationOrgNodeRead, + Create: resourceTencentCloudOrganizationOrgNodeCreate, + Update: resourceTencentCloudOrganizationOrgNodeUpdate, + Delete: resourceTencentCloudOrganizationOrgNodeDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "parent_node_id": { + Type: schema.TypeInt, + Required: true, + Description: "Parent node ID.", + }, + + "name": { + Type: schema.TypeString, + Required: true, + Description: "Node name.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Notes.", + }, + + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Node creation time.", + }, + + "update_time": { + Type: schema.TypeString, + Computed: true, + Description: "Node update time.", + }, + }, + } +} + +func resourceTencentCloudOrganizationOrgNodeCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_node.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = organization.NewAddOrganizationNodeRequest() + response *organization.AddOrganizationNodeResponse + nodeId int64 + ) + + if v, _ := d.GetOk("parent_node_id"); v != nil { + request.ParentNodeId = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("name"); ok { + + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().AddOrganizationNode(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 organization orgNode failed, reason:%+v", logId, err) + return err + } + + nodeId = *response.Response.NodeId + + d.SetId(helper.Int64ToStr(nodeId)) + return resourceTencentCloudOrganizationOrgNodeRead(d, meta) +} + +func resourceTencentCloudOrganizationOrgNodeRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_node.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + orgNodeId := d.Id() + + orgNode, err := service.DescribeOrganizationOrgNode(ctx, orgNodeId) + + if err != nil { + return err + } + + if orgNode == nil { + d.SetId("") + return fmt.Errorf("resource `orgNode` %s does not exist", orgNodeId) + } + + if orgNode.ParentNodeId != nil { + _ = d.Set("parent_node_id", orgNode.ParentNodeId) + } + + if orgNode.Name != nil { + _ = d.Set("name", orgNode.Name) + } + + if orgNode.Remark != nil { + _ = d.Set("remark", orgNode.Remark) + } + + if orgNode.CreateTime != nil { + _ = d.Set("create_time", orgNode.CreateTime) + } + + if orgNode.UpdateTime != nil { + _ = d.Set("update_time", orgNode.UpdateTime) + } + + return nil +} + +func resourceTencentCloudOrganizationOrgNodeUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_node.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + request := organization.NewUpdateOrganizationNodeRequest() + + orgNodeId := d.Id() + + request.NodeId = helper.StrToUint64Point(orgNodeId) + + if d.HasChange("parent_node_id") { + return fmt.Errorf("`parent_node_id` do not support change now.") + } + + if d.HasChange("name") { + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + } + + if d.HasChange("remark") { + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().UpdateOrganizationNode(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 organization orgNode failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudOrganizationOrgNodeRead(d, meta) +} + +func resourceTencentCloudOrganizationOrgNodeDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_org_node.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := OrganizationService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + orgNodeId := d.Id() + + if err := service.DeleteOrganizationOrgNodeById(ctx, orgNodeId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_organization_org_node_test.go b/tencentcloud/services/tco/resource_tc_organization_org_node_test.go similarity index 82% rename from tencentcloud/resource_tc_organization_org_node_test.go rename to tencentcloud/services/tco/resource_tc_organization_org_node_test.go index fdb80d62ca..25b78ed27b 100644 --- a/tencentcloud/resource_tc_organization_org_node_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_org_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationOrgNode_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_SMS) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_SMS) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccOrganizationOrgNode, diff --git a/tencentcloud/resource_tc_organization_policy_sub_account_attachment.go b/tencentcloud/services/tco/resource_tc_organization_policy_sub_account_attachment.go similarity index 78% rename from tencentcloud/resource_tc_organization_policy_sub_account_attachment.go rename to tencentcloud/services/tco/resource_tc_organization_policy_sub_account_attachment.go index 7b0d9fbe67..0cefcb0bcb 100644 --- a/tencentcloud/resource_tc_organization_policy_sub_account_attachment.go +++ b/tencentcloud/services/tco/resource_tc_organization_policy_sub_account_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tco 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" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudOrganizationPolicySubAccountAttachment() *schema.Resource { +func ResourceTencentCloudOrganizationPolicySubAccountAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudOrganizationPolicySubAccountAttachmentRead, Create: resourceTencentCloudOrganizationPolicySubAccountAttachmentCreate, @@ -89,10 +92,10 @@ func resourceTencentCloudOrganizationPolicySubAccountAttachment() *schema.Resour } func resourceTencentCloudOrganizationPolicySubAccountAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_policy_sub_account_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_policy_sub_account_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = organization.NewBindOrganizationMemberAuthAccountRequest() @@ -116,10 +119,10 @@ func resourceTencentCloudOrganizationPolicySubAccountAttachmentCreate(d *schema. request.MemberUin = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseOrganizationClient().BindOrganizationMemberAuthAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().BindOrganizationMemberAuthAccount(request) if e != nil { - return retryError(e) + return tccommon.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,20 +135,20 @@ func resourceTencentCloudOrganizationPolicySubAccountAttachmentCreate(d *schema. return err } - d.SetId(strconv.Itoa(policyId) + FILED_SP + strconv.Itoa(memberUin) + FILED_SP + strconv.Itoa(orgSubAccountUin)) + d.SetId(strconv.Itoa(policyId) + tccommon.FILED_SP + strconv.Itoa(memberUin) + tccommon.FILED_SP + strconv.Itoa(orgSubAccountUin)) return resourceTencentCloudOrganizationPolicySubAccountAttachmentRead(d, meta) } func resourceTencentCloudOrganizationPolicySubAccountAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_policy_sub_account_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_policy_sub_account_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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{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()) } @@ -205,15 +208,15 @@ func resourceTencentCloudOrganizationPolicySubAccountAttachmentRead(d *schema.Re } func resourceTencentCloudOrganizationPolicySubAccountAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_organization_policy_sub_account_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_organization_policy_sub_account_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 := OrganizationService{client: meta.(*TencentCloudClient).apiV3Conn} + service := OrganizationService{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()) } diff --git a/tencentcloud/services/tco/resource_tc_organization_quit_organization_operation.go b/tencentcloud/services/tco/resource_tc_organization_quit_organization_operation.go new file mode 100644 index 0000000000..e2a742116c --- /dev/null +++ b/tencentcloud/services/tco/resource_tc_organization_quit_organization_operation.go @@ -0,0 +1,79 @@ +package tco + +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" + organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudOrganizationQuitOrganizationOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudOrganizationQuitOrganizationOperationCreate, + Read: resourceTencentCloudOrganizationQuitOrganizationOperationRead, + Delete: resourceTencentCloudOrganizationQuitOrganizationOperationDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "org_id": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Organization ID.", + }, + }, + } +} + +func resourceTencentCloudOrganizationQuitOrganizationOperationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_quit_organization_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = organization.NewQuitOrganizationRequest() + orgId uint64 + ) + if v, _ := d.GetOk("org_id"); v != nil { + request.OrgId = helper.IntUint64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOrganizationClient().QuitOrganization(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 organization quitOrganizationOperation failed, reason:%+v", logId, err) + return err + } + + d.SetId(helper.UInt64ToStr(orgId)) + + return resourceTencentCloudOrganizationQuitOrganizationOperationRead(d, meta) +} + +func resourceTencentCloudOrganizationQuitOrganizationOperationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_quit_organization_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudOrganizationQuitOrganizationOperationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_organization_quit_organization_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_organization_quit_organization_operation_test.go b/tencentcloud/services/tco/resource_tc_organization_quit_organization_operation_test.go similarity index 85% rename from tencentcloud/resource_tc_organization_quit_organization_operation_test.go rename to tencentcloud/services/tco/resource_tc_organization_quit_organization_operation_test.go index 45bcf9dbab..713d3bbd09 100644 --- a/tencentcloud/resource_tc_organization_quit_organization_operation_test.go +++ b/tencentcloud/services/tco/resource_tc_organization_quit_organization_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tco_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 TestAccTencentCloudOrganizationQuitOrganizationOperationResource_basic(t *t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccOrganizationQuitOrganizationOperation, diff --git a/tencentcloud/service_tencentcloud_organization.go b/tencentcloud/services/tco/service_tencentcloud_organization.go similarity index 96% rename from tencentcloud/service_tencentcloud_organization.go rename to tencentcloud/services/tco/service_tencentcloud_organization.go index 564245a5d7..27d6fdbfa5 100644 --- a/tencentcloud/service_tencentcloud_organization.go +++ b/tencentcloud/services/tco/service_tencentcloud_organization.go @@ -1,12 +1,15 @@ -package tencentcloud +package tco import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" organization "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization/v20210331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -17,7 +20,7 @@ type OrganizationService struct { func (me *OrganizationService) DescribeOrganizationOrgNode(ctx context.Context, nodeId string) (orgNode *organization.OrgNode, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationNodesRequest() ) @@ -70,7 +73,7 @@ func (me *OrganizationService) DescribeOrganizationOrgNode(ctx context.Context, } func (me *OrganizationService) DeleteOrganizationOrgNodeById(ctx context.Context, nodeId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationNodesRequest() @@ -97,7 +100,7 @@ func (me *OrganizationService) DeleteOrganizationOrgNodeById(ctx context.Context func (me *OrganizationService) DescribeOrganizationOrgMember(ctx context.Context, uin string) (orgMember *organization.OrgMember, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationMembersRequest() ) @@ -153,7 +156,7 @@ func (me *OrganizationService) DescribeOrganizationOrgMember(ctx context.Context } func (me *OrganizationService) DeleteOrganizationOrgMemberById(ctx context.Context, uin string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationMembersRequest() @@ -180,7 +183,7 @@ func (me *OrganizationService) DeleteOrganizationOrgMemberById(ctx context.Conte func (me *OrganizationService) DescribeOrganizationPolicySubAccountAttachment(ctx context.Context, policyId, memberUin string) (policySubAccountAttachment *organization.OrgMemberAuthAccount, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationMemberAuthAccountsRequest() ) @@ -212,7 +215,7 @@ func (me *OrganizationService) DescribeOrganizationPolicySubAccountAttachment(ct } func (me *OrganizationService) DeleteOrganizationPolicySubAccountAttachmentById(ctx context.Context, policyId, memberUin, orgSubAccountUin string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewCancelOrganizationMemberAuthAccountRequest() @@ -240,7 +243,7 @@ func (me *OrganizationService) DeleteOrganizationPolicySubAccountAttachmentById( } func (me *OrganizationService) DescribeOrganizationOrgMemberAuthIdentityById(ctx context.Context, memberUin int64) (identityIds []int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDescribeOrganizationMemberAuthIdentitiesRequest() request.MemberUin = &memberUin @@ -288,7 +291,7 @@ func (me *OrganizationService) DescribeOrganizationOrgMemberAuthIdentityById(ctx } func (me *OrganizationService) DeleteOrganizationOrgMemberAuthIdentityById(ctx context.Context, memberUin string, identityId []string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationMemberAuthIdentityRequest() @@ -319,7 +322,7 @@ func (me *OrganizationService) DeleteOrganizationOrgMemberAuthIdentityById(ctx c func (me *OrganizationService) DescribeOrganizationOrgAuthNodeByFilter(ctx context.Context, param map[string]interface{}) (orgAuthNode []*organization.AuthNode, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationAuthNodeRequest() ) @@ -366,7 +369,7 @@ func (me *OrganizationService) DescribeOrganizationOrgAuthNodeByFilter(ctx conte } func (me *OrganizationService) DescribeOrganizationOrganizationById(ctx context.Context) (result *organization.DescribeOrganizationResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDescribeOrganizationRequest() @@ -390,7 +393,7 @@ func (me *OrganizationService) DescribeOrganizationOrganizationById(ctx context. } func (me *OrganizationService) DeleteOrganizationOrganizationById(ctx context.Context) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationRequest() @@ -413,7 +416,7 @@ func (me *OrganizationService) DeleteOrganizationOrganizationById(ctx context.Co } func (me *OrganizationService) DescribeOrganizationOrgMemberEmailById(ctx context.Context, memberUin int64, bindId uint64) (orgMemberEmail *organization.DescribeOrganizationMemberEmailBindResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDescribeOrganizationMemberEmailBindRequest() request.MemberUin = &memberUin @@ -445,7 +448,7 @@ func (me *OrganizationService) DescribeOrganizationOrgMemberEmailById(ctx contex func (me *OrganizationService) DescribeOrganizationOrgFinancialByMemberByFilter(ctx context.Context, param map[string]interface{}) (orgFinancialByMember *organization.DescribeOrganizationFinancialByMemberResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationFinancialByMemberRequest() ) @@ -513,7 +516,7 @@ func (me *OrganizationService) DescribeOrganizationOrgFinancialByMemberByFilter( func (me *OrganizationService) DescribeOrganizationOrgFinancialByMonthByFilter(ctx context.Context, param map[string]interface{}) (orgFinancialByMonth []*organization.OrgFinancialByMonth, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationFinancialByMonthRequest() ) @@ -552,7 +555,7 @@ func (me *OrganizationService) DescribeOrganizationOrgFinancialByMonthByFilter(c } func (me *OrganizationService) DescribeOrganizationOrgFinancialByProductByFilter(ctx context.Context, param map[string]interface{}) (orgFinancialByProduct *organization.DescribeOrganizationFinancialByProductResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationFinancialByProductRequest() ) @@ -619,7 +622,7 @@ func (me *OrganizationService) DescribeOrganizationOrgFinancialByProductByFilter } func (me *OrganizationService) DescribeOrganizationOrgIdentityById(ctx context.Context, identityId string) (orgIdentity *organization.OrgIdentity, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewListOrganizationIdentityRequest() request.IdentityId = helper.StrToUint64Point(identityId) @@ -663,7 +666,7 @@ func (me *OrganizationService) DescribeOrganizationOrgIdentityById(ctx context.C } func (me *OrganizationService) DeleteOrganizationOrgIdentityById(ctx context.Context, identityId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationIdentityRequest() request.IdentityId = helper.StrToUint64Point(identityId) @@ -687,7 +690,7 @@ func (me *OrganizationService) DeleteOrganizationOrgIdentityById(ctx context.Con } func (me *OrganizationService) DeleteOrganizationOrgMemberPolicyAttachmentById(ctx context.Context, policyId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := organization.NewDeleteOrganizationMembersPolicyRequest() request.PolicyId = helper.StrToUint64Point(policyId) @@ -712,7 +715,7 @@ func (me *OrganizationService) DeleteOrganizationOrgMemberPolicyAttachmentById(c func (me *OrganizationService) DescribeOrganizationMembersByFilter(ctx context.Context, param map[string]interface{}) (members []*organization.OrgMember, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = organization.NewDescribeOrganizationMembersRequest() ) diff --git a/tencentcloud/data_source_tc_tcr_image_manifests.go b/tencentcloud/services/tcr/data_source_tc_tcr_image_manifests.go similarity index 80% rename from tencentcloud/data_source_tc_tcr_image_manifests.go rename to tencentcloud/services/tcr/data_source_tc_tcr_image_manifests.go index 110323625e..aec225f291 100644 --- a/tencentcloud/data_source_tc_tcr_image_manifests.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_image_manifests.go @@ -1,14 +1,17 @@ -package tencentcloud +package tcr 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 dataSourceTencentCloudTcrImageManifests() *schema.Resource { +func DataSourceTencentCloudTcrImageManifests() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrImageManifestsRead, Schema: map[string]*schema.Schema{ @@ -58,12 +61,12 @@ func dataSourceTencentCloudTcrImageManifests() *schema.Resource { } func dataSourceTencentCloudTcrImageManifestsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_image_manifests.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_image_manifests.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 ( registryId string namespaceName string @@ -92,17 +95,17 @@ func dataSourceTencentCloudTcrImageManifestsRead(d *schema.ResourceData, meta in imageVersion = v.(string) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( config *string manifest *string ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcrImageManifestsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result.Config manifest = result.Manifest @@ -130,7 +133,7 @@ func dataSourceTencentCloudTcrImageManifestsRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash([]string{registryId, namespaceName, repositoryName, imageVersion})) 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/tcr/data_source_tc_tcr_image_manifests_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_image_manifests_test.go new file mode 100644 index 0000000000..f927ecb03e --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_image_manifests_test.go @@ -0,0 +1,47 @@ +package tcr_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +const testTcrImageManifestsObjectName = "data.tencentcloud_tcr_image_manifests.image_manifests" + +func TestAccTencentCloudTcrImageManifestsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImageManifestsDataSource, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID(testTcrImageManifestsObjectName), + resource.TestCheckResourceAttrSet(testTcrImageManifestsObjectName, "id"), + resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr(testTcrImageManifestsObjectName, "repository_name", tcacctest.DefaultTCRRepoName), + ), + }, + }, + }) +} + +const testAccTcrImageManifestsDataSource = ` + +data "tencentcloud_tcr_image_manifests" "image_manifests" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + image_version = "vv1" +} + +` diff --git a/tencentcloud/data_source_tc_tcr_images.go b/tencentcloud/services/tcr/data_source_tc_tcr_images.go similarity index 86% rename from tencentcloud/data_source_tc_tcr_images.go rename to tencentcloud/services/tcr/data_source_tc_tcr_images.go index b672119e44..b15d6df335 100644 --- a/tencentcloud/data_source_tc_tcr_images.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_images.go @@ -1,16 +1,19 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrImages() *schema.Resource { +func DataSourceTencentCloudTcrImages() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrImagesRead, Schema: map[string]*schema.Schema{ @@ -100,12 +103,12 @@ func dataSourceTencentCloudTcrImages() *schema.Resource { } func dataSourceTencentCloudTcrImagesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_images.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_images.read")() + 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) registryId string namespaceName string repoName string @@ -139,14 +142,14 @@ func dataSourceTencentCloudTcrImagesRead(d *schema.ResourceData, meta interface{ paramMap["exact_match"] = helper.Bool(v.(bool)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var imageInfoList []*tcr.TcrImageInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcrImagesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } imageInfoList = result return nil @@ -186,7 +189,7 @@ func dataSourceTencentCloudTcrImagesRead(d *schema.ResourceData, meta interface{ tcrImageInfoMap["kms_signature"] = tcrImageInfo.KmsSignature } - ids = append(ids, strings.Join([]string{registryId, namespaceName, repoName, *tcrImageInfo.ImageVersion}, FILED_SP)) + ids = append(ids, strings.Join([]string{registryId, namespaceName, repoName, *tcrImageInfo.ImageVersion}, tccommon.FILED_SP)) tmpList = append(tmpList, tcrImageInfoMap) } @@ -196,7 +199,7 @@ func dataSourceTencentCloudTcrImagesRead(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/services/tcr/data_source_tc_tcr_images_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_images_test.go new file mode 100644 index 0000000000..ebbe6b3cab --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_images_test.go @@ -0,0 +1,120 @@ +package tcr_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +const testObjectName = "data.tencentcloud_tcr_images.images" + +func TestAccTencentCloudTcrImagesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImagesDataSource_id, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testObjectName, "id"), + resource.TestCheckResourceAttr(testObjectName, "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr(testObjectName, "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr(testObjectName, "repository_name", tcacctest.DefaultTCRRepoName), + resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), + ), + }, + }, + }) +} + +func TestAccTencentCloudTcrImagesDataSource_exact(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImagesDataSource_exact, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testObjectName, "id"), + resource.TestCheckResourceAttr(testObjectName, "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr(testObjectName, "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr(testObjectName, "repository_name", tcacctest.DefaultTCRRepoName), + resource.TestCheckResourceAttr(testObjectName, "exact_match", "true"), + resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), + ), + }, + }, + }) +} + +func TestAccTencentCloudTcrImagesDataSource_exact_version(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImagesDataSource_exact_version, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(testObjectName, "id"), + resource.TestCheckResourceAttr(testObjectName, "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr(testObjectName, "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr(testObjectName, "repository_name", tcacctest.DefaultTCRRepoName), + resource.TestCheckResourceAttr(testObjectName, "image_version", "v1"), + resource.TestCheckResourceAttr(testObjectName, "exact_match", "true"), + resource.TestCheckResourceAttrSet(testObjectName, "image_info_list.#"), + ), + }, + }, + }) +} + +const testAccTcrImagesDataSource_id = ` + +data "tencentcloud_tcr_images" "images" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + } + +` + +const testAccTcrImagesDataSource_exact = ` + +data "tencentcloud_tcr_images" "images" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + exact_match = true + } + +` + +const testAccTcrImagesDataSource_exact_version = ` + +data "tencentcloud_tcr_images" "images" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + image_version = "v1" + exact_match = true + } + +` diff --git a/tencentcloud/data_source_tc_tcr_instances.go b/tencentcloud/services/tcr/data_source_tc_tcr_instances.go similarity index 86% rename from tencentcloud/data_source_tc_tcr_instances.go rename to tencentcloud/services/tcr/data_source_tc_tcr_instances.go index 360be0feef..cdfaf030f1 100644 --- a/tencentcloud/data_source_tc_tcr_instances.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTCRInstances() *schema.Resource { +func DataSourceTencentCloudTCRInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTCRInstancesRead, @@ -83,10 +86,10 @@ func dataSourceTencentCloudTCRInstances() *schema.Resource { } func dataSourceTencentCloudTCRInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_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) var name, instanceId string var filters = make([]*tcr.Filter, 0) @@ -102,14 +105,14 @@ func dataSourceTencentCloudTCRInstancesRead(d *schema.ResourceData, meta interfa if instanceId == "" && name == "" { return fmt.Errorf("instance_id or name must be set at least one.") } - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error instances, outErr := tcrService.DescribeTCRInstances(ctx, instanceId, filters) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, inErr = tcrService.DescribeTCRInstances(ctx, instanceId, filters) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -146,7 +149,7 @@ func dataSourceTencentCloudTCRInstancesRead(d *schema.ResourceData, meta interfa 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 e } } diff --git a/tencentcloud/services/tcr/data_source_tc_tcr_instances_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_instances_test.go new file mode 100644 index 0000000000..cab2b22b34 --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_instances_test.go @@ -0,0 +1,38 @@ +package tcr_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testDataTCRInstancesName = "data.tencentcloud_tcr_instances.tcr" + +func TestAccTencentCloudTcrInstancesData(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataTCRInstancesBasic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.id"), + resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.instance_type"), + resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.internal_end_point"), + resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.public_domain"), + resource.TestCheckResourceAttrSet(testDataTCRInstancesName, "instance_list.0.status"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataTCRInstancesBasic = tcacctest.DefaultTCRInstanceData diff --git a/tencentcloud/data_source_tc_tcr_namespaces.go b/tencentcloud/services/tcr/data_source_tc_tcr_namespaces.go similarity index 79% rename from tencentcloud/data_source_tc_tcr_namespaces.go rename to tencentcloud/services/tcr/data_source_tc_tcr_namespaces.go index cb51f27af3..26e5c5aa45 100644 --- a/tencentcloud/data_source_tc_tcr_namespaces.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_namespaces.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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 dataSourceTencentCloudTCRNamespaces() *schema.Resource { +func DataSourceTencentCloudTCRNamespaces() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTCRNamespacesRead, @@ -59,10 +62,10 @@ func dataSourceTencentCloudTCRNamespaces() *schema.Resource { } func dataSourceTencentCloudTCRNamespacesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_namespaces.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_namespaces.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var name, instanceId string instanceId = d.Get("instance_id").(string) @@ -70,14 +73,14 @@ func dataSourceTencentCloudTCRNamespacesRead(d *schema.ResourceData, meta interf name = v.(string) } - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error namespaces, outErr := tcrService.DescribeTCRNameSpaces(ctx, instanceId, name) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { namespaces, inErr = tcrService.DescribeTCRNameSpaces(ctx, instanceId, name) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -96,7 +99,7 @@ func dataSourceTencentCloudTCRNamespacesRead(d *schema.ResourceData, meta interf } namespaceList = append(namespaceList, mapping) - ids = append(ids, instanceId+FILED_SP+*namespace.Name) + ids = append(ids, instanceId+tccommon.FILED_SP+*namespace.Name) } d.SetId(helper.DataResourceIdsHash(ids)) if e := d.Set("namespace_list", namespaceList); e != nil { @@ -106,7 +109,7 @@ func dataSourceTencentCloudTCRNamespacesRead(d *schema.ResourceData, meta interf output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), namespaceList); e != nil { + if e := tccommon.WriteToFile(output.(string), namespaceList); e != nil { return e } } diff --git a/tencentcloud/services/tcr/data_source_tc_tcr_namespaces_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_namespaces_test.go new file mode 100644 index 0000000000..a9bc73aca2 --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_namespaces_test.go @@ -0,0 +1,40 @@ +package tcr_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testDataTCRNamespacesNameAll = "data.tencentcloud_tcr_namespaces.id_test" + +func TestAccTencentCloudTcrNamespacesData(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRNamespaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataTCRNamespacesBasic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.name"), + resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.is_public"), // we only need to care whether the value is set or not, rather than the exact value itself, and this value of public cannot be confirmed when the e2e case parallel running + resource.TestCheckResourceAttrSet(testDataTCRNamespacesNameAll, "namespace_list.0.id"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataTCRNamespacesBasic = tcacctest.DefaultTCRInstanceData + ` +data "tencentcloud_tcr_namespaces" "id_test" { + instance_id = local.tcr_id +} +` diff --git a/tencentcloud/data_source_tc_tcr_replication_instance_create_tasks.go b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks.go similarity index 85% rename from tencentcloud/data_source_tc_tcr_replication_instance_create_tasks.go rename to tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks.go index be7c847f7d..7c176c66c2 100644 --- a/tencentcloud/data_source_tc_tcr_replication_instance_create_tasks.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrReplicationInstanceCreateTasks() *schema.Resource { +func DataSourceTencentCloudTcrReplicationInstanceCreateTasks() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead, Schema: map[string]*schema.Schema{ @@ -81,12 +84,12 @@ func dataSourceTencentCloudTcrReplicationInstanceCreateTasks() *schema.Resource } func dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_replication_instance_create_tasks.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_replication_instance_create_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("replication_registry_id"); ok { @@ -97,17 +100,17 @@ func dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead(d *schema.Resou paramMap["ReplicationRegionId"] = helper.IntUint64(v.(int)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( result *tcr.DescribeReplicationInstanceCreateTasksResponseParams e error ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e = service.DescribeTcrReplicationInstanceCreateTasksByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -162,7 +165,7 @@ func dataSourceTencentCloudTcrReplicationInstanceCreateTasksRead(d *schema.Resou d.SetId(helper.DataResourceIdsHash(ids)) 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_tcr_replication_instance_create_tasks_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks_test.go similarity index 87% rename from tencentcloud/data_source_tc_tcr_replication_instance_create_tasks_test.go rename to tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks_test.go index 672fb1257a..ebc233f3fa 100644 --- a/tencentcloud/data_source_tc_tcr_replication_instance_create_tasks_test.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_create_tasks_test.go @@ -1,27 +1,29 @@ -package tencentcloud +package tcr_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTcrReplicationInstanceCreateTasksDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource, defaultTCRInstanceId, "tcr-aoz8mxoz-1-kkircm"), + Config: fmt.Sprintf(testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource, tcacctest.DefaultTCRInstanceId, "tcr-aoz8mxoz-1-kkircm"), // Config: testAccTcrReplicationInstance_create_tasks_and_sync_status_DataSource, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "replication_registry_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "replication_region_id"), @@ -34,7 +36,7 @@ func TestAccTencentCloudTcrReplicationInstanceCreateTasksDataSource_basic(t *tes // resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.created_time"), // resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_create_tasks.create_tasks", "task_detail.0.finished_time"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_sync_status.sync_status"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_replication_instance_sync_status.sync_status"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "registry_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_replication_instance_sync_status.sync_status", "replication_registry_id"), diff --git a/tencentcloud/data_source_tc_tcr_replication_instance_sync_status.go b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_sync_status.go similarity index 88% rename from tencentcloud/data_source_tc_tcr_replication_instance_sync_status.go rename to tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_sync_status.go index 51e42e37bb..44928c5fe3 100644 --- a/tencentcloud/data_source_tc_tcr_replication_instance_sync_status.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_replication_instance_sync_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrReplicationInstanceSyncStatus() *schema.Resource { +func DataSourceTencentCloudTcrReplicationInstanceSyncStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrReplicationInstanceSyncStatusRead, Schema: map[string]*schema.Schema{ @@ -99,12 +102,12 @@ func dataSourceTencentCloudTcrReplicationInstanceSyncStatus() *schema.Resource { } func dataSourceTencentCloudTcrReplicationInstanceSyncStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_replication_instance_sync_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_replication_instance_sync_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 replicationRegistryId string paramMap := make(map[string]interface{}) @@ -125,16 +128,16 @@ func dataSourceTencentCloudTcrReplicationInstanceSyncStatusRead(d *schema.Resour paramMap["ShowReplicationLog"] = helper.Bool(v.(bool)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( result *tcr.DescribeReplicationInstanceSyncStatusResponseParams e error ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e = service.DescribeTcrReplicationInstanceSyncStatusByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -182,7 +185,7 @@ func dataSourceTencentCloudTcrReplicationInstanceSyncStatusRead(d *schema.Resour d.SetId(helper.DataResourceIdHash(replicationRegistryId)) 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_tcr_repositories.go b/tencentcloud/services/tcr/data_source_tc_tcr_repositories.go similarity index 83% rename from tencentcloud/data_source_tc_tcr_repositories.go rename to tencentcloud/services/tcr/data_source_tc_tcr_repositories.go index 5379b1791e..dfef71dd86 100644 --- a/tencentcloud/data_source_tc_tcr_repositories.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_repositories.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr 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/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTCRRepositories() *schema.Resource { +func DataSourceTencentCloudTCRRepositories() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTCRRepositoriesRead, @@ -92,10 +95,10 @@ func dataSourceTencentCloudTCRRepositories() *schema.Resource { } func dataSourceTencentCloudTCRRepositoriesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_repositories.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_repositories.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var namespaceName, instanceId, repositoryName string instanceId = d.Get("instance_id").(string) @@ -105,15 +108,15 @@ func dataSourceTencentCloudTCRRepositoriesRead(d *schema.ResourceData, meta inte repositoryName = v.(string) } - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error var domain string instance, has, outErr := tcrService.DescribeTCRInstanceById(ctx, instanceId) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, inErr = tcrService.DescribeTCRInstanceById(ctx, instanceId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -127,10 +130,10 @@ func dataSourceTencentCloudTCRRepositoriesRead(d *schema.ResourceData, meta inte repositories, outErr := tcrService.DescribeTCRRepositories(ctx, instanceId, namespaceName, repositoryName) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { repositories, inErr = tcrService.DescribeTCRRepositories(ctx, instanceId, namespaceName, repositoryName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -155,7 +158,7 @@ func dataSourceTencentCloudTCRRepositoriesRead(d *schema.ResourceData, meta inte } repositoryList = append(repositoryList, mapping) - ids = append(ids, instanceId+FILED_SP+*repository.Namespace+FILED_SP+*repository.Name) + ids = append(ids, instanceId+tccommon.FILED_SP+*repository.Namespace+tccommon.FILED_SP+*repository.Name) } d.SetId(helper.DataResourceIdsHash(ids)) if e := d.Set("repository_list", repositoryList); e != nil { @@ -165,7 +168,7 @@ func dataSourceTencentCloudTCRRepositoriesRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), repositoryList); e != nil { + if e := tccommon.WriteToFile(output.(string), repositoryList); e != nil { return e } } diff --git a/tencentcloud/services/tcr/data_source_tc_tcr_repositories_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_repositories_test.go new file mode 100644 index 0000000000..cf4bed9bf6 --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_repositories_test.go @@ -0,0 +1,41 @@ +package tcr_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testDataTCRRepositoriesNameAll = "data.tencentcloud_tcr_repositories.id_test" + +func TestAccTencentCloudTcrRepositoriesData(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRRepositoryDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataTCRRepositoriesBasic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.name"), + resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.create_time"), + resource.TestCheckResourceAttrSet(testDataTCRRepositoriesNameAll, "repository_list.0.url"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataTCRRepositoriesBasic = tcacctest.DefaultTCRInstanceData + ` +data "tencentcloud_tcr_repositories" "id_test" { + instance_id = local.tcr_id + namespace_name = var.tcr_namespace +} +` diff --git a/tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks.go b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_execution_tasks.go similarity index 86% rename from tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks.go rename to tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_execution_tasks.go index 4b8ad54148..d6773633bf 100644 --- a/tencentcloud/data_source_tc_tcr_tag_retention_execution_tasks.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_execution_tasks.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrTagRetentionExecutionTasks() *schema.Resource { +func DataSourceTencentCloudTcrTagRetentionExecutionTasks() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrTagRetentionExecutionTasksRead, Schema: map[string]*schema.Schema{ @@ -91,10 +94,10 @@ func dataSourceTencentCloudTcrTagRetentionExecutionTasks() *schema.Resource { } func dataSourceTencentCloudTcrTagRetentionExecutionTasksRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_tag_retention_execution_tasks.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_tag_retention_execution_tasks.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( registryId string @@ -102,7 +105,7 @@ func dataSourceTencentCloudTcrTagRetentionExecutionTasksRead(d *schema.ResourceD executionId string ) - 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("registry_id"); ok { @@ -120,14 +123,14 @@ func dataSourceTencentCloudTcrTagRetentionExecutionTasksRead(d *schema.ResourceD executionId = helper.IntToStr(v.(int)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var retentionTaskList []*tcr.RetentionTask - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcrTagRetentionExecutionTasksByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } retentionTaskList = result return nil @@ -183,7 +186,7 @@ func dataSourceTencentCloudTcrTagRetentionExecutionTasksRead(d *schema.ResourceD d.SetId(helper.DataResourceIdsHash([]string{registryId, retentionId, executionId})) 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/tcr/data_source_tc_tcr_tag_retention_execution_tasks_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_execution_tasks_test.go new file mode 100644 index 0000000000..bd5659516f --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_execution_tasks_test.go @@ -0,0 +1,49 @@ +package tcr_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testExecutionTasksObjectName = "data.tencentcloud_tcr_tag_retention_execution_tasks.tasks" + +func TestAccTencentCloudTcrTagRetentionExecutionTasksDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrTagRetentionExecutionTasksDataSource, tcacctest.DefaultTCRInstanceId), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID(testExecutionTasksObjectName), + resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "id"), + resource.TestCheckResourceAttr(testExecutionTasksObjectName, "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr(testExecutionTasksObjectName, "retention_id", "1"), + resource.TestCheckResourceAttr(testExecutionTasksObjectName, "execution_id", "1"), + resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.#"), + resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.0.task_id"), + resource.TestCheckResourceAttrSet(testExecutionTasksObjectName, "retention_task_list.0.execution_id"), + ), + }, + }, + }) +} + +const testAccTcrTagRetentionExecutionTasksDataSource = ` + +data "tencentcloud_tcr_tag_retention_execution_tasks" "tasks" { + registry_id = "%s" + retention_id = 1 + execution_id = 1 +} + +` diff --git a/tencentcloud/data_source_tc_tcr_tag_retention_executions.go b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions.go similarity index 84% rename from tencentcloud/data_source_tc_tcr_tag_retention_executions.go rename to tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions.go index ce239f51a4..3c989cbb2f 100644 --- a/tencentcloud/data_source_tc_tcr_tag_retention_executions.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrTagRetentionExecutions() *schema.Resource { +func DataSourceTencentCloudTcrTagRetentionExecutions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrTagRetentionExecutionsRead, Schema: map[string]*schema.Schema{ @@ -70,12 +73,12 @@ func dataSourceTencentCloudTcrTagRetentionExecutions() *schema.Resource { } func dataSourceTencentCloudTcrTagRetentionExecutionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_tag_retention_executions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_tag_retention_executions.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("registry_id"); ok { @@ -86,14 +89,14 @@ func dataSourceTencentCloudTcrTagRetentionExecutionsRead(d *schema.ResourceData, paramMap["RetentionId"] = helper.IntInt64(v.(int)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var retentionExecutionList []*tcr.RetentionExecution - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcrTagRetentionExecutionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } retentionExecutionList = result return nil @@ -139,7 +142,7 @@ func dataSourceTencentCloudTcrTagRetentionExecutionsRead(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_tcr_tag_retention_executions_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions_test.go similarity index 75% rename from tencentcloud/data_source_tc_tcr_tag_retention_executions_test.go rename to tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions_test.go index 9a98b28cc2..26edec3934 100644 --- a/tencentcloud/data_source_tc_tcr_tag_retention_executions_test.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tag_retention_executions_test.go @@ -1,28 +1,30 @@ -package tencentcloud +package tcr_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTcrTagRetentionExecutionsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccTcrTagRetentionExecutionsDataSource, defaultTCRInstanceId), + Config: fmt.Sprintf(testAccTcrTagRetentionExecutionsDataSource, tcacctest.DefaultTCRInstanceId), PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "id"), - resource.TestCheckResourceAttr("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "registry_id", defaultTCRInstanceId), + resource.TestCheckResourceAttr("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "registry_id", tcacctest.DefaultTCRInstanceId), resource.TestCheckResourceAttr("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "retention_id", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "retention_execution_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_tag_retention_executions.tag_retention_executions", "retention_execution_list.0.execution_id"), diff --git a/tencentcloud/data_source_tc_tcr_tokens.go b/tencentcloud/services/tcr/data_source_tc_tcr_tokens.go similarity index 80% rename from tencentcloud/data_source_tc_tcr_tokens.go rename to tencentcloud/services/tcr/data_source_tc_tcr_tokens.go index 6677cc739d..a71b7c51ab 100644 --- a/tencentcloud/data_source_tc_tcr_tokens.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tokens.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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 dataSourceTencentCloudTCRTokens() *schema.Resource { +func DataSourceTencentCloudTCRTokens() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTCRTokensRead, @@ -65,10 +68,10 @@ func dataSourceTencentCloudTCRTokens() *schema.Resource { } func dataSourceTencentCloudTCRTokensRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_tokens.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_tokens.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var tokenId, instanceId string instanceId = d.Get("instance_id").(string) @@ -76,14 +79,14 @@ func dataSourceTencentCloudTCRTokensRead(d *schema.ResourceData, meta interface{ tokenId = v.(string) } - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error tokens, outErr := tcrService.DescribeTCRTokens(ctx, instanceId, tokenId) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { tokens, inErr = tcrService.DescribeTCRTokens(ctx, instanceId, tokenId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -104,7 +107,7 @@ func dataSourceTencentCloudTCRTokensRead(d *schema.ResourceData, meta interface{ } tokenList = append(tokenList, mapping) - ids = append(ids, instanceId+FILED_SP+*token.Id) + ids = append(ids, instanceId+tccommon.FILED_SP+*token.Id) } d.SetId(helper.DataResourceIdsHash(ids)) if e := d.Set("token_list", tokenList); e != nil { @@ -114,7 +117,7 @@ func dataSourceTencentCloudTCRTokensRead(d *schema.ResourceData, meta interface{ output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tokenList); e != nil { + if e := tccommon.WriteToFile(output.(string), tokenList); e != nil { return e } } diff --git a/tencentcloud/services/tcr/data_source_tc_tcr_tokens_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_tokens_test.go new file mode 100644 index 0000000000..49d8cf7e1b --- /dev/null +++ b/tencentcloud/services/tcr/data_source_tc_tcr_tokens_test.go @@ -0,0 +1,48 @@ +package tcr_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var testDataTCRTokensNameAll = "data.tencentcloud_tcr_tokens.id_test" + +func TestAccTencentCloudTcrTokensData(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRTokenDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataTCRTokensBasic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.token_id"), + resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.create_time"), + resource.TestCheckResourceAttrSet(testDataTCRTokensNameAll, "token_list.0.description"), + resource.TestCheckResourceAttr(testDataTCRTokensNameAll, "token_list.0.enable", "true"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataTCRTokensBasic = tcacctest.DefaultTCRInstanceData + ` +resource "tencentcloud_tcr_token" "mytcr_token" { + instance_id = local.tcr_id + description = "test" + enable = true +} + +data "tencentcloud_tcr_tokens" "id_test" { + token_id = tencentcloud_tcr_token.mytcr_token.token_id + instance_id = local.tcr_id +} +` diff --git a/tencentcloud/data_source_tc_tcr_vpc_attachments.go b/tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments.go similarity index 84% rename from tencentcloud/data_source_tc_tcr_vpc_attachments.go rename to tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments.go index 4c570f1f65..268618edff 100644 --- a/tencentcloud/data_source_tc_tcr_vpc_attachments.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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 dataSourceTencentCloudTCRVPCAttachments() *schema.Resource { +func DataSourceTencentCloudTCRVPCAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTCRVPCAttachmentsRead, @@ -79,10 +82,10 @@ func dataSourceTencentCloudTCRVPCAttachments() *schema.Resource { } func dataSourceTencentCloudTCRVPCAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_vpc_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_vpc_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) var vpcId, subnetId, instanceId string instanceId = d.Get("instance_id").(string) @@ -94,14 +97,14 @@ func dataSourceTencentCloudTCRVPCAttachmentsRead(d *schema.ResourceData, meta in subnetId = v.(string) } - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error vpcAccesses, outErr := tcrService.DescribeTCRVPCAttachments(ctx, instanceId, vpcId, subnetId) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { vpcAccesses, outErr = tcrService.DescribeTCRVPCAttachments(ctx, instanceId, vpcId, subnetId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -134,7 +137,7 @@ func dataSourceTencentCloudTCRVPCAttachmentsRead(d *schema.ResourceData, meta in } vpcAccessList = append(vpcAccessList, mapping) - ids = append(ids, instanceId+FILED_SP+*vpcAccess.VpcId+FILED_SP+*vpcAccess.SubnetId) + ids = append(ids, instanceId+tccommon.FILED_SP+*vpcAccess.VpcId+tccommon.FILED_SP+*vpcAccess.SubnetId) } d.SetId(helper.DataResourceIdsHash(ids)) if e := d.Set("vpc_attachment_list", vpcAccessList); e != nil { @@ -144,7 +147,7 @@ func dataSourceTencentCloudTCRVPCAttachmentsRead(d *schema.ResourceData, meta in output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), vpcAccessList); e != nil { + if e := tccommon.WriteToFile(output.(string), vpcAccessList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tcr_vpc_attachments_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments_test.go similarity index 77% rename from tencentcloud/data_source_tc_tcr_vpc_attachments_test.go rename to tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments_test.go index 9323cb020c..dfb7f9acd3 100644 --- a/tencentcloud/data_source_tc_tcr_vpc_attachments_test.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_vpc_attachments_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tcr_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 @@ var testDataTCRVPCAttachmentsNameAll = "data.tencentcloud_tcr_vpc_attachments.id func TestAccTencentCloudTcrVPCAttachmentsData(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTCRNamespaceDestroy, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataTCRVPCAttachmentsBasic, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeAggregateTestCheckFunc( testAccCheckTCRVPCAttachmentExists("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment"), @@ -31,7 +33,7 @@ func TestAccTencentCloudTcrVPCAttachmentsData(t *testing.T) { }) } -const defaultTcrVpcSubnets = ` +const DefaultTcrVpcSubnets = ` data "tencentcloud_vpc_subnets" "sh" { availability_zone = "ap-shanghai-1" @@ -42,7 +44,7 @@ locals { subnet_id = data.tencentcloud_vpc_subnets.sh.instance_list.0.subnet_id }` -const testAccTencentCloudDataTCRVPCAttachmentsBasic = defaultTcrVpcSubnets + ` +const testAccTencentCloudDataTCRVPCAttachmentsBasic = DefaultTcrVpcSubnets + ` resource "tencentcloud_tcr_instance" "mytcr_instance" { name = "test-tcr-attach" instance_type = "basic" diff --git a/tencentcloud/data_source_tc_tcr_webhook_trigger_logs.go b/tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs.go similarity index 86% rename from tencentcloud/data_source_tc_tcr_webhook_trigger_logs.go rename to tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs.go index 79bc6681b2..ac83771a43 100644 --- a/tencentcloud/data_source_tc_tcr_webhook_trigger_logs.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs.go @@ -1,15 +1,18 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTcrWebhookTriggerLogs() *schema.Resource { +func DataSourceTencentCloudTcrWebhookTriggerLogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTcrWebhookTriggerLogsRead, Schema: map[string]*schema.Schema{ @@ -96,12 +99,12 @@ func dataSourceTencentCloudTcrWebhookTriggerLogs() *schema.Resource { } func dataSourceTencentCloudTcrWebhookTriggerLogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tcr_webhook_trigger_logs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tcr_webhook_trigger_logs.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("registry_id"); ok { @@ -116,14 +119,14 @@ func dataSourceTencentCloudTcrWebhookTriggerLogsRead(d *schema.ResourceData, met paramMap["trigger_id"] = helper.IntInt64(v.(int)) } - service := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var logs []*tcr.WebhookTriggerLog - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTcrWebhookTriggerLogByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } logs = result return nil @@ -181,7 +184,7 @@ func dataSourceTencentCloudTcrWebhookTriggerLogsRead(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_tcr_webhook_trigger_logs_test.go b/tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs_test.go similarity index 78% rename from tencentcloud/data_source_tc_tcr_webhook_trigger_logs_test.go rename to tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs_test.go index 63abff1553..95e520be4a 100644 --- a/tencentcloud/data_source_tc_tcr_webhook_trigger_logs_test.go +++ b/tencentcloud/services/tcr/data_source_tc_tcr_webhook_trigger_logs_test.go @@ -1,25 +1,27 @@ -package tencentcloud +package tcr_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTcrDescribeWebhookTriggerLogsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTcrDescribeWebhookTriggerLogsDataSource, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_webhook_trigger_logs.my_logs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tcr_webhook_trigger_logs.my_logs"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_webhook_trigger_logs.my_logs", "logs.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_webhook_trigger_logs.my_logs", "registry_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tcr_webhook_trigger_logs.my_logs", "namespace"), @@ -39,7 +41,7 @@ func TestAccTencentCloudTcrDescribeWebhookTriggerLogsDataSource_basic(t *testing }) } -const testAccTcrDescribeWebhookTriggerLogsDataSource = defaultTCRInstanceData + ` +const testAccTcrDescribeWebhookTriggerLogsDataSource = tcacctest.DefaultTCRInstanceData + ` data "tencentcloud_tcr_webhook_trigger_logs" "my_logs" { registry_id = local.tcr_id diff --git a/tencentcloud/extension_tcr.go b/tencentcloud/services/tcr/extension_tcr.go similarity index 98% rename from tencentcloud/extension_tcr.go rename to tencentcloud/services/tcr/extension_tcr.go index 3b72b0b6d5..b41aeee9de 100644 --- a/tencentcloud/extension_tcr.go +++ b/tencentcloud/services/tcr/extension_tcr.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr const ( TCR_VPC_DNS_STATUS_ENABLED = "ENABLED" diff --git a/tencentcloud/resource_tc_tcr_create_image_signature_operation.go b/tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation.go similarity index 75% rename from tencentcloud/resource_tc_tcr_create_image_signature_operation.go rename to tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation.go index bd4ed0412a..4b7b2f03e1 100644 --- a/tencentcloud/resource_tc_tcr_create_image_signature_operation.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation.go @@ -1,16 +1,19 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrCreateImageSignatureOperation() *schema.Resource { +func ResourceTencentCloudTcrCreateImageSignatureOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrCreateImageSignatureOperationCreate, Read: resourceTencentCloudTcrCreateImageSignatureOperationRead, @@ -51,10 +54,10 @@ func resourceTencentCloudTcrCreateImageSignatureOperation() *schema.Resource { } func resourceTencentCloudTcrCreateImageSignatureOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_create_image_signature_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_create_image_signature_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewCreateSignatureRequest() @@ -83,10 +86,10 @@ func resourceTencentCloudTcrCreateImageSignatureOperationCreate(d *schema.Resour imageVersion = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateSignature(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateSignature(request) if e != nil { - return retryError(e) + return tccommon.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,21 +100,21 @@ func resourceTencentCloudTcrCreateImageSignatureOperationCreate(d *schema.Resour return err } - d.SetId(strings.Join([]string{registryId, namespaceName, repositoryName, imageVersion}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, namespaceName, repositoryName, imageVersion}, tccommon.FILED_SP)) return resourceTencentCloudTcrCreateImageSignatureOperationRead(d, meta) } func resourceTencentCloudTcrCreateImageSignatureOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_create_image_signature_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_create_image_signature_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudTcrCreateImageSignatureOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_create_image_signature_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_create_image_signature_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation_test.go b/tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation_test.go new file mode 100644 index 0000000000..22ff9e50fb --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_create_image_signature_operation_test.go @@ -0,0 +1,45 @@ +package tcr_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudTcrImageSignatureOperationResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImageSignatureOperation, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_tcr_create_image_signature_operation.sign_operation", "id"), + resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "repository_name", tcacctest.DefaultTCRRepoName), + resource.TestCheckResourceAttr("tencentcloud_tcr_create_image_signature_operation.sign_operation", "image_version", "v1"), + ), + }, + }, + }) +} + +const testAccTcrImageSignatureOperation = ` + +resource "tencentcloud_tcr_create_image_signature_operation" "sign_operation" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + image_version = "v1" +} + +` diff --git a/tencentcloud/services/tcr/resource_tc_tcr_customized_domain.go b/tencentcloud/services/tcr/resource_tc_tcr_customized_domain.go new file mode 100644 index 0000000000..f8caae661c --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_customized_domain.go @@ -0,0 +1,223 @@ +package tcr + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + "strings" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTcrCustomizedDomain() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcrCustomizedDomainCreate, + Read: resourceTencentCloudTcrCustomizedDomainRead, + Update: resourceTencentCloudTcrCustomizedDomainUpdate, + Delete: resourceTencentCloudTcrCustomizedDomainDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "registry_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "instance id.", + }, + + "domain_name": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "custom domain name.", + }, + + "certificate_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "certificate id.", + }, + + "tags": { + Optional: true, + Type: schema.TypeMap, + Description: "Tag description list.", + }, + }, + } +} + +func resourceTencentCloudTcrCustomizedDomainCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_customized_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tcr.NewCreateInstanceCustomizedDomainRequest() + registryId string + domainName string + ) + if v, ok := d.GetOk("registry_id"); ok { + registryId = v.(string) + request.RegistryId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("domain_name"); ok { + domainName = v.(string) + request.DomainName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("certificate_id"); ok { + request.CertificateId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateInstanceCustomizedDomain(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 tcr CustomizedDomain failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{registryId, domainName}, tccommon.FILED_SP)) + + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 2*tccommon.ReadRetryTimeout, time.Second, service.TcrCustomizedDomainStateRefreshFunc(registryId, domainName, []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tcr:%s:uin/:instance/%s", region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudTcrCustomizedDomainRead(d, meta) +} + +func resourceTencentCloudTcrCustomizedDomainRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_customized_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TCRService{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()) + } + registryId := idSplit[0] + domainName := idSplit[1] + + domains, err := service.DescribeTcrCustomizedDomainById(ctx, registryId, &domainName) + if err != nil { + return err + } + + if len(domains) == 0 { + d.SetId("") + log.Printf("[WARN]%s resource `TcrCustomizedDomain` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + CustomizedDomain := domains[0] + + if CustomizedDomain.RegistryId != nil { + _ = d.Set("registry_id", CustomizedDomain.RegistryId) + } + + if CustomizedDomain.DomainName != nil { + _ = d.Set("domain_name", CustomizedDomain.DomainName) + } + + if CustomizedDomain.CertId != nil { + _ = d.Set("certificate_id", CustomizedDomain.CertId) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "tcr", "instance", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTcrCustomizedDomainUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_customized_domain.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + immutableArgs := []string{"registry_id", "domain_name", "certificate_id"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + if d.HasChange("tags") { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudTcrCustomizedDomainRead(d, meta) +} + +func resourceTencentCloudTcrCustomizedDomainDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_customized_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TCRService{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()) + } + registryId := idSplit[0] + domainName := idSplit[1] + + if err := service.DeleteTcrCustomizedDomainById(ctx, registryId, domainName); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tcr/resource_tc_tcr_customized_domain_test.go b/tencentcloud/services/tcr/resource_tc_tcr_customized_domain_test.go new file mode 100644 index 0000000000..9a69e64d1f --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_customized_domain_test.go @@ -0,0 +1,96 @@ +package tcr_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func init() { + resource.AddTestSweepers("tencentcloud_tcr_customized_domain", &resource.Sweeper{ + Name: "tencentcloud_tcr_customized_domain", + F: testSweepTcrCustomizedDomain, + }) +} + +// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_customized_domain +func testSweepTcrCustomizedDomain(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + tcrService := svctcr.NewTCRService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) + + domains, err := tcrService.DescribeTcrCustomizedDomainById(ctx, tcacctest.DefaultTCRInstanceId, nil) + if err != nil { + return err + } + if domains == nil { + return nil + } + + for _, v := range domains { + delName := *v.DomainName + + if strings.HasPrefix(delName, "test") { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := tcrService.DeleteTcrCustomizedDomainById(ctx, tcacctest.DefaultTCRInstanceId, delName) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return fmt.Errorf("[ERROR] delete tcr customize domain instance %s failed! reason:[%s]", delName, err.Error()) + } + } + } + return nil +} + +func TestAccTencentCloudTcrCustomizedDomainResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrCustomizedDomain, tcacctest.DefaultTCRSSL), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_tcr_customized_domain.my_domain", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_customized_domain.my_domain", "registry_id"), + resource.TestCheckResourceAttr("tencentcloud_tcr_customized_domain.my_domain", "domain_name", "www.test.com"), + resource.TestCheckResourceAttr("tencentcloud_tcr_customized_domain.my_domain", "certificate_id", tcacctest.DefaultTCRSSL), + ), + }, + { + ResourceName: "tencentcloud_tcr_customized_domain.my_domain", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +const testAccTcrCustomizedDomain = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_customized_domain" "my_domain" { + registry_id = local.tcr_id + domain_name = "www.test.com" + certificate_id = "%s" + tags = { + "createdBy" = "terraform" + } +} + +` diff --git a/tencentcloud/resource_tc_tcr_delete_image_operation.go b/tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation.go similarity index 75% rename from tencentcloud/resource_tc_tcr_delete_image_operation.go rename to tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation.go index 06715f2fc0..b8136ade48 100644 --- a/tencentcloud/resource_tc_tcr_delete_image_operation.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation.go @@ -1,16 +1,19 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrDeleteImageOperation() *schema.Resource { +func ResourceTencentCloudTcrDeleteImageOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrDeleteImageOperationCreate, Read: resourceTencentCloudTcrDeleteImageOperationRead, @@ -48,10 +51,10 @@ func resourceTencentCloudTcrDeleteImageOperation() *schema.Resource { } func resourceTencentCloudTcrDeleteImageOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_delete_image_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_delete_image_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewDeleteImageRequest() @@ -80,10 +83,10 @@ func resourceTencentCloudTcrDeleteImageOperationCreate(d *schema.ResourceData, m namespaceName = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().DeleteImage(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().DeleteImage(request) if e != nil { - return retryError(e) + return tccommon.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,21 +97,21 @@ func resourceTencentCloudTcrDeleteImageOperationCreate(d *schema.ResourceData, m return err } - d.SetId(strings.Join([]string{registryId, namespaceName, repositoryName, imageVersion}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, namespaceName, repositoryName, imageVersion}, tccommon.FILED_SP)) return resourceTencentCloudTcrDeleteImageOperationRead(d, meta) } func resourceTencentCloudTcrDeleteImageOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_delete_image_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_delete_image_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudTcrDeleteImageOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_delete_image_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_delete_image_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation_test.go b/tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation_test.go new file mode 100644 index 0000000000..c72ec185de --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_delete_image_operation_test.go @@ -0,0 +1,45 @@ +package tcr_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixTcrDeleteImageOperationResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrDeleteImageOperation, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, tcacctest.DefaultTCRRepoName), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_tcr_delete_image_operation.delete_image_operation", "id"), + resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "namespace_name", tcacctest.DefaultTCRNamespace), + resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "repository_name", tcacctest.DefaultTCRRepoName), + resource.TestCheckResourceAttr("tencentcloud_tcr_delete_image_operation.delete_image_operation", "image_version", "v2"), + ), + }, + }, + }) +} + +const testAccTcrDeleteImageOperation = ` + +resource "tencentcloud_tcr_delete_image_operation" "delete_image_operation" { + registry_id = "%s" + namespace_name = "%s" + repository_name = "%s" + image_version = "v2" +} + +` diff --git a/tencentcloud/resource_tc_tcr_immutable_tag_rule.go b/tencentcloud/services/tcr/resource_tc_tcr_immutable_tag_rule.go similarity index 76% rename from tencentcloud/resource_tc_tcr_immutable_tag_rule.go rename to tencentcloud/services/tcr/resource_tc_tcr_immutable_tag_rule.go index 839d397979..d17fcc8b51 100644 --- a/tencentcloud/resource_tc_tcr_immutable_tag_rule.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_immutable_tag_rule.go @@ -1,6 +1,9 @@ -package tencentcloud +package tcr import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrImmutableTagRule() *schema.Resource { +func ResourceTencentCloudTcrImmutableTagRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrImmutableTagRuleCreate, Read: resourceTencentCloudTcrImmutableTagRuleRead, @@ -90,17 +94,17 @@ func resourceTencentCloudTcrImmutableTagRule() *schema.Resource { } func resourceTencentCloudTcrImmutableTagRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_immutable_tag_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_immutable_tag_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewCreateImmutableTagRulesRequest() registryId string namespaceName string - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) if v, ok := d.GetOk("registry_id"); ok { request.RegistryId = helper.String(v.(string)) @@ -132,10 +136,10 @@ func resourceTencentCloudTcrImmutableTagRuleCreate(d *schema.ResourceData, meta request.Rule = &immutableTagRule } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateImmutableTagRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateImmutableTagRules(request) if e != nil { - return retryError(e) + return tccommon.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,11 +157,11 @@ func resourceTencentCloudTcrImmutableTagRuleCreate(d *schema.ResourceData, meta ruleId := helper.Int64ToStr(*ImmutableTagRules[0].RuleId) - d.SetId(strings.Join([]string{registryId, namespaceName, ruleId}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, namespaceName, ruleId}, tccommon.FILED_SP)) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tcr:%s:uin/:instance/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -168,17 +172,17 @@ func resourceTencentCloudTcrImmutableTagRuleCreate(d *schema.ResourceData, meta } func resourceTencentCloudTcrImmutableTagRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_immutable_tag_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_immutable_tag_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) service := TCRService{client: tcClient} - 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()) } @@ -243,14 +247,14 @@ func resourceTencentCloudTcrImmutableTagRuleRead(d *schema.ResourceData, meta in } func resourceTencentCloudTcrImmutableTagRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_immutable_tag_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_immutable_tag_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcr.NewModifyImmutableTagRulesRequest() - 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()) } @@ -304,10 +308,10 @@ func resourceTencentCloudTcrImmutableTagRuleUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().ModifyImmutableTagRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().ModifyImmutableTagRules(request) if e != nil { - return retryError(e) + return tccommon.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,12 +323,12 @@ func resourceTencentCloudTcrImmutableTagRuleUpdate(d *schema.ResourceData, meta } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -334,14 +338,14 @@ func resourceTencentCloudTcrImmutableTagRuleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTcrImmutableTagRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_immutable_tag_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_immutable_tag_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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TCRService{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/services/tcr/resource_tc_tcr_immutable_tag_rule_test.go b/tencentcloud/services/tcr/resource_tc_tcr_immutable_tag_rule_test.go new file mode 100644 index 0000000000..8d538d3557 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_immutable_tag_rule_test.go @@ -0,0 +1,205 @@ +package tcr_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + "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" +) + +func init() { + resource.AddTestSweepers("tencentcloud_tcr_immutable_tag_rule", &resource.Sweeper{ + Name: "tencentcloud_tcr_immutable_tag_rule", + F: testSweepTcrImmutableTagRule, + }) +} + +// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_immutable_tag_rule +func testSweepTcrImmutableTagRule(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + tcrService := svctcr.NewTCRService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) + + // the non-keep namespace will be removed directly when run sweeper tencentcloud_tcr_namespace + // so... only need to care about the rules under the keep namespace + rules, err := tcrService.DescribeTcrImmutableTagRuleById(ctx, tcacctest.DefaultTCRInstanceId, helper.String(tcacctest.DefaultTCRNamespace), nil) + if err != nil { + return err + } + + for _, rule := range rules { + ruleId := helper.Int64ToStr(*rule.RuleId) + + err = tcrService.DeleteTcrImmutableTagRuleById(ctx, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace, ruleId) + if err != nil { + continue + } + } + return nil +} + +func TestAccTencentCloudTcrImmutableTagRuleResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTcrImmutableTagRuleDestroy, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTcrImmutableTagRule_basic, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + testAccCheckTcrImmutableTagRuleExists("tencentcloud_tcr_immutable_tag_rule.my_rule"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.#"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_pattern", "**"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_decoration", "repoMatches"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_pattern", "v1"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_decoration", "matches"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.disabled", "false"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "namespace_name", tcacctest.DefaultTCRNamespace), + ), + }, + { + Config: fmt.Sprintf(testAccTcrImmutableTagRule_update, tcacctest.DefaultTCRInstanceId, tcacctest.DefaultTCRNamespace), + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeTestCheckFunc( + testAccCheckTcrImmutableTagRuleExists("tencentcloud_tcr_immutable_tag_rule.my_rule"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "id"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.#"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_pattern", "test/*"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.repository_decoration", "repoExcludes"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_pattern", "test/*"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.tag_decoration", "excludes"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "rule.0.disabled", "false"), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "registry_id", tcacctest.DefaultTCRInstanceId), + resource.TestCheckResourceAttr("tencentcloud_tcr_immutable_tag_rule.my_rule", "namespace_name", tcacctest.DefaultTCRNamespace), + ), + }, + { + ResourceName: "tencentcloud_tcr_immutable_tag_rule.my_rule", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTcrImmutableTagRuleDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcr_immutable_tag_rule" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + registryId := idSplit[0] + namespaceName := idSplit[1] + ruleId := idSplit[2] + + rule, err := service.DescribeTcrImmutableTagRuleById(ctx, registryId, &namespaceName, &ruleId) + if err != nil { + return err + } + + if rule != nil || len(rule) > 0 { + return fmt.Errorf("Tcr Immutable Tag Rule still exist, Id: %v", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTcrImmutableTagRuleExists(re string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + rs, ok := s.RootModule().Resources[re] + if !ok { + return fmt.Errorf("Tcr Immutable Tag Rule %s is not found", re) + } + if rs.Primary.ID == "" { + return fmt.Errorf("Tcr Immutable Tag Rule id is not set") + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + registryId := idSplit[0] + namespaceName := idSplit[1] + ruleId := idSplit[2] + + rule, err := service.DescribeTcrImmutableTagRuleById(ctx, registryId, &namespaceName, &ruleId) + if err != nil { + return err + } + + if len(rule) == 0 { + return fmt.Errorf("Tcr Immutable Tag Rule not found, Id: %v", rs.Primary.ID) + } + return nil + } +} + +const testAccTcrImmutableTagRule_basic = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_immutable_tag_rule" "my_rule" { + registry_id = "%s" + namespace_name = "%s" + rule { + repository_pattern = "**" + tag_pattern = "v1" + repository_decoration = "repoMatches" + tag_decoration = "matches" + disabled = false + } + tags = { + "createdBy" = "terraform" + } +} + +` + +const testAccTcrImmutableTagRule_update = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_immutable_tag_rule" "my_rule" { + registry_id = "%s" + namespace_name = "%s" + rule { + repository_pattern = "test/*" + tag_pattern = "test/*" + repository_decoration = "repoExcludes" + tag_decoration = "excludes" + disabled = false + } + tags = { + "createdBy" = "terraform" + } +} + +` diff --git a/tencentcloud/resource_tc_tcr_instance.go b/tencentcloud/services/tcr/resource_tc_tcr_instance.go similarity index 83% rename from tencentcloud/resource_tc_tcr_instance.go rename to tencentcloud/services/tcr/resource_tc_tcr_instance.go index 55c2408276..036f99dcb9 100644 --- a/tencentcloud/resource_tc_tcr_instance.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package tcr import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -13,10 +16,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrInstance() *schema.Resource { +func ResourceTencentCloudTcrInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrInstanceCreate, Read: resourceTencentCloudTcrInstanceRead, @@ -106,19 +110,19 @@ func resourceTencentCloudTcrInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 1, - ValidateFunc: validateIntegerInRange(1, 2), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 2), Description: "Charge type of instance. 1: postpaid; 2: prepaid. Default is postpaid.", }, "instance_charge_type_prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(1), + ValidateFunc: tccommon.ValidateIntegerMin(1), Description: "Length of time to purchase an instance (in month). Must set when registry_charge_type is prepaid.", }, "instance_charge_type_prepaid_renew_flag": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 3), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 3), Description: "Auto renewal flag. 1: manual renewal, 2: automatic renewal, 3: no renewal and no notification. Must set when registry_charge_type is prepaid.", }, //Computed values @@ -158,12 +162,12 @@ func resourceTencentCloudTcrInstance() *schema.Resource { } func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_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() tcrService := TCRService{client: client} var ( @@ -202,10 +206,10 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac params["instance_charge_type_prepaid_renew_flag"] = v.(int) } - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceId, inErr = tcrService.CreateTCRInstance(ctx, name, insType, params) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -216,10 +220,10 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac d.SetId(instanceId) //check creation done - err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := tcrService.DescribeTCRInstanceById(ctx, instanceId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } else if has && *instance.Status == "Running" { instanceStatus = "Running" return nil @@ -237,7 +241,7 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac openPublicOperation, ok := d.GetOk("open_public_operation") operation = openPublicOperation.(bool) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if ok { if operation { inErr = tcrService.ManageTCRExternalEndpoint(ctx, instanceId, "Create") @@ -245,7 +249,7 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac inErr = tcrService.ManageTCRExternalEndpoint(ctx, instanceId, "Delete") } if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } } return nil @@ -256,7 +260,7 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac if raw, ok := d.GetOk("security_policy"); ok && operation { // Waiting for External EndPoint opened - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { var ( status string ) @@ -295,9 +299,9 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("tcr", "instance", region, d.Id()) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("tcr", "instance", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -307,20 +311,20 @@ func resourceTencentCloudTcrInstanceCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_instance.read")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_instance.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var outErr, inErr error - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tcrService := TCRService{client: client} instance, has, outErr := tcrService.DescribeTCRInstanceById(ctx, d.Id()) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, inErr = tcrService.DescribeTCRInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -335,10 +339,10 @@ func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{ publicStatus, has, outErr := tcrService.DescribeExternalEndpointStatus(ctx, d.Id()) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { publicStatus, has, inErr = tcrService.DescribeExternalEndpointStatus(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -375,14 +379,14 @@ func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{ request.RegistryId = helper.String(d.Id()) var securityPolicySet []*tcr.SecurityPolicy - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policySet, inErr := tcrService.DescribeSecurityPolicies(ctx, request) if inErr != nil && publicStatus != "Closed" { expectedErr := "" if publicStatus == "Opening" { expectedErr = tcr.RESOURCENOTFOUND } - return retryError(inErr, expectedErr) + return tccommon.RetryError(inErr, expectedErr) } securityPolicySet = policySet return nil @@ -412,13 +416,13 @@ func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{ replicas := d.Get("replications").([]interface{}) - err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { request := tcr.NewDescribeReplicationInstancesRequest() request.RegistryId = helper.String(d.Id()) request.Limit = helper.IntInt64(100) response, err := tcrService.DescribeReplicationInstances(ctx, request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } for i := range response { item := response[i] @@ -431,7 +435,7 @@ func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{ *item.Status)) } } - replicas = resourceTencentCloudTcrFillReplicas(replicas, response) + replicas = ResourceTencentCloudTcrFillReplicas(replicas, response) return nil }) @@ -453,7 +457,7 @@ func resourceTencentCloudTcrInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_instance.update")() //delete_bucket var ( outErr, inErr error @@ -461,20 +465,20 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac operation bool ) - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() if d.HasChange("open_public_operation") { operation = d.Get("open_public_operation").(bool) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if operation { inErr = tcrService.ManageTCRExternalEndpoint(ctx, instanceId, "Create") } else { inErr = tcrService.ManageTCRExternalEndpoint(ctx, instanceId, "Delete") } if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -486,7 +490,7 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("security_policy") { var err error // Waiting for External EndPoint opened - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { var ( status string ) @@ -538,10 +542,10 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("tcr", "instance", region, d.Id()) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("tcr", "instance", region, d.Id()) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -553,7 +557,7 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac if err := tcrService.ModifyInstance(ctx, d.Id(), instanceType); err != nil { return err } - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, has, err := tcrService.DescribeTCRInstanceById(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) @@ -595,10 +599,10 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac } request.Flag = helper.IntInt64(0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().RenewInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().RenewInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -609,7 +613,7 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac return err } - conf := BuildStateChangeConf([]string{}, []string{"Running"}, 3*readRetryTimeout, time.Second, tcrService.TcrStateRefreshFunc(instanceId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Running"}, 3*tccommon.ReadRetryTimeout, time.Second, tcrService.TcrStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -628,14 +632,14 @@ func resourceTencentCloudTcrInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTcrInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_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() deleteBucket := d.Get("delete_bucket").(bool) - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var inErr, outErr error var has bool @@ -651,14 +655,14 @@ func resourceTencentCloudTcrInstanceDelete(d *schema.ResourceData, meta interfac for i := range replicas { item := replicas[i] - _ = resource.Retry(writeRetryTimeout*5, func() *resource.RetryError { + _ = resource.Retry(tccommon.WriteRetryTimeout*5, func() *resource.RetryError { request := tcr.NewDeleteReplicationInstanceRequest() request.RegistryId = &instanceId request.ReplicationRegistryId = item.ReplicationRegistryId request.ReplicationRegionId = item.ReplicationRegionId err := tcrService.DeleteReplicationInstance(ctx, request) if err != nil { - return retryError(err, tcr.INTERNALERROR_ERRORCONFLICT) + return tccommon.RetryError(err, tcr.INTERNALERROR_ERRORCONFLICT) } return nil }) @@ -666,10 +670,10 @@ func resourceTencentCloudTcrInstanceDelete(d *schema.ResourceData, meta interfac outErr = tcrService.DeleteTCRInstance(ctx, instanceId, deleteBucket) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = tcrService.DeleteTCRInstance(ctx, instanceId, deleteBucket) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -679,10 +683,10 @@ func resourceTencentCloudTcrInstanceDelete(d *schema.ResourceData, meta interfac return outErr } - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = tcrService.DescribeTCRInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if has { inErr = fmt.Errorf("delete tcr instance %s fail, instance still exists from SDK DescribeTcrInstanceById", instanceId) @@ -699,7 +703,7 @@ func resourceTencentCloudTcrInstanceDelete(d *schema.ResourceData, meta interfac } func resourceTencentCloudTcrSecurityPolicyAdd(d *schema.ResourceData, meta interface{}, add []interface{}) error { - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() request := tcr.NewCreateMultipleSecurityPolicyRequest() request.RegistryId = helper.String(d.Id()) @@ -729,7 +733,7 @@ func resourceTencentCloudTcrSecurityPolicyAdd(d *schema.ResourceData, meta inter } func resourceTencentCloudTcrSecurityPolicyRemove(d *schema.ResourceData, meta interface{}, remove []interface{}) error { - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() request := tcr.NewDeleteMultipleSecurityPolicyRequest() request.RegistryId = helper.String(d.Id()) @@ -761,7 +765,7 @@ func resourceTencentCloudTcrSecurityPolicyRemove(d *schema.ResourceData, meta in func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.ResourceData, meta interface{}) error { var errs multierror.Error - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := TCRService{client} o, n := d.GetChange("replications") ov := o.([]interface{}) @@ -792,7 +796,7 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour if synTag, ok := replica["syn_tag"].(bool); ok { request.SyncTag = &synTag } - err := resource.Retry(writeRetryTimeout*5, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout*5, func() *resource.RetryError { _, err := service.CreateReplicationInstance(ctx, request) if err != nil { sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError) @@ -811,7 +815,7 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour return resource.RetryableError(sdkErr) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -836,10 +840,10 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour request.RegistryId = helper.String(d.Id()) request.ReplicationRegistryId = helper.String(id) request.ReplicationRegionId = helper.IntUint64(regionId) - err := resource.Retry(writeRetryTimeout*5, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout*5, func() *resource.RetryError { err := service.DeleteReplicationInstance(ctx, request) if err != nil { - return retryError(err, tcr.INTERNALERROR_ERRCONFLICT) + return tccommon.RetryError(err, tcr.INTERNALERROR_ERRCONFLICT) } return nil }) @@ -854,7 +858,7 @@ func resourceTencentCloudTcrReplicationSet(ctx context.Context, d *schema.Resour return errs.ErrorOrNil() } -func resourceTencentCloudTcrFillReplicas(replicas []interface{}, registries []*tcr.ReplicationRegistry) []interface{} { +func ResourceTencentCloudTcrFillReplicas(replicas []interface{}, registries []*tcr.ReplicationRegistry) []interface{} { replicaRegionIndexes := map[int]int{} for i := range replicas { item := replicas[i].(map[string]interface{}) diff --git a/tencentcloud/resource_tc_tcr_instance_test.go b/tencentcloud/services/tcr/resource_tc_tcr_instance_test.go similarity index 84% rename from tencentcloud/resource_tc_tcr_instance_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_instance_test.go index d9d788a6b1..4cddb0dbe5 100644 --- a/tencentcloud/resource_tc_tcr_instance_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr_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" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + "github.com/stretchr/testify/assert" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -20,11 +25,11 @@ func init() { resource.AddTestSweepers("tencentcloud_tcr_instance", &resource.Sweeper{ Name: "tencentcloud_tcr_instance", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TCRService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctcr.NewTCRService(client) instances, err := service.DescribeTCRInstances(ctx, "", nil) if err != nil { @@ -39,7 +44,7 @@ func init() { if err != nil { created = time.Time{} } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } @@ -56,14 +61,14 @@ func init() { for i := range replicas { item := replicas[i] - _ = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + _ = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { request := tcr.NewDeleteReplicationInstanceRequest() request.RegistryId = &id request.ReplicationRegistryId = item.ReplicationRegistryId request.ReplicationRegionId = item.ReplicationRegionId err := service.DeleteReplicationInstance(ctx, request) if err != nil { - return retryError(err, tcr.INTERNALERROR_ERRORCONFLICT) + return tccommon.RetryError(err, tcr.INTERNALERROR_ERRORCONFLICT) } return nil }) @@ -85,15 +90,15 @@ func init() { func TestAccTencentCloudTcrInstanceResource_basic_and_update(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: testAccCheckTCRInstanceDestroy, Steps: []resource.TestStep{ { Config: testAccTCRInstance_basic, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance", "name", "testacctcrinstance1"), @@ -114,8 +119,8 @@ func TestAccTencentCloudTcrInstanceResource_basic_and_update(t *testing.T) { { Config: testAccTCRInstance_basic_update_remark, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( testAccCheckTCRInstanceExists("tencentcloud_tcr_instance.mytcr_instance"), @@ -130,8 +135,8 @@ func TestAccTencentCloudTcrInstanceResource_basic_and_update(t *testing.T) { { Config: testAccTCRInstance_basic_update_security, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( testAccCheckTCRInstanceExists("tencentcloud_tcr_instance.mytcr_instance"), @@ -143,8 +148,8 @@ func TestAccTencentCloudTcrInstanceResource_basic_and_update(t *testing.T) { { Config: testAccTCRInstance_basic_update_instance_type, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( testAccCheckTCRInstanceExists("tencentcloud_tcr_instance.mytcr_instance"), @@ -159,15 +164,15 @@ func TestAccTencentCloudTcrInstanceResource_basic_and_update(t *testing.T) { func TestAccTencentCloudNeedFixTcrInstanceResource_paypaid(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: testAccCheckTCRInstanceDestroy, Steps: []resource.TestStep{ { Config: testAccTCRInstance_paypaid, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_paypaid", "name", "paypaidtcrinstance"), @@ -182,8 +187,8 @@ func TestAccTencentCloudNeedFixTcrInstanceResource_paypaid(t *testing.T) { { Config: testAccTCRInstance_update_paypaid_period, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance_paypaid", "name", "paypaidtcrinstance"), @@ -208,15 +213,15 @@ func TestAccTencentCloudNeedFixTcrInstanceResource_paypaid(t *testing.T) { func TestAccTencentCloudTcrInstanceResource_replication(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: testAccCheckTCRInstanceDestroy, Steps: []resource.TestStep{ { Config: testAccTCRInstance_replica, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance", "name", "tfreplicas"), @@ -232,8 +237,8 @@ func TestAccTencentCloudTcrInstanceResource_replication(t *testing.T) { { Config: testAccTCRInstance_replica_update, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("tencentcloud_tcr_instance.mytcr_instance", "name", "tfreplicas"), @@ -277,7 +282,7 @@ func TestAccTencentCloudTcrInstanceResource_replica_set(t *testing.T) { }, } - result1 := resourceTencentCloudTcrFillReplicas(inputs, registries1) + result1 := svctcr.ResourceTencentCloudTcrFillReplicas(inputs, registries1) expected1 := []interface{}{ map[string]interface{}{ "id": "a", @@ -311,7 +316,7 @@ func TestAccTencentCloudTcrInstanceResource_replica_set(t *testing.T) { } registries2 = append(registries2, registries1...) registries2 = append(registries2, registries2Incr...) - result2 := resourceTencentCloudTcrFillReplicas(inputs, registries2) + result2 := svctcr.ResourceTencentCloudTcrFillReplicas(inputs, registries2) expected2 := []interface{}{ map[string]interface{}{ "id": "a", @@ -341,9 +346,9 @@ func TestAccTencentCloudTcrInstanceResource_replica_set(t *testing.T) { } func testAccCheckTCRInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcr_instance" { continue @@ -361,8 +366,8 @@ func testAccCheckTCRInstanceDestroy(s *terraform.State) error { func testAccCheckTCRInstanceExists(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 { @@ -372,7 +377,7 @@ func testAccCheckTCRInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("TCR instance id is not set") } - tcrService := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := tcrService.DescribeTCRInstanceById(ctx, rs.Primary.ID) if !has { return fmt.Errorf("TCR instance %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_tcr_manage_replication_operation.go b/tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation.go similarity index 87% rename from tencentcloud/resource_tc_tcr_manage_replication_operation.go rename to tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation.go index b61fff5550..7c467da82a 100644 --- a/tencentcloud/resource_tc_tcr_manage_replication_operation.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation.go @@ -1,16 +1,19 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrManageReplicationOperation() *schema.Resource { +func ResourceTencentCloudTcrManageReplicationOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrManageReplicationOperationCreate, Read: resourceTencentCloudTcrManageReplicationOperationRead, @@ -124,10 +127,10 @@ func resourceTencentCloudTcrManageReplicationOperation() *schema.Resource { } func resourceTencentCloudTcrManageReplicationOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_manage_replication_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_manage_replication_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewManageReplicationRequest() @@ -195,10 +198,10 @@ func resourceTencentCloudTcrManageReplicationOperationCreate(d *schema.ResourceD request.PeerReplicationOption = &peerReplicationOption } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().ManageReplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().ManageReplication(request) if e != nil { - return retryError(e) + return tccommon.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,21 +212,21 @@ func resourceTencentCloudTcrManageReplicationOperationCreate(d *schema.ResourceD return err } - d.SetId(strings.Join([]string{sourceRegistryId, destinationRegistryId, ruleName}, FILED_SP)) + d.SetId(strings.Join([]string{sourceRegistryId, destinationRegistryId, ruleName}, tccommon.FILED_SP)) return resourceTencentCloudTcrManageReplicationOperationRead(d, meta) } func resourceTencentCloudTcrManageReplicationOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_manage_replication_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_manage_replication_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudTcrManageReplicationOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_manage_replication_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_manage_replication_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tcr_manage_replication_operation_test.go b/tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation_test.go similarity index 88% rename from tencentcloud/resource_tc_tcr_manage_replication_operation_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation_test.go index def4ef7b26..aa1a854f57 100644 --- a/tencentcloud/resource_tc_tcr_manage_replication_operation_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_manage_replication_operation_test.go @@ -1,24 +1,26 @@ -package tencentcloud +package tcr_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTcrManageReplicationOperationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccTcrManageReplicationOperation, "sync", time.Now().Nanosecond()), PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tcr_manage_replication_operation.my_replica", "id"), @@ -41,7 +43,7 @@ func TestAccTencentCloudTcrManageReplicationOperationResource_basic(t *testing.T }) } -const testAccTcrManageReplicationOperation = defaultTCRInstanceData + ` +const testAccTcrManageReplicationOperation = tcacctest.DefaultTCRInstanceData + ` resource "tencentcloud_tcr_instance" "mytcr_dest" { name = "tf-test-tcr-%s" diff --git a/tencentcloud/services/tcr/resource_tc_tcr_namespace.go b/tencentcloud/services/tcr/resource_tc_tcr_namespace.go new file mode 100644 index 0000000000..d3594ba778 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_namespace.go @@ -0,0 +1,268 @@ +package tcr + +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 ResourceTencentCloudTcrNamespace() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcrNamespaceCreate, + Read: resourceTencentCloudTcrNamespaceRead, + Update: resourceTencentCloudTcrNamespaceUpdate, + Delete: resourceTencentCLoudTcrNamespaceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the TCR instance.", + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the TCR namespace. Valid length is [2~30]. It can only contain lowercase letters, numbers and separators (`.`, `_`, `-`), and cannot start, end or continue with separators.", + }, + "is_public": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Indicate that the namespace is public or not. Default is `false`.", + }, + "is_auto_scan": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Scanning level, `True` is automatic, `False` is manual. Default is `false`.", + }, + + "is_prevent_vul": { + Type: schema.TypeBool, + Optional: true, + Default: false, + Description: "Blocking switch, `True` is open, `False` is closed. Default is `false`.", + }, + + "severity": { + Type: schema.TypeString, + Optional: true, + Description: "Block vulnerability level, currently only supports `low`, `medium`, `high`.", + }, + + "cve_whitelist_items": { + Type: schema.TypeList, + Optional: true, + Description: "Vulnerability Whitelist.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "cve_id": { + Type: schema.TypeString, + Optional: true, + Description: "Vulnerability Whitelist ID.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudTcrNamespaceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_namespace.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + name = d.Get("name").(string) + instanceId = d.Get("instance_id").(string) + isPublic = d.Get("is_public").(bool) + isAutoScan = d.Get("is_auto_scan").(bool) + isPreventVUL = d.Get("is_prevent_vul").(bool) + severity = d.Get("severity").(string) + whitelistItems = d.Get("cve_whitelist_items").([]interface{}) + outErr, inErr error + ) + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.CreateTCRNameSpace(ctx, instanceId, name, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(instanceId + tccommon.FILED_SP + name) + + return resourceTencentCloudTcrNamespaceRead(d, meta) +} + +func resourceTencentCloudTcrNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_namespace.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + + var ( + isPublic = d.Get("is_public").(bool) + isAutoScan = d.Get("is_auto_scan").(bool) + isPreventVUL = d.Get("is_prevent_vul").(bool) + severity = d.Get("severity").(string) + whitelistItems = d.Get("cve_whitelist_items").([]interface{}) + outErr, inErr error + ) + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + inErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + + return resourceTencentCloudTcrNamespaceRead(d, meta) +} + +func resourceTencentCloudTcrNamespaceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_namespace.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + + var outErr, inErr error + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + namespace, has, outErr := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + namespace, has, inErr = tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", namespace.Name) + _ = d.Set("is_public", namespace.Public) + _ = d.Set("instance_id", instanceId) + _ = d.Set("is_auto_scan", namespace.AutoScan) + _ = d.Set("is_prevent_vul", namespace.PreventVUL) + _ = d.Set("severity", namespace.Severity) + + whiteList := []interface{}{} + if namespace.CVEWhitelistItems != nil { + for _, v := range namespace.CVEWhitelistItems { + cveMap := map[string]interface{}{} + if v.CVEID != nil { + cveMap["cve_id"] = v.CVEID + } + + whiteList = append(whiteList, cveMap) + } + } + _ = d.Set("cve_whitelist_items", whiteList) + + return nil +} + +func resourceTencentCLoudTcrNamespaceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_namespace.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var inErr, outErr error + var has bool + + outErr = tcrService.DeleteTCRNameSpace(ctx, instanceId, namespaceName) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.DeleteTCRNameSpace(ctx, instanceId, namespaceName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) + return resource.RetryableError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + return nil +} diff --git a/tencentcloud/services/tcr/resource_tc_tcr_namespace_test.go b/tencentcloud/services/tcr/resource_tc_tcr_namespace_test.go new file mode 100644 index 0000000000..75d502dbe8 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_namespace_test.go @@ -0,0 +1,204 @@ +package tcr_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_namespace + resource.AddTestSweepers("tencentcloud_tcr_namespace", &resource.Sweeper{ + Name: "tencentcloud_tcr_namespace", + F: func(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + + service := svctcr.NewTCRService(client) + + var filters []*tcr.Filter + filters = append(filters, &tcr.Filter{ + Name: helper.String("RegistryName"), + Values: []*string{helper.String(tcacctest.DefaultTCRInstanceName)}, + }) + + instances, err := service.DescribeTCRInstances(ctx, "", filters) + if err != nil { + return err + } + + if len(instances) == 0 { + return nil + } + + instanceId := *instances[0].RegistryId + + namespaces, err := service.DescribeTCRNameSpaces(ctx, instanceId, "test") + if err != nil { + return err + } + + for i := range namespaces { + n := namespaces[i] + if tcacctest.IsResourcePersist(*n.Name, nil) { + continue + } + err = service.DeleteTCRNameSpace(ctx, instanceId, *n.Name) + if err != nil { + continue + } + } + + return nil + }, + }) +} + +func TestAccTencentCloudTcrNamespace_basic_and_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRNamespaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTCRNamespace_basic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test_ns"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "true"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "true"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "true"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "medium"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxxx"), + ), + }, + { + ResourceName: "tencentcloud_tcr_namespace.mytcr_namespace", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccTCRNamespace_basic_update_remark, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckTCRNamespaceExists("tencentcloud_tcr_namespace.mytcr_namespace"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test2_ns"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "false"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "false"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "false"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "high"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxx"), + ), + }, + }, + }) +} + +func testAccCheckTCRNamespaceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcr_namespace" { + continue + } + 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] + namespaceName := items[1] + _, has, err := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) + if has { + return fmt.Errorf("TCR namespace still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTCRNamespaceExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TCR namespace %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TCR namespace id is not set") + } + 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] + namespaceName := items[1] + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := tcrService.DescribeTCRNameSpaceById(ctx, instanceId, namespaceName) + if !has { + return fmt.Errorf("TCR namespace %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTCRNamespace_basic = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_namespace" "mytcr_namespace" { + instance_id = local.tcr_id + name = "test_ns" + is_public = true + is_auto_scan = true + is_prevent_vul = true + severity = "medium" + cve_whitelist_items { + cve_id = "cve-xxxxx" + } +}` + +const testAccTCRNamespace_basic_update_remark = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_namespace" "mytcr_namespace" { + instance_id = local.tcr_id + name = "test2_ns" + is_public = false + is_auto_scan = false + is_prevent_vul = false + severity = "high" + cve_whitelist_items { + cve_id = "cve-xxxx" + } +}` diff --git a/tencentcloud/services/tcr/resource_tc_tcr_repository.go b/tencentcloud/services/tcr/resource_tc_tcr_repository.go new file mode 100644 index 0000000000..6e4cdce2cb --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_repository.go @@ -0,0 +1,274 @@ +package tcr + +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 ResourceTencentCloudTcrRepository() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcrRepositoryCreate, + Read: resourceTencentCloudTcrRepositoryRead, + Update: resourceTencentCloudTcrRepositoryUpdate, + Delete: resourceTencentCLoudTcrRepositoryDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the TCR instance.", + }, + "namespace_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the TCR namespace.", + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the TCR repository. Valid length is [2~200]. It can only contain lowercase letters, numbers and separators (`.`, `_`, `-`, `/`), and cannot start, end or continue with separators. Support the use of multi-level address formats, such as `sub1/sub2/repo`.", + }, + "brief_desc": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), + Description: "Brief description of the repository. Valid length is [1~100].", + }, + "description": { + Type: schema.TypeString, + Optional: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 1000), + Description: "Description of the repository. Valid length is [1~1000].", + }, + //computed + "is_public": { + Type: schema.TypeBool, + Computed: true, + Description: "Indicate the repository is public or not.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time.", + }, + "update_time": { + Type: schema.TypeString, + Computed: true, + Description: "Last updated time.", + }, + "url": { + Type: schema.TypeString, + Computed: true, + Description: "URL of the repository.", + }, + }, + } +} + +func resourceTencentCloudTcrRepositoryCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_repository.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + name = d.Get("name").(string) + instanceId = d.Get("instance_id").(string) + namespaceName = d.Get("namespace_name").(string) + briefDesc = d.Get("brief_desc").(string) + description = d.Get("description").(string) + outErr, inErr error + ) + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.CreateTCRRepository(ctx, instanceId, namespaceName, name, briefDesc, description) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(instanceId + tccommon.FILED_SP + namespaceName + tccommon.FILED_SP + name) + + return resourceTencentCloudTcrRepositoryRead(d, meta) +} + +func resourceTencentCloudTcrRepositoryUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_repository.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + repositoryName := items[2] + + if d.HasChange("brief_desc") || d.HasChange("description") { + briefDesc := d.Get("brief_desc").(string) + description := d.Get("description").(string) + var outErr, inErr error + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = tcrService.ModifyTCRRepository(ctx, instanceId, namespaceName, repositoryName, briefDesc, description) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + inErr = tcrService.ModifyTCRRepository(ctx, instanceId, namespaceName, repositoryName, briefDesc, description) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudTcrRepositoryRead(d, meta) +} + +func resourceTencentCloudTcrRepositoryRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_repository.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + repositoryName := items[2] + + var outErr, inErr error + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + repository, has, outErr := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + repository, has, inErr = tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", repositoryName) + _ = d.Set("instance_id", instanceId) + _ = d.Set("namespace_name", namespaceName) + _ = d.Set("create_time", repository.CreationTime) + _ = d.Set("update_time", repository.UpdateTime) + _ = d.Set("brief_desc", repository.BriefDescription) + _ = d.Set("description", repository.Description) + _ = d.Set("is_public", repository.Public) + + //get public domain + instance, has, outErr := tcrService.DescribeTCRInstanceById(ctx, instanceId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, has, inErr = tcrService.DescribeTCRInstanceById(ctx, instanceId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + + if has { + _ = d.Set("url", fmt.Sprintf("%s/%s/%s", *instance.PublicDomain, namespaceName, repositoryName)) + } else { + return fmt.Errorf("cannot find instance %s", instanceId) + } + + return nil +} + +func resourceTencentCLoudTcrRepositoryDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_repository.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + namespaceName := items[1] + repositoryName := items[2] + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var inErr, outErr error + var has bool + + outErr = tcrService.DeleteTCRRepository(ctx, instanceId, namespaceName, repositoryName) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.DeleteTCRRepository(ctx, instanceId, namespaceName, repositoryName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) + return resource.RetryableError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + return nil +} diff --git a/tencentcloud/services/tcr/resource_tc_tcr_repository_test.go b/tencentcloud/services/tcr/resource_tc_tcr_repository_test.go new file mode 100644 index 0000000000..20aafbcd96 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_repository_test.go @@ -0,0 +1,196 @@ +package tcr_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func init() { + resource.AddTestSweepers("tencentcloud_tcr_repository", &resource.Sweeper{ + Name: "tencentcloud_tcr_repository", + F: testSweepTCRRepository, + }) +} + +// go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_repository +func testSweepTCRRepository(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + tcrService := svctcr.NewTCRService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var filters []*tcr.Filter + filters = append(filters, &tcr.Filter{ + Name: helper.String("RegistryName"), + Values: []*string{helper.String(tcacctest.DefaultTCRInstanceName)}, + }) + + instances, err := tcrService.DescribeTCRInstances(ctx, "", filters) + if err != nil { + return err + } + + if len(instances) == 0 { + return nil + } + + instanceId := *instances[0].RegistryId + // the non-keep namespace will be removed directly when run sweeper tencentcloud_tcr_namespace + // so... only need to care about the repos under the keep namespace + repos, err := tcrService.DescribeTCRRepositories(ctx, instanceId, "", "") + if err != nil { + return err + } + + for i := range repos { + n := repos[i] + names := strings.Split(*n.Name, "/") + if len(names) != 2 { + continue + } + repoName := names[1] + if tcacctest.IsResourcePersist(repoName, nil) { + continue + } + err = tcrService.DeleteTCRRepository(ctx, instanceId, *n.Namespace, repoName) + if err != nil { + continue + } + } + return nil +} + +func TestAccTencentCloudTcrRepository_basic_and_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRRepositoryDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTCRRepository_basic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "name", "test"), + resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "brief_desc", "111"), + resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "description", "111111111111111111111111111111111111"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "create_time"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "update_time"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_repository.mytcr_repository", "is_public"), + ), + Destroy: false, + }, + { + ResourceName: "tencentcloud_tcr_repository.mytcr_repository", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccTCRRepository_basic_update_remark, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckTCRRepositoryExists("tencentcloud_tcr_repository.mytcr_repository"), + resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "brief_desc", "2222"), + resource.TestCheckResourceAttr("tencentcloud_tcr_repository.mytcr_repository", "description", "211111111111111111111111111111111111"), + ), + }, + }, + }) +} + +func testAccCheckTCRRepositoryDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcr_repository" { + continue + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + namespaceName := items[1] + repositoryName := items[2] + _, has, err := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) + if has { + return fmt.Errorf("TCR repository still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTCRRepositoryExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TCR repository %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TCR repository id is not set") + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + namespaceName := items[1] + repositoryName := items[2] + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := tcrService.DescribeTCRRepositoryById(ctx, instanceId, namespaceName, repositoryName) + if !has { + return fmt.Errorf("TCR repository %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTCRRepository_basic = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_repository" "mytcr_repository" { + instance_id = local.tcr_id + namespace_name = var.tcr_namespace + name = "test" + brief_desc = "111" + description = "111111111111111111111111111111111111" +}` + +const testAccTCRRepository_basic_update_remark = tcacctest.DefaultTCRInstanceData + ` +resource "tencentcloud_tcr_repository" "mytcr_repository" { + instance_id = local.tcr_id + namespace_name = var.tcr_namespace + name = "test" + brief_desc = "2222" + description = "211111111111111111111111111111111111" +}` diff --git a/tencentcloud/resource_tc_tcr_service_account.go b/tencentcloud/services/tcr/resource_tc_tcr_service_account.go similarity index 78% rename from tencentcloud/resource_tc_tcr_service_account.go rename to tencentcloud/services/tcr/resource_tc_tcr_service_account.go index 8c20f73e6a..0a2a8b3f57 100644 --- a/tencentcloud/resource_tc_tcr_service_account.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_service_account.go @@ -1,6 +1,9 @@ -package tencentcloud +package tcr import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrServiceAccount() *schema.Resource { +func ResourceTencentCloudTcrServiceAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrServiceAccountCreate, Read: resourceTencentCloudTcrServiceAccountRead, @@ -98,10 +102,10 @@ func resourceTencentCloudTcrServiceAccount() *schema.Resource { } func resourceTencentCloudTcrServiceAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_service_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_service_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewCreateServiceAccountRequest() @@ -155,10 +159,10 @@ func resourceTencentCloudTcrServiceAccountCreate(d *schema.ResourceData, meta in request.Disable = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateServiceAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateServiceAccount(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -174,17 +178,17 @@ func resourceTencentCloudTcrServiceAccountCreate(d *schema.ResourceData, meta in return fmt.Errorf("The name[%s] return from response is not equal to the name[%s] of tf code.", *response.Response.Name, name) } - d.SetId(strings.Join([]string{registryId, name}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, name}, tccommon.FILED_SP)) pw := response.Response.Password if pw != nil { _ = d.Set("password", *pw) } - 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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tcr:%s:uin/:instance/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -195,16 +199,16 @@ func resourceTencentCloudTcrServiceAccountCreate(d *schema.ResourceData, meta in } func resourceTencentCloudTcrServiceAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_service_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_service_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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{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()) } @@ -257,8 +261,8 @@ func resourceTencentCloudTcrServiceAccountRead(d *schema.ResourceData, meta inte _ = d.Set("disable", ServiceAccount.Disable) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tcr", "instance", tcClient.Region, d.Id()) if err != nil { return err @@ -269,14 +273,14 @@ func resourceTencentCloudTcrServiceAccountRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTcrServiceAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_service_account.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_service_account.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcr.NewModifyServiceAccountRequest() - 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()) } @@ -340,10 +344,10 @@ func resourceTencentCloudTcrServiceAccountUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().ModifyServiceAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().ModifyServiceAccount(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -355,12 +359,12 @@ func resourceTencentCloudTcrServiceAccountUpdate(d *schema.ResourceData, meta in } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tcr", "instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -370,14 +374,14 @@ func resourceTencentCloudTcrServiceAccountUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTcrServiceAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_service_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_service_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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TCRService{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_tcr_service_account_test.go b/tencentcloud/services/tcr/resource_tc_tcr_service_account_test.go similarity index 91% rename from tencentcloud/resource_tc_tcr_service_account_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_service_account_test.go index f8a780dce6..0efeef6392 100644 --- a/tencentcloud/resource_tc_tcr_service_account_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_service_account_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package tcr_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -13,14 +15,14 @@ func TestAccTencentCloudTcrServiceAccountResource_basic(t *testing.T) { loc, _ := time.LoadLocation("Asia/Chongqing") expireTime := time.Now().AddDate(0, 0, 10).In(loc).UnixMilli() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTcrServiceAccount, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tcr_service_account.example", "id"), @@ -39,8 +41,8 @@ func TestAccTencentCloudTcrServiceAccountResource_basic(t *testing.T) { { Config: fmt.Sprintf(testAccTcrServiceAccount_Update, expireTime), PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tcr_service_account.example", "id"), diff --git a/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config.go b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config.go new file mode 100644 index 0000000000..86646c4cb2 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config.go @@ -0,0 +1,170 @@ +package tcr + +import ( + "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" + tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTcrTagRetentionExecutionConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcrTagRetentionExecutionConfigCreate, + Read: resourceTencentCloudTcrTagRetentionExecutionConfigRead, + Update: resourceTencentCloudTcrTagRetentionExecutionConfigUpdate, + Delete: resourceTencentCloudTcrTagRetentionExecutionConfigDelete, + Schema: map[string]*schema.Schema{ + "registry_id": { + Required: true, + Type: schema.TypeString, + Description: "instance id.", + }, + + "retention_id": { + Required: true, + Type: schema.TypeInt, + Description: "retention id.", + }, + + "execution_id": { + Computed: true, + Type: schema.TypeInt, + Description: "execution id.", + }, + + "dry_run": { + Optional: true, + Type: schema.TypeBool, + Description: "Whether to simulate execution, the default value is false, that is, non-simulation execution.", + }, + }, + } +} + +func resourceTencentCloudTcrTagRetentionExecutionConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + registryId string + retentionId string + ) + + if v, ok := d.GetOk("registry_id"); ok { + registryId = v.(string) + } + + if v, ok := d.GetOk("retention_id"); ok { + retentionId = helper.IntToStr(v.(int)) + } + + d.SetId(strings.Join([]string{registryId, retentionId}, tccommon.FILED_SP)) + + return resourceTencentCloudTcrTagRetentionExecutionConfigUpdate(d, meta) +} + +func resourceTencentCloudTcrTagRetentionExecutionConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TCRService{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()) + } + registryId := idSplit[0] + retentionId := idSplit[1] + + TagRetentionExecutionConfig, err := service.DescribeTcrTagRetentionExecutionConfigById(ctx, registryId, retentionId) + if err != nil { + return err + } + + if TagRetentionExecutionConfig == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TcrTagRetentionExecutionConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("registry_id", registryId) + + if TagRetentionExecutionConfig.RetentionId != nil { + _ = d.Set("retention_id", TagRetentionExecutionConfig.RetentionId) + } + + if TagRetentionExecutionConfig.ExecutionId != nil { + _ = d.Set("execution_id", TagRetentionExecutionConfig.ExecutionId) + } + + return nil +} + +func resourceTencentCloudTcrTagRetentionExecutionConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tcr.NewCreateTagRetentionExecutionRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + registryId := idSplit[0] + retentionId := idSplit[1] + + request.RegistryId = ®istryId + request.RetentionId = helper.StrToInt64Point(retentionId) + + if d.HasChange("dry_run") { + if v, ok := d.GetOkExists("dry_run"); ok { + request.DryRun = helper.Bool(v.(bool)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateTagRetentionExecution(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tcr TagRetentionExecutionConfig failed, reason:%+v", logId, err) + return err + } + + service := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Succeed"}, 3*tccommon.ReadRetryTimeout, time.Second, service.TcrTagRetentionExecutionConfigStateRefreshFunc(registryId, retentionId, []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + return resourceTencentCloudTcrTagRetentionExecutionConfigRead(d, meta) +} + +func resourceTencentCloudTcrTagRetentionExecutionConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_execution_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_tcr_tag_retention_execution_config_test.go b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config_test.go similarity index 84% rename from tencentcloud/resource_tc_tcr_tag_retention_execution_config_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config_test.go index be4f40527a..29595e958c 100644 --- a/tencentcloud/resource_tc_tcr_tag_retention_execution_config_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_execution_config_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package tcr_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTcrTagRetentionExecutionConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - // Config: fmt.Sprintf(testAccTcrTagRetentionExecutionConfig, defaultTCRInstanceId), + // Config: fmt.Sprintf(testAccTcrTagRetentionExecutionConfig, tcacctest.DefaultTCRInstanceId), Config: testAccTcrTagRetentionRule_manual, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_tcr_tag_retention_execution_config.config", "id"), diff --git a/tencentcloud/resource_tc_tcr_tag_retention_rule.go b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule.go similarity index 79% rename from tencentcloud/resource_tc_tcr_tag_retention_rule.go rename to tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule.go index ce86b1e47a..8376055973 100644 --- a/tencentcloud/resource_tc_tcr_tag_retention_rule.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr 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" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrTagRetentionRule() *schema.Resource { +func ResourceTencentCloudTcrTagRetentionRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrTagRetentionRuleCreate, Read: resourceTencentCloudTcrTagRetentionRuleRead, @@ -77,16 +80,16 @@ func resourceTencentCloudTcrTagRetentionRule() *schema.Resource { } func resourceTencentCloudTcrTagRetentionRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_rule.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 = tcr.NewCreateTagRetentionRuleRequest() registryId string namespaceName string - tcrService = TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService = TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) if v, ok := d.GetOk("registry_id"); ok { registryId = v.(string) @@ -128,10 +131,10 @@ func resourceTencentCloudTcrTagRetentionRuleCreate(d *schema.ResourceData, meta request.Disabled = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateTagRetentionRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateTagRetentionRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -149,7 +152,7 @@ func resourceTencentCloudTcrTagRetentionRuleCreate(d *schema.ResourceData, meta if TagRetentionRule != nil { retentionId := helper.Int64ToStr(*TagRetentionRule.RetentionId) - d.SetId(strings.Join([]string{registryId, namespaceName, retentionId}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, namespaceName, retentionId}, tccommon.FILED_SP)) } else { log.Printf("[CRITAL]%s TagRetentionRule is nil! Set unique id as empty.", logId) d.SetId("") @@ -159,16 +162,16 @@ func resourceTencentCloudTcrTagRetentionRuleCreate(d *schema.ResourceData, meta } func resourceTencentCloudTcrTagRetentionRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{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()) } @@ -224,16 +227,16 @@ func resourceTencentCloudTcrTagRetentionRuleRead(d *schema.ResourceData, meta in } func resourceTencentCloudTcrTagRetentionRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcr.NewModifyTagRetentionRuleRequest() - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + 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("id is broken,%s", d.Id()) } @@ -283,10 +286,10 @@ func resourceTencentCloudTcrTagRetentionRuleUpdate(d *schema.ResourceData, meta } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().ModifyTagRetentionRule(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().ModifyTagRetentionRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -302,14 +305,14 @@ func resourceTencentCloudTcrTagRetentionRuleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTcrTagRetentionRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_tag_retention_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_tag_retention_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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TCRService{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_tcr_tag_retention_rule_test.go b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule_test.go similarity index 83% rename from tencentcloud/resource_tc_tcr_tag_retention_rule_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule_test.go index 1d8be469d8..fa98148501 100644 --- a/tencentcloud/resource_tc_tcr_tag_retention_rule_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_tag_retention_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr_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" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + "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" @@ -14,15 +18,15 @@ import ( func TestAccTencentCloudTcrTagRetentionRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTCRTagRetentionRuleDestroy, Steps: []resource.TestStep{ { Config: testAccTcrTagRetentionRule, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( testAccCheckTCRTagRetentionRuleExists("tencentcloud_tcr_tag_retention_rule.my_rule"), @@ -39,8 +43,8 @@ func TestAccTencentCloudTcrTagRetentionRuleResource_basic(t *testing.T) { { Config: testAccTcrTagRetentionRule_update, PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( testAccCheckTCRTagRetentionRuleExists("tencentcloud_tcr_tag_retention_rule.my_rule"), @@ -64,16 +68,16 @@ func TestAccTencentCloudTcrTagRetentionRuleResource_basic(t *testing.T) { } func testAccCheckTCRTagRetentionRuleDestroy(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 := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcr_tag_retention_rule" { 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) } @@ -100,9 +104,9 @@ func testAccCheckTCRTagRetentionRuleDestroy(s *terraform.State) error { func testAccCheckTCRTagRetentionRuleExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -112,7 +116,7 @@ func testAccCheckTCRTagRetentionRuleExists(re string) resource.TestCheckFunc { return fmt.Errorf("Tcr Tag Retention Rule 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/services/tcr/resource_tc_tcr_token.go b/tencentcloud/services/tcr/resource_tc_tcr_token.go new file mode 100644 index 0000000000..14a6524a70 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_token.go @@ -0,0 +1,248 @@ +package tcr + +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 ResourceTencentCloudTcrToken() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTcrTokenCreate, + Read: resourceTencentCloudTcrTokenRead, + Update: resourceTencentCloudTcrTokenUpdate, + Delete: resourceTencentCLoudTcrTokenDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the TCR instance.", + }, + "enable": { + Type: schema.TypeBool, + Optional: true, + Default: true, + Description: "Indicate to enable this token or not.", + }, + "description": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Description of the token. Valid length is [0~255].", + }, + //computed + "token_id": { + Type: schema.TypeString, + Computed: true, + Description: "Sub ID of the TCR token. The full ID of token format like `instance_id#token_id`.", + }, + "token": { + Type: schema.TypeString, + Computed: true, + Description: "The content of the token.", + }, + "user_name": { + Type: schema.TypeString, + Computed: true, + Description: "User name of the token.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time.", + }, + }, + } +} + +func resourceTencentCloudTcrTokenCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_token.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + instanceId = d.Get("instance_id").(string) + enable = d.Get("enable").(bool) + description = d.Get("description").(string) + tokenId, token, userName string + outErr, inErr error + ) + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + tokenId, token, userName, inErr = tcrService.CreateTCRLongTermToken(ctx, instanceId, description) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(instanceId + tccommon.FILED_SP + tokenId) + _ = d.Set("token", token) + _ = d.Set("user_name", userName) + + if !enable { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudTcrTokenRead(d, meta) +} + +func resourceTencentCloudTcrTokenUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_token.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + tokenId := items[1] + + if d.HasChange("enable") { + enable := d.Get("enable").(bool) + var outErr, inErr error + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + inErr = tcrService.ModifyTCRLongTermToken(ctx, instanceId, tokenId, enable) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudTcrTokenRead(d, meta) +} + +func resourceTencentCloudTcrTokenRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_token.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + tokenId := items[1] + + var outErr, inErr error + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + token, has, outErr := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + token, has, inErr = tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("token_id", tokenId) + _ = d.Set("create_time", token.CreatedAt) + _ = d.Set("description", token.Desc) + _ = d.Set("enable", token.Enabled) + _ = d.Set("instance_id", instanceId) + + return nil +} + +func resourceTencentCLoudTcrTokenDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tcr_token.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + resourceId := d.Id() + items := strings.Split(resourceId, tccommon.FILED_SP) + if len(items) != 2 { + return fmt.Errorf("invalid ID %s", resourceId) + } + + instanceId := items[0] + tokenId := items[1] + + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var inErr, outErr error + var has bool + + outErr = tcrService.DeleteTCRLongTermToken(ctx, instanceId, tokenId) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = tcrService.DeleteTCRLongTermToken(ctx, instanceId, tokenId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr = tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + inErr = fmt.Errorf("delete tcr namespace %s fail, namespace still exists from SDK DescribeTcrNamespaceById", resourceId) + return resource.RetryableError(inErr) + } + return nil + }) + + if outErr != nil { + return outErr + } + + return nil +} diff --git a/tencentcloud/services/tcr/resource_tc_tcr_token_test.go b/tencentcloud/services/tcr/resource_tc_tcr_token_test.go new file mode 100644 index 0000000000..892990d775 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_token_test.go @@ -0,0 +1,193 @@ +package tcr_test + +import ( + "context" + "fmt" + "log" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-shanghai -sweep-run=tencentcloud_tcr_token + resource.AddTestSweepers("tencentcloud_tcr_token", &resource.Sweeper{ + Name: "tencentcloud_tcr_token", + F: func(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + + service := svctcr.NewTCRService(client) + + var filters []*tcr.Filter + filters = append(filters, &tcr.Filter{ + Name: helper.String("RegistryName"), + Values: []*string{helper.String(tcacctest.DefaultTCRInstanceName)}, + }) + + instances, err := service.DescribeTCRInstances(ctx, "", filters) + if err != nil { + return err + } + + if len(instances) == 0 { + return nil + } + + instanceId := *instances[0].RegistryId + + tokens, err := service.DescribeTCRTokens(ctx, instanceId, "") + if err != nil { + return err + } + + for i := range tokens { + token := tokens[i] + id := *token.Id + created, err := time.Parse(time.RFC3339, *token.CreatedAt) + if err != nil { + created = time.Time{} + } + if tcacctest.IsResourcePersist("", &created) { + continue + } + log.Printf("%s -> %s (%s) will delete", instanceId, id, *token.Desc) + err = service.DeleteTCRLongTermToken(ctx, instanceId, id) + if err != nil { + continue + } + } + + return nil + }, + }) +} + +func TestAccTencentCloudTcrToken_basic_and_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRTokenDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTCRToken_basic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "description", "test token"), + resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "enable", "true"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "token_id"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "create_time"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "token"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_token.mytcr_token", "user_name"), + ), + Destroy: false, + }, + { + ResourceName: "tencentcloud_tcr_token.mytcr_token", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"token", "user_name"}, + }, + { + Config: testAccTCRToken_basic_update_remark, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckTCRTokenExists("tencentcloud_tcr_token.mytcr_token"), + resource.TestCheckResourceAttr("tencentcloud_tcr_token.mytcr_token", "enable", "false"), + ), + }, + }, + }) +} + +func testAccCheckTCRTokenDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcr_token" { + continue + } + 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] + tokenId := items[1] + _, has, err := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) + if has { + return fmt.Errorf("TCR token still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTCRTokenExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("TCR token %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("TCR token id is not set") + } + 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] + tokenId := items[1] + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := tcrService.DescribeTCRLongTermTokenById(ctx, instanceId, tokenId) + if !has { + return fmt.Errorf("TCR token %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTCRToken_basic = tcacctest.DefaultTCRInstanceData + ` +resource "tencentcloud_tcr_token" "mytcr_token" { + instance_id = local.tcr_id + description = "test token" +}` + +const testAccTCRToken_basic_update_remark = tcacctest.DefaultTCRInstanceData + ` + +resource "tencentcloud_tcr_token" "mytcr_token" { + instance_id = local.tcr_id + description = "test token" + enable = false +}` diff --git a/tencentcloud/resource_tc_tcr_vpc_attachment.go b/tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment.go similarity index 79% rename from tencentcloud/resource_tc_tcr_vpc_attachment.go rename to tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment.go index a7595edced..b52d042426 100644 --- a/tencentcloud/resource_tc_tcr_vpc_attachment.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment.go @@ -1,10 +1,12 @@ -package tencentcloud +package tcr import ( "context" "fmt" "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" @@ -12,7 +14,7 @@ import ( tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" ) -func resourceTencentCloudTcrVpcAttachment() *schema.Resource { +func ResourceTencentCloudTcrVpcAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrVpcAttachmentCreate, Read: resourceTencentCloudTcrVpcAttachmentRead, @@ -85,12 +87,12 @@ func resourceTencentCloudTcrVpcAttachment() *schema.Resource { } func resourceTencentCloudTcrVpcAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_vpc_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_vpc_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) - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( instanceId = d.Get("instance_id").(string) @@ -102,10 +104,10 @@ func resourceTencentCloudTcrVpcAttachmentCreate(d *schema.ResourceData, meta int has bool ) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = tcrService.CreateTCRVPCAttachment(ctx, instanceId, vpcId, subnetId, regionId, regionName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -113,14 +115,14 @@ func resourceTencentCloudTcrVpcAttachmentCreate(d *schema.ResourceData, meta int return outErr } - d.SetId(instanceId + FILED_SP + vpcId + FILED_SP + subnetId) + d.SetId(instanceId + tccommon.FILED_SP + vpcId + tccommon.FILED_SP + subnetId) //check exist //the attachment takes effect with a minute - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if !has { inErr = fmt.Errorf("create tcr vpcAccess %s fail, vpcAccess is not exists from SDK DescribeTcrVpcAttachmentById", instanceId) @@ -150,13 +152,13 @@ func resourceTencentCloudTcrVpcAttachmentCreate(d *schema.ResourceData, meta int } func resourceTencentCloudTcrVpcAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_vpc_attachment.read")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_vpc_attachment.read")() - 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) if len(items) != 3 { return fmt.Errorf("invalid ID %s", resourceId) } @@ -166,13 +168,13 @@ func resourceTencentCloudTcrVpcAttachmentRead(d *schema.ResourceData, meta inter subnetId := items[2] var outErr, inErr error - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} vpcAccess, has, outErr := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { vpcAccess, has, inErr = tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -209,12 +211,12 @@ func resourceTencentCloudTcrVpcAttachmentRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTcrVpcAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_vpc_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_vpc_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) - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( instanceId = d.Get("instance_id").(string) @@ -257,15 +259,15 @@ func resourceTencentCloudTcrVpcAttachmentUpdate(d *schema.ResourceData, meta int } func resourceTencentCLoudTcrVpcAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_vpc_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_vpc_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) resourceId := d.Id() regionId := d.Get("region_id").(int) regionName := d.Get("region_name").(string) - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) if len(items) != 3 { return fmt.Errorf("invalid ID %s", resourceId) } @@ -274,17 +276,17 @@ func resourceTencentCLoudTcrVpcAttachmentDelete(d *schema.ResourceData, meta int vpcId := items[1] subnetId := items[2] - tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + tcrService := TCRService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var inErr, outErr error var has bool outErr = tcrService.DeleteTCRVPCAttachment(ctx, instanceId, vpcId, subnetId, regionId, regionName) if outErr != nil { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = tcrService.DeleteTCRVPCAttachment(ctx, instanceId, vpcId, subnetId, regionId, regionName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -294,10 +296,10 @@ func resourceTencentCLoudTcrVpcAttachmentDelete(d *schema.ResourceData, meta int return outErr } - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr = tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if has { inErr = fmt.Errorf("delete tcr vpcAccess %s fail, vpcAccess still exists from SDK DescribeTcrVpcAttachmentById", resourceId) @@ -314,10 +316,10 @@ func resourceTencentCLoudTcrVpcAttachmentDelete(d *schema.ResourceData, meta int } func WaitForAccessIpExists(ctx context.Context, tcrService TCRService, instanceId string, vpcId string, subnetId string) (accessIp string, errRet error) { - errRet = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, has, inErr := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if !has { inErr = fmt.Errorf("%s create tcr vpcAccess %s fail, vpcAccess is not exists from SDK DescribeTcrVpcAttachmentById", instanceId, vpcId) @@ -340,10 +342,10 @@ func EnableTcrVpcDns(ctx context.Context, tcrService TCRService, instanceId stri return err } - outErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tcrService.CreateTcrVpcDns(ctx, instanceId, vpcId, accessIp, usePublicDomain, regionName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -357,10 +359,10 @@ func DisableTcrVpcDns(ctx context.Context, tcrService TCRService, instanceId str return err } - outErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tcrService.DeleteTcrVpcDns(ctx, instanceId, vpcId, accessIp, usePublicDomain, regionName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -369,10 +371,10 @@ func DisableTcrVpcDns(ctx context.Context, tcrService TCRService, instanceId str } func GetDnsStatus(ctx context.Context, tcrService TCRService, instanceId string, vpcId string, accessIp string, usePublicDomain bool) (status *tcr.VpcPrivateDomainStatus, err error) { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, has, inErr := tcrService.DescribeTcrVpcDnsById(ctx, instanceId, vpcId, accessIp, usePublicDomain) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if !has { inErr = fmt.Errorf("%s get tcr vpc dns status fail, vpc dns is not exists from SDK DescribeTcrVpcDnsById", instanceId) diff --git a/tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment_test.go b/tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment_test.go new file mode 100644 index 0000000000..f6c2d42a01 --- /dev/null +++ b/tencentcloud/services/tcr/resource_tc_tcr_vpc_attachment_test.go @@ -0,0 +1,120 @@ +package tcr_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudTcrVPCAttachment_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTCRVPCAttachmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTCRVPCAttachment_basic, + PreConfig: func() { + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) + }, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckTCRVPCAttachmentExists("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource"), + resource.TestCheckResourceAttrSet("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", "status"), + // this access ip will solve out with very long time + // resource.TestCheckResourceAttrSet("tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", "access_ip"), + ), + // Destroy: false, + }, + { + ResourceName: "tencentcloud_tcr_vpc_attachment.mytcr_vpc_attachment_resource", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTCRVPCAttachmentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tcr_vpc_attachment" { + continue + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + vpcId := items[1] + subnetId := items[2] + + _, has, err := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) + if has { + return fmt.Errorf("vpc attachment still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTCRVPCAttachmentExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("vpc attachment %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("vpc attachment id is not set") + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + vpcId := items[1] + subnetId := items[2] + + tcrService := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := tcrService.DescribeTCRVPCAttachmentById(ctx, instanceId, vpcId, subnetId) + if !has { + return fmt.Errorf("vpc attachment %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTCRVPCAttachment_basic = DefaultTcrVpcSubnets + ` +resource "tencentcloud_tcr_instance" "mytcr_instance" { + name = "test-resource-attach" + instance_type = "basic" + delete_bucket = true +} + +resource "tencentcloud_tcr_vpc_attachment" "mytcr_vpc_attachment_resource" { + instance_id = tencentcloud_tcr_instance.mytcr_instance.id + vpc_id = local.vpc_id + subnet_id = local.subnet_id +}` diff --git a/tencentcloud/resource_tc_tcr_webhook_trigger.go b/tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger.go similarity index 83% rename from tencentcloud/resource_tc_tcr_webhook_trigger.go rename to tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger.go index 640d531b78..58cde741f4 100644 --- a/tencentcloud/resource_tc_tcr_webhook_trigger.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger.go @@ -1,6 +1,9 @@ -package tencentcloud +package tcr import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTcrWebhookTrigger() *schema.Resource { +func ResourceTencentCloudTcrWebhookTrigger() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTcrWebhookTriggerCreate, Read: resourceTencentCloudTcrWebhookTriggerRead, @@ -130,10 +134,10 @@ func resourceTencentCloudTcrWebhookTrigger() *schema.Resource { } func resourceTencentCloudTcrWebhookTriggerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_webhook_trigger.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_webhook_trigger.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tcr.NewCreateWebhookTriggerRequest() @@ -206,10 +210,10 @@ func resourceTencentCloudTcrWebhookTriggerCreate(d *schema.ResourceData, meta in request.Namespace = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().CreateWebhookTrigger(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().CreateWebhookTrigger(request) if e != nil { - return retryError(e) + return tccommon.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,12 +226,12 @@ func resourceTencentCloudTcrWebhookTriggerCreate(d *schema.ResourceData, meta in } triggerId = helper.Int64ToStr(*response.Response.Trigger.Id) - d.SetId(strings.Join([]string{registryId, namespaceName, triggerId}, FILED_SP)) + d.SetId(strings.Join([]string{registryId, namespaceName, triggerId}, tccommon.FILED_SP)) - 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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tcr:%s:uin/:repository/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -238,16 +242,16 @@ func resourceTencentCloudTcrWebhookTriggerCreate(d *schema.ResourceData, meta in } func resourceTencentCloudTcrWebhookTriggerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_webhook_trigger.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_webhook_trigger.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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TCRService{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()) } @@ -334,8 +338,8 @@ func resourceTencentCloudTcrWebhookTriggerRead(d *schema.ResourceData, meta inte // triggerList = append(triggerList, triggerMap) _ = d.Set("trigger", []interface{}{triggerMap}) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tcr", "repository", tcClient.Region, d.Id()) if err != nil { return err @@ -349,14 +353,14 @@ func resourceTencentCloudTcrWebhookTriggerRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTcrWebhookTriggerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_webhook_trigger.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_webhook_trigger.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tcr.NewModifyWebhookTriggerRequest() - 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()) } @@ -440,10 +444,10 @@ func resourceTencentCloudTcrWebhookTriggerUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTCRClient().ModifyWebhookTrigger(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTCRClient().ModifyWebhookTrigger(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -455,12 +459,12 @@ func resourceTencentCloudTcrWebhookTriggerUpdate(d *schema.ResourceData, meta in } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tcr", "repository", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tcr", "repository", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -470,14 +474,14 @@ func resourceTencentCloudTcrWebhookTriggerUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTcrWebhookTriggerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tcr_webhook_trigger.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tcr_webhook_trigger.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 := TCRService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TCRService{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_tcr_webhook_trigger_test.go b/tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger_test.go similarity index 86% rename from tencentcloud/resource_tc_tcr_webhook_trigger_test.go rename to tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger_test.go index da77be9045..a0bf13477d 100644 --- a/tencentcloud/resource_tc_tcr_webhook_trigger_test.go +++ b/tencentcloud/services/tcr/resource_tc_tcr_webhook_trigger_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tcr_test import ( "context" @@ -6,24 +6,29 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctcr "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tcr" + "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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) func TestAccTencentCloudTcrWebhookTriggerResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTCRWebhookTriggerDestroy, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccTCRWebhookTrigger, "webhooktrigger", "webhooktrigger", "webhooktrigger"), PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( testAccCheckTCRWebhookTriggerExists("tencentcloud_tcr_webhook_trigger.my_trigger"), @@ -44,8 +49,8 @@ func TestAccTencentCloudTcrWebhookTriggerResource_basic(t *testing.T) { { Config: fmt.Sprintf(testAccTCRWebhookTrigger_update, "webhooktrigger", "webhooktrigger", "webhooktrigger"), PreConfig: func() { - testAccStepSetRegion(t, "ap-shanghai") - testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepSetRegion(t, "ap-shanghai") + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Check: resource.ComposeTestCheckFunc( testAccCheckTCRWebhookTriggerExists("tencentcloud_tcr_webhook_trigger.my_trigger"), @@ -73,16 +78,16 @@ func TestAccTencentCloudTcrWebhookTriggerResource_basic(t *testing.T) { } func testAccCheckTCRWebhookTriggerDestroy(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 := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tcr_webhook_trigger" { 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) } @@ -109,9 +114,9 @@ func testAccCheckTCRWebhookTriggerDestroy(s *terraform.State) error { func testAccCheckTCRWebhookTriggerExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TCRService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctcr.NewTCRService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -121,7 +126,7 @@ func testAccCheckTCRWebhookTriggerExists(re string) resource.TestCheckFunc { return fmt.Errorf("Tcr web hook trigger 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/service_tencentcloud_tcr.go b/tencentcloud/services/tcr/service_tencentcloud_tcr.go similarity index 96% rename from tencentcloud/service_tencentcloud_tcr.go rename to tencentcloud/services/tcr/service_tencentcloud_tcr.go index 96dd6feb55..86bb9cb36b 100644 --- a/tencentcloud/service_tencentcloud_tcr.go +++ b/tencentcloud/services/tcr/service_tencentcloud_tcr.go @@ -1,25 +1,32 @@ -package tencentcloud +package tcr import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/pkg/errors" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tcr "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr/v20190924" + "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 NewTCRService(client *connectivity.TencentCloudClient) TCRService { + return TCRService{client: client} +} + type TCRService struct { client *connectivity.TencentCloudClient } func (me *TCRService) CreateTCRInstance(ctx context.Context, name string, instanceType string, params map[string]interface{}) (instanceId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewCreateInstanceRequest() defer func() { if errRet != nil { @@ -81,7 +88,7 @@ func (me *TCRService) CreateTCRInstance(ctx context.Context, name string, instan } func (me *TCRService) ManageTCRExternalEndpoint(ctx context.Context, instanceId, operation string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewManageExternalEndpointRequest() defer func() { if errRet != nil { @@ -105,7 +112,7 @@ func (me *TCRService) ManageTCRExternalEndpoint(ctx context.Context, instanceId, } func (me *TCRService) DescribeExternalEndpointStatus(ctx context.Context, instanceId string) (status string, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeExternalEndpointStatusRequest() defer func() { if errRet != nil { @@ -134,7 +141,7 @@ func (me *TCRService) DescribeExternalEndpointStatus(ctx context.Context, instan } func (me *TCRService) DescribeSecurityPolicies(ctx context.Context, request *tcr.DescribeSecurityPoliciesRequest) (policies []*tcr.SecurityPolicy, 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", @@ -160,7 +167,7 @@ func (me *TCRService) DescribeSecurityPolicies(ctx context.Context, request *tcr } func (me *TCRService) DescribeTCRInstanceById(ctx context.Context, instanceId string) (instance *tcr.Registry, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeInstancesRequest() defer func() { if errRet != nil { @@ -200,7 +207,7 @@ func (me *TCRService) DescribeTCRInstanceById(ctx context.Context, instanceId st } func (me *TCRService) DescribeTCRInstances(ctx context.Context, instanceId string, filter []*tcr.Filter) (instanceList []*tcr.Registry, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeInstancesRequest() defer func() { if errRet != nil { @@ -235,7 +242,7 @@ func (me *TCRService) DescribeTCRInstances(ctx context.Context, instanceId strin } func (me *TCRService) DeleteTCRInstance(ctx context.Context, instanceId string, deleteBucket bool) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteInstanceRequest() defer func() { if errRet != nil { @@ -254,7 +261,7 @@ func (me *TCRService) DeleteTCRInstance(ctx context.Context, instanceId string, // name space func (me *TCRService) CreateTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic, isAutoScan, isPreventVUL bool, severity string, whitelistItems []interface{}) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewCreateNamespaceRequest() defer func() { if errRet != nil { @@ -295,7 +302,7 @@ func (me *TCRService) CreateTCRNameSpace(ctx context.Context, instanceId string, } func (me *TCRService) ModifyInstance(ctx context.Context, registryId, registryType string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewModifyInstanceRequest() defer func() { if errRet != nil { @@ -310,7 +317,7 @@ func (me *TCRService) ModifyInstance(ctx context.Context, registryId, registryTy } func (me *TCRService) ModifyTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic, isAutoScan, isPreventVUL bool, severity string, whitelistItems []interface{}) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewModifyNamespaceRequest() defer func() { if errRet != nil { @@ -343,7 +350,7 @@ func (me *TCRService) ModifyTCRNameSpace(ctx context.Context, instanceId string, } func (me *TCRService) DeleteTCRNameSpace(ctx context.Context, instanceId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteNamespaceRequest() defer func() { if errRet != nil { @@ -359,7 +366,7 @@ func (me *TCRService) DeleteTCRNameSpace(ctx context.Context, instanceId string, } func (me *TCRService) DescribeTCRNameSpaces(ctx context.Context, instanceId string, name string) (namespaceList []*tcr.TcrNamespaceInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeNamespacesRequest() defer func() { if errRet != nil { @@ -423,7 +430,7 @@ func (me *TCRService) DescribeTCRNameSpaceById(ctx context.Context, instanceId s // repository func (me *TCRService) CreateTCRRepository(ctx context.Context, instanceId string, namespace string, repositoryName string, briefDesc string, description string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewCreateRepositoryRequest() defer func() { if errRet != nil { @@ -456,7 +463,7 @@ func (me *TCRService) CreateTCRRepository(ctx context.Context, instanceId string } func (me *TCRService) ModifyTCRRepository(ctx context.Context, instanceId string, namespace string, repositoryName string, briefDesc string, description string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewModifyRepositoryRequest() defer func() { if errRet != nil { @@ -480,7 +487,7 @@ func (me *TCRService) ModifyTCRRepository(ctx context.Context, instanceId string } func (me *TCRService) DeleteTCRRepository(ctx context.Context, instanceId string, namespace string, repositoryName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteRepositoryRequest() defer func() { if errRet != nil { @@ -497,7 +504,7 @@ func (me *TCRService) DeleteTCRRepository(ctx context.Context, instanceId string } func (me *TCRService) DescribeTCRRepositories(ctx context.Context, instanceId string, namespace string, repositoryName string) (repositoryList []*tcr.TcrRepositoryInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeRepositoriesRequest() defer func() { if errRet != nil { @@ -564,7 +571,7 @@ func (me *TCRService) DescribeTCRRepositoryById(ctx context.Context, instanceId // longterm token func (me *TCRService) CreateTCRLongTermToken(ctx context.Context, instanceId string, description string) (tokenId string, token string, userName string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewCreateInstanceTokenRequest() defer func() { if errRet != nil { @@ -592,7 +599,7 @@ func (me *TCRService) CreateTCRLongTermToken(ctx context.Context, instanceId str } func (me *TCRService) ModifyTCRLongTermToken(ctx context.Context, instanceId string, tokenId string, enable bool) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewModifyInstanceTokenRequest() defer func() { if errRet != nil { @@ -609,7 +616,7 @@ func (me *TCRService) ModifyTCRLongTermToken(ctx context.Context, instanceId str } func (me *TCRService) DeleteTCRLongTermToken(ctx context.Context, instanceId string, tokenId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteInstanceTokenRequest() defer func() { if errRet != nil { @@ -625,7 +632,7 @@ func (me *TCRService) DeleteTCRLongTermToken(ctx context.Context, instanceId str } func (me *TCRService) DescribeTCRTokens(ctx context.Context, instanceId string, tokenId string) (tokenList []*tcr.TcrInstanceToken, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeInstanceTokenRequest() defer func() { if errRet != nil { @@ -685,7 +692,7 @@ func (me *TCRService) DescribeTCRLongTermTokenById(ctx context.Context, instance func (me *TCRService) CreateTCRVPCAttachment(ctx context.Context, instanceId string, vpcId string, subnetId string, regionId int64, regionName string, ) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewManageInternalEndpointRequest() defer func() { if errRet != nil { @@ -714,7 +721,7 @@ func (me *TCRService) CreateTCRVPCAttachment(ctx context.Context, instanceId str func (me *TCRService) DeleteTCRVPCAttachment(ctx context.Context, instanceId string, vpcId string, subnetId string, regionId int, regionName string, ) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewManageInternalEndpointRequest() defer func() { if errRet != nil { @@ -741,7 +748,7 @@ func (me *TCRService) DeleteTCRVPCAttachment(ctx context.Context, instanceId str } func (me *TCRService) DescribeTCRVPCAttachments(ctx context.Context, instanceId string, vpcId string, subnetId string) (vpcList []*tcr.AccessVpc, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) // sdk has internal error as invalid instance id para result // to avoid error code check // check instance exist first @@ -804,7 +811,7 @@ func (me *TCRService) DescribeTCRVPCAttachmentById(ctx context.Context, instance } func (me *TCRService) CreateTcrVpcDns(ctx context.Context, instanceId string, vpcId string, accessIp string, usePublicDomain bool, regionName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewCreateInternalEndpointDnsRequest() defer func() { if errRet != nil { @@ -830,7 +837,7 @@ func (me *TCRService) CreateTcrVpcDns(ctx context.Context, instanceId string, vp } func (me *TCRService) DeleteTcrVpcDns(ctx context.Context, instanceId string, vpcId string, accessIp string, usePublicDomain bool, regionName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteInternalEndpointDnsRequest() defer func() { if errRet != nil { @@ -856,7 +863,7 @@ func (me *TCRService) DeleteTcrVpcDns(ctx context.Context, instanceId string, vp } func (me *TCRService) DescribeTcrVpcDnsById(ctx context.Context, instanceId string, vpcId string, accessIp string, usePublicDomain bool) (vpcPrivateDomainStatus *tcr.VpcPrivateDomainStatus, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeInternalEndpointDnsStatusRequest() defer func() { if errRet != nil { @@ -892,7 +899,7 @@ func (me *TCRService) DescribeTcrVpcDnsById(ctx context.Context, instanceId stri } func (me *TCRService) CreateReplicationInstance(ctx context.Context, request *tcr.CreateReplicationInstanceRequest) (id 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", @@ -911,13 +918,13 @@ func (me *TCRService) CreateReplicationInstance(ctx context.Context, request *tc startPolling := false - err = resource.Retry(readRetryTimeout*5, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { req := tcr.NewDescribeReplicationInstancesRequest() req.RegistryId = request.RegistryId req.Limit = helper.IntInt64(100) replicas, err := me.DescribeReplicationInstances(ctx, req) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if len(replicas) == 0 { return resource.NonRetryableError(fmt.Errorf("no replica found in registry %s", *request.RegistryId)) @@ -951,7 +958,7 @@ func (me *TCRService) CreateReplicationInstance(ctx context.Context, request *tc } func (me *TCRService) DeleteReplicationInstance(ctx context.Context, request *tcr.DeleteReplicationInstanceRequest) (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", @@ -968,13 +975,13 @@ func (me *TCRService) DeleteReplicationInstance(ctx context.Context, request *tc startPolling := false - err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { req := tcr.NewDescribeReplicationInstancesRequest() req.RegistryId = request.RegistryId req.Limit = helper.IntInt64(100) replicas, err := me.DescribeReplicationInstances(ctx, req) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if len(replicas) == 0 { @@ -1009,7 +1016,7 @@ func (me *TCRService) DeleteReplicationInstance(ctx context.Context, request *tc } func (me *TCRService) DescribeReplicationInstances(ctx context.Context, request *tcr.DescribeReplicationInstancesRequest) (list []*tcr.ReplicationRegistry, 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", @@ -1033,7 +1040,7 @@ func (me *TCRService) DescribeReplicationInstances(ctx context.Context, request } func (me *TCRService) DescribeTcrTagRetentionRuleById(ctx context.Context, registryId, namespaceName string, retentionId *string) (TagRetentionRule *tcr.RetentionPolicy, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeTagRetentionRulesRequest() request.RegistryId = ®istryId @@ -1073,7 +1080,7 @@ func (me *TCRService) DescribeTcrTagRetentionRuleById(ctx context.Context, regis } func (me *TCRService) DeleteTcrTagRetentionRuleById(ctx context.Context, registryId string, retentionId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteTagRetentionRuleRequest() request.RegistryId = ®istryId @@ -1098,7 +1105,7 @@ func (me *TCRService) DeleteTcrTagRetentionRuleById(ctx context.Context, registr } func (me *TCRService) DescribeTcrWebhookTriggerById(ctx context.Context, registryId string, triggerId int64, namespaceName string) (WebhookTrigger *tcr.WebhookTrigger, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeWebhookTriggerRequest() request.RegistryId = ®istryId @@ -1134,7 +1141,7 @@ func (me *TCRService) DescribeTcrWebhookTriggerById(ctx context.Context, registr } func (me *TCRService) DeleteTcrWebhookTriggerById(ctx context.Context, registryId string, namespaceName string, triggerId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteWebhookTriggerRequest() request.RegistryId = ®istryId @@ -1161,7 +1168,7 @@ func (me *TCRService) DeleteTcrWebhookTriggerById(ctx context.Context, registryI func (me *TCRService) DescribeTcrWebhookTriggerLogByFilter(ctx context.Context, param map[string]interface{}) (DescribeWebhookTriggerLog []*tcr.WebhookTriggerLog, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeWebhookTriggerLogRequest() ) @@ -1214,7 +1221,7 @@ func (me *TCRService) DescribeTcrWebhookTriggerLogByFilter(ctx context.Context, } func (me *TCRService) DescribeTcrCustomizedDomainById(ctx context.Context, registryId string, domainName *string) (CustomizedDomain []*tcr.CustomizedDomainInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeInstanceCustomizedDomainRequest() request.RegistryId = ®istryId @@ -1253,7 +1260,7 @@ func (me *TCRService) DescribeTcrCustomizedDomainById(ctx context.Context, regis } func (me *TCRService) DeleteTcrCustomizedDomainById(ctx context.Context, registryId string, domainName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteInstanceCustomizedDomainRequest() request.RegistryId = ®istryId @@ -1279,7 +1286,7 @@ func (me *TCRService) DeleteTcrCustomizedDomainById(ctx context.Context, registr func (me *TCRService) TcrCustomizedDomainStateRefreshFunc(registryId, domainName string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, err := me.DescribeTcrCustomizedDomainById(ctx, registryId, &domainName) if err != nil { @@ -1291,7 +1298,7 @@ func (me *TCRService) TcrCustomizedDomainStateRefreshFunc(registryId, domainName } func (me *TCRService) DescribeTcrImmutableTagRuleById(ctx context.Context, registryId string, namespaceName, ruleId *string) (ImmutableTagRules []*tcr.ImmutableTagRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeImmutableTagRulesRequest() request.RegistryId = ®istryId @@ -1342,7 +1349,7 @@ func (me *TCRService) DescribeTcrImmutableTagRuleById(ctx context.Context, regis } func (me *TCRService) DeleteTcrImmutableTagRuleById(ctx context.Context, registryId string, namespaceName string, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteImmutableTagRulesRequest() request.RegistryId = ®istryId @@ -1369,7 +1376,7 @@ func (me *TCRService) DeleteTcrImmutableTagRuleById(ctx context.Context, registr func (me *TCRService) DescribeTcrImagesByFilter(ctx context.Context, param map[string]interface{}) (Images []*tcr.TcrImageInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeImagesRequest() ) @@ -1432,7 +1439,7 @@ func (me *TCRService) DescribeTcrImagesByFilter(ctx context.Context, param map[s func (me *TCRService) DescribeTcrImageManifestsByFilter(ctx context.Context, param map[string]interface{}) (ImageManifests *tcr.DescribeImageManifestsResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeImageManifestsRequest() ) @@ -1476,7 +1483,7 @@ func (me *TCRService) DescribeTcrImageManifestsByFilter(ctx context.Context, par func (me *TCRService) DescribeTcrTagRetentionExecutionTasksByFilter(ctx context.Context, param map[string]interface{}) (TagRetentionExecutionTasks []*tcr.RetentionTask, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeTagRetentionExecutionTaskRequest() ) @@ -1529,7 +1536,7 @@ func (me *TCRService) DescribeTcrTagRetentionExecutionTasksByFilter(ctx context. } func (me *TCRService) DescribeTcrTagRetentionExecutionConfigById(ctx context.Context, registryId string, retentionId string) (TagRetentionExecutionConfig *tcr.RetentionExecution, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeTagRetentionExecutionRequest() request.RegistryId = ®istryId @@ -1560,7 +1567,7 @@ func (me *TCRService) DescribeTcrTagRetentionExecutionConfigById(ctx context.Con func (me *TCRService) TcrTagRetentionExecutionConfigStateRefreshFunc(registryId string, retentionId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, err := me.DescribeTcrTagRetentionExecutionConfigById(ctx, registryId, retentionId) @@ -1574,7 +1581,7 @@ func (me *TCRService) TcrTagRetentionExecutionConfigStateRefreshFunc(registryId func (me *TCRService) TcrStateRefreshFunc(instanceId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, has, err := me.DescribeTCRInstanceById(ctx, instanceId) @@ -1592,7 +1599,7 @@ func (me *TCRService) TcrStateRefreshFunc(instanceId string, failStates []string func (me *TCRService) DescribeTcrReplicationInstanceCreateTasksByFilter(ctx context.Context, param map[string]interface{}) (ret *tcr.DescribeReplicationInstanceCreateTasksResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeReplicationInstanceCreateTasksRequest() ) @@ -1630,7 +1637,7 @@ func (me *TCRService) DescribeTcrReplicationInstanceCreateTasksByFilter(ctx cont func (me *TCRService) DescribeTcrReplicationInstanceSyncStatusByFilter(ctx context.Context, param map[string]interface{}) (ret *tcr.DescribeReplicationInstanceSyncStatusResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeReplicationInstanceSyncStatusRequest() ) @@ -1680,7 +1687,7 @@ func (me *TCRService) DescribeTcrReplicationInstanceSyncStatusByFilter(ctx conte func (me *TCRService) DescribeTcrTagRetentionExecutionsByFilter(ctx context.Context, param map[string]interface{}) (TagRetentionExecutions []*tcr.RetentionExecution, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tcr.NewDescribeTagRetentionExecutionRequest() ) @@ -1730,7 +1737,7 @@ func (me *TCRService) DescribeTcrTagRetentionExecutionsByFilter(ctx context.Cont } func (me *TCRService) DescribeTcrServiceAccountById(ctx context.Context, registryId string, name string) (ServiceAccount *tcr.ServiceAccount, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDescribeServiceAccountsRequest() request.RegistryId = ®istryId @@ -1769,7 +1776,7 @@ func (me *TCRService) DescribeTcrServiceAccountById(ctx context.Context, registr } func (me *TCRService) DeleteTcrServiceAccountById(ctx context.Context, registryId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tcr.NewDeleteServiceAccountRequest() request.RegistryId = ®istryId diff --git a/tencentcloud/data_source_tc_tdcpg_clusters.go b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters.go similarity index 93% rename from tencentcloud/data_source_tc_tdcpg_clusters.go rename to tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters.go index 6f3375e3fb..69c74912e9 100644 --- a/tencentcloud/data_source_tc_tdcpg_clusters.go +++ b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters.go @@ -1,16 +1,19 @@ -package tencentcloud +package tdcpg 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" tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdcpgClusters() *schema.Resource { +func DataSourceTencentCloudTdcpgClusters() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdcpgClustersRead, Schema: map[string]*schema.Schema{ @@ -223,11 +226,11 @@ func dataSourceTencentCloudTdcpgClusters() *schema.Resource { } func dataSourceTencentCloudTdcpgClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdcpg_clusters.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdcpg_clusters.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, ok := d.GetOk("cluster_id"); ok { @@ -250,13 +253,13 @@ func dataSourceTencentCloudTdcpgClustersRead(d *schema.ResourceData, meta interf paramMap["project_id"] = helper.IntInt64(v.(int)) } - tdcpgService := TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} + tdcpgService := TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var clusterSet []*tdcpg.Cluster - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdcpgService.DescribeTdcpgClustersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterSet = results return nil @@ -383,7 +386,7 @@ func dataSourceTencentCloudTdcpgClustersRead(d *schema.ResourceData, meta interf output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), clusterList); e != nil { + if e := tccommon.WriteToFile(output.(string), clusterList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tdcpg_clusters_test.go b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters_test.go similarity index 76% rename from tencentcloud/data_source_tc_tdcpg_clusters_test.go rename to tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters_test.go index eba4b2e2cb..948b953f8d 100644 --- a/tencentcloud/data_source_tc_tdcpg_clusters_test.go +++ b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_clusters_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package tdcpg_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,19 +13,19 @@ func TestAccTencentCloudTdcpgClustersDataSource(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: testAccCheckTdcpgClusterDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_id, defaultTdcpgClusterId), + Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_id, tcacctest.DefaultTdcpgClusterId), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.id"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.#"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.cluster_name", defaultTdcpgClusterName), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.region", defaultRegion), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.zone", defaultTdcpgZone), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.cluster_name", tcacctest.DefaultTdcpgClusterName), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.region", tcacctest.DefaultRegion), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.zone", tcacctest.DefaultTdcpgZone), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.db_version"), resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.project_id", "0"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.status"), @@ -31,7 +33,7 @@ func TestAccTencentCloudTdcpgClustersDataSource(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.create_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.storage_used"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.storage_limit"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.pay_mode", defaultTdcpgPayMode), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.pay_mode", tcacctest.DefaultTdcpgPayMode), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.auto_renew_flag"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.db_charset"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.instance_count"), @@ -46,43 +48,43 @@ func TestAccTencentCloudTdcpgClustersDataSource(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.endpoint_set.0.private_port"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.db_major_version"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.id", "list.0.db_kernel_version"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.pay_mode", defaultTdcpgPayMode), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.id", "list.0.pay_mode", tcacctest.DefaultTdcpgPayMode), ), }, { - Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_name, defaultTdcpgClusterName), + Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_name, tcacctest.DefaultTdcpgClusterName), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.name"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.name", "list.#"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.cluster_id", defaultTdcpgClusterId), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.cluster_name", defaultTdcpgClusterName), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.region", defaultRegion), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.zone", defaultTdcpgZone), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.cluster_name", tcacctest.DefaultTdcpgClusterName), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.region", tcacctest.DefaultRegion), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.zone", tcacctest.DefaultTdcpgZone), resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.project_id", "0"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.name", "list.0.instance_count"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.pay_mode", defaultTdcpgPayMode), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.name", "list.0.pay_mode", tcacctest.DefaultTdcpgPayMode), ), }, { Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_status, "running"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.status"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.status"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.status", "list.#"), resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.status", "list.0.status", "running"), ), }, { - Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_paymode, defaultTdcpgPayMode), + Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_paymode, tcacctest.DefaultTdcpgPayMode), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.paymode"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.paymode"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.paymode", "list.#"), - resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.paymode", "list.0.pay_mode", defaultTdcpgPayMode), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.paymode", "list.0.pay_mode", tcacctest.DefaultTdcpgPayMode), ), }, { Config: fmt.Sprintf(testAccDataSourceTdcpgClusters_project, "0"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.project"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_clusters.project"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_clusters.project", "list.#"), resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_clusters.project", "list.0.project_id", "0"), ), diff --git a/tencentcloud/data_source_tc_tdcpg_instances.go b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances.go similarity index 89% rename from tencentcloud/data_source_tc_tdcpg_instances.go rename to tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances.go index 362900c708..0270885e5b 100644 --- a/tencentcloud/data_source_tc_tdcpg_instances.go +++ b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances.go @@ -1,16 +1,19 @@ -package tencentcloud +package tdcpg 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" tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdcpgInstances() *schema.Resource { +func DataSourceTencentCloudTdcpgInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdcpgInstancesRead, Schema: map[string]*schema.Schema{ @@ -149,12 +152,12 @@ func dataSourceTencentCloudTdcpgInstances() *schema.Resource { } func dataSourceTencentCloudTdcpgInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdcpg_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdcpg_instances.read")() + 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) clusterId *string ) @@ -179,13 +182,13 @@ func dataSourceTencentCloudTdcpgInstancesRead(d *schema.ResourceData, meta inter paramMap["instance_type"] = helper.String(v.(string)) } - tdcpgService := TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} + tdcpgService := TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceSet []*tdcpg.Instance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdcpgService.DescribeTdcpgInstancesByFilter(ctx, clusterId, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceSet = results return nil @@ -251,7 +254,7 @@ func dataSourceTencentCloudTdcpgInstancesRead(d *schema.ResourceData, meta inter if instance.DBKernelVersion != nil { instanceSetMap["db_kernel_version"] = instance.DBKernelVersion } - ids = append(ids, *instance.ClusterId+FILED_SP+*instance.InstanceId) + ids = append(ids, *instance.ClusterId+tccommon.FILED_SP+*instance.InstanceId) instanceList = append(instanceList, instanceSetMap) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -264,7 +267,7 @@ func dataSourceTencentCloudTdcpgInstancesRead(d *schema.ResourceData, meta inter 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 e } } diff --git a/tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances_test.go b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances_test.go new file mode 100644 index 0000000000..faa255d818 --- /dev/null +++ b/tencentcloud/services/tdcpg/data_source_tc_tdcpg_instances_test.go @@ -0,0 +1,109 @@ +package tdcpg_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudTdcpgInstancesDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_id, tcacctest.DefaultTdcpgClusterId, tcacctest.DefaultTdcpgInstanceId), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.id"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.#", "1"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.instance_id", tcacctest.DefaultTdcpgInstanceId), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.instance_name", tcacctest.DefaultTdcpgInstanceName), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.endpoint_id"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.region", tcacctest.DefaultRegion), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.id", "list.0.zone", tcacctest.DefaultTdcpgZone), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_version"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.status"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.status_desc"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.create_time"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.pay_mode"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.cpu"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.memory"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.instance_type"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_major_version"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.id", "list.0.db_kernel_version"), + ), + }, + { + Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_name, tcacctest.DefaultTdcpgClusterId, tcacctest.DefaultTdcpgInstanceName), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.name"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.#", "1"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.instance_id", tcacctest.DefaultTdcpgInstanceId), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.instance_name", tcacctest.DefaultTdcpgInstanceName), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.name", "list.0.endpoint_id"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.region", tcacctest.DefaultRegion), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.name", "list.0.zone", tcacctest.DefaultTdcpgZone), + ), + }, + { + Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_status, tcacctest.DefaultTdcpgClusterId, "running"), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.status"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.status", "list.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.status", "list.0.endpoint_id"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.status", "list.0.status", "running"), + ), + }, + { + Config: fmt.Sprintf(testAccDataSourceTdcpgInstances_type, tcacctest.DefaultTdcpgClusterId, "RW"), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdcpg_instances.type"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.type", "list.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdcpg_instances.type", "list.0.endpoint_id"), + resource.TestCheckResourceAttr("data.tencentcloud_tdcpg_instances.type", "list.0.instance_type", "RW"), + ), + }, + }, + }) +} + +const testAccDataSourceTdcpgInstances_id = ` + +data "tencentcloud_tdcpg_instances" "id" { + cluster_id = "%s" + instance_id = "%s" + } + +` + +const testAccDataSourceTdcpgInstances_name = ` + +data "tencentcloud_tdcpg_instances" "name" { + cluster_id = "%s" + instance_name = "%s" + } + +` +const testAccDataSourceTdcpgInstances_status = ` + +data "tencentcloud_tdcpg_instances" "status" { + cluster_id = "%s" + status = "%s" + } + +` +const testAccDataSourceTdcpgInstances_type = ` + +data "tencentcloud_tdcpg_instances" "type" { + cluster_id = "%s" + instance_type = "%s" + } + +` diff --git a/tencentcloud/resource_tc_tdcpg_cluster.go b/tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster.go similarity index 81% rename from tencentcloud/resource_tc_tdcpg_cluster.go rename to tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster.go index 5404d048a8..2419f6fb3e 100644 --- a/tencentcloud/resource_tc_tdcpg_cluster.go +++ b/tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster.go @@ -1,17 +1,20 @@ -package tencentcloud +package tdcpg 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" tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdcpgCluster() *schema.Resource { +func ResourceTencentCloudTdcpgCluster() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTdcpgClusterRead, Create: resourceTencentCloudTdcpgClusterCreate, @@ -106,16 +109,16 @@ func resourceTencentCloudTdcpgCluster() *schema.Resource { } func resourceTencentCloudTdcpgClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_cluster.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tdcpg.NewCreateClusterRequest() response *tdcpg.CreateClusterResponse - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx = context.WithValue(context.TODO(), logIdKey, logId) + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clusterId string dealNames []*string ) @@ -172,10 +175,10 @@ func resourceTencentCloudTdcpgClusterCreate(d *schema.ResourceData, meta interfa request.ProjectId = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdcpgClient().CreateCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdcpgClient().CreateCluster(request) if e != nil { - return retryError(e) + return tccommon.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,12 +192,12 @@ func resourceTencentCloudTdcpgClusterCreate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { dealNames = response.Response.DealNameSet resources, e := service.DescribeTdcpgResourceByDealName(ctx, dealNames) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s call api[%s] success, request body [%s], resources [%v]\n", logId, "DescribeTdcpgResourceByDealName", request.ToJsonString(), resources) @@ -213,24 +216,24 @@ func resourceTencentCloudTdcpgClusterCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTdcpgClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_cluster.read")() + 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) cluster *tdcpg.Cluster clusterInstance *tdcpg.Instance - service = TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) // query the cluster clusterId := d.Id() - err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := service.DescribeTdcpgCluster(ctx, &clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if result != nil && result.ClusterSet[0] != nil { @@ -254,10 +257,10 @@ func resourceTencentCloudTdcpgClusterRead(d *schema.ResourceData, meta interface } // query the instance of cluster - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, e := service.DescribeTdcpgInstancesByFilter(ctx, &clusterId, nil) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instances[0] != nil { @@ -298,7 +301,7 @@ func resourceTencentCloudTdcpgClusterRead(d *schema.ResourceData, meta interface } if cluster.PayPeriodEndTime != nil && cluster.CreateTime != nil && *cluster.PayMode == "PREPAID" { - _ = d.Set("period", monthBetweenTwoDates(*cluster.CreateTime, *cluster.PayPeriodEndTime)) + _ = d.Set("period", tccommon.MonthBetweenTwoDates(*cluster.CreateTime, *cluster.PayPeriodEndTime)) } if cluster.StorageLimit != nil { @@ -329,10 +332,10 @@ func resourceTencentCloudTdcpgClusterRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTdcpgClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_cluster.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_cluster.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tdcpg.NewModifyClusterNameRequest() @@ -392,10 +395,10 @@ func resourceTencentCloudTdcpgClusterUpdate(d *schema.ResourceData, meta interfa return fmt.Errorf("`project_id` do not support change now.") } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdcpgClient().ModifyClusterName(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdcpgClient().ModifyClusterName(request) if e != nil { - return retryError(e) + return tccommon.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,13 +415,13 @@ func resourceTencentCloudTdcpgClusterUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTdcpgClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdcpg_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_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 := TdcpgService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() diff --git a/tencentcloud/resource_tc_tdcpg_cluster_test.go b/tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster_test.go similarity index 75% rename from tencentcloud/resource_tc_tdcpg_cluster_test.go rename to tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster_test.go index 62b3e68619..7547d36a1c 100644 --- a/tencentcloud/resource_tc_tdcpg_cluster_test.go +++ b/tencentcloud/services/tdcpg/resource_tc_tdcpg_cluster_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tdcpg_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" + svctdcpg "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdcpg" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -20,10 +24,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_tdcpg_cluster func testSweepTdcpgCluster(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - tdcpgService := TdcpgService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + tdcpgService := svctdcpg.NewTdcpgService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) clusters, err := tdcpgService.DescribeTdcpgClustersByFilter(ctx, nil) if err != nil { @@ -42,11 +46,11 @@ func testSweepTdcpgCluster(r string) error { if status == "deleted" { continue } - if strings.HasPrefix(*delName, defaultTdcpgTestNamePrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if strings.HasPrefix(*delName, tcacctest.DefaultTdcpgTestNamePrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := tdcpgService.DeleteTdcpgClusterById(ctx, delId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -62,22 +66,22 @@ func TestAccTencentCloudTdcpgClusterResource_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: testAccCheckTdcpgClusterDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccTdcpgCluster_postpaid, defaultTdcpgZone, defaultTdcpgTestNamePrefix), + Config: fmt.Sprintf(testAccTdcpgCluster_postpaid, tcacctest.DefaultTdcpgZone, tcacctest.DefaultTdcpgTestNamePrefix), Check: resource.ComposeTestCheckFunc( testAccCheckTdcpgClusterExists("tencentcloud_tdcpg_cluster.cluster"), resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_cluster.cluster", "id"), - resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "zone", defaultTdcpgZone), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "zone", tcacctest.DefaultTdcpgZone), resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "cpu", "1"), resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "memory", "1"), resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_cluster.cluster", "vpc_id"), resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_cluster.cluster", "subnet_id"), resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "pay_mode", "POSTPAID_BY_HOUR"), - resource.TestMatchResourceAttr("tencentcloud_tdcpg_cluster.cluster", "cluster_name", regexp.MustCompile(defaultTdcpgTestNamePrefix)), + resource.TestMatchResourceAttr("tencentcloud_tdcpg_cluster.cluster", "cluster_name", regexp.MustCompile(tcacctest.DefaultTdcpgTestNamePrefix)), resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "db_version", "10.17"), resource.TestCheckResourceAttr("tencentcloud_tdcpg_cluster.cluster", "instance_count", "1"), resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_cluster.cluster", "period"), @@ -96,10 +100,10 @@ func TestAccTencentCloudTdcpgClusterResource_basic(t *testing.T) { } func testAccCheckTdcpgClusterDestroy(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) - tdcpgService := TdcpgService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + tdcpgService := svctdcpg.NewTdcpgService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdcpg_cluster" { continue @@ -123,8 +127,8 @@ func testAccCheckTdcpgClusterDestroy(s *terraform.State) error { func testAccCheckTdcpgClusterExists(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 { @@ -134,7 +138,7 @@ func testAccCheckTdcpgClusterExists(re string) resource.TestCheckFunc { return fmt.Errorf("tdcpg cluster instance id is not set") } - tdcpgService := TdcpgService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + tdcpgService := svctdcpg.NewTdcpgService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ret, err := tdcpgService.DescribeTdcpgCluster(ctx, &rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance.go b/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance.go new file mode 100644 index 0000000000..3ba530a7fc --- /dev/null +++ b/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance.go @@ -0,0 +1,289 @@ +package tdcpg + +import ( + "context" + "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" + tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdcpgInstance() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTdcpgInstanceRead, + Create: resourceTencentCloudTdcpgInstanceCreate, + Update: resourceTencentCloudTdcpgInstanceUpdate, + Delete: resourceTencentCloudTdcpgInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "cluster id.", + }, + + "cpu": { + Type: schema.TypeInt, + Required: true, + Description: "cpu cores.", + }, + + "memory": { + Type: schema.TypeInt, + Required: true, + Description: "memory size.", + }, + + "instance_name": { + Type: schema.TypeString, + Optional: true, + Description: "instance name.", + }, + + "operation_timing": { + Type: schema.TypeString, + Optional: true, + Description: "operation timing, optional value is IMMEDIATE or MAINTAIN_PERIOD.", + }, + }, + } +} + +func resourceTencentCloudTdcpgInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tdcpg.NewCreateClusterInstancesRequest() + response *tdcpg.CreateClusterInstancesResponse + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clusterId string + instanceId string + dealNames []*string + ) + + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("cpu"); ok { + request.CPU = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("memory"); ok { + request.Memory = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdcpgClient().CreateClusterInstances(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("[CRITICAL]%s create tdcpg instance failed, reason:%+v", logId, err) + return err + } + + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + dealNames = response.Response.DealNameSet + resources, e := service.DescribeTdcpgResourceByDealName(ctx, dealNames) + + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s call api[%s] success, request body [%s], resources [%v]\n", + logId, "DescribeTdcpgResourceByDealName", request.ToJsonString(), resources) + } + clusterId = *resources[0].ClusterId + instanceId = *resources[0].InstanceIdSet[0] + return nil + }) + + if err != nil { + log.Printf("[CRITICAL]%s query tdcpg cluster resource by deal name:[%v] failed, reason:%+v", logId, dealNames, err) + return err + } + + d.SetId(clusterId + tccommon.FILED_SP + instanceId) + return resourceTencentCloudTdcpgInstanceRead(d, meta) +} + +func resourceTencentCloudTdcpgInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + instance *tdcpg.Instance + ids = strings.Split(d.Id(), tccommon.FILED_SP) + clusterId = ids[0] + instanceId = ids[1] + ) + + // query the instance of cluster + err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instances, e := service.DescribeTdcpgInstance(ctx, &clusterId, &instanceId) + if e != nil { + return tccommon.RetryError(e) + } + + if instances != nil && instances.InstanceSet != nil { + status := *instances.InstanceSet[0].Status + + if status == "running" { + instance = instances.InstanceSet[0] + return nil + } + + if status == "creating" || status == "recovering" { + return resource.RetryableError(fmt.Errorf("tdcpg instance[%s] status is still creating or recovering, retry...", d.Id())) + } + return resource.NonRetryableError(fmt.Errorf("tdcpg instance[%s] status is invalid, exit!", d.Id())) + } + return resource.RetryableError(fmt.Errorf("can not get tdcpg instance[%s] status, retry...", d.Id())) + }) + if err != nil { + return err + } + + if instance == nil { + d.SetId("") + return fmt.Errorf("resource `instance` %s does not exist", instanceId) + } + + if instance.ClusterId != nil { + _ = d.Set("cluster_id", instance.ClusterId) + } + + if instance.CPU != nil { + _ = d.Set("cpu", instance.CPU) + } + + if instance.Memory != nil { + _ = d.Set("memory", instance.Memory) + } + + if instance.InstanceName != nil { + _ = d.Set("instance_name", instance.InstanceName) + } + + return nil +} + +func resourceTencentCloudTdcpgInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + request = tdcpg.NewModifyClusterInstancesSpecRequest() + ids = strings.Split(d.Id(), tccommon.FILED_SP) + clusterId = ids[0] + instanceId = ids[1] + ) + + request.ClusterId = &clusterId + request.InstanceIdSet = []*string{helper.String(instanceId)} + + if v, ok := d.GetOk("cpu"); ok { + request.CPU = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("memory"); ok { + request.Memory = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("operation_timing"); ok { + request.OperationTiming = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdcpgClient().ModifyClusterInstancesSpec(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("[CRITICAL]%s modify tdcpg instance failed, reason:%+v", logId, err) + return err + } + + // check the instance value to make sure modify successfully. + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instances, e := service.DescribeTdcpgInstance(ctx, &clusterId, &instanceId) + if e != nil { + return tccommon.RetryError(e) + } + + if instances != nil && instances.InstanceSet != nil { + instance := *instances.InstanceSet[0] + + if *instance.Status == "running" { + if int(*instance.CPU) != d.Get("cpu").(int) || int(*instance.Memory) != d.Get("memory").(int) { + return resource.RetryableError(fmt.Errorf("the modify instance[%s] operation still on going, retry...", d.Id())) + } + return nil + } + return resource.NonRetryableError(fmt.Errorf("tdcpg instance[%s] status is invalid, exit!", d.Id())) + } + return resource.RetryableError(fmt.Errorf("can not get tdcpg instance[%s] status, retry...", d.Id())) + }) + + if err != nil { + return err + } + + return resourceTencentCloudTdcpgInstanceRead(d, meta) +} + +func resourceTencentCloudTdcpgInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdcpg_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TdcpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ids = strings.Split(d.Id(), tccommon.FILED_SP) + clusterId = ids[0] + instanceId = ids[1] + ) + + if err := service.DeleteTdcpgInstanceById(ctx, &clusterId, &instanceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance_test.go b/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance_test.go new file mode 100644 index 0000000000..8ac4b5f392 --- /dev/null +++ b/tencentcloud/services/tdcpg/resource_tc_tdcpg_instance_test.go @@ -0,0 +1,193 @@ +package tdcpg_test + +import ( + "context" + "fmt" + "regexp" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdcpg "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdcpg" + + "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" +) + +func init() { + resource.AddTestSweepers("tencentcloud_tdcpg_instance", &resource.Sweeper{ + Name: "tencentcloud_tdcpg_instance", + F: testSweepTdcpgInstance, + }) +} + +// go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_tdcpg_instance +func testSweepTdcpgInstance(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + tdcpgService := svctdcpg.NewTdcpgService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instances, err := tdcpgService.DescribeTdcpgInstancesByFilter(ctx, helper.String(tcacctest.DefaultTdcpgClusterId), nil) + if err != nil { + return err + } + if instances == nil { + return fmt.Errorf("tdcpg instances not exists. clusterId:[%s]", tcacctest.DefaultTdcpgClusterId) + } + + // delete all instances which has specified prefix under the default cluster + for _, v := range instances { + delId := v.InstanceId + delName := v.InstanceName + status := *v.Status + + if status == "running" && strings.HasPrefix(*delName, tcacctest.DefaultTdcpgTestNamePrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := tdcpgService.DeleteTdcpgInstanceById(ctx, helper.String(tcacctest.DefaultTdcpgClusterId), delId) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return fmt.Errorf("[ERROR] delete tdcpg instance %s failed. reason:[%s]", *delId, err.Error()) + } + } + } + return nil +} + +func TestAccTencentCloudTdcpgInstanceResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTdcpgInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccTdcpgInstance_basic, tcacctest.DefaultTdcpgClusterId, tcacctest.DefaultTdcpgTestNamePrefix), + Check: resource.ComposeTestCheckFunc( + testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_instance.instance", "cpu"), + resource.TestCheckResourceAttrSet("tencentcloud_tdcpg_instance.instance", "memory"), + resource.TestMatchResourceAttr("tencentcloud_tdcpg_instance.instance", "instance_name", regexp.MustCompile(tcacctest.DefaultTdcpgTestNamePrefix)), + ), + }, + { + Config: testAccTdcpgInstance_update(), + Check: resource.ComposeTestCheckFunc( + testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cluster_id", tcacctest.DefaultTdcpgClusterId), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "cpu", "2"), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "memory", "4"), + resource.TestMatchResourceAttr("tencentcloud_tdcpg_instance.instance", "instance_name", regexp.MustCompile(tcacctest.DefaultTdcpgTestNamePrefix)), + resource.TestCheckResourceAttr("tencentcloud_tdcpg_instance.instance", "operation_timing", "IMMEDIATE"), + ), + }, + { + PreConfig: func() { //sleep 1 min after update + time.Sleep(time.Minute) + }, + Config: testAccTdcpgInstance_sleep(), + Check: resource.ComposeTestCheckFunc( + testAccCheckTdcpgInstanceExists("tencentcloud_tdcpg_instance.instance"), + ), + }, + { + ResourceName: "tencentcloud_tdcpg_instance.instance", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"operation_timing"}, + }, + }, + }) +} + +func testAccCheckTdcpgInstanceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tdcpgService := svctdcpg.NewTdcpgService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tdcpg_instance" { + continue + } + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + + ret, err := tdcpgService.DescribeTdcpgInstance(ctx, &ids[0], &ids[1]) + if err != nil { + return err + } + + if ret != nil && len(ret.InstanceSet) > 0 { + status := *ret.InstanceSet[0].Status + if status == "deleting" || status == "deleted" || status == "isolated" || status == "isolating" { + return nil + } + return fmt.Errorf("tdcpg instance still exist, id: %v, status: %v", rs.Primary.ID, status) + } + } + return nil +} + +func testAccCheckTdcpgInstanceExists(re string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[re] + if !ok { + return fmt.Errorf("tdcpg instance %s is not found", re) + } + if rs.Primary.ID == "" { + return fmt.Errorf("tdcpg instance id is not set") + } + + tdcpgService := svctdcpg.NewTdcpgService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + ret, err := tdcpgService.DescribeTdcpgInstance(ctx, &ids[0], &ids[1]) + if err != nil { + return err + } + + if ret == nil || len(ret.InstanceSet) == 0 { + return fmt.Errorf("tdcpg instance not found, id: %v", rs.Primary.ID) + } + + return nil + } +} + +const testAccTdcpgInstance_basic = ` + +resource "tencentcloud_tdcpg_instance" "instance" { + cluster_id = "%s" + cpu = 1 + memory = 1 + instance_name = "%sinstance" +} + +` + +func testAccTdcpgInstance_update() string { + return fmt.Sprintf(` + resource "tencentcloud_tdcpg_instance" "instance" { + cluster_id = "%s" + cpu = 2 + memory = 4 + instance_name = "%sinstance" + operation_timing = "IMMEDIATE" + } + `, tcacctest.DefaultTdcpgClusterId, tcacctest.DefaultTdcpgTestNamePrefix) +} + +func testAccTdcpgInstance_sleep() string { + return testAccTdcpgInstance_update() +} diff --git a/tencentcloud/service_tencentcloud_tdcpg.go b/tencentcloud/services/tdcpg/service_tencentcloud_tdcpg.go similarity index 92% rename from tencentcloud/service_tencentcloud_tdcpg.go rename to tencentcloud/services/tdcpg/service_tencentcloud_tdcpg.go index 57b64304d0..a448143091 100644 --- a/tencentcloud/service_tencentcloud_tdcpg.go +++ b/tencentcloud/services/tdcpg/service_tencentcloud_tdcpg.go @@ -1,12 +1,15 @@ -package tencentcloud +package tdcpg import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" tdcpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg/v20211118" + "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" @@ -26,6 +29,10 @@ const ( TDCPG_INSTANCE_FILTER_TYPE = "InstanceType" ) +func NewTdcpgService(client *connectivity.TencentCloudClient) TdcpgService { + return TdcpgService{client: client} +} + type TdcpgService struct { client *connectivity.TencentCloudClient } @@ -33,7 +40,7 @@ type TdcpgService struct { // tdcpg resource func (me *TdcpgService) DescribeTdcpgCluster(ctx context.Context, clusterId *string) (cluster *tdcpg.DescribeClustersResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) ) defer func() { @@ -57,7 +64,7 @@ func (me *TdcpgService) DescribeTdcpgCluster(ctx context.Context, clusterId *str } func (me *TdcpgService) IsolateTdcpgInstanceById(ctx context.Context, clusterId, instanceId *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tdcpg.NewIsolateClusterInstancesRequest() request.ClusterId = clusterId @@ -83,17 +90,17 @@ func (me *TdcpgService) IsolateTdcpgInstanceById(ctx context.Context, clusterId, } func (me *TdcpgService) DeleteTdcpgClusterById(ctx context.Context, clusterId *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) var status string if err := me.IsolateTdcpgClusterById(ctx, clusterId); err != nil { return err } // polling the cluster's status to isolated - err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := me.DescribeTdcpgCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if result != nil { status = *result.ClusterSet[0].Status @@ -133,10 +140,10 @@ func (me *TdcpgService) DeleteTdcpgClusterById(ctx context.Context, clusterId *s } // wait the cluster to be deleted - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := me.DescribeTdcpgCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if result != nil { status = *result.ClusterSet[0].Status @@ -159,7 +166,7 @@ func (me *TdcpgService) DeleteTdcpgClusterById(ctx context.Context, clusterId *s func (me *TdcpgService) DescribeTdcpgInstance(ctx context.Context, clusterId, instanceId *string) (instance *tdcpg.DescribeClusterInstancesResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) ) defer func() { @@ -184,7 +191,7 @@ func (me *TdcpgService) DescribeTdcpgInstance(ctx context.Context, clusterId, in func (me *TdcpgService) DescribeTdcpgResourceByDealName(ctx context.Context, dealNames []*string) (resourceInfo []*tdcpg.ResourceIdInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tdcpg.NewDescribeResourcesByDealNameRequest() ) @@ -216,7 +223,7 @@ func (me *TdcpgService) DescribeTdcpgResourceByDealName(ctx context.Context, dea } func (me *TdcpgService) IsolateTdcpgClusterById(ctx context.Context, clusterId *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tdcpg.NewIsolateClusterRequest() request.ClusterId = clusterId @@ -241,17 +248,17 @@ func (me *TdcpgService) IsolateTdcpgClusterById(ctx context.Context, clusterId * } func (me *TdcpgService) DeleteTdcpgInstanceById(ctx context.Context, clusterId, instanceId *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) var status string if err := me.IsolateTdcpgInstanceById(ctx, clusterId, instanceId); err != nil { return err } // polling the instance's status to isolated - err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := me.DescribeTdcpgInstance(ctx, clusterId, instanceId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if result != nil { status = *result.InstanceSet[0].Status @@ -294,10 +301,10 @@ func (me *TdcpgService) DeleteTdcpgInstanceById(ctx context.Context, clusterId, } // wait the instance to be deleted - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, err := me.DescribeTdcpgInstance(ctx, clusterId, instanceId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if result != nil { status = *result.InstanceSet[0].Status @@ -321,7 +328,7 @@ func (me *TdcpgService) DeleteTdcpgInstanceById(ctx context.Context, clusterId, // tdcpg data-source func (me *TdcpgService) DescribeTdcpgClustersByFilter(ctx context.Context, param map[string]interface{}) (clusters []*tdcpg.Cluster, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tdcpg.NewDescribeClustersRequest() indx = 0 currNumber = 1 @@ -413,7 +420,7 @@ func (me *TdcpgService) DescribeTdcpgClustersByFilter(ctx context.Context, param func (me *TdcpgService) DescribeTdcpgInstancesByFilter(ctx context.Context, clusterId *string, param map[string]interface{}) (instances []*tdcpg.Instance, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tdcpg.NewDescribeClusterInstancesRequest() indx = 0 currNumber = 1 diff --git a/tencentcloud/extension_tdmq.go b/tencentcloud/services/tdmq/extension_tdmq.go similarity index 93% rename from tencentcloud/extension_tdmq.go rename to tencentcloud/services/tdmq/extension_tdmq.go index 6056c3b460..536a331bc6 100644 --- a/tencentcloud/extension_tdmq.go +++ b/tencentcloud/services/tdmq/extension_tdmq.go @@ -1,4 +1,4 @@ -package tencentcloud +package tdmq const ( NoneTopicType = -1 diff --git a/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go b/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go new file mode 100644 index 0000000000..e70ec97f97 --- /dev/null +++ b/tencentcloud/services/tdmq/service_tencentcloud_tdmq.go @@ -0,0 +1,1679 @@ +package tdmq + +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" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +// basic information + +func NewTdmqService(client *connectivity.TencentCloudClient) TdmqService { + return TdmqService{client: client} +} + +type TdmqService struct { + client *connectivity.TencentCloudClient +} + +// ////////api +// tdmq instance + +func (me *TdmqService) DescribeTdmqInstanceById(ctx context.Context, + clusterId string) (info *tdmq.Cluster, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeClustersRequest() + defer 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.ClusterIdList = []*string{&clusterId} + + var response *tdmq.DescribeClustersResponse + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().DescribeClusters(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) + return nil, false, err + } + + if len(response.Response.ClusterSet) < 1 { + return + } + has = true + info = response.Response.ClusterSet[0] + return +} + +func (me *TdmqService) ModifyTdmqInstanceAttribute(ctx context.Context, clusterId, clusterName string, + remark string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewModifyClusterRequest() + defer 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.ClusterId = &clusterId + request.ClusterName = &clusterName + request.Remark = &remark + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().ModifyCluster(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify tdmq failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DeleteTdmqInstance(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteClusterRequest() + defer 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.ClusterId = &clusterId + response, err := me.client.UseTdmqClient().DeleteCluster(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 +} + +// tdmq namespace +func (me *TdmqService) CreateTdmqNamespace(ctx context.Context, environName string, msgTtl uint64, clusterId string, + remark string, retentionPolicy tdmq.RetentionPolicy) (environId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewCreateEnvironmentRequest() + defer 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.EnvironmentId = &environName + request.MsgTTL = &msgTtl + request.ClusterId = &clusterId + request.Remark = &remark + request.RetentionPolicy = &retentionPolicy + + var response *tdmq.CreateEnvironmentResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().CreateEnvironment(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create tdmq namespace failed, reason: %v", logId, err) + errRet = err + return + } + environId = *response.Response.EnvironmentId + return +} + +func (me *TdmqService) DescribeTdmqNamespaceById(ctx context.Context, + environId string, clusterId string) (info *tdmq.Environment, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeEnvironmentsRequest() + defer 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.EnvironmentId = &environId + request.ClusterId = &clusterId + + var response *tdmq.DescribeEnvironmentsResponse + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().DescribeEnvironments(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) + return nil, false, err + } + + if len(response.Response.EnvironmentSet) < 1 { + return + } + has = true + info = response.Response.EnvironmentSet[0] + return +} + +func (me *TdmqService) ModifyTdmqNamespaceAttribute(ctx context.Context, environId string, msgTtl uint64, + remark string, clusterId string, retentionPolicy *tdmq.RetentionPolicy) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewModifyEnvironmentAttributesRequest() + defer 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.EnvironmentId = &environId + request.MsgTTL = &msgTtl + request.Remark = &remark + request.ClusterId = &clusterId + request.RetentionPolicy = retentionPolicy + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().ModifyEnvironmentAttributes(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify tdmq namespace failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DeleteTdmqNamespace(ctx context.Context, environId string, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteEnvironmentsRequest() + defer 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.EnvironmentIds = []*string{&environId} + request.ClusterId = &clusterId + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().DeleteEnvironments(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete tdmq namespace failed, reason: %v", logId, err) + return err + } + return +} + +// tdmq topic +func (me *TdmqService) CreateTdmqTopic(ctx context.Context, environId string, topicName string, partitions uint64, + topicType int64, remark string, clusterId string, pulsarTopicType int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewCreateTopicRequest() + defer 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.EnvironmentId = &environId + request.TopicName = &topicName + request.Partitions = &partitions + if topicType != NoneTopicType { + request.TopicType = common.Uint64Ptr(uint64(topicType)) + } + request.Remark = &remark + request.ClusterId = &clusterId + if pulsarTopicType != NonePulsarTopicType { + request.PulsarTopicType = &pulsarTopicType + } + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().CreateTopic(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) + errRet = err + return + } + return +} + +func (me *TdmqService) DescribeTdmqTopicById(ctx context.Context, + environId string, topicName string, clusterId string) (info *tdmq.Topic, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeTopicsRequest() + defer 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.EnvironmentId = &environId + request.TopicName = &topicName + request.ClusterId = &clusterId + + var response *tdmq.DescribeTopicsResponse + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().DescribeTopics(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read tdmq failed, reason: %v", logId, err) + return nil, false, err + } + + if len(response.Response.TopicSets) < 1 { + return + } + has = true + info = response.Response.TopicSets[0] + return +} + +func (me *TdmqService) ModifyTdmqTopicAttribute(ctx context.Context, environId string, topicName string, + partitions uint64, remark string, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewModifyTopicRequest() + defer 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.EnvironmentId = &environId + request.TopicName = &topicName + request.Partitions = &partitions + request.Remark = &remark + request.ClusterId = &clusterId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().ModifyTopic(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify tdmq topic failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DeleteTdmqTopic(ctx context.Context, environId string, topicName string, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteTopicsRequest() + defer 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 ( + topicRecord tdmq.TopicRecord + ) + topicRecord.TopicName = &topicName + topicRecord.EnvironmentId = &environId + request.TopicSets = []*tdmq.TopicRecord{&topicRecord} + request.ClusterId = &clusterId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().DeleteTopics(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete tdmq topic failed, reason: %v", logId, err) + return err + } + return +} + +// tdmq role +func (me *TdmqService) CreateTdmqRole(ctx context.Context, roleName string, clusterId string, + remark string) (roleId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewCreateRoleRequest() + defer 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.RoleName = &roleName + request.ClusterId = &clusterId + request.Remark = &remark + + var response *tdmq.CreateRoleResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().CreateRole(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) + errRet = err + return + } + roleId = *response.Response.RoleName + return +} + +func (me *TdmqService) DescribeTdmqRoleById(ctx context.Context, + roleName string, clusterId string) (info *tdmq.Role, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeRolesRequest() + defer 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.RoleName = &roleName + request.ClusterId = &clusterId + + var response *tdmq.DescribeRolesResponse + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().DescribeRoles(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read tdmq role failed, reason: %v", logId, err) + return nil, false, err + } + + if len(response.Response.RoleSets) < 1 { + return + } + has = true + info = response.Response.RoleSets[0] + return +} + +func (me *TdmqService) ModifyTdmqRoleAttribute(ctx context.Context, roleName string, clusterId string, + remark string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewModifyRoleRequest() + defer 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.RoleName = &roleName + request.ClusterId = &clusterId + request.Remark = &remark + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().ModifyRole(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify tdmq role failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DeleteTdmqRole(ctx context.Context, roleName string, cluserId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteRolesRequest() + defer 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.RoleNames = []*string{&roleName} + request.ClusterId = &cluserId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().DeleteRoles(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete tdmq roles failed, reason: %v", logId, err) + return err + } + return +} + +// tdmq role +func (me *TdmqService) CreateTdmqNamespaceRoleAttachment(ctx context.Context, environId string, + roleName string, permissions []*string, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewCreateEnvironmentRoleRequest() + defer 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.EnvironmentId = &environId + request.RoleName = &roleName + request.Permissions = permissions + request.ClusterId = &clusterId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().CreateEnvironmentRole(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s create tdmq topic failed, reason: %v", logId, err) + errRet = err + return + } + return +} + +func (me *TdmqService) DescribeTdmqNamespaceRoleAttachment(ctx context.Context, + environId string, roleName string, clusterId string) (info *tdmq.EnvironmentRole, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeEnvironmentRolesRequest() + defer 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.EnvironmentId = &environId + request.RoleName = &roleName + request.ClusterId = &clusterId + + var response *tdmq.DescribeEnvironmentRolesResponse + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseTdmqClient().DescribeEnvironmentRoles(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read tdmq environment role failed, reason: %v", logId, err) + return nil, false, err + } + + if len(response.Response.EnvironmentRoleSets) < 1 { + return + } + has = true + info = response.Response.EnvironmentRoleSets[0] + return +} + +func (me *TdmqService) ModifyTdmqNamespaceRoleAttachment(ctx context.Context, + environId string, roleName string, permissions []*string, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewModifyEnvironmentRoleRequest() + defer 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.EnvironmentId = &environId + request.RoleName = &roleName + request.ClusterId = &clusterId + request.Permissions = permissions + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().ModifyEnvironmentRole(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify tdmq environment role failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DeleteTdmqNamespaceRoleAttachment(ctx context.Context, environId string, + roleName string, cluserId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteEnvironmentRolesRequest() + defer 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.EnvironmentId = &environId + request.RoleNames = []*string{&roleName} + request.ClusterId = &cluserId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTdmqClient().DeleteEnvironmentRoles(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete tdmq environments roles failed, reason: %v", logId, err) + return err + } + return +} + +func (me *TdmqService) DescribeTdmqProfessionalClusterById(ctx context.Context, clusterId string) (professionalCluster *tdmq.PulsarProClusterInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribePulsarProInstanceDetailRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribePulsarProInstanceDetail(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + professionalCluster = response.Response.ClusterInfo + return +} + +func (me *TdmqService) DeleteTdmqProfessionalClusterById(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDeleteProClusterRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteProCluster(request) + if err != nil { + 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 *TdmqService) DescribePulsarProInstances(ctx context.Context, clusterId string) (professionalCluster *tdmq.PulsarProInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribePulsarProInstancesRequest() + + filter := tdmq.Filter{ + Name: helper.String("InstanceIds"), + Values: []*string{&clusterId}, + } + request.Filters = []*tdmq.Filter{&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([]*tdmq.PulsarProInstance, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribePulsarProInstances(request) + if err != nil { + errRet = err + return + } + 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.Instances) < 1 { + break + } + instances = append(instances, response.Response.Instances...) + if len(response.Response.Instances) < int(limit) { + break + } + + offset += limit + + if response == nil || len(response.Response.Instances) < 1 { + return + } + } + + professionalCluster = instances[0] + return +} + +func (me *TdmqService) TdmqProfessionalClusterStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribePulsarProInstances(ctx, clusterId) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(helper.UInt64ToStrPoint(*object.Status)), nil + } +} + +func (me *TdmqService) DescribeTdmqEnvironmentAttributesByFilter(ctx context.Context, param map[string]interface{}) (environmentAttributes *tdmq.DescribeEnvironmentAttributesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeEnvironmentAttributesRequest() + ) + + defer 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 == "EnvironmentId" { + request.EnvironmentId = v.(*string) + } + + if k == "ClusterId" { + request.ClusterId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeEnvironmentAttributes(request) + if err != nil { + errRet = err + return + } + + 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 + } + + environmentAttributes = response.Response + return +} + +func (me *TdmqService) DescribeTdmqPublisherSummaryByFilter(ctx context.Context, param map[string]interface{}) (publisherSummary *tdmq.DescribePublisherSummaryResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribePublisherSummaryRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + if k == "Namespace" { + request.Namespace = v.(*string) + } + if k == "Topic" { + request.Topic = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribePublisherSummary(request) + if err != nil { + errRet = err + return + } + 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 + } + + publisherSummary = response.Response + + return +} + +func (me *TdmqService) DescribeTdmqPublishersByFilter(ctx context.Context, param map[string]interface{}) (publishers []*tdmq.Publisher, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribePublishersRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + if k == "Namespace" { + request.Namespace = v.(*string) + } + if k == "Topic" { + request.Topic = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*tdmq.Filter) + } + if k == "Sort" { + request.Sort = v.(*tdmq.Sort) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 100 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribePublishers(request) + if err != nil { + errRet = err + return + } + 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.TotalCount == 0 { + break + } + + publishers = append(publishers, response.Response.Publishers...) + if len(response.Response.Publishers) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqSubscriptionAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (subscriptionAttachment *tdmq.Subscription, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribeSubscriptionsRequest() + request.EnvironmentId = &environmentId + request.TopicName = &Topic + request.SubscriptionName = &subscriptionName + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeSubscriptions(request) + if err != nil { + errRet = err + 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.TotalCount == 0 { + return + } + + subscriptionAttachment = response.Response.SubscriptionSets[0] + return +} + +func (me *TdmqService) GetTdmqTopicsAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribeTopicsRequest() + topicRetry := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "RETRY") + topicDLQ := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "DLQ") + + request.EnvironmentId = &environmentId + request.ClusterId = &clusterId + + request.Filters = []*tdmq.Filter{ + { + Name: common.StringPtr("TopicName"), + Values: common.StringPtrs([]string{topicRetry, topicDLQ}), + }, + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeTopics(request) + if err != nil { + errRet = err + 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.TotalCount == 0 { + return false, nil + } + + return true, nil +} + +func (me *TdmqService) DeleteTdmqTopicsAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDeleteTopicsRequest() + topicRetry := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "RETRY") + topicDLQ := fmt.Sprint(Topic + "-" + subscriptionName + "-" + "DLQ") + request.TopicSets = []*tdmq.TopicRecord{ + { + EnvironmentId: &environmentId, + TopicName: &topicRetry, + }, + { + EnvironmentId: &environmentId, + TopicName: &topicDLQ, + }, + } + request.ClusterId = &clusterId + request.EnvironmentId = &environmentId + request.Force = common.BoolPtr(true) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteTopics(request) + if err != nil { + 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 *TdmqService) DeleteTdmqSubscriptionAttachmentById(ctx context.Context, environmentId, Topic, subscriptionName, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDeleteSubscriptionsRequest() + request.SubscriptionTopicSets = []*tdmq.SubscriptionTopic{ + { + EnvironmentId: &environmentId, + TopicName: &Topic, + SubscriptionName: &subscriptionName, + }, + } + request.ClusterId = &clusterId + request.EnvironmentId = &environmentId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteSubscriptions(request) + if err != nil { + 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 *TdmqService) DescribeTdmqDeadLetterSourceQueueByFilter(ctx context.Context, param map[string]interface{}) (deadLetterSourceQueue []*tdmq.CmqDeadLetterSource, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeCmqDeadLetterSourceQueuesRequest() + ) + + defer 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 == "DeadLetterQueueName" { + request.DeadLetterQueueName = v.(*string) + } + if k == "SourceQueueName" { + request.SourceQueueName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribeCmqDeadLetterSourceQueues(request) + if err != nil { + errRet = err + return + } + + 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.TotalCount == 0 { + break + } + + deadLetterSourceQueue = append(deadLetterSourceQueue, response.Response.QueueSet...) + if len(response.Response.QueueSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqRabbitmqNodeListByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqNodeList []*tdmq.RabbitMQPrivateNode, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeRabbitMQNodeListRequest() + ) + + defer 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 == "NodeName" { + request.NodeName = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*tdmq.Filter) + } + if k == "SortElement" { + request.SortElement = v.(*string) + } + if k == "SortOrder" { + request.SortOrder = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribeRabbitMQNodeList(request) + if err != nil { + errRet = err + return + } + + 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.TotalCount == 0 { + break + } + + rabbitmqNodeList = append(rabbitmqNodeList, response.Response.NodeList...) + if len(response.Response.NodeList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqRabbitmqVipInstanceByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqVipInstance []*tdmq.RabbitMQVipInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeRabbitMQVipInstancesRequest() + ) + + defer 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.([]*tdmq.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribeRabbitMQVipInstances(request) + if err != nil { + errRet = err + return + } + + 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.TotalCount == 0 { + break + } + + rabbitmqVipInstance = append(rabbitmqVipInstance, response.Response.Instances...) + if len(response.Response.Instances) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqVipInstanceByFilter(ctx context.Context, param map[string]interface{}) (vipInstance *tdmq.DescribeRocketMQVipInstanceDetailResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeRocketMQVipInstanceDetailRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstanceDetail(request) + if err != nil { + errRet = err + return + } + + 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 + } + + vipInstance = response.Response + return +} + +func (me *TdmqService) DescribeTdmqProInstanceDetailByFilter(ctx context.Context, param map[string]interface{}) (proInstanceDetail *tdmq.DescribePulsarProInstanceDetailResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribePulsarProInstanceDetailRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribePulsarProInstanceDetail(request) + if err != nil { + errRet = err + return + } + + 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 + } + + proInstanceDetail = response.Response + + return +} + +func (me *TdmqService) DescribeTdmqProInstancesByFilter(ctx context.Context, param map[string]interface{}) (proInstances []*tdmq.PulsarProInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribePulsarProInstancesRequest() + ) + + defer 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.([]*tdmq.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribePulsarProInstances(request) + if err != nil { + errRet = err + return + } + + 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.Instances) < 1 { + break + } + + proInstances = append(proInstances, response.Response.Instances...) + if len(response.Response.Instances) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqMessageByFilter(ctx context.Context, param map[string]interface{}) (message *tdmq.DescribeRocketMQMsgResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeRocketMQMsgRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + if k == "EnvironmentId" { + request.EnvironmentId = v.(*string) + } + if k == "TopicName" { + request.TopicName = v.(*string) + } + if k == "MsgId" { + request.MsgId = v.(*string) + request.PulsarMsgId = v.(*string) + } + if k == "QueryDlqMsg" { + request.QueryDlqMsg = v.(*bool) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRocketMQMsg(request) + if err != nil { + errRet = err + return + } + + 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 + } + + message = response.Response + + return +} + +func (me *TdmqService) DescribeTdmqRabbitmqVirtualHostListByFilter(ctx context.Context, param map[string]interface{}) (rabbitmqVirtualHostList []*tdmq.RabbitMQPrivateVirtualHost, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDescribeRabbitMQVirtualHostListRequest() + ) + + defer 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 + ) + + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTdmqClient().DescribeRabbitMQVirtualHostList(request) + if err != nil { + errRet = err + return + } + + 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.VirtualHostList) < 1 { + break + } + + rabbitmqVirtualHostList = append(rabbitmqVirtualHostList, response.Response.VirtualHostList...) + if len(response.Response.VirtualHostList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TdmqService) DescribeTdmqRabbitmqUserById(ctx context.Context, instanceId, user string) (rabbitmqUser *tdmq.RabbitMQUser, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeRabbitMQUserRequest() + request.InstanceId = &instanceId + if user != "" { + request.User = &user + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRabbitMQUser(request) + if err != nil { + errRet = 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.RabbitMQUserList) < 1 { + return + } + + rabbitmqUser = response.Response.RabbitMQUserList[0] + return +} + +func (me *TdmqService) DeleteTdmqRabbitmqUserById(ctx context.Context, instanceId, user string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteRabbitMQUserRequest() + request.InstanceId = &instanceId + request.User = &user + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteRabbitMQUser(request) + if err != nil { + 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 *TdmqService) DescribeTdmqRabbitmqVirtualHostById(ctx context.Context, instanceId, virtualHost string) (rabbitmqVirtualHost *tdmq.RabbitMQVirtualHostInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribeRabbitMQVirtualHostRequest() + request.InstanceId = &instanceId + if virtualHost != "" { + request.VirtualHost = &virtualHost + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRabbitMQVirtualHost(request) + if err != nil { + errRet = 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.VirtualHostList) < 1 { + return + } + + rabbitmqVirtualHost = response.Response.VirtualHostList[0] + return +} + +func (me *TdmqService) DeleteTdmqRabbitmqVirtualHostById(ctx context.Context, instanceId, virtualHost string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDeleteRabbitMQVirtualHostRequest() + request.InstanceId = &instanceId + request.VirtualHost = &virtualHost + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteRabbitMQVirtualHost(request) + if err != nil { + 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 *TdmqService) DescribeTdmqRabbitmqVipInstanceById(ctx context.Context, instanceId string) (rabbitmqVipInstance *tdmq.DescribeRabbitMQVipInstanceResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmq.NewDescribeRabbitMQVipInstanceRequest() + request.ClusterId = &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.UseTdmqClient().DescribeRabbitMQVipInstance(request) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + rabbitmqVipInstance = response.Response + return +} + +func (me *TdmqService) DeleteTdmqRabbitmqVipInstanceById(ctx context.Context, instanceId string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmq.NewDeleteRabbitMQVipInstanceRequest() + ) + + 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.UseTdmqClient().DeleteRabbitMQVipInstance(request) + if err != nil { + 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 *TdmqService) DescribeTdmqRocketmqVipInstanceById(ctx context.Context, clusterId string) (rocketmqVipInstanceDetail *tdmq.DescribeRocketMQVipInstanceDetailResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeRocketMQVipInstanceDetailRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstanceDetail(request) + if err != nil { + errRet = err + 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 { + rocketmqVipInstanceDetail = response.Response + } + + return +} + +func (me *TdmqService) DescribeTdmqRocketmqVipInstancesByFilter(ctx context.Context, clusterId string) (rocketmqVipInstances *tdmq.RocketMQVipInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDescribeRocketMQVipInstancesRequest() + request.Filters = []*tdmq.Filter{ + { + Name: common.StringPtr("InstanceIds"), + Values: common.StringPtrs([]string{clusterId}), + }, + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DescribeRocketMQVipInstances(request) + if err != nil { + errRet = err + 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.TotalCount == 0 || response.Response.Instances == nil { + return + } + + rocketmqVipInstances = response.Response.Instances[0] + return +} + +func (me *TdmqService) DeleteTdmqRocketmqVipInstanceById(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tdmq.NewDeleteRocketMQVipInstanceRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTdmqClient().DeleteRocketMQVipInstance(request) + if err != nil { + 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/tem/resource_tc_tem_app_config.go b/tencentcloud/services/tem/resource_tc_tem_app_config.go new file mode 100644 index 0000000000..316d900720 --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_app_config.go @@ -0,0 +1,254 @@ +package tem + +import ( + "context" + "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" + tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTemAppConfig() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTemAppConfigRead, + Create: resourceTencentCloudTemAppConfigCreate, + Update: resourceTencentCloudTemAppConfigUpdate, + Delete: resourceTencentCloudTemAppConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "environment_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "environment ID.", + }, + + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "appConfig name.", + }, + + "config_data": { + Type: schema.TypeList, + Required: true, + Description: "payload.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key": { + Type: schema.TypeString, + Required: true, + Description: "key.", + }, + "value": { + Type: schema.TypeString, + Required: true, + Description: "value.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudTemAppConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_app_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tem.NewCreateConfigDataRequest() + environmentId string + name string + ) + + if v, ok := d.GetOk("environment_id"); ok { + environmentId = v.(string) + request.EnvironmentId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("name"); ok { + name = v.(string) + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("config_data"); ok { + for _, item := range v.([]interface{}) { + dMap := item.(map[string]interface{}) + pair := tem.Pair{} + if v, ok := dMap["key"]; ok { + pair.Key = helper.String(v.(string)) + } + if v, ok := dMap["value"]; ok { + pair.Value = helper.String(v.(string)) + } + request.Data = append(request.Data, &pair) + } + + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateConfigData(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 tem appConfig failed, reason:%+v", logId, err) + return err + } + + d.SetId(environmentId + tccommon.FILED_SP + name) + return resourceTencentCloudTemAppConfigRead(d, meta) +} + +func resourceTencentCloudTemAppConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_appConfig.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{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()) + } + environmentId := idSplit[0] + name := idSplit[1] + + appConfig, err := service.DescribeTemAppConfig(ctx, environmentId, name) + + if err != nil { + return err + } + + if appConfig == nil { + d.SetId("") + return fmt.Errorf("resource `appConfig` %s does not exist", name) + } + + _ = d.Set("environment_id", environmentId) + + if appConfig.Name != nil { + _ = d.Set("name", appConfig.Name) + } + + if appConfig.Data != nil { + dataList := []interface{}{} + for _, data := range appConfig.Data { + dataMap := map[string]interface{}{} + if data.Key != nil { + dataMap["key"] = data.Key + } + if data.Value != nil { + dataMap["value"] = data.Value + } + + dataList = append(dataList, dataMap) + } + _ = d.Set("config_data", dataList) + } + + return nil +} + +func resourceTencentCloudTemAppConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_app_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tem.NewModifyConfigDataRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + environmentId := idSplit[0] + name := idSplit[1] + + request.EnvironmentId = &environmentId + request.Name = &name + + if d.HasChange("environment_id") { + return fmt.Errorf("`environment_id` do not support change now.") + } + + if d.HasChange("name") { + return fmt.Errorf("`name` do not support change now.") + } + + if d.HasChange("config_data") { + if v, ok := d.GetOk("config_data"); ok { + for _, item := range v.([]interface{}) { + dMap := item.(map[string]interface{}) + pair := tem.Pair{} + if v, ok := dMap["key"]; ok { + pair.Key = helper.String(v.(string)) + } + if v, ok := dMap["value"]; ok { + pair.Value = helper.String(v.(string)) + } + request.Data = append(request.Data, &pair) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyConfigData(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 { + return err + } + + return resourceTencentCloudTemAppConfigRead(d, meta) +} + +func resourceTencentCloudTemAppConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_app_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{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()) + } + environmentId := idSplit[0] + name := idSplit[1] + + if err := service.DeleteTemAppConfigById(ctx, environmentId, name); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tem/resource_tc_tem_app_config_test.go b/tencentcloud/services/tem/resource_tc_tem_app_config_test.go new file mode 100644 index 0000000000..7dd1945fa9 --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_app_config_test.go @@ -0,0 +1,129 @@ +package tem_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +// go test -i; go test -test.run TestAccTencentCloudTemAppConfigResource_basic -v +func TestAccTencentCloudTemAppConfigResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTemAppConfigDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTemAppConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemAppConfigExists("tencentcloud_tem_app_config.appConfig"), + resource.TestCheckResourceAttrSet("tencentcloud_tem_app_config.appConfig", "id"), + resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "environment_id", tcacctest.DefaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "name", "demo"), + resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.0.key", "key"), + resource.TestCheckResourceAttr("tencentcloud_tem_app_config.appConfig", "config_data.0.value", "value"), + ), + }, + { + ResourceName: "tencentcloud_tem_app_config.appConfig", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTemAppConfigDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tem_app_config" { + continue + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + name := idSplit[1] + + res, err := service.DescribeTemAppConfig(ctx, environmentId, name) + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == "ResourceNotFound.ConfigDataNotFound" { + return nil + } + } + return err + } + + if res != nil { + return fmt.Errorf("tem app config %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTemAppConfigExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + name := idSplit[1] + + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTemAppConfig(ctx, environmentId, name) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tem app config %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTemAppConfigVar = ` +variable "environment_id" { + default = "` + tcacctest.DefaultEnvironmentId + `" +} +` + +const testAccTemAppConfig = testAccTemAppConfigVar + ` + +resource "tencentcloud_tem_app_config" "appConfig" { + environment_id = var.environment_id + name = "demo" + config_data { + key = "key" + value = "value" + } +} + +` diff --git a/tencentcloud/services/tem/resource_tc_tem_application.go b/tencentcloud/services/tem/resource_tc_tem_application.go new file mode 100644 index 0000000000..982fde779e --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_application.go @@ -0,0 +1,324 @@ +package tem + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTemApplication() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTemApplicationRead, + Create: resourceTencentCloudTemApplicationCreate, + Update: resourceTencentCloudTemApplicationUpdate, + Delete: resourceTencentCloudTemApplicationDelete, + // Importer: &schema.ResourceImporter{ + // State: schema.ImportStatePassthrough, + // }, + Schema: map[string]*schema.Schema{ + "application_name": { + Type: schema.TypeString, + Required: true, + Description: "application name.", + }, + + "description": { + Type: schema.TypeString, + Required: true, + Description: "application description.", + }, + + "coding_language": { + Type: schema.TypeString, + Required: true, + Description: "program language, like JAVA.", + }, + + "use_default_image_service": { + Type: schema.TypeInt, + Optional: true, + Default: 0, + Description: "create image repo or not.", + }, + + "repo_type": { + Type: schema.TypeInt, + Optional: true, + Description: "repo type, 0: tcr personal, 1: tcr enterprise, 2: public repository, 3: tcr hosted by tem, 4: demo image.", + }, + + "repo_server": { + Type: schema.TypeString, + Optional: true, + Description: "registry address.", + }, + + "repo_name": { + Type: schema.TypeString, + Optional: true, + Description: "repository name.", + }, + + "instance_id": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "tcr instance id.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "application tag list.", + }, + }, + } +} + +func resourceTencentCloudTemApplicationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_application.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + request = tem.NewCreateApplicationRequest() + response *tem.CreateApplicationResponse + ) + + if v, ok := d.GetOk("application_name"); ok { + request.ApplicationName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOk("coding_language"); ok { + request.CodingLanguage = helper.String(v.(string)) + } + + request.UseDefaultImageService = helper.IntInt64(d.Get("use_default_image_service").(int)) + + if v, ok := d.GetOk("repo_type"); ok { + request.RepoType = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("repo_server"); ok { + request.RepoServer = helper.String(v.(string)) + } + + if v, ok := d.GetOk("repo_name"); ok { + request.RepoName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("tags"); ok { + for key, value := range v.(map[string]interface{}) { + tag := tem.Tag{ + TagKey: helper.String(key), + TagValue: helper.String(value.(string)), + } + request.Tags = append(request.Tags, &tag) + } + } + + request.DeployMode = helper.String("IMAGE") + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateApplication(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 tem application failed, reason:%+v", logId, err) + return err + } + + applicationId := *response.Response.Result + + d.SetId(applicationId) + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tem:%s:uin/:application/%s", region, applicationId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudTemApplicationRead(d, meta) +} + +func resourceTencentCloudTemApplicationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_application.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + applicationId := d.Id() + + applications, err := service.DescribeTemApplication(ctx, applicationId) + + if len(applications.Result.Records) != 1 { + d.SetId("") + return nil + } + application := applications.Result.Records[0] + + if err != nil { + return err + } + + if application == nil { + d.SetId("") + return fmt.Errorf("resource `application` %s does not exist", applicationId) + } + + if application.ApplicationName != nil { + _ = d.Set("application_name", application.ApplicationName) + } + + if application.Description != nil { + _ = d.Set("description", application.Description) + } + + if application.CodingLanguage != nil { + _ = d.Set("coding_language", application.CodingLanguage) + } + + if application.RepoType != nil { + _ = d.Set("repo_type", application.RepoType) + } + + if application.RepoName != nil { + _ = d.Set("repo_name", application.RepoName) + } + + if application.InstanceId != nil { + _ = d.Set("instance_id", application.InstanceId) + } + + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(client) + region := client.Region + tags, err := tagService.DescribeResourceTags(ctx, "tem", "application", region, applicationId) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTemApplicationUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_application.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := tem.NewModifyApplicationInfoRequest() + + request.ApplicationId = helper.String(d.Id()) + + if d.HasChange("application_name") { + return fmt.Errorf("`application_name` do not support change now.") + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if d.HasChange("coding_language") { + return fmt.Errorf("`coding_language` do not support change now.") + } + + if d.HasChange("use_default_image_service") { + return fmt.Errorf("`use_default_image_service` do not support change now.") + } + + if d.HasChange("repo_type") { + return fmt.Errorf("`repo_type` do not support change now.") + } + + if d.HasChange("repo_server") { + return fmt.Errorf("`repo_server` do not support change now.") + } + + if d.HasChange("repo_name") { + return fmt.Errorf("`repo_name` do not support change now.") + } + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyApplicationInfo(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 { + return err + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tem", "application", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudTemApplicationRead(d, meta) +} + +func resourceTencentCloudTemApplicationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_application.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + applicationId := d.Id() + + if err := service.DeleteTemApplicationById(ctx, applicationId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tem_application_service.go b/tencentcloud/services/tem/resource_tc_tem_application_service.go similarity index 81% rename from tencentcloud/resource_tc_tem_application_service.go rename to tencentcloud/services/tem/resource_tc_tem_application_service.go index 4b51a1d9b7..67a5d11254 100644 --- a/tencentcloud/resource_tc_tem_application_service.go +++ b/tencentcloud/services/tem/resource_tc_tem_application_service.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem 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" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTemApplicationService() *schema.Resource { +func ResourceTencentCloudTemApplicationService() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTemApplicationServiceCreate, Read: resourceTencentCloudTemApplicationServiceRead, @@ -45,7 +48,7 @@ func resourceTencentCloudTemApplicationService() *schema.Resource { Type: schema.TypeString, Optional: true, Description: "application service type: EXTERNAL | VPC | CLUSTER.", - ValidateFunc: validateAllowedStringValue([]string{"EXTERNAL", "VPC", "CLUSTER"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"EXTERNAL", "VPC", "CLUSTER"}), }, "service_name": { Type: schema.TypeString, @@ -99,10 +102,10 @@ func resourceTencentCloudTemApplicationService() *schema.Resource { } func resourceTencentCloudTemApplicationServiceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application_service.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_application_service.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewCreateApplicationServiceRequest() @@ -160,10 +163,10 @@ func resourceTencentCloudTemApplicationServiceCreate(d *schema.ResourceData, met request.Service = &servicePortMapping } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateApplicationService(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateApplicationService(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -174,12 +177,12 @@ func resourceTencentCloudTemApplicationServiceCreate(d *schema.ResourceData, met return err } - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { service, errRet := service.DescribeTemApplicationServiceById(ctx, environmentId, applicationId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *service.Result.AllIpDone { return nil @@ -190,22 +193,22 @@ func resourceTencentCloudTemApplicationServiceCreate(d *schema.ResourceData, met return err } - d.SetId(environmentId + FILED_SP + applicationId + FILED_SP + serviceName) + d.SetId(environmentId + tccommon.FILED_SP + applicationId + tccommon.FILED_SP + serviceName) return resourceTencentCloudTemApplicationServiceRead(d, meta) } func resourceTencentCloudTemApplicationServiceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application_service.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_application_service.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } @@ -294,14 +297,14 @@ func resourceTencentCloudTemApplicationServiceRead(d *schema.ResourceData, meta } func resourceTencentCloudTemApplicationServiceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application_service.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_application_service.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tem.NewModifyApplicationServiceRequest() - 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()) } @@ -351,10 +354,10 @@ func resourceTencentCloudTemApplicationServiceUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyApplicationService(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyApplicationService(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -365,12 +368,12 @@ func resourceTencentCloudTemApplicationServiceUpdate(d *schema.ResourceData, met return err } - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { service, errRet := service.DescribeTemApplicationServiceById(ctx, environmentId, applicationId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *service.Result.AllIpDone { return nil @@ -385,14 +388,14 @@ func resourceTencentCloudTemApplicationServiceUpdate(d *schema.ResourceData, met } func resourceTencentCloudTemApplicationServiceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_application_service.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_application_service.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TemService{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_tem_application_service_test.go b/tencentcloud/services/tem/resource_tc_tem_application_service_test.go similarity index 81% rename from tencentcloud/resource_tc_tem_application_service_test.go rename to tencentcloud/services/tem/resource_tc_tem_application_service_test.go index 4199f13615..a026492bb3 100644 --- a/tencentcloud/resource_tc_tem_application_service_test.go +++ b/tencentcloud/services/tem/resource_tc_tem_application_service_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem_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" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" @@ -16,17 +20,17 @@ func TestAccTencentCloudTemApplicationServiceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTemApplicationServiceDestroy, Steps: []resource.TestStep{ { Config: testAccTemApplicationService, Check: resource.ComposeTestCheckFunc( testAccCheckTemApplicationServiceExists("tencentcloud_tem_application_service.application_service"), - resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "environment_id", defaultEnvironmentId), - resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "application_id", defaultApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "environment_id", tcacctest.DefaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "application_id", tcacctest.DefaultApplicationId), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.0.type", "CLUSTER"), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.0.service_name", "terraform-test-0"), @@ -41,8 +45,8 @@ func TestAccTencentCloudTemApplicationServiceResource_basic(t *testing.T) { Config: testAccTemApplicationServiceUp, Check: resource.ComposeTestCheckFunc( testAccCheckTemApplicationServiceExists("tencentcloud_tem_application_service.application_service"), - resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "environment_id", defaultEnvironmentId), - resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "application_id", defaultApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "environment_id", tcacctest.DefaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "application_id", tcacctest.DefaultApplicationId), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.0.type", "EXTERNAL"), resource.TestCheckResourceAttr("tencentcloud_tem_application_service.application_service", "service.0.service_name", "terraform-test-0"), @@ -63,14 +67,14 @@ func TestAccTencentCloudTemApplicationServiceResource_basic(t *testing.T) { } func testAccCheckTemApplicationServiceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tem_application_service" { 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) } @@ -95,15 +99,15 @@ func testAccCheckTemApplicationServiceDestroy(s *terraform.State) error { func testAccCheckTemApplicationServiceExists(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) } - 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) } @@ -111,7 +115,7 @@ func testAccCheckTemApplicationServiceExists(r string) resource.TestCheckFunc { applicationId := idSplit[1] serviceName := idSplit[2] - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTemApplicationServiceById(ctx, environmentId, applicationId) if res == nil || res.Result == nil { @@ -136,10 +140,10 @@ func testAccCheckTemApplicationServiceExists(r string) resource.TestCheckFunc { const testAccTemApplicationServiceVar = ` variable "environment_id" { - default = "` + defaultEnvironmentId + `" + default = "` + tcacctest.DefaultEnvironmentId + `" } variable "application_id" { - default = "` + defaultApplicationId + `" + default = "` + tcacctest.DefaultApplicationId + `" } ` diff --git a/tencentcloud/resource_tc_tem_application_test.go b/tencentcloud/services/tem/resource_tc_tem_application_test.go similarity index 78% rename from tencentcloud/resource_tc_tem_application_test.go rename to tencentcloud/services/tem/resource_tc_tem_application_test.go index ea4d46c622..08b0ef00b9 100644 --- a/tencentcloud/resource_tc_tem_application_test.go +++ b/tencentcloud/services/tem/resource_tc_tem_application_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tem_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,9 +19,9 @@ func TestAccTencentCloudTemApplicationResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTemApplicationDestroy, Steps: []resource.TestStep{ { @@ -45,9 +49,9 @@ func TestAccTencentCloudTemApplicationResource_basic(t *testing.T) { } func testAccCheckTemApplicationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tem_application" { continue @@ -67,15 +71,15 @@ func testAccCheckTemApplicationDestroy(s *terraform.State) error { func testAccCheckTemApplicationExists(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 := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTemApplication(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tem/resource_tc_tem_environment.go b/tencentcloud/services/tem/resource_tc_tem_environment.go new file mode 100644 index 0000000000..c892463063 --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_environment.go @@ -0,0 +1,288 @@ +package tem + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTemEnvironment() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTemEnvironmentRead, + Create: resourceTencentCloudTemEnvironmentCreate, + Update: resourceTencentCloudTemEnvironmentUpdate, + Delete: resourceTencentCloudTemEnvironmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "environment_name": { + Type: schema.TypeString, + Required: true, + Description: "environment name.", + }, + + "description": { + Type: schema.TypeString, + Optional: true, + Description: "environment description.", + }, + + "vpc": { + Type: schema.TypeString, + Required: true, + Description: "vpc ID.", + }, + + "subnet_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Required: true, + Description: "subnet IDs.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "environment tag list.", + }, + }, + } +} + +func resourceTencentCloudTemEnvironmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_environment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tem.NewCreateEnvironmentRequest() + response *tem.CreateEnvironmentResponse + ) + + if v, ok := d.GetOk("environment_name"); ok { + request.EnvironmentName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOk("vpc"); ok { + request.Vpc = helper.String(v.(string)) + } + + if v, ok := d.GetOk("subnet_ids"); ok { + subnetIdsSet := v.(*schema.Set).List() + for i := range subnetIdsSet { + subnetIds := subnetIdsSet[i].(string) + request.SubnetIds = append(request.SubnetIds, &subnetIds) + } + } + + if v, ok := d.GetOk("tags"); ok { + for key, value := range v.(map[string]interface{}) { + tag := tem.Tag{ + TagKey: helper.String(key), + TagValue: helper.String(value.(string)), + } + request.Tags = append(request.Tags, &tag) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateEnvironment(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 tem environment failed, reason:%+v", logId, err) + return err + } + + environmentId := *response.Response.Result + + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeTemEnvironmentStatus(ctx, environmentId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.ClusterStatus == "NORMAL" { + return nil + } + if *instance.ClusterStatus == "FAILED" { + return resource.NonRetryableError(fmt.Errorf("environment status is %v, operate failed.", *instance.ClusterStatus)) + } + return resource.RetryableError(fmt.Errorf("environment status is %v, retry...", *instance.ClusterStatus)) + }) + if err != nil { + return err + } + + d.SetId(environmentId) + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tem:%s:uin/:environment/%s", region, environmentId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudTemEnvironmentRead(d, meta) +} + +func resourceTencentCloudTemEnvironmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_environment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + environmentId := d.Id() + + environments, err := service.DescribeTemEnvironment(ctx, environmentId) + + if err != nil { + return err + } + environment := environments.Result + if environment == nil { + d.SetId("") + return fmt.Errorf("resource `environment` %s does not exist", environmentId) + } + + if environment.EnvironmentName != nil { + _ = d.Set("environment_name", environment.EnvironmentName) + } + + if environment.Description != nil { + _ = d.Set("description", environment.Description) + } + + if environment.VpcId != nil { + _ = d.Set("vpc", environment.VpcId) + } + + if environment.SubnetIds != nil { + _ = d.Set("subnet_ids", environment.SubnetIds) + } + + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(client) + region := client.Region + tags, err := tagService.DescribeResourceTags(ctx, "tem", "environment", region, environmentId) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTemEnvironmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_environment.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := tem.NewModifyEnvironmentRequest() + + request.EnvironmentId = helper.String(d.Id()) + + if d.HasChange("environment_name") { + if v, ok := d.GetOk("environment_name"); ok { + request.EnvironmentName = helper.String(v.(string)) + } + } + + if d.HasChange("description") { + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + } + + if d.HasChange("vpc") { + return fmt.Errorf("`vpc` do not support change now.") + } + + if d.HasChange("subnet_ids") { + if v, ok := d.GetOk("subnet_ids"); ok { + subnetIdsSet := v.(*schema.Set).List() + for i := range subnetIdsSet { + subnetIds := subnetIdsSet[i].(string) + request.SubnetIds = append(request.SubnetIds, &subnetIds) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyEnvironment(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 { + return err + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tem", "environment", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudTemEnvironmentRead(d, meta) +} + +func resourceTencentCloudTemEnvironmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tem_environment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TemService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + environmentId := d.Id() + + if err := service.DeleteTemEnvironmentById(ctx, environmentId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tem/resource_tc_tem_environment_test.go b/tencentcloud/services/tem/resource_tc_tem_environment_test.go new file mode 100644 index 0000000000..2993fc544f --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_environment_test.go @@ -0,0 +1,119 @@ +package tem_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +// go test -i; go test -test.run TestAccTencentCloudTemEnvironmentResource_basic -v +func TestAccTencentCloudTemEnvironmentResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTemEnvironmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTemEnvironment, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemEnvironmentExists("tencentcloud_tem_environment.environment"), + resource.TestCheckResourceAttrSet("tencentcloud_tem_environment.environment", "id"), + resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "environment_name", "demo"), + resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "description", "demo for test"), + resource.TestCheckResourceAttr("tencentcloud_tem_environment.environment", "tags.createdBy", "terraform"), + ), + }, + { + ResourceName: "tencentcloud_tem_environment.environment", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTemEnvironmentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tem_environment" { + continue + } + + res, err := service.DescribeTemEnvironment(ctx, rs.Primary.ID) + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == "ResourceNotFound.VersionNamespaceNotFound" { + return nil + } + } + return err + } + + if res.Result != nil { + return fmt.Errorf("tem environment %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTemEnvironmentExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTemEnvironment(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res.Result == nil { + return fmt.Errorf("tem environment %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTemEnvironmentVar = ` +variable "vpc_id" { + default = "` + tcacctest.DefaultTemVpcId + `" +} + +variable "subnet_id" { + default = "` + tcacctest.DefaultTemSubnetId + `" +} +` + +const testAccTemEnvironment = testAccTemEnvironmentVar + ` + +resource "tencentcloud_tem_environment" "environment" { + environment_name = "demo" + description = "demo for test" + vpc = var.vpc_id + subnet_ids = [var.subnet_id] + tags = { + "createdBy" = "terraform" + } + } + +` diff --git a/tencentcloud/resource_tc_tem_gateway.go b/tencentcloud/services/tem/resource_tc_tem_gateway.go similarity index 89% rename from tencentcloud/resource_tc_tem_gateway.go rename to tencentcloud/services/tem/resource_tc_tem_gateway.go index beb0d32d5d..a4e1842f64 100644 --- a/tencentcloud/resource_tc_tem_gateway.go +++ b/tencentcloud/services/tem/resource_tc_tem_gateway.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem 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" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTemGateway() *schema.Resource { +func ResourceTencentCloudTemGateway() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTemGatewayRead, Create: resourceTencentCloudTemGatewayCreate, @@ -171,10 +174,10 @@ func resourceTencentCloudTemGateway() *schema.Resource { } func resourceTencentCloudTemGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_gateway.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_gateway.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewModifyIngressRequest() @@ -267,10 +270,10 @@ func resourceTencentCloudTemGatewayCreate(d *schema.ResourceData, meta interface request.Ingress = &ingressInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyIngress(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyIngress(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -283,21 +286,21 @@ func resourceTencentCloudTemGatewayCreate(d *schema.ResourceData, meta interface return err } - d.SetId(environmentId + FILED_SP + ingressName) + d.SetId(environmentId + tccommon.FILED_SP + ingressName) return resourceTencentCloudTemGatewayRead(d, meta) } func resourceTencentCloudTemGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_gateway.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_gateway.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } @@ -408,10 +411,10 @@ func resourceTencentCloudTemGatewayRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudTemGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_gateway.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_gateway.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tem.NewModifyIngressRequest() @@ -419,7 +422,7 @@ func resourceTencentCloudTemGatewayUpdate(d *schema.ResourceData, meta interface if dMap, ok := helper.InterfacesHeadMap(d, "ingress"); ok { ingressInfo := tem.IngressInfo{} - 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()) } @@ -499,10 +502,10 @@ func resourceTencentCloudTemGatewayUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyIngress(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyIngress(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -518,14 +521,14 @@ func resourceTencentCloudTemGatewayUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudTemGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_gateway.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_gateway.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TemService{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_tem_gateway_test.go b/tencentcloud/services/tem/resource_tc_tem_gateway_test.go similarity index 81% rename from tencentcloud/resource_tc_tem_gateway_test.go rename to tencentcloud/services/tem/resource_tc_tem_gateway_test.go index 40f9294446..4fa844eca0 100644 --- a/tencentcloud/resource_tc_tem_gateway_test.go +++ b/tencentcloud/services/tem/resource_tc_tem_gateway_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem_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" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -16,9 +20,9 @@ func TestAccTencentCloudTemGatewayResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, // CheckDestroy: testAccCheckTemGatewayDestroy, Steps: []resource.TestStep{ { @@ -28,7 +32,7 @@ func TestAccTencentCloudTemGatewayResource_basic(t *testing.T) { resource.TestCheckResourceAttrSet("tencentcloud_tem_gateway.gateway", "id"), resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.ingress_name", "demo"), - resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.environment_id", defaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.environment_id", tcacctest.DefaultEnvironmentId), resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.address_ip_version", "IPV4"), resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.rewrite_type", "NONE"), resource.TestCheckResourceAttr("tencentcloud_tem_gateway.gateway", "ingress.0.mixed", "false"), @@ -55,15 +59,15 @@ func TestAccTencentCloudTemGatewayResource_basic(t *testing.T) { } // func testAccCheckTemGatewayDestroy(s *terraform.State) error { -// logId := getLogId(contextNil) -// ctx := context.WithValue(context.TODO(), logIdKey, logId) -// service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} +// logId := tccommon.GetLogId(tccommon.ContextNil) +// ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) +// service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) // for _, rs := range s.RootModule().Resources { // if rs.Type != "tencentcloud_tem_gateway" { // 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) // } @@ -91,22 +95,22 @@ func TestAccTencentCloudTemGatewayResource_basic(t *testing.T) { func testAccCheckTemGatewayExists(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) } - 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) } environmentId := idSplit[0] ingressName := idSplit[1] - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTemGateway(ctx, environmentId, ingressName) if err != nil { return err @@ -122,7 +126,7 @@ func testAccCheckTemGatewayExists(r string) resource.TestCheckFunc { const testAccTemGatewayVar = ` variable "environment_id" { - default = "` + defaultEnvironmentId + `" + default = "` + tcacctest.DefaultEnvironmentId + `" } ` diff --git a/tencentcloud/resource_tc_tem_log_config.go b/tencentcloud/services/tem/resource_tc_tem_log_config.go similarity index 78% rename from tencentcloud/resource_tc_tem_log_config.go rename to tencentcloud/services/tem/resource_tc_tem_log_config.go index b5b3b5fe91..cc6e23b433 100644 --- a/tencentcloud/resource_tc_tem_log_config.go +++ b/tencentcloud/services/tem/resource_tc_tem_log_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem 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" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTemLogConfig() *schema.Resource { +func ResourceTencentCloudTemLogConfig() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTemLogConfigRead, Create: resourceTencentCloudTemLogConfigCreate, @@ -96,10 +99,10 @@ func resourceTencentCloudTemLogConfig() *schema.Resource { } func resourceTencentCloudTemLogConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_log_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_log_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewCreateLogConfigRequest() @@ -120,8 +123,8 @@ func resourceTencentCloudTemLogConfigCreate(d *schema.ResourceData, meta interfa if v, ok := d.GetOk("workload_id"); ok { workloadId := v.(string) - if workloadId != environmentId+FILED_SP+applicationId { - return fmt.Errorf("workloadId is error, it should be %s", environmentId+FILED_SP+applicationId) + if workloadId != environmentId+tccommon.FILED_SP+applicationId { + return fmt.Errorf("workloadId is error, it should be %s", environmentId+tccommon.FILED_SP+applicationId) } } @@ -158,10 +161,10 @@ func resourceTencentCloudTemLogConfigCreate(d *schema.ResourceData, meta interfa request.FilePattern = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateLogConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateLogConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -174,20 +177,20 @@ func resourceTencentCloudTemLogConfigCreate(d *schema.ResourceData, meta interfa return err } - d.SetId(environmentId + FILED_SP + applicationId + FILED_SP + name) + d.SetId(environmentId + tccommon.FILED_SP + applicationId + tccommon.FILED_SP + name) return resourceTencentCloudTemLogConfigRead(d, meta) } func resourceTencentCloudTemLogConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_logConfig.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_logConfig.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } @@ -208,7 +211,7 @@ func resourceTencentCloudTemLogConfigRead(d *schema.ResourceData, meta interface _ = d.Set("environment_id", environmentId) _ = d.Set("application_id", logConfig.ApplicationId) - _ = d.Set("workload_id", environmentId+FILED_SP+applicationId) + _ = d.Set("workload_id", environmentId+tccommon.FILED_SP+applicationId) if logConfig.Name != nil { _ = d.Set("name", logConfig.Name) @@ -246,14 +249,14 @@ func resourceTencentCloudTemLogConfigRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTemLogConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_log_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_log_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tem.NewModifyLogConfigRequest() - 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()) } @@ -298,10 +301,10 @@ func resourceTencentCloudTemLogConfigUpdate(d *schema.ResourceData, meta interfa request.Data = &data } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyLogConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyLogConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -317,14 +320,14 @@ func resourceTencentCloudTemLogConfigUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTemLogConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_log_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_log_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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TemService{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/services/tem/resource_tc_tem_log_config_test.go b/tencentcloud/services/tem/resource_tc_tem_log_config_test.go new file mode 100644 index 0000000000..9afb117a4c --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_log_config_test.go @@ -0,0 +1,154 @@ +package tem_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + + "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" +) + +// go test -i; go test -test.run TestAccTencentCloudTemLogConfigResource_basic -v +func TestAccTencentCloudTemLogConfigResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTemLogConfigDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTemLogConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemLogConfigExists("tencentcloud_tem_log_config.logConfig"), + resource.TestCheckResourceAttrSet("tencentcloud_tem_log_config.logConfig", "id"), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "environment_id", tcacctest.DefaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "application_id", tcacctest.DefaultApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "name", "terraform-test"), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "logset_id", tcacctest.DefaultLogsetId), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "topic_id", tcacctest.DefaultTopicId), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "input_type", "container_stdout"), + resource.TestCheckResourceAttr("tencentcloud_tem_log_config.logConfig", "log_type", "minimalist_log"), + ), + }, + { + ResourceName: "tencentcloud_tem_log_config.logConfig", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTemLogConfigDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tem_log_config" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + applicationId := idSplit[1] + name := idSplit[2] + + res, err := service.DescribeTemLogConfig(ctx, environmentId, applicationId, name) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return err + } + if ee.Code == "ResourceNotFound.LogConfigNotFound" { + return nil + } + return err + } + + if res != nil { + return fmt.Errorf("tem log config %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTemLogConfigExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + applicationId := idSplit[1] + name := idSplit[2] + + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTemLogConfig(ctx, environmentId, applicationId, name) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tem log config %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTemLogConfigVar = ` +variable "environment_id" { + default = "` + tcacctest.DefaultEnvironmentId + `" +} + +variable "application_id" { + default = "` + tcacctest.DefaultApplicationId + `" +} + +variable "logset_id" { + default = "` + tcacctest.DefaultLogsetId + `" +} + +variable "topic_id" { + default = "` + tcacctest.DefaultTopicId + `" +} + +variable "workload_id" { + default = "` + tcacctest.DefaultEnvironmentId + "#" + tcacctest.DefaultApplicationId + `" +} +` + +const testAccTemLogConfig = testAccTemLogConfigVar + ` + +resource "tencentcloud_tem_log_config" "logConfig" { + environment_id = var.environment_id + application_id = var.application_id + workload_id = var.workload_id + name = "terraform-test" + logset_id = var.logset_id + topic_id = var.topic_id + input_type = "container_stdout" + log_type = "minimalist_log" +} + +` diff --git a/tencentcloud/resource_tc_tem_scale_rule.go b/tencentcloud/services/tem/resource_tc_tem_scale_rule.go similarity index 89% rename from tencentcloud/resource_tc_tem_scale_rule.go rename to tencentcloud/services/tem/resource_tc_tem_scale_rule.go index 6352929dd8..a9cb8491d0 100644 --- a/tencentcloud/resource_tc_tem_scale_rule.go +++ b/tencentcloud/services/tem/resource_tc_tem_scale_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem 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" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTemScaleRule() *schema.Resource { +func ResourceTencentCloudTemScaleRule() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTemScaleRuleRead, Create: resourceTencentCloudTemScaleRuleCreate, @@ -165,10 +168,10 @@ func resourceTencentCloudTemScaleRule() *schema.Resource { } func resourceTencentCloudTemScaleRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_scale_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_scale_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewCreateApplicationAutoscalerRequest() @@ -189,8 +192,8 @@ func resourceTencentCloudTemScaleRuleCreate(d *schema.ResourceData, meta interfa if v, ok := d.GetOk("workload_id"); ok { workloadId := v.(string) - if workloadId != environmentId+FILED_SP+applicationId { - return fmt.Errorf("workloadId is error, it should be %s", environmentId+FILED_SP+applicationId) + if workloadId != environmentId+tccommon.FILED_SP+applicationId { + return fmt.Errorf("workloadId is error, it should be %s", environmentId+tccommon.FILED_SP+applicationId) } } @@ -268,10 +271,10 @@ func resourceTencentCloudTemScaleRuleCreate(d *schema.ResourceData, meta interfa request.Autoscaler = &autoscaler } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().CreateApplicationAutoscaler(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().CreateApplicationAutoscaler(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -287,20 +290,20 @@ func resourceTencentCloudTemScaleRuleCreate(d *schema.ResourceData, meta interfa scaleRuleId := *response.Response.Result - d.SetId(environmentId + FILED_SP + applicationId + FILED_SP + scaleRuleId) + d.SetId(environmentId + tccommon.FILED_SP + applicationId + tccommon.FILED_SP + scaleRuleId) return resourceTencentCloudTemScaleRuleRead(d, meta) } func resourceTencentCloudTemScaleRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_scaleRule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_scaleRule.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } @@ -321,7 +324,7 @@ func resourceTencentCloudTemScaleRuleRead(d *schema.ResourceData, meta interface _ = d.Set("environment_id", environmentId) _ = d.Set("application_id", applicationId) - _ = d.Set("workload_id", environmentId+FILED_SP+applicationId) + _ = d.Set("workload_id", environmentId+tccommon.FILED_SP+applicationId) autoscalerMap := map[string]interface{}{} if scaleRule.AutoscalerName != nil { @@ -406,14 +409,14 @@ func resourceTencentCloudTemScaleRuleRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTemScaleRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_scale_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_scale_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tem.NewModifyApplicationAutoscalerRequest() - 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()) } @@ -509,10 +512,10 @@ func resourceTencentCloudTemScaleRuleUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().ModifyApplicationAutoscaler(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().ModifyApplicationAutoscaler(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -528,15 +531,15 @@ func resourceTencentCloudTemScaleRuleUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTemScaleRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_scale_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_scale_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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } diff --git a/tencentcloud/services/tem/resource_tc_tem_scale_rule_test.go b/tencentcloud/services/tem/resource_tc_tem_scale_rule_test.go new file mode 100644 index 0000000000..10d781f0ac --- /dev/null +++ b/tencentcloud/services/tem/resource_tc_tem_scale_rule_test.go @@ -0,0 +1,164 @@ +package tem_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTemScaleRuleResource_basic -v +func TestAccTencentCloudTemScaleRuleResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTemScaleRuleDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTemScaleRule, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemScaleRuleExists("tencentcloud_tem_scale_rule.scaleRule"), + resource.TestCheckResourceAttrSet("tencentcloud_tem_scale_rule.scaleRule", "id"), + resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "environment_id", tcacctest.DefaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "application_id", tcacctest.DefaultApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "autoscaler.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tem_scale_rule.scaleRule", "autoscaler.0.autoscaler_name", "test3123"), + ), + }, + { + ResourceName: "tencentcloud_tem_scale_rule.scaleRule", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTemScaleRuleDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tem_scale_rule" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + applicationId := idSplit[1] + scaleRuleId := idSplit[2] + + res, err := service.DescribeTemScaleRule(ctx, environmentId, applicationId, scaleRuleId) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tem scale rule %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTemScaleRuleExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + environmentId := idSplit[0] + applicationId := idSplit[1] + scaleRuleId := idSplit[2] + + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTemScaleRule(ctx, environmentId, applicationId, scaleRuleId) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tem scale rule %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTemScaleRuleVar = ` +variable "environment_id" { + default = "` + tcacctest.DefaultEnvironmentId + `" +} + +variable "application_id" { + default = "` + tcacctest.DefaultApplicationId + `" +} + +variable "workload_id" { + default = "` + tcacctest.DefaultEnvironmentId + "#" + tcacctest.DefaultApplicationId + `" +} +` + +const testAccTemScaleRule = testAccTemScaleRuleVar + ` + +resource "tencentcloud_tem_scale_rule" "scaleRule" { + environment_id = var.environment_id + application_id = var.application_id + workload_id = var.workload_id + autoscaler { + autoscaler_name = "test3123" + description = "test" + enabled = true + min_replicas = 1 + max_replicas = 4 + cron_horizontal_autoscaler { + name = "test" + period = "* * *" + priority = 1 + enabled = true + schedules { + start_at = "03:00" + target_replicas = 1 + } + } + cron_horizontal_autoscaler { + name = "test123123" + period = "* * *" + priority = 0 + enabled = true + schedules { + start_at = "04:13" + target_replicas = 1 + } + } + horizontal_autoscaler { + metrics = "CPU" + enabled = true + max_replicas = 4 + min_replicas = 1 + threshold = 60 + } + + } +} +` diff --git a/tencentcloud/resource_tc_tem_workload.go b/tencentcloud/services/tem/resource_tc_tem_workload.go similarity index 94% rename from tencentcloud/resource_tc_tem_workload.go rename to tencentcloud/services/tem/resource_tc_tem_workload.go index 030a1e0cc3..3d3168dfcf 100644 --- a/tencentcloud/resource_tc_tem_workload.go +++ b/tencentcloud/services/tem/resource_tc_tem_workload.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem 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" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTemWorkload() *schema.Resource { +func ResourceTencentCloudTemWorkload() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTemWorkloadRead, Create: resourceTencentCloudTemWorkloadCreate, @@ -390,10 +393,10 @@ func resourceTencentCloudTemWorkload() *schema.Resource { } func resourceTencentCloudTemWorkloadCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_workload.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_workload.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewDeployApplicationRequest() @@ -630,10 +633,10 @@ func resourceTencentCloudTemWorkloadCreate(d *schema.ResourceData, meta interfac } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().DeployApplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().DeployApplication(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -646,20 +649,20 @@ func resourceTencentCloudTemWorkloadCreate(d *schema.ResourceData, meta interfac return err } - d.SetId(environmentId + FILED_SP + applicationId) + d.SetId(environmentId + tccommon.FILED_SP + applicationId) return resourceTencentCloudTemWorkloadRead(d, meta) } func resourceTencentCloudTemWorkloadRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_workload.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_workload.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TemService{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()) } @@ -891,16 +894,16 @@ func resourceTencentCloudTemWorkloadRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTemWorkloadUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_workload.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_workload.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tem.NewDeployApplicationRequest() ) - 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()) } @@ -1132,10 +1135,10 @@ func resourceTencentCloudTemWorkloadUpdate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTemClient().DeployApplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTemClient().DeployApplication(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -1151,14 +1154,14 @@ func resourceTencentCloudTemWorkloadUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTemWorkloadDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tem_workload.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tem_workload.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 := TemService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TemService{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_tem_workload_test.go b/tencentcloud/services/tem/resource_tc_tem_workload_test.go similarity index 78% rename from tencentcloud/resource_tc_tem_workload_test.go rename to tencentcloud/services/tem/resource_tc_tem_workload_test.go index f89a05c7bc..37dcda98e0 100644 --- a/tencentcloud/resource_tc_tem_workload_test.go +++ b/tencentcloud/services/tem/resource_tc_tem_workload_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tem_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" + svctem "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tem" + "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" @@ -17,9 +21,9 @@ func TestAccTencentCloudTemWorkloadResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTemWorkloadDestroy, Steps: []resource.TestStep{ { @@ -27,7 +31,7 @@ func TestAccTencentCloudTemWorkloadResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTemWorkloadExists("tencentcloud_tem_workload.workload"), resource.TestCheckResourceAttrSet("tencentcloud_tem_workload.workload", "id"), - resource.TestCheckResourceAttr("tencentcloud_tem_workload.workload", "environment_id", defaultEnvironmentId), + resource.TestCheckResourceAttr("tencentcloud_tem_workload.workload", "environment_id", tcacctest.DefaultEnvironmentId), resource.TestCheckResourceAttrSet("tencentcloud_tem_workload.workload", "application_id"), resource.TestCheckResourceAttr("tencentcloud_tem_workload.workload", "deploy_version", "hello-world"), resource.TestCheckResourceAttr("tencentcloud_tem_workload.workload", "deploy_mode", "IMAGE"), @@ -48,15 +52,15 @@ func TestAccTencentCloudTemWorkloadResource_basic(t *testing.T) { } func testAccCheckTemWorkloadDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tem_workload" { 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) } @@ -84,21 +88,21 @@ func testAccCheckTemWorkloadDestroy(s *terraform.State) error { func testAccCheckTemWorkloadExists(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) } - 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) } environmentId := idSplit[0] applicationId := idSplit[1] - service := TemService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctem.NewTemService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTemWorkload(ctx, environmentId, applicationId) if err != nil { return err @@ -114,7 +118,7 @@ func testAccCheckTemWorkloadExists(r string) resource.TestCheckFunc { const testAccTemWorkloadVar = ` variable "environment_id" { - default = "` + defaultEnvironmentId + `" + default = "` + tcacctest.DefaultEnvironmentId + `" } ` diff --git a/tencentcloud/service_tencentcloud_tem.go b/tencentcloud/services/tem/service_tencentcloud_tem.go similarity index 94% rename from tencentcloud/service_tencentcloud_tem.go rename to tencentcloud/services/tem/service_tencentcloud_tem.go index 44d4aa9b5a..e3cb94da9c 100644 --- a/tencentcloud/service_tencentcloud_tem.go +++ b/tencentcloud/services/tem/service_tencentcloud_tem.go @@ -1,25 +1,32 @@ -package tencentcloud +package tem import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" tem "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem/v20210701" + "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 NewTemService(client *connectivity.TencentCloudClient) TemService { + return TemService{client: client} +} + type TemService struct { client *connectivity.TencentCloudClient } func (me *TemService) DescribeTemEnvironmentStatus(ctx context.Context, environmentId string) (environment *tem.NamespaceStatusInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeEnvironmentStatusRequest() ) @@ -49,7 +56,7 @@ func (me *TemService) DescribeTemEnvironmentStatus(ctx context.Context, environm func (me *TemService) DescribeTemEnvironment(ctx context.Context, environmentId string) (environment *tem.DescribeEnvironmentResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeEnvironmentRequest() ) @@ -75,7 +82,7 @@ func (me *TemService) DescribeTemEnvironment(ctx context.Context, environmentId } func (me *TemService) DeleteTemEnvironmentById(ctx context.Context, environmentId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDestroyEnvironmentRequest() request.EnvironmentId = &environmentId @@ -101,7 +108,7 @@ func (me *TemService) DeleteTemEnvironmentById(ctx context.Context, environmentI func (me *TemService) DescribeTemApplication(ctx context.Context, applicationId string) (application *tem.DescribeApplicationsResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeApplicationsRequest() ) @@ -128,7 +135,7 @@ func (me *TemService) DescribeTemApplication(ctx context.Context, applicationId } func (me *TemService) DeleteTemApplicationById(ctx context.Context, applicationId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDeleteApplicationRequest() request.ApplicationId = &applicationId @@ -155,7 +162,7 @@ func (me *TemService) DeleteTemApplicationById(ctx context.Context, applicationI func (me *TemService) DescribeTemWorkload(ctx context.Context, environmentId string, applicationId string) (workload *tem.DescribeApplicationInfoResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeApplicationInfoRequest() ) @@ -182,7 +189,7 @@ func (me *TemService) DescribeTemWorkload(ctx context.Context, environmentId str } func (me *TemService) DeleteTemWorkloadById(ctx context.Context, environmentId string, applicationId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDeleteApplicationRequest() request.EnvironmentId = &environmentId @@ -209,7 +216,7 @@ func (me *TemService) DeleteTemWorkloadById(ctx context.Context, environmentId s func (me *TemService) DescribeTemAppConfig(ctx context.Context, environmentId string, name string) (appConfig *tem.ConfigData, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeConfigDataRequest() ) @@ -236,7 +243,7 @@ func (me *TemService) DescribeTemAppConfig(ctx context.Context, environmentId st } func (me *TemService) DeleteTemAppConfigById(ctx context.Context, environmentId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDestroyConfigDataRequest() request.EnvironmentId = &environmentId @@ -263,7 +270,7 @@ func (me *TemService) DeleteTemAppConfigById(ctx context.Context, environmentId func (me *TemService) DescribeTemLogConfig(ctx context.Context, environmentId string, applicationId string, name string) (logConfig *tem.LogConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeLogConfigRequest() ) @@ -291,7 +298,7 @@ func (me *TemService) DescribeTemLogConfig(ctx context.Context, environmentId st } func (me *TemService) DeleteTemLogConfigById(ctx context.Context, environmentId string, applicationId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDestroyLogConfigRequest() request.EnvironmentId = &environmentId @@ -319,7 +326,7 @@ func (me *TemService) DeleteTemLogConfigById(ctx context.Context, environmentId func (me *TemService) DescribeTemScaleRule(ctx context.Context, environmentId string, applicationId string, scaleRuleId string) (scaleRule *tem.Autoscaler, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeApplicationAutoscalerListRequest() ) @@ -352,7 +359,7 @@ func (me *TemService) DescribeTemScaleRule(ctx context.Context, environmentId st } func (me *TemService) DisableTemScaleRuleById(ctx context.Context, environmentId string, applicationId string, scaleRuleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDisableApplicationAutoscalerRequest() request.EnvironmentId = &environmentId @@ -379,7 +386,7 @@ func (me *TemService) DisableTemScaleRuleById(ctx context.Context, environmentId } func (me *TemService) DeleteTemScaleRuleById(ctx context.Context, environmentId string, applicationId string, scaleRuleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDeleteApplicationAutoscalerRequest() request.EnvironmentId = &environmentId @@ -407,7 +414,7 @@ func (me *TemService) DeleteTemScaleRuleById(ctx context.Context, environmentId func (me *TemService) DescribeTemGateway(ctx context.Context, environmentId string, ingressName string) (gateway *tem.IngressInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tem.NewDescribeIngressRequest() ) @@ -421,10 +428,10 @@ func (me *TemService) DescribeTemGateway(ctx context.Context, environmentId stri request.IngressName = &ingressName request.ClusterNamespace = helper.String("default") - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { response, errRet := me.client.UseTemClient().DescribeIngress(request) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } gateway = response.Response.Result if *gateway.ClbId != "" && *gateway.Vip != "" { @@ -444,7 +451,7 @@ func (me *TemService) DescribeTemGateway(ctx context.Context, environmentId stri } func (me *TemService) DeleteTemGatewayById(ctx context.Context, environmentId string, ingressName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDeleteIngressRequest() request.EnvironmentId = &environmentId @@ -471,7 +478,7 @@ func (me *TemService) DeleteTemGatewayById(ctx context.Context, environmentId st } func (me *TemService) DescribeTemApplicationServiceById(ctx context.Context, environmentId string, applicationId string) (applicationService *tem.DescribeApplicationServiceListResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDescribeApplicationServiceListRequest() request.EnvironmentId = &environmentId @@ -497,7 +504,7 @@ func (me *TemService) DescribeTemApplicationServiceById(ctx context.Context, env } func (me *TemService) DeleteTemApplicationServiceById(ctx context.Context, environmentId string, applicationId string, serviceName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tem.NewDeleteApplicationServiceRequest() request.EnvironmentId = &environmentId diff --git a/tencentcloud/data_source_tc_teo_rule_engine_settings.go b/tencentcloud/services/teo/data_source_tc_teo_rule_engine_settings.go similarity index 94% rename from tencentcloud/data_source_tc_teo_rule_engine_settings.go rename to tencentcloud/services/teo/data_source_tc_teo_rule_engine_settings.go index 0f2990997f..bee1a2e1d2 100644 --- a/tencentcloud/data_source_tc_teo_rule_engine_settings.go +++ b/tencentcloud/services/teo/data_source_tc_teo_rule_engine_settings.go @@ -1,15 +1,17 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" ) -func dataSourceTencentCloudTeoRuleEngineSettings() *schema.Resource { +func DataSourceTencentCloudTeoRuleEngineSettings() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTeoRuleEngineSettingsRead, Schema: map[string]*schema.Schema{ @@ -186,19 +188,19 @@ func dataSourceTencentCloudTeoRuleEngineSettings() *schema.Resource { } func dataSourceTencentCloudTeoRuleEngineSettingsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_teo_rule_engine_settings.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_teo_rule_engine_settings.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) - teoService := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + teoService := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var rules []*teo.RulesSettingAction - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := teoService.DescribeTeoRuleEngineSettingsByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } rules = results return nil @@ -313,7 +315,7 @@ func dataSourceTencentCloudTeoRuleEngineSettingsRead(d *schema.ResourceData, met 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/services/teo/data_source_tc_teo_rule_engine_settings_test.go b/tencentcloud/services/teo/data_source_tc_teo_rule_engine_settings_test.go new file mode 100644 index 0000000000..2f5c1ae1b6 --- /dev/null +++ b/tencentcloud/services/teo/data_source_tc_teo_rule_engine_settings_test.go @@ -0,0 +1,34 @@ +package teo_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTeoRuleEngineSettingsDataSource -v +func TestAccTencentCloudTeoRuleEngineSettingsDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceTeoRuleEngineSettings, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_teo_rule_engine_settings.rule_engine_settings"), + ), + }, + }, + }) +} + +const testAccDataSourceTeoRuleEngineSettings = ` + +data "tencentcloud_teo_rule_engine_settings" "rule_engine_settings" { +} + +` diff --git a/tencentcloud/data_source_tc_teo_zone_available_plans.go b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans.go similarity index 83% rename from tencentcloud/data_source_tc_teo_zone_available_plans.go rename to tencentcloud/services/teo/data_source_tc_teo_zone_available_plans.go index 9be553d507..663343b4e8 100644 --- a/tencentcloud/data_source_tc_teo_zone_available_plans.go +++ b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans.go @@ -1,15 +1,17 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" ) -func dataSourceTencentCloudTeoZoneAvailablePlans() *schema.Resource { +func DataSourceTencentCloudTeoZoneAvailablePlans() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTeoZoneAvailablePlansRead, @@ -74,19 +76,19 @@ func dataSourceTencentCloudTeoZoneAvailablePlans() *schema.Resource { } func dataSourceTencentCloudTeoZoneAvailablePlansRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_teo_zone_available_plans.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_teo_zone_available_plans.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) - teoService := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + teoService := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var planInfos []*teo.PlanInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := teoService.DescribeTeoZoneAvailablePlansByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } planInfos = results return nil @@ -134,7 +136,7 @@ func dataSourceTencentCloudTeoZoneAvailablePlansRead(d *schema.ResourceData, met output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), planInfoList); e != nil { + if e := tccommon.WriteToFile(output.(string), planInfoList); e != nil { return e } } diff --git a/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_test.go b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_test.go new file mode 100644 index 0000000000..234cebde4a --- /dev/null +++ b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_test.go @@ -0,0 +1,34 @@ +package teo_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTeoZoneAvailablePlansDataSource -v +func TestAccTencentCloudTeoZoneAvailablePlansDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceTeoZoneAvailablePlans, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_teo_zone_available_plans.zone_available_plans"), + ), + }, + }, + }) +} + +const testAccDataSourceTeoZoneAvailablePlans = ` + +data "tencentcloud_teo_zone_available_plans" "zone_available_plans" { +} + +` diff --git a/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_testing_test.go b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_testing_test.go new file mode 100644 index 0000000000..15ec1b340a --- /dev/null +++ b/tencentcloud/services/teo/data_source_tc_teo_zone_available_plans_testing_test.go @@ -0,0 +1,34 @@ +package teo_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 TestAccTencentCloudTestingTeoZoneAvailablePlansDataSource -v +func TestAccTencentCloudTestingTeoZoneAvailablePlansDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceTestingTeoZoneAvailablePlans, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_teo_zone_available_plans.zone_available_plans"), + ), + }, + }, + }) +} + +const testAccDataSourceTestingTeoZoneAvailablePlans = ` + +data "tencentcloud_teo_zone_available_plans" "zone_available_plans" { +} + +` diff --git a/tencentcloud/resource_tc_teo_acceleration_domain.go b/tencentcloud/services/teo/resource_tc_teo_acceleration_domain.go similarity index 80% rename from tencentcloud/resource_tc_teo_acceleration_domain.go rename to tencentcloud/services/teo/resource_tc_teo_acceleration_domain.go index 355cd8f29e..dacd3ee4b7 100644 --- a/tencentcloud/resource_tc_teo_acceleration_domain.go +++ b/tencentcloud/services/teo/resource_tc_teo_acceleration_domain.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoAccelerationDomain() *schema.Resource { +func ResourceTencentCloudTeoAccelerationDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTeoAccelerationDomainCreate, Read: resourceTencentCloudTeoAccelerationDomainRead, @@ -102,11 +105,11 @@ func resourceTencentCloudTeoAccelerationDomain() *schema.Resource { } func resourceTencentCloudTeoAccelerationDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_acceleration_domain.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_acceleration_domain.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 = teo.NewCreateAccelerationDomainRequest() @@ -153,10 +156,10 @@ func resourceTencentCloudTeoAccelerationDomainCreate(d *schema.ResourceData, met request.OriginInfo = &originInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateAccelerationDomain(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().CreateAccelerationDomain(request) if e != nil { - return retryError(e) + return tccommon.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,9 +170,9 @@ func resourceTencentCloudTeoAccelerationDomainCreate(d *schema.ResourceData, met return err } - d.SetId(zoneId + FILED_SP + domainName) + d.SetId(zoneId + tccommon.FILED_SP + domainName) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err = service.CheckAccelerationDomainStatus(ctx, zoneId, domainName, "") if err != nil { return err @@ -179,16 +182,16 @@ func resourceTencentCloudTeoAccelerationDomainCreate(d *schema.ResourceData, met } func resourceTencentCloudTeoAccelerationDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_acceleration_domain.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_acceleration_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -264,13 +267,13 @@ func resourceTencentCloudTeoAccelerationDomainRead(d *schema.ResourceData, meta } func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_acceleration_domain.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_acceleration_domain.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()) } @@ -312,10 +315,10 @@ func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, met request.OriginInfo = &originInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyAccelerationDomain(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyAccelerationDomain(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -326,7 +329,7 @@ func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, met return err } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err = service.CheckAccelerationDomainStatus(ctx, zoneId, domainName, "") if err != nil { return err @@ -342,10 +345,10 @@ func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, met request.Status = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyAccelerationDomainStatuses(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyAccelerationDomainStatuses(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -356,11 +359,11 @@ func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, met return err } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.DomainStatus == "online" || *instance.DomainStatus == "offline" { return nil @@ -376,14 +379,14 @@ func resourceTencentCloudTeoAccelerationDomainUpdate(d *schema.ResourceData, met } func resourceTencentCloudTeoAccelerationDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_acceleration_domain.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_acceleration_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TeoService{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()) } @@ -395,10 +398,10 @@ func resourceTencentCloudTeoAccelerationDomainDelete(d *schema.ResourceData, met request.DomainNames = []*string{&domainName} request.Status = helper.String("offline") - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyAccelerationDomainStatuses(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyAccelerationDomainStatuses(request) if e != nil { - return retryError(e) + return tccommon.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/teo/resource_tc_teo_acceleration_domain_test.go b/tencentcloud/services/teo/resource_tc_teo_acceleration_domain_test.go new file mode 100644 index 0000000000..5a04ddc416 --- /dev/null +++ b/tencentcloud/services/teo/resource_tc_teo_acceleration_domain_test.go @@ -0,0 +1,113 @@ +package teo_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudTeoAccelerationDomainResource_basic(t *testing.T) { + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTeoAccelerationDomainDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTeoAccelerationDomain, + Check: resource.ComposeTestCheckFunc( + testAccCheckTeoAccelerationDomainExists("tencentcloud_teo_acceleration_domain.acceleration_domain"), + resource.TestCheckResourceAttrSet("tencentcloud_teo_acceleration_domain.acceleration_domain", "id"), + resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "domain_name", "aaa.tf-teo.xyz"), + resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.0.origin", "150.109.8.1"), + resource.TestCheckResourceAttr("tencentcloud_teo_acceleration_domain.acceleration_domain", "origin_info.0.origin_type", "IP_DOMAIN"), + ), + }, + { + ResourceName: "tencentcloud_teo_acceleration_domain.acceleration_domain", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTeoAccelerationDomainDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_acceleration_domain" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + domainName := idSplit[1] + + agents, err := service.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) + if agents != nil { + return fmt.Errorf("AccelerationDomain %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckTeoAccelerationDomainExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + domainName := idSplit[1] + + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + agents, err := service.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) + if agents == nil { + return fmt.Errorf("AccelerationDomain %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoAccelerationDomain = testAccTeoZone + ` + +resource "tencentcloud_teo_acceleration_domain" "acceleration_domain" { + zone_id = "zone-2o0i41pv2h8c" + domain_name = "aaa.makn.cn" + + origin_info { + origin = "150.109.8.1" + origin_type = "IP_DOMAIN" + } +} + +` diff --git a/tencentcloud/resource_tc_teo_application_proxy.go b/tencentcloud/services/teo/resource_tc_teo_application_proxy.go similarity index 80% rename from tencentcloud/resource_tc_teo_application_proxy.go rename to tencentcloud/services/teo/resource_tc_teo_application_proxy.go index b2d1989419..51a121c7ee 100644 --- a/tencentcloud/resource_tc_teo_application_proxy.go +++ b/tencentcloud/services/teo/resource_tc_teo_application_proxy.go @@ -1,23 +1,24 @@ /* Provides a resource to create a teo application_proxy -Example Usage +# Example Usage ```hcl -resource "tencentcloud_teo_application_proxy" "application_proxy" { - accelerate_type = 0 - plat_type = "domain" - proxy_name = "test" - proxy_type = "instance" - security_type = 1 - session_persist_time = 0 - status = "online" - zone_id = "zone-2o0l8g7zisgt" - - ipv6 { - switch = "off" - } -} + + resource "tencentcloud_teo_application_proxy" "application_proxy" { + accelerate_type = 0 + plat_type = "domain" + proxy_name = "test" + proxy_type = "instance" + security_type = 1 + session_persist_time = 0 + status = "online" + zone_id = "zone-2o0l8g7zisgt" + + ipv6 { + switch = "off" + } + } ``` Import @@ -27,7 +28,7 @@ teo application_proxy can be imported using the zoneId#proxyId, e.g. terraform import tencentcloud_teo_application_proxy.application_proxy zone-2983wizgxqvm#proxy-6972528a-373a-11ed-afca-52540044a456 ``` */ -package tencentcloud +package teo import ( "context" @@ -35,13 +36,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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoApplicationProxy() *schema.Resource { +func ResourceTencentCloudTeoApplicationProxy() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoApplicationProxyRead, Create: resourceTencentCloudTeoApplicationProxyCreate, @@ -162,10 +166,10 @@ func resourceTencentCloudTeoApplicationProxy() *schema.Resource { } func resourceTencentCloudTeoApplicationProxyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = teo.NewCreateApplicationProxyRequest() @@ -211,8 +215,8 @@ func resourceTencentCloudTeoApplicationProxyCreate(d *schema.ResourceData, meta request.Ipv6 = &ipv6Access } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) err := service.CheckZoneComplete(ctx, zoneId) if err != nil { @@ -220,10 +224,10 @@ func resourceTencentCloudTeoApplicationProxyCreate(d *schema.ResourceData, meta return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateApplicationProxy(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().CreateApplicationProxy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -239,10 +243,10 @@ func resourceTencentCloudTeoApplicationProxyCreate(d *schema.ResourceData, meta proxyId = *response.Response.ProxyId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "online" { return nil @@ -257,20 +261,20 @@ func resourceTencentCloudTeoApplicationProxyCreate(d *schema.ResourceData, meta return err } - d.SetId(zoneId + FILED_SP + proxyId) + d.SetId(zoneId + tccommon.FILED_SP + proxyId) return resourceTencentCloudTeoApplicationProxyRead(d, meta) } func resourceTencentCloudTeoApplicationProxyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -357,13 +361,13 @@ func resourceTencentCloudTeoApplicationProxyRead(d *schema.ResourceData, meta in } func resourceTencentCloudTeoApplicationProxyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := teo.NewModifyApplicationProxyRequest() - 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()) } @@ -416,10 +420,10 @@ func resourceTencentCloudTeoApplicationProxyUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -440,10 +444,10 @@ func resourceTencentCloudTeoApplicationProxyUpdate(d *schema.ResourceData, meta statusRequest.ProxyId = &proxyId statusRequest.Status = helper.String(v.(string)) - statusErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - statusResult, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxyStatus(statusRequest) + statusErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + statusResult, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxyStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), statusResult.ToJsonString()) @@ -463,21 +467,21 @@ func resourceTencentCloudTeoApplicationProxyUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTeoApplicationProxyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TeoService{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()) } zoneId := idSplit[0] proxyId := idSplit[1] - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { e := resourceTencentCloudTeoApplicationProxyRead(d, meta) if e != nil { log.Printf("[CRITAL]%s get teo applicationProxy failed, reason:%+v", logId, e) @@ -496,7 +500,7 @@ func resourceTencentCloudTeoApplicationProxyDelete(d *schema.ResourceData, meta statusRequest.ZoneId = &zoneId statusRequest.ProxyId = &proxyId statusRequest.Status = helper.String("offline") - _, e = meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxyStatus(statusRequest) + _, e = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxyStatus(statusRequest) if e != nil { return resource.NonRetryableError(fmt.Errorf("setting applicationProxy `status` to offline failed, reason: %v", e)) } diff --git a/tencentcloud/resource_tc_teo_application_proxy_rule.go b/tencentcloud/services/teo/resource_tc_teo_application_proxy_rule.go similarity index 79% rename from tencentcloud/resource_tc_teo_application_proxy_rule.go rename to tencentcloud/services/teo/resource_tc_teo_application_proxy_rule.go index 7c730de0aa..ee721270e9 100644 --- a/tencentcloud/resource_tc_teo_application_proxy_rule.go +++ b/tencentcloud/services/teo/resource_tc_teo_application_proxy_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoApplicationProxyRule() *schema.Resource { +func ResourceTencentCloudTeoApplicationProxyRule() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoApplicationProxyRuleRead, Create: resourceTencentCloudTeoApplicationProxyRuleCreate, @@ -101,10 +104,10 @@ func resourceTencentCloudTeoApplicationProxyRule() *schema.Resource { } func resourceTencentCloudTeoApplicationProxyRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = teo.NewCreateApplicationProxyRuleRequest() @@ -159,10 +162,10 @@ func resourceTencentCloudTeoApplicationProxyRuleCreate(d *schema.ResourceData, m request.SessionPersist = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateApplicationProxyRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().CreateApplicationProxyRule(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(), request.ToJsonString(), result.ToJsonString()) @@ -180,13 +183,13 @@ func resourceTencentCloudTeoApplicationProxyRuleCreate(d *schema.ResourceData, m ruleId = *response.Response.RuleId } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - err = resource.Retry(60*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(60*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "online" { return nil @@ -200,20 +203,20 @@ func resourceTencentCloudTeoApplicationProxyRuleCreate(d *schema.ResourceData, m return err } - d.SetId(zoneId + FILED_SP + proxyId + FILED_SP + ruleId) + d.SetId(zoneId + tccommon.FILED_SP + proxyId + tccommon.FILED_SP + ruleId) return resourceTencentCloudTeoApplicationProxyRuleRead(d, meta) } func resourceTencentCloudTeoApplicationProxyRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy_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) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -272,14 +275,14 @@ func resourceTencentCloudTeoApplicationProxyRuleRead(d *schema.ResourceData, met } func resourceTencentCloudTeoApplicationProxyRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := teo.NewModifyApplicationProxyRuleRequest() - 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()) } @@ -339,10 +342,10 @@ func resourceTencentCloudTeoApplicationProxyRuleUpdate(d *schema.ResourceData, m request.SessionPersist = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxyRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxyRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -364,10 +367,10 @@ func resourceTencentCloudTeoApplicationProxyRuleUpdate(d *schema.ResourceData, m statusRequest.RuleId = &ruleId statusRequest.Status = helper.String(v.(string)) - statusErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - statusResult, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxyRuleStatus(statusRequest) + statusErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + statusResult, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxyRuleStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), statusResult.ToJsonString()) @@ -383,12 +386,12 @@ func resourceTencentCloudTeoApplicationProxyRuleUpdate(d *schema.ResourceData, m } } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) - err = resource.Retry(60*readRetryTimeout, func() *resource.RetryError { + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + err = resource.Retry(60*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "online" { return nil @@ -406,15 +409,15 @@ func resourceTencentCloudTeoApplicationProxyRuleUpdate(d *schema.ResourceData, m } func resourceTencentCloudTeoApplicationProxyRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_application_proxy_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_application_proxy_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -422,10 +425,10 @@ func resourceTencentCloudTeoApplicationProxyRuleDelete(d *schema.ResourceData, m proxyId := idSplit[1] ruleId := idSplit[2] - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "offline" { return nil @@ -439,7 +442,7 @@ func resourceTencentCloudTeoApplicationProxyRuleDelete(d *schema.ResourceData, m statusRequest.ProxyId = &proxyId statusRequest.RuleId = &ruleId statusRequest.Status = helper.String("offline") - _, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyApplicationProxyRuleStatus(statusRequest) + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyApplicationProxyRuleStatus(statusRequest) if e != nil { return resource.NonRetryableError(fmt.Errorf("setting applicationProxyRule `status` to offline failed, reason: %v", e)) } diff --git a/tencentcloud/resource_tc_teo_application_proxy_rule_test.go b/tencentcloud/services/teo/resource_tc_teo_application_proxy_rule_test.go similarity index 77% rename from tencentcloud/resource_tc_teo_application_proxy_rule_test.go rename to tencentcloud/services/teo/resource_tc_teo_application_proxy_rule_test.go index a2afc0028c..2539de126a 100644 --- a/tencentcloud/resource_tc_teo_application_proxy_rule_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_application_proxy_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo_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" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudTeoApplicationProxyRule_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckApplicationProxyRuleDestroy, Steps: []resource.TestStep{ { @@ -43,14 +47,14 @@ func TestAccTencentCloudTeoApplicationProxyRule_basic(t *testing.T) { } func testAccCheckApplicationProxyRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_teo_application_proxy_rule" { 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,15 +75,15 @@ func testAccCheckApplicationProxyRuleDestroy(s *terraform.State) error { func testAccCheckApplicationProxyRuleExists(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) } - 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) } @@ -87,7 +91,7 @@ func testAccCheckApplicationProxyRuleExists(r string) resource.TestCheckFunc { proxyId := idSplit[1] ruleId := idSplit[2] - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) agents, err := service.DescribeTeoApplicationProxyRule(ctx, zoneId, proxyId, ruleId) if agents == nil { return fmt.Errorf("zone ApplicationProxyRule %s is not found", rs.Primary.ID) diff --git a/tencentcloud/services/teo/resource_tc_teo_application_proxy_test.go b/tencentcloud/services/teo/resource_tc_teo_application_proxy_test.go new file mode 100644 index 0000000000..571892a865 --- /dev/null +++ b/tencentcloud/services/teo/resource_tc_teo_application_proxy_test.go @@ -0,0 +1,149 @@ +package teo_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_teo_zone + resource.AddTestSweepers("tencentcloud_teo_application_proxy", &resource.Sweeper{ + Name: "tencentcloud_teo_application_proxy", + F: testSweepApplicationProxy, + }) +} + +func testSweepApplicationProxy(region string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcteo.NewTeoService(client) + + for { + proxy, err := service.DescribeTeoApplicationProxy(ctx, "", "") + if err != nil { + return err + } + + if proxy == nil { + return nil + } + + err = service.DeleteTeoApplicationProxyById(ctx, *proxy.ZoneId, *proxy.ProxyId) + if err != nil { + return err + } + } +} + +// go test -i; go test -test.run TestAccTencentCloudTeoApplicationProxy_basic -v +func TestAccTencentCloudTeoApplicationProxy_basic(t *testing.T) { + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckApplicationProxyDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTeoApplicationProxy, + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationProxyExists("tencentcloud_teo_application_proxy.basic"), + resource.TestCheckResourceAttrSet("tencentcloud_teo_application_proxy.basic", "zone_id"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "accelerate_type", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "security_type", "1"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "plat_type", "domain"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_name", "test-instance"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "proxy_type", "instance"), + resource.TestCheckResourceAttr("tencentcloud_teo_application_proxy.basic", "session_persist_time", "2400"), + ), + }, + { + ResourceName: "tencentcloud_teo_application_proxy.basic", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckApplicationProxyDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_teo_application_proxy" { + continue + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) + if agents != nil { + return fmt.Errorf("zone ApplicationProxy %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckApplicationProxyExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + zoneId := idSplit[0] + proxyId := idSplit[1] + + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + agents, err := service.DescribeTeoApplicationProxy(ctx, zoneId, proxyId) + if agents == nil { + return fmt.Errorf("zone ApplicationProxy %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccTeoApplicationProxy = testAccTeoZone + ` + +resource "tencentcloud_teo_application_proxy" "basic" { + zone_id = tencentcloud_teo_zone.basic.id + + accelerate_type = 1 + security_type = 1 + plat_type = "domain" + proxy_name = "test-instance" + proxy_type = "instance" + session_persist_time = 2400 +} + +` diff --git a/tencentcloud/resource_tc_teo_certificate_config.go b/tencentcloud/services/teo/resource_tc_teo_certificate_config.go similarity index 84% rename from tencentcloud/resource_tc_teo_certificate_config.go rename to tencentcloud/services/teo/resource_tc_teo_certificate_config.go index c9aa8923b4..20cee3fd88 100644 --- a/tencentcloud/resource_tc_teo_certificate_config.go +++ b/tencentcloud/services/teo/resource_tc_teo_certificate_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoCertificateConfig() *schema.Resource { +func ResourceTencentCloudTeoCertificateConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTeoCertificateConfigCreate, Read: resourceTencentCloudTeoCertificateConfigRead, @@ -99,8 +102,8 @@ func resourceTencentCloudTeoCertificateConfig() *schema.Resource { } func resourceTencentCloudTeoCertificateConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_certificate_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_certificate_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( zoneId string @@ -114,22 +117,22 @@ func resourceTencentCloudTeoCertificateConfigCreate(d *schema.ResourceData, meta host = v.(string) } - d.SetId(zoneId + FILED_SP + host) + d.SetId(zoneId + tccommon.FILED_SP + host) return resourceTencentCloudTeoCertificateConfigUpdate(d, meta) } func resourceTencentCloudTeoCertificateConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_certificate_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_certificate_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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,15 +211,15 @@ func resourceTencentCloudTeoCertificateConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudTeoCertificateConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_certificate_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_certificate_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 := teo.NewModifyHostsCertificateRequest() - 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()) } @@ -259,10 +262,10 @@ func resourceTencentCloudTeoCertificateConfigUpdate(d *schema.ResourceData, meta request.Mode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyHostsCertificate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyHostsCertificate(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -273,7 +276,7 @@ func resourceTencentCloudTeoCertificateConfigUpdate(d *schema.ResourceData, meta return err } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err = service.CheckAccelerationDomainStatus(ctx, zoneId, host, "") if err != nil { return err @@ -283,8 +286,8 @@ func resourceTencentCloudTeoCertificateConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTeoCertificateConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_certificate_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_certificate_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_teo_certificate_config_test.go b/tencentcloud/services/teo/resource_tc_teo_certificate_config_test.go similarity index 86% rename from tencentcloud/resource_tc_teo_certificate_config_test.go rename to tencentcloud/services/teo/resource_tc_teo_certificate_config_test.go index 934670dc47..4e03d469c5 100644 --- a/tencentcloud/resource_tc_teo_certificate_config_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_certificate_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package teo_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 TestAccTencentCloudTeoCertificateConfigResource_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: testAccTeoCertificateConfig, diff --git a/tencentcloud/resource_tc_teo_origin_group.go b/tencentcloud/services/teo/resource_tc_teo_origin_group.go similarity index 86% rename from tencentcloud/resource_tc_teo_origin_group.go rename to tencentcloud/services/teo/resource_tc_teo_origin_group.go index 82d7b5e0b2..8a0531876f 100644 --- a/tencentcloud/resource_tc_teo_origin_group.go +++ b/tencentcloud/services/teo/resource_tc_teo_origin_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoOriginGroup() *schema.Resource { +func ResourceTencentCloudTeoOriginGroup() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoOriginGroupRead, Create: resourceTencentCloudTeoOriginGroupCreate, @@ -125,10 +128,10 @@ func resourceTencentCloudTeoOriginGroup() *schema.Resource { } func resourceTencentCloudTeoOriginGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_origin_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_origin_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = teo.NewCreateOriginGroupRequest() @@ -194,10 +197,10 @@ func resourceTencentCloudTeoOriginGroupCreate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateOriginGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().CreateOriginGroup(request) if e != nil { - return retryError(e, "OperationDenied") + return tccommon.RetryError(e, "OperationDenied") } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -213,20 +216,20 @@ func resourceTencentCloudTeoOriginGroupCreate(d *schema.ResourceData, meta inter originGroupId = *response.Response.OriginGroupId - d.SetId(zoneId + FILED_SP + originGroupId) + d.SetId(zoneId + tccommon.FILED_SP + originGroupId) return resourceTencentCloudTeoOriginGroupRead(d, meta) } func resourceTencentCloudTeoOriginGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_origin_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_origin_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -310,13 +313,13 @@ func resourceTencentCloudTeoOriginGroupRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTeoOriginGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_origin_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_origin_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := teo.NewModifyOriginGroupRequest() - 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()) } @@ -378,10 +381,10 @@ func resourceTencentCloudTeoOriginGroupUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyOriginGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyOriginGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -398,15 +401,15 @@ func resourceTencentCloudTeoOriginGroupUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTeoOriginGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_origin_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_origin_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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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_teo_origin_group_test.go b/tencentcloud/services/teo/resource_tc_teo_origin_group_test.go similarity index 76% rename from tencentcloud/resource_tc_teo_origin_group_test.go rename to tencentcloud/services/teo/resource_tc_teo_origin_group_test.go index b25dfb404d..c543b9f381 100644 --- a/tencentcloud/resource_tc_teo_origin_group_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_origin_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo_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" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudTeoOriginGroup_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckOriginGroupDestroy, Steps: []resource.TestStep{ { @@ -44,14 +48,14 @@ func TestAccTencentCloudTeoOriginGroup_basic(t *testing.T) { } func testAccCheckOriginGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_teo_origin_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) } @@ -71,21 +75,21 @@ func testAccCheckOriginGroupDestroy(s *terraform.State) error { func testAccCheckOriginGroupExists(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) } - 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) } zoneId := idSplit[0] originGroupId := idSplit[1] - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) originGroup, err := service.DescribeTeoOriginGroup(ctx, zoneId, originGroupId) if originGroup == nil { return fmt.Errorf("zone originGroup %s is not found", rs.Primary.ID) diff --git a/tencentcloud/services/teo/resource_tc_teo_ownership_verify.go b/tencentcloud/services/teo/resource_tc_teo_ownership_verify.go new file mode 100644 index 0000000000..3482c8edfd --- /dev/null +++ b/tencentcloud/services/teo/resource_tc_teo_ownership_verify.go @@ -0,0 +1,97 @@ +package teo + +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" + teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTeoOwnershipVerify() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTeoOwnershipVerifyCreate, + Read: resourceTencentCloudTeoOwnershipVerifyRead, + Delete: resourceTencentCloudTeoOwnershipVerifyDelete, + + Schema: map[string]*schema.Schema{ + "domain": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Verify domain name.", + }, + + "status": { + Computed: true, + Type: schema.TypeString, + Description: "Ownership verification results. `success`: verification successful; `fail`: verification failed.", + }, + + "result": { + Computed: true, + Type: schema.TypeString, + Description: "When the verification result is failed, this field will return the reason.", + }, + }, + } +} + +func resourceTencentCloudTeoOwnershipVerifyCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_teo_ownership_verify.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = teo.NewVerifyOwnershipRequest() + response = teo.NewVerifyOwnershipResponse() + domain string + ) + if v, ok := d.GetOk("domain"); ok { + domain = v.(string) + request.Domain = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().VerifyOwnership(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 operate teo ownershipVerify failed, reason:%+v", logId, err) + return err + } + + d.SetId(domain) + + if response != nil && response.Response != nil { + _ = d.Set("status", *response.Response.Status) + _ = d.Set("result", *response.Response.Result) + } + + return resourceTencentCloudTeoOwnershipVerifyRead(d, meta) +} + +func resourceTencentCloudTeoOwnershipVerifyRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_teo_ownership_verify.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudTeoOwnershipVerifyDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_teo_ownership_verify.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_teo_ownership_verify_test.go b/tencentcloud/services/teo/resource_tc_teo_ownership_verify_test.go similarity index 81% rename from tencentcloud/resource_tc_teo_ownership_verify_test.go rename to tencentcloud/services/teo/resource_tc_teo_ownership_verify_test.go index 2155fea7b0..c3f7601ac5 100644 --- a/tencentcloud/resource_tc_teo_ownership_verify_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_ownership_verify_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package teo_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 TestAccTencentCloudTeoOwnershipVerifyResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckZoneDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_teo_rule_engine.go b/tencentcloud/services/teo/resource_tc_teo_rule_engine.go similarity index 96% rename from tencentcloud/resource_tc_teo_rule_engine.go rename to tencentcloud/services/teo/resource_tc_teo_rule_engine.go index 529607b391..afbfaec326 100644 --- a/tencentcloud/resource_tc_teo_rule_engine.go +++ b/tencentcloud/services/teo/resource_tc_teo_rule_engine.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoRuleEngine() *schema.Resource { +func ResourceTencentCloudTeoRuleEngine() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoRuleEngineRead, Create: resourceTencentCloudTeoRuleEngineCreate, @@ -449,10 +452,10 @@ func resourceTencentCloudTeoRuleEngine() *schema.Resource { } func resourceTencentCloudTeoRuleEngineCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_rule_engine.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_rule_engine.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = teo.NewCreateRuleRequest() @@ -748,10 +751,10 @@ func resourceTencentCloudTeoRuleEngineCreate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().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(), result.ToJsonString()) @@ -767,20 +770,20 @@ func resourceTencentCloudTeoRuleEngineCreate(d *schema.ResourceData, meta interf ruleId = *response.Response.RuleId - d.SetId(zoneId + FILED_SP + ruleId) + d.SetId(zoneId + tccommon.FILED_SP + ruleId) return resourceTencentCloudTeoRuleEngineRead(d, meta) } func resourceTencentCloudTeoRuleEngineRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_rule_engine.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_rule_engine.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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -1075,13 +1078,13 @@ func resourceTencentCloudTeoRuleEngineRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudTeoRuleEngineUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_rule_engine.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_rule_engine.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := teo.NewModifyRuleRequest() - 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()) } @@ -1372,10 +1375,10 @@ func resourceTencentCloudTeoRuleEngineUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().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(), result.ToJsonString()) @@ -1392,15 +1395,15 @@ func resourceTencentCloudTeoRuleEngineUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudTeoRuleEngineDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_rule_engine.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_rule_engine.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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{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()) } @@ -1409,7 +1412,7 @@ func resourceTencentCloudTeoRuleEngineDelete(d *schema.ResourceData, meta interf err := resource.Retry(5*time.Second, func() *resource.RetryError { if e := service.DeleteTeoRuleEngineById(ctx, zoneId, ruleId); e != nil { - return retryError(e, "InternalError") + return tccommon.RetryError(e, "InternalError") } return nil }) diff --git a/tencentcloud/resource_tc_teo_rule_engine_test.go b/tencentcloud/services/teo/resource_tc_teo_rule_engine_test.go similarity index 89% rename from tencentcloud/resource_tc_teo_rule_engine_test.go rename to tencentcloud/services/teo/resource_tc_teo_rule_engine_test.go index 1edc45aa94..1868184b24 100644 --- a/tencentcloud/resource_tc_teo_rule_engine_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_rule_engine_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo_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" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudTeoRuleEngine_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckRuleEngineDestroy, Steps: []resource.TestStep{ { @@ -80,14 +84,14 @@ func TestAccTencentCloudTeoRuleEngine_basic(t *testing.T) { } func testAccCheckRuleEngineDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_teo_rule_engine" { 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) } @@ -107,21 +111,21 @@ func testAccCheckRuleEngineDestroy(s *terraform.State) error { func testAccCheckRuleEngineExists(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) } - 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) } zoneId := idSplit[0] ruleId := idSplit[1] - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) originGroup, err := service.DescribeTeoRuleEngine(ctx, zoneId, ruleId) if originGroup == nil { return fmt.Errorf("zone ruleEngine %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_teo_zone.go b/tencentcloud/services/teo/resource_tc_teo_zone.go similarity index 78% rename from tencentcloud/resource_tc_teo_zone.go rename to tencentcloud/services/teo/resource_tc_teo_zone.go index 355c516378..cc8a02ae98 100644 --- a/tencentcloud/resource_tc_teo_zone.go +++ b/tencentcloud/services/teo/resource_tc_teo_zone.go @@ -1,6 +1,9 @@ -package tencentcloud +package teo import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoZone() *schema.Resource { +func ResourceTencentCloudTeoZone() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoZoneRead, Create: resourceTencentCloudTeoZoneCreate, @@ -119,11 +123,11 @@ func resourceTencentCloudTeoZone() *schema.Resource { } func resourceTencentCloudTeoZoneCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone.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 = teo.NewCreateZoneRequest() @@ -151,13 +155,13 @@ func resourceTencentCloudTeoZoneCreate(d *schema.ResourceData, meta interface{}) request.PlanId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().CreateZone(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().CreateZone(request) if e != nil { - if isExpectError(e, []string{"ResourceInUse", "ResourceInUse.Others"}) { + if tccommon.IsExpectError(e, []string{"ResourceInUse", "ResourceInUse.Others"}) { 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()) @@ -174,11 +178,11 @@ func resourceTencentCloudTeoZoneCreate(d *schema.ResourceData, meta interface{}) zoneId = *response.Response.ZoneId d.SetId(zoneId) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoZone(ctx, zoneId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "pending" { return nil @@ -199,7 +203,7 @@ func resourceTencentCloudTeoZoneCreate(d *schema.ResourceData, meta interface{}) } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) resourceName := fmt.Sprintf("qcs::teo::uin/:zone/%s", zoneId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -209,13 +213,13 @@ func resourceTencentCloudTeoZoneCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTeoZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_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) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} zoneId := d.Id() @@ -288,8 +292,8 @@ func resourceTencentCloudTeoZoneRead(d *schema.ResourceData, meta interface{}) e _ = d.Set("status", zone.Status) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "teo", "zone", "", zoneId) if err != nil { return err @@ -300,12 +304,12 @@ func resourceTencentCloudTeoZoneRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudTeoZoneUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request := teo.NewModifyZoneRequest() @@ -334,10 +338,10 @@ func resourceTencentCloudTeoZoneUpdate(d *schema.ResourceData, meta interface{}) request.Area = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyZone(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyZone(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -350,11 +354,11 @@ func resourceTencentCloudTeoZoneUpdate(d *schema.ResourceData, meta interface{}) return err } - service := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeTeoZone(ctx, zoneId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == "pending" { return nil @@ -367,11 +371,11 @@ func resourceTencentCloudTeoZoneUpdate(d *schema.ResourceData, meta interface{}) } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("teo", "zone", "", zoneId) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("teo", "zone", "", zoneId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -381,13 +385,13 @@ func resourceTencentCloudTeoZoneUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTeoZoneDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone.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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} zoneId := d.Id() instance, err := service.DescribeTeoZone(ctx, zoneId) diff --git a/tencentcloud/resource_tc_teo_zone_setting.go b/tencentcloud/services/teo/resource_tc_teo_zone_setting.go similarity index 97% rename from tencentcloud/resource_tc_teo_zone_setting.go rename to tencentcloud/services/teo/resource_tc_teo_zone_setting.go index db1cc42e1c..ae141c278b 100644 --- a/tencentcloud/resource_tc_teo_zone_setting.go +++ b/tencentcloud/services/teo/resource_tc_teo_zone_setting.go @@ -1,4 +1,4 @@ -package tencentcloud +package teo 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" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTeoZoneSetting() *schema.Resource { +func ResourceTencentCloudTeoZoneSetting() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTeoZoneSettingRead, Create: resourceTencentCloudTeoZoneSettingCreate, @@ -509,8 +512,8 @@ func resourceTencentCloudTeoZoneSetting() *schema.Resource { } func resourceTencentCloudTeoZoneSettingCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone_setting.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone_setting.create")() + defer tccommon.InconsistentCheck(d, meta)() var zoneId string if v, ok := d.GetOk("zone_id"); ok { @@ -523,13 +526,13 @@ func resourceTencentCloudTeoZoneSettingCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTeoZoneSettingRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone_setting.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone_setting.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 := TeoService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} zoneId := d.Id() @@ -794,10 +797,10 @@ func resourceTencentCloudTeoZoneSettingRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTeoZoneSettingUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone_setting.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone_setting.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := teo.NewModifyZoneSettingRequest() zoneId := d.Id() @@ -1088,9 +1091,9 @@ func resourceTencentCloudTeoZoneSettingUpdate(d *schema.ResourceData, meta inter } err := resource.Retry(15*time.Second, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTeoClient().ModifyZoneSetting(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyZoneSetting(request) if e != nil { - return retryError(e, "InvalidParameter.ZoneNotFound") + return tccommon.RetryError(e, "InvalidParameter.ZoneNotFound") } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -1106,8 +1109,8 @@ func resourceTencentCloudTeoZoneSettingUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTeoZoneSettingDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_teo_zone_setting.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_teo_zone_setting.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_teo_zone_setting_test.go b/tencentcloud/services/teo/resource_tc_teo_zone_setting_test.go similarity index 92% rename from tencentcloud/resource_tc_teo_zone_setting_test.go rename to tencentcloud/services/teo/resource_tc_teo_zone_setting_test.go index 29f14ea15d..313243684a 100644 --- a/tencentcloud/resource_tc_teo_zone_setting_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_zone_setting_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package teo_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudTeoZoneSetting_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTeoZoneSetting, @@ -84,15 +88,15 @@ func TestAccTencentCloudTeoZoneSetting_basic(t *testing.T) { func testAccCheckZoneSettingExists(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 := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) setting, err := service.DescribeTeoZoneSetting(ctx, rs.Primary.ID) if setting == nil { return fmt.Errorf("zone setting %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_teo_zone_test.go b/tencentcloud/services/teo/resource_tc_teo_zone_test.go similarity index 83% rename from tencentcloud/resource_tc_teo_zone_test.go rename to tencentcloud/services/teo/resource_tc_teo_zone_test.go index 9051de8e58..fc1074380e 100644 --- a/tencentcloud/resource_tc_teo_zone_test.go +++ b/tencentcloud/services/teo/resource_tc_teo_zone_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package teo_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcteo "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/teo" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,11 +22,11 @@ func init() { } func testSweepZone(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := TeoService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcteo.NewTeoService(client) zone, err := service.DescribeTeoZone(ctx, "") if err != nil { @@ -45,8 +49,8 @@ func testSweepZone(region string) error { func TestAccTencentCloudTeoZone_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PRIVATE) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckZoneDestroy, Steps: []resource.TestStep{ { @@ -97,9 +101,9 @@ func TestAccTencentCloudTeoZone_basic(t *testing.T) { } func testAccCheckZoneDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_teo_zone" { continue @@ -118,15 +122,15 @@ func testAccCheckZoneDestroy(s *terraform.State) error { func testAccCheckZoneExists(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 := TeoService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcteo.NewTeoService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) agents, err := service.DescribeTeoZone(ctx, rs.Primary.ID) if agents == nil { return fmt.Errorf("zone %s is not found", rs.Primary.ID) diff --git a/tencentcloud/service_tencentcloud_teo.go b/tencentcloud/services/teo/service_tencentcloud_teo.go similarity index 95% rename from tencentcloud/service_tencentcloud_teo.go rename to tencentcloud/services/teo/service_tencentcloud_teo.go index 364929f8e8..3dd27ba317 100644 --- a/tencentcloud/service_tencentcloud_teo.go +++ b/tencentcloud/services/teo/service_tencentcloud_teo.go @@ -1,24 +1,31 @@ -package tencentcloud +package teo import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" + "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 NewTeoService(client *connectivity.TencentCloudClient) TeoService { + return TeoService{client: client} +} + type TeoService struct { client *connectivity.TencentCloudClient } func (me *TeoService) DescribeTeoZone(ctx context.Context, zoneId string) (zone *teo.Zone, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeZonesRequest() ) @@ -78,7 +85,7 @@ func (me *TeoService) DescribeTeoZone(ctx context.Context, zoneId string) (zone } func (me *TeoService) DeleteTeoZoneById(ctx context.Context, zoneId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteZoneRequest() request.ZoneId = &zoneId @@ -105,7 +112,7 @@ func (me *TeoService) DeleteTeoZoneById(ctx context.Context, zoneId string) (err func (me *TeoService) DescribeTeoOriginGroup(ctx context.Context, zoneId, originGroupId string) (originGroup *teo.OriginGroup, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeOriginGroupRequest() ) @@ -168,7 +175,7 @@ func (me *TeoService) DescribeTeoOriginGroup(ctx context.Context, } func (me *TeoService) DeleteTeoOriginGroupById(ctx context.Context, zoneId, originGroupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteOriginGroupRequest() request.ZoneId = &zoneId @@ -196,7 +203,7 @@ func (me *TeoService) DeleteTeoOriginGroupById(ctx context.Context, zoneId, orig func (me *TeoService) DescribeTeoRuleEngine(ctx context.Context, zoneId, ruleId string) (ruleEngine *teo.RuleItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeRulesRequest() ) @@ -242,7 +249,7 @@ func (me *TeoService) DescribeTeoRuleEngine(ctx context.Context, zoneId, ruleId func (me *TeoService) DescribeTeoRuleEngines(ctx context.Context, zoneId string) (ruleEngines []*teo.RuleItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeRulesRequest() ) @@ -274,7 +281,7 @@ func (me *TeoService) DescribeTeoRuleEngines(ctx context.Context, zoneId string) } func (me *TeoService) DeleteTeoRuleEngineById(ctx context.Context, zoneId, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteRulesRequest() @@ -303,7 +310,7 @@ func (me *TeoService) DeleteTeoRuleEngineById(ctx context.Context, zoneId, ruleI func (me *TeoService) DescribeTeoApplicationProxy(ctx context.Context, zoneId, proxyId string) (applicationProxy *teo.ApplicationProxy, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeApplicationProxiesRequest() ) @@ -373,7 +380,7 @@ func (me *TeoService) DescribeTeoApplicationProxy(ctx context.Context, } func (me *TeoService) DeleteTeoApplicationProxyById(ctx context.Context, zoneId, proxyId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteApplicationProxyRequest() @@ -402,7 +409,7 @@ func (me *TeoService) DeleteTeoApplicationProxyById(ctx context.Context, zoneId, func (me *TeoService) DescribeTeoApplicationProxyRule(ctx context.Context, zoneId, proxyId, ruleId string) (applicationProxyRule *teo.ApplicationProxyRule, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeApplicationProxiesRequest() ) @@ -454,7 +461,7 @@ func (me *TeoService) DescribeTeoApplicationProxyRule(ctx context.Context, func (me *TeoService) DeleteTeoApplicationProxyRuleById(ctx context.Context, zoneId, proxyId, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteApplicationProxyRuleRequest() @@ -484,7 +491,7 @@ func (me *TeoService) DeleteTeoApplicationProxyRuleById(ctx context.Context, func (me *TeoService) DescribeTeoZoneSetting(ctx context.Context, zoneId string) (zoneSetting *teo.ZoneSetting, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeZoneSettingRequest() ) @@ -512,7 +519,7 @@ func (me *TeoService) DescribeTeoZoneSetting(ctx context.Context, zoneId string) func (me *TeoService) DescribeTeoDefaultCertificate(ctx context.Context, zoneId, certId string) (defaultCertificate *teo.DefaultServerCertInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeDefaultCertificatesRequest() ) @@ -575,7 +582,7 @@ func (me *TeoService) DescribeTeoDefaultCertificate(ctx context.Context, func (me *TeoService) DescribeTeoZoneAvailablePlansByFilter(ctx context.Context) (planInfos []*teo.PlanInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeAvailablePlansRequest() ) @@ -605,7 +612,7 @@ func (me *TeoService) DescribeTeoZoneAvailablePlansByFilter(ctx context.Context) func (me *TeoService) DescribeTeoRuleEnginePriority(ctx context.Context, zoneId string) (ruleEnginePriority []*teo.RuleItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeRulesRequest() ) @@ -633,7 +640,7 @@ func (me *TeoService) DescribeTeoRuleEnginePriority(ctx context.Context, func (me *TeoService) DescribeTeoRuleEngineSettingsByFilter(ctx context.Context) (actions []*teo.RulesSettingAction, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeRulesSettingRequest() ) @@ -679,7 +686,7 @@ func (me *TeoService) CheckZoneComplete(ctx context.Context, zoneId string) erro } func (me *TeoService) DescribeTeoAccelerationDomainById(ctx context.Context, zoneId string, domainName string) (accelerationDomain *teo.AccelerationDomain, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDescribeAccelerationDomainsRequest() request.ZoneId = &zoneId @@ -733,7 +740,7 @@ func (me *TeoService) DescribeTeoAccelerationDomainById(ctx context.Context, zon } func (me *TeoService) DeleteTeoAccelerationDomainById(ctx context.Context, zoneId string, domainName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := teo.NewDeleteAccelerationDomainsRequest() request.ZoneId = &zoneId @@ -759,7 +766,7 @@ func (me *TeoService) DeleteTeoAccelerationDomainById(ctx context.Context, zoneI func (me *TeoService) DescribeIdentifications(ctx context.Context, domain string) (identifications []*teo.Identification, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = teo.NewDescribeIdentificationsRequest() ) @@ -789,7 +796,7 @@ func (me *TeoService) DescribeIdentifications(ctx context.Context, domain string } func (me *TeoService) ModifyZoneStatus(ctx context.Context, zoneId string, paused bool, operate string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req := teo.NewModifyZoneStatusRequest() req.ZoneId, req.Paused = &zoneId, helper.Bool(paused) @@ -799,10 +806,10 @@ func (me *TeoService) ModifyZoneStatus(ctx context.Context, zoneId string, pause return e } - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := me.DescribeTeoZone(ctx, zoneId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if operate == "delete" { if *instance.ActiveStatus == "paused" { @@ -823,10 +830,10 @@ func (me *TeoService) ModifyZoneStatus(ctx context.Context, zoneId string, pause } func (me *TeoService) CheckAccelerationDomainStatus(ctx context.Context, zoneId, domainName, operate string) error { - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := me.DescribeTeoAccelerationDomainById(ctx, zoneId, domainName) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if operate == "delete" { if *instance.DomainStatus == "offline" { diff --git a/tencentcloud/data_source_tc_container_cluster_instances.go b/tencentcloud/services/tke/data_source_tc_container_cluster_instances.go similarity index 87% rename from tencentcloud/data_source_tc_container_cluster_instances.go rename to tencentcloud/services/tke/data_source_tc_container_cluster_instances.go index 42f1bf82e9..a6b19c8c55 100644 --- a/tencentcloud/data_source_tc_container_cluster_instances.go +++ b/tencentcloud/services/tke/data_source_tc_container_cluster_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package tke 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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudContainerClusterInstances() *schema.Resource { +func DataSourceTencentCloudContainerClusterInstances() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.16.0. Please use `tencentcloud_kubernetes_clusters` instead.", Read: dataSourceTencentCloudContainerClusterInstancesRead, @@ -81,9 +84,9 @@ func dataSourceTencentCloudContainerClusterInstances() *schema.Resource { } func dataSourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_container_cluster_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_container_cluster_instances.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tke.NewDescribeClusterInstancesRequest() if clusterId, ok := d.GetOkExists("cluster_id"); ok { @@ -95,12 +98,12 @@ func dataSourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, } var response *tke.DescribeClusterInstancesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().DescribeClusterInstances(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().DescribeClusterInstances(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) } response = result return nil @@ -131,12 +134,12 @@ func dataSourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, describeInstancesreq := cvm.NewDescribeInstancesRequest() describeInstancesreq.InstanceIds = []*string{node.InstanceId} var describeInstancesResponse *cvm.DescribeInstancesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstances(describeInstancesreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstances(describeInstancesreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeInstancesreq.GetAction(), describeInstancesreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } describeInstancesResponse = result return nil diff --git a/tencentcloud/data_source_tc_container_cluster_instances_test.go b/tencentcloud/services/tke/data_source_tc_container_cluster_instances_test.go similarity index 77% rename from tencentcloud/data_source_tc_container_cluster_instances_test.go rename to tencentcloud/services/tke/data_source_tc_container_cluster_instances_test.go index d7002c392e..f065fc8958 100644 --- a/tencentcloud/data_source_tc_container_cluster_instances_test.go +++ b/tencentcloud/services/tke/data_source_tc_container_cluster_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_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 TestAccTencentCloudDataSourceContainerClusterInstances(t *testing.T) { t.Parallel() key := "data.tencentcloud_container_cluster_instances.foo_instance" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataSourceContainerClusterInstancesConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(key), + tcacctest.AccCheckTencentCloudDataSourceID(key), resource.TestCheckResourceAttrSet(key, "total_count"), resource.TestCheckResourceAttrSet(key, "nodes.#"), ), diff --git a/tencentcloud/data_source_tc_container_clusters.go b/tencentcloud/services/tke/data_source_tc_container_clusters.go similarity index 86% rename from tencentcloud/data_source_tc_container_clusters.go rename to tencentcloud/services/tke/data_source_tc_container_clusters.go index 2ea1f7637f..d82e6680f9 100644 --- a/tencentcloud/data_source_tc_container_clusters.go +++ b/tencentcloud/services/tke/data_source_tc_container_clusters.go @@ -1,17 +1,20 @@ -package tencentcloud +package tke 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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudContainerClusters() *schema.Resource { +func DataSourceTencentCloudContainerClusters() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.16.0. Please use `tencentcloud_kubernetes_clusters` instead.", Read: dataSourceTencentCloudContainerClustersRead, @@ -106,9 +109,9 @@ func dataSourceTencentCloudContainerClusters() *schema.Resource { } func dataSourceTencentCloudContainerClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_container_clusters.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_container_clusters.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tke.NewDescribeClustersRequest() if clusterId, ok := d.GetOkExists("cluster_id"); ok { @@ -120,12 +123,12 @@ func dataSourceTencentCloudContainerClustersRead(d *schema.ResourceData, meta in } var response *tke.DescribeClustersResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().DescribeClusters(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().DescribeClusters(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) } response = result return nil @@ -154,12 +157,12 @@ func dataSourceTencentCloudContainerClustersRead(d *schema.ResourceData, meta in describeClusterInstancesreq.ClusterId = cluster.ClusterId describeClusterInstancesreq.Limit = common.Int64Ptr(100) var describeClusterInstancesResponse *tke.DescribeClusterInstancesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().DescribeClusterInstances(describeClusterInstancesreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().DescribeClusterInstances(describeClusterInstancesreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeClusterInstancesreq.GetAction(), describeClusterInstancesreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } describeClusterInstancesResponse = result return nil @@ -177,12 +180,12 @@ func dataSourceTencentCloudContainerClustersRead(d *schema.ResourceData, meta in describeInstancesreq := cvm.NewDescribeInstancesRequest() describeInstancesreq.InstanceIds = instanceIds var describeInstancesResponse *cvm.DescribeInstancesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstances(describeInstancesreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstances(describeInstancesreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeInstancesreq.GetAction(), describeInstancesreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } describeInstancesResponse = result return nil @@ -201,12 +204,12 @@ func dataSourceTencentCloudContainerClustersRead(d *schema.ResourceData, meta in describeClusterSecurityreq := tke.NewDescribeClusterSecurityRequest() describeClusterSecurityreq.ClusterId = cluster.ClusterId var securityResponse *tke.DescribeClusterSecurityResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTkeClient().DescribeClusterSecurity(describeClusterSecurityreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().DescribeClusterSecurity(describeClusterSecurityreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeClusterSecurityreq.GetAction(), describeClusterSecurityreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } securityResponse = result return nil diff --git a/tencentcloud/services/tke/data_source_tc_container_clusters_test.go b/tencentcloud/services/tke/data_source_tc_container_clusters_test.go new file mode 100644 index 0000000000..2581401e2a --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_container_clusters_test.go @@ -0,0 +1,33 @@ +package tke_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudDataSourceContainerClusters(t *testing.T) { + t.Parallel() + key := "data.tencentcloud_container_clusters.foo" + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTencentCloudDataSourceContainerClustersConfig_basic, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID(key), + resource.TestCheckResourceAttrSet(key, "total_count"), + resource.TestCheckResourceAttrSet(key, "clusters.#"), + ), + }, + }, + }) +} + +const testAccTencentCloudDataSourceContainerClustersConfig_basic = ` +data "tencentcloud_container_clusters" "foo" { +} +` diff --git a/tencentcloud/data_source_tc_eks_cluster_credential.go b/tencentcloud/services/tke/data_source_tc_eks_cluster_credential.go similarity index 83% rename from tencentcloud/data_source_tc_eks_cluster_credential.go rename to tencentcloud/services/tke/data_source_tc_eks_cluster_credential.go index 7387a3f4fd..483df6bf67 100644 --- a/tencentcloud/data_source_tc_eks_cluster_credential.go +++ b/tencentcloud/services/tke/data_source_tc_eks_cluster_credential.go @@ -3,46 +3,50 @@ Provide a datasource to query EKS cluster credential info (offlined). ~> **NOTE:** This resource was offline no longer supported. -Example Usage +# Example Usage ```hcl -data "tencentcloud_eks_cluster_credential" "foo" { - cluster_id = "cls-xxxxxxxx" -} + + data "tencentcloud_eks_cluster_credential" "foo" { + cluster_id = "cls-xxxxxxxx" + } # example outputs -output "addresses" { - value = data.tencentcloud_eks_cluster_credential.cred.addresses -} -output "ca_cert" { - value = data.tencentcloud_eks_cluster_credential.cred.credential.ca_cert -} + output "addresses" { + value = data.tencentcloud_eks_cluster_credential.cred.addresses + } -output "token" { - value = data.tencentcloud_eks_cluster_credential.cred.credential.token -} + output "ca_cert" { + value = data.tencentcloud_eks_cluster_credential.cred.credential.ca_cert + } -output "public_lb_param" { - value = data.tencentcloud_eks_cluster_credential.cred.public_lb.0.extra_param -} + output "token" { + value = data.tencentcloud_eks_cluster_credential.cred.credential.token + } -output "internal_lb_subnet" { - value = data.tencentcloud_eks_cluster_credential.cred.internal_lb.0.subnet_id -} + output "public_lb_param" { + value = data.tencentcloud_eks_cluster_credential.cred.public_lb.0.extra_param + } + + output "internal_lb_subnet" { + value = data.tencentcloud_eks_cluster_credential.cred.internal_lb.0.subnet_id + } ``` */ -package tencentcloud +package tke import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" ) -func datasourceTencentCloudEksClusterCredential() *schema.Resource { +func DataSourceTencentCloudEksClusterCredential() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource was offline no longer supported.", Read: datasourceTencentCloudEksClusterCredentialRead, @@ -161,12 +165,12 @@ func datasourceTencentCloudEksClusterCredential() *schema.Resource { } func datasourceTencentCloudEksClusterCredentialRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("datasource.tencentcloud_eks_cluster_credential.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("datasource.tencentcloud_eks_cluster_credential.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 := EksService{client: client} clusterId := d.Get("cluster_id").(string) @@ -242,7 +246,7 @@ func datasourceTencentCloudEksClusterCredentialRead(d *schema.ResourceData, meta } if output, ok := d.GetOk("result_output_file"); ok { - return writeToFile(output.(string), result) + return tccommon.WriteToFile(output.(string), result) } return nil diff --git a/tencentcloud/data_source_tc_eks_cluster_credential_test.go b/tencentcloud/services/tke/data_source_tc_eks_cluster_credential_test.go similarity index 88% rename from tencentcloud/data_source_tc_eks_cluster_credential_test.go rename to tencentcloud/services/tke/data_source_tc_eks_cluster_credential_test.go index 2413763ae5..8c876ab9e8 100644 --- a/tencentcloud/data_source_tc_eks_cluster_credential_test.go +++ b/tencentcloud/services/tke/data_source_tc_eks_cluster_credential_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudEksClusterCredentialDataSource(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: testAccTencentCloudEksClusterCredentialBasic, @@ -30,7 +32,7 @@ func TestAccTencentCloudEksClusterCredentialDataSource(t *testing.T) { }) } -const testAccTencentCloudEksClusterForCred = defaultVpcVariable + ` +const testAccTencentCloudEksClusterForCred = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_eks_cluster" "foo" { cluster_name = "tf-eks-test" k8s_version = "1.18.4" diff --git a/tencentcloud/data_source_tc_eks_clusters.go b/tencentcloud/services/tke/data_source_tc_eks_clusters.go similarity index 89% rename from tencentcloud/data_source_tc_eks_clusters.go rename to tencentcloud/services/tke/data_source_tc_eks_clusters.go index e34a985d34..99e6dc2e3d 100644 --- a/tencentcloud/data_source_tc_eks_clusters.go +++ b/tencentcloud/services/tke/data_source_tc_eks_clusters.go @@ -3,26 +3,31 @@ Use this data source to query elastic kubernetes cluster resource (offlined). ~> **NOTE:** This resource was offline and no longer supported. -Example Usage +# Example Usage ``` -data "tencentcloud_eks_clusters" "foo" { - cluster_id = "cls-xxxxxxxx" -} + + data "tencentcloud_eks_clusters" "foo" { + cluster_id = "cls-xxxxxxxx" + } + ``` */ -package tencentcloud +package tke 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 dataSourceTencentCloudEKSClusters() *schema.Resource { +func DataSourceTencentCloudEKSClusters() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource was offline and no longer supported.", Read: dataSourceTencentCloudEKSClustersRead, @@ -140,13 +145,13 @@ func dataSourceTencentCloudEKSClusters() *schema.Resource { } func dataSourceTencentCloudEKSClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_eks_clusters.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_eks_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) service := EksService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var ( @@ -166,10 +171,10 @@ func dataSourceTencentCloudEKSClustersRead(d *schema.ResourceData, meta interfac infos, err := service.DescribeEKSClusters(ctx, id, name) if err != nil && id == "" { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = service.DescribeEKSClusters(ctx, id, name) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -219,7 +224,7 @@ LOOP: 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_eks_clusters_test.go b/tencentcloud/services/tke/data_source_tc_eks_clusters_test.go similarity index 88% rename from tencentcloud/data_source_tc_eks_clusters_test.go rename to tencentcloud/services/tke/data_source_tc_eks_clusters_test.go index 835cac79ce..a919769dba 100644 --- a/tencentcloud/data_source_tc_eks_clusters_test.go +++ b/tencentcloud/services/tke/data_source_tc_eks_clusters_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_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 TestAccTencentCloudEksClustersDataSource(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: testAccTencentCloudEKSClusterDestroy, Steps: []resource.TestStep{ { Config: testAccEksClusterDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_eks_clusters.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eks_clusters.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_eks_clusters.foo", "cluster_id"), resource.TestCheckResourceAttr("data.tencentcloud_eks_clusters.foo", "list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_eks_clusters.foo", "list.0.cluster_id"), @@ -40,7 +42,7 @@ func TestAccTencentCloudEksClustersDataSource(t *testing.T) { }) } -const testAccEksClusterDataSource = defaultVpcVariable + ` +const testAccEksClusterDataSource = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_eks_cluster" "foo" { cluster_name = "tf-eks-test" k8s_version = "1.18.4" diff --git a/tencentcloud/data_source_tc_kubernetes_available_cluster_versions.go b/tencentcloud/services/tke/data_source_tc_kubernetes_available_cluster_versions.go similarity index 83% rename from tencentcloud/data_source_tc_kubernetes_available_cluster_versions.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_available_cluster_versions.go index 40baf000db..3394999395 100644 --- a/tencentcloud/data_source_tc_kubernetes_available_cluster_versions.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_available_cluster_versions.go @@ -1,15 +1,18 @@ -package tencentcloud +package tke 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" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudKubernetesAvailableClusterVersions() *schema.Resource { +func DataSourceTencentCloudKubernetesAvailableClusterVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesAvailableClusterVersionsRead, Schema: map[string]*schema.Schema{ @@ -70,12 +73,12 @@ func dataSourceTencentCloudKubernetesAvailableClusterVersions() *schema.Resource } func dataSourceTencentCloudKubernetesAvailableClusterVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_kubernetes_available_cluster_versions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_available_cluster_versions.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 ( versions []*string @@ -96,12 +99,12 @@ func dataSourceTencentCloudKubernetesAvailableClusterVersionsRead(d *schema.Reso paramMap["cluster_ids"] = helper.InterfacesStringsPoint(clusterIdsSet) } - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeKubernetesAvailableClusterVersionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result != nil { versions = result.Versions @@ -147,7 +150,7 @@ func dataSourceTencentCloudKubernetesAvailableClusterVersionsRead(d *schema.Reso d.SetId(helper.DataResourceIdsHash(clusterIds)) 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/tke/data_source_tc_kubernetes_available_cluster_versions_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_available_cluster_versions_test.go new file mode 100644 index 0000000000..cb3582a9b0 --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_available_cluster_versions_test.go @@ -0,0 +1,58 @@ +package tke_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudKubernetesAvailableClusterVersionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(testAccKubernetesAvailableClusterVersionsDataSource_basic, tcacctest.DefaultTkeClusterId), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_available_cluster_versions.id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.id", "versions.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.id", "clusters.#"), + ), + }, + { + Config: fmt.Sprintf(testAccKubernetesAvailableClusterVersionsDataSource_multiple, tcacctest.DefaultTkeClusterId), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_available_cluster_versions.ids"), + resource.TestCheckResourceAttrSet("data.tencentcloud_kubernetes_available_cluster_versions.ids", "clusters.#"), + resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_available_cluster_versions.ids", "clusters.0.cluster_id", tcacctest.DefaultTkeClusterId), + ), + }, + }, + }) +} + +const testAccKubernetesAvailableClusterVersionsDataSource_basic = ` + +data "tencentcloud_kubernetes_available_cluster_versions" "id" { + cluster_id = "%s" +} + +output "versions"{ + value = data.tencentcloud_kubernetes_available_cluster_versions.id.versions +} + +` + +const testAccKubernetesAvailableClusterVersionsDataSource_multiple = ` + +data "tencentcloud_kubernetes_available_cluster_versions" "ids" { + cluster_ids = ["%s"] +} + +` diff --git a/tencentcloud/data_source_tc_kubernetes_charts.go b/tencentcloud/services/tke/data_source_tc_kubernetes_charts.go similarity index 86% rename from tencentcloud/data_source_tc_kubernetes_charts.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_charts.go index 34d2f6e500..5544cfffa7 100644 --- a/tencentcloud/data_source_tc_kubernetes_charts.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_charts.go @@ -1,15 +1,18 @@ -package tencentcloud +package tke import ( "context" "encoding/json" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudKubernetesCharts() *schema.Resource { +func DataSourceTencentCloudKubernetesCharts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesChartsRead, Schema: map[string]*schema.Schema{ @@ -62,11 +65,11 @@ func dataSourceTencentCloudKubernetesCharts() *schema.Resource { } func dataSourceTencentCloudKubernetesChartsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_kubernetes_charts.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_charts.read")() - 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 := TkeService{client: client} var ( @@ -121,7 +124,7 @@ func dataSourceTencentCloudKubernetesChartsRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - err := writeToFile(output.(string), chartList) + err := tccommon.WriteToFile(output.(string), chartList) if err != nil { return err } diff --git a/tencentcloud/services/tke/data_source_tc_kubernetes_charts_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_charts_test.go new file mode 100644 index 0000000000..fe5da80a5a --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_charts_test.go @@ -0,0 +1,32 @@ +package tke_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudKubernetesChartsDataSource(t *testing.T) { + t.Parallel() + dataSourceName := "data.tencentcloud_kubernetes_charts.test" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceKubernetesCharts, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet(dataSourceName, "chart_list.#"), + ), + }, + }, + }) +} + +const testAccDataSourceKubernetesCharts = ` +data "tencentcloud_kubernetes_charts" "test" { +} +` diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_authentication_options.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_authentication_options.go similarity index 89% rename from tencentcloud/data_source_tc_kubernetes_cluster_authentication_options.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_authentication_options.go index 60b1dbd515..77e8d3b905 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_authentication_options.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_authentication_options.go @@ -1,14 +1,16 @@ -package tencentcloud +package tke 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" kubernetes "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" ) -func dataSourceTencentCloudKubernetesClusterAuthenticationOptions() *schema.Resource { +func DataSourceTencentCloudKubernetesClusterAuthenticationOptions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesClusterAuthenticationOptionsRead, Schema: map[string]*schema.Schema{ @@ -92,16 +94,16 @@ func dataSourceTencentCloudKubernetesClusterAuthenticationOptions() *schema.Reso } func dataSourceTencentCloudKubernetesClusterAuthenticationOptionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_kubernetes_cluster_authentication_options.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_cluster_authentication_options.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) clusterId := d.Get("cluster_id").(string) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( options *kubernetes.ServiceAccountAuthenticationOptions @@ -110,10 +112,10 @@ func dataSourceTencentCloudKubernetesClusterAuthenticationOptionsRead(d *schema. e error ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { options, state, oidcConfig, e = service.DescribeClusterAuthenticationOptions(ctx, clusterId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -170,7 +172,7 @@ func dataSourceTencentCloudKubernetesClusterAuthenticationOptionsRead(d *schema. 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/services/tke/data_source_tc_kubernetes_cluster_authentication_options_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_authentication_options_test.go new file mode 100644 index 0000000000..df86b20040 --- /dev/null +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_authentication_options_test.go @@ -0,0 +1,33 @@ +package tke_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudKubernetesClusterAuthenticationOptionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccKubernetesClusterAuthenticationOptionsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_authentication_options.cluster_authentication_options")), + }, + }, + }) +} + +const testAccKubernetesClusterAuthenticationOptionsDataSource = ` + +data "tencentcloud_kubernetes_cluster_authentication_options" "cluster_authentication_options" { + cluster_id = "cls-kzilgv5m" +} + +` diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_common_names.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go similarity index 82% rename from tencentcloud/data_source_tc_kubernetes_cluster_common_names.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go index 0837232944..ac73bd4451 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_common_names.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names.go @@ -1,14 +1,17 @@ -package tencentcloud +package tke import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func datasourceTencentCloudKubernetesClusterCommonNames() *schema.Resource { +func DataSourceTencentCloudKubernetesClusterCommonNames() *schema.Resource { return &schema.Resource{ Read: datasourceTencentCloudKubernetesClusterCommonNamesRead, Importer: &schema.ResourceImporter{ @@ -61,12 +64,12 @@ func datasourceTencentCloudKubernetesClusterCommonNames() *schema.Resource { } func datasourceTencentCloudKubernetesClusterCommonNamesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("datasource.tencentcloud_kubernetes_cluster_common_names.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("datasource.tencentcloud_kubernetes_cluster_common_names.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 := TkeService{client} clusterId := d.Get("cluster_id").(string) @@ -102,10 +105,10 @@ func datasourceTencentCloudKubernetesClusterCommonNamesRead(d *schema.ResourceDa return err } - d.SetId(clusterId + FILED_SP + helper.DataResourceIdsHash(cns)) + d.SetId(clusterId + tccommon.FILED_SP + helper.DataResourceIdsHash(cns)) if output, ok := d.GetOk("result_output_file"); ok { - return writeToFile(output.(string), result) + return tccommon.WriteToFile(output.(string), result) } return nil diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_common_names_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_test.go similarity index 83% rename from tencentcloud/data_source_tc_kubernetes_cluster_common_names_test.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_test.go index 1d79c281b3..5bf36cdf82 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_common_names_test.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_common_names_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudKubernetesCommonNamesDataSource(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: testAccKubernetesCommonNamesBasic, @@ -39,7 +41,7 @@ locals { } data "tencentcloud_kubernetes_clusters" "cls" { - cluster_name = "` + defaultTkeClusterName + `" + cluster_name = "` + tcacctest.DefaultTkeClusterName + `" } data "tencentcloud_cam_roles" "role_basic" { diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_instances.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances.go similarity index 96% rename from tencentcloud/data_source_tc_kubernetes_cluster_instances.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances.go index e3153c68bb..6651c1b135 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_instances.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package tke 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" kubernetes "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudKubernetesClusterInstances() *schema.Resource { +func DataSourceTencentCloudKubernetesClusterInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesClusterInstancesRead, Schema: map[string]*schema.Schema{ @@ -355,12 +358,12 @@ func dataSourceTencentCloudKubernetesClusterInstances() *schema.Resource { } func dataSourceTencentCloudKubernetesClusterInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_kubernetes_cluster_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_cluster_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("cluster_id"); ok { @@ -396,13 +399,13 @@ func dataSourceTencentCloudKubernetesClusterInstancesRead(d *schema.ResourceData paramMap["Filters"] = tmpSet } - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceSet []*kubernetes.Instance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeKubernetesClusterInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceSet = result return nil @@ -651,7 +654,7 @@ func dataSourceTencentCloudKubernetesClusterInstancesRead(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_kubernetes_cluster_instances_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances_test.go similarity index 81% rename from tencentcloud/data_source_tc_kubernetes_cluster_instances_test.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances_test.go index 97d284a347..aaf3b14203 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_instances_test.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_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 TestAccTencentCloudKubernetesClusterInstancesDataSource_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: testAccKubernetesClusterInstancesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_instances.cluster_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_instances.cluster_instances"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_instances.cluster_instances", "instance_set.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_instances.cluster_instances", "instance_set.0.instance_id", "ins-kqmx8dm2"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_instances.cluster_instances", "instance_set.0.instance_role", "WORKER"), @@ -27,7 +29,7 @@ func TestAccTencentCloudKubernetesClusterInstancesDataSource_basic(t *testing.T) { Config: testAccKubernetesClusterInstancesDataSourceFilter, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_instances.cluster_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_instances.cluster_instances"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_instances.cluster_instances", "instance_set.#", "0"), ), }, diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_levels.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels.go similarity index 83% rename from tencentcloud/data_source_tc_kubernetes_cluster_levels.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels.go index 56c07e353c..ccccd48d15 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_levels.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels.go @@ -1,14 +1,16 @@ -package tencentcloud +package tke import ( "context" "fmt" "math/rand" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func datasourceTencentCloudKubernetesClusterLevels() *schema.Resource { +func DataSourceTencentCloudKubernetesClusterLevels() *schema.Resource { return &schema.Resource{ Read: datasourceTencentCloudKubernetesClusterLevelsRead, Schema: map[string]*schema.Schema{ @@ -76,12 +78,12 @@ func datasourceTencentCloudKubernetesClusterLevels() *schema.Resource { } func datasourceTencentCloudKubernetesClusterLevelsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("datasource.tencentcloud_kubernetes_cluster_levels.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("datasource.tencentcloud_kubernetes_cluster_levels.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) result, err := service.DescribeClusterLevelAttribute(ctx, clusterId) @@ -111,7 +113,7 @@ func datasourceTencentCloudKubernetesClusterLevelsRead(d *schema.ResourceData, m _ = d.Set("list", list) if output, ok := d.GetOk("result_output_file"); ok { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_levels_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels_test.go similarity index 88% rename from tencentcloud/data_source_tc_kubernetes_cluster_levels_test.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels_test.go index 6c07d62819..edaf8e359b 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_levels_test.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_levels_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -10,8 +12,8 @@ import ( func TestAccTencentCloudKubernetesClusterLevelDataSource(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: testAccDataSourceKubernetesClusterLevelDestroy, Steps: []resource.TestStep{ { @@ -41,7 +43,7 @@ const testAccDataSourceKubernetesClusterLevelBasic = ` data "tencentcloud_kubernetes_cluster_levels" "foo" {} data "tencentcloud_kubernetes_clusters" "cls" { - cluster_name = "` + defaultTkeClusterName + `" + cluster_name = "` + tcacctest.DefaultTkeClusterName + `" } data "tencentcloud_kubernetes_cluster_levels" "with_cluster" { diff --git a/tencentcloud/data_source_tc_kubernetes_cluster_node_pools.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools.go similarity index 97% rename from tencentcloud/data_source_tc_kubernetes_cluster_node_pools.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools.go index ebf48b5500..6c46143aaf 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_node_pools.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke 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" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" @@ -10,7 +12,7 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudKubernetesClusterNodePools() *schema.Resource { +func DataSourceTencentCloudKubernetesClusterNodePools() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesClusterNodePoolsRead, Schema: map[string]*schema.Schema{ @@ -438,12 +440,12 @@ func dataSourceTencentCloudKubernetesClusterNodePools() *schema.Resource { } func dataSourceTencentCloudKubernetesClusterNodePoolsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tke_cluster_node_pools.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tke_cluster_node_pools.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("cluster_id"); ok { @@ -470,13 +472,13 @@ func dataSourceTencentCloudKubernetesClusterNodePoolsRead(d *schema.ResourceData paramMap["Filters"] = tmpSet } - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var nodePoolSet []*tke.NodePool - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeKubernetesClusterNodePoolsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } nodePoolSet = result return nil @@ -804,7 +806,7 @@ func dataSourceTencentCloudKubernetesClusterNodePoolsRead(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_kubernetes_cluster_node_pools_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools_test.go similarity index 79% rename from tencentcloud/data_source_tc_kubernetes_cluster_node_pools_test.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools_test.go index e167ee613c..067c010d31 100644 --- a/tencentcloud/data_source_tc_kubernetes_cluster_node_pools_test.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_cluster_node_pools_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_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 TestAccTencentCloudTkeClusterNodePoolsDataSource_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: testAccTkeClusterNodePoolsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_node_pools.cluster_node_pools"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_kubernetes_cluster_node_pools.cluster_node_pools"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_node_pools.cluster_node_pools", "node_pool_set.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_node_pools.cluster_node_pools", "node_pool_set.0.node_pool_id", "np-ngjwhdv4"), resource.TestCheckResourceAttr("data.tencentcloud_kubernetes_cluster_node_pools.cluster_node_pools", "node_pool_set.0.name", "mynodepool_xxxx"), diff --git a/tencentcloud/data_source_tc_kubernetes_clusters.go b/tencentcloud/services/tke/data_source_tc_kubernetes_clusters.go similarity index 93% rename from tencentcloud/data_source_tc_kubernetes_clusters.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_clusters.go index ff096b761d..2ad91a29a9 100644 --- a/tencentcloud/data_source_tc_kubernetes_clusters.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_clusters.go @@ -1,11 +1,14 @@ -package tencentcloud +package tke 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" ) @@ -198,7 +201,7 @@ func tkeClusterInfo() map[string]*schema.Schema { return schemaBody } -func dataSourceTencentCloudKubernetesClusters() *schema.Resource { +func DataSourceTencentCloudKubernetesClusters() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKubernetesClustersRead, Schema: map[string]*schema.Schema{ @@ -238,13 +241,13 @@ func dataSourceTencentCloudKubernetesClusters() *schema.Resource { } func dataSourceTencentCloudKubernetesClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_kubernetes_clusters.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_kubernetes_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) service := TkeService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var ( @@ -264,10 +267,10 @@ func dataSourceTencentCloudKubernetesClustersRead(d *schema.ResourceData, meta i infos, err := service.DescribeClusters(ctx, id, name) if err != nil && id == "" { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = service.DescribeClusters(ctx, id, name) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -377,10 +380,10 @@ LOOP: config, err := service.DescribeClusterConfig(ctx, info.ClusterId, true) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { config, err = service.DescribeClusterConfig(ctx, d.Id(), true) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -392,10 +395,10 @@ LOOP: intranetConfig, err := service.DescribeClusterConfig(ctx, info.ClusterId, false) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { config, err = service.DescribeClusterConfig(ctx, d.Id(), false) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -419,7 +422,7 @@ LOOP: 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_kubernetes_clusters_test.go b/tencentcloud/services/tke/data_source_tc_kubernetes_clusters_test.go similarity index 77% rename from tencentcloud/data_source_tc_kubernetes_clusters_test.go rename to tencentcloud/services/tke/data_source_tc_kubernetes_clusters_test.go index 3f16c09b4d..26366f5a07 100644 --- a/tencentcloud/data_source_tc_kubernetes_clusters_test.go +++ b/tencentcloud/services/tke/data_source_tc_kubernetes_clusters_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,14 +14,14 @@ func TestAccTencentCloudKubernetesClusterDataSource(t *testing.T) { key := "data.tencentcloud_kubernetes_clusters.name" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceTencentCloudTkeStr, Check: resource.ComposeTestCheckFunc( // name filter - testAccCheckTencentCloudDataSourceID(key), + tcacctest.AccCheckTencentCloudDataSourceID(key), resource.TestCheckResourceAttr(key, "cluster_name", "terraform"), resource.TestCheckResourceAttrSet(key, "list.#"), ), @@ -34,14 +36,14 @@ func TestAccTencentCloudKubernetesClusterTagsDataSource(t *testing.T) { key := "data.tencentcloud_kubernetes_clusters.tags" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceTencentCloudTkeTags, Check: resource.ComposeTestCheckFunc( // tags filter - testAccCheckTencentCloudDataSourceID(key), + tcacctest.AccCheckTencentCloudDataSourceID(key), resource.TestCheckResourceAttrSet(key, "list.#"), ), }, diff --git a/tencentcloud/services/tke/extension_tke.go b/tencentcloud/services/tke/extension_tke.go new file mode 100644 index 0000000000..abc0e7603a --- /dev/null +++ b/tencentcloud/services/tke/extension_tke.go @@ -0,0 +1,149 @@ +package tke + +import ( + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" +) + +const ( + TKE_CLUSTER_OS_CENTOS72 = "centos7.2x86_64" + TKE_CLUSTER_OS_CENTOS76 = "centos7.6.0_x64" + TKE_CLUSTER_OS_UBUNTU18 = "ubuntu18.04.1x86_64" + TKE_CLUSTER_OS_LINUX24 = "tlinux2.4x86_64" + TKE_CLUSTER_OS_LINUX22 = "tlinux2.2(tkernel3)x86_64" + TKE_CLUSTER_OS_LINUXF22 = "Tencent tlinux release 2.2 (Final)" +) + +// 兼容旧的 cluster_os 定义 +const ( + TkeClusterOsCentOS76 = "centos7.6x86_64" + //TkeClusterOsUbuntu16 = "ubuntu16.04.1 LTSx86_64" + TkeClusterOsUbuntu18 = "ubuntu18.04.1 LTSx86_64" +) + +var TKE_CLUSTER_OS = []string{TKE_CLUSTER_OS_CENTOS76, TKE_CLUSTER_OS_UBUNTU18, TKE_CLUSTER_OS_LINUX24} + +var tkeClusterOsMap = map[string]string{TKE_CLUSTER_OS_CENTOS72: TKE_CLUSTER_OS_CENTOS72, + TKE_CLUSTER_OS_CENTOS76: TKE_CLUSTER_OS_CENTOS76, + TKE_CLUSTER_OS_UBUNTU18: TKE_CLUSTER_OS_UBUNTU18, + TKE_CLUSTER_OS_LINUX24: TKE_CLUSTER_OS_LINUX24, + TKE_CLUSTER_OS_LINUX22: TKE_CLUSTER_OS_LINUX22, + TKE_CLUSTER_OS_LINUXF22: TKE_CLUSTER_OS_LINUXF22, +} + +func tkeToShowClusterOs(apiOs string) string { + for showName, apiName := range tkeClusterOsMap { + if apiName == apiOs { + return showName + } + } + return apiOs +} + +const ( + TKE_DEPLOY_TYPE_MANAGED = "MANAGED_CLUSTER" + TKE_DEPLOY_TYPE_INDEPENDENT = "INDEPENDENT_CLUSTER" +) + +var TKE_DEPLOY_TYPES = []string{TKE_DEPLOY_TYPE_MANAGED, TKE_DEPLOY_TYPE_INDEPENDENT} + +const ( + TKE_RUNTIME_DOCKER = "docker" + TKE_RUNTIME_CONTAINERD = "containerd" +) + +var TKE_RUNTIMES = []string{TKE_RUNTIME_DOCKER, TKE_RUNTIME_CONTAINERD} + +const ( + TKE_ROLE_MASTER_ETCD = "MASTER_ETCD" + TKE_ROLE_WORKER = "WORKER" +) + +var TKE_INSTANCE_CHARGE_TYPE = []string{svccvm.CVM_CHARGE_TYPE_PREPAID, svccvm.CVM_CHARGE_TYPE_POSTPAID} + +const ( + TKE_CLUSTER_OS_TYPE_DOCKER_CUSTOMIZE = "DOCKER_CUSTOMIZE" + TKE_CLUSTER_OS_TYPE_GENERAL = "GENERAL" +) + +var TKE_CLUSTER_OS_TYPES = []string{TKE_CLUSTER_OS_TYPE_GENERAL} + +const ( + TkeInternetStatusCreating = "Creating" + TkeInternetStatusCreateFailed = "CreateFailed" + TkeInternetStatusCreated = "Created" + TkeInternetStatusDeleting = "Deleting" + TkeInternetStatusDeleted = "Deleted" + TkeInternetStatusDeletedFailed = "DeletedFailed" + TkeInternetStatusNotfound = "NotFound" +) + +const ( + TKE_CLUSTER_NETWORK_TYPE_GR = "GR" + TKE_CLUSTER_NETWORK_TYPE_VPC_CNI = "VPC-CNI" + TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY = "CiliumOverlay" +) + +const ( + TKE_CLUSTER_VPC_CNI_STATUS_RUNNING = "Running" + TKE_CLUSTER_VPC_CNI_STATUS_SUCCEED = "Succeed" + TKE_CLUSTER_VPC_CNI_STATUS_FAILED = "Failed" +) + +var TKE_CLUSTER_NETWORK_TYPE = []string{TKE_CLUSTER_NETWORK_TYPE_GR, TKE_CLUSTER_NETWORK_TYPE_VPC_CNI, TKE_CLUSTER_NETWORK_TYPE_CILIUM_OVERLAY} + +const ( + TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP = "lan-ip" + TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME = "hostname" +) + +var TKE_CLUSTER_NODE_NAME_TYPE = []string{TKE_CLUSTER_NODE_NAME_TYPE_LAN_IP, TKE_CLUSTER_NODE_NAME_TYPE_HOSTNAME} + +const ( + TKE_CLUSTER_KUBE_PROXY_MODE_BPF = "kube-proxy-bpf" +) + +var TKE_CLUSTER_KUBE_PROXY_MODE = []string{TKE_CLUSTER_KUBE_PROXY_MODE_BPF} + +type OverrideSettings struct { + Master []tke.InstanceAdvancedSettings + Work []tke.InstanceAdvancedSettings +} + +const ( + DefaultDesiredPodNum = 0 +) + +const ( + DefaultAuthenticationOptionsIssuer = "https://kubernetes.default.svc.cluster.local" +) + +// This use to filter default values the addon returns. +var TKE_ADDON_DEFAULT_VALUES_KEY = []string{ + "global.image.host", + "global.cluster.id", + "global.cluster.appid", + "global.cluster.uin", + "global.cluster.subuin", + "global.cluster.type", + "global.cluster.clustertype", + "global.cluster.kubeversion", + "global.cluster.kubeminor", +} + +const ( + InstallSecurityAgentCommandId = "cmd-d8jj2skv" +) + +const ( + TKE_CLUSTER_INTERNET = true + TKE_CLUSTER_INTRANET = false + + TKE_CLUSTER_OPEN_ACCESS = true + TKE_CLUSTER_CLOSE_ACCESS = false +) + +const ( + backupStorageLocationStateAvailable = "Available" +) diff --git a/tencentcloud/resource_tc_container_cluster.go b/tencentcloud/services/tke/resource_tc_container_cluster.go similarity index 87% rename from tencentcloud/resource_tc_container_cluster.go rename to tencentcloud/services/tke/resource_tc_container_cluster.go index 35a307fbd1..5b5786474d 100644 --- a/tencentcloud/resource_tc_container_cluster.go +++ b/tencentcloud/services/tke/resource_tc_container_cluster.go @@ -1,6 +1,9 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -10,10 +13,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "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 resourceTencentCloudContainerCluster() *schema.Resource { +func ResourceTencentCloudContainerCluster() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.16.0. Please use 'tencentcloud_kubernetes_cluster' instead.", Create: resourceTencentCloudContainerClusterCreate, @@ -204,29 +208,29 @@ func resourceTencentCloudContainerCluster() *schema.Resource { } func resourceTencentCloudContainerClusterUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster.update")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster.update")() return fmt.Errorf("the container cluster resource doesn't support update") } func resourceTencentCloudContainerClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) runInstancesPara := cvm.NewRunInstancesRequest() var place cvm.Placement if v, ok := d.GetOkExists("zone_id"); ok { var zones []*cvm.ZoneInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error zones, e = cvmService.DescribeZones(ctx) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -418,7 +422,7 @@ func resourceTencentCloudContainerClusterCreate(d *schema.ResourceData, meta int } d.SetId(id) - err = resource.Retry(6*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { _, _, err = service.DescribeClusterInstances(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -442,21 +446,21 @@ func resourceTencentCloudContainerClusterCreate(d *schema.ResourceData, meta int } func resourceTencentCloudContainerClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var info ClusterInfo var has bool - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error info, has, e = service.DescribeCluster(ctx, d.Id()) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -480,7 +484,7 @@ func resourceTencentCloudContainerClusterRead(d *schema.ResourceData, meta inter _ = d.Set("total_mem", 0) var workers []InstanceInfo - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error _, workers, e = service.DescribeClusterInstances(ctx, info.ClusterId) if e, ok := e.(*errors.TencentCloudSDKError); ok { @@ -507,12 +511,12 @@ func resourceTencentCloudContainerClusterRead(d *schema.ResourceData, meta inter describeInstancesreq := cvm.NewDescribeInstancesRequest() describeInstancesreq.InstanceIds = instanceIds var describeInstancesResponse *cvm.DescribeInstancesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstances(describeInstancesreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstances(describeInstancesreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeInstancesreq.GetAction(), describeInstancesreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } describeInstancesResponse = result return nil @@ -537,16 +541,16 @@ func resourceTencentCloudContainerClusterRead(d *schema.ResourceData, meta inter } func resourceTencentCloudContainerClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.DeleteCluster(ctx, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_container_cluster_instance.go b/tencentcloud/services/tke/resource_tc_container_cluster_instance.go similarity index 87% rename from tencentcloud/resource_tc_container_cluster_instance.go rename to tencentcloud/services/tke/resource_tc_container_cluster_instance.go index 7da70012db..390608586a 100644 --- a/tencentcloud/resource_tc_container_cluster_instance.go +++ b/tencentcloud/services/tke/resource_tc_container_cluster_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -11,10 +14,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudContainerClusterInstance() *schema.Resource { +func ResourceTencentCloudContainerClusterInstance() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.16.0. Please use 'tencentcloud_kubernetes_scale_worker' instead.", Create: resourceTencentCloudContainerClusterInstancesCreate, @@ -175,23 +179,23 @@ func resourceTencentCloudContainerClusterInstance() *schema.Resource { } func resourceTencentCloudContainerClusterInstancesUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster_instance.update")() return fmt.Errorf("the container cluster instance resource doesn't support update") } func resourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var workers []InstanceInfo clusterId := d.Get("cluster_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error _, workers, e = service.DescribeClusterInstances(ctx, clusterId) if e, ok := e.(*errors.TencentCloudSDKError); ok { @@ -225,12 +229,12 @@ func resourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, m describeInstancesreq := cvm.NewDescribeInstancesRequest() describeInstancesreq.InstanceIds = []*string{common.StringPtr(v.InstanceId)} var describeInstancesResponse *cvm.DescribeInstancesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstances(describeInstancesreq) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstances(describeInstancesreq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, describeInstancesreq.GetAction(), describeInstancesreq.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } describeInstancesResponse = result return nil @@ -259,12 +263,12 @@ func resourceTencentCloudContainerClusterInstancesRead(d *schema.ResourceData, m } func resourceTencentCloudContainerClusterInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterId := d.Get("cluster_id").(string) runInstancesPara := cvm.NewRunInstancesRequest() @@ -272,11 +276,11 @@ func resourceTencentCloudContainerClusterInstancesCreate(d *schema.ResourceData, var place cvm.Placement if v, ok := d.GetOkExists("zone_id"); ok { var zones []*cvm.ZoneInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error zones, e = cvmService.DescribeZones(ctx) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -444,7 +448,7 @@ func resourceTencentCloudContainerClusterInstancesCreate(d *schema.ResourceData, return fmt.Errorf("no instance return") } - err = resource.Retry(6*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { _, workers, e := service.DescribeClusterInstances(ctx, clusterId) if ee, ok := e.(*errors.TencentCloudSDKError); ok { if ee.GetCode() == "InternalError.ClusterNotFound" { @@ -474,16 +478,16 @@ func resourceTencentCloudContainerClusterInstancesCreate(d *schema.ResourceData, } func resourceTencentCloudContainerClusterInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_container_cluster_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_container_cluster_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var workers []InstanceInfo clusterId := d.Get("cluster_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error _, workers, e = service.DescribeClusterInstances(ctx, clusterId) if ee, ok := e.(*errors.TencentCloudSDKError); ok { @@ -512,7 +516,7 @@ func resourceTencentCloudContainerClusterInstancesDelete(d *schema.ResourceData, return nil } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := service.DeleteClusterInstances(ctx, clusterId, []string{node.InstanceId}) if ee, ok := e.(*errors.TencentCloudSDKError); ok { if ee.GetCode() == "InternalError.ClusterNotFound" { @@ -520,7 +524,7 @@ func resourceTencentCloudContainerClusterInstancesDelete(d *schema.ResourceData, } } if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_eks_cluster.go b/tencentcloud/services/tke/resource_tc_eks_cluster.go similarity index 83% rename from tencentcloud/resource_tc_eks_cluster.go rename to tencentcloud/services/tke/resource_tc_eks_cluster.go index 02ae7d96ad..89eeec6123 100644 --- a/tencentcloud/resource_tc_eks_cluster.go +++ b/tencentcloud/services/tke/resource_tc_eks_cluster.go @@ -3,58 +3,64 @@ Provides an elastic kubernetes cluster resource (offlined). ~> **NOTE:** This resource was offline and no longer supported. -Example Usage +# Example Usage ``` -resource "tencentcloud_vpc" "vpc" { - name = "tf-eks-vpc" - cidr_block = "10.2.0.0/16" -} -resource "tencentcloud_subnet" "sub" { - vpc_id = tencentcloud_vpc.vpc.id - name = "tf-as-subnet" - cidr_block = "10.2.11.0/24" - availability_zone = "ap-guangzhou-3" -} -resource "tencentcloud_subnet" "sub2" { - vpc_id = tencentcloud_vpc.vpc.id - name = "tf-as-subnet" - cidr_block = "10.2.10.0/24" - availability_zone = "ap-guangzhou-3" -} + resource "tencentcloud_vpc" "vpc" { + name = "tf-eks-vpc" + cidr_block = "10.2.0.0/16" + } + + resource "tencentcloud_subnet" "sub" { + vpc_id = tencentcloud_vpc.vpc.id + name = "tf-as-subnet" + cidr_block = "10.2.11.0/24" + availability_zone = "ap-guangzhou-3" + } + + resource "tencentcloud_subnet" "sub2" { + vpc_id = tencentcloud_vpc.vpc.id + name = "tf-as-subnet" + cidr_block = "10.2.10.0/24" + availability_zone = "ap-guangzhou-3" + } + + resource "tencentcloud_eks_cluster" "foo" { + cluster_name = "tf-test-eks" + k8s_version = "1.18.4" + vpc_id = tencentcloud_vpc.vpc.id + subnet_ids = [ + tencentcloud_subnet.sub.id, + tencentcloud_subnet.sub2.id, + ] + cluster_desc = "test eks cluster created by terraform" + service_subnet_id = tencentcloud_subnet.sub.id + dns_servers { + domain = "www.example1.com" + servers = ["1.1.1.1:8080", "1.1.1.1:8081", "1.1.1.1:8082"] + } + enable_vpc_core_dns = true + need_delete_cbs = true + tags = { + hello = "world" + } + } -resource "tencentcloud_eks_cluster" "foo" { - cluster_name = "tf-test-eks" - k8s_version = "1.18.4" - vpc_id = tencentcloud_vpc.vpc.id - subnet_ids = [ - tencentcloud_subnet.sub.id, - tencentcloud_subnet.sub2.id, - ] - cluster_desc = "test eks cluster created by terraform" - service_subnet_id = tencentcloud_subnet.sub.id - dns_servers { - domain = "www.example1.com" - servers = ["1.1.1.1:8080", "1.1.1.1:8081", "1.1.1.1:8082"] - } - enable_vpc_core_dns = true - need_delete_cbs = true - tags = { - hello = "world" - } -} ``` -Import +# Import ``` terraform import tencentcloud_eks_cluster.foo cluster-id ``` */ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "encoding/json" "fmt" @@ -64,10 +70,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudEksCluster() *schema.Resource { +func ResourceTencentCloudEksCluster() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource was offline and no longer supported.", Read: resourceTencentcloudEKSClusterRead, @@ -224,12 +231,12 @@ func resourceTencentCloudEksCluster() *schema.Resource { } func resourceTencentcloudEKSClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.read")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.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 := EksService{client: meta.(*TencentCloudClient).apiV3Conn} + service := EksService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} cluster, has, err := service.DescribeEksCluster(ctx, d.Id()) if err != nil { @@ -304,15 +311,15 @@ func resourceTencentcloudEKSClusterRead(d *schema.ResourceData, meta interface{} } func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.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 ( - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() service = EksService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) k8sVersion = d.Get("k8s_version").(string) clusterName = d.Get("cluster_name").(string) vpcId = d.Get("vpc_id").(string) @@ -384,7 +391,7 @@ func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface d.SetId(id) - err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { cluster, _, err := service.DescribeEksCluster(ctx, id) if err != nil { return resource.NonRetryableError(err) @@ -441,10 +448,10 @@ func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface } if upgradeRequest.ClusterId != nil { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.UpdateEksCluster(ctx, upgradeRequest) if inErr != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -453,10 +460,10 @@ func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, inErr := service.DescribeEKSClusterCredentialById(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if info.InternalLB == nil || *info.InternalLB.Enabled != enableInternal { return resource.RetryableError(fmt.Errorf("waiting for internal lb upgrade")) @@ -475,7 +482,7 @@ func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface if tags := helper.GetTags(d, "tags"); len(tags) > 0 { region := client.Region - resourceName := BuildTagResourceName("ccs", "cluster", region, id) + resourceName := tccommon.BuildTagResourceName("ccs", "cluster", region, id) if err := tagService.ModifyTags(ctx, resourceName, tags, []string{}); err != nil { fmt.Printf("[WARN]: update tags failed: %s", err.Error()) } @@ -485,18 +492,18 @@ func resourceTencentcloudEKSClusterCreate(d *schema.ResourceData, meta interface } func resourceTencentcloudEKSClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.update")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.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() request := tke.NewUpdateEKSClusterRequest() request.ClusterId = helper.String(id) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() var ( service = EksService{client: client} - tagService = TagService{client: client} + tagService = svctag.NewTagService(client) clusterName = d.Get("cluster_name").(string) clusterDesc = d.Get("cluster_desc").(string) updateAttrs []string @@ -600,10 +607,10 @@ func resourceTencentcloudEKSClusterUpdate(d *schema.ResourceData, meta interface return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, inErr := service.DescribeEKSClusterCredentialById(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if info.InternalLB == nil || *info.InternalLB.Enabled != enableInternal { return resource.RetryableError(fmt.Errorf("waiting for internal lb upgrade")) @@ -623,9 +630,9 @@ func resourceTencentcloudEKSClusterUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { region := client.Region oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("ccs", "cluster", region, id) + resourceName := tccommon.BuildTagResourceName("ccs", "cluster", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -635,14 +642,14 @@ func resourceTencentcloudEKSClusterUpdate(d *schema.ResourceData, meta interface } func resourceTencentcloudEKSClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_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) id := d.Id() - service := EksService{client: meta.(*TencentCloudClient).apiV3Conn} + service := EksService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request := tke.NewDeleteEKSClusterRequest() request.ClusterId = helper.String(id) @@ -651,7 +658,7 @@ func resourceTencentcloudEKSClusterDelete(d *schema.ResourceData, meta interface return err } - err := resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err := service.DescribeEksCluster(ctx, d.Id()) if has && info.Status == "Terminating" { return resource.RetryableError(fmt.Errorf("cluster %s terminating, retrying", d.Id())) @@ -663,7 +670,7 @@ func resourceTencentcloudEKSClusterDelete(d *schema.ResourceData, meta interface } } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) diff --git a/tencentcloud/resource_tc_eks_cluster_test.go b/tencentcloud/services/tke/resource_tc_eks_cluster_test.go similarity index 82% rename from tencentcloud/resource_tc_eks_cluster_test.go rename to tencentcloud/services/tke/resource_tc_eks_cluster_test.go index 8062043af2..ffb8fc8341 100644 --- a/tencentcloud/resource_tc_eks_cluster_test.go +++ b/tencentcloud/services/tke/resource_tc_eks_cluster_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tke_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -19,13 +23,13 @@ func init() { } func testSweepEksClusters(region string) error { - client, err := sharedClientForRegion(region) - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + client, err := tcacctest.SharedClientForRegion(region) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if err != nil { return err } - service := EksService{client: client.(*TencentCloudClient).apiV3Conn} + service := svctke.NewEksService(client.(tccommon.ProviderMeta).GetAPIV3Conn()) clusters, err := service.DescribeEKSClusters(ctx, "", "tf-eks-test") if err != nil { return err @@ -46,8 +50,8 @@ func TestAccTencentCloudEKSCluster_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: testAccTencentCloudEKSClusterDestroy, Steps: []resource.TestStep{ { @@ -106,8 +110,8 @@ func TestAccTencentCloudEKSCluster_basic(t *testing.T) { func testAccTencentCloudEKSClusterExists(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,17 +121,15 @@ func testAccTencentCloudEKSClusterExists(n string) resource.TestCheckFunc { return fmt.Errorf("eks cluster id is not set") } - eksService := EksService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + eksService := svctke.NewEksService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := eksService.DescribeEksCluster(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = eksService.DescribeEksCluster(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -146,12 +148,10 @@ func testAccTencentCloudEKSClusterExists(n string) resource.TestCheckFunc { } func testAccTencentCloudEKSClusterDestroy(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) - eksService := EksService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + eksService := svctke.NewEksService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eks_cluster" { @@ -160,10 +160,10 @@ func testAccTencentCloudEKSClusterDestroy(s *terraform.State) error { _, has, err := eksService.DescribeEksCluster(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = eksService.DescribeEksCluster(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -181,7 +181,7 @@ func testAccTencentCloudEKSClusterDestroy(s *terraform.State) error { return nil } -const testAccEksCluster = defaultVpcVariable + ` +const testAccEksCluster = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_eks_cluster" "foo" { cluster_name = "tf-eks-test" k8s_version = "1.18.4" @@ -203,7 +203,7 @@ resource "tencentcloud_eks_cluster" "foo" { } ` -const testAccEksClusterUpdate = defaultVpcVariable + ` +const testAccEksClusterUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_eks_cluster" "foo" { cluster_name = "tf-eks-test2" k8s_version = "1.18.4" diff --git a/tencentcloud/resource_tc_eks_container_instance.go b/tencentcloud/services/tke/resource_tc_eks_container_instance.go similarity index 90% rename from tencentcloud/resource_tc_eks_container_instance.go rename to tencentcloud/services/tke/resource_tc_eks_container_instance.go index 1babe1808c..3fcca59e33 100644 --- a/tencentcloud/resource_tc_eks_container_instance.go +++ b/tencentcloud/services/tke/resource_tc_eks_container_instance.go @@ -3,96 +3,100 @@ Provides an elastic kubernetes service container instance (offlined). ~> **NOTE:** This resource was offline and no longer supported. -Example Usage +# Example Usage ``` data "tencentcloud_security_groups" "group" { } -data "tencentcloud_availability_zones_by_product" "zone" { - product = "cvm" -} + data "tencentcloud_availability_zones_by_product" "zone" { + product = "cvm" + } -resource "tencentcloud_vpc" "vpc" { - cidr_block = "10.0.0.0/24" - name = "tf-test-eksci" -} + resource "tencentcloud_vpc" "vpc" { + cidr_block = "10.0.0.0/24" + name = "tf-test-eksci" + } -resource "tencentcloud_subnet" "sub" { - availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[0].name - cidr_block = "10.0.0.0/24" - name = "sub" - vpc_id = tencentcloud_vpc.vpc.id -} + resource "tencentcloud_subnet" "sub" { + availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[0].name + cidr_block = "10.0.0.0/24" + name = "sub" + vpc_id = tencentcloud_vpc.vpc.id + } -resource "tencentcloud_cbs_storage" "cbs" { - availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[0].name - storage_name = "cbs1" - storage_size = 10 - storage_type = "CLOUD_PREMIUM" -} + resource "tencentcloud_cbs_storage" "cbs" { + availability_zone = data.tencentcloud_availability_zones_by_product.zone.zones[0].name + storage_name = "cbs1" + storage_size = 10 + storage_type = "CLOUD_PREMIUM" + } + + resource "tencentcloud_eks_container_instance" "eci1" { + name = "foo" + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.sub.id + cpu = 2 + cpu_type = "intel" + restart_policy = "Always" + memory = 4 + security_groups = [data.tencentcloud_security_groups.group.security_groups[0].security_group_id] + cbs_volume { + name = "vol1" + disk_id = tencentcloud_cbs_storage.cbs.id + } + container { + name = "redis1" + image = "redis" + liveness_probe { + init_delay_seconds = 1 + timeout_seconds = 3 + period_seconds = 11 + success_threshold = 1 + failure_threshold = 3 + http_get_path = "/" + http_get_port = 443 + http_get_scheme = "HTTPS" + } + readiness_probe { + init_delay_seconds = 1 + timeout_seconds = 3 + period_seconds = 10 + success_threshold = 1 + failure_threshold = 3 + tcp_socket_port = 81 + } + } + container { + name = "nginx" + image = "nginx" + } + init_container { + name = "alpine" + image = "alpine:latest" + } + } -resource "tencentcloud_eks_container_instance" "eci1" { - name = "foo" - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.sub.id - cpu = 2 - cpu_type = "intel" - restart_policy = "Always" - memory = 4 - security_groups = [data.tencentcloud_security_groups.group.security_groups[0].security_group_id] - cbs_volume { - name = "vol1" - disk_id = tencentcloud_cbs_storage.cbs.id - } - container { - name = "redis1" - image = "redis" - liveness_probe { - init_delay_seconds = 1 - timeout_seconds = 3 - period_seconds = 11 - success_threshold = 1 - failure_threshold = 3 - http_get_path = "/" - http_get_port = 443 - http_get_scheme = "HTTPS" - } - readiness_probe { - init_delay_seconds = 1 - timeout_seconds = 3 - period_seconds = 10 - success_threshold = 1 - failure_threshold = 3 - tcp_socket_port = 81 - } - } - container { - name = "nginx" - image = "nginx" - } - init_container { - name = "alpine" - image = "alpine:latest" - } -} ``` -Import +# Import ``` terraform import tencentcloud_eks_container_instance.foo container-instance-id ``` */ -package tencentcloud +package tke 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" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -707,7 +711,7 @@ func resourceEksCiContainerSchema(isInitContainer bool) map[string]*schema.Schem return schemaMap } -func resourceTencentCloudEksContainerInstance() *schema.Resource { +func ResourceTencentCloudEksContainerInstance() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource was offline and no longer supported.", Read: resourceTencentcloudEKSContainerInstanceRead, @@ -777,7 +781,7 @@ func resourceTencentCloudEksContainerInstance() *schema.Resource { "restart_policy": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"Always", "Never", "OnFailure"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"Always", "Never", "OnFailure"}), Description: "Container instance restart policy. Available values: `Always`, `Never`, `OnFailure`.", }, "image_registry_credential": { @@ -957,17 +961,17 @@ func resourceTencentCloudEksContainerInstance() *schema.Resource { } func resourceTencentcloudEKSContainerInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.read")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := EksService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := EksService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( instance *tke.EksCi has bool ) - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var err error instance, has, err = service.DescribeEksContainerInstanceById(ctx, d.Id()) if err != nil { @@ -999,11 +1003,11 @@ func resourceTencentcloudEKSContainerInstanceRead(d *schema.ResourceData, meta i } func resourceTencentcloudEKSContainerInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.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 := EksService{client: client} request := getEksCiCreateRequest(d) @@ -1020,12 +1024,12 @@ func resourceTencentcloudEKSContainerInstanceCreate(d *schema.ResourceData, meta } func resourceTencentcloudEKSContainerInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.update")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.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() service := EksService{client: client} request := tke.NewUpdateEKSContainerInstanceRequest() @@ -1087,12 +1091,12 @@ func resourceTencentcloudEKSContainerInstanceUpdate(d *schema.ResourceData, meta } func resourceTencentcloudEKSContainerInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_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) id := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := EksService{client: client} request := tke.NewDeleteEKSContainerInstancesRequest() diff --git a/tencentcloud/resource_tc_eks_container_instance_test.go b/tencentcloud/services/tke/resource_tc_eks_container_instance_test.go similarity index 82% rename from tencentcloud/resource_tc_eks_container_instance_test.go rename to tencentcloud/services/tke/resource_tc_eks_container_instance_test.go index 3e08c232eb..a2f659cbd9 100644 --- a/tencentcloud/resource_tc_eks_container_instance_test.go +++ b/tencentcloud/services/tke/resource_tc_eks_container_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tke_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -16,11 +20,11 @@ func init() { resource.AddTestSweepers("tencentcloud_eks_ci", &resource.Sweeper{ Name: "tencentcloud_eks_ci", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := EksService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewEksService(client) cis, err := service.DescribeEksContainerInstancesByFilter(ctx, nil, 100, 0) @@ -32,7 +36,7 @@ func init() { for i := range cis { ci := cis[i] name := *ci.EksCiName - if isResourcePersist(name, nil) { + if tcacctest.IsResourcePersist(name, nil) { continue } ids = append(ids, ci.EksCiId) @@ -54,14 +58,14 @@ func TestAccTencentCloudEKSContainerInstance_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: testAccCheckEksCiDestroy, Steps: []resource.TestStep{ { Config: testAccEksCi, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("tencentcloud_eks_container_instance.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_eks_container_instance.foo"), resource.TestCheckResourceAttr("tencentcloud_eks_container_instance.foo", "name", "foo"), resource.TestCheckResourceAttr("tencentcloud_eks_container_instance.foo", "cpu", "2"), resource.TestCheckResourceAttr("tencentcloud_eks_container_instance.foo", "memory", "4"), @@ -95,12 +99,10 @@ func TestAccTencentCloudEKSContainerInstance_basic(t *testing.T) { } func testAccCheckEksCiDestroy(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) - eksService := EksService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + eksService := svctke.NewEksService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eks_container_instance" { @@ -109,10 +111,10 @@ func testAccCheckEksCiDestroy(s *terraform.State) error { _, has, err := eksService.DescribeEksContainerInstanceById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = eksService.DescribeEksContainerInstanceById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -130,7 +132,7 @@ func testAccCheckEksCiDestroy(s *terraform.State) error { return nil } -const testAccEksCi = defaultVpcVariable + ` +const testAccEksCi = tcacctest.DefaultVpcVariable + ` data "tencentcloud_security_groups" "group" { name = "default" } diff --git a/tencentcloud/resource_tc_kubernetes_addon_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go similarity index 83% rename from tencentcloud/resource_tc_kubernetes_addon_attachment.go rename to tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go index 036c01d01f..bf37deda67 100644 --- a/tencentcloud/resource_tc_kubernetes_addon_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke import ( "context" @@ -6,13 +6,16 @@ import ( "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTkeAddonAttachment() *schema.Resource { +func ResourceTencentCloudTkeAddonAttachment() *schema.Resource { return &schema.Resource{ Schema: map[string]*schema.Schema{ "cluster_id": { @@ -85,11 +88,11 @@ func resourceTencentCloudTkeAddonAttachment() *schema.Resource { } func resourceTencentCloudTkeAddonAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_addon_attachment.create")() - logId := getLogId(contextNil) - client := meta.(*TencentCloudClient).apiV3Conn + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := TkeService{client: client} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( clusterId = d.Get("cluster_id").(string) @@ -138,7 +141,7 @@ func resourceTencentCloudTkeAddonAttachmentCreate(d *schema.ResourceData, meta i return err } - d.SetId(clusterId + FILED_SP + addonName) + d.SetId(clusterId + tccommon.FILED_SP + addonName) resData := &AddonResponseData{} reason := "unknown error" @@ -165,14 +168,14 @@ func resourceTencentCloudTkeAddonAttachmentCreate(d *schema.ResourceData, meta i } func resourceTencentCloudTkeAddonAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_addon_attachment.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() has := false - split := strings.Split(id, FILED_SP) + split := strings.Split(id, tccommon.FILED_SP) if len(split) < 2 { return fmt.Errorf("id expected format: cluster_id#addon_name but no addon_name provided") } @@ -241,14 +244,14 @@ func resourceTencentCloudTkeAddonAttachmentRead(d *schema.ResourceData, meta int } func resourceTencentCloudTkeAddonAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_addon_attachment.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( id = d.Id() - split = strings.Split(id, FILED_SP) + split = strings.Split(id, tccommon.FILED_SP) clusterId = split[0] addonName = split[1] version = d.Get("version").(string) @@ -283,14 +286,14 @@ func resourceTencentCloudTkeAddonAttachmentUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudTkeAddonAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_addon_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( id = d.Id() - split = strings.Split(id, FILED_SP) + split = strings.Split(id, tccommon.FILED_SP) clusterId = split[0] addonName = split[1] has bool @@ -317,7 +320,7 @@ func getFilteredValues(d *schema.ResourceData, values []*string) []string { kv := strings.Split(*value, "=") key := kv[0] - if IsContains(TKE_ADDON_DEFAULT_VALUES_KEY, key) || IsContains(rawValues, *value) { + if tccommon.IsContains(TKE_ADDON_DEFAULT_VALUES_KEY, key) || tccommon.IsContains(rawValues, *value) { continue } rawValues = append(rawValues, *value) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go new file mode 100644 index 0000000000..0ed64266b5 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go @@ -0,0 +1,84 @@ +package tke_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" +) + +const DefaultAddonName = "cos" + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_kubernetes_addon_attachment + resource.AddTestSweepers("tencentcloud_kubernetes_addon_attachment", &resource.Sweeper{ + Name: "tencentcloud_kubernetes_addon_attachment", + F: func(r string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) + + cls, err := service.DescribeClusters(ctx, "", "keep") + if err != nil { + return err + } + + if len(cls) == 0 { + return fmt.Errorf("no persistent cluster") + } + + for _, c := range cls { + clusterId := c.ClusterId + if err = service.DeleteExtensionAddon(ctx, clusterId, DefaultAddonName); err != nil { + if e, ok := err.(*errors.TencentCloudSDKError); ok { + // suppress the not found error when cos doesn't exist + if strings.Contains(e.GetMessage(), "application cos not found") { + continue + } + } + return err + } + } + + return nil + }, + }) +} + +func TestAccTencentCloudKubernetesAddonAttachmentResource(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTkeAddonAttachment(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "version"), + ), + }, + }, + }) +} + +func testAccTkeAddonAttachment() string { + return fmt.Sprintf(` +%s + +resource "tencentcloud_kubernetes_addon_attachment" "cos" { + cluster_id = local.cluster_id + name = "%s" +} +`, tcacctest.TkeDataSource, DefaultAddonName) +} diff --git a/tencentcloud/resource_tc_kubernetes_as_scaling_group.go b/tencentcloud/services/tke/resource_tc_kubernetes_as_scaling_group.go similarity index 80% rename from tencentcloud/resource_tc_kubernetes_as_scaling_group.go rename to tencentcloud/services/tke/resource_tc_kubernetes_as_scaling_group.go index 4dba830950..c986dc36b9 100644 --- a/tencentcloud/resource_tc_kubernetes_as_scaling_group.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_as_scaling_group.go @@ -3,54 +3,58 @@ Auto scaling group for kubernetes cluster (offlined). ~> **NOTE:** This resource was offline and no longer supported. -Example Usage +# Example Usage ```hcl # Use tencentcloud_kubernetes_node_pool instead -resource "tencentcloud_kubernetes_node_pool" "mynodepool" { - name = "mynodepool" - cluster_id = "cls-xxxxxxxx" - max_size = 6 - min_size = 1 - vpc_id = "vpc-xxxxxxxx" - subnet_ids = ["subnet-xxxxxxxx"] - retry_policy = "INCREMENTAL_INTERVALS" - desired_capacity = 4 - enable_auto_scale = true - multi_zone_subnet_policy = "EQUALITY" - - auto_scaling_config { - instance_type = var.default_instance_type - system_disk_type = "CLOUD_PREMIUM" - system_disk_size = "50" - orderly_security_group_ids = ["sg-24vswocp"] - instance_charge_type = "SPOTPAID" - spot_instance_type = "one-time" - spot_max_price = "1000" - - data_disk { - disk_type = "CLOUD_PREMIUM" - disk_size = 50 - } - - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" - internet_max_bandwidth_out = 10 - public_ip_assigned = true - password = input_your_password - enhanced_security_service = false - enhanced_monitor_service = false - } - - labels = { - "test1" = "test1", - "test2" = "test2", - } + + resource "tencentcloud_kubernetes_node_pool" "mynodepool" { + name = "mynodepool" + cluster_id = "cls-xxxxxxxx" + max_size = 6 + min_size = 1 + vpc_id = "vpc-xxxxxxxx" + subnet_ids = ["subnet-xxxxxxxx"] + retry_policy = "INCREMENTAL_INTERVALS" + desired_capacity = 4 + enable_auto_scale = true + multi_zone_subnet_policy = "EQUALITY" + + auto_scaling_config { + instance_type = var.default_instance_type + system_disk_type = "CLOUD_PREMIUM" + system_disk_size = "50" + orderly_security_group_ids = ["sg-24vswocp"] + instance_charge_type = "SPOTPAID" + spot_instance_type = "one-time" + spot_max_price = "1000" + + data_disk { + disk_type = "CLOUD_PREMIUM" + disk_size = 50 + } + + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_max_bandwidth_out = 10 + public_ip_assigned = true + password = input_your_password + enhanced_security_service = false + enhanced_monitor_service = false + } + + labels = { + "test1" = "test1", + "test2" = "test2", + } } */ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "strings" @@ -60,10 +64,11 @@ import ( as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudKubernetesAsScalingGroup() *schema.Resource { +func ResourceTencentCloudKubernetesAsScalingGroup() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource was offline and no longer supported.", Create: resourceKubernetesAsScalingGroupCreate, @@ -126,7 +131,7 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of a launch configuration.", }, "project_id": { @@ -146,8 +151,8 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, ForceNew: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Type of a CVM disk. Valid value: `CLOUD_PREMIUM` and `CLOUD_SSD`. Default is `CLOUD_PREMIUM`.", }, "system_disk_size": { @@ -155,7 +160,7 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Optional: true, ForceNew: true, Default: 50, - ValidateFunc: validateIntegerInRange(50, 500), + ValidateFunc: tccommon.ValidateIntegerInRange(50, 500), Description: "Volume of system disk in GB. Default is `50`.", }, "data_disk": { @@ -170,8 +175,8 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, ForceNew: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk. Valid value: `CLOUD_PREMIUM` and `CLOUD_SSD`.", }, "disk_size": { @@ -194,8 +199,8 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, ForceNew: true, - Default: INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, - ValidateFunc: validateAllowedStringValue(INTERNET_CHARGE_ALLOW_TYPE), + Default: svcas.INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.INTERNET_CHARGE_ALLOW_TYPE), Description: "Charge types for network traffic. Valid value: `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.", }, "internet_max_bandwidth_out": { @@ -215,7 +220,7 @@ func kubernetesAsScalingConfigPara() map[string]*schema.Schema { Optional: true, Sensitive: true, ForceNew: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, ConflictsWith: []string{"auto_scaling_config.0.key_ids"}, Description: "Password to access.", }, @@ -266,20 +271,20 @@ func kubernetesAsScalingGroupPara() map[string]*schema.Schema { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 55), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 55), Description: "Name of a scaling group.", }, "max_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Maximum number of CVM instances (0~2000).", }, "min_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Minimum number of CVM instances (0~2000).", }, "vpc_id": { @@ -390,9 +395,9 @@ func kubernetesAsScalingGroupPara() map[string]*schema.Schema { Description: "Available values for termination policies include `OLDEST_INSTANCE` and `NEWEST_INSTANCE`.", Elem: &schema.Schema{ Type: schema.TypeString, - Default: SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, - ValidateFunc: validateAllowedStringValue([]string{SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, - SCALING_GROUP_TERMINATION_POLICY_NEWEST_INSTANCE}), + Default: svcas.SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcas.SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, + svcas.SCALING_GROUP_TERMINATION_POLICY_NEWEST_INSTANCE}), }, }, "retry_policy": { @@ -400,9 +405,9 @@ func kubernetesAsScalingGroupPara() map[string]*schema.Schema { Optional: true, ForceNew: true, Description: "Available values for retry policies include `IMMEDIATE_RETRY` and `INCREMENTAL_INTERVALS`.", - Default: SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, - ValidateFunc: validateAllowedStringValue([]string{SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, - SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS}), + Default: svcas.SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcas.SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, + svcas.SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS}), }, "tags": { Type: schema.TypeMap, @@ -632,7 +637,7 @@ func kubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, meta inter } } - chargeType := INSTANCE_CHARGE_TYPE_POSTPAID + chargeType := svcas.INSTANCE_CHARGE_TYPE_POSTPAID request.InstanceChargeType = &chargeType if v, ok := dMap["instance_types_check_policy"]; ok { @@ -657,12 +662,12 @@ func kubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, meta inter } func resourceKubernetesAsScalingGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_as_scaling_group.read")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_as_scaling_group.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} items = strings.Split(d.Id(), ":") ) if len(items) != 2 { @@ -673,10 +678,10 @@ func resourceKubernetesAsScalingGroupRead(d *schema.ResourceData, meta interface _, has, err := service.DescribeCluster(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = service.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -692,16 +697,14 @@ func resourceKubernetesAsScalingGroupRead(d *schema.ResourceData, meta interface } var ( - asService = AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - number int + asService = svcas.NewAsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + number int ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, number, err = asService.DescribeAutoScalingGroupById(ctx, asGroupId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if number == 0 { d.SetId("") @@ -716,10 +719,10 @@ func resourceKubernetesAsScalingGroupRead(d *schema.ResourceData, meta interface } var clusterAsGroupSet *tke.ClusterAsGroup - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { clusterAsGroupSet, err = service.DescribeClusterAsGroupsByGroupId(ctx, clusterId, asGroupId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if clusterAsGroupSet == nil { @@ -748,14 +751,14 @@ func resourceKubernetesAsScalingGroupRead(d *schema.ResourceData, meta interface func resourceKubernetesAsScalingGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_as_scaling_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_as_scaling_group.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) clusterId = d.Get("cluster_id").(string) groupParas = d.Get("auto_scaling_group").([]interface{}) configParas = d.Get("auto_scaling_config").([]interface{}) - asService = AsService{client: meta.(*TencentCloudClient).apiV3Conn} + asService = svcas.NewAsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) iAdvanced InstanceAdvancedSettings ) if len(groupParas) != 1 || len(configParas) != 1 { @@ -783,7 +786,7 @@ func resourceKubernetesAsScalingGroupCreate(d *schema.ResourceData, meta interfa } } - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} asGroupId, err := service.CreateClusterAsGroup(ctx, clusterId, groupParaStr, configParaStr, labels, iAdvanced) if err != nil { @@ -793,12 +796,12 @@ func resourceKubernetesAsScalingGroupCreate(d *schema.ResourceData, meta interfa d.SetId(clusterId + ":" + asGroupId) // wait for status ok - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { scalingGroup, _, errRet := asService.DescribeAutoScalingGroupById(ctx, asGroupId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } - if scalingGroup != nil && *scalingGroup.InActivityStatus == SCALING_GROUP_NOT_IN_ACTIVITY_STATUS { + if scalingGroup != nil && *scalingGroup.InActivityStatus == svcas.SCALING_GROUP_NOT_IN_ACTIVITY_STATUS { return nil } return resource.RetryableError(fmt.Errorf("scaling group status is %s, retry...", *scalingGroup.InActivityStatus)) @@ -811,12 +814,12 @@ func resourceKubernetesAsScalingGroupCreate(d *schema.ResourceData, meta interfa } func resourceKubernetesAsScalingGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_as_scaling_group.update")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_as_scaling_group.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} items = strings.Split(d.Id(), ":") ) if len(items) != 2 { @@ -830,10 +833,10 @@ func resourceKubernetesAsScalingGroupUpdate(d *schema.ResourceData, meta interfa value := d.(map[string]interface{}) maxSize := int64(value["max_size"].(int)) minSize := int64(value["min_size"].(int)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := service.ModifyClusterAsGroupAttribute(ctx, clusterId, asGroupId, maxSize, minSize) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -847,13 +850,13 @@ func resourceKubernetesAsScalingGroupUpdate(d *schema.ResourceData, meta interfa } func resourceKubernetesAsScalingGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_as_scaling_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_as_scaling_group.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - asService = AsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + asService = svcas.NewAsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) items = strings.Split(d.Id(), ":") ) if len(items) != 2 { @@ -871,20 +874,20 @@ func resourceKubernetesAsScalingGroupDelete(d *schema.ResourceData, meta interfa return nil } if *scalingGroup.InstanceCount > 0 || *scalingGroup.DesiredCapacity > 0 { - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - return retryError(asService.ClearScalingGroupInstance(ctx, asGroupId)) + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + return tccommon.RetryError(asService.ClearScalingGroupInstance(ctx, asGroupId)) }); err != nil { return err } } // wait set finish - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { scalingGroup, _, errRet := asService.DescribeAutoScalingGroupById(ctx, asGroupId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } - if scalingGroup != nil && *scalingGroup.InActivityStatus == SCALING_GROUP_NOT_IN_ACTIVITY_STATUS { + if scalingGroup != nil && *scalingGroup.InActivityStatus == svcas.SCALING_GROUP_NOT_IN_ACTIVITY_STATUS { return nil } return resource.RetryableError(fmt.Errorf("scaling group status is %s, retry...", *scalingGroup.InActivityStatus)) @@ -895,7 +898,7 @@ func resourceKubernetesAsScalingGroupDelete(d *schema.ResourceData, meta interfa //delete as group hasDelete := false - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.DeleteClusterAsGroups(ctx, clusterId, asGroupId) if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { @@ -905,7 +908,7 @@ func resourceKubernetesAsScalingGroupDelete(d *schema.ResourceData, meta interfa } } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -919,10 +922,10 @@ func resourceKubernetesAsScalingGroupDelete(d *schema.ResourceData, meta interfa } // wait for delete ok - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, errRet := asService.DescribeAutoScalingGroupById(ctx, asGroupId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if has > 0 { resource.RetryableError(fmt.Errorf("as group %s still alive", asGroupId)) diff --git a/tencentcloud/resource_tc_kubernetes_auth_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go similarity index 83% rename from tencentcloud/resource_tc_kubernetes_auth_attachment.go rename to tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go index b3b313b2c3..18953f0af8 100644 --- a/tencentcloud/resource_tc_kubernetes_auth_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go @@ -1,16 +1,19 @@ -package tencentcloud +package tke 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" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTKEAuthAttachment() *schema.Resource { +func ResourceTencentCloudTKEAuthAttachment() *schema.Resource { return &schema.Resource{ Schema: map[string]*schema.Schema{ "cluster_id": { @@ -82,12 +85,12 @@ func resourceTencentCloudTKEAuthAttachment() *schema.Resource { } func resourceTencentCloudTKEAuthAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_auth_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Get("cluster_id").(string) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request := tke.NewModifyClusterAuthenticationOptionsRequest() request.ClusterId = &id request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{} @@ -121,10 +124,10 @@ func resourceTencentCloudTKEAuthAttachmentCreate(d *schema.ResourceData, meta in request.OIDCConfig.AutoInstallPodIdentityWebhookAddon = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.ModifyClusterAuthenticationOptions(ctx, request) if err != nil { - return retryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } return nil }) @@ -137,13 +140,13 @@ func resourceTencentCloudTKEAuthAttachmentCreate(d *schema.ResourceData, meta in return resourceTencentCloudTKEAuthAttachmentRead(d, meta) } func resourceTencentCloudTKEAuthAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_auth_attachment.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} info, oidc, err := service.WaitForAuthenticationOptionsUpdateSuccess(ctx, id) if err != nil { @@ -176,13 +179,13 @@ func resourceTencentCloudTKEAuthAttachmentRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTKEAuthAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_auth_attachment.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request := tke.NewModifyClusterAuthenticationOptionsRequest() request.ClusterId = &id request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{} @@ -232,10 +235,10 @@ func resourceTencentCloudTKEAuthAttachmentUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.ModifyClusterAuthenticationOptions(ctx, request) if err != nil { - return retryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } return nil }) @@ -248,13 +251,13 @@ func resourceTencentCloudTKEAuthAttachmentUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTKEAuthAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.resource_tc_kubernetes_auth_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request := tke.NewModifyClusterAuthenticationOptionsRequest() request.ClusterId = &id request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{ diff --git a/tencentcloud/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go similarity index 87% rename from tencentcloud/resource_tc_kubernetes_auth_attachment_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index 1f54824996..3ebfc11007 100644 --- a/tencentcloud/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudKubernetesAuthAttachResource(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: testAccTkeAuthAttach(), @@ -24,7 +26,7 @@ func TestAccTencentCloudKubernetesAuthAttachResource(t *testing.T) { } func testAccTkeAuthAttach() string { - return TkeCIDRs + ` + return tcacctest.TkeCIDRs + ` variable "availability_zone" { default = "ap-guangzhou-3" } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location.go b/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location.go new file mode 100644 index 0000000000..655d02d50d --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location.go @@ -0,0 +1,176 @@ +package tke + +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" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTkeBackupStorageLocation() *schema.Resource { + return &schema.Resource{ + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Create: resourceTencentCloudTkeBackupStorageLocationCreate, + Read: resourceTencentCloudTkeBackupStorageLocationRead, + Delete: resourceTencentCloudTkeBackupStorageLocationDelete, + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the backup storage location.", + }, + "storage_region": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Region of the storage.", + }, + "bucket": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Name of the bucket.", + }, + "path": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + Description: "Prefix of the bucket.", + }, + "state": { + Type: schema.TypeString, + Computed: true, + Description: "State of the backup storage location.", + }, + "message": { + Type: schema.TypeString, + Computed: true, + Description: "Message of the backup storage location.", + }, + }, + } +} + +func resourceTencentCloudTkeBackupStorageLocationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_backup_storage_location.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + service := TkeService{client: client} + + request := genCreateBackupStorageLocationRequest(d) + err := service.createBackupStorageLocation(ctx, request) + if err != nil { + return err + } + + // wait for status ok + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + locations, errRet := service.DescribeBackupStorageLocations(ctx, []string{d.Get("name").(string)}) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if len(locations) != 1 { + resource.RetryableError(fmt.Errorf("more than 1 location returnen in api response, expected 1 but got %d", len(locations))) + } + if locations[0].State == nil { + return resource.RetryableError(fmt.Errorf("location %s is still in state nil", d.Get("name").(string))) + } + if len(locations) == 1 && *locations[0].State == backupStorageLocationStateAvailable { + return nil + } + return resource.RetryableError(fmt.Errorf("location %s is still in state %s", d.Get("name").(string), *locations[0].State)) + }) + if err != nil { + return err + } + + d.SetId(d.Get("name").(string)) + return resourceTencentCloudTkeBackupStorageLocationRead(d, meta) +} + +func resourceTencentCloudTkeBackupStorageLocationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_backup_storage_location.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + service := TkeService{client: client} + + locations, err := service.DescribeBackupStorageLocations(ctx, []string{d.Id()}) + if err != nil { + return err + } + for _, location := range locations { + if *location.Name == d.Id() { + _ = d.Set("name", location.Name) + _ = d.Set("storage_region", location.StorageRegion) + _ = d.Set("bucket", location.Bucket) + _ = d.Set("path", location.Path) + _ = d.Set("state", location.State) + _ = d.Set("message", location.Message) + return nil + } + } + + d.SetId("") + return nil +} + +func resourceTencentCloudTkeBackupStorageLocationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_backup_storage_location.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + service := TkeService{client: client} + + err := service.DeleteBackupStorageLocation(ctx, d.Id()) + if err != nil { + return err + } + + // wait until location is deleted + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + locations, errRet := service.DescribeBackupStorageLocations(ctx, []string{d.Id()}) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if len(locations) == 0 { + return nil + } + return resource.RetryableError(fmt.Errorf("location %s is still not deleted", d.Id())) + }) + if err != nil { + return err + } + + return nil +} + +func genCreateBackupStorageLocationRequest(d *schema.ResourceData) (request *tke.CreateBackupStorageLocationRequest) { + request = tke.NewCreateBackupStorageLocationRequest() + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + if v, ok := d.GetOk("storage_region"); ok { + request.StorageRegion = helper.String(v.(string)) + } + if v, ok := d.GetOk("bucket"); ok { + request.Bucket = helper.String(v.(string)) + } + if v, ok := d.GetOk("path"); ok { + request.Path = helper.String(v.(string)) + } + return request +} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location_test.go new file mode 100644 index 0000000000..1ada5108b5 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_backup_storage_location_test.go @@ -0,0 +1,133 @@ +package tke_test + +import ( + "context" + "fmt" + "log" + "math/rand" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +const ( + testTkeBackupStorageLocationResourceKey = "tencentcloud_kubernetes_backup_storage_location.test_case_backup_storage_location" + + backupStorageLocationNameTemplate = "tf-test-case-backup-storage-location-%d" + backupLocationBucketTemplate = "tke-backup-tf-test-case-%d" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_backup_storage_location + resource.AddTestSweepers("tencentcloud_backup_storage_location", &resource.Sweeper{ + Name: "tencentcloud_backup_storage_location", + F: testBackupStorageLocationSweep, + }) +} + +func TestAccTencentCloudKubernetesBackupStorageLocationResource_Basic(t *testing.T) { + t.Parallel() + + randIns := rand.New(rand.NewSource(time.Now().UnixNano())) + randomNum := randIns.Intn(100) + backupStorageLocationName := fmt.Sprintf(backupStorageLocationNameTemplate, randomNum) + backupLocationBucket := fmt.Sprintf(backupLocationBucketTemplate, randomNum) + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckBackupStorageLocationDestroy, + Steps: []resource.TestStep{ + { + Config: getTestAccTkeBackupStorageLocationConfig(backupStorageLocationName, backupLocationBucket), + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID(testTkeBackupStorageLocationResourceKey), + resource.TestCheckResourceAttr(testTkeBackupStorageLocationResourceKey, "name", backupStorageLocationName), + resource.TestCheckResourceAttr(testTkeBackupStorageLocationResourceKey, "storage_region", "ap-guangzhou"), + resource.TestCheckResourceAttrSet(testTkeBackupStorageLocationResourceKey, "bucket"), + ), + }, + }, + }) +} + +func testBackupStorageLocationSweep(region string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + cli, err := tcacctest.SharedClientForRegion(region) + if err != nil { + return fmt.Errorf("error getting client: %s", err) + } + log.Printf("testServerlessNodePoolSweep region %s", region) + + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) + + // delete all backup storage location + locations, err := service.DescribeBackupStorageLocations(ctx, []string{}) + if err != nil { + return err + } + + for _, l := range locations { + deleteLocation := l.Name + if err = service.DeleteBackupStorageLocation(ctx, *deleteLocation); err != nil { + return fmt.Errorf("error deleting backup storage location: %s", err) + } + } + + return nil +} + +func testAccCheckBackupStorageLocationDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_kubernetes_backup_storage_location" { + continue + } + + locations, err := service.DescribeBackupStorageLocations(ctx, []string{rs.Primary.ID}) + if err != nil { + return err + } + if len(locations) > 0 { + return fmt.Errorf("backup storage location still exists: %s", rs.Primary.ID) + } + } + return nil +} + +func getTestAccTkeBackupStorageLocationConfig(name, bucket string) string { + return fmt.Sprintf(testBackupStorageLocationConfigTemplate, bucket, name) +} + +const ( + testBackupStorageLocationConfigTemplate = ` +data "tencentcloud_user_info" "info" {} +locals { + app_id = data.tencentcloud_user_info.info.app_id + uin = data.tencentcloud_user_info.info.uin + owner_uin = data.tencentcloud_user_info.info.owner_uin +} +resource "tencentcloud_cos_bucket" "back_up_bucket" { + bucket = "%s-${local.app_id}" +} +resource "tencentcloud_kubernetes_backup_storage_location" "test_case_backup_storage_location" { + name = "%s" + storage_region = "ap-guangzhou" + bucket = tencentcloud_cos_bucket.back_up_bucket.bucket +} +` +) diff --git a/tencentcloud/resource_tc_kubernetes_cluster.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go similarity index 93% rename from tencentcloud/resource_tc_kubernetes_cluster.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster.go index 4d56bbbdaa..895b59030b 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster.go @@ -1,6 +1,11 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "encoding/json" "fmt" @@ -16,6 +21,7 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -125,8 +131,8 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, ForceNew: true, - Default: CVM_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue(TKE_INSTANCE_CHARGE_TYPE), + Default: svccvm.CVM_CHARGE_TYPE_POSTPAID, + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_INSTANCE_CHARGE_TYPE), Description: "The charge type of instance. Valid values are `PREPAID` and `POSTPAID_BY_HOUR`. The default is `POSTPAID_BY_HOUR`. Note: TencentCloud International only supports `POSTPAID_BY_HOUR`, `PREPAID` instance will not terminated after cluster deleted, and may not allow to delete before expired.", }, "instance_charge_type_prepaid_period": { @@ -134,7 +140,7 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { Optional: true, ForceNew: true, Default: 1, - ValidateFunc: validateAllowedIntValue(CVM_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(svccvm.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": { @@ -142,22 +148,22 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { Optional: true, ForceNew: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(svccvm.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`.", }, "subnet_id": { Type: schema.TypeString, ForceNew: true, Required: true, - ValidateFunc: validateStringLengthInRange(4, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(4, 100), Description: "Private network ID.", }, "system_disk_type": { Type: schema.TypeString, ForceNew: true, Optional: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_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. NOTE: `CLOUD_BASIC`, `LOCAL_BASIC` and `LOCAL_SSD` are deprecated.", }, "system_disk_size": { @@ -165,7 +171,7 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { ForceNew: true, Optional: true, Default: 50, - ValidateFunc: validateIntegerInRange(20, 1024), + ValidateFunc: tccommon.ValidateIntegerInRange(20, 1024), Description: "Volume of system disk in GB. Default is `50`.", }, "data_disk": { @@ -180,8 +186,8 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { Type: schema.TypeString, ForceNew: true, Optional: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk, available values: `CLOUD_PREMIUM` and `CLOUD_SSD` and `CLOUD_HSSD` and `CLOUD_TSSD`.", }, "disk_size": { @@ -239,8 +245,8 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { Type: schema.TypeString, ForceNew: true, Optional: true, - Default: INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, - ValidateFunc: validateAllowedStringValue(INTERNET_CHARGE_ALLOW_TYPE), + Default: svcas.INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.INTERNET_CHARGE_ALLOW_TYPE), Description: "Charge types for network traffic. Available values include `TRAFFIC_POSTPAID_BY_HOUR`.", }, "internet_max_bandwidth_out": { @@ -265,7 +271,7 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { ForceNew: true, Optional: true, Sensitive: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, Description: "Password to access, should be set if `key_ids` not set.", }, "key_ids": { @@ -329,7 +335,7 @@ func TkeCvmCreateInfo() map[string]*schema.Schema { "img_id": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateImageID, + ValidateFunc: tccommon.ValidateImageID, Description: "The valid image id, format of img-xxx.", }, // InstanceAdvancedSettingsOverrides @@ -355,7 +361,7 @@ func TkeExistCvmCreateInfo() map[string]*schema.Schema { Type: schema.TypeString, ForceNew: true, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{TKE_ROLE_WORKER, TKE_ROLE_MASTER_ETCD}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{TKE_ROLE_WORKER, TKE_ROLE_MASTER_ETCD}), Description: "Role of existed node. value:MASTER_ETCD or WORKER.", }, "instances_para": { @@ -445,7 +451,7 @@ func TkeNodePoolGlobalConfig() map[string]*schema.Schema { } } -func resourceTencentCloudTkeCluster() *schema.Resource { +func ResourceTencentCloudTkeCluster() *schema.Resource { schemaBody := map[string]*schema.Schema{ "cluster_name": { Type: schema.TypeString, @@ -476,7 +482,7 @@ func resourceTencentCloudTkeCluster() *schema.Resource { ForceNew: true, Optional: true, Default: TKE_CLUSTER_OS_TYPE_GENERAL, - ValidateFunc: validateAllowedStringValue(TKE_CLUSTER_OS_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_CLUSTER_OS_TYPES), Description: "Image type of the cluster os, the available values include: '" + strings.Join(TKE_CLUSTER_OS_TYPES, "','") + "'. Default is '" + TKE_CLUSTER_OS_TYPE_GENERAL + "'.", }, @@ -485,7 +491,7 @@ func resourceTencentCloudTkeCluster() *schema.Resource { ForceNew: true, Optional: true, Default: TKE_RUNTIME_DOCKER, - ValidateFunc: validateAllowedStringValue(TKE_RUNTIMES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_RUNTIMES), Description: "Runtime type of the cluster, the available values include: 'docker' and 'containerd'." + "The Kubernetes v1.24 has removed dockershim, so please use containerd in v1.24 or higher." + "Default is 'docker'.", @@ -495,7 +501,7 @@ func resourceTencentCloudTkeCluster() *schema.Resource { ForceNew: true, Optional: true, Default: TKE_DEPLOY_TYPE_MANAGED, - ValidateFunc: validateAllowedStringValue(TKE_DEPLOY_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_DEPLOY_TYPES), Description: "Deployment type of the cluster, the available values include: 'MANAGED_CLUSTER' and 'INDEPENDENT_CLUSTER'. Default is 'MANAGED_CLUSTER'.", }, "cluster_version": { @@ -586,14 +592,14 @@ func resourceTencentCloudTkeCluster() *schema.Resource { Optional: true, Default: "lan-ip", Description: "Node name type of Cluster, the available values include: 'lan-ip' and 'hostname', Default is 'lan-ip'.", - ValidateFunc: validateAllowedStringValue(TKE_CLUSTER_NODE_NAME_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_CLUSTER_NODE_NAME_TYPE), }, "network_type": { Type: schema.TypeString, ForceNew: true, Optional: true, Default: "GR", - ValidateFunc: validateAllowedStringValue(TKE_CLUSTER_NETWORK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(TKE_CLUSTER_NETWORK_TYPE), Description: "Cluster network type, the available values include: 'GR' and 'VPC-CNI' and 'CiliumOverlay'. Default is GR.", }, "enable_customized_pod_cidr": { @@ -633,7 +639,7 @@ func resourceTencentCloudTkeCluster() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{"tke-route-eni", "tke-direct-eni"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"tke-route-eni", "tke-direct-eni"}), Description: "Distinguish between shared network card multi-IP mode and independent network card mode. " + "Fill in `tke-route-eni` for shared network card multi-IP mode and `tke-direct-eni` for independent network card mode. " + "The default is shared network card mode. When it is necessary to turn off the vpc-cni container network capability, both `eni_subnet_ids` and `vpc_cni_type` must be set to empty.", @@ -642,7 +648,7 @@ func resourceTencentCloudTkeCluster() *schema.Resource { Type: schema.TypeString, ForceNew: true, Required: true, - ValidateFunc: validateStringLengthInRange(4, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(4, 100), Description: "Vpc Id of the cluster.", }, "cluster_internet": { @@ -1300,7 +1306,7 @@ func tkeGetCvmRunInstancesPara(dMap map[string]interface{}, meta interface{}, if v, ok := dMap["instance_charge_type"]; ok { instanceChargeType := v.(string) request.InstanceChargeType = &instanceChargeType - if instanceChargeType == CVM_CHARGE_TYPE_PREPAID { + if instanceChargeType == svccvm.CVM_CHARGE_TYPE_PREPAID { request.InstanceChargePrepaid = &cvm.InstanceChargePrepaid{} if period, ok := dMap["instance_charge_type_prepaid_period"]; ok { periodInt64 := int64(period.(int)) @@ -1470,10 +1476,10 @@ func upgradeClusterInstances(tkeService TkeService, ctx context.Context, id stri } // upgrade instances - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tkeService.UpgradeClusterInstances(ctx, id, upgradeType, instanceIds) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -1482,11 +1488,11 @@ func upgradeClusterInstances(tkeService TkeService, ctx context.Context, id stri } // check update status: upgrade instance one by one, so timeout depend on instance number. - timeout := readRetryTimeout * time.Duration(instNum) + timeout := tccommon.ReadRetryTimeout * time.Duration(instNum) err = resource.Retry(timeout, func() *resource.RetryError { done, inErr := tkeService.GetUpgradeInstanceResult(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if done { return nil @@ -1502,10 +1508,10 @@ func upgradeClusterInstances(tkeService TkeService, ctx context.Context, id stri } func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster.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 ( basic ClusterBasicSetting @@ -1824,7 +1830,7 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface } } - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id, err := service.CreateCluster(ctx, basic, advanced, cvms, iAdvanced, cidrSet, tags, existInstances, &overrideSettings, iDiskMountSettings, extensionAddons) if err != nil { return err @@ -1836,7 +1842,7 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface if err != nil { // create often cost more than 20 Minutes. - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, _, err = service.DescribeClusterInstances(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -1864,20 +1870,20 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface //intranet if clusterIntranet { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.CreateClusterEndpoint(ctx, id, intranetSubnetId, clusterInternetSecurityGroup, false, clusterIntranetDomain, "") if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) if err != nil { return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { status, message, inErr := service.DescribeClusterEndpointStatus(ctx, id, false) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if status == TkeInternetStatusCreating { return resource.RetryableError( @@ -1895,20 +1901,20 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface } if clusterInternet { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.CreateClusterEndpoint(ctx, id, "", clusterInternetSecurityGroup, true, clusterInternetDomain, "") if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) if err != nil { return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { status, message, inErr := service.DescribeClusterEndpointStatus(ctx, id, true) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if status == TkeInternetStatusCreating { return resource.RetryableError( @@ -1928,10 +1934,10 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface //Modify node pool global config if _, ok := d.GetOk("node_pool_global_config"); ok { request := tkeGetNodePoolGlobalConfig(d) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.ModifyClusterNodePoolGlobalConfig(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -1998,20 +2004,20 @@ func resourceTencentCloudTkeClusterCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) info, has, err := service.DescribeCluster(ctx, d.Id()) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = service.DescribeCluster(ctx, d.Id()) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -2062,7 +2068,7 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} if importClsFlag && info.DeployType == TKE_DEPLOY_TYPE_INDEPENDENT { var masters []InstanceInfo var errRet error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { masters, _, errRet = service.DescribeClusterInstancesByRole(ctx, d.Id(), "MASTER_OR_ETCD") if e, ok := errRet.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -2084,10 +2090,10 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} instanceIds = append(instanceIds, helper.String(instance.InstanceId)) } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, errRet = cvmService.DescribeInstanceByFilter(ctx, instanceIds, nil) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -2347,7 +2353,7 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} _, workers, err := service.DescribeClusterInstances(ctx, d.Id()) if err != nil { - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -2381,7 +2387,7 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} securityRet, err := service.DescribeClusterSecurity(ctx, d.Id()) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { securityRet, err = service.DescribeClusterSecurity(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -2433,7 +2439,7 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} //} var globalConfig *tke.ClusterAsGroupOption - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { globalConfig, err = service.DescribeClusterNodePoolGlobalConfig(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -2468,15 +2474,15 @@ func resourceTencentCloudTkeClusterRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn - service := TagService{client: client} - tkeService := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctag.NewTagService(client) + tkeService := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} region := client.Region d.Partial(true) @@ -2486,9 +2492,9 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("ccs", "cluster", region, id) + resourceName := tccommon.BuildTagResourceName("ccs", "cluster", region, id) if err := service.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -2575,11 +2581,11 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface clusterLevel = "" } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := tkeService.ModifyClusterAttribute(ctx, id, projectId, clusterName, clusterDesc, clusterLevel, autoUpgradeClusterLevel) if err != nil { // create and update immediately may cause cluster level syntax error, this error can wait until cluster level state normal - return retryError(err, tke.INTERNALERROR_UNEXPECTEDINTERNAL, tke.RESOURCEUNAVAILABLE) + return tccommon.RetryError(err, tke.INTERNALERROR_UNEXPECTEDINTERNAL, tke.RESOURCEUNAVAILABLE) } return nil }) @@ -2602,7 +2608,7 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface return err } time.Sleep(3 * time.Second) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ipamdResp, inErr := tkeService.DescribeIPAMD(ctx, id) enableIPAMD := *ipamdResp.EnableIPAMD disableVpcCniMode := *ipamdResp.DisableVpcCniMode @@ -2621,10 +2627,10 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface } else { info, _, err := tkeService.DescribeCluster(ctx, id) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { newInfo, _, inErr := tkeService.DescribeCluster(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } info = newInfo return nil @@ -2653,7 +2659,7 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface } if len(addSubnets) > 0 { vpcId := d.Get("vpc_id").(string) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tkeService.AddVpcCniSubnets(ctx, id, addSubnets, vpcId) if inErr != nil { return resource.NonRetryableError(inErr) @@ -2679,7 +2685,7 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface return err } time.Sleep(3 * time.Second) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ipamdResp, inErr := tkeService.DescribeIPAMD(ctx, id) disableVpcCniMode := *ipamdResp.DisableVpcCniMode phase := *ipamdResp.Phase @@ -2715,10 +2721,10 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface if !ok { extraArgs = nil } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tkeService.ModifyClusterVersion(ctx, id, newVersion, extraArgs) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -2726,10 +2732,10 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface return err } //check status - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { ins, has, inErr := tkeService.DescribeCluster(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if !has { return resource.NonRetryableError(fmt.Errorf("Cluster %s is not exist", id)) @@ -2760,10 +2766,10 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface // update node pool global config if d.HasChange("node_pool_global_config") { request := tkeGetNodePoolGlobalConfig(d) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tkeService.ModifyClusterNodePoolGlobalConfig(ctx, request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -2775,10 +2781,10 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface if d.HasChange("auth_options") { request := tkeGetAuthOptions(d) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := tkeService.ModifyClusterAuthenticationOptions(ctx, request) if inErr != nil { - return retryError(inErr, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + return tccommon.RetryError(inErr, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } return nil }) @@ -2864,7 +2870,7 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface if d.HasChange("extension_addon") { o, n := d.GetChange("extension_addon") - adds, removes, changes := resourceTkeGetAddonsDiffs(o.([]interface{}), n.([]interface{})) + adds, removes, changes := ResourceTkeGetAddonsDiffs(o.([]interface{}), n.([]interface{})) updates := append(adds, changes...) for i := range updates { var err error @@ -2921,11 +2927,11 @@ func resourceTencentCloudTkeClusterUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} deleteEventLogSetAndTopic := false enableEventLog := false deleteAuditLogSetAndTopic := false @@ -2939,25 +2945,25 @@ func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface deleteAuditLogSetAndTopic = v["delete_audit_log_and_topic"].(bool) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if deleteEventLogSetAndTopic && enableEventLog { err := service.SwitchEventPersistence(ctx, d.Id(), "", "", false, true) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() != "FailedOperation.ClusterNotFound" { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } } else if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } } if deleteAuditLogSetAndTopic { err := service.SwitchClusterAudit(ctx, d.Id(), "", "", false, true) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() != "ResourceNotFound.ClusterNotFound" { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } } else if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } } err := service.DeleteCluster(ctx, d.Id()) @@ -2969,7 +2975,7 @@ func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -2980,7 +2986,7 @@ func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface _, _, err = service.DescribeClusterInstances(ctx, d.Id()) if err != nil { - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, _, err = service.DescribeClusterInstances(ctx, d.Id()) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InvalidParameter.ClusterNotFound" { @@ -2988,7 +2994,7 @@ func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface } } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -2997,7 +3003,7 @@ func resourceTencentCloudTkeClusterDelete(d *schema.ResourceData, meta interface } -func resourceTkeGetAddonsDiffs(o, n []interface{}) (adds, removes, changes []interface{}) { +func ResourceTkeGetAddonsDiffs(o, n []interface{}) (adds, removes, changes []interface{}) { indexByName := func(i interface{}) int { v := i.(map[string]interface{}) return helper.HashString(v["name"].(string)) @@ -3027,10 +3033,10 @@ func checkClusterEndpointStatus(ctx context.Context, service *TkeService, d *sch var response tke.DescribeClusterEndpointsResponseParams var isOpened bool var errRet error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { status, _, errRet = service.DescribeClusterEndpointStatus(ctx, d.Id(), isInternet) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if status == TkeInternetStatusCreating || status == TkeInternetStatusDeleting { return resource.RetryableError( @@ -3054,10 +3060,10 @@ func checkClusterEndpointStatus(ctx context.Context, service *TkeService, d *sch } if isOpened { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { config, errRet = service.DescribeClusterConfig(ctx, d.Id(), isInternet) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -3065,10 +3071,10 @@ func checkClusterEndpointStatus(ctx context.Context, service *TkeService, d *sch return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, errRet = service.DescribeClusterEndpoints(ctx, d.Id()) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) diff --git a/tencentcloud/resource_tc_kubernetes_cluster_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment.go similarity index 86% rename from tencentcloud/resource_tc_kubernetes_cluster_attachment.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment.go index ca73b5be6e..74883db615 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment.go @@ -1,6 +1,10 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "strings" @@ -10,6 +14,7 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -25,19 +30,19 @@ func TKEGpuArgsSetting() map[string]*schema.Schema { "driver": { Type: schema.TypeMap, Optional: true, - ValidateFunc: validateTkeGpuDriverVersion, + ValidateFunc: tccommon.ValidateTkeGpuDriverVersion, Description: "GPU driver version. Format like: `{ version: String, name: String }`. `version`: Version of GPU driver or CUDA; `name`: Name of GPU driver or CUDA.", }, "cuda": { Type: schema.TypeMap, Optional: true, - ValidateFunc: validateTkeGpuDriverVersion, + ValidateFunc: tccommon.ValidateTkeGpuDriverVersion, Description: "CUDA version. Format like: `{ version: String, name: String }`. `version`: Version of GPU driver or CUDA; `name`: Name of GPU driver or CUDA.", }, "cudnn": { Type: schema.TypeMap, Optional: true, - ValidateFunc: validateTkeGpuDriverVersion, + ValidateFunc: tccommon.ValidateTkeGpuDriverVersion, Description: "cuDNN version. Format like: `{ version: String, name: String, doc_name: String, dev_name: String }`." + " `version`: cuDNN version; `name`: cuDNN name; `doc_name`: Doc name of cuDNN; `dev_name`: Dev name of cuDNN.", }, @@ -76,8 +81,8 @@ func TkeInstanceAdvancedSetting() map[string]*schema.Schema { Type: schema.TypeString, ForceNew: true, Optional: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk, available values: `CLOUD_PREMIUM` and `CLOUD_SSD`.", }, "disk_size": { @@ -156,7 +161,7 @@ func TkeInstanceAdvancedSetting() map[string]*schema.Schema { } } -func resourceTencentCloudTkeClusterAttachment() *schema.Resource { +func ResourceTencentCloudTkeClusterAttachment() *schema.Resource { schemaBody := map[string]*schema.Schema{ "cluster_id": { Type: schema.TypeString, @@ -175,7 +180,7 @@ func resourceTencentCloudTkeClusterAttachment() *schema.Resource { ForceNew: true, Optional: true, Sensitive: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, Description: "Password to access, should be set if `key_ids` not set.", }, "key_ids": { @@ -364,14 +369,14 @@ func tkeGetInstanceAdvancedPara(dMap map[string]interface{}, meta interface{}) ( return setting } func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_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) - tkeService := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + tkeService := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId, clusterId := "", "" if items := strings.Split(d.Id(), "_"); len(items) != 2 { @@ -383,10 +388,10 @@ func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta i /*tke has been deleted*/ _, has, err := tkeService.DescribeCluster(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = tkeService.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -401,10 +406,10 @@ func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta i /*cvm has been deleted*/ var instance *cvm.Instance - 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 retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -420,10 +425,10 @@ func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta i has = false /*attachment has been deleted*/ - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err := tkeService.DescribeClusterInstances(ctx, clusterId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } for _, worker := range workers { if worker.InstanceId == instanceId { @@ -464,13 +469,13 @@ func resourceTencentCloudTkeClusterAttachmentRead(d *schema.ResourceData, meta i } func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_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) - tkeService := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + tkeService := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request := tke.NewAddExistedInstancesRequest() @@ -529,10 +534,10 @@ func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta var err error _, workers, err := tkeService.DescribeClusterInstances(ctx, *request.ClusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = tkeService.DescribeClusterInstances(ctx, *request.ClusterId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -553,11 +558,11 @@ func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta var response *tke.AddExistedInstancesResponse - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = tkeService.client.UseTkeClient().AddExistedInstances(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -576,12 +581,12 @@ func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta } /*wait for cvm status*/ - if err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(7*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 { + if instance != nil && *instance.InstanceState == svccvm.CVM_STATUS_RUNNING { return nil } return resource.RetryableError(fmt.Errorf("cvm instance %s status is %s, retry...", *instanceId, *instance.InstanceState)) @@ -590,10 +595,10 @@ func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta } /*wait for tke init ok */ - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = tkeService.DescribeClusterInstances(ctx, *request.ClusterId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } has := false for _, worker := range workers { @@ -625,9 +630,9 @@ func resourceTencentCloudTkeClusterAttachmentCreate(d *schema.ResourceData, meta } func resourceTencentCloudTkeClusterAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_attachment.delete")() - tkeService := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + tkeService := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId, clusterId := "", "" if items := strings.Split(d.Id(), "_"); len(items) != 2 { @@ -646,7 +651,7 @@ func resourceTencentCloudTkeClusterAttachmentDelete(d *schema.ResourceData, meta var err error - if err = resource.Retry(4*writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(4*tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := tkeService.client.UseTkeClient().DeleteClusterInstances(request) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -659,7 +664,7 @@ func resourceTencentCloudTkeClusterAttachmentDelete(d *schema.ResourceData, meta } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { diff --git a/tencentcloud/resource_tc_kubernetes_cluster_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment_test.go similarity index 79% rename from tencentcloud/resource_tc_kubernetes_cluster_attachment_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment_test.go index bd33add286..5412203b7b 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke_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" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudKubernetesAttachResource(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: testAccCheckTkeAttachDestroy, Steps: []resource.TestStep{ { @@ -33,12 +37,10 @@ func TestAccTencentCloudKubernetesAttachResource(t *testing.T) { } func testAccCheckTkeAttachDestroy(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 := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_kubernetes_cluster_attachment" { @@ -55,10 +57,10 @@ func testAccCheckTkeAttachDestroy(s *terraform.State) error { _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -98,8 +100,8 @@ func testAccCheckTkeAttachExists(n string) resource.TestCheckFunc { return fmt.Errorf("tke cluster attach id is not set") } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId, clusterId := "", "" @@ -109,15 +111,13 @@ func testAccCheckTkeAttachExists(n string) resource.TestCheckFunc { instanceId, clusterId = items[0], items[1] } - service := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -154,7 +154,7 @@ locals { func testAccTkeAttachCluster() string { - return TkeDataSource + ClusterAttachmentInstanceType + defaultImages + ` + return tcacctest.TkeDataSource + ClusterAttachmentInstanceType + tcacctest.DefaultImages + ` variable "cluster_cidr" { default = "172.16.0.0/16" } diff --git a/tencentcloud/resource_tc_kubernetes_cluster_endpoint.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint.go similarity index 87% rename from tencentcloud/resource_tc_kubernetes_cluster_endpoint.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint.go index 5f76764051..2a192a7ab1 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_endpoint.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint.go @@ -1,9 +1,11 @@ -package tencentcloud +package tke import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" "github.com/hashicorp/go-multierror" @@ -12,7 +14,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudTkeClusterEndpoint() *schema.Resource { +func ResourceTencentCloudTkeClusterEndpoint() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTkeClusterEndpointRead, Create: resourceTencentCloudTkeClusterEndpointCreate, @@ -119,12 +121,12 @@ func resourceTencentCloudTkeClusterEndpoint() *schema.Resource { } func resourceTencentCloudTkeClusterEndpointRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.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 := TkeService{client} id := d.Id() @@ -172,11 +174,11 @@ func resourceTencentCloudTkeClusterEndpointRead(d *schema.ResourceData, meta int } func resourceTencentCloudTkeClusterEndpointCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.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 := TkeService{client} id := d.Get("cluster_id").(string) @@ -236,11 +238,11 @@ func resourceTencentCloudTkeClusterEndpointCreate(d *schema.ResourceData, meta i } func resourceTencentCloudTkeClusterEndpointUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.update")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.update")() - 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 := TkeService{client} id := d.Id() @@ -333,11 +335,11 @@ func resourceTencentCloudTkeClusterEndpointUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudTkeClusterEndpointDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_cluster_endpoint.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 := TkeService{client} var ( id = d.Id() @@ -380,7 +382,7 @@ func resourceTencentCloudTkeClusterEndpointDelete(d *schema.ResourceData, meta i } func waitForClusterEndpointFinish(ctx context.Context, service *TkeService, id string, enabled bool, isInternet bool) (err error) { - return resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + return resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { var ( status string message string @@ -397,13 +399,13 @@ func waitForClusterEndpointFinish(ctx context.Context, service *TkeService, id s status, message, inErr = service.DescribeClusterEndpointStatus(ctx, id, isInternet) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if status == retryableState { return resource.RetryableError( fmt.Errorf("%s create cluster internet endpoint status still is %s", id, status)) } - if IsContains(finishStates, status) { + if tccommon.IsContains(finishStates, status) { return nil } return resource.NonRetryableError( @@ -412,16 +414,16 @@ func waitForClusterEndpointFinish(ctx context.Context, service *TkeService, id s } func tencentCloudClusterInternetSwitch(ctx context.Context, service *TkeService, id string, enable bool, sg string, domain string, extensiveParameters string) (err error) { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if enable { err = service.CreateClusterEndpoint(ctx, id, "", sg, true, domain, extensiveParameters) if err != nil { - return retryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } } else { err = service.DeleteClusterEndpoint(ctx, id, true) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } } return nil @@ -433,16 +435,16 @@ func tencentCloudClusterInternetSwitch(ctx context.Context, service *TkeService, } func tencentCloudClusterIntranetSwitch(ctx context.Context, service *TkeService, id, subnetId string, enable bool, domain string) (err error) { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if enable { err = service.CreateClusterEndpoint(ctx, id, subnetId, "", false, domain, "") if err != nil { - return retryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } } else { err = service.DeleteClusterEndpoint(ctx, id, false) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } } return nil diff --git a/tencentcloud/resource_tc_kubernetes_cluster_endpoint_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint_test.go similarity index 94% rename from tencentcloud/resource_tc_kubernetes_cluster_endpoint_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint_test.go index b9abe149ac..04f6fef21f 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_endpoint_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_endpoint_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tke_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudKubernetesClusterEndpointResource(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: testAccTkeClusterEndpointBasic, @@ -74,11 +76,11 @@ func TestAccTencentCloudKubernetesClusterEndpointResource(t *testing.T) { // ` -const testAccTkeClusterEndpointBasicDeps = TkeCIDRs + - TkeDataSource + - TkeDefaultNodeInstanceVar + - defaultImages + - defaultSecurityGroupData + +const testAccTkeClusterEndpointBasicDeps = tcacctest.TkeCIDRs + + tcacctest.TkeDataSource + + tcacctest.TkeDefaultNodeInstanceVar + + tcacctest.DefaultImages + + tcacctest.DefaultSecurityGroupData + ` variable "availability_zone" { default = "ap-guangzhou-3" diff --git a/tencentcloud/resource_tc_kubernetes_cluster_international_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_international_test.go similarity index 92% rename from tencentcloud/resource_tc_kubernetes_cluster_international_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_international_test.go index b97cbf6210..7702619d00 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_international_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_international_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package tke_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) var testInternationalTkeClusterName = "tencentcloud_kubernetes_cluster" @@ -12,8 +14,8 @@ var testInternationalTkeClusterResourceKey = testInternationalTkeClusterName + " func TestAccTencentCloudInternationalKubernetesResource_cluster(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: testAccCheckTkeDestroy, Steps: []resource.TestStep{ { @@ -45,7 +47,7 @@ func TestAccTencentCloudInternationalKubernetesResource_cluster(t *testing.T) { }) } -const InternationalTkeDeps = TkeExclusiveNetwork + TkeInstanceType + TkeCIDRs + defaultImages + defaultSecurityGroupData +const InternationalTkeDeps = tcacctest.TkeExclusiveNetwork + tcacctest.TkeInstanceType + tcacctest.TkeCIDRs + tcacctest.DefaultImages + tcacctest.DefaultSecurityGroupData const testAccInternationalTkeCluster = InternationalTkeDeps + ` variable "availability_zone" { diff --git a/tencentcloud/resource_tc_kubernetes_cluster_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_test.go similarity index 94% rename from tencentcloud/resource_tc_kubernetes_cluster_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_cluster_test.go index 47c1c9c18c..17fa059bfb 100644 --- a/tencentcloud/resource_tc_kubernetes_cluster_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_cluster_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke_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" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + "github.com/stretchr/testify/assert" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -23,11 +27,11 @@ func init() { resource.AddTestSweepers("tencentcloud_kubernetes_cluster", &resource.Sweeper{ Name: "tencentcloud_kubernetes_cluster", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{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 := svctke.NewTkeService(client) clusters, err := service.DescribeClusters(ctx, "", "") if err != nil { return err @@ -37,7 +41,7 @@ func init() { id := v.ClusterId name := v.ClusterName createdTime, _ := time.Parse(time.RFC3339, v.CreatedTime) - if isResourcePersist(name, &createdTime) { + if tcacctest.IsResourcePersist(name, &createdTime) { continue } if err := service.DeleteCluster(ctx, id); err != nil { @@ -53,8 +57,8 @@ func init() { func TestAccTencentCloudKubernetesClusterResourceBasic(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: testAccCheckTkeDestroy, Steps: []resource.TestStep{ { @@ -109,8 +113,8 @@ func TestAccTencentCloudKubernetesClusterResourceBasic(t *testing.T) { func TestAccTencentCloudKubernetesClusterResourceVpcCni(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: testAccCheckTkeDestroy, Steps: []resource.TestStep{ { @@ -154,8 +158,8 @@ func TestAccTencentCloudKubernetesClusterResourceVpcCni(t *testing.T) { func TestAccTencentCloudKubernetesClusterResourceLogsAddons(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: testAccCheckTkeDestroy, Steps: []resource.TestStep{ { @@ -234,7 +238,7 @@ func TestUnitTkeAddonDiff(t *testing.T) { }, } - adds, removes, changes := resourceTkeGetAddonsDiffs(addons1, addons2) + adds, removes, changes := svctke.ResourceTkeGetAddonsDiffs(addons1, addons2) assert.Len(t, adds, 1) assert.Len(t, removes, 1) @@ -262,12 +266,10 @@ func TestUnitTkeAddonDiff(t *testing.T) { } func testAccCheckTkeDestroy(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 := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != testTkeClusterName { @@ -275,14 +277,14 @@ func testAccCheckTkeDestroy(s *terraform.State) error { } _, has, err := service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { code := err.(*sdkErrors.TencentCloudSDKError).Code if code == "ResourceUnavailable.ClusterState" { return nil } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -315,19 +317,17 @@ func testAccCheckTkeExists(n string) resource.TestCheckFunc { return fmt.Errorf("tke cluster id is not set") } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = service.DescribeCluster(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -390,7 +390,7 @@ variable "addons_update" { } ` -const TkeDeps = TkeExclusiveNetwork + TkeInstanceType + TkeCIDRs + defaultImages + defaultSecurityGroupData +const TkeDeps = tcacctest.TkeExclusiveNetwork + tcacctest.TkeInstanceType + tcacctest.TkeCIDRs + tcacctest.DefaultImages + tcacctest.DefaultSecurityGroupData const testAccTkeCluster = TkeDeps + ` variable "availability_zone" { diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection.go b/tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection.go new file mode 100644 index 0000000000..63dc866645 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection.go @@ -0,0 +1,164 @@ +package tke + +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" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudKubernetesEncryptionProtection() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudKubernetesEncryptionProtectionCreate, + Read: resourceTencentCloudKubernetesEncryptionProtectionRead, + Delete: resourceTencentCloudKubernetesEncryptionProtectionDelete, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "cluster id.", + }, + + "kms_configuration": { + Required: true, + ForceNew: true, + Type: schema.TypeList, + MaxItems: 1, + Description: "kms encryption configuration.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "key_id": { + Type: schema.TypeString, + Optional: true, + Description: "kms id.", + }, + "kms_region": { + Type: schema.TypeString, + Optional: true, + Description: "kms region.", + }, + }, + }, + }, + "status": { + Computed: true, + Type: schema.TypeString, + Description: "kms encryption status.", + }, + }, + } +} + +func resourceTencentCloudKubernetesEncryptionProtectionCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tke_encryption_protection.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tke.NewEnableEncryptionProtectionRequest() + clusterId string + ) + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) + clusterId = v.(string) + } + + if dMap, ok := helper.InterfacesHeadMap(d, "kms_configuration"); ok { + kMSConfiguration := tke.KMSConfiguration{} + if v, ok := dMap["key_id"]; ok { + kMSConfiguration.KeyId = helper.String(v.(string)) + } + if v, ok := dMap["kms_region"]; ok { + kMSConfiguration.KmsRegion = helper.String(v.(string)) + } + request.KMSConfiguration = &kMSConfiguration + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().EnableEncryptionProtection(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 tke encryptionProtection failed, reason:%+v", logId, err) + return err + } + + d.SetId(clusterId) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Opened"}, 3*tccommon.ReadRetryTimeout, time.Second, service.TkeEncryptionProtectionStateRefreshFunc(d.Id(), []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + return resourceTencentCloudKubernetesEncryptionProtectionRead(d, meta) +} + +func resourceTencentCloudKubernetesEncryptionProtectionRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tke_encryption_protection.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + encryptionProtectionId := d.Id() + + encryptionProtection, err := service.DescribeTkeEncryptionProtectionById(ctx, encryptionProtectionId) + if err != nil { + return err + } + + if encryptionProtection == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TkeEncryptionProtection` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if encryptionProtection.Status != nil { + _ = d.Set("status", encryptionProtection.Status) + } + + return nil +} + +func resourceTencentCloudKubernetesEncryptionProtectionDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tke_encryption_protection.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + encryptionProtectionId := d.Id() + + if err := service.DeleteTkeEncryptionProtectionById(ctx, encryptionProtectionId); err != nil { + return err + } + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Closed"}, 3*tccommon.ReadRetryTimeout, time.Second, service.TkeEncryptionProtectionStateRefreshFunc(d.Id(), []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + return nil +} diff --git a/tencentcloud/resource_tc_kubernetes_encryption_protection_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection_test.go similarity index 93% rename from tencentcloud/resource_tc_kubernetes_encryption_protection_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection_test.go index 01de5e3076..c463314ee0 100644 --- a/tencentcloud/resource_tc_kubernetes_encryption_protection_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_encryption_protection_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package tke_test import ( "fmt" "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,9 +15,9 @@ func TestAccTencentCloudKubernetesEncryptionProtectionResource_basic(t *testing. rName := acctest.RandString(10) resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccTkeEncryptionProtection, rName), diff --git a/tencentcloud/resource_tc_kubernetes_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_node_pool.go similarity index 90% rename from tencentcloud/resource_tc_kubernetes_node_pool.go rename to tencentcloud/services/tke/resource_tc_kubernetes_node_pool.go index 9bcf0f4f09..c832d3dce2 100644 --- a/tencentcloud/resource_tc_kubernetes_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_node_pool.go @@ -1,6 +1,10 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -11,6 +15,7 @@ import ( as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -58,15 +63,15 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema { "system_disk_type": { Type: schema.TypeString, Optional: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Type of a CVM disk. Valid value: `CLOUD_PREMIUM` and `CLOUD_SSD`. Default is `CLOUD_PREMIUM`.", }, "system_disk_size": { Type: schema.TypeInt, Optional: true, Default: 50, - ValidateFunc: validateIntegerInRange(20, 1024), + ValidateFunc: tccommon.ValidateIntegerInRange(20, 1024), Description: "Volume of system disk in GB. Default is `50`.", }, "data_disk": { @@ -79,8 +84,8 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, //ForceNew: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk. Valid value: `CLOUD_PREMIUM` and `CLOUD_SSD`.", }, "disk_size": { @@ -124,33 +129,33 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema { "instance_charge_type_prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(CVM_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(svccvm.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(svccvm.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), + Default: svcas.INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.INTERNET_CHARGE_ALLOW_TYPE), Description: "Charge types for network traffic. Valid value: `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.", }, "internet_max_bandwidth_out": { @@ -174,7 +179,7 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema { Optional: true, Sensitive: true, ForceNew: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, ConflictsWith: []string{"auto_scaling_config.0.key_ids"}, Description: "Password to access.", }, @@ -246,7 +251,7 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema { return needSchema } -func resourceTencentCloudKubernetesNodePool() *schema.Resource { +func ResourceTencentCloudKubernetesNodePool() *schema.Resource { return &schema.Resource{ Create: resourceKubernetesNodePoolCreate, Read: resourceKubernetesNodePoolRead, @@ -267,20 +272,20 @@ func resourceTencentCloudKubernetesNodePool() *schema.Resource { "max_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Maximum number of node.", }, "min_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Minimum number of node.", }, "desired_capacity": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Desired capacity of the node. If `enable_auto_scale` is set `true`, this will be a computed parameter.", }, "enable_auto_scale": { @@ -294,9 +299,9 @@ func resourceTencentCloudKubernetesNodePool() *schema.Resource { Optional: true, ForceNew: true, Description: "Available values for retry policies include `IMMEDIATE_RETRY` and `INCREMENTAL_INTERVALS`.", - Default: SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, - ValidateFunc: validateAllowedStringValue([]string{SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, - SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS, SCALING_GROUP_RETRY_POLICY_NO_RETRY}), + Default: svcas.SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcas.SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, + svcas.SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS, svcas.SCALING_GROUP_RETRY_POLICY_NO_RETRY}), }, "vpc_id": { Type: schema.TypeString, @@ -323,8 +328,8 @@ func resourceTencentCloudKubernetesNodePool() *schema.Resource { "multi_zone_subnet_policy": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{MultiZoneSubnetPolicyPriority, - MultiZoneSubnetPolicyEquality}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{svcas.MultiZoneSubnetPolicyPriority, + svcas.MultiZoneSubnetPolicyEquality}), Description: "Multi-availability zone/subnet policy. Valid values: PRIORITY and EQUALITY. Default value: PRIORITY.", }, "node_config": { @@ -499,7 +504,7 @@ func resourceTencentCloudKubernetesNodePool() *schema.Resource { } } -//this function composes every single parameter to an as scale parameter with json string format +// this function composes every single parameter to an as scale parameter with json string format func composeParameterToAsScalingGroupParaSerial(d *schema.ResourceData) (string, error) { var ( result string @@ -549,7 +554,7 @@ func composeParameterToAsScalingGroupParaSerial(d *schema.ResourceData) (string, return result, errRet } -//This function is used to specify tke as group launch config, similar to kubernetesAsScalingConfigParaSerial, but less parameter +// This function is used to specify tke as group launch config, similar to kubernetesAsScalingConfigParaSerial, but less parameter func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, meta interface{}) (string, error) { var ( result string @@ -678,10 +683,10 @@ func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, me chargeType, ok := dMap["instance_charge_type"].(string) if !ok || chargeType == "" { - chargeType = INSTANCE_CHARGE_TYPE_POSTPAID + chargeType = svcas.INSTANCE_CHARGE_TYPE_POSTPAID } - if chargeType == INSTANCE_CHARGE_TYPE_SPOTPAID { + if chargeType == svcas.INSTANCE_CHARGE_TYPE_SPOTPAID { spotMaxPrice := dMap["spot_max_price"].(string) spotInstanceType := dMap["spot_instance_type"].(string) request.InstanceMarketOptions = &as.InstanceMarketOptionsRequest{ @@ -693,7 +698,7 @@ func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, me } } - if chargeType == INSTANCE_CHARGE_TYPE_PREPAID { + if chargeType == svcas.INSTANCE_CHARGE_TYPE_PREPAID { period := dMap["instance_charge_type_prepaid_period"].(int) renewFlag := dMap["instance_charge_type_prepaid_renew_flag"].(string) request.InstanceChargePrepaid = &as.InstanceChargePrepaid{ @@ -822,10 +827,10 @@ func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId s chargeType, ok := dMap["instance_charge_type"].(string) if !ok || chargeType == "" { - chargeType = INSTANCE_CHARGE_TYPE_POSTPAID + chargeType = svcas.INSTANCE_CHARGE_TYPE_POSTPAID } - if chargeType == INSTANCE_CHARGE_TYPE_SPOTPAID { + if chargeType == svcas.INSTANCE_CHARGE_TYPE_SPOTPAID { spotMaxPrice := dMap["spot_max_price"].(string) spotInstanceType := dMap["spot_instance_type"].(string) request.InstanceMarketOptions = &as.InstanceMarketOptionsRequest{ @@ -837,7 +842,7 @@ func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId s } } - if chargeType == INSTANCE_CHARGE_TYPE_PREPAID { + if chargeType == svcas.INSTANCE_CHARGE_TYPE_PREPAID { period := dMap["instance_charge_type_prepaid_period"].(int) renewFlag := dMap["instance_charge_type_prepaid_renew_flag"].(string) request.InstanceChargePrepaid = &as.InstanceChargePrepaid{ @@ -902,14 +907,14 @@ func desiredCapacityOutRange(d *schema.ResourceData) bool { } func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_node_pool.read")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_node_pool.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - asService = AsService{client: meta.(*TencentCloudClient).apiV3Conn} - items = strings.Split(d.Id(), FILED_SP) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + asService = svcas.NewAsService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + items = strings.Split(d.Id(), tccommon.FILED_SP) ) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id is broken") @@ -919,10 +924,10 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er _, has, err := service.DescribeCluster(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = service.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -944,7 +949,7 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er nodePool *tke.NodePool ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { nodePool, has, err = service.DescribeNodePool(ctx, clusterId, nodePoolId) if err != nil { return resource.NonRetryableError(err) @@ -1060,11 +1065,11 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er } if launchCfg.InstanceChargeType != nil { launchConfig["instance_charge_type"] = launchCfg.InstanceChargeType - if *launchCfg.InstanceChargeType == INSTANCE_CHARGE_TYPE_SPOTPAID && launchCfg.InstanceMarketOptions != nil { + if *launchCfg.InstanceChargeType == svcas.INSTANCE_CHARGE_TYPE_SPOTPAID && launchCfg.InstanceMarketOptions != nil { launchConfig["spot_instance_type"] = launchCfg.InstanceMarketOptions.SpotOptions.SpotInstanceType launchConfig["spot_max_price"] = launchCfg.InstanceMarketOptions.SpotOptions.MaxPrice } - if *launchCfg.InstanceChargeType == INSTANCE_CHARGE_TYPE_PREPAID && launchCfg.InstanceChargePrepaid != nil { + if *launchCfg.InstanceChargeType == svcas.INSTANCE_CHARGE_TYPE_PREPAID && launchCfg.InstanceChargePrepaid != nil { launchConfig["instance_charge_type_prepaid_period"] = launchCfg.InstanceChargePrepaid.Period launchConfig["instance_charge_type_prepaid_renew_flag"] = launchCfg.InstanceChargePrepaid.RenewFlag } @@ -1236,10 +1241,10 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er // Relative scaling group status asg, hasAsg, err := asService.DescribeAutoScalingGroupById(ctx, *nodePool.AutoscalingGroupId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { asg, hasAsg, err = asService.DescribeAutoScalingGroupById(ctx, *nodePool.AutoscalingGroupId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1291,10 +1296,10 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er } func resourceKubernetesNodePoolCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_node_pool.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_node_pool.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) clusterId = d.Get("cluster_id").(string) enableAutoScale = d.Get("enable_auto_scale").(bool) configParas = d.Get("auto_scaling_config").([]interface{}) @@ -1342,20 +1347,20 @@ func resourceKubernetesNodePoolCreate(d *schema.ResourceData, meta interface{}) deletionProtection := d.Get("deletion_protection").(bool) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} nodePoolId, err := service.CreateClusterNodePool(ctx, clusterId, name, groupParaStr, configParaStr, enableAutoScale, nodeOs, nodeOsType, labels, taints, iAdvanced, deletionProtection) if err != nil { return err } - d.SetId(clusterId + FILED_SP + nodePoolId) + d.SetId(clusterId + tccommon.FILED_SP + nodePoolId) // wait for status ok - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { nodePool, _, errRet := service.DescribeNodePool(ctx, clusterId, nodePoolId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if nodePool != nil && *nodePool.LifeState == "normal" { return nil @@ -1385,16 +1390,16 @@ func resourceKubernetesNodePoolCreate(d *schema.ResourceData, meta interface{}) } func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_node_pool.update")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_node_pool.update")() var ( - 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 = TkeService{client: client} - asService = AsService{client: client} - cvmService = CvmService{client: client} - items = strings.Split(d.Id(), FILED_SP) + asService = svcas.NewAsService(client) + cvmService = svccvm.NewCvmService(client) + items = strings.Split(d.Id(), tccommon.FILED_SP) ) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id is broken") @@ -1449,10 +1454,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) // min 3 max 6 desired 5 // modify min/max first will cause error, this case must upgrade desired first if d.HasChange("desired_capacity") || !desiredCapacityOutRange(d) { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := service.ModifyClusterNodePoolDesiredCapacity(ctx, clusterId, nodePoolId, desiredCapacity) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1487,10 +1492,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) if strings.Contains(nodeOs, "img-") { nodeOsType = "" } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := service.ModifyClusterNodePool(ctx, clusterId, nodePoolId, name, enableAutoScale, minSize, maxSize, nodeOs, nodeOsType, labels, taints, tags, deletionProtection) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1546,10 +1551,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) request.TerminationPolicies = helper.InterfacesStringsPoint(v.([]interface{})) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := asService.ModifyAutoScalingGroup(ctx, request) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1562,10 +1567,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) if d.HasChange("desired_capacity") && !capacityHasChanged { desiredCapacity := int64(d.Get("desired_capacity").(int)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := service.ModifyClusterNodePoolDesiredCapacity(ctx, clusterId, nodePoolId, desiredCapacity) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1576,10 +1581,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) if d.HasChange("auto_scaling_config.0.backup_instance_types") { instanceTypes := getNodePoolInstanceTypes(d) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := service.ModifyClusterNodePoolInstanceTypes(ctx, clusterId, nodePoolId, instanceTypes) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1594,13 +1599,13 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{}) } func resourceKubernetesNodePoolDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_node_pool.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_node_pool.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - items = strings.Split(d.Id(), FILED_SP) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + items = strings.Split(d.Id(), tccommon.FILED_SP) deleteKeepInstance = d.Get("delete_keep_instance").(bool) deletionProtection = d.Get("deletion_protection").(bool) ) @@ -1616,7 +1621,7 @@ func resourceKubernetesNodePoolDelete(d *schema.ResourceData, meta interface{}) //delete as group hasDelete := false - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.DeleteClusterNodePool(ctx, clusterId, nodePoolId, deleteKeepInstance) if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { @@ -1626,7 +1631,7 @@ func resourceKubernetesNodePoolDelete(d *schema.ResourceData, meta interface{}) } } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -1640,14 +1645,14 @@ func resourceKubernetesNodePoolDelete(d *schema.ResourceData, meta interface{}) } // wait for delete ok - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { nodePool, has, errRet := service.DescribeNodePool(ctx, clusterId, nodePoolId) if errRet != nil { errCode := errRet.(*sdkErrors.TencentCloudSDKError).Code if errCode == "InternalError.UnexpectedInternal" { return nil } - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if has { return resource.RetryableError(fmt.Errorf("node pool %s still alive, status %s", nodePoolId, *nodePool.LifeState)) diff --git a/tencentcloud/resource_tc_kubernetes_node_pool_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_node_pool_test.go similarity index 92% rename from tencentcloud/resource_tc_kubernetes_node_pool_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_node_pool_test.go index 7c515d9cd7..8583f3f4f9 100644 --- a/tencentcloud/resource_tc_kubernetes_node_pool_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_node_pool_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke_test import ( "context" @@ -8,8 +8,13 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -30,21 +35,21 @@ func init() { var nodePoolNameReg = regexp.MustCompile("^(mynodepool|np|gpu)") func testNodePoolSweep(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) - cli, err := sharedClientForRegion(region) + cli, err := tcacctest.SharedClientForRegion(region) if err != nil { return err } - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) request := tke.NewDescribeClusterNodePoolsRequest() - request.ClusterId = helper.String(defaultTkeClusterId) + request.ClusterId = helper.String(tcacctest.DefaultTkeClusterId) response, err := client.UseTkeClient().DescribeClusterNodePools(request) if err != nil { - log.Printf("Query %s node pool fail: %s", defaultTkeClusterId, err.Error()) + log.Printf("Query %s node pool fail: %s", tcacctest.DefaultTkeClusterId, err.Error()) } nodePools := response.Response.NodePoolSet if len(nodePools) == 0 { @@ -60,7 +65,7 @@ func testNodePoolSweep(region string) error { if !nodePoolNameReg.MatchString(*poolName) { continue } - err := service.DeleteClusterNodePool(ctx, defaultTkeClusterId, poolId, false) + err := service.DeleteClusterNodePool(ctx, tcacctest.DefaultTkeClusterId, poolId, false) if err != nil { continue } @@ -71,8 +76,8 @@ func testNodePoolSweep(region string) error { func TestAccTencentCloudKubernetesNodePoolResource_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: testAccCheckTkeNodePoolDestroy, Steps: []resource.TestStep{ { @@ -143,7 +148,7 @@ func TestAccTencentCloudKubernetesNodePoolResource_basic(t *testing.T) { resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "labels.test3", "test3"), resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "desired_capacity", "2"), resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "name", "mynodepoolupdate"), - resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "node_os", defaultTkeOSImageName), + resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "node_os", tcacctest.DefaultTkeOSImageName), resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "unschedulable", "0"), resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "scaling_group_name", "asg_np_test_changed"), resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "default_cooldown", "350"), @@ -164,8 +169,8 @@ func TestAccTencentCloudKubernetesNodePoolResource_basic(t *testing.T) { func TestAccTencentCloudKubernetesNodePoolResource_DiskEncrypt(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: testAccCheckTkeNodePoolDestroy, Steps: []resource.TestStep{ { @@ -183,8 +188,8 @@ func TestAccTencentCloudKubernetesNodePoolResource_DiskEncrypt(t *testing.T) { func TestAccTencentCloudKubernetesNodePoolResource_GPUInstance(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: testAccCheckTkeNodePoolDestroy, Steps: []resource.TestStep{ { @@ -200,12 +205,10 @@ func TestAccTencentCloudKubernetesNodePoolResource_GPUInstance(t *testing.T) { } func testAccCheckTkeNodePoolDestroy(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 := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[testTkeClusterNodePoolResourceKey] if !ok { @@ -214,7 +217,7 @@ func testAccCheckTkeNodePoolDestroy(s *terraform.State) error { if rs.Primary.ID == "" { return fmt.Errorf("tke node pool id is not set") } - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id %s is broken", rs.Primary.ID) } @@ -238,12 +241,10 @@ func testAccCheckTkeNodePoolDestroy(s *terraform.State) error { func testAccCheckTkeNodePoolExists(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 := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[testTkeClusterNodePoolResourceKey] if !ok { @@ -253,7 +254,7 @@ func testAccCheckTkeNodePoolExists(s *terraform.State) error { return fmt.Errorf("tke node pool id is not set") } - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id %s is broken", rs.Primary.ID) } @@ -272,7 +273,7 @@ func testAccCheckTkeNodePoolExists(s *terraform.State) error { } -const testAccTkeNodePoolClusterBasic = defaultProjectVariable + defaultImages + TkeDataSource + TkeDefaultNodeInstanceVar + ` +const testAccTkeNodePoolClusterBasic = tcacctest.DefaultProjectVariable + tcacctest.DefaultImages + tcacctest.TkeDataSource + tcacctest.TkeDefaultNodeInstanceVar + ` variable "availability_zone" { default = "ap-guangzhou-3" } diff --git a/tencentcloud/resource_tc_kubernetes_scale_worker.go b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go similarity index 88% rename from tencentcloud/resource_tc_kubernetes_scale_worker.go rename to tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go index c1baebe5ed..91a4200c9c 100644 --- a/tencentcloud/resource_tc_kubernetes_scale_worker.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go @@ -1,6 +1,10 @@ -package tencentcloud +package tke import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -12,10 +16,11 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTkeScaleWorker() *schema.Resource { +func ResourceTencentCloudTkeScaleWorker() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTkeScaleWorkerCreate, Read: resourceTencentCloudTkeScaleWorkerRead, @@ -110,8 +115,8 @@ func resourceTencentCloudTkeScaleWorker() *schema.Resource { Type: schema.TypeString, ForceNew: true, Optional: true, - Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + Default: svcas.SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + ValidateFunc: tccommon.ValidateAllowedStringValue(svcas.SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk, available values: `CLOUD_PREMIUM` and `CLOUD_SSD` and `CLOUD_HSSD` and `CLOUD_TSSD`.", }, "disk_size": { @@ -159,15 +164,15 @@ func resourceTencentCloudTkeScaleWorker() *schema.Resource { } func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_scale_worker.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_scale_worker.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var cvms RunInstancesForNode var iAdvanced tke.InstanceAdvancedSettings cvms.Work = []string{} - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) if clusterId == "" { @@ -176,10 +181,10 @@ func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta inter info, has, err := service.DescribeCluster(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = service.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -245,25 +250,25 @@ func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta inter } //修改id设置,不符合id规则 - id := clusterId + FILED_SP + strings.Join(instanceIds, FILED_SP) + id := clusterId + tccommon.FILED_SP + strings.Join(instanceIds, tccommon.FILED_SP) d.SetId(id) //wait for LANIP - time.Sleep(readRetryTimeout) + time.Sleep(tccommon.ReadRetryTimeout) return resourceTencentCloudTkeScaleWorkerRead(d, meta) } func resourceTencentCloudTkeScaleWorkerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_scale_worker.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_scale_worker.read")() + defer tccommon.InconsistentCheck(d, meta)() - ctx := context.WithValue(context.TODO(), logIdKey, getLogId(contextNil)) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} - cvmService := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, tccommon.GetLogId(tccommon.ContextNil)) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + cvmService := svccvm.NewCvmService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var ( - items = strings.Split(d.Id(), FILED_SP) + items = strings.Split(d.Id(), tccommon.FILED_SP) oldWorkerInstancesList = d.Get("worker_instances_list").([]interface{}) instanceMap = make(map[string]bool) clusterId = "" @@ -287,10 +292,10 @@ func resourceTencentCloudTkeScaleWorkerRead(d *schema.ResourceData, meta interfa return fmt.Errorf("tke.`cluster_id` is empty.") } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err := service.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if !has { @@ -320,7 +325,7 @@ func resourceTencentCloudTkeScaleWorkerRead(d *schema.ResourceData, meta interfa _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "InternalError.ClusterNotFound" { @@ -444,10 +449,10 @@ func resourceTencentCloudTkeScaleWorkerRead(d *schema.ResourceData, meta interfa //worker_config 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, instanceIds, nil) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -534,11 +539,11 @@ func resourceTencentCloudTkeScaleWorkerRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTkeScaleWorkerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_scale_worker.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_scale_worker.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Get("cluster_id").(string) @@ -548,10 +553,10 @@ func resourceTencentCloudTkeScaleWorkerDelete(d *schema.ResourceData, meta inter _, has, err := service.DescribeCluster(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = service.DescribeCluster(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -590,7 +595,7 @@ func resourceTencentCloudTkeScaleWorkerDelete(d *schema.ResourceData, meta inter _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -623,7 +628,7 @@ func resourceTencentCloudTkeScaleWorkerDelete(d *schema.ResourceData, meta inter err = service.DeleteClusterInstances(ctx, clusterId, needDeletes) if err != nil { - err = resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { err = service.DeleteClusterInstances(ctx, clusterId, needDeletes) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -638,7 +643,7 @@ func resourceTencentCloudTkeScaleWorkerDelete(d *schema.ResourceData, meta inter } if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) diff --git a/tencentcloud/resource_tc_kubernetes_scale_worker_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker_test.go similarity index 79% rename from tencentcloud/resource_tc_kubernetes_scale_worker_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_scale_worker_test.go index 54c6f7685e..c8f76fb6ff 100644 --- a/tencentcloud/resource_tc_kubernetes_scale_worker_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke_test import ( "context" @@ -7,6 +7,11 @@ import ( "testing" "time" + 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" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -20,20 +25,20 @@ func init() { resource.AddTestSweepers("tencentcloud_kubernetes_scale_worker", &resource.Sweeper{ Name: "tencentcloud_kubernetes_scale_worker", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) - clusters, err := service.DescribeClusters(ctx, "", defaultTkeClusterName) + clusters, err := service.DescribeClusters(ctx, "", tcacctest.DefaultTkeClusterName) if err != nil { return err } if len(clusters) == 0 { - return fmt.Errorf("no cluster names %s", defaultTkeClusterName) + return fmt.Errorf("no cluster names %s", tcacctest.DefaultTkeClusterName) } clusterId := clusters[0].ClusterId @@ -44,7 +49,7 @@ func init() { return err } - cvmService := CvmService{client} + cvmService := svccvm.NewCvmService(client) instanceIds := make([]string, 0) for i := range workers { worker := workers[i] @@ -56,11 +61,11 @@ func init() { continue } - created, err := time.Parse(TENCENTCLOUD_COMMON_TIME_LAYOUT, worker.CreatedTime) + created, err := time.Parse(tccommon.TENCENTCLOUD_COMMON_TIME_LAYOUT, worker.CreatedTime) if err != nil { created = time.Time{} } - if isResourcePersist(*instance.InstanceName, &created) { + if tcacctest.IsResourcePersist(*instance.InstanceName, &created) { continue } instanceIds = append(instanceIds, worker.InstanceId) @@ -79,8 +84,8 @@ func init() { func TestAccTencentCloudKubernetesScaleWorkerResource(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: testAccCheckTkeScaleWorkerDestroy, Steps: []resource.TestStep{ { @@ -118,14 +123,14 @@ func testAccCheckTkeScaleWorkerDestroy(s *terraform.State) error { if clusterId == "" || instanceId == "" { return fmt.Errorf("miss worker_instances_list.0.instance_id[%s] or cluster_id[%s]", instanceId, clusterId) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -134,7 +139,7 @@ func testAccCheckTkeScaleWorkerDestroy(s *terraform.State) error { } } if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -168,14 +173,14 @@ func testAccCheckTkeScaleWorkerExists(n string) resource.TestCheckFunc { return fmt.Errorf("miss worker_instances_list.0.instance_id[%s] or cluster_id[%s]", instanceId, clusterId) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, workers, err := service.DescribeClusterInstances(ctx, clusterId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, workers, err = service.DescribeClusterInstances(ctx, clusterId) if e, ok := err.(*errors.TencentCloudSDKError); ok { @@ -185,7 +190,7 @@ func testAccCheckTkeScaleWorkerExists(n string) resource.TestCheckFunc { } if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -204,7 +209,7 @@ func testAccCheckTkeScaleWorkerExists(n string) resource.TestCheckFunc { } } -const testAccTkeScaleWorkerInstanceBasic = TkeExclusiveNetwork + TkeDataSource + defaultSecurityGroupData +const testAccTkeScaleWorkerInstanceBasic = tcacctest.TkeExclusiveNetwork + tcacctest.TkeDataSource + tcacctest.DefaultSecurityGroupData const testAccTkeScaleWorkerInstance string = testAccTkeScaleWorkerInstanceBasic + ` diff --git a/tencentcloud/resource_tc_kubernetes_serverless_node_pool.go b/tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool.go similarity index 84% rename from tencentcloud/resource_tc_kubernetes_serverless_node_pool.go rename to tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool.go index ad6bb9513d..3ef341beb6 100644 --- a/tencentcloud/resource_tc_kubernetes_serverless_node_pool.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool.go @@ -1,18 +1,21 @@ -package tencentcloud +package tke 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/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTkeServerLessNodePool() *schema.Resource { +func ResourceTencentCloudTkeServerLessNodePool() *schema.Resource { return &schema.Resource{ Importer: &schema.ResourceImporter{ State: schema.ImportStatePassthrough, @@ -99,10 +102,10 @@ func resourceTkeServerLessNodePool() *schema.Resource { } func resourceTkeServerlessNodePoolRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eks_cluster.read")() + defer tccommon.LogElapsed("resource.tencentcloud_eks_cluster.read")() var ( - items = strings.Split(d.Id(), FILED_SP) + items = strings.Split(d.Id(), tccommon.FILED_SP) ) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id is broken") @@ -110,15 +113,15 @@ func resourceTkeServerlessNodePoolRead(d *schema.ResourceData, meta interface{}) clusterId := items[0] nodePoolId := items[1] - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TkeService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( nodePool *tke.VirtualNodePool has bool ) - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var err error nodePool, has, err = service.DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx, clusterId, nodePoolId) if err != nil { @@ -150,11 +153,11 @@ func resourceTkeServerlessNodePoolRead(d *schema.ResourceData, meta interface{}) } func resourceTkeServerlessNodePoolCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.create")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.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 := TkeService{client: client} request := genCreateClusterVirtualNodePoolReq(d) @@ -166,19 +169,19 @@ func resourceTkeServerlessNodePoolCreate(d *schema.ResourceData, meta interface{ } clusterId := *request.ClusterId - d.SetId(clusterId + FILED_SP + nodePoolId) + d.SetId(clusterId + tccommon.FILED_SP + nodePoolId) return resourceTkeServerlessNodePoolRead(d, meta) } func resourceTkeServerlessNodePoolUpdate(d *schema.ResourceData, meta interface{}) error { // currently only name, labels and taints can be modified - defer logElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.update")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( - items = strings.Split(d.Id(), FILED_SP) + items = strings.Split(d.Id(), tccommon.FILED_SP) ) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id is broken") @@ -186,7 +189,7 @@ func resourceTkeServerlessNodePoolUpdate(d *schema.ResourceData, meta interface{ clusterId := items[0] nodePoolId := items[1] - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := TkeService{client: client} request := tke.NewModifyClusterVirtualNodePoolRequest() @@ -212,13 +215,13 @@ func resourceTkeServerlessNodePoolUpdate(d *schema.ResourceData, meta interface{ return resourceTkeServerlessNodePoolRead(d, meta) } func resourceTkeServerlessNodePoolDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_serverless_node_pool.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( - items = strings.Split(d.Id(), FILED_SP) + items = strings.Split(d.Id(), tccommon.FILED_SP) ) if len(items) != 2 { return fmt.Errorf("resource_tc_kubernetes_node_pool id is broken") @@ -226,7 +229,7 @@ func resourceTkeServerlessNodePoolDelete(d *schema.ResourceData, meta interface{ clusterId := items[0] nodePoolId := items[1] - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := TkeService{client: client} request := tke.NewDeleteClusterVirtualNodePoolRequest() @@ -274,7 +277,7 @@ func genCreateClusterVirtualNodePoolReq(d *schema.ResourceData) *tke.CreateClust } func setDataFromDescribeVirtualNodePoolResponse(clusterId string, res *tke.VirtualNodePool, d *schema.ResourceData) error { - d.SetId(clusterId + FILED_SP + *res.NodePoolId) + d.SetId(clusterId + tccommon.FILED_SP + *res.NodePoolId) _ = d.Set("name", res.Name) _ = d.Set("life_state", res.LifeState) labels := make(map[string]interface{}) diff --git a/tencentcloud/resource_tc_kubernetes_serverless_node_pool_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool_test.go similarity index 85% rename from tencentcloud/resource_tc_kubernetes_serverless_node_pool_test.go rename to tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool_test.go index d66943fc1d..18cd8ec945 100644 --- a/tencentcloud/resource_tc_kubernetes_serverless_node_pool_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_serverless_node_pool_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke_test import ( "context" @@ -8,10 +8,15 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctke "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tke" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -34,21 +39,21 @@ func init() { func TestAccTencentCloudKubernetesServerlessNodePoolResource_Basic(t *testing.T) { t.Parallel() - tkeClusterId := defaultTkeClusterId + tkeClusterId := tcacctest.DefaultTkeClusterId envClusterId := os.Getenv(clusterIdForTkeTestEnvKey) if strings.HasPrefix(envClusterId, "cls-") { tkeClusterId = envClusterId } resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckServerlessNodePoolDestroy, Steps: []resource.TestStep{ { Config: getTestAccTkeServerlessNodePoolConfig(tkeClusterId), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(testTkeServerlessNodePoolResourceKey), + tcacctest.AccCheckTencentCloudDataSourceID(testTkeServerlessNodePoolResourceKey), resource.TestCheckResourceAttr(testTkeServerlessNodePoolResourceKey, "name", "hello-world"), resource.TestCheckResourceAttr(testTkeServerlessNodePoolResourceKey, "labels.key1", "value1"), resource.TestCheckResourceAttr(testTkeServerlessNodePoolResourceKey, "taints.#", "1"), @@ -75,22 +80,22 @@ func TestAccTencentCloudKubernetesServerlessNodePoolResource_Basic(t *testing.T) } func testServerlessNodePoolSweep(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) - tkeClusterId := defaultTkeClusterId + tkeClusterId := tcacctest.DefaultTkeClusterId envClusterId := os.Getenv(clusterIdForTkeTestEnvKey) if strings.HasPrefix(envClusterId, "cls-") { tkeClusterId = envClusterId } log.Printf("testServerlessNodePoolSweep region %s, clusterId %s", region, tkeClusterId) - cli, err := sharedClientForRegion(region) + cli, err := tcacctest.SharedClientForRegion(region) if err != nil { return err } - client := cli.(*TencentCloudClient).apiV3Conn - service := TkeService{client: client} + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svctke.NewTkeService(client) request := tke.NewDescribeClusterVirtualNodePoolsRequest() request.ClusterId = helper.String(tkeClusterId) @@ -125,14 +130,12 @@ func testServerlessNodePoolSweep(region string) error { } func testAccCheckServerlessNodePoolDestroy(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) - tkeService := TkeService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + tkeService := svctke.NewTkeService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) - tkeClusterId := defaultTkeClusterId + tkeClusterId := tcacctest.DefaultTkeClusterId envClusterId := os.Getenv(clusterIdForTkeTestEnvKey) if strings.HasPrefix(envClusterId, "cls-") { tkeClusterId = envClusterId @@ -145,10 +148,10 @@ func testAccCheckServerlessNodePoolDestroy(s *terraform.State) error { respNodePool, has, err := tkeService.DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx, tkeClusterId, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { respNodePool, has, err = tkeService.DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx, tkeClusterId, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/service_tencentcloud_eks.go b/tencentcloud/services/tke/service_tencentcloud_eks.go similarity index 95% rename from tencentcloud/service_tencentcloud_eks.go rename to tencentcloud/services/tke/service_tencentcloud_eks.go index 3c0762269e..8fd014e51c 100644 --- a/tencentcloud/service_tencentcloud_eks.go +++ b/tencentcloud/services/tke/service_tencentcloud_eks.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke import ( "context" @@ -6,12 +6,19 @@ import ( "log" "regexp" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + "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 NewEksService(client *connectivity.TencentCloudClient) EksService { + return EksService{client: client} +} + type EksService struct { client *connectivity.TencentCloudClient } @@ -94,7 +101,7 @@ func getClusterInfo(cluster *tke.EksCluster) EksClusterInfo { func (me *EksService) DescribeEKSClusters(ctx context.Context, id string, name string) (eksClusters []EksClusterInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tke.NewDescribeEKSClustersRequest() defer func() { @@ -144,7 +151,7 @@ func (me *EksService) DescribeEKSClusters(ctx context.Context, id string, name s } func (me *EksService) DescribeEksCluster(ctx context.Context, id string) (clusterInfo EksClusterInfo, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tke.NewDescribeEKSClustersRequest() defer func() { @@ -177,7 +184,7 @@ func (me *EksService) DescribeEksCluster(ctx context.Context, id string) (cluste } func (me *EksService) DescribeEksContainerInstanceById(ctx context.Context, id string) (instance *tke.EksCi, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tke.NewDescribeEKSContainerInstancesRequest() request.EksCiIds = []*string{&id} @@ -208,7 +215,7 @@ func (me *EksService) DescribeEksContainerInstanceById(ctx context.Context, id s } func (me *EksService) DescribeEksContainerInstancesByFilter(ctx context.Context, filters []*tke.Filter, limit uint64, offset uint64) (instances []*tke.EksCi, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tke.NewDescribeEKSContainerInstancesRequest() if limit > 0 { @@ -254,7 +261,7 @@ func (me *EksService) DescribeEKSClusterCredentialById(ctx context.Context, id s } func (me *EksService) DescribeEKSClusterCredential(ctx context.Context, request *tke.DescribeEKSClusterCredentialRequest) (info *EksClusterCredentialResponse, 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", @@ -288,7 +295,7 @@ func (me *EksService) DescribeEKSClusterCredential(ctx context.Context, request } func (me *EksService) CreateEksCluster(ctx context.Context, request *tke.CreateEKSClusterRequest) (id string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -313,7 +320,7 @@ func (me *EksService) CreateEksCluster(ctx context.Context, request *tke.CreateE } func (me *EksService) CreateEksContainerInstances(ctx context.Context, request *tke.CreateEKSContainerInstancesRequest) (id string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -341,7 +348,7 @@ func (me *EksService) CreateEksContainerInstances(ctx context.Context, request * } func (me *EksService) UpdateEksContainerInstances(ctx context.Context, request *tke.UpdateEKSContainerInstanceRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -365,7 +372,7 @@ func (me *EksService) UpdateEksContainerInstances(ctx context.Context, request * } func (me *EksService) UpdateEksCluster(ctx context.Context, request *tke.UpdateEKSClusterRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -390,7 +397,7 @@ func (me *EksService) UpdateEksCluster(ctx context.Context, request *tke.UpdateE } func (me *EksService) DeleteEksCluster(ctx context.Context, request *tke.DeleteEKSClusterRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -415,7 +422,7 @@ func (me *EksService) DeleteEksCluster(ctx context.Context, request *tke.DeleteE } func (me *EksService) DeleteEksContainerInstance(ctx context.Context, request *tke.DeleteEKSContainerInstancesRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go new file mode 100644 index 0000000000..8d27c625fa --- /dev/null +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -0,0 +1,2751 @@ +package tke + +import ( + "context" + "fmt" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" + tat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat/v20201028" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/pkg/errors" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + + "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 ClusterBasicSetting struct { + ClusterId string + ClusterOs string + ClusterOsType string + ClusterVersion string + ClusterName string + ClusterDescription string + ClusterLevel *string + AutoUpgradeClusterLevel *bool + VpcId string + ProjectId int64 + ClusterNodeNum int64 + ClusterStatus string + SubnetId string + Tags map[string]string +} + +type ClusterAdvancedSettings struct { + Ipvs bool + AsEnabled bool + EnableCustomizedPodCIDR bool + BasePodNumber int64 + ContainerRuntime string + RuntimeVersion string + NodeNameType string + ExtraArgs ClusterExtraArgs + NetworkType string + IsNonStaticIpMode bool + DeletionProtection bool + KubeProxyMode string + Property string + OsCustomizeType string + VpcCniType string +} + +type ClusterExtraArgs struct { + KubeAPIServer []string + KubeControllerManager []string + KubeScheduler []string +} + +type RunInstancesForNode struct { + Master []string + Work []string +} + +type InstanceAdvancedSettings struct { + MountTarget string + DockerGraphPath string + UserScript string + Unschedulable int64 + DesiredPodNum int64 + Labels []*tke.Label + DataDisks []*tke.DataDisk + ExtraArgs tke.InstanceExtraArgs +} + +type ClusterCidrSettings struct { + ClusterCidr string + IgnoreClusterCidrConflict bool + MaxNodePodNum int64 + MaxClusterServiceNum int64 + ServiceCIDR string + EniSubnetIds []string + ClaimExpiredSeconds int64 +} + +type ClusterInfo struct { + ClusterBasicSetting + ClusterCidrSettings + ClusterAdvancedSettings + + DeployType string + CreatedTime string +} + +type InstanceInfo struct { + InstanceId string + InstanceRole string + InstanceState string + FailedReason string + NodePoolId string + CreatedTime string + InstanceAdvancedSettings *tke.InstanceAdvancedSettings + InstanceDataDiskMountSetting *tke.InstanceDataDiskMountSetting + LanIp string +} + +type PrometheusConfigIds struct { + InstanceId string + ClusterType string + ClusterId string +} + +type Switch struct { + ClusterId *string `json:"ClusterId,omitempty" name:"ClusterId"` + Audit *SwitchInfo `json:"Audit,omitempty" name:"Audit"` + Event *SwitchInfo `json:"Event,omitempty" name:"Event"` + Log *SwitchInfo `json:"Log,omitempty" name:"Log"` +} + +type SwitchInfo struct { + Enable *bool `json:"Enable,omitempty" name:"Enable"` + LogsetId *string `json:"LogsetId,omitempty" name:"LogsetId"` + TopicId *string `json:"TopicId,omitempty" name:"TopicId"` + Version *string `json:"Version,omitempty" name:"Version"` + UpgradeAble *bool `json:"UpgradeAble,omitempty" name:"UpgradeAble"` +} + +type DescribeLogSwitchesResponseParams struct { + SwitchSet []*Switch `json:"SwitchSet,omitempty" name:"SwitchSet"` + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +type DescribeLogSwitchesResponse struct { + tchttp.BaseResponse + Response *DescribeLogSwitchesResponseParams `json:"Response"` +} + +func NewTkeService(client *connectivity.TencentCloudClient) TkeService { + return TkeService{client: client} +} + +type TkeService struct { + client *connectivity.TencentCloudClient +} + +func (me *TkeService) DescribeClusterInstances(ctx context.Context, id string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterInstancesRequest() + + defer 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.ClusterId = &id + masters = make([]InstanceInfo, 0, 100) + workers = make([]InstanceInfo, 0, 100) + var offset int64 = 0 + var limit int64 = 20 + var has = map[string]bool{} + var total int64 = -1 + +getMoreData: + if total >= 0 && offset >= total { + return + } + request.Limit = &limit + request.Offset = &offset + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterInstances(request) + if err != nil { + errRet = err + return + } + if total < 0 { + total = int64(*response.Response.TotalCount) + } + + if len(response.Response.InstanceSet) > 0 { + offset += limit + } else { + // get empty set, we're done + return + } + + for _, item := range response.Response.InstanceSet { + if has[*item.InstanceId] { + errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) + return + } + has[*item.InstanceId] = true + instanceInfo := InstanceInfo{ + InstanceId: *item.InstanceId, + InstanceRole: *item.InstanceRole, + InstanceState: *item.InstanceState, + FailedReason: *item.FailedReason, + InstanceAdvancedSettings: item.InstanceAdvancedSettings, + } + if item.CreatedTime != nil { + instanceInfo.CreatedTime = *item.CreatedTime + } + if item.NodePoolId != nil { + instanceInfo.NodePoolId = *item.NodePoolId + } + if item.LanIP != nil { + instanceInfo.LanIp = *item.LanIP + } + if instanceInfo.InstanceRole == TKE_ROLE_WORKER { + workers = append(workers, instanceInfo) + } else { + masters = append(masters, instanceInfo) + } + } + goto getMoreData + +} + +func (me *TkeService) DescribeClusterInstancesByRole(ctx context.Context, id, role string) (masters []InstanceInfo, workers []InstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterInstancesRequest() + + defer 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.ClusterId = &id + request.InstanceRole = &role + masters = make([]InstanceInfo, 0, 100) + workers = make([]InstanceInfo, 0, 100) + var offset int64 = 0 + var limit int64 = 20 + var has = map[string]bool{} + var total int64 = -1 + + for { + if total >= 0 && offset >= total { + break + } + request.Limit = &limit + request.Offset = &offset + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterInstances(request) + if err != nil { + errRet = err + return + } + if total < 0 { + total = int64(*response.Response.TotalCount) + } + + if len(response.Response.InstanceSet) == 0 { + // get empty set, we're done + break + } + + offset += limit + + for _, item := range response.Response.InstanceSet { + if has[*item.InstanceId] { + errRet = fmt.Errorf("get repeated instance_id[%s] when doing DescribeClusterInstances", *item.InstanceId) + return + } + has[*item.InstanceId] = true + instanceInfo := InstanceInfo{ + InstanceId: *item.InstanceId, + InstanceRole: *item.InstanceRole, + InstanceState: *item.InstanceState, + FailedReason: *item.FailedReason, + InstanceAdvancedSettings: item.InstanceAdvancedSettings, + } + if item.CreatedTime != nil { + instanceInfo.CreatedTime = *item.CreatedTime + } + if item.NodePoolId != nil { + instanceInfo.NodePoolId = *item.NodePoolId + } + if item.LanIP != nil { + instanceInfo.LanIp = *item.LanIP + } + if instanceInfo.InstanceRole == TKE_ROLE_WORKER { + workers = append(workers, instanceInfo) + } else { + masters = append(masters, instanceInfo) + } + } + } + + return +} + +func (me *TkeService) DescribeClusters(ctx context.Context, id string, name string) (clusterInfos []ClusterInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClustersRequest() + + defer 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 id != "" && name != "" { + errRet = fmt.Errorf("cluster_id, cluster_name only one can be set one") + return + } + + if id != "" { + request.ClusterIds = []*string{&id} + } + + if name != "" { + filter := &tke.Filter{ + Name: helper.String("ClusterName"), + Values: []*string{&name}, + } + request.Filters = []*tke.Filter{filter} + } + + response, err := me.client.UseTkeClient().DescribeClusters(request) + + if err != nil { + errRet = err + return + } + + lenClusters := len(response.Response.Clusters) + + if lenClusters == 0 { + return + } + clusterInfos = make([]ClusterInfo, 0, lenClusters) + + for index := range response.Response.Clusters { + cluster := response.Response.Clusters[index] + var clusterInfo ClusterInfo + + clusterInfo.ClusterId = *cluster.ClusterId + clusterInfo.ClusterOs = *cluster.ClusterOs + clusterInfo.ClusterVersion = *cluster.ClusterVersion + clusterInfo.ClusterDescription = *cluster.ClusterDescription + clusterInfo.ClusterName = *cluster.ClusterName + clusterInfo.ClusterStatus = *cluster.ClusterStatus + clusterInfo.ClusterLevel = cluster.ClusterLevel + clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel + + clusterInfo.ProjectId = int64(*cluster.ProjectId) + clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId + clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) + + clusterInfo.IgnoreClusterCidrConflict = *cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict + clusterInfo.ClusterCidr = *cluster.ClusterNetworkSettings.ClusterCIDR + clusterInfo.MaxClusterServiceNum = int64(*cluster.ClusterNetworkSettings.MaxClusterServiceNum) + clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) + + clusterInfo.MaxNodePodNum = int64(*cluster.ClusterNetworkSettings.MaxNodePodNum) + clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) + clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs + clusterInfo.CreatedTime = *cluster.CreatedTime + + projectMap, err := helper.JsonToMap(*cluster.Property) + if err != nil { + errRet = err + return + } + if projectMap["VpcCniType"] != nil { + vpcCniType := projectMap["VpcCniType"].(string) + clusterInfo.VpcCniType = vpcCniType + } + + if len(cluster.TagSpecification) > 0 { + clusterInfo.Tags = make(map[string]string) + for _, tag := range cluster.TagSpecification[0].Tags { + clusterInfo.Tags[*tag.Key] = *tag.Value + } + } + + clusterInfos = append(clusterInfos, clusterInfo) + } + return +} + +func (me *TkeService) DescribeCluster(ctx context.Context, id string) ( + clusterInfo ClusterInfo, + has bool, + errRet error, +) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClustersRequest() + + defer 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.ClusterIds = []*string{&id} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusters(request) + + if err != nil { + errRet = err + return + } + + if len(response.Response.Clusters) == 0 { + return + } + + has = true + cluster := response.Response.Clusters[0] + clusterInfo.ClusterId = *cluster.ClusterId + clusterInfo.ClusterOs = *cluster.ClusterOs + clusterInfo.ClusterVersion = *cluster.ClusterVersion + clusterInfo.ClusterDescription = *cluster.ClusterDescription + clusterInfo.ClusterName = *cluster.ClusterName + clusterInfo.ClusterStatus = *cluster.ClusterStatus + clusterInfo.ClusterLevel = cluster.ClusterLevel + clusterInfo.AutoUpgradeClusterLevel = cluster.AutoUpgradeClusterLevel + + clusterInfo.ProjectId = int64(*cluster.ProjectId) + clusterInfo.VpcId = *cluster.ClusterNetworkSettings.VpcId + clusterInfo.ClusterNodeNum = int64(*cluster.ClusterNodeNum) + + clusterInfo.DeployType = strings.ToUpper(*cluster.ClusterType) + clusterInfo.Ipvs = *cluster.ClusterNetworkSettings.Ipvs + clusterInfo.Property = helper.PString(cluster.Property) + clusterInfo.OsCustomizeType = helper.PString(cluster.OsCustomizeType) + clusterInfo.ContainerRuntime = helper.PString(cluster.ContainerRuntime) + clusterInfo.DeletionProtection = helper.PBool(cluster.DeletionProtection) + clusterInfo.RuntimeVersion = helper.PString(cluster.RuntimeVersion) + if cluster.ClusterNetworkSettings != nil { + clusterInfo.KubeProxyMode = helper.PString(cluster.ClusterNetworkSettings.KubeProxyMode) + clusterInfo.IgnoreClusterCidrConflict = helper.PBool(cluster.ClusterNetworkSettings.IgnoreClusterCIDRConflict) + clusterInfo.ClusterCidr = helper.PString(cluster.ClusterNetworkSettings.ClusterCIDR) + clusterInfo.MaxClusterServiceNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxClusterServiceNum)) + clusterInfo.MaxNodePodNum = int64(helper.PUint64(cluster.ClusterNetworkSettings.MaxNodePodNum)) + clusterInfo.ServiceCIDR = helper.PString(cluster.ClusterNetworkSettings.ServiceCIDR) + } + clusterInfo.EniSubnetIds = common.StringValues(cluster.ClusterNetworkSettings.Subnets) + + projectMap, err := helper.JsonToMap(*cluster.Property) + if err != nil { + errRet = err + return + } + if projectMap["VpcCniType"] != nil { + vpcCniType := projectMap["VpcCniType"].(string) + clusterInfo.VpcCniType = vpcCniType + } + if projectMap["NetworkType"] != nil { + networkType := projectMap["NetworkType"].(string) + clusterInfo.NetworkType = networkType + } + + if len(cluster.TagSpecification) > 0 { + clusterInfo.Tags = make(map[string]string) + for _, tag := range cluster.TagSpecification[0].Tags { + clusterInfo.Tags[*tag.Key] = *tag.Value + } + } + + return +} + +func (me *TkeService) DescribeClusterCommonNames(ctx context.Context, request *tke.DescribeClusterCommonNamesRequest) (commonNames []*tke.CommonName, 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.UseTkeClient().DescribeClusterCommonNames(request) + + if err != nil { + errRet = err + return + } + + commonNames = response.Response.CommonNames + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *TkeService) DescribeClusterLevelAttribute(ctx context.Context, id string) (clusterLevels []*tke.ClusterLevelAttribute, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterLevelAttributeRequest() + defer 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 id != "" { + request.ClusterID = &id + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterLevelAttribute(request) + + if err != nil { + errRet = err + return + } + + clusterLevels = 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 *TkeService) DescribeClusterConfig(ctx context.Context, id string, isPublic bool) (config string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterKubeconfigRequest() + if isPublic { + request.IsExtranet = &isPublic + } + + defer 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.ClusterId = &id + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterKubeconfig(request) + + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil { + return + } + + config = *response.Response.Kubeconfig + return +} + +func (me *TkeService) GetUpgradeInstanceResult(ctx context.Context, id string) ( + done bool, + errRet error, +) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewGetUpgradeInstanceProgressRequest() + + defer 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.ClusterId = &id + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().GetUpgradeInstanceProgress(request) + + if err != nil { + errRet = err + return + } + + lifeState := *response.Response.LifeState + + // all instances success, lifeState=done + if lifeState == "done" { + return true, nil + } else if lifeState != "process" { + return false, fmt.Errorf("upgrade instances failed, tke response lifeState is:%s", lifeState) + } + + // parent lifeState=process, check whether all instances in processing. + for _, inst := range response.Response.Instances { + if *inst.LifeState == "done" || *inst.LifeState == "pending" { + continue + } + if *inst.LifeState != "process" { + return false, fmt.Errorf("upgrade instances failed, "+ + "instanceId:%s, lifeState is:%s", *inst.InstanceID, *inst.LifeState) + } + // instance lifeState=process, check whether failed or not. + for _, detail := range inst.Detail { + if *detail.LifeState == "failed" { + return false, fmt.Errorf("upgrade instances failed, "+ + "instanceId:%s, detail.lifeState is:%s", *inst.InstanceID, *detail.LifeState) + } + } + } + + return +} + +func (me *TkeService) CreateCluster(ctx context.Context, + basic ClusterBasicSetting, + advanced ClusterAdvancedSettings, + cvms RunInstancesForNode, + iAdvanced InstanceAdvancedSettings, + cidrSetting ClusterCidrSettings, + tags map[string]string, + existedInstance []*tke.ExistedInstancesForNode, + overrideSettings *OverrideSettings, + iDiskMountSettings []*tke.InstanceDataDiskMountSetting, + extensionAddons []*tke.ExtensionAddon, +) (id string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewCreateClusterRequest() + + defer 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.ClusterBasicSettings = &tke.ClusterBasicSettings{} + request.ClusterBasicSettings.ClusterOs = &basic.ClusterOs + request.ClusterBasicSettings.ClusterVersion = &basic.ClusterVersion + request.ClusterBasicSettings.ProjectId = &basic.ProjectId + request.ClusterBasicSettings.VpcId = &basic.VpcId + request.ClusterBasicSettings.ClusterDescription = &basic.ClusterDescription + request.ClusterBasicSettings.ClusterName = &basic.ClusterName + request.ClusterBasicSettings.OsCustomizeType = &basic.ClusterOsType + request.ClusterBasicSettings.ClusterLevel = basic.ClusterLevel + if basic.AutoUpgradeClusterLevel != nil { + request.ClusterBasicSettings.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ + IsAutoUpgrade: basic.AutoUpgradeClusterLevel, + } + } + if basic.SubnetId != "" { + request.ClusterBasicSettings.SubnetId = &basic.SubnetId + } + for k, v := range tags { + if len(request.ClusterBasicSettings.TagSpecification) == 0 { + request.ClusterBasicSettings.TagSpecification = []*tke.TagSpecification{{ + ResourceType: helper.String("cluster"), + }} + } + + request.ClusterBasicSettings.TagSpecification[0].Tags = append(request.ClusterBasicSettings.TagSpecification[0].Tags, &tke.Tag{ + Key: helper.String(k), + Value: helper.String(v), + }) + } + + request.ClusterAdvancedSettings = &tke.ClusterAdvancedSettings{} + request.ClusterAdvancedSettings.IPVS = &advanced.Ipvs + request.ClusterAdvancedSettings.AsEnabled = &advanced.AsEnabled + request.ClusterAdvancedSettings.ContainerRuntime = &advanced.ContainerRuntime + request.ClusterAdvancedSettings.RuntimeVersion = &advanced.RuntimeVersion + request.ClusterAdvancedSettings.NodeNameType = &advanced.NodeNameType + request.ClusterAdvancedSettings.EnableCustomizedPodCIDR = &advanced.EnableCustomizedPodCIDR + request.ClusterAdvancedSettings.BasePodNumber = &advanced.BasePodNumber + request.ClusterAdvancedSettings.ExtraArgs = &tke.ClusterExtraArgs{ + KubeAPIServer: common.StringPtrs(advanced.ExtraArgs.KubeAPIServer), + KubeControllerManager: common.StringPtrs(advanced.ExtraArgs.KubeControllerManager), + KubeScheduler: common.StringPtrs(advanced.ExtraArgs.KubeScheduler), + } + request.ClusterAdvancedSettings.NetworkType = &advanced.NetworkType + request.ClusterAdvancedSettings.IsNonStaticIpMode = &advanced.IsNonStaticIpMode + request.ClusterAdvancedSettings.DeletionProtection = &advanced.DeletionProtection + request.ClusterAdvancedSettings.KubeProxyMode = &advanced.KubeProxyMode + request.ClusterAdvancedSettings.VpcCniType = &advanced.VpcCniType + + request.InstanceAdvancedSettings = &tke.InstanceAdvancedSettings{} + request.InstanceAdvancedSettings.MountTarget = &iAdvanced.MountTarget + request.InstanceAdvancedSettings.DockerGraphPath = &iAdvanced.DockerGraphPath + request.InstanceAdvancedSettings.UserScript = &iAdvanced.UserScript + request.InstanceAdvancedSettings.Unschedulable = &iAdvanced.Unschedulable + request.InstanceAdvancedSettings.DesiredPodNumber = &iAdvanced.DesiredPodNum + if len(iAdvanced.ExtraArgs.Kubelet) > 0 { + request.InstanceAdvancedSettings.ExtraArgs = &iAdvanced.ExtraArgs + } + + if len(iAdvanced.Labels) > 0 { + request.InstanceAdvancedSettings.Labels = iAdvanced.Labels + } + + if len(iAdvanced.DataDisks) > 0 { + request.InstanceAdvancedSettings.DataDisks = iAdvanced.DataDisks + } + + if len(extensionAddons) > 0 { + request.ExtensionAddons = extensionAddons + } + + if overrideSettings != nil { + if len(overrideSettings.Master)+len(overrideSettings.Work) > 0 && + len(overrideSettings.Master)+len(overrideSettings.Work) != (len(cvms.Master)+len(cvms.Work)) { + return "", fmt.Errorf("len(overrideSettings) != (len(cvms.Master)+len(cvms.Work))") + } + } + + request.RunInstancesForNode = []*tke.RunInstancesForNode{} + + if len(cvms.Master) != 0 { + + var node tke.RunInstancesForNode + node.NodeRole = helper.String(TKE_ROLE_MASTER_ETCD) + node.RunInstancesPara = []*string{} + request.ClusterType = helper.String(TKE_DEPLOY_TYPE_INDEPENDENT) + for v := range cvms.Master { + node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Master[v]) + if overrideSettings != nil && len(overrideSettings.Master) != 0 { + node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Master[v]) + } + } + request.RunInstancesForNode = append(request.RunInstancesForNode, &node) + + } else { + request.ClusterType = helper.String(TKE_DEPLOY_TYPE_MANAGED) + } + + if len(cvms.Work) != 0 { + var node tke.RunInstancesForNode + node.NodeRole = helper.String(TKE_ROLE_WORKER) + node.RunInstancesPara = []*string{} + for v := range cvms.Work { + node.RunInstancesPara = append(node.RunInstancesPara, &cvms.Work[v]) + if overrideSettings != nil && len(overrideSettings.Work) != 0 { + node.InstanceAdvancedSettingsOverrides = append(node.InstanceAdvancedSettingsOverrides, &overrideSettings.Work[v]) + } + } + request.RunInstancesForNode = append(request.RunInstancesForNode, &node) + } + + if len(iDiskMountSettings) != 0 { + request.InstanceDataDiskMountSettings = iDiskMountSettings + } + + request.ClusterCIDRSettings = &tke.ClusterCIDRSettings{} + + maxNodePodNum := uint64(cidrSetting.MaxNodePodNum) + request.ClusterCIDRSettings.MaxNodePodNum = &maxNodePodNum + + maxClusterServiceNum := uint64(cidrSetting.MaxClusterServiceNum) + request.ClusterCIDRSettings.MaxClusterServiceNum = &maxClusterServiceNum + request.ClusterCIDRSettings.ClusterCIDR = &cidrSetting.ClusterCidr + request.ClusterCIDRSettings.IgnoreClusterCIDRConflict = &cidrSetting.IgnoreClusterCidrConflict + request.ClusterCIDRSettings.ServiceCIDR = &cidrSetting.ServiceCIDR + request.ClusterCIDRSettings.EniSubnetIds = common.StringPtrs(cidrSetting.EniSubnetIds) + request.ClusterCIDRSettings.ClaimExpiredSeconds = &cidrSetting.ClaimExpiredSeconds + + if len(existedInstance) > 0 { + request.ExistedInstancesForNode = existedInstance + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().CreateCluster(request) + + if err != nil { + errRet = err + return + } + + id = *response.Response.ClusterId + return +} + +func (me *TkeService) CreateClusterInstances(ctx context.Context, + id string, runInstancePara string, + iAdvanced tke.InstanceAdvancedSettings) (instanceIds []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewCreateClusterInstancesRequest() + + defer 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.ClusterId = &id + request.RunInstancePara = &runInstancePara + + request.InstanceAdvancedSettings = &iAdvanced + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().CreateClusterInstances(request) + + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("CreateClusterInstances return nil response") + return + } + + instanceIds = make([]string, 0, len(response.Response.InstanceIdSet)) + + for _, v := range response.Response.InstanceIdSet { + + instanceIds = append(instanceIds, *v) + } + return +} + +func (me *TkeService) CheckOneOfClusterNodeReady(ctx context.Context, clusterId string, mustHaveWorkers bool) error { + return resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { + _, workers, err := me.DescribeClusterInstances(ctx, clusterId) + if err != nil { + return tccommon.RetryError(err) + } + + // check serverless node + virtualNodes, err := me.DescribeClusterVirtualNode(ctx, clusterId) + if err != nil { + return tccommon.RetryError(err) + } + + if len(workers) == 0 && len(virtualNodes) == 0 { + if mustHaveWorkers { + return resource.RetryableError(fmt.Errorf("waiting for workers created")) + } + return nil + } + + for i := range workers { + worker := workers[i] + if worker.InstanceState == "running" { + return nil + } + } + for i := range virtualNodes { + virtualNode := virtualNodes[i] + if virtualNode.Phase != nil && *virtualNode.Phase == "Running" { + return nil + } + } + + return resource.RetryableError(fmt.Errorf("cluster %s waiting for one of the workers ready", clusterId)) + }) +} + +/* +if cluster is creating, return error:TencentCloudSDKError] Code=tccommon.InternalError.ClusterState +*/ +func (me *TkeService) DeleteClusterInstances(ctx context.Context, id string, instanceIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteClusterInstancesRequest() + + defer 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.ClusterId = &id + request.InstanceIds = make([]*string, 0, len(instanceIds)) + + for index := range instanceIds { + request.InstanceIds = append(request.InstanceIds, &instanceIds[index]) + } + + request.InstanceDeleteMode = helper.String("terminate") + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().DeleteClusterInstances(request) + return err +} + +func (me *TkeService) DeleteCluster(ctx context.Context, id string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteClusterRequest() + + defer 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.ClusterId = &id + request.InstanceDeleteMode = helper.String("terminate") + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().DeleteCluster(request) + + return err +} + +func (me *TkeService) DescribeClusterSecurity(ctx context.Context, id string) (ret *tke.DescribeClusterSecurityResponse, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterSecurityRequest() + + defer 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.ClusterId = &id + + return me.client.UseTkeClient().DescribeClusterSecurity(request) +} + +func (me *TkeService) CreateClusterAsGroup(ctx context.Context, id, groupPara, configPara string, labels []*tke.Label, iAdvanced InstanceAdvancedSettings) (asGroupId string, errRet error) { + return "", fmt.Errorf("Cluster AS Group has OFFLINE") +} + +func (me *TkeService) DescribeClusterAsGroupsByGroupId(ctx context.Context, id string, groupId string) (clusterAsGroupSet *tke.ClusterAsGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterAsGroupsRequest() + + request.ClusterId = &id + request.AutoScalingGroupIds = []*string{&groupId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterAsGroups(request) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), err.Error()) + errRet = err + return + } + + if len(response.Response.ClusterAsGroupSet) > 0 { + clusterAsGroupSet = response.Response.ClusterAsGroupSet[0] + } + return +} + +func (me *TkeService) DeleteClusterAsGroups(ctx context.Context, id, asGroupId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteClusterAsGroupsRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.AutoScalingGroupIds = []*string{&asGroupId} + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().DeleteClusterAsGroups(request) + if err != nil { + errRet = err + } + return +} + +/* +open internet access +*/ +func (me *TkeService) CreateClusterEndpoint(ctx context.Context, id string, subnetId, securityGroupId string, internet bool, domain string, extensiveParameters string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewCreateClusterEndpointRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + + request.IsExtranet = &internet + + if subnetId != "" { + request.SubnetId = &subnetId + } + + if securityGroupId != "" && internet { + request.SecurityGroup = &securityGroupId + } + + if domain != "" { + request.Domain = helper.String(domain) + } + + if extensiveParameters != "" { + request.ExtensiveParameters = helper.String(extensiveParameters) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().CreateClusterEndpoint(request) + if err != nil { + errRet = err + } + return +} + +func (me *TkeService) DescribeClusterEndpointStatus(ctx context.Context, id string, isExtranet bool) (status string, message string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeClusterEndpointStatusRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.IsExtranet = &isExtranet + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeClusterEndpointStatus(request) + if err != nil { + errRet = err + return + } + if response.Response == nil || response.Response.Status == nil { + errRet = fmt.Errorf("sdk DescribeClusterEndpointStatus return empty status") + return + } + status = *response.Response.Status + message = status + return +} +func (me *TkeService) DescribeClusterEndpoints(ctx context.Context, id string) (response tke.DescribeClusterEndpointsResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeClusterEndpointsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + ratelimit.Check(request.GetAction()) + + resp, err := me.client.UseTkeClient().DescribeClusterEndpoints(request) + if err != nil { + errRet = err + return + } + if resp.Response == nil { + errRet = fmt.Errorf("sdk DescribeClusterEndpoints return empty") + return + } + + return *resp.Response, errRet +} + +func (me *TkeService) DeleteClusterEndpoint(ctx context.Context, id string, isInternet bool) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteClusterEndpointRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.IsExtranet = &isInternet + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().DeleteClusterEndpoint(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterEndpointSP(ctx context.Context, id string, securityPolicies []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyClusterEndpointSPRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.SecurityPolicies = helper.Strings(securityPolicies) + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterEndpointSG(ctx context.Context, id string, securityGroup string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyClusterEndpointSPRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.SecurityGroup = &securityGroup + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().ModifyClusterEndpointSP(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterAttribute(ctx context.Context, id string, projectId int64, clusterName, clusterDesc, clusterLevel string, autoUpgradeClusterLevel bool) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyClusterAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.ProjectId = &projectId + request.ClusterName = &clusterName + request.ClusterDesc = &clusterDesc + + if clusterLevel != "" { + request.ClusterLevel = &clusterLevel + } + + request.AutoUpgradeClusterLevel = &tke.AutoUpgradeClusterLevel{ + IsAutoUpgrade: &autoUpgradeClusterLevel, + } + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().ModifyClusterAttribute(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) EnableVpcCniNetworkType(ctx context.Context, id string, vpcCniType string, enableStaticIp bool, subnets []string, expiredSeconds uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewEnableVpcCniNetworkTypeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + request.ClusterId = &id + request.VpcCniType = &vpcCniType + request.EnableStaticIp = &enableStaticIp + request.Subnets = common.StringPtrs(subnets) + request.ExpiredSeconds = &expiredSeconds + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().EnableVpcCniNetworkType(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) DescribeEnableVpcCniProgress(ctx context.Context, id string) (status, message string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeEnableVpcCniProgressRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeEnableVpcCniProgress(request) + if err != nil { + errRet = err + return + } + + status = *response.Response.Status + message = *response.Response.ErrorMessage + return +} + +func (me *TkeService) DisableVpcCniNetworkType(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDisableVpcCniNetworkTypeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().DisableVpcCniNetworkType(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) AddVpcCniSubnets(ctx context.Context, id string, subnets []string, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewAddVpcCniSubnetsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.SubnetIds = common.StringPtrs(subnets) + request.VpcId = &vpcId + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().AddVpcCniSubnets(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterVersion(ctx context.Context, id string, clusterVersion string, extraArgs interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewUpdateClusterVersionRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + if extraArgs != nil && len(extraArgs.([]interface{})) > 0 { + // the first elem is in use + extraInterface := extraArgs.([]interface{}) + extraMap := extraInterface[0].(map[string]interface{}) + + kas := make([]*string, 0) + if kaArgs, exist := extraMap["kube_apiserver"]; exist { + args := kaArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kas = append(kas, &str) + } + } + kcms := make([]*string, 0) + if kcmArgs, exist := extraMap["kube_controller_manager"]; exist { + args := kcmArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kcms = append(kcms, &str) + } + } + kss := make([]*string, 0) + if ksArgs, exist := extraMap["kube_scheduler"]; exist { + args := ksArgs.([]interface{}) + for index := range args { + str := args[index].(string) + kss = append(kss, &str) + } + } + + request.ExtraArgs = &tke.ClusterExtraArgs{ + KubeAPIServer: kas, + KubeControllerManager: kcms, + KubeScheduler: kss, + } + } + + request.ClusterId = &id + request.DstVersion = &clusterVersion + + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().UpdateClusterVersion(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) DescribeKubernetesAvailableClusterVersionsByFilter(ctx context.Context, param map[string]interface{}) (availableClusterVersions *tke.DescribeAvailableClusterVersionResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tke.NewDescribeAvailableClusterVersionRequest() + ) + + defer 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 == "cluster_id" { + request.ClusterId = v.(*string) + } + if k == "cluster_ids" { + request.ClusterIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil { + availableClusterVersions = response.Response + } + return +} + +func (me *TkeService) CheckClusterVersion(ctx context.Context, id string, clusterVersion string) (isOk bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeAvailableClusterVersionRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + ratelimit.Check(request.GetAction()) + + resp, err := me.client.UseTkeClient().DescribeAvailableClusterVersion(request) + if err != nil { + errRet = err + return + } + + if resp == nil || resp.Response == nil || resp.Response.Versions == nil { + return + } + versions := resp.Response.Versions + for _, v := range versions { + if *v == clusterVersion { + isOk = true + return + } + } + + return +} + +func (me *TkeService) CheckInstancesUpgradeAble(ctx context.Context, id string, upgradeType string) (instanceIds []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewCheckInstancesUpgradeAbleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.UpgradeType = &upgradeType + ratelimit.Check(request.GetAction()) + + resp, err := me.client.UseTkeClient().CheckInstancesUpgradeAble(request) + if err != nil { + errRet = err + return + } + + if resp == nil || resp.Response == nil || resp.Response.UpgradeAbleInstances == nil { + return + } + for _, inst := range resp.Response.UpgradeAbleInstances { + instanceIds = append(instanceIds, *inst.InstanceId) + } + + return +} + +func (me *TkeService) UpgradeClusterInstances(ctx context.Context, id string, upgradeType string, instanceIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewUpgradeClusterInstancesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + op := "create" + request.Operation = &op + request.ClusterId = &id + request.UpgradeType = &upgradeType + request.InstanceIds = helper.Strings(instanceIds) + ratelimit.Check(request.GetAction()) + + _, err := me.client.UseTkeClient().UpgradeClusterInstances(request) + if err != nil { + errRet = err + return + } + + return +} + +func (me *TkeService) DescribeImages(ctx context.Context) (imageIds []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeImagesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeImages(request) + if err != nil { + errRet = err + return + } + + for _, image := range response.Response.ImageInstanceSet { + imageIds = append(imageIds, *image.ImageId) + } + return +} + +func GetTkeLabels(d *schema.ResourceData, k string) []*tke.Label { + labels := make([]*tke.Label, 0) + if raw, ok := d.GetOk(k); ok { + for k, v := range raw.(map[string]interface{}) { + labels = append(labels, &tke.Label{Name: helper.String(k), Value: helper.String(v.(string))}) + } + } + return labels +} + +func GetTkeTaints(d *schema.ResourceData, k string) []*tke.Taint { + taints := make([]*tke.Taint, 0) + if raw, ok := d.GetOk(k); ok { + for _, v := range raw.([]interface{}) { + vv := v.(map[string]interface{}) + taints = append(taints, &tke.Taint{Key: helper.String(vv["key"].(string)), Value: helper.String(vv["value"].(string)), Effect: helper.String(vv["effect"].(string))}) + } + } + return taints +} + +func (me *TkeService) ModifyClusterAsGroupAttribute(ctx context.Context, id, asGroupId string, maxSize, minSize int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyClusterAsGroupAttributeRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.ClusterAsGroupAttribute = &tke.ClusterAsGroupAttribute{ + AutoScalingGroupId: &asGroupId, + AutoScalingGroupRange: &tke.AutoScalingGroupRange{ + MaxSize: &maxSize, + MinSize: &minSize, + }, + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().ModifyClusterAsGroupAttribute(request) + if err != nil { + errRet = err + } + return +} + +func (me *TkeService) CreateClusterNodePool(ctx context.Context, clusterId, name, groupPara, configPara string, enableAutoScale bool, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, iAdvanced tke.InstanceAdvancedSettings, deletionProtection bool) (asGroupId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewCreateClusterNodePoolRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &clusterId + request.Name = &name + request.AutoScalingGroupPara = &groupPara + request.LaunchConfigurePara = &configPara + request.InstanceAdvancedSettings = &iAdvanced + request.EnableAutoscale = &enableAutoScale + request.DeletionProtection = &deletionProtection + request.NodePoolOs = &nodeOs + if nodeOsType != "" { + request.OsCustomizeType = &nodeOsType + } + + if len(labels) > 0 { + request.Labels = labels + } + + if len(taints) > 0 { + request.Taints = taints + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().CreateClusterNodePool(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.NodePoolId == nil { + errRet = fmt.Errorf("CreateClusterNodePool return nil response") + return + } + + asGroupId = *response.Response.NodePoolId + return +} + +func (me *TkeService) ModifyClusterNodePool(ctx context.Context, clusterId, nodePoolId string, name string, enableAutoScale bool, minSize int64, maxSize int64, nodeOs string, nodeOsType string, labels []*tke.Label, taints []*tke.Taint, tags map[string]string, deletionProtection bool) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyClusterNodePoolRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &clusterId + request.NodePoolId = &nodePoolId + request.Taints = taints + request.Labels = labels + request.EnableAutoscale = &enableAutoScale + request.DeletionProtection = &deletionProtection + request.MaxNodesNum = &maxSize + request.MinNodesNum = &minSize + request.Name = &name + request.OsName = &nodeOs + request.OsCustomizeType = &nodeOsType + + if len(labels) > 0 { + request.Labels = labels + } + + if len(tags) > 0 { + for k, v := range tags { + key := k + val := v + request.Tags = append(request.Tags, &tke.Tag{ + Key: &key, + Value: &val, + }) + } + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().ModifyClusterNodePool(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterNodePoolDesiredCapacity(ctx context.Context, clusterId, nodePoolId string, desiredCapacity int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyNodePoolDesiredCapacityAboutAsgRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &clusterId + request.NodePoolId = &nodePoolId + request.DesiredCapacity = &desiredCapacity + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().ModifyNodePoolDesiredCapacityAboutAsg(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) ModifyClusterNodePoolInstanceTypes(ctx context.Context, clusterId, nodePoolId string, instanceTypes []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewModifyNodePoolInstanceTypesRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &clusterId + request.NodePoolId = &nodePoolId + request.InstanceTypes = instanceTypes + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().ModifyNodePoolInstanceTypes(request) + if err != nil { + errRet = err + return + } + return +} + +func (me *TkeService) DeleteClusterNodePool(ctx context.Context, id, nodePoolId string, deleteKeepInstance bool) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteClusterNodePoolRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + request.ClusterId = &id + request.NodePoolIds = []*string{&nodePoolId} + request.KeepInstance = &deleteKeepInstance + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().DeleteClusterNodePool(request) + if err != nil { + errRet = err + } + return +} + +func (me *TkeService) DescribeNodePool(ctx context.Context, clusterId string, nodePoolId string) ( + nodePool *tke.NodePool, + has bool, + errRet error, +) { + + logId := tccommon.GetLogId(ctx) + //the error code of cluster not exist is tccommon.InternalError + //check cluster exist first + _, clusterHas, err := me.DescribeCluster(ctx, clusterId) + if err != nil { + errRet = err + return + } + if !clusterHas { + return + } + + request := tke.NewDescribeClusterNodePoolDetailRequest() + + defer 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.ClusterId = helper.String(clusterId) + request.NodePoolId = helper.String(nodePoolId) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterNodePoolDetail(request) + + if err != nil { + errRet = err + return + } + + if response.Response.NodePool == nil { + return + } + + has = true + nodePool = response.Response.NodePool + + return +} + +// node pool global config +func (me *TkeService) ModifyClusterNodePoolGlobalConfig(ctx context.Context, request *tke.ModifyClusterAsGroupOptionAttributeRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().ModifyClusterAsGroupOptionAttribute(request) + if err != nil { + errRet = err + } + return +} + +func (me *TkeService) DescribeClusterNodePoolGlobalConfig(ctx context.Context, clusterId string) ( + npGlobalConfig *tke.ClusterAsGroupOption, + errRet error, +) { + + logId := tccommon.GetLogId(ctx) + //the error code of cluster not exist is tccommon.InternalError + //check cluster exist first + _, clusterHas, err := me.DescribeCluster(ctx, clusterId) + if err != nil { + errRet = err + return + } + if !clusterHas { + return + } + + request := tke.NewDescribeClusterAsGroupOptionRequest() + + defer 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.ClusterId = helper.String(clusterId) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterAsGroupOption(request) + + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.ClusterAsGroupOption == nil { + return + } + + npGlobalConfig = response.Response.ClusterAsGroupOption + + return +} + +func (me *TkeService) WaitForAuthenticationOptionsUpdateSuccess(ctx context.Context, id string) (info *tke.ServiceAccountAuthenticationOptions, oidc *tke.OIDCConfigAuthenticationOptions, errRet error) { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + options, state, config, err := me.DescribeClusterAuthenticationOptions(ctx, id) + info = options + oidc = config + + if err != nil { + return resource.NonRetryableError(err) + } + + if state == "Success" { + return nil + } + + if state == "Updating" { + return resource.RetryableError(fmt.Errorf("state is %s, retry", state)) + } + + return resource.NonRetryableError(fmt.Errorf("update failed: %s", state)) + }) + + if err != nil { + errRet = err + return + } + return +} + +// DescribeClusterAuthenticationOptions +// Field `ServiceAccounts.AutoCreateDiscoveryAnonymousAuth` will always return null by design +func (me *TkeService) DescribeClusterAuthenticationOptions(ctx context.Context, id string) (options *tke.ServiceAccountAuthenticationOptions, state string, oidcConfig *tke.OIDCConfigAuthenticationOptions, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterAuthenticationOptionsRequest() + request.ClusterId = helper.String(id) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + res, err := me.client.UseTkeClient().DescribeClusterAuthenticationOptions(request) + if err != nil { + errRet = err + } + + if res.Response != nil { + state = *res.Response.LatestOperationState + options = res.Response.ServiceAccounts + oidcConfig = res.Response.OIDCConfig + } + + return +} + +func (me *TkeService) ModifyClusterAuthenticationOptions(ctx context.Context, request *tke.ModifyClusterAuthenticationOptionsRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", logId, request.GetAction(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().ModifyClusterAuthenticationOptions(request) + if err != nil { + errRet = 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 *TkeService) ModifyDeletionProtection(ctx context.Context, id string, enable bool) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + action string + ) + + if enable { + request := tke.NewEnableClusterDeletionProtectionRequest() + request.ClusterId = &id + action = request.GetAction() + ratelimit.Check(action) + response, err := me.client.UseTkeClient().EnableClusterDeletionProtection(request) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + request := tke.NewDisableClusterDeletionProtectionRequest() + request.ClusterId = &id + action = request.GetAction() + ratelimit.Check(action) + response, err := me.client.UseTkeClient().DisableClusterDeletionProtection(request) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", + logId, action, errRet.Error()) + } + }() + + return +} + +func (me *TkeService) AcquireClusterAdminRole(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewAcquireClusterAdminRoleRequest() + defer 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.ClusterId = &clusterId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().AcquireClusterAdminRole(request) + + if err != nil { + 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 *TkeService) DescribeExternalNodeSupportConfig(ctx context.Context, clusterId string) (resp *tke.DescribeExternalNodeSupportConfigResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeExternalNodeSupportConfigRequest() + defer 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.ClusterId = &clusterId + + ratelimit.Check(request.GetAction()) + res, err := me.client.UseTkeClient().DescribeExternalNodeSupportConfig(request) + + if err != nil { + errRet = err + return + } + if res == nil || res.Response == nil && res.Response.RequestId == nil { + return nil, errors.New("invalid response") + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) + + return res.Response, nil +} + +func (me *TkeService) DescribeClusterExtraArgs(ctx context.Context, clusterId string) (extraArgs *tke.ClusterExtraArgs, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeClusterExtraArgsRequest() + defer 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.ClusterId = &clusterId + + ratelimit.Check(request.GetAction()) + res, err := me.client.UseTkeClient().DescribeClusterExtraArgs(request) + + if err != nil { + errRet = err + return + } + if res == nil || res.Response == nil && res.Response.RequestId == nil { + return nil, errors.New("invalid response") + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) + + return res.Response.ClusterExtraArgs, nil +} + +func (me *TkeService) DescribeIPAMD(ctx context.Context, clusterId string) (resp *tke.DescribeIPAMDResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeIPAMDRequest() + defer 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.ClusterId = &clusterId + + ratelimit.Check(request.GetAction()) + res, err := me.client.UseTkeClient().DescribeIPAMD(request) + + if err != nil { + errRet = err + return + } + if res == nil || res.Response == nil && res.Response.RequestId == nil { + return nil, errors.New("invalid response") + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) + + return res.Response, nil + +} + +func (me *TkeService) DescribeLogSwitches(ctx context.Context, clusterId string) (resp []*tke.Switch, errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDescribeLogSwitchesRequest() + defer 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.ClusterIds = helper.StringsStringsPoint([]string{clusterId}) + request.ClusterType = helper.String("tke") + ratelimit.Check(request.GetAction()) + res, err := me.client.UseTkeClient().DescribeLogSwitches(request) + + if err != nil { + errRet = err + return + } + if res == nil || res.Response == nil && res.Response.RequestId == nil { + return nil, errors.New("invalid response") + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), res.ToJsonString()) + + return res.Response.SwitchSet, nil +} + +func (me *TkeService) SwitchLogAgent(ctx context.Context, clusterId, rootDir string, enable bool) error { + if enable { + request := tke.NewInstallLogAgentRequest() + request.ClusterId = &clusterId + if rootDir != "" { + request.KubeletRootDir = &rootDir + } + return me.InstallLogAgent(ctx, request) + } + request := tke.NewUninstallLogAgentRequest() + request.ClusterId = &clusterId + return me.UninstallLogAgent(ctx, request) +} + +func (me *TkeService) SwitchEventPersistence(ctx context.Context, clusterId, logSetId, topicId string, + enable, deleteEventLog bool) error { + if enable { + request := tke.NewEnableEventPersistenceRequest() + request.ClusterId = &clusterId + if logSetId != "" { + request.LogsetId = &logSetId + } + if topicId != "" { + request.TopicId = &topicId + } + return me.EnableEventPersistence(ctx, request) + } + + request := tke.NewDisableEventPersistenceRequest() + request.ClusterId = &clusterId + request.DeleteLogSetAndTopic = &deleteEventLog + return me.DisableEventPersistence(ctx, request) +} + +func (me *TkeService) SwitchClusterAudit(ctx context.Context, clusterId, logSetId, topicId string, + enable, deleteAuditLog bool) error { + if enable { + request := tke.NewEnableClusterAuditRequest() + request.ClusterId = &clusterId + if logSetId != "" { + request.LogsetId = &logSetId + } + if topicId != "" { + request.TopicId = &topicId + } + return me.EnableClusterAudit(ctx, request) + } + request := tke.NewDisableClusterAuditRequest() + request.ClusterId = &clusterId + request.DeleteLogSetAndTopic = &deleteAuditLog + return me.DisableClusterAudit(ctx, request) +} + +func (me *TkeService) InstallLogAgent(ctx context.Context, request *tke.InstallLogAgentRequest) (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.UseTkeClient().InstallLogAgent(request) + + if err != nil { + 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 *TkeService) UninstallLogAgent(ctx context.Context, request *tke.UninstallLogAgentRequest) (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.UseTkeClient().UninstallLogAgent(request) + + if err != nil { + 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 *TkeService) EnableEventPersistence(ctx context.Context, request *tke.EnableEventPersistenceRequest) (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.UseTkeClient().EnableEventPersistence(request) + + if err != nil { + 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 *TkeService) DisableEventPersistence(ctx context.Context, request *tke.DisableEventPersistenceRequest) (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.UseTkeClient().DisableEventPersistence(request) + + if err != nil { + code := err.(*sdkErrors.TencentCloudSDKError).Code + if code == "InternalError.KubernetesDeleteOperationError" { + 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 *TkeService) EnableClusterAudit(ctx context.Context, request *tke.EnableClusterAuditRequest) (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.UseTkeClient().EnableClusterAudit(request) + + if err != nil { + 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 *TkeService) DisableClusterAudit(ctx context.Context, request *tke.DisableClusterAuditRequest) (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.UseTkeClient().DisableClusterAudit(request) + + if err != nil { + 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 *TkeService) DescribeServerlessNodePoolByClusterIdAndNodePoolId(ctx context.Context, clusterId, nodePoolId string) (instance *tke.VirtualNodePool, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeClusterVirtualNodePoolsRequest() + request.ClusterId = common.StringPtr(clusterId) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterVirtualNodePools(request) + + if err != nil { + errRet = err + 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 && len(response.Response.NodePoolSet) > 0 { + for _, nodePool := range response.Response.NodePoolSet { + if nodePool != nil && nodePool.NodePoolId != nil && *nodePool.NodePoolId == nodePoolId { + has = true + instance = nodePool + } + } + } + return +} + +func (me *TkeService) CreateClusterVirtualNodePool(ctx context.Context, request *tke.CreateClusterVirtualNodePoolRequest) (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.UseTkeClient().CreateClusterVirtualNodePool(request) + + if err != nil { + errRet = err + return + } + + 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.NodePoolId != nil { + id = *response.Response.NodePoolId + } + + return +} + +func (me *TkeService) DeleteClusterVirtualNodePool(ctx context.Context, request *tke.DeleteClusterVirtualNodePoolRequest) (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.UseTkeClient().DeleteClusterVirtualNodePool(request) + + if err != nil { + 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 *TkeService) ModifyClusterVirtualNodePool(ctx context.Context, request *tke.ModifyClusterVirtualNodePoolRequest) (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.UseTkeClient().ModifyClusterVirtualNodePool(request) + + if err != nil { + 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 *TkeService) DescribeClusterVirtualNode(ctx context.Context, clusterId string) (virtualNodes []tke.VirtualNode, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeClusterVirtualNodeRequest() + request.ClusterId = common.StringPtr(clusterId) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeClusterVirtualNode(request) + + if err != nil { + errRet = err + 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 && len(response.Response.Nodes) > 0 { + for _, node := range response.Response.Nodes { + if node != nil { + virtualNodes = append(virtualNodes, *node) + } + } + } + return +} + +func ModifySecurityServiceOfCvmInNodePool(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, cvmSvc *svccvm.CvmService, client *connectivity.TencentCloudClient, clusterId string, nodePoolId string) error { + logId := tccommon.GetLogId(ctx) + + if d.HasChange("auto_scaling_config.0.enhanced_security_service") { + workersInsIdOfNodePool := make([]string, 0) + _, workers, err := tkeSvc.DescribeClusterInstances(ctx, clusterId) + if err != nil { + return err + } + for _, worker := range workers { + if worker.NodePoolId != "" && worker.NodePoolId == nodePoolId { + workersInsIdOfNodePool = append(workersInsIdOfNodePool, worker.InstanceId) + } + } + + const BatchProcessedInsLimit = 100 // limit 100 items to change each request + var ( + launchConfigRaw []interface{} + dMap map[string]interface{} + ) + if raw, ok := d.GetOk("auto_scaling_config"); ok { + launchConfigRaw = raw.([]interface{}) + dMap = launchConfigRaw[0].(map[string]interface{}) + } + + if v, ok := dMap["enhanced_security_service"]; ok && !v.(bool) { + // uninstall, cwp/DeleteMachine, need uuid + // https://cloud.tencent.com/document/product/296/19844 + for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { + var reqInstanceIds []string + if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { + reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] + } else { + reqInstanceIds = workersInsIdOfNodePool[i:] + } + // get uuid + instanceSet, err := cvmSvc.DescribeInstanceSetByIds(ctx, helper.StrListValToStr(reqInstanceIds)) + if err != nil { + return err + } + // call cwp/DeleteMachine + for _, ins := range instanceSet { + requestDeleteMachine := cwp.NewDeleteMachineRequest() + requestDeleteMachine.Uuid = ins.Uuid + if _, err := client.UseCwpClient().DeleteMachine(requestDeleteMachine); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, requestDeleteMachine.GetAction(), requestDeleteMachine.ToJsonString(), err.Error()) + return err + } + } + } + } else { + // default is true, install security agent + // tat/InvokeCommand, CommandId=cmd-d8jj2skv, instanceId is enough + // https://cloud.tencent.com/document/product/1340/52678 + for i := 0; i < len(workersInsIdOfNodePool); i += BatchProcessedInsLimit { + var reqInstanceIds []string + if i+BatchProcessedInsLimit <= len(workersInsIdOfNodePool) { + reqInstanceIds = workersInsIdOfNodePool[i : i+BatchProcessedInsLimit] + } else { + reqInstanceIds = workersInsIdOfNodePool[i:] + } + requestInvokeCommand := tat.NewInvokeCommandRequest() + requestInvokeCommand.InstanceIds = helper.StringsStringsPoint(reqInstanceIds) + requestInvokeCommand.CommandId = helper.String(InstallSecurityAgentCommandId) + requestInvokeCommand.Parameters = helper.String("{}") + requestInvokeCommand.Timeout = helper.Uint64(60) + _, err := client.UseTatClient().InvokeCommand(requestInvokeCommand) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, requestInvokeCommand.GetAction(), requestInvokeCommand.ToJsonString(), err.Error()) + return err + } + } + } + } + return nil +} + +func ModifyClusterInternetOrIntranetAccess(ctx context.Context, d *schema.ResourceData, tkeSvc *TkeService, + isInternet bool, enable bool, sg string, subnetId string, domain string) error { + + id := d.Id() + var accessType string + if isInternet { + accessType = "cluster internet" + } else { + accessType = "cluster intranet" + } + // open access + if enable { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr := tkeSvc.CreateClusterEndpoint(ctx, id, subnetId, sg, isInternet, domain, "") + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if err != nil { + return err + } + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if status == TkeInternetStatusCreating { + return resource.RetryableError( + fmt.Errorf("%s create %s endpoint status still is %s", id, accessType, status)) + } + if status == TkeInternetStatusNotfound || status == TkeInternetStatusCreated { + return nil + } + return resource.NonRetryableError( + fmt.Errorf("%s create %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) + }) + if err != nil { + return err + } + } else { // close access + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr := tkeSvc.DeleteClusterEndpoint(ctx, id, isInternet) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if err != nil { + return err + } + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + status, message, inErr := tkeSvc.DescribeClusterEndpointStatus(ctx, id, isInternet) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if status == TkeInternetStatusDeleting { + return resource.RetryableError( + fmt.Errorf("%s close %s endpoint status still is %s", id, accessType, status)) + } + if status == TkeInternetStatusNotfound || status == TkeInternetStatusDeleted || status == TkeInternetStatusCreated { + return nil + } + return resource.NonRetryableError( + fmt.Errorf("%s close %s endpoint error ,status is %s,message is %s", id, accessType, status, message)) + }) + if err != nil { + return err + } + } + return nil +} + +func (me *TkeService) createBackupStorageLocation(ctx context.Context, request *tke.CreateBackupStorageLocationRequest) (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.UseTkeClient().CreateBackupStorageLocation(request) + + if err != nil { + 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 *TkeService) DescribeBackupStorageLocations(ctx context.Context, names []string) (locations []*tke.BackupStorageLocation, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeBackupStorageLocationsRequest() + request.Names = common.StringPtrs(names) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTkeClient().DescribeBackupStorageLocations(request) + + if err != nil { + errRet = err + 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 && len(response.Response.BackupStorageLocationSet) > 0 { + locations = append(locations, response.Response.BackupStorageLocationSet...) + } + return + +} + +func (me *TkeService) DeleteBackupStorageLocation(ctx context.Context, name string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := tke.NewDeleteBackupStorageLocationRequest() + + defer 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.Name = common.StringPtr(name) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseTkeClient().DeleteBackupStorageLocation(request) + return err +} + +func (me *TkeService) DescribeTkeEncryptionProtectionById(ctx context.Context, clusterId string) (encryptionProtection *tke.DescribeEncryptionStatusResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeEncryptionStatusRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + encryptionProtection = response.Response + return +} + +func (me *TkeService) DeleteTkeEncryptionProtectionById(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDisableEncryptionProtectionRequest() + request.ClusterId = &clusterId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DisableEncryptionProtection(request) + if err != nil { + 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 *TkeService) TkeEncryptionProtectionStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeEncryptionStatusRequest() + request.ClusterId = helper.String(clusterId) + + var errRet error + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + object, err := me.client.UseTkeClient().DescribeEncryptionStatus(request) + + if err != nil { + return nil, "", err + } + + if err != nil { + errRet = err + return object, "", err + } + + return object, helper.PString(object.Response.Status), nil + } +} + +func (me *TkeService) DescribeKubernetesClusterInstancesByFilter(ctx context.Context, param map[string]interface{}) (clusterInstances []*tke.Instance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tke.NewDescribeClusterInstancesRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + if k == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + if k == "InstanceRole" { + request.InstanceRole = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*tke.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeClusterInstances(request) + if err != nil { + errRet = 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 + } + + clusterInstances = response.Response.InstanceSet + return +} + +func (me *TkeService) DescribeKubernetesClusterNodePoolsByFilter(ctx context.Context, param map[string]interface{}) (clusterNodePools []*tke.NodePool, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tke.NewDescribeClusterNodePoolsRequest() + ) + + defer 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 == "ClusterId" { + request.ClusterId = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*tke.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeClusterNodePools(request) + if err != nil { + errRet = 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.NodePoolSet) < 1 { + return + } + + clusterNodePools = response.Response.NodePoolSet + return +} diff --git a/tencentcloud/service_tencentcloud_tke_addons.go b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go similarity index 96% rename from tencentcloud/service_tencentcloud_tke_addons.go rename to tencentcloud/services/tke/service_tencentcloud_tke_addons.go index 42bf55d4a5..57e1d53056 100644 --- a/tencentcloud/service_tencentcloud_tke_addons.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go @@ -1,4 +1,4 @@ -package tencentcloud +package tke import ( "context" @@ -9,9 +9,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + 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" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type AppType string @@ -87,7 +89,7 @@ type AddonResponseData struct { } func (me *TkeService) GetTkeAppChartList(ctx context.Context, request *tke.GetTkeAppChartListRequest) (info []*tke.AppChart, 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", @@ -118,7 +120,7 @@ func (me *TkeService) DescribeExtensionAddonList(ctx context.Context, clusterId appList AppList ) - err = resource.Retry(readRetryTimeout*5, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { response, _, err = me.DescribeExtensionAddon(ctx, clusterId, "") if err != nil { return resource.NonRetryableError(err) @@ -144,7 +146,7 @@ func (me *TkeService) PollingAddonsPhase(ctx context.Context, clusterId, addonNa addonResponseData = &AddonResponseData{} } - err = resource.Retry(readRetryTimeout*5, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { response, has, err = me.DescribeExtensionAddon(ctx, clusterId, addonName) if err != nil { return resource.NonRetryableError(err) @@ -172,7 +174,7 @@ func (me *TkeService) PollingAddonsPhase(ctx context.Context, clusterId, addonNa } func (me *TkeService) ProcessExtensionAddons(ctx context.Context, request *tke.ForwardApplicationRequestV3Request) (response *tke.ForwardApplicationRequestV3Response, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", diff --git a/tencentcloud/data_source_tc_monitor_tmp_regions.go b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions.go similarity index 82% rename from tencentcloud/data_source_tc_monitor_tmp_regions.go rename to tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions.go index 13ccf09dfc..0c5bcd16c7 100644 --- a/tencentcloud/data_source_tc_monitor_tmp_regions.go +++ b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions.go @@ -1,15 +1,19 @@ -package tencentcloud +package tmp import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMonitorTmpRegions() *schema.Resource { +func DataSourceTencentCloudMonitorTmpRegions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMonitorTmpRegionsRead, Schema: map[string]*schema.Schema{ @@ -74,25 +78,25 @@ func dataSourceTencentCloudMonitorTmpRegions() *schema.Resource { } func dataSourceTencentCloudMonitorTmpRegionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_monitor_tmp_regions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_monitor_tmp_regions.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("pay_mode"); ok { paramMap["PayMode"] = helper.IntInt64(v.(int)) } - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var regionSet []*monitor.PrometheusRegionItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMonitorTmpRegionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } regionSet = result return nil @@ -146,7 +150,7 @@ func dataSourceTencentCloudMonitorTmpRegionsRead(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_monitor_tmp_regions_test.go b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions_test.go similarity index 84% rename from tencentcloud/data_source_tc_monitor_tmp_regions_test.go rename to tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions_test.go index b04d387139..faaa4eb87c 100644 --- a/tencentcloud/data_source_tc_monitor_tmp_regions_test.go +++ b/tencentcloud/services/tmp/data_source_tc_monitor_tmp_regions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tmp_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 TestAccTencentCloudMonitorTmpRegionsDataSource_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: testAccMonitorTmpRegionsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_tmp_regions.tmp_regions"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_monitor_tmp_regions.tmp_regions"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_regions.tmp_regions", "region_set.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_regions.tmp_regions", "region_set.0.area"), resource.TestCheckResourceAttrSet("data.tencentcloud_monitor_tmp_regions.tmp_regions", "region_set.0.region"), diff --git a/tencentcloud/resource_tc_monitor_tmp_alert_rule.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule.go similarity index 82% rename from tencentcloud/resource_tc_monitor_tmp_alert_rule.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule.go index 5de2e46e43..3debeb057d 100644 --- a/tencentcloud/resource_tc_monitor_tmp_alert_rule.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule.go @@ -1,6 +1,9 @@ -package tencentcloud +package tmp import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "context" "fmt" "log" @@ -10,10 +13,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpAlertRule() *schema.Resource { +func ResourceTencentCloudMonitorTmpAlertRule() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudMonitorTmpAlertRuleRead, Create: resourceTencentCloudMonitorTmpAlertRuleCreate, @@ -102,10 +106,10 @@ func resourceTencentCloudMonitorTmpAlertRule() *schema.Resource { } func resourceTencentCloudMonitorTmpAlertRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_alert_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_alert_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = monitor.NewCreateAlertRuleRequest() @@ -172,14 +176,14 @@ func resourceTencentCloudMonitorTmpAlertRuleCreate(d *schema.ResourceData, meta request.Type = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreateAlertRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateAlertRule(request) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains("FailedOperation", ee.Code) { + if ok && tccommon.IsContains("FailedOperation", ee.Code) { return resource.NonRetryableError(ee) } - return retryError(e) + return tccommon.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,21 +199,21 @@ func resourceTencentCloudMonitorTmpAlertRuleCreate(d *schema.ResourceData, meta ruleId := *response.Response.RuleId - d.SetId(strings.Join([]string{instanceId, ruleId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, ruleId}, tccommon.FILED_SP)) return resourceTencentCloudMonitorTmpAlertRuleRead(d, meta) } func resourceTencentCloudMonitorTmpAlertRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_alert_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_alert_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) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -278,14 +282,14 @@ func resourceTencentCloudMonitorTmpAlertRuleRead(d *schema.ResourceData, meta in } func resourceTencentCloudMonitorTmpAlertRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_alert_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_alert_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewUpdateAlertRuleRequest() - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -348,14 +352,14 @@ func resourceTencentCloudMonitorTmpAlertRuleUpdate(d *schema.ResourceData, meta request.Type = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().UpdateAlertRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateAlertRule(request) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains("FailedOperation", ee.Code) { + if ok && tccommon.IsContains("FailedOperation", ee.Code) { return resource.NonRetryableError(ee) } - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -371,14 +375,14 @@ func resourceTencentCloudMonitorTmpAlertRuleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudMonitorTmpAlertRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_alert_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_alert_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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - ids := strings.Split(d.Id(), FILED_SP) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } diff --git a/tencentcloud/resource_tc_monitor_tmp_alert_rule_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule_test.go similarity index 83% rename from tencentcloud/resource_tc_monitor_tmp_alert_rule_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule_test.go index 5502a39fa5..2b3ab8f774 100644 --- a/tencentcloud/resource_tc_monitor_tmp_alert_rule_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_alert_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_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" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudMonitorAlertRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAlertRuleDestroy, Steps: []resource.TestStep{ { @@ -60,9 +64,9 @@ func TestAccTencentCloudMonitorAlertRuleResource_basic(t *testing.T) { } func testAccCheckAlertRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_tke_alert_rule" { continue @@ -70,7 +74,7 @@ func testAccCheckAlertRuleDestroy(s *terraform.State) error { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } @@ -90,8 +94,8 @@ func testAccCheckAlertRuleDestroy(s *terraform.State) error { func testAccCheckAlertRuleExists(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 { @@ -100,12 +104,12 @@ func testAccCheckAlertRuleExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := service.DescribeMonitorTmpAlertRuleById(ctx, ids[0], ids[1]) if err != nil { return err @@ -121,7 +125,7 @@ func testAccCheckAlertRuleExists(r string) resource.TestCheckFunc { const testAlertRuleVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" } ` const testAlertRule_basic = testAlertRuleVar + ` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_cvm_agent.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_cvm_agent.go new file mode 100644 index 0000000000..efe1bd0585 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_cvm_agent.go @@ -0,0 +1,142 @@ +package tmp + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpCvmAgent() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorTmpCvmAgentRead, + Create: resourceTencentCloudMonitorTmpCvmAgentCreate, + //Update: resourceTencentCloudMonitorTmpCvmAgentUpdate, + Delete: resourceTencentCloudMonitorTmpCvmAgentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Instance id.", + }, + + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Agent name.", + }, + + "agent_id": { + Type: schema.TypeString, + Computed: true, + Description: "Agent id.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpCvmAgentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_cvm_agent.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreatePrometheusAgentRequest() + response *monitor.CreatePrometheusAgentResponse + ) + + var instanceId string + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(instanceId) + } + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusAgent(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 monitor tmpCvmAgent failed, reason:%+v", logId, err) + return err + } + + tmpCvmAgentId := *response.Response.AgentId + + d.SetId(strings.Join([]string{instanceId, tmpCvmAgentId}, tccommon.FILED_SP)) + return resourceTencentCloudMonitorTmpCvmAgentRead(d, meta) +} + +func resourceTencentCloudMonitorTmpCvmAgentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmpCvmAgent.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + tmpCvmAgent, err := service.DescribeMonitorTmpCvmAgent(ctx, ids[0], ids[1]) + + if err != nil { + return err + } + + if tmpCvmAgent == nil { + d.SetId("") + return fmt.Errorf("resource `tmpCvmAgent` %s does not exist", ids[1]) + } + + if tmpCvmAgent.InstanceId != nil { + _ = d.Set("instance_id", tmpCvmAgent.InstanceId) + } + + if tmpCvmAgent.Name != nil { + _ = d.Set("name", tmpCvmAgent.Name) + } + + if tmpCvmAgent.AgentId != nil { + _ = d.Set("agent_id", tmpCvmAgent.AgentId) + } + + return nil +} + +func resourceTencentCloudMonitorTmpCvmAgentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_cvm_agent.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration.go new file mode 100644 index 0000000000..80aa60c780 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration.go @@ -0,0 +1,274 @@ +package tmp + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strconv" + "strings" + + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpExporterIntegration() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorTmpExporterIntegrationRead, + Create: resourceTencentCloudMonitorTmpExporterIntegrationCreate, + Update: resourceTencentCloudMonitorTmpExporterIntegrationUpdate, + Delete: resourceTencentCloudMonitorTmpExporterIntegrationDelete, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance id.", + }, + + "kind": { + Type: schema.TypeString, + Required: true, + Description: "Type.", + }, + + "content": { + Type: schema.TypeString, + Required: true, + Description: "Integration config.", + }, + + "kube_type": { + Type: schema.TypeInt, + Required: true, + Description: "Integration config.", + }, + + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "Cluster ID.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpExporterIntegrationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + instanceId string + kubeType int + clusterId string + kind string + ) + + var ( + request = monitor.NewCreateExporterIntegrationRequest() + response *monitor.CreateExporterIntegrationResponse + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(instanceId) + } + + if v, ok := d.GetOk("kind"); ok { + kind = v.(string) + request.Kind = helper.String(v.(string)) + } + + if v, ok := d.GetOk("content"); ok { + request.Content = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kube_type"); ok { + kubeType = v.(int) + request.KubeType = helper.IntInt64(kubeType) + } + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + request.ClusterId = helper.String(clusterId) + } + + initStatus := tke.NewDescribePrometheusInstanceInitStatusRequest() + initStatus.InstanceId = request.InstanceId + err := resource.Retry(8*tccommon.ReadRetryTimeout, func() *resource.RetryError { + results, errRet := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().DescribePrometheusInstanceInitStatus(initStatus) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + status := results.Response.Status + if status == nil { + return resource.NonRetryableError(fmt.Errorf("prometheusInstanceInit status is nil, operate failed")) + } + if *status == "running" { + return nil + } + if *status == "uninitialized" { + iniRequest := tke.NewRunPrometheusInstanceRequest() + iniRequest.InstanceId = request.InstanceId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().RunPrometheusInstance(iniRequest) + 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 { + return resource.RetryableError(fmt.Errorf("prometheusInstanceInit error %v, operate failed", err)) + } + return resource.RetryableError(fmt.Errorf("prometheusInstance initializing, retry...")) + } + return resource.RetryableError(fmt.Errorf("prometheusInstanceInit status is %v, retry...", *status)) + }) + if err != nil { + return err + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateExporterIntegration(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 monitor tmpExporterIntegration failed, reason:%+v", logId, err) + return err + } + + tmpExporterIntegrationId := *response.Response.Names[0] + + d.SetId(strings.Join([]string{tmpExporterIntegrationId, instanceId, strconv.Itoa(kubeType), clusterId, kind}, tccommon.FILED_SP)) + + return resourceTencentCloudMonitorTmpExporterIntegrationRead(d, meta) +} + +func resourceTencentCloudMonitorTmpExporterIntegrationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmpExporterIntegration.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + tmpExporterIntegrationId := d.Id() + + tmpExporterIntegration, err := service.DescribeMonitorTmpExporterIntegration(ctx, tmpExporterIntegrationId) + + if err != nil { + return err + } + + if tmpExporterIntegration == nil { + d.SetId("") + return fmt.Errorf("resource `tmpExporterIntegration` %s does not exist", tmpExporterIntegrationId) + } + + if tmpExporterIntegration.Kind != nil { + _ = d.Set("kind", tmpExporterIntegration.Kind) + } + + if tmpExporterIntegration.Content != nil { + _ = d.Set("content", tmpExporterIntegration.Content) + } + + return nil +} + +func resourceTencentCloudMonitorTmpExporterIntegrationUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateExporterIntegrationRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kind"); ok { + request.Kind = helper.String(v.(string)) + } + + if v, ok := d.GetOk("content"); ok { + request.Content = helper.String(v.(string)) + } + + if v, ok := d.GetOk("kube_type"); ok { + request.KubeType = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateExporterIntegration(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 { + return err + } + + return resourceTencentCloudMonitorTmpExporterIntegrationRead(d, meta) +} + +func resourceTencentCloudMonitorTmpExporterIntegrationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_exporter_integration.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + tmpExporterIntegrationId := d.Id() + + if err := service.DeleteMonitorTmpExporterIntegrationById(ctx, tmpExporterIntegrationId); err != nil { + return err + } + + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + tmpExporterIntegration, errRet := service.DescribeMonitorTmpExporterIntegration(ctx, tmpExporterIntegrationId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if tmpExporterIntegration == nil { + return nil + } + return resource.RetryableError(fmt.Errorf("exporter integration status is %v, retry...", *tmpExporterIntegration.Status)) + }) + if err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_exporter_integration_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration_test.go similarity index 77% rename from tencentcloud/resource_tc_monitor_tmp_exporter_integration_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration_test.go index 817f4e8304..1c839ad596 100644 --- a/tencentcloud/resource_tc_monitor_tmp_exporter_integration_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_exporter_integration_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_test import ( "context" @@ -7,11 +7,15 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) -const defaultKind = "" +const DefaultKind = "" func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_monitor_tmp_exporter_integration @@ -21,15 +25,15 @@ func init() { }) } func testSweepExporterIntegration(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := MonitorService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcmonitor.NewMonitorService(client) - instanceId := defaultPrometheusId - clusterId := tkeClusterIdAgent - ids := strings.Join([]string{"", instanceId, strconv.Itoa(1), clusterId, defaultKind}, FILED_SP) + instanceId := tcacctest.DefaultPrometheusId + clusterId := tcacctest.TkeClusterIdAgent + ids := strings.Join([]string{"", instanceId, strconv.Itoa(1), clusterId, DefaultKind}, tccommon.FILED_SP) for { instances, err := service.DescribeMonitorTmpExporterIntegration(ctx, ids) @@ -41,7 +45,7 @@ func testSweepExporterIntegration(region string) error { break } - id := strings.Join([]string{*instances.Name, instanceId, strconv.Itoa(1), clusterId, defaultKind}, FILED_SP) + id := strings.Join([]string{*instances.Name, instanceId, strconv.Itoa(1), clusterId, DefaultKind}, tccommon.FILED_SP) err = service.DeleteMonitorTmpExporterIntegrationById(ctx, id) if err != nil { return err @@ -53,8 +57,8 @@ func testSweepExporterIntegration(region string) error { func TestAccTencentCloudMonitorExporterIntegration_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckExporterIntegrationDestroy, Steps: []resource.TestStep{ { @@ -80,9 +84,9 @@ func TestAccTencentCloudMonitorExporterIntegration_basic(t *testing.T) { } func testAccCheckExporterIntegrationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_exporter_integration" { continue @@ -106,8 +110,8 @@ func testAccCheckExporterIntegrationDestroy(s *terraform.State) error { func testAccCheckExporterIntegrationExists(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 { @@ -117,7 +121,7 @@ func testAccCheckExporterIntegrationExists(r string) resource.TestCheckFunc { return fmt.Errorf("resource id is not set") } - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) tmpExporterIntegration, err := service.DescribeMonitorTmpExporterIntegration(ctx, rs.Primary.ID) if err != nil { return err @@ -133,10 +137,10 @@ func testAccCheckExporterIntegrationExists(r string) resource.TestCheckFunc { const testExporterIntegrationVar = ` variable "prometheus_id" { - default = "` + clusterPrometheusId + `" + default = "` + tcacctest.ClusterPrometheusId + `" } variable "cluster_id" { - default = "` + tkeClusterIdAgent + `" + default = "` + tcacctest.TkeClusterIdAgent + `" } ` const testExporterIntegration_basic = testExporterIntegrationVar + ` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go new file mode 100644 index 0000000000..ca0a8d9715 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance.go @@ -0,0 +1,341 @@ +package tmp + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpInstance() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorTmpInstanceRead, + Create: resourceTencentCloudMonitorTmpInstanceCreate, + Update: resourceTencentCloudMonitorTmpInstanceUpdate, + Delete: resourceTencentCloudMonitorTmpInstanceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_name": { + Type: schema.TypeString, + Required: true, + Description: "Instance name.", + }, + + "vpc_id": { + Type: schema.TypeString, + Required: true, + Description: "Vpc Id.", + }, + + "subnet_id": { + Type: schema.TypeString, + Required: true, + Description: "Subnet Id.", + }, + + "data_retention_time": { + Type: schema.TypeInt, + Required: true, + Description: "Data retention time.", + }, + + "zone": { + Type: schema.TypeString, + Required: true, + Description: "Available zone.", + }, + + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + + "ipv4_address": { + Type: schema.TypeString, + Computed: true, + Description: "Instance IPv4 address.", + }, + + "remote_write": { + Type: schema.TypeString, + Computed: true, + Description: "Prometheus remote write address.", + }, + + "api_root_path": { + Type: schema.TypeString, + Computed: true, + Description: "Prometheus HTTP API root address.", + }, + + "proxy_address": { + Type: schema.TypeString, + Computed: true, + Description: "Proxy address.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreatePrometheusMultiTenantInstancePostPayModeRequest() + response *monitor.CreatePrometheusMultiTenantInstancePostPayModeResponse + ) + + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("vpc_id"); ok { + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("subnet_id"); ok { + request.SubnetId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("data_retention_time"); ok { + request.DataRetentionTime = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("zone"); ok { + request.Zone = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusMultiTenantInstancePostPayMode(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 monitor tmpInstance failed, reason:%+v", logId, err) + return err + } + + tmpInstanceId := *response.Response.InstanceId + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 2 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::monitor:%s:uin/:prom-instance/%s", region, tmpInstanceId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + d.SetId(tmpInstanceId) + return resourceTencentCloudMonitorTmpInstanceRead(d, meta) +} + +func resourceTencentCloudMonitorTmpInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmpInstance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + tmpInstanceId := d.Id() + + tmpInstance, err := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) + + if err != nil { + return err + } + + if tmpInstance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `tmpInstance` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if tmpInstance.InstanceName != nil { + _ = d.Set("instance_name", tmpInstance.InstanceName) + } + + if tmpInstance.VpcId != nil { + _ = d.Set("vpc_id", tmpInstance.VpcId) + } + + if tmpInstance.SubnetId != nil { + _ = d.Set("subnet_id", tmpInstance.SubnetId) + } + + if tmpInstance.DataRetentionTime != nil { + _ = d.Set("data_retention_time", tmpInstance.DataRetentionTime) + } + + if tmpInstance.Zone != nil { + _ = d.Set("zone", tmpInstance.Zone) + } + + if tmpInstance.IPv4Address != nil { + _ = d.Set("ipv4_address", tmpInstance.IPv4Address) + } + + if tmpInstance.RemoteWrite != nil { + _ = d.Set("remote_write", tmpInstance.RemoteWrite) + } + + if tmpInstance.ApiRootPath != nil { + _ = d.Set("api_root_path", tmpInstance.ApiRootPath) + } + + if tmpInstance.ProxyAddress != nil { + _ = d.Set("proxy_address", tmpInstance.ProxyAddress) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "monitor", "prom-instance", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudMonitorTmpInstanceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := monitor.NewModifyPrometheusInstanceAttributesRequest() + + request.InstanceId = helper.String(d.Id()) + + if v, ok := d.GetOk("instance_name"); ok { + request.InstanceName = helper.String(v.(string)) + } + + if d.HasChange("vpc_id") { + return fmt.Errorf("`vpc_id` do not support change now.") + } + + if d.HasChange("subnet_id") { + return fmt.Errorf("`subnet_id` do not support change now.") + } + + if d.HasChange("data_retention_time") { + if v, ok := d.GetOk("data_retention_time"); ok { + request.DataRetentionTime = helper.IntInt64(v.(int)) + } + } + + if d.HasChange("zone") { + return fmt.Errorf("`zone` do not support change now.") + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusInstanceAttributes(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 { + return err + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("monitor", "prom-instance", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudMonitorTmpInstanceRead(d, meta) +} + +func resourceTencentCloudMonitorTmpInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + tmpInstanceId := d.Id() + + if err := service.IsolateMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { + return err + } + + err := resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeMonitorTmpInstance(ctx, tmpInstanceId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if *instance.InstanceStatus == 6 { + return nil + } + if *instance.InstanceStatus == 3 { + return resource.NonRetryableError(fmt.Errorf("tmpInstance status is %v, operate failed.", *instance.InstanceStatus)) + } + return resource.RetryableError(fmt.Errorf("tmpInstance status is %v, retry...", *instance.InstanceStatus)) + }) + if err != nil { + return err + } + + if err := service.DeleteMonitorTmpInstanceById(ctx, tmpInstanceId); err != nil { + return err + } + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_instance_international_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_international_test.go similarity index 84% rename from tencentcloud/resource_tc_monitor_tmp_instance_international_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_international_test.go index 1454eb874e..d7ea610228 100644 --- a/tencentcloud/resource_tc_monitor_tmp_instance_international_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_international_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tmp_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudInternationalMonitorResource_tmpInstance(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: testAccCheckMonInstanceDestroy, Steps: []resource.TestStep{ { @@ -35,10 +37,10 @@ func TestAccTencentCloudInternationalMonitorResource_tmpInstance(t *testing.T) { const testInternationalInstanceVar = ` variable "vpc_id" { - default = "` + defaultInternationalGrafanaVpcId + `" + default = "` + tcacctest.DefaultInternationalGrafanaVpcId + `" } variable "subnet_id" { - default = "` + defaultInternationalGrafanaSubnetId + `" + default = "` + tcacctest.DefaultInternationalGrafanaSubnetId + `" } ` const testInternationalInstance_basic = testInternationalInstanceVar + ` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go new file mode 100644 index 0000000000..d6d8048632 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_instance_test.go @@ -0,0 +1,136 @@ +package tmp_test + +import ( + "context" + "fmt" + "strconv" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudMonitorInstance_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckMonInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testInstance_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "instance_name", "demo-test"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.basic", "data_retention_time", "30"), + ), + }, + { + Config: testInstance_update, + Check: resource.ComposeTestCheckFunc( + testAccCheckInstanceExists("tencentcloud_monitor_tmp_instance.update"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "instance_name", "demo-test-update"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_instance.update", "data_retention_time", "30"), + ), + }, + //{ + // ResourceName: "tencentcloud_monitor_tmp_instance.basic", + // ImportState: true, + // ImportStateVerify: true, + //}, + }, + }) +} + +func testAccCheckMonInstanceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_tmp_instance" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + instance, err := service.DescribeMonitorTmpInstance(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if instance != nil { + status := strconv.FormatInt(*instance.InstanceStatus, 10) + if strings.Contains("5,6,8,9", status) { + return nil + } + return fmt.Errorf("instance %s still exists: %v", rs.Primary.ID, *instance.InstanceStatus) + } + } + + return nil +} + +func testAccCheckInstanceExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + instance, err := service.DescribeMonitorTmpInstance(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if instance == nil || *instance.InstanceStatus != 2 { + return fmt.Errorf("instance %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testInstanceVar = tcacctest.DefaultAzVariable + ` +variable "vpc_id" { + default = "` + tcacctest.DefaultEMRVpcId + `" +} +variable "subnet_id" { + default = "` + tcacctest.DefaultEMRSubnetId + `" +} +` +const testInstance_basic = testInstanceVar + ` +resource "tencentcloud_monitor_tmp_instance" "basic" { + instance_name = "demo-test" + vpc_id = var.vpc_id + subnet_id = var.subnet_id + data_retention_time = 30 + zone = var.default_az + tags = { + "createdBy" = "terraform" + } +}` + +const testInstance_update = testInstanceVar + ` +resource "tencentcloud_monitor_tmp_instance" "update" { + instance_name = "demo-test-update" + vpc_id = var.vpc_id + subnet_id = var.subnet_id + data_retention_time = 30 + zone = var.default_az + tags = { + "createdBy" = "terraform" + } +}` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment.go new file mode 100644 index 0000000000..06011a2a62 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment.go @@ -0,0 +1,130 @@ +package tmp + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpManageGrafanaAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMonitorTmpManageGrafanaAttachmentCreate, + Read: resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead, + Delete: resourceTencentCloudMonitorTmpManageGrafanaAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Prometheus instance ID.", + }, + + "grafana_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Grafana instance ID.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpManageGrafanaAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewBindPrometheusManagedGrafanaRequest() + instanceId string + ) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("grafana_id"); ok { + request.GrafanaId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().BindPrometheusManagedGrafana(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 monitor manageGrafanaAttachment failed, reason:%+v", logId, err) + return err + } + + d.SetId(instanceId) + + return resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead(d, meta) +} + +func resourceTencentCloudMonitorTmpManageGrafanaAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + instanceId := d.Id() + + manageGrafanaAttachment, err := service.DescribeMonitorManageGrafanaAttachmentById(ctx, instanceId) + if err != nil { + return err + } + + if manageGrafanaAttachment == nil { + d.SetId("") + log.Printf("[WARN]%s resource `MonitorTmpManageGrafanaAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if manageGrafanaAttachment.InstanceId != nil { + _ = d.Set("instance_id", manageGrafanaAttachment.InstanceId) + } + + if manageGrafanaAttachment.GrafanaInstanceId != nil { + _ = d.Set("grafana_id", manageGrafanaAttachment.GrafanaInstanceId) + } + + return nil +} + +func resourceTencentCloudMonitorTmpManageGrafanaAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_manage_grafana_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + instanceId := d.Id() + + if err := service.DeleteMonitorManageGrafanaAttachmentById(ctx, instanceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment_test.go index 145edbd0ed..834300dce2 100644 --- a/tencentcloud/resource_tc_monitor_tmp_manage_grafana_attachment_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_manage_grafana_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tmp_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 TestAccTencentCloudMonitorTmpManageGrafanaAttachmentResource_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: testAccMonitorTmpManageGrafanaAttachment, @@ -34,10 +36,10 @@ func TestAccTencentCloudMonitorTmpManageGrafanaAttachmentResource_basic(t *testi const testManageGrafanaAttachmentVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" } variable "grafana_id" { - default = "` + defaultGrafanaInstanceId + `" + default = "` + tcacctest.DefaultGrafanaInstanceId + `" } ` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule.go new file mode 100644 index 0000000000..e7a3998633 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule.go @@ -0,0 +1,213 @@ +package tmp + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpRecordingRule() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorTmpRecordingRuleRead, + Create: resourceTencentCloudMonitorTmpRecordingRuleCreate, + Update: resourceTencentCloudMonitorTmpRecordingRuleUpdate, + Delete: resourceTencentCloudMonitorTmpRecordingRuleDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: "Recording rule name.", + }, + "group": { + Type: schema.TypeString, + Required: true, + Description: "Recording rule group.", + }, + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance id.", + }, + "rule_state": { + Type: schema.TypeInt, + Optional: true, + Description: "Rule state.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpRecordingRuleCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_recording_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = monitor.NewCreateRecordingRuleRequest() + response *monitor.CreateRecordingRuleResponse + ) + + var instanceId string + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + if v, ok := d.GetOk("group"); ok { + request.Group = helper.String(tccommon.StringToBase64(v.(string))) + } + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(instanceId) + } + if v, ok := d.GetOk("rule_state"); ok { + request.RuleState = helper.IntInt64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreateRecordingRule(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 monitor recordingRule failed, reason:%+v", logId, err) + return err + } + + recordingRuleId := *response.Response.RuleId + d.SetId(strings.Join([]string{instanceId, recordingRuleId}, tccommon.FILED_SP)) + + return resourceTencentCloudMonitorTmpRecordingRuleRead(d, meta) +} + +func resourceTencentCloudMonitorTmpRecordingRuleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tmp_monitor_recording_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + recordingRule, err := service.DescribeMonitorRecordingRuleById(ctx, ids[0], ids[1]) + + if err != nil { + return err + } + + if recordingRule == nil { + d.SetId("") + return fmt.Errorf("resource `recordingRule` %s does not exist", ids[1]) + } + + _ = d.Set("instance_id", ids[0]) + if recordingRule.Name != nil { + _ = d.Set("name", recordingRule.Name) + } + if recordingRule.Group != nil { + group, err := tccommon.Base64ToString(*recordingRule.Group) + if err != nil { + return fmt.Errorf("`recordingRule.Group` %s does not be decoded to yaml", *recordingRule.Group) + } + _ = d.Set("group", &group) + } + + if recordingRule.RuleState != nil { + _ = d.Set("rule_state", recordingRule.RuleState) + } + + return nil +} + +func resourceTencentCloudMonitorTmpRecordingRuleUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tmp_monitor_recording_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdateRecordingRuleRequest() + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + request.InstanceId = helper.String(ids[0]) + request.RuleId = helper.String(ids[1]) + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("group"); ok { + request.Group = helper.String(v.(string)) + } + + if d.HasChange("rule_state") { + if v, ok := d.GetOk("rule_state"); ok { + request.RuleState = helper.IntInt64(v.(int)) + } + } + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdateRecordingRule(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 { + return err + } + + return resourceTencentCloudMonitorTmpRecordingRuleRead(d, meta) +} + +func resourceTencentCloudMonitorTmpRecordingRuleDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_recording_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + if err := service.DeleteMonitorRecordingRule(ctx, ids[0], ids[1]); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_recording_rule_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_test.go similarity index 76% rename from tencentcloud/resource_tc_monitor_tmp_recording_rule_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_test.go index af36415a41..0c0c397fc8 100644 --- a/tencentcloud/resource_tc_monitor_tmp_recording_rule_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_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" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudMonitorRecordingRule_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckRecordingRuleDestroy, Steps: []resource.TestStep{ { @@ -43,9 +47,9 @@ func TestAccTencentCloudMonitorRecordingRule_basic(t *testing.T) { } func testAccCheckRecordingRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_recording_rule" { continue @@ -53,7 +57,7 @@ func testAccCheckRecordingRuleDestroy(s *terraform.State) error { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } @@ -73,8 +77,8 @@ func testAccCheckRecordingRuleDestroy(s *terraform.State) error { func testAccCheckRecordingRuleExists(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 { @@ -83,12 +87,12 @@ func testAccCheckRecordingRuleExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("resource id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := service.DescribeMonitorRecordingRuleById(ctx, ids[0], ids[1]) if err != nil { return err @@ -104,7 +108,7 @@ func testAccCheckRecordingRuleExists(r string) resource.TestCheckFunc { const testRecordingRuleVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" } ` const testRecordingRule_basic = testRecordingRuleVar + ` diff --git a/tencentcloud/resource_tc_monitor_tmp_recording_rule_testing_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_testing_test.go similarity index 90% rename from tencentcloud/resource_tc_monitor_tmp_recording_rule_testing_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_testing_test.go index 58b2484ffd..9c5ef3e704 100644 --- a/tencentcloud/resource_tc_monitor_tmp_recording_rule_testing_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_recording_rule_testing_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package tmp_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) const defaultTestingPrometheusId = "prom-3oq89zvg" @@ -11,8 +13,8 @@ const defaultTestingPrometheusId = "prom-3oq89zvg" func TestAccTencentCloudTestingMonitorRecordingRule_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckRecordingRuleDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job.go new file mode 100644 index 0000000000..5168e9dd29 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job.go @@ -0,0 +1,197 @@ +package tmp + +import ( + "context" + "fmt" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpScrapeJob() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudMonitorTmpScrapeJobRead, + Create: resourceTencentCloudMonitorTmpScrapeJobCreate, + Update: resourceTencentCloudMonitorTmpScrapeJobUpdate, + Delete: resourceTencentCloudMonitorTmpScrapeJobDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance id.", + }, + + "agent_id": { + Type: schema.TypeString, + Required: true, + Description: "Agent id.", + }, + + "config": { + Type: schema.TypeString, + Optional: true, + Description: "Job content.", + }, + }, + } +} + +func resourceTencentCloudMonitorTmpScrapeJobCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_scrape_job.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var instanceId string + var agentId string + + var ( + request = monitor.NewCreatePrometheusScrapeJobRequest() + response *monitor.CreatePrometheusScrapeJobResponse + ) + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(instanceId) + } + + if v, ok := d.GetOk("agent_id"); ok { + agentId = v.(string) + request.AgentId = helper.String(agentId) + } + + if v, ok := d.GetOk("config"); ok { + request.Config = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusScrapeJob(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 monitor tmpScrapeJob failed, reason:%+v", logId, err) + return err + } + + tmpScrapeJobId := *response.Response.JobId + + d.SetId(strings.Join([]string{tmpScrapeJobId, instanceId, agentId}, tccommon.FILED_SP)) + + return resourceTencentCloudMonitorTmpScrapeJobRead(d, meta) +} + +func resourceTencentCloudMonitorTmpScrapeJobRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmpScrapeJob.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + tmpScrapeJobId := d.Id() + + tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, tmpScrapeJobId) + + if err != nil { + return err + } + + if tmpScrapeJob == nil { + d.SetId("") + return fmt.Errorf("resource `tmpScrapeJob` %s does not exist", tmpScrapeJobId) + } + + _ = d.Set("instance_id", strings.Split(tmpScrapeJobId, tccommon.FILED_SP)[1]) + if tmpScrapeJob.AgentId != nil { + _ = d.Set("agent_id", tmpScrapeJob.AgentId) + } + + if tmpScrapeJob.Config != nil { + _ = d.Set("config", tmpScrapeJob.Config) + } + + return nil +} + +func resourceTencentCloudMonitorTmpScrapeJobUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_scrape_job.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewUpdatePrometheusScrapeJobRequest() + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + + request.JobId = &ids[0] + request.InstanceId = &ids[1] + request.AgentId = &ids[2] + + if d.HasChange("instance_id") { + return fmt.Errorf("`instance_id` do not support change now.") + } + + if d.HasChange("agent_id") { + return fmt.Errorf("`agent_id` do not support change now.") + } + + if d.HasChange("config") { + if v, ok := d.GetOk("config"); ok { + request.Config = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().UpdatePrometheusScrapeJob(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 { + return err + } + + return resourceTencentCloudMonitorTmpScrapeJobRead(d, meta) +} + +func resourceTencentCloudMonitorTmpScrapeJobDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_scrape_job.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + tmpScrapeJobId := d.Id() + + if err := service.DeleteMonitorTmpScrapeJobById(ctx, tmpScrapeJobId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job_test.go new file mode 100644 index 0000000000..8e39bfca57 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_scrape_job_test.go @@ -0,0 +1,128 @@ +package tmp_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudMonitorScrapeJob_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckScrapeJobDestroy, + Steps: []resource.TestStep{ + { + Config: testScrapeJob_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckScrapeJobExists("tencentcloud_monitor_tmp_scrape_job.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_scrape_job.basic", "config", "job_name: demo-config-test\nhonor_timestamps: true\nmetrics_path: /metrics\nscheme: https\n"), + ), + }, + { + Config: testScrapeJob_update, + Check: resource.ComposeTestCheckFunc( + testAccCheckScrapeJobExists("tencentcloud_monitor_tmp_scrape_job.update"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_scrape_job.update", "config", "job_name: demo-config-test-update\nhonor_timestamps: true\nmetrics_path: /metrics\nscheme: https\n"), + ), + }, + { + ResourceName: "tencentcloud_monitor_tmp_scrape_job.update", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckScrapeJobDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_tmp_scrape_job" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if tmpScrapeJob != nil { + return fmt.Errorf("scrape job %s still exists", rs.Primary.ID) + } + } + + return nil +} + +func testAccCheckScrapeJobExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + tmpScrapeJob, err := service.DescribeMonitorTmpScrapeJob(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if tmpScrapeJob == nil { + return fmt.Errorf("scrape job %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testScrapeJobVar = ` +variable "prometheus_id" { + default = "` + tcacctest.DefaultPrometheusId + `" +} +variable "agent_id" { + default = "` + tcacctest.DefaultAgentId + `" +} +` +const testScrapeJob_basic = testScrapeJobVar + ` +resource "tencentcloud_monitor_tmp_scrape_job" "basic" { + instance_id = var.prometheus_id + agent_id = var.agent_id + config = <<-EOT +job_name: demo-config-test +honor_timestamps: true +metrics_path: /metrics +scheme: https +EOT +}` + +const testScrapeJob_update = testScrapeJobVar + ` +resource "tencentcloud_monitor_tmp_scrape_job" "update" { + instance_id = var.prometheus_id + agent_id = var.agent_id + config = <<-EOT +job_name: demo-config-test-update +honor_timestamps: true +metrics_path: /metrics +scheme: https +EOT +}` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_alert_policy.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy.go similarity index 92% rename from tencentcloud/resource_tc_monitor_tmp_tke_alert_policy.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy.go index 0083c3df59..ec931f5df2 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_alert_policy.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy.go @@ -1,6 +1,9 @@ -package tencentcloud +package tmp import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeAlertPolicy() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeAlertPolicy() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTkeTmpAlertPolicyRead, Create: resourceTencentCloudTkeTmpAlertPolicyCreate, @@ -254,10 +258,10 @@ func resourceTencentCloudMonitorTmpTkeAlertPolicy() *schema.Resource { } func resourceTencentCloudTkeTmpAlertPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_alert_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_alert_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = monitor.NewCreatePrometheusAlertPolicyRequest() @@ -407,10 +411,10 @@ func resourceTencentCloudTkeTmpAlertPolicyCreate(d *schema.ResourceData, meta in request.AlertRule = &prometheusAlertPolicyItem } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusAlertPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusAlertPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -427,18 +431,18 @@ func resourceTencentCloudTkeTmpAlertPolicyCreate(d *schema.ResourceData, meta in tmpAlertPolicyId := *response.Response.Id instanceId := *request.InstanceId - d.SetId(strings.Join([]string{instanceId, tmpAlertPolicyId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, tmpAlertPolicyId}, tccommon.FILED_SP)) return resourceTencentCloudTkeTmpAlertPolicyRead(d, meta) } func resourceTencentCloudTkeTmpAlertPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_alert_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_alert_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) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -446,7 +450,7 @@ func resourceTencentCloudTkeTmpAlertPolicyRead(d *schema.ResourceData, meta inte instanceId := ids[0] tmpAlertPolicyId := ids[1] - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tmpAlertPolicy, err := service.DescribeTkeTmpAlertPolicy(ctx, instanceId, tmpAlertPolicyId) if err != nil { return err @@ -551,14 +555,14 @@ func resourceTencentCloudTkeTmpAlertPolicyRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTkeTmpAlertPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_alert_policy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_alert_policy.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewModifyPrometheusAlertPolicyRequest() - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -710,10 +714,10 @@ func resourceTencentCloudTkeTmpAlertPolicyUpdate(d *schema.ResourceData, meta in request.AlertRule = &prometheusAlertPolicyItem } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusAlertPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusAlertPolicy(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -729,14 +733,14 @@ func resourceTencentCloudTkeTmpAlertPolicyUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTkeTmpAlertPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_alert_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_alert_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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - ids := strings.Split(d.Id(), FILED_SP) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("id is broken, id is %s", d.Id()) } diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_alert_policy_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy_test.go similarity index 89% rename from tencentcloud/resource_tc_monitor_tmp_tke_alert_policy_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy_test.go index 0ce86ae504..e18c2d3be9 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_alert_policy_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_alert_policy_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_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" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -19,13 +23,13 @@ import ( //} // //func testSweepTmpTkeAlertPolicy(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 := TkeService{client} // -// instanceId := defaultPrometheusId +// instanceId := tcacctest.DefaultPrometheusId // // for { // tmpAlertPolicy, err := service.DescribeTkeTmpAlertPolicy(ctx, instanceId, "") @@ -47,8 +51,8 @@ import ( func TestAccTencentCloudMonitorTmpTkeAlertPolicy_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTmpTkeAlertPolicyDestroy, Steps: []resource.TestStep{ { @@ -123,15 +127,15 @@ func TestAccTencentCloudMonitorTmpTkeAlertPolicy_basic(t *testing.T) { } func testAccCheckTmpTkeAlertPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_tke_alert_policy" { continue } - 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) } @@ -152,8 +156,8 @@ func testAccCheckTmpTkeAlertPolicyDestroy(s *terraform.State) error { func testAccCheckTmpTkeAlertPolicyExists(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 { @@ -162,7 +166,7 @@ func testAccCheckTmpTkeAlertPolicyExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("instance id is not set") } - 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) } @@ -170,7 +174,7 @@ func testAccCheckTmpTkeAlertPolicyExists(r string) resource.TestCheckFunc { instanceId := items[0] tmpAlertPolicyId := items[1] - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) tmpAlertPolicy, err := service.DescribeTkeTmpAlertPolicy(ctx, instanceId, tmpAlertPolicyId) if tmpAlertPolicy == nil { return fmt.Errorf("alert policy %s is not found", rs.Primary.ID) @@ -185,7 +189,7 @@ func testAccCheckTmpTkeAlertPolicyExists(r string) resource.TestCheckFunc { const testTmpTkeAlertPolicyVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" } ` const testTmpTkeAlertPolicy_basic = testTmpTkeAlertPolicyVar + ` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_basic_config.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config.go similarity index 81% rename from tencentcloud/resource_tc_monitor_tmp_tke_basic_config.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config.go index 9582a2e566..86d1d3a990 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_basic_config.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config.go @@ -1,6 +1,9 @@ -package tencentcloud +package tmp import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "context" "fmt" "log" @@ -17,7 +20,7 @@ const ( RAW_JOBS string = "raw_jobs" ) -func resourceTencentCloudMonitorTmpTkeBasicConfig() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeBasicConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMonitorTmpTkeBasicConfigCreate, Read: resourceTencentCloudMonitorTmpTkeBasicConfigRead, @@ -54,7 +57,7 @@ func resourceTencentCloudMonitorTmpTkeBasicConfig() *schema.Resource { Required: true, Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, }, Description: "Configure the name of the metric to keep on.", }, @@ -75,8 +78,8 @@ func resourceTencentCloudMonitorTmpTkeBasicConfig() *schema.Resource { } func resourceTencentCloudMonitorTmpTkeBasicConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -97,19 +100,19 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigCreate(d *schema.ResourceData, name = v.(string) } - d.SetId(strings.Join([]string{instanceId, clusterType, clusterId, name}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, clusterType, clusterId, name}, tccommon.FILED_SP)) return resourceTencentCloudMonitorTmpTkeBasicConfigUpdate(d, meta) } func resourceTencentCloudMonitorTmpTkeBasicConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_basic_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) - 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()) } @@ -118,7 +121,7 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigRead(d *schema.ResourceData, me clusterId := idSplit[2] name := idSplit[3] - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tmpTkeBasicConfig, err := service.DescribeTkeTmpBasicConfigById(ctx, clusterId, clusterType, instanceId) if err != nil { return err @@ -146,15 +149,15 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigRead(d *schema.ResourceData, me } func resourceTencentCloudMonitorTmpTkeBasicConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_basic_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 := monitor.NewModifyPrometheusConfigRequest() - 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()) } @@ -175,7 +178,7 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigUpdate(d *schema.ResourceData, regexs = append(regexs, regex) } - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tmpTkeBasicConfig, err := service.DescribeTkeTmpBasicConfigById(ctx, clusterId, clusterType, instanceId) if err != nil { return err @@ -216,10 +219,10 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -234,14 +237,14 @@ func resourceTencentCloudMonitorTmpTkeBasicConfigUpdate(d *schema.ResourceData, } func resourceTencentCloudMonitorTmpTkeBasicConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_basic_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func configInit(configType string, respParams *monitor.PrometheusConfigItem, regexs []string) (serviceMonitorConfig, podMonitorConfig, rawMobConfig string, errRet error) { - config := PrometheusConfig{ + config := svcmonitor.PrometheusConfig{ Config: respParams.Config, Regex: regexs, } diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config_test.go new file mode 100644 index 0000000000..55f81cd882 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_basic_config_test.go @@ -0,0 +1,93 @@ +package tmp_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudMonitorTmpTkeBasicConfigResource_basic -v +func TestAccTencentCloudMonitorTmpTkeBasicConfigResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccMonitorTmpTkeBasicConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckTmpTkeBasicConfigExists("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config", "name", "cadvisor"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_basic_config.tmp_tke_basic_config", "metrics_name.#", "2"), + ), + }, + }, + }) +} + +func testAccCheckTmpTkeBasicConfigExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("instance id is not set") + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 4 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + clusterType := items[1] + clusterId := items[2] + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + agents, err := service.DescribeTkeTmpBasicConfigById(ctx, clusterId, clusterType, instanceId) + if agents == nil { + return fmt.Errorf("config %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccMonitorTmpTkeBasicConfigVar = ` +variable "prometheus_id" { + default = "` + tcacctest.DefaultPrometheusId + `" + } +variable "cluster_id" { + default = "cls-2trvpflc" +} +variable "cluster_type" { + default = "` + tcacctest.TkeClusterTypeAgent + `" +}` + +const testAccMonitorTmpTkeBasicConfig = testAccMonitorTmpTkeBasicConfigVar + ` + +resource "tencentcloud_monitor_tmp_tke_basic_config" "tmp_tke_basic_config" { + instance_id = var.prometheus_id + cluster_type = var.cluster_type + cluster_id = var.cluster_id + name = "cadvisor" + metrics_name = ["container_cpu_usage_seconds_total", "container_fs_limit_bytes"] + +} + +` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent.go similarity index 84% rename from tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent.go index aa443fe462..957dd75c79 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_cluster_agent.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp import ( "context" @@ -6,13 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeClusterAgent() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeClusterAgent() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudMonitorTmpTkeClusterAgentRead, Create: resourceTencentCloudMonitorTmpTkeClusterAgentCreate, @@ -158,10 +162,10 @@ func resourceTencentCloudMonitorTmpTkeClusterAgent() *schema.Resource { } func resourceTencentCloudMonitorTmpTkeClusterAgentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewCreatePrometheusClusterAgentRequest() @@ -248,10 +252,10 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentCreate(d *schema.ResourceData, request.Agents = prometheusClusterAgents } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusClusterAgent(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusClusterAgent(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -264,13 +268,13 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentCreate(d *schema.ResourceData, return err } - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { clusterAgent, errRet := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *clusterAgent.Status == "normal" { return nil @@ -284,21 +288,21 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentCreate(d *schema.ResourceData, return err } - d.SetId(strings.Join([]string{instanceId, clusterId, clusterType}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, clusterId, clusterType}, tccommon.FILED_SP)) return resourceTencentCloudMonitorTmpTkeClusterAgentRead(d, meta) } func resourceTencentCloudMonitorTmpTkeClusterAgentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -344,17 +348,17 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentRead(d *schema.ResourceData, m } func resourceTencentCloudMonitorTmpTkeClusterAgentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = monitor.NewModifyPrometheusAgentExternalLabelsRequest() response *monitor.ModifyPrometheusAgentExternalLabelsResponse ) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -389,10 +393,10 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusAgentExternalLabels(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusAgentExternalLabels(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -411,14 +415,14 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentUpdate(d *schema.ResourceData, } func resourceTencentCloudMonitorTmpTkeClusterAgentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_cluster_agent.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -431,10 +435,10 @@ func resourceTencentCloudMonitorTmpTkeClusterAgentDelete(d *schema.ResourceData, return err } - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { clusterAgent, errRet := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if clusterAgent == nil { return nil diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent_test.go new file mode 100644 index 0000000000..e2762b489e --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_cluster_agent_test.go @@ -0,0 +1,155 @@ +package tmp_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_monitor_tmp_tke_cluster_agent + resource.AddTestSweepers("tencentcloud_monitor_tmp_tke_cluster_agent", &resource.Sweeper{ + Name: "tencentcloud_monitor_tmp_tke_cluster_agent", + F: testSweepClusterAgent, + }) +} +func testSweepClusterAgent(region string) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcmonitor.NewMonitorService(client) + + instanceId := tcacctest.ClusterPrometheusId + clusterId := tcacctest.TkeClusterIdAgent + clusterType := tcacctest.TkeClusterTypeAgent + + agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) + if err != nil { + return err + } + + if agents != nil { + return nil + } + + err = service.DeletePrometheusClusterAgent(ctx, instanceId, clusterId, clusterType) + if err != nil { + return err + } + + return nil +} + +// go test -i; go test -test.run TestAccTencentCloudMonitorClusterAgent_basic -v +func TestAccTencentCloudMonitorClusterAgent_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckClusterAgentDestroy, + Steps: []resource.TestStep{ + { + Config: testClusterAgentYaml_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckClusterAgentExists("tencentcloud_monitor_tmp_tke_cluster_agent.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_cluster_agent.basic", "agents.0.cluster_id", "cls-9ae9qo9k"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_cluster_agent.basic", "agents.0.cluster_type", "eks"), + ), + }, + }, + }) +} + +func testAccCheckClusterAgentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_tmp_tke_cluster_agent" { + continue + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + clusterId := items[1] + clusterType := items[2] + agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) + if agents != nil { + return fmt.Errorf("cluster agent %s still exists", rs.Primary.ID) + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckClusterAgentExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("instance id is not set") + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + instanceId := items[0] + clusterId := items[1] + clusterType := items[2] + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + agents, err := service.DescribeTmpTkeClusterAgentsById(ctx, instanceId, clusterId, clusterType) + if agents == nil { + return fmt.Errorf("cluster agent %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testClusterAgentYamlVar = ` +variable "prometheus_id" { + default = "` + tcacctest.ClusterPrometheusId + `" +} +variable "default_region" { + default = "` + tcacctest.DefaultRegion + `" +} +variable "agent_cluster_id" { + default = "` + tcacctest.TkeClusterIdAgent + `" +} +variable "agent_cluster_type" { + default = "` + tcacctest.TkeClusterTypeAgent + `" +}` + +const testClusterAgentYaml_basic = testClusterAgentYamlVar + ` +resource "tencentcloud_monitor_tmp_tke_cluster_agent" "basic" { + instance_id = var.prometheus_id + agents { + region = var.default_region + cluster_type = var.agent_cluster_type + cluster_id = var.agent_cluster_id + enable_external = false + } +}` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_config.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config.go similarity index 80% rename from tencentcloud/resource_tc_monitor_tmp_tke_config.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config.go index 9dc38322d3..073f03eea2 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_config.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp import ( "context" @@ -6,13 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeConfig() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTkeTmpConfigCreate, Read: resourceTencentCloudTkeTmpConfigRead, @@ -119,13 +123,13 @@ func resourceTencentCloudMonitorTmpTkeConfig() *schema.Resource { } func resourceTencentCloudTkeTmpConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_config.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) configId = d.Id() ) @@ -149,11 +153,11 @@ func resourceTencentCloudTkeTmpConfigRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTkeTmpConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = monitor.NewCreatePrometheusConfigRequest() ) @@ -176,12 +180,12 @@ func resourceTencentCloudTkeTmpConfigCreate(d *schema.ResourceData, meta interfa request.RawJobs = serializePromConfigItems(v) } - ids := strings.Join([]string{*request.InstanceId, *request.ClusterType, *request.ClusterId}, FILED_SP) + ids := strings.Join([]string{*request.InstanceId, *request.ClusterType, *request.ClusterId}, tccommon.FILED_SP) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, ids [%s], request body [%s], response body [%s]\n", logId, request.GetAction(), ids, request.ToJsonString(), response.ToJsonString()) @@ -199,17 +203,17 @@ func resourceTencentCloudTkeTmpConfigCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTkeTmpConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_config.update, Id: %s", d.Id())() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_config.update, Id: %s", d.Id())() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = monitor.NewModifyPrometheusConfigRequest() - client = meta.(*TencentCloudClient).apiV3Conn - service = MonitorService{client: client} + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() + service = svcmonitor.NewMonitorService(client) ) - ids, err := service.parseConfigId(d.Id()) + ids, err := service.ParseConfigId(d.Id()) if err != nil { return err } @@ -235,10 +239,10 @@ func resourceTencentCloudTkeTmpConfigUpdate(d *schema.ResourceData, meta interfa } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { response, e := client.UseMonitorClient().ModifyPrometheusConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, ids [%s], request body [%s], response body [%s]\n", logId, request.GetAction(), d.Id(), request.ToJsonString(), response.ToJsonString()) @@ -254,13 +258,13 @@ func resourceTencentCloudTkeTmpConfigUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTkeTmpConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tke_tmp_config.delete, Id: %s", d.Id())() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tke_tmp_config.delete, Id: %s", d.Id())() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ServiceMonitors = []*string{} PodMonitors = []*string{} RawJobs = []*string{} diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_config_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config_test.go similarity index 83% rename from tencentcloud/resource_tc_monitor_tmp_tke_config_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config_test.go index 5ce6f353a3..eb37243258 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_config_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_config_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_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" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/pkg/errors" @@ -17,13 +21,13 @@ func init() { resource.AddTestSweepers("tencentcloud_monitor_tmp_tke_config", &resource.Sweeper{ Name: "tencentcloud_monitor_tmp_tke_config", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - configId := packConfigId(defaultPrometheusId, defaultTkeClusterType, defaultTkeClusterId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + configId := packConfigId(tcacctest.DefaultPrometheusId, tcacctest.DefaultTkeClusterType, tcacctest.DefaultTkeClusterId) - service := MonitorService{client} + service := svcmonitor.NewMonitorService(client) promConfigs, err := service.DescribeTkeTmpConfigById(ctx, configId) @@ -51,17 +55,17 @@ func init() { func TestAccTencentCloudMonitorTmpTkeConfig_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTmpTkeConfigDestroy, Steps: []resource.TestStep{ { Config: testAccTmpTkeConfig_basic, Check: resource.ComposeTestCheckFunc( testAccCheckTmpTkeConfigExists("tencentcloud_monitor_tmp_tke_config.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "instance_id", defaultPrometheusId), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_type", defaultTkeClusterType), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_id", defaultTkeClusterId), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "instance_id", tcacctest.DefaultPrometheusId), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_type", tcacctest.DefaultTkeClusterType), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_id", tcacctest.DefaultTkeClusterId), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "raw_jobs.0.name", raw_job_name), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "service_monitors.0.name", service_monitors_name_fully), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "pod_monitors.0.name", pod_monitors_name_fully), @@ -71,9 +75,9 @@ func TestAccTencentCloudMonitorTmpTkeConfig_basic(t *testing.T) { Config: testAccTmpTkeConfig_update, Check: resource.ComposeTestCheckFunc( testAccCheckTmpTkeConfigExists("tencentcloud_monitor_tmp_tke_config.basic"), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "instance_id", defaultPrometheusId), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_type", defaultTkeClusterType), - resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_id", defaultTkeClusterId), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "instance_id", tcacctest.DefaultPrometheusId), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_type", tcacctest.DefaultTkeClusterType), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "cluster_id", tcacctest.DefaultTkeClusterId), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "raw_jobs.0.config", "scrape_configs:\n- job_name: "+raw_job_name+"\n scrape_interval: 20s\n honor_labels: true\n"), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "service_monitors.0.config", "apiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n name: "+service_monitors_name+"\n namespace: kube-system\nspec:\n endpoints:\n - interval: 20s\n port: 8080-8080-tcp\n path: /metrics\n relabelings:\n - action: replace\n sourceLabels:\n - __meta_kubernetes_pod_label_app\n targetLabel: application\n namespaceSelector:\n matchNames:\n - test\n selector:\n matchLabels:\n app: test"), resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_config.basic", "pod_monitors.0.config", "apiVersion: monitoring.coreos.com/v1\nkind: PodMonitor\nmetadata:\n name: "+pod_monitors_name+"\n namespace: kube-system\nspec:\n podMetricsEndpoints:\n - interval: 20s\n port: metric-port\n path: /metrics\n relabelings:\n - action: replace\n sourceLabels:\n - instance\n regex: (.*)\n targetLabel: instance\n replacement: xxxxxx\n namespaceSelector:\n matchNames:\n - test\n selector:\n matchLabels:\n k8s-app: test"), @@ -84,9 +88,9 @@ func TestAccTencentCloudMonitorTmpTkeConfig_basic(t *testing.T) { } func testAccCheckTmpTkeConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_tke_config" { continue @@ -124,8 +128,8 @@ func testAccCheckTmpTkeConfigDestroy(s *terraform.State) error { func testAccCheckTmpTkeConfigExists(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 { @@ -135,7 +139,7 @@ func testAccCheckTmpTkeConfigExists(r string) resource.TestCheckFunc { return fmt.Errorf("instance id is not set") } - tkeService := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + tkeService := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) promConfigs, err := tkeService.DescribeTkeTmpConfigById(ctx, rs.Primary.ID) if err != nil { return err @@ -150,7 +154,7 @@ func testAccCheckTmpTkeConfigExists(r string) resource.TestCheckFunc { } func packConfigId(instanceId string, clusterType string, clusterId string) (ids string) { - ids = strings.Join([]string{instanceId, clusterType, clusterId}, FILED_SP) + ids = strings.Join([]string{instanceId, clusterType, clusterId}, tccommon.FILED_SP) return } @@ -174,15 +178,15 @@ const ( const testAccTmpTkeConfigVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" } variable "tke_cluster_type" { - default = "` + defaultTkeClusterType + `" + default = "` + tcacctest.DefaultTkeClusterType + `" } variable "tke_cluster_id" { - default = "` + defaultTkeClusterId + `" + default = "` + tcacctest.DefaultTkeClusterId + `" } variable "pod_monitors_name_fully" { diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_global_notification.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification.go similarity index 85% rename from tencentcloud/resource_tc_monitor_tmp_tke_global_notification.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification.go index ab4f51457a..eb0fac5821 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_global_notification.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification.go @@ -1,15 +1,19 @@ -package tencentcloud +package tmp import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeGlobalNotification() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeGlobalNotification() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudMonitorTmpTkeGlobalNotificationRead, Create: resourceTencentCloudMonitorTmpTkeGlobalNotificationCreate, @@ -40,7 +44,7 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotification() *schema.Resource { "type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{"amp", "webhook", "alertmanager"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"amp", "webhook", "alertmanager"}), Description: "Alarm notification type, Valid values: `amp`, `webhook`, `alertmanager`.", }, "web_hook": { @@ -91,7 +95,7 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotification() *schema.Resource { Type: schema.TypeSet, Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"SMS", "EMAIL", "CALL", "WECHAT"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"SMS", "EMAIL", "CALL", "WECHAT"}), }, Optional: true, Description: "Alarm notification method, Valid values: `SMS`, `EMAIL`, `CALL`, `WECHAT`.", @@ -140,8 +144,8 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotification() *schema.Resource { } func resourceTencentCloudMonitorTmpTkeGlobalNotificationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.create")() + defer tccommon.InconsistentCheck(d, meta)() instanceId := "" if v, ok := d.GetOk("instance_id"); ok { @@ -154,13 +158,13 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotificationCreate(d *schema.Resourc } func resourceTencentCloudMonitorTmpTkeGlobalNotificationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId := d.Id() @@ -210,12 +214,12 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotificationRead(d *schema.ResourceD } func resourceTencentCloudMonitorTmpTkeGlobalNotificationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) if d.HasChange("notification") { notification := monitor.PrometheusNotificationItem{} @@ -288,12 +292,12 @@ func resourceTencentCloudMonitorTmpTkeGlobalNotificationUpdate(d *schema.Resourc } func resourceTencentCloudMonitorTmpTkeGlobalNotificationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_global_notification.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id := d.Id() notification := monitor.PrometheusNotificationItem{ diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_global_notification_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification_test.go similarity index 77% rename from tencentcloud/resource_tc_monitor_tmp_tke_global_notification_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification_test.go index 4b757556f4..3d9bc92ca2 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_global_notification_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_global_notification_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tmp_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudMonitorTmpTkeGlobalNotification_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTmpTkeGlobalNotificationDestroy, Steps: []resource.TestStep{ { @@ -37,9 +41,9 @@ func TestAccTencentCloudMonitorTmpTkeGlobalNotification_basic(t *testing.T) { } func testAccCheckTmpTkeGlobalNotificationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_tke_global_notification" { continue @@ -58,8 +62,8 @@ func testAccCheckTmpTkeGlobalNotificationDestroy(s *terraform.State) error { func testAccCheckTmpTkeGlobalNotificationExists(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 { @@ -69,7 +73,7 @@ func testAccCheckTmpTkeGlobalNotificationExists(r string) resource.TestCheckFunc return fmt.Errorf("instance id is not set") } - tkeService := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + tkeService := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) tmpGlobalNotification, err := tkeService.DescribeTkeTmpGlobalNotification(ctx, rs.Primary.ID) if !*tmpGlobalNotification.Enabled { return fmt.Errorf("global notification %s is not found", rs.Primary.ID) @@ -84,7 +88,7 @@ func testAccCheckTmpTkeGlobalNotificationExists(r string) resource.TestCheckFunc const testTmpTkeGlobalNotificationVar = ` variable "prometheus_id" { -default = "` + defaultPrometheusId + `" +default = "` + tcacctest.DefaultPrometheusId + `" } ` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml.go new file mode 100644 index 0000000000..02ff995d01 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml.go @@ -0,0 +1,224 @@ +package tmp + +import ( + "context" + "fmt" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMonitorTmpTkeRecordRuleYaml() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTkeTmpRecordRuleYamlRead, + Create: resourceTencentCloudTkeTmpRecordRuleYamlCreate, + Update: resourceTencentCloudTkeTmpRecordRuleYamlUpdate, + Delete: resourceTencentCloudTkeTmpRecordRuleYamlDelete, + //Importer: &schema.ResourceImporter{ + // State: schema.ImportStatePassthrough, + //}, + Schema: map[string]*schema.Schema{ + "instance_id": { + Type: schema.TypeString, + Required: true, + Description: "Instance Id.", + }, + + "content": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateYaml, + Description: "Contents of record rules in yaml format.", + }, + + "name": { + Type: schema.TypeString, + Computed: true, + Description: "Name of the instance.", + }, + + "update_time": { + Type: schema.TypeString, + Computed: true, + Description: "Last modified time of record rule.", + }, + + "template_id": { + Type: schema.TypeString, + Computed: true, + Description: "Used for the argument, if the configuration comes to the template, the template id.", + }, + + "cluster_id": { + Type: schema.TypeString, + Computed: true, + Description: "An ID identify the cluster, like cls-xxxxxx.", + }, + }, + } +} + +func resourceTencentCloudTkeTmpRecordRuleYamlCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewCreatePrometheusRecordRuleYamlRequest() + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + + tmpRecordRuleName := "" + if v, ok := d.GetOk("content"); ok { + m, _ := tccommon.YamlParser(v.(string)) + metadata := m["metadata"] + if metadata != nil { + if metadata.(map[interface{}]interface{})["name"] != nil { + tmpRecordRuleName = metadata.(map[interface{}]interface{})["name"].(string) + } + } + request.Content = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusRecordRuleYaml(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 tke tmpRecordRule failed, reason:%+v", logId, err) + return err + } + + instanceId := *request.InstanceId + d.SetId(strings.Join([]string{instanceId, tmpRecordRuleName}, tccommon.FILED_SP)) + return resourceTencentCloudTkeTmpRecordRuleYamlRead(d, meta) +} + +func resourceTencentCloudTkeTmpRecordRuleYamlRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + instanceId := ids[0] + name := ids[1] + + recordRuleService := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + request, err := recordRuleService.DescribePrometheusRecordRuleByName(ctx, instanceId, name) + if err != nil { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + request, err = recordRuleService.DescribePrometheusRecordRuleByName(ctx, instanceId, name) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + } + if err != nil { + return err + } + + recordRules := request.Response.Records + if len(recordRules) == 0 { + d.SetId("") + return nil + } + + recordRule := recordRules[0] + if recordRule == nil { + return nil + } + _ = d.Set("instance_id", instanceId) + _ = d.Set("name", recordRule.Name) + _ = d.Set("update_time", recordRule.UpdateTime) + _ = d.Set("template_id", recordRule.TemplateId) + //_ = d.Set("content", recordRule.Content) + _ = d.Set("cluster_id", recordRule.ClusterId) + + return nil +} + +func resourceTencentCloudTkeTmpRecordRuleYamlUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := monitor.NewModifyPrometheusRecordRuleYamlRequest() + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + request.InstanceId = &ids[0] + request.Name = &ids[1] + + if d.HasChange("content") { + if v, ok := d.GetOk("content"); ok { + request.Content = helper.String(v.(string)) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusRecordRuleYaml(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 { + return err + } + + return resourceTencentCloudTkeTmpRecordRuleYamlRead(d, meta) + } + } + + return nil +} + +func resourceTencentCloudTkeTmpRecordRuleYamlDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_record_rule_yaml.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ids := strings.Split(d.Id(), tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + if err := service.DeletePrometheusRecordRuleYaml(ctx, ids[0], ids[1]); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go similarity index 79% rename from tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go index c8632230b2..a7ed9a2bf4 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_record_rule_yaml_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp_test import ( "context" @@ -8,6 +8,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" ) func init() { @@ -18,13 +22,13 @@ func init() { }) } func testSweepRecordRule(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := MonitorService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcmonitor.NewMonitorService(client) - instanceId := defaultPrometheusId + instanceId := tcacctest.DefaultPrometheusId response, err := service.DescribePrometheusRecordRuleByName(ctx, instanceId, "") if err != nil { @@ -51,8 +55,8 @@ func testSweepRecordRule(region string) error { func TestAccTencentCloudMonitorRecordRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_COMMON) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckRecordRuleDestroy, Steps: []resource.TestStep{ { @@ -81,14 +85,14 @@ func TestAccTencentCloudMonitorRecordRuleResource_basic(t *testing.T) { } func testAccCheckRecordRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - recordService := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + recordService := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_monitor_tmp_tke_record_rule_yaml" { continue } - 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) } @@ -108,8 +112,8 @@ func testAccCheckRecordRuleDestroy(s *terraform.State) error { func testAccCheckRecordRuleExists(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 { @@ -118,14 +122,14 @@ func testAccCheckRecordRuleExists(r string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("instance id is not set") } - 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] recordRuleName := items[1] - recordRuleService := MonitorService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + recordRuleService := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) response, err := recordRuleService.DescribePrometheusRecordRuleByName(ctx, instanceId, recordRuleName) if len(response.Response.Records) < 1 { return fmt.Errorf("record rule %s is not found", rs.Primary.ID) @@ -140,7 +144,7 @@ func testAccCheckRecordRuleExists(r string) resource.TestCheckFunc { const testRecordRuleYamlVar = ` variable "prometheus_id" { - default = "` + defaultPrometheusId + `" + default = "` + tcacctest.DefaultPrometheusId + `" }` const testRecordRuleYaml_basic = testRecordRuleYamlVar + ` diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_template.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template.go similarity index 88% rename from tencentcloud/resource_tc_monitor_tmp_tke_template.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template.go index b14fb5cd2f..4be266f112 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_template.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template.go @@ -1,17 +1,21 @@ -package tencentcloud +package tmp import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeTemplate() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeTemplate() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudMonitorTmpTkeTemplateRead, Create: resourceTencentCloudMonitorTmpTkeTemplateCreate, @@ -172,10 +176,10 @@ func resourceTencentCloudMonitorTmpTkeTemplate() *schema.Resource { } func resourceTencentCloudMonitorTmpTkeTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = monitor.NewCreatePrometheusTempRequest() @@ -286,10 +290,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateCreate(d *schema.ResourceData, met } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().CreatePrometheusTemp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().CreatePrometheusTemp(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -310,13 +314,13 @@ func resourceTencentCloudMonitorTmpTkeTemplateCreate(d *schema.ResourceData, met } func resourceTencentCloudMonitorTmpTkeTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) templateId := d.Id() @@ -343,10 +347,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateRead(d *schema.ResourceData, meta } func resourceTencentCloudMonitorTmpTkeTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewModifyPrometheusTempRequest() @@ -441,10 +445,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateUpdate(d *schema.ResourceData, met request.Template = &prometheusTemp } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().ModifyPrometheusTemp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().ModifyPrometheusTemp(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -460,13 +464,13 @@ func resourceTencentCloudMonitorTmpTkeTemplateUpdate(d *schema.ResourceData, met } func resourceTencentCloudMonitorTmpTkeTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id := d.Id() if err := service.DeleteTmpTkeTemplate(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_monitor_tmp_tke_template_attachment.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_attachment.go similarity index 79% rename from tencentcloud/resource_tc_monitor_tmp_tke_template_attachment.go rename to tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_attachment.go index 0fa0ebcabf..d44e4c08a6 100644 --- a/tencentcloud/resource_tc_monitor_tmp_tke_template_attachment.go +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tmp import ( "context" @@ -6,13 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMonitorTmpTkeTemplateAttachment() *schema.Resource { +func ResourceTencentCloudMonitorTmpTkeTemplateAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudMonitorTmpTkeTemplateAttachmentRead, Create: resourceTencentCloudMonitorTmpTkeTemplateAttachmentCreate, @@ -81,10 +85,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateAttachment() *schema.Resource { } func resourceTencentCloudMonitorTmpTkeTemplateAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_template_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewSyncPrometheusTempRequest() @@ -132,10 +136,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateAttachmentCreate(d *schema.Resourc } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().SyncPrometheusTemp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().SyncPrometheusTemp(request) if e != nil { - return retryError(e) + return tccommon.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,21 +155,21 @@ func resourceTencentCloudMonitorTmpTkeTemplateAttachmentCreate(d *schema.Resourc templateId := *request.TemplateId instanceId := *request.Targets[0].InstanceId region := *request.Targets[0].Region - d.SetId(strings.Join([]string{templateId, instanceId, region}, FILED_SP)) + d.SetId(strings.Join([]string{templateId, instanceId, region}, tccommon.FILED_SP)) return resourceTencentCloudMonitorTmpTkeTemplateAttachmentRead(d, meta) } func resourceTencentCloudMonitorTmpTkeTemplateAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_template_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 := MonitorService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svcmonitor.NewMonitorService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -206,13 +210,13 @@ func resourceTencentCloudMonitorTmpTkeTemplateAttachmentRead(d *schema.ResourceD } func resourceTencentCloudMonitorTmpTkeTemplateAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_monitor_tmp_tke_template_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_monitor_tmp_tke_template_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := monitor.NewDeletePrometheusTempSyncRequest() - ids := strings.Split(d.Id(), FILED_SP) + ids := strings.Split(d.Id(), tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", d.Id()) } @@ -230,10 +234,10 @@ func resourceTencentCloudMonitorTmpTkeTemplateAttachmentDelete(d *schema.Resourc targets = append(targets, &target) request.Targets = targets - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMonitorClient().DeletePrometheusTempSync(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMonitorClient().DeletePrometheusTempSync(request) if e != nil { - return retryError(e) + return tccommon.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/tmp/resource_tc_monitor_tmp_tke_template_attachment_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_attachment_test.go new file mode 100644 index 0000000000..f4e2378d39 --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_attachment_test.go @@ -0,0 +1,131 @@ +package tmp_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudMonitorTempAttachment_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTempAttachmentDestroy, + Steps: []resource.TestStep{ + { + Config: testTempAttachment_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckTempAttachmentExists("tencentcloud_monitor_tmp_tke_template_attachment.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "template_id", "temp-gqunlvo1"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "targets.0.instance_id", "prom-1lspn8sw"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template_attachment.basic", "targets.0.region", "ap-guangzhou"), + ), + }, + }, + }) +} + +func testAccCheckTempAttachmentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + recordService := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_tmp_tke_template_attachment" { + continue + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + templateId := items[0] + instanceId := items[1] + region := items[2] + targets, err := recordService.DescribePrometheusTempSync(ctx, templateId) + if err != nil { + return err + } + + if len(targets) > 0 { + for _, v := range targets { + if *v.InstanceId == instanceId && *v.Region == region { + return fmt.Errorf("associated instance information %s still exists", rs.Primary.ID) + } + } + } + } + + return nil +} + +func testAccCheckTempAttachmentExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(items) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + + templateId := items[0] + instanceId := items[1] + region := items[2] + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + targets, err := service.DescribePrometheusTempSync(ctx, templateId) + if err != nil { + return err + } + + if len(targets) < 1 { + return fmt.Errorf("associated instance information %s is not found", rs.Primary.ID) + } + for i, v := range targets { + if *v.InstanceId == instanceId && *v.Region == region { + return nil + } + if i == len(targets)-1 { + return fmt.Errorf("associated instance information %s is not found", rs.Primary.ID) + } + } + + return nil + } +} + +const testTempAttachmentVar = ` +variable "prometheus_id" { + default = "` + tcacctest.DefaultPrometheusId + `" +} +variable "template_id" { + default = "` + tcacctest.DefaultTemplateId + `" +} +variable "region" { + default = "ap-guangzhou" +}` + +const testTempAttachment_basic = testTempAttachmentVar + ` +resource "tencentcloud_monitor_tmp_tke_template_attachment" "basic" { + template_id = var.template_id + + targets { + region = var.region + instance_id = var.prometheus_id + } +}` diff --git a/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_test.go b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_test.go new file mode 100644 index 0000000000..9281bb88fb --- /dev/null +++ b/tencentcloud/services/tmp/resource_tc_monitor_tmp_tke_template_test.go @@ -0,0 +1,114 @@ +package tmp_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcmonitor "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/monitor" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudMonitorTemplate_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTemplateDestroy, + Steps: []resource.TestStep{ + { + Config: testTemplate_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemplateExists("tencentcloud_monitor_tmp_tke_template.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.name", "test-template"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.level", "instance"), + ), + }, + { + Config: testTemplate_update, + Check: resource.ComposeTestCheckFunc( + testAccCheckTemplateExists("tencentcloud_monitor_tmp_tke_template.basic"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.name", "test-template_update"), + resource.TestCheckResourceAttr("tencentcloud_monitor_tmp_tke_template.basic", "template.0.level", "instance"), + ), + }, + { + ResourceName: "tencentcloud_monitor_tmp_tke_template.basic", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTemplateDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_monitor_tmp_tke_template" { + continue + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + template, err := service.DescribeTmpTkeTemplateById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if template != nil { + return fmt.Errorf("template %s still exists", rs.Primary.ID) + } + } + + return nil +} + +func testAccCheckTemplateExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + if rs.Primary.ID == "" { + return fmt.Errorf("resource id is not set") + } + + service := svcmonitor.NewMonitorService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + template, err := service.DescribeTmpTkeTemplateById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if template == nil { + return fmt.Errorf("template %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testTemplate_basic = ` +resource "tencentcloud_monitor_tmp_tke_template" "basic" { + template { + name = "test-template" + level = "instance" + } +}` + +const testTemplate_update = ` +resource "tencentcloud_monitor_tmp_tke_template" "basic" { + template { + name = "test-template_update" + level = "instance" + } +}` diff --git a/tencentcloud/data_source_tc_tdmq_environment_attributes.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes.go similarity index 81% rename from tencentcloud/data_source_tc_tdmq_environment_attributes.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes.go index 77a3caa2fc..a30be71d32 100644 --- a/tencentcloud/data_source_tc_tdmq_environment_attributes.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes.go @@ -1,15 +1,19 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqEnvironmentAttributes() *schema.Resource { +func DataSourceTencentCloudTdmqEnvironmentAttributes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqEnvironmentAttributesRead, Schema: map[string]*schema.Schema{ @@ -69,13 +73,13 @@ func dataSourceTencentCloudTdmqEnvironmentAttributes() *schema.Resource { } func dataSourceTencentCloudTdmqEnvironmentAttributesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_environment_attributes.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_environment_attributes.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tdmqEnv *tdmq.DescribeEnvironmentAttributesResponseParams environmentId string clusterId string @@ -92,10 +96,10 @@ func dataSourceTencentCloudTdmqEnvironmentAttributesRead(d *schema.ResourceData, clusterId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqEnvironmentAttributesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tdmqEnv = result @@ -144,7 +148,7 @@ func dataSourceTencentCloudTdmqEnvironmentAttributesRead(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_tdmq_environment_attributes_test.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes_test.go similarity index 79% rename from tencentcloud/data_source_tc_tdmq_environment_attributes_test.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes_test.go index 7dc666999e..be520fe621 100644 --- a/tencentcloud/data_source_tc_tdmq_environment_attributes_test.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_environment_attributes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tpulsar_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 TestAccTencentCloudTdmqEnvironmentAttributesDataSource_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: testAccTdmqEnvironmentAttributesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_environment_attributes.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_environment_attributes.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_tdmq_pro_instance_detail.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instance_detail.go similarity index 92% rename from tencentcloud/data_source_tc_tdmq_pro_instance_detail.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instance_detail.go index 55f2b103aa..20df66a6c9 100644 --- a/tencentcloud/data_source_tc_tdmq_pro_instance_detail.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instance_detail.go @@ -1,15 +1,19 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqProInstanceDetail() *schema.Resource { +func DataSourceTencentCloudTdmqProInstanceDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqProInstanceDetailRead, Schema: map[string]*schema.Schema{ @@ -174,13 +178,13 @@ func dataSourceTencentCloudTdmqProInstanceDetail() *schema.Resource { } func dataSourceTencentCloudTdmqProInstanceDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_pro_instance_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_pro_instance_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterInfo *tdmq.DescribePulsarProInstanceDetailResponseParams clusterId string ) @@ -191,10 +195,10 @@ func dataSourceTencentCloudTdmqProInstanceDetailRead(d *schema.ResourceData, met clusterId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqProInstanceDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterInfo = result @@ -334,7 +338,7 @@ func dataSourceTencentCloudTdmqProInstanceDetailRead(d *schema.ResourceData, met 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/tpulsar/data_source_tc_tdmq_pro_instance_detail_test.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instance_detail_test.go new file mode 100644 index 0000000000..a61357fdfc --- /dev/null +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instance_detail_test.go @@ -0,0 +1,34 @@ +package tpulsar_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqProInstanceDetailDataSource_basic -v +func TestAccTencentCloudNeedFixTdmqProInstanceDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqProInstanceDetailDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instance_detail.pro_instance_detail"), + ), + }, + }, + }) +} + +const testAccTdmqProInstanceDetailDataSource = ` +data "tencentcloud_tdmq_pro_instance_detail" "pro_instance_detail" { + cluster_id = "pulsar-5z3g4227qnwr" +} +` diff --git a/tencentcloud/data_source_tc_tdmq_pro_instances.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instances.go similarity index 90% rename from tencentcloud/data_source_tc_tdmq_pro_instances.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instances.go index 643b6adeec..65217b4fc0 100644 --- a/tencentcloud/data_source_tc_tdmq_pro_instances.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instances.go @@ -1,15 +1,19 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqProInstances() *schema.Resource { +func DataSourceTencentCloudTdmqProInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqProInstancesRead, Schema: map[string]*schema.Schema{ @@ -134,13 +138,13 @@ func dataSourceTencentCloudTdmqProInstances() *schema.Resource { } func dataSourceTencentCloudTdmqProInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_pro_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_pro_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instances []*tdmq.PulsarProInstance ) @@ -165,10 +169,10 @@ func dataSourceTencentCloudTdmqProInstancesRead(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.DescribeTdmqProInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instances = result @@ -260,7 +264,7 @@ func dataSourceTencentCloudTdmqProInstancesRead(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/services/tpulsar/data_source_tc_tdmq_pro_instances_test.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instances_test.go new file mode 100644 index 0000000000..f6a6c69811 --- /dev/null +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_pro_instances_test.go @@ -0,0 +1,48 @@ +package tpulsar_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqProInstancesDataSource_basic -v +func TestAccTencentCloudNeedFixTdmqProInstancesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqProInstancesDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instances.pro_instances"), + ), + }, + { + Config: testAccTdmqProInstancesDataSourcelFilter, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_pro_instances.pro_instances"), + ), + }, + }, + }) +} + +const testAccTdmqProInstancesDataSource = ` +data "tencentcloud_tdmq_pro_instances" "pro_instances" { +} +` + +const testAccTdmqProInstancesDataSourcelFilter = ` +data "tencentcloud_tdmq_pro_instances" "pro_instances_filter" { + filters { + name = "InstanceName" + values = ["keep"] + } +} +` diff --git a/tencentcloud/data_source_tc_tdmq_publisher_summary.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publisher_summary.go similarity index 80% rename from tencentcloud/data_source_tc_tdmq_publisher_summary.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_publisher_summary.go index d36bcb8c49..0eaf7f98ff 100644 --- a/tencentcloud/data_source_tc_tdmq_publisher_summary.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publisher_summary.go @@ -1,15 +1,19 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqPublisherSummary() *schema.Resource { +func DataSourceTencentCloudTdmqPublisherSummary() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqPublisherSummaryRead, Schema: map[string]*schema.Schema{ @@ -59,13 +63,13 @@ func dataSourceTencentCloudTdmqPublisherSummary() *schema.Resource { } func dataSourceTencentCloudTdmqPublisherSummaryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_publisher_summary.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_publisher_summary.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) publisherSummary *tdmq.DescribePublisherSummaryResponseParams clusterId string Namespace string @@ -88,10 +92,10 @@ func dataSourceTencentCloudTdmqPublisherSummaryRead(d *schema.ResourceData, meta Topic = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqPublisherSummaryByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } publisherSummary = result @@ -126,7 +130,7 @@ func dataSourceTencentCloudTdmqPublisherSummaryRead(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/services/tpulsar/data_source_tc_tdmq_publisher_summary_test.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publisher_summary_test.go new file mode 100644 index 0000000000..a8832fa15a --- /dev/null +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publisher_summary_test.go @@ -0,0 +1,36 @@ +package tpulsar_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTdmqPublisherSummaryDataSource_basic -v +func TestAccTencentCloudTdmqPublisherSummaryDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqPublisherSummaryDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_publisher_summary.publisher_summary"), + ), + }, + }, + }) +} + +const testAccTdmqPublisherSummaryDataSource = ` +data "tencentcloud_tdmq_publisher_summary" "publisher_summary" { + cluster_id = "pulsar-9n95ax58b9vn" + namespace = "keep-ns" + topic = "keep-topic" +} +` diff --git a/tencentcloud/data_source_tc_tdmq_publishers.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publishers.go similarity index 90% rename from tencentcloud/data_source_tc_tdmq_publishers.go rename to tencentcloud/services/tpulsar/data_source_tc_tdmq_publishers.go index ef8e828de1..ce199e50fb 100644 --- a/tencentcloud/data_source_tc_tdmq_publishers.go +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publishers.go @@ -1,15 +1,19 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqPublishers() *schema.Resource { +func DataSourceTencentCloudTdmqPublishers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqPublishersRead, Schema: map[string]*schema.Schema{ @@ -133,13 +137,13 @@ func dataSourceTencentCloudTdmqPublishers() *schema.Resource { } func dataSourceTencentCloudTdmqPublishersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_publishers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_publishers.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) publishers []*tdmq.Publisher clusterId string Namespace string @@ -192,10 +196,10 @@ func dataSourceTencentCloudTdmqPublishersRead(d *schema.ResourceData, meta inter paramMap["sort"] = &sort } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqPublishersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } publishers = result @@ -261,7 +265,7 @@ func dataSourceTencentCloudTdmqPublishersRead(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/services/tpulsar/data_source_tc_tdmq_publishers_test.go b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publishers_test.go new file mode 100644 index 0000000000..1adb7b0fab --- /dev/null +++ b/tencentcloud/services/tpulsar/data_source_tc_tdmq_publishers_test.go @@ -0,0 +1,44 @@ +package tpulsar_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTdmqPublishersDataSource_basic -v +func TestAccTencentCloudTdmqPublishersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqPublishersDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_publishers.publishers"), + ), + }, + }, + }) +} + +const testAccTdmqPublishersDataSource = ` +data "tencentcloud_tdmq_publishers" "publishers" { + cluster_id = "pulsar-9n95ax58b9vn" + namespace = "keep-ns" + topic = "keep-topic" + filters { + name = "ProducerName" + values = ["test"] + } + sort { + name = "ProducerName" + order = "DESC" + } +} +` diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_instance.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_instance.go new file mode 100644 index 0000000000..1a597ddc3e --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_instance.go @@ -0,0 +1,222 @@ +package tpulsar + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqCreate, + Read: resourceTencentCloudTdmqRead, + Update: resourceTencentCloudTdmqUpdate, + Delete: resourceTencentCloudTdmqDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "cluster_name": { + Type: schema.TypeString, + Required: true, + Description: "The name of tdmq cluster to be created.", + }, + "bind_cluster_id": { + Type: schema.TypeInt, + Optional: true, + Description: "The Dedicated Cluster Id.", + }, + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Description of the tdmq cluster.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + }, + } +} + +func resourceTencentCloudTdmqCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + //internal version: replace client 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 client end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + + var ( + request = tdmq.NewCreateClusterRequest() + response *tdmq.CreateClusterResponse + ) + if v, ok := d.GetOk("cluster_name"); ok { + request.ClusterName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("bind_cluster_id"); ok { + request.BindClusterId = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateCluster(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 tdmq instance failed, reason:%+v", logId, err) + return err + } + + clusterId := *response.Response.ClusterId + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + //internal version: replace buildName begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tdmq:%s:uin/:cluster/%s", region, clusterId) + //internal version: replace buildName 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, tags, nil); err != nil { + return err + } + + //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. + } + + d.SetId(clusterId) + + return resourceTencentCloudTdmqRead(d, meta) +} + +func resourceTencentCloudTdmqRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := tdmqService.DescribeTdmqInstanceById(ctx, id) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("cluster_name", info.ClusterName) + _ = d.Set("remark", info.Remark) + return nil + }) + if err != nil { + return err + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "tdmq", "cluster", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTdmqUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + //internal version: replace var 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 var end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + + var ( + clusterName string + remark string + ) + old, now := d.GetChange("cluster_name") + if d.HasChange("cluster_name") { + clusterName = now.(string) + } else { + clusterName = old.(string) + } + + old, now = d.GetChange("remark") + if d.HasChange("remark") { + remark = now.(string) + } else { + remark = old.(string) + } + + if err := service.ModifyTdmqInstanceAttribute(ctx, id, clusterName, remark); err != nil { + return err + } + + if d.HasChange("tags") { + //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. + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); 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. + } + return resourceTencentCloudTdmqRead(d, meta) +} + +func resourceTencentCloudTdmqDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + clusterId := d.Id() + + if err := service.DeleteTdmqInstance(ctx, clusterId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace.go new file mode 100644 index 0000000000..a5218fdb69 --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace.go @@ -0,0 +1,257 @@ +package tpulsar + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "fmt" + "strings" + + "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" + tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" +) + +func ResourceTencentCloudTdmqNamespace() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqNamespaceCreate, + Read: resourceTencentCloudTdmqNamespaceRead, + Update: resourceTencentCloudTdmqNamespaceUpdate, + Delete: resourceTencentCloudTdmqNamespaceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "environ_name": { + Type: schema.TypeString, + Required: true, + Description: "The name of namespace to be created.", + }, + "msg_ttl": { + Type: schema.TypeInt, + Required: true, + Description: "The expiration time of unconsumed message.", + }, + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "The Dedicated Cluster Id.", + }, + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Description of the namespace.", + }, + "retention_policy": { + Type: schema.TypeList, + Optional: true, + Computed: true, + MaxItems: 1, + Description: "The Policy of message to retain. Format like: `{time_in_minutes: Int, size_in_mb: Int}`. `time_in_minutes`: the time of message to retain; `size_in_mb`: the size of message to retain.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "time_in_minutes": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "the time of message to retain.", + }, + "size_in_mb": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Description: "the size of message to retain.", + }, + }, + }, + }, + }, + } +} + +func resourceTencentCloudTdmqNamespaceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + environ_name string + msg_ttl uint64 + remark string + clusterId string + retentionPolicy tdmq.RetentionPolicy + ) + if temp, ok := d.GetOk("environ_name"); ok { + environ_name = temp.(string) + if len(environ_name) < 1 { + return fmt.Errorf("environ_name should be not empty string") + } + } + + msg_ttl = uint64(d.Get("msg_ttl").(int)) + + if temp, ok := d.GetOk("cluster_id"); ok { + clusterId = temp.(string) + } + + if temp, ok := d.GetOk("remark"); ok { + remark = temp.(string) + } + + if temp, ok := d.GetOk("retention_policy"); ok { + policy := temp.([]interface{}) + for _, item := range policy { + value := item.(map[string]interface{}) + timeInMinutes := int64(value["time_in_minutes"].(int)) + sizeInMB := int64(value["size_in_mb"].(int)) + retentionPolicy.TimeInMinutes = &timeInMinutes + retentionPolicy.SizeInMB = &sizeInMB + } + } + environId, err := tdmqService.CreateTdmqNamespace(ctx, environ_name, msg_ttl, clusterId, remark, retentionPolicy) + if err != nil { + return err + } + + d.SetId(strings.Join([]string{environId, clusterId}, tccommon.FILED_SP)) + return resourceTencentCloudTdmqNamespaceRead(d, meta) +} + +func resourceTencentCloudTdmqNamespaceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace.read")() + 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", idSplit) + } + environId := idSplit[0] + clusterId := idSplit[1] + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := tdmqService.DescribeTdmqNamespaceById(ctx, environId, clusterId) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("environ_name", info.EnvironmentId) + _ = d.Set("cluster_id", clusterId) + _ = d.Set("msg_ttl", info.MsgTTL) + _ = d.Set("remark", info.Remark) + + tmpList := make([]map[string]interface{}, 0) + retentionPolicy := make(map[string]interface{}, 2) + retentionPolicy["time_in_minutes"] = info.RetentionPolicy.TimeInMinutes + retentionPolicy["size_in_mb"] = info.RetentionPolicy.SizeInMB + tmpList = append(tmpList, retentionPolicy) + _ = d.Set("retention_policy", tmpList) + return nil + }) + if err != nil { + return err + } + return nil +} + +func resourceTencentCloudTdmqNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.update")() + + 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", idSplit) + } + environId := idSplit[0] + clusterId := idSplit[1] + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + msgTtl uint64 + remark string + retentionPolicy = new(tdmq.RetentionPolicy) + ) + + old, now := d.GetChange("msg_ttl") + if d.HasChange("msg_ttl") { + msgTtl = uint64(now.(int)) + } else { + msgTtl = uint64(old.(int)) + } + + old, now = d.GetChange("remark") + if d.HasChange("remark") { + remark = now.(string) + } else { + remark = old.(string) + } + + _, now = d.GetChange("retention_policy") + if d.HasChange("retention_policy") { + policy := now.([]interface{}) + + for _, item := range policy { + value := item.(map[string]interface{}) + timeInMinutes := int64(value["time_in_minutes"].(int)) + sizeInMB := int64(value["size_in_mb"].(int)) + retentionPolicy.TimeInMinutes = &timeInMinutes + retentionPolicy.SizeInMB = &sizeInMB + } + } + + d.Partial(true) + if err := service.ModifyTdmqNamespaceAttribute(ctx, environId, msgTtl, remark, clusterId, retentionPolicy); err != nil { + return err + } + + d.Partial(false) + return resourceTencentCloudTdmqNamespaceRead(d, meta) +} + +func resourceTencentCloudTdmqNamespaceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.delete")() + + 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", idSplit) + } + environId := idSplit[0] + clusterId := idSplit[1] + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := service.DeleteTdmqNamespace(ctx, environId, clusterId); err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == svcvpc.VPCNotFound { + return nil + } + } + return resource.RetryableError(err) + } + return nil + }) + + return err +} diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_role_attachment.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_role_attachment.go new file mode 100644 index 0000000000..fd51aa5844 --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_role_attachment.go @@ -0,0 +1,219 @@ +package tpulsar + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "fmt" + "strings" + + "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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqNamespaceRoleAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqNamespaceRoleAttachmentCreate, + Read: resourceTencentCloudTdmqNamespaceRoleAttachmentRead, + Update: resourceTencentCloudTdmqNamespaceRoleAttachmentUpdate, + Delete: resourceTencentCloudTdmqNamespaceRoleAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "environ_id": { + Type: schema.TypeString, + Required: true, + Description: "The name of tdmq namespace.", + }, + "role_name": { + Type: schema.TypeString, + Required: true, + Description: "The name of tdmq role.", + }, + "permissions": { + Type: schema.TypeList, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + Description: "The permissions of tdmq role.", + }, + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "The id of tdmq cluster.", + }, + //compute + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Creation time of resource.", + }, + }, + } +} + +func resourceTencentCloudTdmqNamespaceRoleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + environId string + roleName string + permissions []*string + clusterId string + ) + if temp, ok := d.GetOk("environ_id"); ok { + environId = temp.(string) + if len(environId) < 1 { + return fmt.Errorf("environ_id should be not empty string") + } + } + + if temp, ok := d.GetOk("role_name"); ok { + roleName = temp.(string) + if len(roleName) < 1 { + return fmt.Errorf("role_name should be not empty string") + } + } + + if v, ok := d.GetOk("permissions"); ok { + for _, id := range v.([]interface{}) { + permissions = append(permissions, helper.String(id.(string))) + } + } + + if temp, ok := d.GetOk("cluster_id"); ok { + clusterId = temp.(string) + if len(clusterId) < 1 { + return fmt.Errorf("cluster_id should be not empty string") + } + } + + err := tdmqService.CreateTdmqNamespaceRoleAttachment(ctx, environId, roleName, permissions, clusterId) + if err != nil { + return err + } + + d.SetId(environId + tccommon.FILED_SP + roleName) + + return resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d, meta) +} + +func resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.read")() + 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("environment role id is borken, id is %s", d.Id()) + } + environId := idSplit[0] + roleName := idSplit[1] + clusterId := d.Get("cluster_id").(string) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := tdmqService.DescribeTdmqNamespaceRoleAttachment(ctx, environId, roleName, clusterId) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + _ = d.Set("environ_id", info.EnvironmentId) + _ = d.Set("role_name", info.RoleName) + _ = d.Set("permissions", info.Permissions) + _ = d.Set("create_time", info.CreateTime) + return nil + }) + if err != nil { + return err + } + return nil +} + +func resourceTencentCloudTdmqNamespaceRoleAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.update")() + + 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("environment role id is borken, id is %s", d.Id()) + } + environId := idSplit[0] + roleName := idSplit[1] + clusterId := d.Get("cluster_id").(string) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + permissions []*string + ) + old, now := d.GetChange("permissions") + if d.HasChange("permissions") { + for _, id := range now.([]interface{}) { + permissions = append(permissions, helper.String(id.(string))) + } + } else { + for _, id := range old.([]interface{}) { + permissions = append(permissions, helper.String(id.(string))) + } + } + + d.Partial(true) + + if err := service.ModifyTdmqNamespaceRoleAttachment(ctx, environId, roleName, permissions, clusterId); err != nil { + return err + } + + d.Partial(false) + return resourceTencentCloudTdmqNamespaceRoleAttachmentRead(d, meta) +} + +func resourceTencentCloudTdmqNamespaceRoleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_namespace_role_attachment.delete")() + + 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("environment role id is borken, id is %s", d.Id()) + } + environId := idSplit[0] + roleName := idSplit[1] + clusterId := d.Get("cluster_id").(string) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := service.DeleteTdmqNamespaceRoleAttachment(ctx, environId, roleName, clusterId); err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == svcvpc.VPCNotFound { + return nil + } + } + return resource.RetryableError(err) + } + return nil + }) + + return err +} diff --git a/tencentcloud/resource_tc_tdmq_namespace_test.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_test.go similarity index 89% rename from tencentcloud/resource_tc_tdmq_namespace_test.go rename to tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_test.go index 4ea9f062cc..c056c20e22 100644 --- a/tencentcloud/resource_tc_tdmq_namespace_test.go +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_namespace_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tpulsar_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 @@ func TestAccTencentCloudTdmqTdmqNamespaceResource_basic(t *testing.T) { terraformId := "tencentcloud_tdmq_namespace.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTdmqNamespace, diff --git a/tencentcloud/resource_tc_tdmq_professional_cluster.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster.go similarity index 75% rename from tencentcloud/resource_tc_tdmq_professional_cluster.go rename to tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster.go index e42906ad5a..8b8d229199 100644 --- a/tencentcloud/resource_tc_tdmq_professional_cluster.go +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster.go @@ -1,6 +1,10 @@ -package tencentcloud +package tpulsar import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "fmt" "log" @@ -9,10 +13,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqProfessionalCluster() *schema.Resource { +func ResourceTencentCloudTdmqProfessionalCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTdmqProfessionalClusterCreate, Read: resourceTencentCloudTdmqProfessionalClusterRead, @@ -102,10 +107,10 @@ func resourceTencentCloudTdmqProfessionalCluster() *schema.Resource { } func resourceTencentCloudTdmqProfessionalClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_professional_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_professional_cluster.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tdmq.NewCreateProClusterRequest() @@ -159,10 +164,10 @@ func resourceTencentCloudTdmqProfessionalClusterCreate(d *schema.ResourceData, m request.Vpc = &vpcInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateProCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateProCluster(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -177,18 +182,18 @@ func resourceTencentCloudTdmqProfessionalClusterCreate(d *schema.ResourceData, m clusterId = *response.Response.ClusterId d.SetId(clusterId) - service := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - conf := BuildStateChangeConf([]string{"0"}, []string{"1"}, 8*readRetryTimeout, time.Second, service.TdmqProfessionalClusterStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{"0"}, []string{"1"}, 8*tccommon.ReadRetryTimeout, time.Second, service.TdmqProfessionalClusterStateRefreshFunc(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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tdmq:%s:uin/:cluster/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -199,14 +204,14 @@ func resourceTencentCloudTdmqProfessionalClusterCreate(d *schema.ResourceData, m } func resourceTencentCloudTdmqProfessionalClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_professional_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_professional_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 := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterId := d.Id() @@ -266,8 +271,8 @@ func resourceTencentCloudTdmqProfessionalClusterRead(d *schema.ResourceData, met _ = d.Set("vpc", []interface{}{vpcMap}) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tdmq", "cluster", tcClient.Region, d.Id()) if err != nil { return err @@ -278,10 +283,10 @@ func resourceTencentCloudTdmqProfessionalClusterRead(d *schema.ResourceData, met } func resourceTencentCloudTdmqProfessionalClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_professional_cluster.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_professional_cluster.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tdmq.NewModifyClusterRequest() @@ -302,10 +307,10 @@ func resourceTencentCloudTdmqProfessionalClusterUpdate(d *schema.ResourceData, m request.ClusterName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyCluster(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -318,12 +323,12 @@ func resourceTencentCloudTdmqProfessionalClusterUpdate(d *schema.ResourceData, m } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tdmq", "cluster", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -333,13 +338,13 @@ func resourceTencentCloudTdmqProfessionalClusterUpdate(d *schema.ResourceData, m } func resourceTencentCloudTdmqProfessionalClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_professional_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_professional_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 := TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterId := d.Id() if err := service.DeleteTdmqProfessionalClusterById(ctx, clusterId); err != nil { diff --git a/tencentcloud/resource_tc_tdmq_professional_cluster_test.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster_test.go similarity index 89% rename from tencentcloud/resource_tc_tdmq_professional_cluster_test.go rename to tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster_test.go index 3dc617dc5b..c885aad311 100644 --- a/tencentcloud/resource_tc_tdmq_professional_cluster_test.go +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_professional_cluster_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tpulsar_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTdmqProfessionalClusterResource_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: testAccTdmqProfessionalCluster, diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_role.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_role.go new file mode 100644 index 0000000000..f1141dd06f --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_role.go @@ -0,0 +1,174 @@ +package tpulsar + +import ( + "context" + "fmt" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "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" + + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" +) + +func ResourceTencentCloudTdmqRole() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqRoleCreate, + Read: resourceTencentCloudTdmqRoleRead, + Update: resourceTencentCloudTdmqRoleUpdate, + Delete: resourceTencentCloudTdmqRoleDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "role_name": { + Type: schema.TypeString, + Required: true, + Description: "The name of tdmq role.", + }, + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "The id of tdmq cluster.", + }, + "remark": { + Type: schema.TypeString, + Required: true, + Description: "The description of tdmq role.", + }, + }, + } +} + +func resourceTencentCloudTdmqRoleCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_role.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + roleName string + clusterId string + remark string + ) + if temp, ok := d.GetOk("role_name"); ok { + roleName = temp.(string) + if len(roleName) < 1 { + return fmt.Errorf("role_name should be not empty string") + } + } + + if temp, ok := d.GetOk("cluster_id"); ok { + clusterId = temp.(string) + if len(clusterId) < 1 { + return fmt.Errorf("cluster_id should be not empty string") + } + } + + if temp, ok := d.GetOk("remark"); ok { + remark = temp.(string) + } + + clusterId, err := tdmqService.CreateTdmqRole(ctx, roleName, clusterId, remark) + if err != nil { + return err + } + d.SetId(clusterId) + + return resourceTencentCloudTdmqRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRoleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_role.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + roleName := d.Id() + clusterId := d.Get("cluster_id").(string) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := tdmqService.DescribeTdmqRoleById(ctx, roleName, clusterId) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("role_name", info.RoleName) + _ = d.Set("remark", info.Remark) + return nil + }) + if err != nil { + return err + } + return nil +} + +func resourceTencentCloudTdmqRoleUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_role.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + roleName := d.Id() + clusterId := d.Get("cluster_id").(string) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + remark string + ) + old, now := d.GetChange("remark") + if d.HasChange("remark") { + remark = now.(string) + } else { + remark = old.(string) + } + + d.Partial(true) + + if err := service.ModifyTdmqRoleAttribute(ctx, roleName, clusterId, remark); err != nil { + return err + } + + d.Partial(false) + return resourceTencentCloudTdmqRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRoleDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_role.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + roleName := d.Id() + clusterId := d.Get("cluster_id").(string) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := service.DeleteTdmqRole(ctx, roleName, clusterId); err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == svcvpc.VPCNotFound { + return nil + } + } + return resource.RetryableError(err) + } + return nil + }) + + return err +} diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment.go new file mode 100644 index 0000000000..3010c59e20 --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment.go @@ -0,0 +1,297 @@ +/* +Provides a resource to create a tdmq subscription_attachment + +# Example Usage + +```hcl + + resource "tencentcloud_tdmq_instance" "example" { + cluster_name = "tf_example" + remark = "remark." + tags = { + "createdBy" = "terraform" + } + } + + resource "tencentcloud_tdmq_namespace" "example" { + environ_name = "tf_example" + msg_ttl = 300 + cluster_id = tencentcloud_tdmq_instance.example.id + retention_policy { + time_in_minutes = 60 + size_in_mb = 10 + } + remark = "remark." + } + + resource "tencentcloud_tdmq_topic" "example" { + environ_id = tencentcloud_tdmq_namespace.example.environ_name + cluster_id = tencentcloud_tdmq_instance.example.id + topic_name = "tf-example-topic" + partitions = 6 + pulsar_topic_type = 3 + remark = "remark." + } + + resource "tencentcloud_tdmq_subscription_attachment" "example" { + environment_id = tencentcloud_tdmq_namespace.example.environ_name + cluster_id = tencentcloud_tdmq_instance.example.id + topic_name = tencentcloud_tdmq_topic.example.topic_name + subscription_name = "tf-example-subcription" + remark = "remark." + auto_create_policy_topic = true + } + +``` + +# Import + +tdmq subscription_attachment can be imported using the id, e.g. + +``` +terraform import tencentcloud_tdmq_subscription_attachment.subscription_attachment subscription_attachment_id +``` +*/ +package tpulsar + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqSubscriptionAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqSubscriptionAttachmentCreate, + Read: resourceTencentCloudTdmqSubscriptionAttachmentRead, + Update: resourceTencentCloudTdmqSubscriptionAttachmentUpdate, + Delete: resourceTencentCloudTdmqSubscriptionAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "environment_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Environment (namespace) name.", + }, + "topic_name": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "topic name.", + }, + "subscription_name": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Subscriber name, no more than 128 characters.", + }, + "remark": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Remarks, within 128 characters.", + }, + "cluster_id": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ID of the Pulsar cluster.", + }, + "auto_create_policy_topic": { + Optional: true, + Type: schema.TypeBool, + Description: "Whether to automatically create dead letters and retry topics, True means to create, False means not to create, the default is to automatically create dead letters and retry topics.", + }, + }, + } +} + +func resourceTencentCloudTdmqSubscriptionAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_subscription_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = tdmq.NewCreateSubscriptionRequest() + environmentId string + Topic string + subscriptionName string + clusterId string + autoCreatePolicyTopic bool + ) + + if v, ok := d.GetOk("environment_id"); ok { + request.EnvironmentId = helper.String(v.(string)) + environmentId = v.(string) + } + + if v, ok := d.GetOk("topic_name"); ok { + request.TopicName = helper.String(v.(string)) + Topic = v.(string) + } + + if v, ok := d.GetOk("subscription_name"); ok { + request.SubscriptionName = helper.String(v.(string)) + subscriptionName = v.(string) + } + + if v, ok := d.GetOk("is_idempotent"); ok { + request.IsIdempotent = helper.Bool(v.(bool)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) + clusterId = v.(string) + } + + if v, ok := d.GetOk("auto_create_policy_topic"); ok { + request.AutoCreatePolicyTopic = helper.Bool(v.(bool)) + autoCreatePolicyTopic = v.(bool) + } + + var isIdempotent = false + request.IsIdempotent = &isIdempotent + request.AutoCreatePolicyTopic = &autoCreatePolicyTopic + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateSubscription(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 tdmq subscriptionAttachment failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{environmentId, Topic, subscriptionName, clusterId}, tccommon.FILED_SP)) + + return resourceTencentCloudTdmqSubscriptionAttachmentRead(d, meta) +} + +func resourceTencentCloudTdmqSubscriptionAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_subscription_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 4 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + environmentId := idSplit[0] + Topic := idSplit[1] + subscriptionName := idSplit[2] + clusterId := idSplit[3] + + subscriptionAttachment, err := service.DescribeTdmqSubscriptionAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId) + if err != nil { + return err + } + + if subscriptionAttachment == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TdmqSubscriptionAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if subscriptionAttachment.EnvironmentId != nil { + _ = d.Set("environment_id", subscriptionAttachment.EnvironmentId) + } + + if subscriptionAttachment.TopicName != nil { + _ = d.Set("topic_name", subscriptionAttachment.TopicName) + } + + if subscriptionAttachment.SubscriptionName != nil { + _ = d.Set("subscription_name", subscriptionAttachment.SubscriptionName) + } + + if subscriptionAttachment.Remark != nil { + _ = d.Set("remark", subscriptionAttachment.Remark) + } + + _ = d.Set("cluster_id", clusterId) + + // Get Topics Status For auto_create_policy_topic + has, err := service.GetTdmqTopicsAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId) + if err != nil { + return err + } + + _ = d.Set("auto_create_policy_topic", has) + + return nil +} + +func resourceTencentCloudTdmqSubscriptionAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_subscription_attachment.update")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudTdmqSubscriptionAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_subscription_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + autoCreatePolicyTopic bool + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 4 { + return fmt.Errorf("id is broken, id is %s", d.Id()) + } + + environmentId := idSplit[0] + Topic := idSplit[1] + subscriptionName := idSplit[2] + clusterId := idSplit[3] + + // Delete Subscription + if err := service.DeleteTdmqSubscriptionAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId); err != nil { + return err + } + + if v, ok := d.GetOk("auto_create_policy_topic"); ok { + autoCreatePolicyTopic = v.(bool) + if autoCreatePolicyTopic { + // Delete Topics + if err := service.DeleteTdmqTopicsAttachmentById(ctx, environmentId, Topic, subscriptionName, clusterId); err != nil { + return err + } + } + } + + return nil +} diff --git a/tencentcloud/resource_tc_tdmq_subscription_attachment_test.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment_test.go similarity index 81% rename from tencentcloud/resource_tc_tdmq_subscription_attachment_test.go rename to tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment_test.go index bae072ef07..e620f0a395 100644 --- a/tencentcloud/resource_tc_tdmq_subscription_attachment_test.go +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_subscription_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tpulsar_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" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -17,10 +21,10 @@ func TestAccTencentCloudTdmqSubscriptionAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckTdmqSubscriptionAttachmentDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTdmqSubscriptionAttachment, @@ -38,16 +42,16 @@ func TestAccTencentCloudTdmqSubscriptionAttachmentResource_basic(t *testing.T) { } func testAccCheckTdmqSubscriptionAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_subscription_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("id is broken,%s", rs.Primary.ID) } diff --git a/tencentcloud/services/tpulsar/resource_tc_tdmq_topic.go b/tencentcloud/services/tpulsar/resource_tc_tdmq_topic.go new file mode 100644 index 0000000000..54b009e896 --- /dev/null +++ b/tencentcloud/services/tpulsar/resource_tc_tdmq_topic.go @@ -0,0 +1,241 @@ +package tpulsar + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "fmt" + + "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 ResourceTencentCloudTdmqTopic() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqTopicCreate, + Read: resourceTencentCloudTdmqTopicRead, + Update: resourceTencentCloudTdmqTopicUpdate, + Delete: resourceTencentCloudTdmqTopicDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "environ_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The name of tdmq namespace.", + }, + "topic_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The name of topic to be created.", + }, + "partitions": { + Type: schema.TypeInt, + Required: true, + Description: "The partitions of topic.", + }, + "topic_type": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + Deprecated: "This input will be gradually discarded and can be switched to PulsarTopicType parameter 0: Normal message; 1: Global sequential messages; 2: Local sequential messages; 3: Retrying queue; 4: Dead letter queue.", + Description: "The type of topic.", + }, + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "The Dedicated Cluster Id.", + }, + "pulsar_topic_type": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + ConflictsWith: []string{"topic_type"}, + Description: "Pulsar Topic Type 0: Non-persistent non-partitioned 1: Non-persistent partitioned 2: Persistent non-partitioned 3: Persistent partitioned.", + }, + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Description of the namespace.", + }, + + //compute + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Creation time of resource.", + }, + }, + } +} + +func resourceTencentCloudTdmqTopicCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_topic.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + environId string + topicName string + partitions uint64 + topicType int64 + remark string + clusterId string + pulsarTopicType int64 + ) + if temp, ok := d.GetOk("environ_id"); ok { + environId = temp.(string) + if len(environId) < 1 { + return fmt.Errorf("environ_id should be not empty string") + } + } + if temp, ok := d.GetOk("topic_name"); ok { + topicName = temp.(string) + if len(topicName) < 1 { + return fmt.Errorf("topic_name should be not empty string") + } + } + partitions = uint64(d.Get("partitions").(int)) + if temp, ok := d.GetOk("remark"); ok { + remark = temp.(string) + } + if temp, ok := d.GetOk("cluster_id"); ok { + clusterId = temp.(string) + } + + if v, ok := d.GetOkExists("pulsar_topic_type"); ok { + pulsarTopicType = int64(v.(int)) + } else { + pulsarTopicType = svctdmq.NonePulsarTopicType + if v, ok := d.GetOkExists("topic_type"); ok { + topicType = int64(v.(int)) + } else { + topicType = svctdmq.NoneTopicType + } + } + + err := tdmqService.CreateTdmqTopic(ctx, environId, topicName, partitions, topicType, remark, clusterId, pulsarTopicType) + if err != nil { + return err + } + d.SetId(topicName) + + return resourceTencentCloudTdmqTopicRead(d, meta) +} + +func resourceTencentCloudTdmqTopicRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + topicName := d.Id() + environId := d.Get("environ_id").(string) + clusterId := d.Get("cluster_id").(string) + + tdmqService := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := tdmqService.DescribeTdmqTopicById(ctx, environId, topicName, clusterId) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("partitions", info.Partitions) + _ = d.Set("topic_type", info.TopicType) + _ = d.Set("pulsar_topic_type", info.PulsarTopicType) + _ = d.Set("remark", info.Remark) + _ = d.Set("create_time", info.CreateTime) + return nil + }) + if err != nil { + return err + } + return nil +} + +func resourceTencentCloudTdmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_topic.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + if d.HasChange("topic_type") { + return fmt.Errorf("`topic_type` do not support change now.") + } + + topicName := d.Id() + environId := d.Get("environ_id").(string) + clusterId := d.Get("cluster_id").(string) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var ( + partitions uint64 + remark string + ) + old, now := d.GetChange("partitions") + if d.HasChange("partitions") { + partitions = uint64(now.(int)) + } else { + partitions = uint64(old.(int)) + } + + old, now = d.GetChange("remark") + if d.HasChange("remark") { + remark = now.(string) + } else { + remark = old.(string) + } + + d.Partial(true) + + if err := service.ModifyTdmqTopicAttribute(ctx, environId, topicName, + partitions, remark, clusterId); err != nil { + return err + } + d.Partial(false) + return resourceTencentCloudTdmqTopicRead(d, meta) +} + +func resourceTencentCloudTdmqTopicDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_instance.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + topicName := d.Id() + environId := d.Get("environ_id").(string) + clusterId := d.Get("cluster_id").(string) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := service.DeleteTdmqTopic(ctx, environId, topicName, clusterId); err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == svcvpc.VPCNotFound { + return nil + } + } + return resource.RetryableError(err) + } + return nil + }) + + return err +} diff --git a/tencentcloud/data_source_tc_tdmq_rabbitmq_node_list.go b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.go similarity index 87% rename from tencentcloud/data_source_tc_tdmq_rabbitmq_node_list.go rename to tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.go index 3f1f012d13..7136b89536 100644 --- a/tencentcloud/data_source_tc_tdmq_rabbitmq_node_list.go +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.go @@ -1,33 +1,19 @@ -/* -Use this data source to query detailed information of tdmq rabbitmq_node_list - -Example Usage - -```hcl -data "tencentcloud_tdmq_rabbitmq_node_list" "rabbitmq_node_list" { - instance_id = "amqp-testtesttest" - node_name = "keep-node" - filters { - name = "nodeStatus" - values = ["running", "down"] - } - sort_element = "cpuUsage" - sort_order = "descend" -} -``` -*/ -package tencentcloud +package trabbit import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRabbitmqNodeList() *schema.Resource { +func DataSourceTencentCloudTdmqRabbitmqNodeList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRabbitmqNodeListRead, Schema: map[string]*schema.Schema{ @@ -121,13 +107,13 @@ func dataSourceTencentCloudTdmqRabbitmqNodeList() *schema.Resource { } func dataSourceTencentCloudTdmqRabbitmqNodeListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_rabbitmq_node_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_rabbitmq_node_list.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) nodeList []*tdmq.RabbitMQPrivateNode instanceId string nodeName string @@ -172,10 +158,10 @@ func dataSourceTencentCloudTdmqRabbitmqNodeListRead(d *schema.ResourceData, meta paramMap["SortOrder"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqRabbitmqNodeListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } nodeList = result @@ -227,7 +213,7 @@ func dataSourceTencentCloudTdmqRabbitmqNodeListRead(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/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.md b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.md new file mode 100644 index 0000000000..e74179b4c3 --- /dev/null +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list.md @@ -0,0 +1,16 @@ +Use this data source to query detailed information of tdmq rabbitmq_node_list + +Example Usage + +```hcl +data "tencentcloud_tdmq_rabbitmq_node_list" "rabbitmq_node_list" { + instance_id = "amqp-testtesttest" + node_name = "keep-node" + filters { + name = "nodeStatus" + values = ["running", "down"] + } + sort_element = "cpuUsage" + sort_order = "descend" +} +``` diff --git a/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list_test.go b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list_test.go new file mode 100644 index 0000000000..b2e58468ea --- /dev/null +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_node_list_test.go @@ -0,0 +1,40 @@ +package trabbit_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixTdmqRabbitmqNodeListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqRabbitmqNodeListDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rabbitmq_node_list.rabbitmq_node_list"), + ), + }, + }, + }) +} + +const testAccTdmqRabbitmqNodeListDataSource = ` +data "tencentcloud_tdmq_rabbitmq_node_list" "rabbitmq_node_list" { + instance_id = "amqp-testtesttest" + node_name = "keep-node" + filters { + name = "nodeStatus" + values = ["running", "down"] + } + sort_element = "cpuUsage" + sort_order = "descend" +} +` diff --git a/tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance.go b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.go similarity index 90% rename from tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance.go rename to tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.go index 458ea192a1..c6c7a09347 100644 --- a/tencentcloud/data_source_tc_tdmq_rabbitmq_vip_instance.go +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.go @@ -1,29 +1,19 @@ -/* -Use this data source to query detailed information of tdmq rabbitmq_vip_instance - -Example Usage - -```hcl -data "tencentcloud_tdmq_rabbitmq_vip_instance" "rabbitmq_vip_instance" { - filters { - name = "" - values = [] - } -} -``` -*/ -package tencentcloud +package trabbit import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { +func DataSourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRabbitmqVipInstanceRead, Schema: map[string]*schema.Schema{ @@ -142,13 +132,13 @@ func dataSourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { } func dataSourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_rabbitmq_vip_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_rabbitmq_vip_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instances []*tdmq.RabbitMQVipInstance ) @@ -173,10 +163,10 @@ func dataSourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, m paramMap["filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqRabbitmqVipInstanceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instances = result @@ -264,7 +254,7 @@ func dataSourceTencentCloudTdmqRabbitmqVipInstanceRead(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/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.md b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.md new file mode 100644 index 0000000000..6c0d6646b5 --- /dev/null +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance.md @@ -0,0 +1,12 @@ +Use this data source to query detailed information of tdmq rabbitmq_vip_instance + +Example Usage + +```hcl +data "tencentcloud_tdmq_rabbitmq_vip_instance" "rabbitmq_vip_instance" { + filters { + name = "" + values = [] + } +} +``` diff --git a/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance_test.go b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance_test.go new file mode 100644 index 0000000000..a12c41ecc0 --- /dev/null +++ b/tencentcloud/services/trabbit/data_source_tc_tdmq_rabbitmq_vip_instance_test.go @@ -0,0 +1,39 @@ +package trabbit_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixTdmqRabbitmqVipInstanceDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqRabbitmqVipInstanceDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rabbitmq_vip_instance.rabbitmq_vip_instance"), + ), + }, + }, + }) +} + +const testAccTdmqRabbitmqVipInstanceDataSource = ` + +data "tencentcloud_tdmq_rabbitmq_vip_instance" "rabbitmq_vip_instance" { + filters { + name = "" + values = + + } + } + +` diff --git a/tencentcloud/resource_tc_tdmq_rabbitmq_user.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user.go similarity index 75% rename from tencentcloud/resource_tc_tdmq_rabbitmq_user.go rename to tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user.go index 8ebeb5ab16..757745c05a 100644 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_user.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user.go @@ -1,6 +1,9 @@ -package tencentcloud +package trabbit import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRabbitmqUser() *schema.Resource { +func ResourceTencentCloudTdmqRabbitmqUser() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTdmqRabbitmqUserCreate, Read: resourceTencentCloudTdmqRabbitmqUserRead, @@ -62,11 +66,11 @@ func resourceTencentCloudTdmqRabbitmqUser() *schema.Resource { } func resourceTencentCloudTdmqRabbitmqUserCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_user.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_user.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = tdmq.NewCreateRabbitMQUserRequest() response = tdmq.NewCreateRabbitMQUserResponse() instanceId string @@ -102,10 +106,10 @@ func resourceTencentCloudTdmqRabbitmqUserCreate(d *schema.ResourceData, meta int request.MaxChannels = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRabbitMQUser(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRabbitMQUser(request) if e != nil { - return retryError(e) + return tccommon.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,22 +125,22 @@ func resourceTencentCloudTdmqRabbitmqUserCreate(d *schema.ResourceData, meta int user = *response.Response.User - d.SetId(strings.Join([]string{instanceId, user}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, user}, tccommon.FILED_SP)) return resourceTencentCloudTdmqRabbitmqUserRead(d, meta) } func resourceTencentCloudTdmqRabbitmqUserRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_user.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_user.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(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) } @@ -179,15 +183,15 @@ func resourceTencentCloudTdmqRabbitmqUserRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTdmqRabbitmqUserUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_user.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_user.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = tdmq.NewModifyRabbitMQUserRequest() ) - 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,10 +227,10 @@ func resourceTencentCloudTdmqRabbitmqUserUpdate(d *schema.ResourceData, meta int request.MaxChannels = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRabbitMQUser(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQUser(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -244,16 +248,16 @@ func resourceTencentCloudTdmqRabbitmqUserUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudTdmqRabbitmqUserDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_user.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_user.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(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_tdmq_rabbitmq_user_test.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user_test.go similarity index 92% rename from tencentcloud/resource_tc_tdmq_rabbitmq_user_test.go rename to tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user_test.go index 25635452b4..f9d9d58850 100644 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_user_test.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_user_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trabbit_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 TestAccTencentCloudNeedFixTdmqRabbitmqUserResource_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: testAccTdmqRabbitmqUser, diff --git a/tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go similarity index 78% rename from tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance.go rename to tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go index 589def9a9c..666ffdc355 100644 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package trabbit import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { +func ResourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTdmqRabbitmqVipInstanceCreate, Read: resourceTencentCloudTdmqRabbitmqVipInstanceRead, @@ -75,13 +79,13 @@ func resourceTencentCloudTdmqRabbitmqVipInstance() *schema.Resource { } func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = tdmq.NewCreateRabbitMQVipInstanceRequest() response = tdmq.NewCreateRabbitMQVipInstanceResponse() instanceId string @@ -131,10 +135,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m request.TimeSpan = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRabbitMQVipInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRabbitMQVipInstance(request) if e != nil { - return retryError(e) + return tccommon.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,10 +162,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m filter.Values = helper.Strings([]string{instanceId}) tmpSet = append(tmpSet, &filter) paramMap["filters"] = tmpSet - err = resource.Retry(readRetryTimeout*10, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { result, e := service.DescribeTdmqRabbitmqVipInstanceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -172,9 +176,9 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m return resource.NonRetryableError(fmt.Errorf("resource `tencentcloud_tdmq_rabbitmq_vip_instance` %s id error", instanceId)) } - if *result[0].Status == RabbitMQVipInstanceRunning { + if *result[0].Status == svctdmq.RabbitMQVipInstanceRunning { return resource.RetryableError(fmt.Errorf("rabbitmq_vip_instance status is running")) - } else if *result[0].Status == RabbitMQVipInstanceSuccess { + } else if *result[0].Status == svctdmq.RabbitMQVipInstanceSuccess { return nil } else { return resource.NonRetryableError(fmt.Errorf("rabbitmq_vip_instance status illegal")) @@ -192,13 +196,13 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceCreate(d *schema.ResourceData, m } func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId = d.Id() ) @@ -237,10 +241,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met filter.Values = helper.Strings([]string{instanceId}) tmpSet = append(tmpSet, &filter) paramMap["filters"] = tmpSet - err = resource.Retry(readRetryTimeout*10, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { result, e := service.DescribeTdmqRabbitmqVipInstanceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result[0].SpecName != nil { @@ -252,7 +256,7 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met } if result[0].AutoRenewFlag != nil { - if *result[0].AutoRenewFlag == AutoRenewFlagTrue { + if *result[0].AutoRenewFlag == svctdmq.AutoRenewFlagTrue { _ = d.Set("auto_renew_flag", true) } else { _ = d.Set("auto_renew_flag", false) @@ -273,11 +277,11 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceRead(d *schema.ResourceData, met } func resourceTencentCloudTdmqRabbitmqVipInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = tdmq.NewModifyRabbitMQVipInstanceRequest() instanceId = d.Id() ) @@ -298,10 +302,10 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRabbitMQVipInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVipInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -318,13 +322,13 @@ func resourceTencentCloudTdmqRabbitmqVipInstanceUpdate(d *schema.ResourceData, m } func resourceTencentCloudTdmqRabbitmqVipInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_vip_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) instanceId = d.Id() ) diff --git a/tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance_test.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance_test.go similarity index 78% rename from tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance_test.go rename to tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance_test.go index 9000f7643b..3abf906894 100644 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_vip_instance_test.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_vip_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package trabbit_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "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" @@ -15,10 +19,10 @@ func TestAccTencentCloudTdmqRabbitmqVipInstanceResource_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) }, CheckDestroy: testAccCheckTdmqRabbitmqVipInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTdmqRabbitmqVipInstance, @@ -40,8 +44,8 @@ func TestAccTencentCloudTdmqRabbitmqVipInstanceResource_basic(t *testing.T) { func testAccCheckTdmqRabbitmqVipInstanceExists(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 { @@ -51,7 +55,7 @@ func testAccCheckTdmqRabbitmqVipInstanceExists(re string) resource.TestCheckFunc return fmt.Errorf("rabbitmq vip instance id is not set") } - service := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) id := rs.Primary.ID ret, err := service.DescribeTdmqRabbitmqVipInstanceById(ctx, id) @@ -68,10 +72,10 @@ func testAccCheckTdmqRabbitmqVipInstanceExists(re string) resource.TestCheckFunc } func testAccCheckTdmqRabbitmqVipInstanceDestroy(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 := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rabbitmq_vip_instance" { continue @@ -96,7 +100,7 @@ func testAccCheckTdmqRabbitmqVipInstanceDestroy(s *terraform.State) error { return nil } -const testAccTdmqRabbitmqVipInstance = defaultVpcSubnets + ` +const testAccTdmqRabbitmqVipInstance = tcacctest.DefaultVpcSubnets + ` data "tencentcloud_availability_zones" "zones" {} resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" { @@ -113,7 +117,7 @@ resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" { } ` -const testAccTdmqRabbitmqVipInstanceUpdate = defaultVpcSubnets + ` +const testAccTdmqRabbitmqVipInstanceUpdate = tcacctest.DefaultVpcSubnets + ` data "tencentcloud_availability_zones" "zones" {} resource "tencentcloud_tdmq_rabbitmq_vip_instance" "example" { diff --git a/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host.go new file mode 100644 index 0000000000..a47edef4d6 --- /dev/null +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host.go @@ -0,0 +1,225 @@ +package trabbit + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqRabbitmqVirtualHost() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTdmqRabbitmqVirtualHostCreate, + Read: resourceTencentCloudTdmqRabbitmqVirtualHostRead, + Update: resourceTencentCloudTdmqRabbitmqVirtualHostUpdate, + Delete: resourceTencentCloudTdmqRabbitmqVirtualHostDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + Description: "Cluster instance ID.", + }, + "virtual_host": { + Required: true, + Type: schema.TypeString, + Description: "vhost name.", + }, + "description": { + Optional: true, + Type: schema.TypeString, + Description: "describe.", + }, + "trace_flag": { + Optional: true, + Type: schema.TypeBool, + Description: "Message track switch, true is on, false is off, default is off.", + }, + }, + } +} + +func resourceTencentCloudTdmqRabbitmqVirtualHostCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = tdmq.NewCreateRabbitMQVirtualHostRequest() + response = tdmq.NewCreateRabbitMQVirtualHostResponse() + instanceId string + virtualHost string + ) + + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + instanceId = v.(string) + } + + if v, ok := d.GetOk("virtual_host"); ok { + request.VirtualHost = helper.String(v.(string)) + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("trace_flag"); ok { + request.TraceFlag = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRabbitMQVirtualHost(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 tdmq rabbitmqVirtualHost failed, reason:%+v", logId, err) + return err + } + + virtualHost = *response.Response.VirtualHost + d.SetId(strings.Join([]string{instanceId, virtualHost}, tccommon.FILED_SP)) + + return resourceTencentCloudTdmqRabbitmqVirtualHostRead(d, meta) +} + +func resourceTencentCloudTdmqRabbitmqVirtualHostRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + instanceId := idSplit[0] + virtualHost := idSplit[1] + + rabbitmqVirtualHost, err := service.DescribeTdmqRabbitmqVirtualHostById(ctx, instanceId, virtualHost) + if err != nil { + return err + } + + if rabbitmqVirtualHost == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TdmqRabbitmqVirtualHost` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if rabbitmqVirtualHost.InstanceId != nil { + _ = d.Set("instance_id", rabbitmqVirtualHost.InstanceId) + } + + if rabbitmqVirtualHost.VirtualHost != nil { + _ = d.Set("virtual_host", rabbitmqVirtualHost.VirtualHost) + } + + if rabbitmqVirtualHost.Description != nil { + _ = d.Set("description", rabbitmqVirtualHost.Description) + } + + return nil +} + +func resourceTencentCloudTdmqRabbitmqVirtualHostUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = tdmq.NewModifyRabbitMQVirtualHostRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + + instanceId := idSplit[0] + virtualHost := idSplit[1] + + immutableArgs := []string{"instance_id", "virtual_host"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("description") || d.HasChange("trace_flag") { + request.InstanceId = &instanceId + request.VirtualHost = &virtualHost + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("trace_flag"); ok { + request.TraceFlag = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRabbitMQVirtualHost(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update tdmq rabbitmqVirtualHost failed, reason:%+v", logId, err) + return err + } + } + + return resourceTencentCloudTdmqRabbitmqVirtualHostRead(d, meta) +} + +func resourceTencentCloudTdmqRabbitmqVirtualHostDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rabbitmq_virtual_host.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + + instanceId := idSplit[0] + virtualHost := idSplit[1] + + if err := service.DeleteTdmqRabbitmqVirtualHostById(ctx, instanceId, virtualHost); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host_test.go b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host_test.go similarity index 80% rename from tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host_test.go rename to tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host_test.go index 6ed8257d24..d7a5b5b03d 100644 --- a/tencentcloud/resource_tc_tdmq_rabbitmq_virtual_host_test.go +++ b/tencentcloud/services/trabbit/resource_tc_tdmq_rabbitmq_virtual_host_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trabbit_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" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,10 +19,10 @@ func TestAccTencentCloudNeedFixTdmqRabbitmqVirtualHostResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, CheckDestroy: testAccCheckTdmqRabbitmqVirtualHostDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTdmqRabbitmqVirtualHost, @@ -47,16 +51,16 @@ func TestAccTencentCloudNeedFixTdmqRabbitmqVirtualHostResource_basic(t *testing. } func testAccCheckTdmqRabbitmqVirtualHostDestroy(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 := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rabbitmq_virtual_host" { continue } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } @@ -78,8 +82,8 @@ func testAccCheckTdmqRabbitmqVirtualHostDestroy(s *terraform.State) error { func testAccCheckTdmqRabbitmqVirtualHostExists(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 { @@ -89,8 +93,8 @@ func testAccCheckTdmqRabbitmqVirtualHostExists(re string) resource.TestCheckFunc return fmt.Errorf("tdcpg instance id is not set") } - service := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - ids := strings.Split(rs.Primary.ID, FILED_SP) + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_cluster.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster.go similarity index 93% rename from tencentcloud/data_source_tc_tdmq_rocketmq_cluster.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster.go index e2a819e042..c0e7531127 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_cluster.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" rocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqCluster() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqCluster() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRocketmqClusterRead, Schema: map[string]*schema.Schema{ @@ -192,11 +195,11 @@ func dataSourceTencentCloudTdmqRocketmqCluster() *schema.Resource { } func dataSourceTencentCloudRocketmqClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_rocketmq_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_rocketmq_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("id_keyword"); ok { @@ -217,13 +220,13 @@ func dataSourceTencentCloudRocketmqClusterRead(d *schema.ResourceData, meta inte paramMap["cluster_id_list"] = clusterIdList } - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var clusterList []*rocketmq.RocketMQClusterDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := service.DescribeRocketmqClusterByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterList = results return nil @@ -329,7 +332,7 @@ func dataSourceTencentCloudRocketmqClusterRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), clusterListList); e != nil { + if e := tccommon.WriteToFile(output.(string), clusterListList); e != nil { return e } } diff --git a/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster_test.go new file mode 100644 index 0000000000..885bacc130 --- /dev/null +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_cluster_test.go @@ -0,0 +1,39 @@ +package trocket_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTdmqRocketmqClusterDataSource -v +func TestAccTencentCloudTdmqRocketmqClusterDataSource(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceRocketmqCluster, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_cluster.example"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_cluster.example", "name_keyword"), + ), + }, + }, + }) +} + +const testAccDataSourceRocketmqCluster = ` +data "tencentcloud_tdmq_rocketmq_cluster" "example" { + name_keyword = tencentcloud_tdmq_rocketmq_cluster.example.cluster_name +} + +resource "tencentcloud_tdmq_rocketmq_cluster" "example" { + cluster_name = "tf_example" + remark = "remark." +} +` diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_group.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group.go similarity index 89% rename from tencentcloud/data_source_tc_tdmq_rocketmq_group.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group.go index 5068d8c37a..7413ac8592 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_group.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqGroup() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRocketmqGroupRead, Schema: map[string]*schema.Schema{ @@ -129,11 +132,11 @@ func dataSourceTencentCloudTdmqRocketmqGroup() *schema.Resource { } func dataSourceTencentCloudTdmqRocketmqGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmqRocketmq_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmqRocketmq_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("cluster_id"); ok { @@ -156,13 +159,13 @@ func dataSourceTencentCloudTdmqRocketmqGroupRead(d *schema.ResourceData, meta in paramMap["filter_one_group"] = v.(string) } - tdmqRocketmqService := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + tdmqRocketmqService := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groups []*tdmqRocketmq.RocketMQGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdmqRocketmqService.DescribeTdmqRocketmqGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groups = results return nil @@ -223,7 +226,7 @@ func dataSourceTencentCloudTdmqRocketmqGroupRead(d *schema.ResourceData, meta in 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_tdmq_rocketmq_group_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group_test.go similarity index 85% rename from tencentcloud/data_source_tc_tdmq_rocketmq_group_test.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group_test.go index c0ccfa3fed..1eac97c7e2 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_group_test.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTdmqRocketmqGroupDataSource(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: testAccDataSourceTdmqRocketmqGroup, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_group.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_group.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_group.example", "cluster_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_group.example", "namespace_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_group.example", "filter_group"), diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_messages.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_messages.go similarity index 86% rename from tencentcloud/data_source_tc_tdmq_rocketmq_messages.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_messages.go index ba87f22bc3..55d2a174a1 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_messages.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_messages.go @@ -1,15 +1,19 @@ -package tencentcloud +package trocket import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqMessages() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqMessages() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqMessageRead, Schema: map[string]*schema.Schema{ @@ -102,13 +106,13 @@ func dataSourceTencentCloudTdmqRocketmqMessages() *schema.Resource { } func dataSourceTencentCloudTdmqMessageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_rocketmq_messages.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_rocketmq_messages.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) msgDetail *tdmq.DescribeRocketMQMsgResponseParams clusterId string ) @@ -135,10 +139,10 @@ func dataSourceTencentCloudTdmqMessageRead(d *schema.ResourceData, meta interfac paramMap["QueryDlqMsg"] = helper.Bool(v.(bool)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqMessageByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } msgDetail = result @@ -199,7 +203,7 @@ func dataSourceTencentCloudTdmqMessageRead(d *schema.ResourceData, meta interfac 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/trocket/data_source_tc_tdmq_rocketmq_messages_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_messages_test.go new file mode 100644 index 0000000000..b79d7a7db0 --- /dev/null +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_messages_test.go @@ -0,0 +1,38 @@ +package trocket_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixTdmqRocketmqMessagesDataSource_basic -v +func TestAccTencentCloudNeedFixTdmqRocketmqMessagesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqMessageDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_messages.message"), + ), + }, + }, + }) +} + +const testAccTdmqMessageDataSource = ` +data "tencentcloud_tdmq_rocketmq_messages" "message" { + cluster_id = "rocketmq-rkrbm52djmro" + environment_id = "keep_ns" + topic_name = "keep-topic" + msg_id = "A9FE8D0567FE15DB97425FC08EEF0000" + query_dlq_msg = false +} +` diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_namespace.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace.go similarity index 83% rename from tencentcloud/data_source_tc_tdmq_rocketmq_namespace.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace.go index 1db53b91fc..34d34f8db5 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_namespace.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqNamespace() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqNamespace() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRocketmqNamespaceRead, Schema: map[string]*schema.Schema{ @@ -76,11 +79,11 @@ func dataSourceTencentCloudTdmqRocketmqNamespace() *schema.Resource { } func dataSourceTencentCloudTdmqRocketmqNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmqRocketmq_namespace.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmqRocketmq_namespace.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, ok := d.GetOk("cluster_id"); ok { @@ -91,13 +94,13 @@ func dataSourceTencentCloudTdmqRocketmqNamespaceRead(d *schema.ResourceData, met paramMap["name_keyword"] = v.(string) } - tdmqRocketmqService := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + tdmqRocketmqService := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ids := make([]string, 0) var namespaces []*tdmqRocketmq.RocketMQNamespace - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdmqRocketmqService.DescribeTdmqRocketmqNamespaceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } namespaces = results return nil @@ -136,7 +139,7 @@ func dataSourceTencentCloudTdmqRocketmqNamespaceRead(d *schema.ResourceData, met output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), namespaceList); e != nil { + if e := tccommon.WriteToFile(output.(string), namespaceList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_namespace_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace_test.go similarity index 80% rename from tencentcloud/data_source_tc_tdmq_rocketmq_namespace_test.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace_test.go index c1a5c337a5..6fe8ae2a98 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_namespace_test.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_namespace_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTdmqRocketmqNamespaceDataSource(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: testAccDataSourceTdmqRocketmqNamespace, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_namespace.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_namespace.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_namespace.example", "cluster_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_namespace.example", "name_keyword"), ), diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_role.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role.go similarity index 81% rename from tencentcloud/data_source_tc_tdmq_rocketmq_role.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role.go index 4a6b5d8a4d..be092025e3 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_role.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqRole() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqRole() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRocketmqRoleRead, Schema: map[string]*schema.Schema{ @@ -71,11 +74,11 @@ func dataSourceTencentCloudTdmqRocketmqRole() *schema.Resource { } func dataSourceTencentCloudTdmqRocketmqRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmqRocketmq_role.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmqRocketmq_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("role_name"); ok { @@ -86,13 +89,13 @@ func dataSourceTencentCloudTdmqRocketmqRoleRead(d *schema.ResourceData, meta int paramMap["cluster_id"] = v.(string) } - tdmqRocketmqService := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + tdmqRocketmqService := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var roleSets []*tdmqRocketmq.Role - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdmqRocketmqService.DescribeTdmqRocketmqRoleByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } roleSets = results return nil @@ -128,7 +131,7 @@ func dataSourceTencentCloudTdmqRocketmqRoleRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), roleSetList); e != nil { + if e := tccommon.WriteToFile(output.(string), roleSetList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_role_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role_test.go similarity index 77% rename from tencentcloud/data_source_tc_tdmq_rocketmq_role_test.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role_test.go index c4eb3aefc3..a5ba04e62a 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_role_test.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_role_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTdmqRocketmqRoleDataSource(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: testAccDataSourceTdmqRocketmqRole, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_role.role"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_role.role"), resource.TestCheckResourceAttr("data.tencentcloud_tdmq_rocketmq_role.role", "role_sets.#", "1"), ), }, diff --git a/tencentcloud/data_source_tc_tdmq_rocketmq_topic.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic.go similarity index 84% rename from tencentcloud/data_source_tc_tdmq_rocketmq_topic.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic.go index 7137a449d5..e7a307cd1e 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_topic.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqRocketmqTopic() *schema.Resource { +func DataSourceTencentCloudTdmqRocketmqTopic() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqRocketmqTopicRead, Schema: map[string]*schema.Schema{ @@ -86,11 +89,11 @@ func dataSourceTencentCloudTdmqRocketmqTopic() *schema.Resource { } func dataSourceTencentCloudTdmqRocketmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmqRocketmq_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmqRocketmq_topic.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, ok := d.GetOk("cluster_id"); ok { @@ -115,13 +118,13 @@ func dataSourceTencentCloudTdmqRocketmqTopicRead(d *schema.ResourceData, meta in paramMap["filter_name"] = v.(string) } - tdmqRocketmqService := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + tdmqRocketmqService := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var topics []*tdmqRocketmq.RocketMQTopic - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := tdmqRocketmqService.DescribeTdmqRocketmqTopicByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } topics = results return nil @@ -157,7 +160,7 @@ func dataSourceTencentCloudTdmqRocketmqTopicRead(d *schema.ResourceData, meta in 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_tdmq_rocketmq_topic_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic_test.go similarity index 84% rename from tencentcloud/data_source_tc_tdmq_rocketmq_topic_test.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic_test.go index 53f0b42a33..ba7af05858 100644 --- a/tencentcloud/data_source_tc_tdmq_rocketmq_topic_test.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_rocketmq_topic_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTdmqRocketmqTopicDataSource(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: testAccDataSourceTdmqRocketmqTopic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_topic.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_rocketmq_topic.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_topic.example", "cluster_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_topic.example", "namespace_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tdmq_rocketmq_topic.example", "filter_name"), diff --git a/tencentcloud/data_source_tc_tdmq_vip_instance.go b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance.go similarity index 94% rename from tencentcloud/data_source_tc_tdmq_vip_instance.go rename to tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance.go index dbc1131957..618a8ece4c 100644 --- a/tencentcloud/data_source_tc_tdmq_vip_instance.go +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance.go @@ -1,26 +1,19 @@ -/* -Use this data source to query detailed information of tdmq vip_instance - -Example Usage - -```hcl -data "tencentcloud_tdmq_vip_instance" "vip_instance" { - cluster_id = "rocketmq-rd3545bkkj49" -} -``` -*/ -package tencentcloud +package trocket import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTdmqVipInstance() *schema.Resource { +func DataSourceTencentCloudTdmqVipInstance() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTdmqVipInstanceRead, Schema: map[string]*schema.Schema{ @@ -240,13 +233,13 @@ func dataSourceTencentCloudTdmqVipInstance() *schema.Resource { } func dataSourceTencentCloudTdmqVipInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tdmq_vip_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tdmq_vip_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) vipInstance *tdmq.DescribeRocketMQVipInstanceDetailResponseParams ) @@ -255,10 +248,10 @@ func dataSourceTencentCloudTdmqVipInstanceRead(d *schema.ResourceData, meta inte paramMap["ClusterId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTdmqVipInstanceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -447,7 +440,7 @@ func dataSourceTencentCloudTdmqVipInstanceRead(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/services/trocket/data_source_tc_tdmq_vip_instance.md b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance.md new file mode 100644 index 0000000000..fabd043c05 --- /dev/null +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of tdmq vip_instance + +Example Usage + +```hcl +data "tencentcloud_tdmq_vip_instance" "vip_instance" { + cluster_id = "rocketmq-rd3545bkkj49" +} +``` diff --git a/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance_test.go b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance_test.go new file mode 100644 index 0000000000..7d8e9ddcc0 --- /dev/null +++ b/tencentcloud/services/trocket/data_source_tc_tdmq_vip_instance_test.go @@ -0,0 +1,33 @@ +package trocket_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentNeedFixCloudTdmqVipInstanceDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTdmqVipInstanceDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tdmq_vip_instance.vip_instance"), + ), + }, + }, + }) +} + +const testAccTdmqVipInstanceDataSource = ` +data "tencentcloud_tdmq_vip_instance" "vip_instance" { + cluster_id = "rocketmq-rd3545bkkj49" +} +` diff --git a/tencentcloud/extension_trocket.go b/tencentcloud/services/trocket/extension_trocket.go similarity index 77% rename from tencentcloud/extension_trocket.go rename to tencentcloud/services/trocket/extension_trocket.go index 9e5a8375fa..a6071bc7d6 100644 --- a/tencentcloud/extension_trocket.go +++ b/tencentcloud/services/trocket/extension_trocket.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket const ( ENDPOINT_TYPE_PUBLIC = "PUBLIC" diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_cluster.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster.go similarity index 77% rename from tencentcloud/resource_tc_tdmq_rocketmq_cluster.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster.go index 739e7ccf12..e9a0ddc7ff 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_cluster.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster.go @@ -1,17 +1,20 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRocketmqCluster() *schema.Resource { +func ResourceTencentCloudTdmqRocketmqCluster() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTdmqRocketmqClusterRead, Create: resourceTencentCloudTdmqRocketmqClusterCreate, @@ -105,11 +108,11 @@ func resourceTencentCloudTdmqRocketmqCluster() *schema.Resource { } func resourceTencentCloudTdmqRocketmqClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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 = tdmqRocketmq.NewCreateRocketMQClusterRequest() @@ -127,10 +130,10 @@ func resourceTencentCloudTdmqRocketmqClusterCreate(d *schema.ResourceData, meta request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRocketMQCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRocketMQCluster(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -145,8 +148,8 @@ func resourceTencentCloudTdmqRocketmqClusterCreate(d *schema.ResourceData, meta } clusterId = *response.Response.ClusterId - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + service := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, innerErr := service.DescribeTdmqRocketmqCluster(ctx, clusterId) if innerErr != nil { return resource.RetryableError(innerErr) @@ -163,13 +166,13 @@ func resourceTencentCloudTdmqRocketmqClusterCreate(d *schema.ResourceData, meta } func resourceTencentCloudTdmqRocketmqClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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) - service := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() @@ -244,10 +247,10 @@ func resourceTencentCloudTdmqRocketmqClusterRead(d *schema.ResourceData, meta in } func resourceTencentCloudTdmqRocketmqClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_cluster.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_cluster.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tdmqRocketmq.NewModifyRocketMQClusterRequest() @@ -269,10 +272,10 @@ func resourceTencentCloudTdmqRocketmqClusterUpdate(d *schema.ResourceData, meta } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQCluster(request) if e != nil { - return retryError(e) + return tccommon.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,13 +292,13 @@ func resourceTencentCloudTdmqRocketmqClusterUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTdmqRocketmqClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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 := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_cluster_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster_test.go similarity index 77% rename from tencentcloud/resource_tc_tdmq_rocketmq_cluster_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster_test.go index 6b470a6f14..6ce219978f 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_cluster_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_cluster_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_test import ( "context" @@ -6,6 +6,10 @@ import ( "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -15,8 +19,8 @@ func TestAccTencentCloudTdmqRocketmqClusterResource_basic(t *testing.T) { t.Parallel() terraformId := "tencentcloud_tdmq_rocketmq_cluster.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqClusterDestroy, Steps: []resource.TestStep{ { @@ -47,10 +51,10 @@ func TestAccTencentCloudTdmqRocketmqClusterResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqClusterDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_cluster" { continue @@ -77,8 +81,8 @@ func testAccCheckTdmqRocketmqClusterDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqClusterExists(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 { @@ -89,7 +93,7 @@ func testAccCheckTdmqRocketmqClusterExists(re string) resource.TestCheckFunc { } log.Printf("exist id: %v", rs.Primary.ID) - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) cluster, err := service.DescribeTdmqRocketmqCluster(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role.go new file mode 100644 index 0000000000..e0a2aba24b --- /dev/null +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role.go @@ -0,0 +1,228 @@ +package trocket + +import ( + "context" + "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" + tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqRocketmqEnvironmentRole() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTdmqRocketmqEnvironmentRoleRead, + Create: resourceTencentCloudTdmqRocketmqEnvironmentRoleCreate, + Update: resourceTencentCloudTdmqRocketmqEnvironmentRoleUpdate, + Delete: resourceTencentCloudTdmqRocketmqEnvironmentRoleDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "environment_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Environment (namespace) name.", + }, + + "role_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Role Name.", + }, + + "permissions": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Required: true, + Description: "Permissions, which is a non-empty string array of `produce` and `consume` at the most.", + }, + + "cluster_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Cluster ID (required).", + }, + }, + } +} + +func resourceTencentCloudTdmqRocketmqEnvironmentRoleCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tdmqRocketmq.NewCreateEnvironmentRoleRequest() + clusterId string + roleName string + environmentName string + ) + + if v, ok := d.GetOk("environment_name"); ok { + environmentName = v.(string) + request.EnvironmentId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("role_name"); ok { + roleName = v.(string) + request.RoleName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("permissions"); ok { + permissionsSet := v.(*schema.Set).List() + for i := range permissionsSet { + permissions := permissionsSet[i].(string) + request.Permissions = append(request.Permissions, &permissions) + } + } + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + request.ClusterId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateEnvironmentRole(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 tdmqRocketmq environmentRole failed, reason:%+v", logId, err) + return err + } + + d.SetId(clusterId + tccommon.FILED_SP + roleName + tccommon.FILED_SP + environmentName) + return resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + environmentName := idSplit[2] + + environmentRoles, err := service.DescribeTdmqRocketmqEnvironmentRole(ctx, clusterId, roleName, environmentName) + + if err != nil { + return err + } + + if len(environmentRoles) == 0 { + d.SetId("") + return fmt.Errorf("resource `environmentRole` %s does not exist", roleName) + } + environmentRole := environmentRoles[0] + _ = d.Set("environment_name", environmentRole.EnvironmentId) + _ = d.Set("role_name", environmentRole.RoleName) + permissions := make([]string, 0) + for _, i := range environmentRole.Permissions { + permissions = append(permissions, *i) + } + _ = d.Set("permissions", permissions) + _ = d.Set("cluster_id", clusterId) + + return nil +} + +func resourceTencentCloudTdmqRocketmqEnvironmentRoleUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tdmqRocketmq.NewModifyEnvironmentRoleRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + environmentId := idSplit[2] + + request.ClusterId = &clusterId + request.RoleName = &roleName + request.EnvironmentId = &environmentId + + if d.HasChange("permissions") { + if v, ok := d.GetOk("permissions"); ok { + permissionsSet := v.(*schema.Set).List() + for i := range permissionsSet { + permissions := permissionsSet[i].(string) + request.Permissions = append(request.Permissions, &permissions) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyEnvironmentRole(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 tdmqRocketmq environmentRole failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTdmqRocketmqEnvironmentRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqEnvironmentRoleDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_environment_role.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + environmentId := idSplit[2] + + if err := service.DeleteTdmqRocketmqEnvironmentRoleById(ctx, clusterId, roleName, environmentId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_environment_role_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role_test.go similarity index 82% rename from tencentcloud/resource_tc_tdmq_rocketmq_environment_role_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role_test.go index 04be536ea9..ae57831ab9 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_environment_role_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_environment_role_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_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" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -16,8 +20,8 @@ func TestAccTencentCloudTdmqRocketmqEnvironmentRoleResource_basic(t *testing.T) t.Parallel() terraformId := "tencentcloud_tdmq_rocketmq_environment_role.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqEnvironmentRoleDestroy, Steps: []resource.TestStep{ { @@ -45,15 +49,15 @@ func TestAccTencentCloudTdmqRocketmqEnvironmentRoleResource_basic(t *testing.T) } func testAccCheckTdmqRocketmqEnvironmentRoleDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_environment_role" { 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) } @@ -82,8 +86,8 @@ func testAccCheckTdmqRocketmqEnvironmentRoleDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqEnvironmentRoleExists(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 { @@ -93,7 +97,7 @@ func testAccCheckTdmqRocketmqEnvironmentRoleExists(re string) resource.TestCheck return fmt.Errorf("Rocketmq environment role 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) } @@ -101,7 +105,7 @@ func testAccCheckTdmqRocketmqEnvironmentRoleExists(re string) resource.TestCheck roleName := idSplit[1] environmentName := idSplit[2] - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) environmentRoles, err := service.DescribeTdmqRocketmqEnvironmentRole(ctx, clusterId, roleName, environmentName) if err != nil { diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_group.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group.go similarity index 79% rename from tencentcloud/resource_tc_tdmq_rocketmq_group.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group.go index c755289a14..5a97131375 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_group.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRocketmqGroup() *schema.Resource { +func ResourceTencentCloudTdmqRocketmqGroup() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTdmqRocketmqGroupRead, Create: resourceTencentCloudTdmqRocketmqGroupCreate, @@ -119,10 +122,10 @@ func resourceTencentCloudTdmqRocketmqGroup() *schema.Resource { } func resourceTencentCloudTdmqRocketmqGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tdmqRocketmq.NewCreateRocketMQGroupRequest() @@ -158,10 +161,10 @@ func resourceTencentCloudTdmqRocketmqGroupCreate(d *schema.ResourceData, meta in request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRocketMQGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRocketMQGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -174,20 +177,20 @@ func resourceTencentCloudTdmqRocketmqGroupCreate(d *schema.ResourceData, meta in return err } - d.SetId(clusterId + FILED_SP + namespaceName + FILED_SP + groupName) + d.SetId(clusterId + tccommon.FILED_SP + namespaceName + tccommon.FILED_SP + groupName) return resourceTencentCloudTdmqRocketmqGroupRead(d, meta) } func resourceTencentCloudTdmqRocketmqGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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 := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{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()) } @@ -226,14 +229,14 @@ func resourceTencentCloudTdmqRocketmqGroupRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTdmqRocketmqGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tdmqRocketmq.NewModifyRocketMQGroupRequest() - 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()) } @@ -263,10 +266,10 @@ func resourceTencentCloudTdmqRocketmqGroupUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -283,15 +286,15 @@ func resourceTencentCloudTdmqRocketmqGroupUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTdmqRocketmqGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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 := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{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()) } diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_group_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group_test.go similarity index 76% rename from tencentcloud/resource_tc_tdmq_rocketmq_group_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group_test.go index bae198a5ae..40298a4bf2 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_group_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_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" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -16,8 +20,8 @@ func TestAccTencentCloudTdmqRocketmqGroupResource_basic(t *testing.T) { t.Parallel() terraformId := "tencentcloud_tdmq_rocketmq_group.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqGroupDestroy, Steps: []resource.TestStep{ { @@ -39,15 +43,15 @@ func TestAccTencentCloudTdmqRocketmqGroupResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqGroupDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_group" { 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) } @@ -76,8 +80,8 @@ func testAccCheckTdmqRocketmqGroupDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqGroupExists(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,7 +91,7 @@ func testAccCheckTdmqRocketmqGroupExists(re string) resource.TestCheckFunc { return fmt.Errorf("Rocketmq group 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) } @@ -95,7 +99,7 @@ func testAccCheckTdmqRocketmqGroupExists(re string) resource.TestCheckFunc { namespaceName := idSplit[1] groupName := idSplit[2] - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) groupList, err := service.DescribeTdmqRocketmqGroup(ctx, clusterId, namespaceName, groupName) if err != nil { diff --git a/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace.go new file mode 100644 index 0000000000..104227356c --- /dev/null +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace.go @@ -0,0 +1,228 @@ +package trocket + +import ( + "context" + "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" + tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqRocketmqNamespace() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTdmqRocketmqNamespaceRead, + Create: resourceTencentCloudTdmqRocketmqNamespaceCreate, + Update: resourceTencentCloudTdmqRocketmqNamespaceUpdate, + Delete: resourceTencentCloudTdmqRocketmqNamespaceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "Cluster ID.", + }, + + "namespace_name": { + Type: schema.TypeString, + Required: true, + Description: "Namespace name, which can contain 3-64 letters, digits, hyphens, and underscores.", + }, + + "ttl": { + Type: schema.TypeInt, + Optional: true, + Deprecated: "It has been deprecated from version 1.81.20. Due to the adjustment of RocketMQ, the creation or modification of this parameter will be ignored.", + Description: "Retention time of unconsumed messages in milliseconds. Value range: 60 seconds-15 days.", + }, + + "retention_time": { + Type: schema.TypeInt, + Optional: true, + Deprecated: "It has been deprecated from version 1.81.20. Due to the adjustment of RocketMQ, the creation or modification of this parameter will be ignored.", + Description: "Retention time of persisted messages in milliseconds.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remarks (up to 128 characters).", + }, + + "public_endpoint": { + Type: schema.TypeString, + Computed: true, + Description: "Public network access point address.", + }, + + "vpc_endpoint": { + Type: schema.TypeString, + Computed: true, + Description: "VPC access point address.", + }, + }, + } +} + +func resourceTencentCloudTdmqRocketmqNamespaceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_namespace.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + var ( + request = tdmqRocketmq.NewCreateRocketMQNamespaceRequest() + namespaceName string + clusterId string + ) + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + request.ClusterId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("namespace_name"); ok { + namespaceName = v.(string) + request.NamespaceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRocketMQNamespace(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 tdmqRocketmq namespace failed, reason:%+v", logId, err) + return err + } + d.SetId(clusterId + tccommon.FILED_SP + namespaceName) + return resourceTencentCloudTdmqRocketmqNamespaceRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqNamespaceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_namespace.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + namespaceName := idSplit[1] + + namespaceList, err := service.DescribeTdmqRocketmqNamespace(ctx, namespaceName, clusterId) + + if err != nil || len(namespaceList) == 0 { + return err + } + namespace := namespaceList[0] + if namespace == nil { + d.SetId("") + return fmt.Errorf("resource `namespace` %s does not exist", namespaceName) + } + + _ = d.Set("cluster_id", clusterId) + _ = d.Set("namespace_name", *namespace.NamespaceId) + _ = d.Set("remark", namespace.Remark) + _ = d.Set("public_endpoint", namespace.PublicEndpoint) + _ = d.Set("vpc_endpoint", namespace.VpcEndpoint) + + return nil +} + +func resourceTencentCloudTdmqRocketmqNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_namespace.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tdmqRocketmq.NewModifyRocketMQNamespaceRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + namespaceName := idSplit[1] + + request.NamespaceId = &namespaceName + request.ClusterId = &clusterId + + immutableArgs := []string{"cluster_id", "namespace_name"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("remark") { + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQNamespace(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 tdmqRocketmq namespace failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTdmqRocketmqNamespaceRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqNamespaceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_namespace.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + namespaceName := idSplit[1] + + if err := service.DeleteTdmqRocketmqNamespaceById(ctx, namespaceName, clusterId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_namespace_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace_test.go similarity index 77% rename from tencentcloud/resource_tc_tdmq_rocketmq_namespace_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace_test.go index 109b14cc3f..1a8f43eef5 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_namespace_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_namespace_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_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" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -17,8 +21,8 @@ func TestAccTencentCloudTdmqRocketmqNamespaceResource_basic(t *testing.T) { terraformId := "tencentcloud_tdmq_rocketmq_namespace.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqNamespaceDestroy, Steps: []resource.TestStep{ { @@ -45,15 +49,15 @@ func TestAccTencentCloudTdmqRocketmqNamespaceResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqNamespaceDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_namespace" { 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) } @@ -79,8 +83,8 @@ func testAccCheckTdmqRocketmqNamespaceDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqNamespaceExists(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 { @@ -90,13 +94,13 @@ func testAccCheckTdmqRocketmqNamespaceExists(re string) resource.TestCheckFunc { return fmt.Errorf("Rocketmq namespace 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) } clusterId := idSplit[0] namespaceName := idSplit[1] - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) namespaces, err := service.DescribeTdmqRocketmqNamespace(ctx, namespaceName, clusterId) if err != nil { return err diff --git a/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role.go new file mode 100644 index 0000000000..f158c1c0f8 --- /dev/null +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role.go @@ -0,0 +1,228 @@ +package trocket + +import ( + "context" + "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" + tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTdmqRocketmqRole() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudTdmqRocketmqRoleRead, + Create: resourceTencentCloudTdmqRocketmqRoleCreate, + Update: resourceTencentCloudTdmqRocketmqRoleUpdate, + Delete: resourceTencentCloudTdmqRocketmqRoleDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "role_name": { + Type: schema.TypeString, + Required: true, + Description: "Role name, which can contain up to 32 letters, digits, hyphens, and underscores.", + }, + + "remark": { + Type: schema.TypeString, + Optional: true, + Description: "Remarks (up to 128 characters).", + }, + + "cluster_id": { + Type: schema.TypeString, + Required: true, + Description: "Cluster ID (required).", + }, + + "token": { + Type: schema.TypeString, + Computed: true, + Description: "Value of the role token.", + }, + + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Creation time.", + }, + + "update_time": { + Type: schema.TypeString, + Computed: true, + Description: "Update time.", + }, + }, + } +} + +func resourceTencentCloudTdmqRocketmqRoleCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_role.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tdmqRocketmq.NewCreateRoleRequest() + clusterId string + roleName string + ) + + if v, ok := d.GetOk("role_name"); ok { + roleName = v.(string) + request.RoleName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("remark"); ok { + + request.Remark = helper.String(v.(string)) + } + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + request.ClusterId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRole(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 tdmqRocketmq role failed, reason:%+v", logId, err) + return err + } + + d.SetId(clusterId + tccommon.FILED_SP + roleName) + return resourceTencentCloudTdmqRocketmqRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqRoleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_role.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + + role, err := service.DescribeTdmqRocketmqRole(ctx, clusterId, roleName) + + if err != nil { + return err + } + + if role == nil { + d.SetId("") + return fmt.Errorf("resource `role` %s does not exist", roleName) + } + + _ = d.Set("role_name", role.RoleName) + _ = d.Set("remark", role.Remark) + _ = d.Set("cluster_id", clusterId) + _ = d.Set("token", role.Token) + _ = d.Set("create_time", role.CreateTime) + _ = d.Set("update_time", role.UpdateTime) + + return nil +} + +func resourceTencentCloudTdmqRocketmqRoleUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_role.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tdmqRocketmq.NewModifyRoleRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + + request.ClusterId = &clusterId + request.RoleName = &roleName + + if d.HasChange("role_name") { + + return fmt.Errorf("`role_name` do not support change now.") + + } + + if d.HasChange("remark") { + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + } + + if d.HasChange("cluster_id") { + + return fmt.Errorf("`cluster_id` do not support change now.") + + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRole(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 tdmqRocketmq role failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTdmqRocketmqRoleRead(d, meta) +} + +func resourceTencentCloudTdmqRocketmqRoleDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_role.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TdmqRocketmqService{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()) + } + clusterId := idSplit[0] + roleName := idSplit[1] + + if err := service.DeleteTdmqRocketmqRoleById(ctx, clusterId, roleName); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_role_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role_test.go similarity index 77% rename from tencentcloud/resource_tc_tdmq_rocketmq_role_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role_test.go index 16762ee43b..3162a9a8e6 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_role_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_role_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_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" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -17,8 +21,8 @@ func TestAccTencentCloudTdmqRocketmqRoleResource_basic(t *testing.T) { terraformId := "tencentcloud_tdmq_rocketmq_role.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqRoleDestroy, Steps: []resource.TestStep{ { @@ -47,15 +51,15 @@ func TestAccTencentCloudTdmqRocketmqRoleResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqRoleDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_role" { 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) } @@ -81,8 +85,8 @@ func testAccCheckTdmqRocketmqRoleDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqRoleExists(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 { @@ -92,13 +96,13 @@ func testAccCheckTdmqRocketmqRoleExists(re string) resource.TestCheckFunc { return fmt.Errorf("Rocketmq role 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) } clusterId := idSplit[0] roleName := idSplit[1] - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) role, err := service.DescribeTdmqRocketmqRole(ctx, clusterId, roleName) if err != nil { diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_topic.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic.go similarity index 75% rename from tencentcloud/resource_tc_tdmq_rocketmq_topic.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic.go index 706e560ee5..132a5df202 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_topic.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket 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" tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRocketmqTopic() *schema.Resource { +func ResourceTencentCloudTdmqRocketmqTopic() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudTdmqRocketmqTopicRead, Create: resourceTencentCloudTdmqRocketmqTopicCreate, @@ -75,10 +78,10 @@ func resourceTencentCloudTdmqRocketmqTopic() *schema.Resource { } func resourceTencentCloudTdmqRocketmqTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_topic.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_topic.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tdmqRocketmq.NewCreateRocketMQTopicRequest() @@ -117,10 +120,10 @@ func resourceTencentCloudTdmqRocketmqTopicCreate(d *schema.ResourceData, meta in request.PartitionNum = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRocketMQTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRocketMQTopic(request) if e != nil { - return retryError(e) + return tccommon.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,20 +136,20 @@ func resourceTencentCloudTdmqRocketmqTopicCreate(d *schema.ResourceData, meta in return err } - d.SetId(clusterId + FILED_SP + namespaceName + FILED_SP + topicType + FILED_SP + topicName) + d.SetId(clusterId + tccommon.FILED_SP + namespaceName + tccommon.FILED_SP + topicType + tccommon.FILED_SP + topicName) return resourceTencentCloudTdmqRocketmqTopicRead(d, meta) } func resourceTencentCloudTdmqRocketmqTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_topic.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 := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{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()) } @@ -180,14 +183,14 @@ func resourceTencentCloudTdmqRocketmqTopicRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTdmqRocketmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_topic.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_topic.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tdmqRocketmq.NewModifyRocketMQTopicRequest() - 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()) } @@ -237,10 +240,10 @@ func resourceTencentCloudTdmqRocketmqTopicUpdate(d *schema.ResourceData, meta in } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQTopic(request) if e != nil { - return retryError(e) + return tccommon.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,15 +260,15 @@ func resourceTencentCloudTdmqRocketmqTopicUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTdmqRocketmqTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmqRocketmq_topic.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmqRocketmq_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 := TdmqRocketmqService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TdmqRocketmqService{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_tdmq_rocketmq_topic_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic_test.go similarity index 76% rename from tencentcloud/resource_tc_tdmq_rocketmq_topic_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic_test.go index 505e27a17d..4af6e59146 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_topic_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_topic_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket_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" + svctrocket "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/trocket" + "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" @@ -16,8 +20,8 @@ func TestAccTencentCloudTdmqRocketmqTopicResource_basic(t *testing.T) { t.Parallel() terraformId := "tencentcloud_tdmq_rocketmq_topic.example" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTdmqRocketmqTopicDestroy, Steps: []resource.TestStep{ { @@ -38,15 +42,15 @@ func TestAccTencentCloudTdmqRocketmqTopicResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqTopicDestroy(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 := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_topic" { 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("id is broken,%s", rs.Primary.ID) } @@ -75,8 +79,8 @@ func testAccCheckTdmqRocketmqTopicDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqTopicExists(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 { @@ -86,7 +90,7 @@ func testAccCheckTdmqRocketmqTopicExists(re string) resource.TestCheckFunc { return fmt.Errorf("Rocketmq topic 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("id is broken,%s", rs.Primary.ID) } @@ -94,7 +98,7 @@ func testAccCheckTdmqRocketmqTopicExists(re string) resource.TestCheckFunc { namespaceName := idSplit[1] topicName := idSplit[3] - service := TdmqRocketmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctrocket.NewTdmqRocketmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) topicList, err := service.DescribeTdmqRocketmqTopic(ctx, clusterId, namespaceName, topicName) if err != nil { diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_vip_instance.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance.go similarity index 75% rename from tencentcloud/resource_tc_tdmq_rocketmq_vip_instance.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance.go index 45429e25d9..499b544760 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_vip_instance.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package trocket import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqRocketmqVipInstance() *schema.Resource { +func ResourceTencentCloudTdmqRocketmqVipInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTdmqRocketmqVipInstanceCreate, Read: resourceTencentCloudTdmqRocketmqVipInstanceRead, @@ -33,13 +37,13 @@ func resourceTencentCloudTdmqRocketmqVipInstance() *schema.Resource { "node_count": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(2, 20), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 20), Description: "Number of nodes, minimum 2, maximum 20.", }, "storage_size": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(200), + ValidateFunc: tccommon.ValidateIntegerMin(200), Description: "Single node storage space, in GB, minimum 200GB.", }, "zone_ids": { @@ -78,13 +82,13 @@ func resourceTencentCloudTdmqRocketmqVipInstance() *schema.Resource { } func resourceTencentCloudTdmqRocketmqVipInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = tdmq.NewCreateRocketMQVipInstanceRequest() response = tdmq.NewCreateRocketMQVipInstanceResponse() clusterId string @@ -129,10 +133,10 @@ func resourceTencentCloudTdmqRocketmqVipInstanceCreate(d *schema.ResourceData, m request.TimeSpan = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().CreateRocketMQVipInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().CreateRocketMQVipInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -149,14 +153,14 @@ func resourceTencentCloudTdmqRocketmqVipInstanceCreate(d *schema.ResourceData, m clusterId = *response.Response.ClusterId // wait - err = resource.Retry(readRetryTimeout*10, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { result, e := service.DescribeTdmqRocketmqVipInstancesByFilter(ctx, clusterId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } - if *result.Status == RocketMqVipInsSuccess { + if *result.Status == svctdmq.RocketMqVipInsSuccess { return nil - } else if *result.Status == RocketMqVipInsRunning { + } else if *result.Status == svctdmq.RocketMqVipInsRunning { return resource.RetryableError(fmt.Errorf("tdmq rocketmqVipInstance status is running")) } else { e = fmt.Errorf("tdmq rocketmqVipInstance status illegal") @@ -174,13 +178,13 @@ func resourceTencentCloudTdmqRocketmqVipInstanceCreate(d *schema.ResourceData, m } func resourceTencentCloudTdmqRocketmqVipInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterId = d.Id() ) @@ -248,13 +252,13 @@ func resourceTencentCloudTdmqRocketmqVipInstanceRead(d *schema.ResourceData, met } func resourceTencentCloudTdmqRocketmqVipInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = tdmq.NewModifyRocketMQInstanceSpecRequest() clusterId = d.Id() ) @@ -287,10 +291,10 @@ func resourceTencentCloudTdmqRocketmqVipInstanceUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQInstanceSpec(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQInstanceSpec(request) if e != nil { - return retryError(e) + return tccommon.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 +310,14 @@ func resourceTencentCloudTdmqRocketmqVipInstanceUpdate(d *schema.ResourceData, m time.Sleep(20 * time.Second) // wait - err = resource.Retry(readRetryTimeout*10, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*10, func() *resource.RetryError { result, e := service.DescribeTdmqRocketmqVipInstancesByFilter(ctx, clusterId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } - if *result.Status == RocketMqVipInsSuccess { + if *result.Status == svctdmq.RocketMqVipInsSuccess { return nil - } else if *result.Status == RocketMqVipInsUpdate { + } else if *result.Status == svctdmq.RocketMqVipInsUpdate { return resource.RetryableError(fmt.Errorf("tdmq rocketmqVipInstance status is updating")) } else { e = fmt.Errorf("tdmq rocketmqVipInstance status illegal") @@ -335,10 +339,10 @@ func resourceTencentCloudTdmqRocketmqVipInstanceUpdate(d *schema.ResourceData, m } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().ModifyRocketMQCluster(clusterRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().ModifyRocketMQCluster(clusterRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -356,13 +360,13 @@ func resourceTencentCloudTdmqRocketmqVipInstanceUpdate(d *schema.ResourceData, m } func resourceTencentCloudTdmqRocketmqVipInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_rocketmq_vip_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = TdmqService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svctdmq.NewTdmqService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) clusterId = d.Id() ) diff --git a/tencentcloud/resource_tc_tdmq_rocketmq_vip_instance_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance_test.go similarity index 77% rename from tencentcloud/resource_tc_tdmq_rocketmq_vip_instance_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance_test.go index 4feb66f115..c157ed0808 100644 --- a/tencentcloud/resource_tc_tdmq_rocketmq_vip_instance_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_rocketmq_vip_instance_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package trocket_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctdmq "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tdmq" + "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" @@ -15,10 +19,10 @@ func TestAccTencentCloudTdmqRocketmqVipInstanceResource_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) }, CheckDestroy: testAccCheckTdmqRocketmqVipInstanceDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTdmqRocketmqVipInstance, @@ -39,9 +43,9 @@ func TestAccTencentCloudTdmqRocketmqVipInstanceResource_basic(t *testing.T) { } func testAccCheckTdmqRocketmqVipInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tdmq_rocketmq_vip_instance" { continue @@ -66,15 +70,15 @@ func testAccCheckTdmqRocketmqVipInstanceDestroy(s *terraform.State) error { func testAccCheckTdmqRocketmqVipInstanceExists(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 := TdmqService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctdmq.NewTdmqService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTdmqRocketmqVipInstanceById(ctx, rs.Primary.ID) if err != nil { return err @@ -88,7 +92,7 @@ func testAccCheckTdmqRocketmqVipInstanceExists(r string) resource.TestCheckFunc } } -const testAccTdmqRocketmqVipInstance = defaultVpcSubnets + ` +const testAccTdmqRocketmqVipInstance = tcacctest.DefaultVpcSubnets + ` data "tencentcloud_availability_zones" "zones" {} resource "tencentcloud_tdmq_rocketmq_vip_instance" "example" { diff --git a/tencentcloud/resource_tc_tdmq_send_rocketmq_message.go b/tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message.go similarity index 79% rename from tencentcloud/resource_tc_tdmq_send_rocketmq_message.go rename to tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message.go index e88dd17af7..29873dd0b9 100644 --- a/tencentcloud/resource_tc_tdmq_send_rocketmq_message.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message.go @@ -1,16 +1,19 @@ -package tencentcloud +package trocket 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" tdmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTdmqSendRocketmqMessage() *schema.Resource { +func ResourceTencentCloudTdmqSendRocketmqMessage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTdmqSendRocketmqMessageCreate, Read: resourceTencentCloudTdmqSendRocketmqMessageRead, @@ -58,11 +61,11 @@ func resourceTencentCloudTdmqSendRocketmqMessage() *schema.Resource { } func resourceTencentCloudTdmqSendRocketmqMessageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = tdmq.NewSendRocketMQMessageRequest() clusterId string ) @@ -92,10 +95,10 @@ func resourceTencentCloudTdmqSendRocketmqMessageCreate(d *schema.ResourceData, m request.MsgTag = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTdmqClient().SendRocketMQMessage(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTdmqClient().SendRocketMQMessage(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -124,15 +127,15 @@ func resourceTencentCloudTdmqSendRocketmqMessageCreate(d *schema.ResourceData, m } func resourceTencentCloudTdmqSendRocketmqMessageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudTdmqSendRocketmqMessageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tdmq_send_rocketmq_message.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tdmq_send_rocketmq_message_test.go b/tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message_test.go similarity index 88% rename from tencentcloud/resource_tc_tdmq_send_rocketmq_message_test.go rename to tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message_test.go index 518b442d08..2b3ac3adbf 100644 --- a/tencentcloud/resource_tc_tdmq_send_rocketmq_message_test.go +++ b/tencentcloud/services/trocket/resource_tc_tdmq_send_rocketmq_message_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudNeedFixTdmqSendRocketmqMessageResource_basic(t *testing. 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: testAccTdmqSendRocketmqMessage, diff --git a/tencentcloud/resource_tc_trocket_rocketmq_consumer_group.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group.go similarity index 76% rename from tencentcloud/resource_tc_trocket_rocketmq_consumer_group.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group.go index 10b86ca239..c70a662aac 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_consumer_group.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket 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" trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTrocketRocketmqConsumerGroup() *schema.Resource { +func ResourceTencentCloudTrocketRocketmqConsumerGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTrocketRocketmqConsumerGroupCreate, Read: resourceTencentCloudTrocketRocketmqConsumerGroupRead, @@ -64,10 +67,10 @@ func resourceTencentCloudTrocketRocketmqConsumerGroup() *schema.Resource { } func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = trocket.NewCreateConsumerGroupRequest() @@ -99,10 +102,10 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().CreateConsumerGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().CreateConsumerGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -116,22 +119,22 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupCreate(d *schema.ResourceDa instanceId = *response.Response.InstanceId consumerGroup = *response.Response.ConsumerGroup - d.SetId(instanceId + FILED_SP + consumerGroup) + d.SetId(instanceId + tccommon.FILED_SP + consumerGroup) return resourceTencentCloudTrocketRocketmqConsumerGroupRead(d, meta) } func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TrocketService{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()) } @@ -172,14 +175,14 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupRead(d *schema.ResourceData } func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := trocket.NewModifyConsumerGroupRequest() - 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()) } @@ -216,10 +219,10 @@ func resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceDa request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().ModifyConsumerGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyConsumerGroup(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudTrocketRocketmqConsumerGroupUpdate(d *schema.ResourceDa } func resourceTencentCloudTrocketRocketmqConsumerGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_consumer_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TrocketService{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_trocket_rocketmq_consumer_group_test.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group_test.go similarity index 95% rename from tencentcloud/resource_tc_trocket_rocketmq_consumer_group_test.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group_test.go index a2b8da1851..6a40774c36 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_consumer_group_test.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_consumer_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTrocketRocketmqConsumerGroupResource_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: testAccTrocketRocketmqConsumerGroup, diff --git a/tencentcloud/resource_tc_trocket_rocketmq_instance.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance.go similarity index 76% rename from tencentcloud/resource_tc_trocket_rocketmq_instance.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance.go index 6368d1c237..e934c1bd7b 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_instance.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package trocket import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -10,10 +13,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTrocketRocketmqInstance() *schema.Resource { +func ResourceTencentCloudTrocketRocketmqInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTrocketRocketmqInstanceCreate, Read: resourceTencentCloudTrocketRocketmqInstanceRead, @@ -128,11 +132,11 @@ func resourceTencentCloudTrocketRocketmqInstance() *schema.Resource { } func resourceTencentCloudTrocketRocketmqInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 = trocket.NewCreateInstanceRequest() response = trocket.NewCreateInstanceResponse() @@ -197,10 +201,10 @@ func resourceTencentCloudTrocketRocketmqInstanceCreate(d *schema.ResourceData, m request.MessageRetention = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().CreateInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().CreateInstance(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -213,15 +217,15 @@ func resourceTencentCloudTrocketRocketmqInstanceCreate(d *schema.ResourceData, m } instanceId = *response.Response.InstanceId - service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"RUNNING"}, 10*readRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(instanceId, []string{})) + service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"RUNNING"}, 10*tccommon.ReadRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::trocket:%s:uin/:instance/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -234,14 +238,14 @@ func resourceTencentCloudTrocketRocketmqInstanceCreate(d *schema.ResourceData, m } func resourceTencentCloudTrocketRocketmqInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -314,8 +318,8 @@ func resourceTencentCloudTrocketRocketmqInstanceRead(d *schema.ResourceData, met _ = d.Set("message_retention", rocketmqInstance.MessageRetention) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) tags, err := tagService.DescribeResourceTags(ctx, "trocket", "instance", tcClient.Region, instanceId) if err != nil { return err @@ -327,11 +331,11 @@ func resourceTencentCloudTrocketRocketmqInstanceRead(d *schema.ResourceData, met } func resourceTencentCloudTrocketRocketmqInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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) request := trocket.NewModifyInstanceRequest() instanceId := d.Id() @@ -370,10 +374,10 @@ func resourceTencentCloudTrocketRocketmqInstanceUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().ModifyInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().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()) } @@ -384,18 +388,18 @@ func resourceTencentCloudTrocketRocketmqInstanceUpdate(d *schema.ResourceData, m return err } - service := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"RUNNING"}, 10*readRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(instanceId, []string{})) + service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"RUNNING"}, 10*tccommon.ReadRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("trocket", "instance", tcClient.Region, instanceId) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("trocket", "instance", tcClient.Region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -404,19 +408,19 @@ func resourceTencentCloudTrocketRocketmqInstanceUpdate(d *schema.ResourceData, m } func resourceTencentCloudTrocketRocketmqInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TrocketService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() if err := service.DeleteTrocketRocketmqInstanceById(ctx, instanceId); err != nil { return err } - conf := BuildStateChangeConf([]string{}, []string{""}, 10*readRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{""}, 10*tccommon.ReadRetryTimeout, time.Second, service.TrocketRocketmqInstanceStateRefreshFunc(d.Id(), []string{})) if _, err := conf.WaitForState(); err != nil { if sdkerr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { diff --git a/tencentcloud/resource_tc_trocket_rocketmq_instance_test.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance_test.go similarity index 92% rename from tencentcloud/resource_tc_trocket_rocketmq_instance_test.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance_test.go index b39c73e072..ea41e14867 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_instance_test.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_instance_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package trocket_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudTrocketRocketmqInstanceResource_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: testAccTrocketRocketmqInstance, @@ -48,8 +50,8 @@ func TestAccTencentCloudTrocketRocketmqInstanceResource_basic(t *testing.T) { func TestAccTencentCloudTrocketRocketmqInstanceResource_enablePublic(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: testAccTrocketRocketmqInstancePublic, diff --git a/tencentcloud/resource_tc_trocket_rocketmq_role.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role.go similarity index 76% rename from tencentcloud/resource_tc_trocket_rocketmq_role.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role.go index ed29680efc..b3366d38b1 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_role.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role.go @@ -1,4 +1,4 @@ -package tencentcloud +package trocket 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" trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTrocketRocketmqRole() *schema.Resource { +func ResourceTencentCloudTrocketRocketmqRole() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTrocketRocketmqRoleCreate, Read: resourceTencentCloudTrocketRocketmqRoleRead, @@ -82,10 +85,10 @@ func resourceTencentCloudTrocketRocketmqRole() *schema.Resource { } func resourceTencentCloudTrocketRocketmqRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_role.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = trocket.NewCreateRoleRequest() @@ -114,10 +117,10 @@ func resourceTencentCloudTrocketRocketmqRoleCreate(d *schema.ResourceData, meta request.PermRead = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().CreateRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().CreateRole(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudTrocketRocketmqRoleCreate(d *schema.ResourceData, meta } role = *response.Response.Role - d.SetId(instanceId + FILED_SP + role) + d.SetId(instanceId + tccommon.FILED_SP + role) return resourceTencentCloudTrocketRocketmqRoleRead(d, meta) } func resourceTencentCloudTrocketRocketmqRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_role.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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TrocketService{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()) } @@ -198,14 +201,14 @@ func resourceTencentCloudTrocketRocketmqRoleRead(d *schema.ResourceData, meta in } func resourceTencentCloudTrocketRocketmqRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_role.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := trocket.NewModifyRoleRequest() - 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,10 +240,10 @@ func resourceTencentCloudTrocketRocketmqRoleUpdate(d *schema.ResourceData, meta request.PermRead = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTrocketClient().ModifyRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyRole(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -255,14 +258,14 @@ func resourceTencentCloudTrocketRocketmqRoleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTrocketRocketmqRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_trocket_rocketmq_role.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_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 := TrocketService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TrocketService{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_trocket_rocketmq_role_test.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role_test.go similarity index 94% rename from tencentcloud/resource_tc_trocket_rocketmq_role_test.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role_test.go index 03cfdc26b1..0570c88394 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_role_test.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_role_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTrocketRocketmqRoleResource_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: testAccTrocketRocketmqRole, diff --git a/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic.go new file mode 100644 index 0000000000..94c8ea3028 --- /dev/null +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic.go @@ -0,0 +1,236 @@ +package trocket + +import ( + "context" + "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" + trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTrocketRocketmqTopic() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTrocketRocketmqTopicCreate, + Read: resourceTencentCloudTrocketRocketmqTopicRead, + Update: resourceTencentCloudTrocketRocketmqTopicUpdate, + Delete: resourceTencentCloudTrocketRocketmqTopicDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "Instance Id.", + }, + + "topic": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "topic.", + }, + + "topic_type": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Topic type. `UNSPECIFIED`: not specified, `NORMAL`: normal message, `FIFO`: sequential message, `DELAY`: delayed message.", + }, + + "queue_num": { + Required: true, + Type: schema.TypeInt, + Description: "Number of queue. Must be greater than or equal to 3.", + }, + + "remark": { + Optional: true, + Type: schema.TypeString, + Description: "remark.", + }, + }, + } +} + +func resourceTencentCloudTrocketRocketmqTopicCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = trocket.NewCreateTopicRequest() + response = trocket.NewCreateTopicResponse() + instanceId string + topic string + ) + if v, ok := d.GetOk("instance_id"); ok { + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("topic"); ok { + request.Topic = helper.String(v.(string)) + } + + if v, ok := d.GetOk("topic_type"); ok { + request.TopicType = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("queue_num"); ok { + request.QueueNum = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().CreateTopic(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 trocket rocketmqTopic failed, reason:%+v", logId, err) + return err + } + + instanceId = *response.Response.InstanceId + topic = *response.Response.Topic + d.SetId(instanceId + tccommon.FILED_SP + topic) + + return resourceTencentCloudTrocketRocketmqTopicRead(d, meta) +} + +func resourceTencentCloudTrocketRocketmqTopicRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TrocketService{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()) + } + instanceId := idSplit[0] + topic := idSplit[1] + + rocketmqTopic, err := service.DescribeTrocketRocketmqTopicById(ctx, instanceId, topic) + if err != nil { + return err + } + + if rocketmqTopic == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TrocketRocketmqTopic` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if rocketmqTopic.InstanceId != nil { + _ = d.Set("instance_id", rocketmqTopic.InstanceId) + } + + if rocketmqTopic.Topic != nil { + _ = d.Set("topic", rocketmqTopic.Topic) + } + + if rocketmqTopic.TopicType != nil { + _ = d.Set("topic_type", rocketmqTopic.TopicType) + } + + if rocketmqTopic.QueueNum != nil { + _ = d.Set("queue_num", rocketmqTopic.QueueNum) + } + + if rocketmqTopic.Remark != nil { + _ = d.Set("remark", rocketmqTopic.Remark) + } + + return nil +} + +func resourceTencentCloudTrocketRocketmqTopicUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := trocket.NewModifyTopicRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + instanceId := idSplit[0] + topic := idSplit[1] + + request.InstanceId = &instanceId + request.Topic = &topic + + if d.HasChange("queue_num") { + if v, ok := d.GetOkExists("queue_num"); ok { + request.QueueNum = helper.IntInt64(v.(int)) + } + } + + if d.HasChange("remark") { + if v, ok := d.GetOk("remark"); ok { + request.Remark = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTrocketClient().ModifyTopic(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update trocket rocketmqTopic failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTrocketRocketmqTopicRead(d, meta) +} + +func resourceTencentCloudTrocketRocketmqTopicDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_trocket_rocketmq_topic.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TrocketService{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()) + } + instanceId := idSplit[0] + topic := idSplit[1] + + if err := service.DeleteTrocketRocketmqTopicById(ctx, instanceId, topic); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_trocket_rocketmq_topic_test.go b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic_test.go similarity index 93% rename from tencentcloud/resource_tc_trocket_rocketmq_topic_test.go rename to tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic_test.go index ed25a83716..b8a74841ba 100644 --- a/tencentcloud/resource_tc_trocket_rocketmq_topic_test.go +++ b/tencentcloud/services/trocket/resource_tc_trocket_rocketmq_topic_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package trocket_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 TestAccTencentCloudTrocketRocketmqTopicResource_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: testAccTrocketRocketmqTopic, diff --git a/tencentcloud/services/trocket/service_tencentcloud_tdmq_rocketmq.go b/tencentcloud/services/trocket/service_tencentcloud_tdmq_rocketmq.go new file mode 100644 index 0000000000..6e593e7403 --- /dev/null +++ b/tencentcloud/services/trocket/service_tencentcloud_tdmq_rocketmq.go @@ -0,0 +1,756 @@ +package trocket + +import ( + "context" + "log" + + tdmqRocketmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq/v20200217" + + 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" +) + +func NewTdmqRocketmqService(client *connectivity.TencentCloudClient) TdmqRocketmqService { + return TdmqRocketmqService{client: client} +} + +type TdmqRocketmqService struct { + client *connectivity.TencentCloudClient +} + +func (me *TdmqRocketmqService) DescribeTdmqRocketmqCluster(ctx context.Context, clusterId string) (cluster *tdmqRocketmq.RocketMQClusterInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQClusterRequest() + ) + + 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.ClusterId = &clusterId + + response, err := me.client.UseTdmqClient().DescribeRocketMQCluster(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()) + + cluster = response.Response.ClusterInfo + return +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqClusterById(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteRocketMQClusterRequest() + + request.ClusterId = &clusterId + + 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.UseTdmqClient().DeleteRocketMQCluster(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 *TdmqRocketmqService) DescribeTdmqRocketmqNamespace(ctx context.Context, namespaceName, clusterId string) (namespace []*tdmqRocketmq.RocketMQNamespace, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQNamespacesRequest() + ) + + 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.ClusterId = &clusterId + request.NameKeyword = &namespaceName + offset := uint64(0) + limit := uint64(100) + namespace = make([]*tdmqRocketmq.RocketMQNamespace, 0) + for { + request.Limit = &limit + request.Offset = &offset + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQNamespaces(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()) + + namespaces := response.Response.Namespaces + if len(namespaces) > 0 { + namespace = append(namespace, namespaces...) + } + if len(namespaces) < int(limit) { + return + } + offset += limit + } +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqNamespaceById(ctx context.Context, namespaceName, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteRocketMQNamespaceRequest() + + request.NamespaceId = &namespaceName + request.ClusterId = &clusterId + + 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.UseTdmqClient().DeleteRocketMQNamespace(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 *TdmqRocketmqService) DescribeTdmqRocketmqRole(ctx context.Context, clusterId, roleName string) (role *tdmqRocketmq.Role, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRolesRequest() + ) + + 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.ClusterId = &clusterId + request.Filters = append( + request.Filters, + &tdmqRocketmq.Filter{ + Name: helper.String("RoleName"), + Values: []*string{&roleName}, + }, + ) + ratelimit.Check(request.GetAction()) + + var offset int64 = 0 + var pageSize int64 = 100 + instances := make([]*tdmqRocketmq.Role, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRoles(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.RoleSets) < 1 { + break + } + instances = append(instances, response.Response.RoleSets...) + if len(response.Response.RoleSets) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + role = instances[0] + + return + +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqRoleById(ctx context.Context, clusterId, roleName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteRolesRequest() + + request.ClusterId = &clusterId + request.RoleNames = []*string{&roleName} + + 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.UseTdmqClient().DeleteRoles(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 *TdmqRocketmqService) DescribeTdmqRocketmqTopic(ctx context.Context, clusterId, namespaceId, topicName string) (result []*tdmqRocketmq.RocketMQTopic, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQTopicsRequest() + ) + + 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.ClusterId = &clusterId + request.NamespaceId = &namespaceId + request.FilterName = &topicName + + var offset uint64 = 0 + var pageSize uint64 = 100 + result = make([]*tdmqRocketmq.RocketMQTopic, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQTopics(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 + } + result = append(result, response.Response.Topics...) + if len(response.Response.Topics) < int(pageSize) { + break + } + offset += pageSize + } + + return +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqTopicById(ctx context.Context, clusterId, namespaceId, topic string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteRocketMQTopicRequest() + + request.ClusterId = &clusterId + request.NamespaceId = &namespaceId + request.Topic = &topic + + 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.UseTdmqClient().DeleteRocketMQTopic(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 *TdmqRocketmqService) DescribeTdmqRocketmqGroup(ctx context.Context, clusterId, namespaceId, groupId string) (result []*tdmqRocketmq.RocketMQGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQGroupsRequest() + ) + + 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.ClusterId = &clusterId + request.NamespaceId = &namespaceId + request.FilterGroup = &groupId + + var offset uint64 = 0 + var pageSize uint64 = 100 + tmpResult := make([]*tdmqRocketmq.RocketMQGroup, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQGroups(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.Groups) < 1 { + break + } + + tmpResult = append(tmpResult, response.Response.Groups...) + if len(response.Response.Groups) < int(pageSize) { + break + } + + offset += pageSize + } + + for _, item := range tmpResult { + if *item.Name == groupId { + result = append(result, item) + return + } + } + + return +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqGroupById(ctx context.Context, clusterId, namespaceId, groupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteRocketMQGroupRequest() + + request.ClusterId = &clusterId + request.NamespaceId = &namespaceId + request.GroupId = &groupId + + 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.UseTdmqClient().DeleteRocketMQGroup(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 *TdmqRocketmqService) DescribeTdmqRocketmqEnvironmentRole(ctx context.Context, clusterId, roleName, environmentId string) (environmentRoles []*tdmqRocketmq.EnvironmentRole, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeEnvironmentRolesRequest() + ) + + 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.ClusterId = &clusterId + request.RoleName = &roleName + request.EnvironmentId = &environmentId + environmentRoles = make([]*tdmqRocketmq.EnvironmentRole, 0) + var offset int64 = 0 + var pageSize int64 = 100 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeEnvironmentRoles(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.EnvironmentRoleSets) < 1 { + break + } + environmentRoles = append(environmentRoles, response.Response.EnvironmentRoleSets...) + if len(response.Response.EnvironmentRoleSets) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *TdmqRocketmqService) DeleteTdmqRocketmqEnvironmentRoleById(ctx context.Context, clusterId, roleName, environmentId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tdmqRocketmq.NewDeleteEnvironmentRolesRequest() + + request.ClusterId = &clusterId + request.RoleNames = []*string{&roleName} + request.EnvironmentId = &environmentId + + 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.UseTdmqClient().DeleteEnvironmentRoles(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 *TdmqRocketmqService) DescribeRocketmqClusterByFilter(ctx context.Context, param map[string]interface{}) (cluster []*tdmqRocketmq.RocketMQClusterDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQClustersRequest() + ) + + 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()) + } + }() + + if v, ok := param["id_keyword"]; ok { + request.IdKeyword = helper.String(v.(string)) + } + if v, ok := param["name_keyword"]; ok { + request.NameKeyword = helper.String(v.(string)) + } + if v, ok := param["cluster_id_list"]; ok { + request.ClusterIdList = make([]*string, 0) + for _, cluster := range v.([]interface{}) { + clusterId := cluster.(string) + request.ClusterIdList = append(request.ClusterIdList, &clusterId) + } + } + + ratelimit.Check(request.GetAction()) + + var offset uint64 = 0 + var pageSize uint64 = 20 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQClusters(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.ClusterList) < 1 { + break + } + cluster = append(cluster, response.Response.ClusterList...) + if len(response.Response.ClusterList) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *TdmqRocketmqService) DescribeTdmqRocketmqNamespaceByFilter(ctx context.Context, param map[string]interface{}) (namespace []*tdmqRocketmq.RocketMQNamespace, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQNamespacesRequest() + ) + + 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 == "cluster_id" { + request.ClusterId = helper.String(v.(string)) + } + + if k == "name_keyword" { + request.NameKeyword = helper.String(v.(string)) + } + + } + ratelimit.Check(request.GetAction()) + + var offset uint64 = 0 + var pageSize uint64 = 20 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQNamespaces(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.Namespaces) < 1 { + break + } + namespace = append(namespace, response.Response.Namespaces...) + if len(response.Response.Namespaces) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *TdmqRocketmqService) DescribeTdmqRocketmqTopicByFilter(ctx context.Context, param map[string]interface{}) (topic []*tdmqRocketmq.RocketMQTopic, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQTopicsRequest() + ) + + 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 == "cluster_id" { + request.ClusterId = helper.String(v.(string)) + } + + if k == "namespace_id" { + request.NamespaceId = helper.String(v.(string)) + } + + if k == "filter_type" { + filterTypes := make([]*string, 0) + for _, item := range v.([]interface{}) { + fileterType := item.(string) + filterTypes = append(filterTypes, &fileterType) + } + request.FilterType = filterTypes + } + + if k == "filter_name" { + request.FilterName = helper.String(v.(string)) + } + + } + ratelimit.Check(request.GetAction()) + + var offset uint64 = 0 + var pageSize uint64 = 20 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQTopics(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 + } + topic = append(topic, response.Response.Topics...) + if len(response.Response.Topics) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *TdmqRocketmqService) DescribeTdmqRocketmqRoleByFilter(ctx context.Context, param map[string]interface{}) (role []*tdmqRocketmq.Role, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRolesRequest() + ) + + 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.ClusterId = helper.String(param["cluster_id"].(string)) + if v, ok := param["role_name"]; ok { + request.RoleName = helper.String(v.(string)) + } + ratelimit.Check(request.GetAction()) + + var offset int64 = 0 + var pageSize int64 = 20 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRoles(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.RoleSets) < 1 { + break + } + role = append(role, response.Response.RoleSets...) + if len(response.Response.RoleSets) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *TdmqRocketmqService) DescribeTdmqRocketmqGroupByFilter(ctx context.Context, param map[string]interface{}) (group []*tdmqRocketmq.RocketMQGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tdmqRocketmq.NewDescribeRocketMQGroupsRequest() + ) + + 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 == "cluster_id" { + request.ClusterId = helper.String(v.(string)) + } + + if k == "namespace_id" { + request.NamespaceId = helper.String(v.(string)) + } + + if k == "filter_topic" { + request.FilterTopic = helper.String(v.(string)) + } + + if k == "filter_group" { + request.FilterGroup = helper.String(v.(string)) + } + + if k == "filter_one_group" { + request.FilterOneGroup = helper.String(v.(string)) + } + + } + ratelimit.Check(request.GetAction()) + + var offset uint64 = 0 + var pageSize uint64 = 20 + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseTdmqClient().DescribeRocketMQGroups(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.Groups) < 1 { + break + } + group = append(group, response.Response.Groups...) + if len(response.Response.Groups) < int(pageSize) { + break + } + offset += pageSize + } + return +} diff --git a/tencentcloud/service_tencentcloud_trocket.go b/tencentcloud/services/trocket/service_tencentcloud_trocket.go similarity index 95% rename from tencentcloud/service_tencentcloud_trocket.go rename to tencentcloud/services/trocket/service_tencentcloud_trocket.go index 03568f13c0..d8b2c836a6 100644 --- a/tencentcloud/service_tencentcloud_trocket.go +++ b/tencentcloud/services/trocket/service_tencentcloud_trocket.go @@ -1,11 +1,14 @@ -package tencentcloud +package trocket import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" trocket "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket/v20230308" + "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" @@ -16,7 +19,7 @@ type TrocketService struct { } func (me *TrocketService) DescribeTrocketRocketmqInstanceById(ctx context.Context, instanceId string) (rocketmqInstance *trocket.DescribeInstanceResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDescribeInstanceRequest() request.InstanceId = &instanceId @@ -41,7 +44,7 @@ func (me *TrocketService) DescribeTrocketRocketmqInstanceById(ctx context.Contex } func (me *TrocketService) DeleteTrocketRocketmqInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDeleteInstanceRequest() request.InstanceId = &instanceId @@ -66,7 +69,7 @@ func (me *TrocketService) DeleteTrocketRocketmqInstanceById(ctx context.Context, func (me *TrocketService) TrocketRocketmqInstanceStateRefreshFunc(instanceId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, err := me.DescribeTrocketRocketmqInstanceById(ctx, instanceId) @@ -85,7 +88,7 @@ func (me *TrocketService) TrocketRocketmqInstanceStateRefreshFunc(instanceId str } func (me *TrocketService) DescribeTrocketRocketmqTopicById(ctx context.Context, instanceId string, topic string) (rocketmqTopic *trocket.TopicItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDescribeTopicListRequest() request.InstanceId = &instanceId @@ -137,7 +140,7 @@ func (me *TrocketService) DescribeTrocketRocketmqTopicById(ctx context.Context, } func (me *TrocketService) DeleteTrocketRocketmqTopicById(ctx context.Context, instanceId string, topic string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDeleteTopicRequest() request.InstanceId = &instanceId @@ -162,7 +165,7 @@ func (me *TrocketService) DeleteTrocketRocketmqTopicById(ctx context.Context, in } func (me *TrocketService) DescribeTrocketRocketmqConsumerGroupById(ctx context.Context, instanceId string, consumerGroup string) (rocketmqConsumerGroup *trocket.DescribeConsumerGroupResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDescribeConsumerGroupRequest() request.InstanceId = &instanceId @@ -188,7 +191,7 @@ func (me *TrocketService) DescribeTrocketRocketmqConsumerGroupById(ctx context.C } func (me *TrocketService) DeleteTrocketRocketmqConsumerGroupById(ctx context.Context, instanceId string, consumerGroup string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDeleteConsumerGroupRequest() request.InstanceId = &instanceId @@ -213,7 +216,7 @@ func (me *TrocketService) DeleteTrocketRocketmqConsumerGroupById(ctx context.Con } func (me *TrocketService) DescribeTrocketRocketmqRoleById(ctx context.Context, instanceId string, role string) (rocketmqRole *trocket.RoleItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDescribeRoleListRequest() request.InstanceId = &instanceId @@ -265,7 +268,7 @@ func (me *TrocketService) DescribeTrocketRocketmqRoleById(ctx context.Context, i } func (me *TrocketService) DeleteTrocketRocketmqRoleById(ctx context.Context, instanceId string, role string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := trocket.NewDeleteRoleRequest() request.InstanceId = &instanceId diff --git a/tencentcloud/data_source_tc_tse_access_address.go b/tencentcloud/services/tse/data_source_tc_tse_access_address.go similarity index 92% rename from tencentcloud/data_source_tc_tse_access_address.go rename to tencentcloud/services/tse/data_source_tc_tse_access_address.go index e612ceba78..1531745f5e 100644 --- a/tencentcloud/data_source_tc_tse_access_address.go +++ b/tencentcloud/services/tse/data_source_tc_tse_access_address.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseAccessAddress() *schema.Resource { +func DataSourceTencentCloudTseAccessAddress() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseAccessAddressRead, Schema: map[string]*schema.Schema{ @@ -144,12 +147,12 @@ func dataSourceTencentCloudTseAccessAddress() *schema.Resource { } func dataSourceTencentCloudTseAccessAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_access_address.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_access_address.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 { @@ -172,12 +175,12 @@ func dataSourceTencentCloudTseAccessAddressRead(d *schema.ResourceData, meta int paramMap["EngineRegion"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var accessAddress *tse.DescribeSREInstanceAccessAddressResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTseAccessAddressByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accessAddress = result return nil @@ -265,7 +268,7 @@ func dataSourceTencentCloudTseAccessAddressRead(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_tse_access_address_test.go b/tencentcloud/services/tse/data_source_tc_tse_access_address_test.go similarity index 81% rename from tencentcloud/data_source_tc_tse_access_address_test.go rename to tencentcloud/services/tse/data_source_tc_tse_access_address_test.go index 25ae59c277..9263245d31 100644 --- a/tencentcloud/data_source_tc_tse_access_address_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_access_address_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseAccessAddressDataSource_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: testAccTseAccessAddressDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_access_address.access_address"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_access_address.access_address"), resource.TestCheckResourceAttr("data.tencentcloud_tse_access_address.access_address", "engine_region", "ap-guangzhou"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_access_address.access_address", "env_address_infos.#"), resource.TestCheckResourceAttr("data.tencentcloud_tse_access_address.access_address", "env_address_infos.0.enable_config_internet", "false"), diff --git a/tencentcloud/data_source_tc_tse_gateway_canary_rules.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules.go similarity index 92% rename from tencentcloud/data_source_tc_tse_gateway_canary_rules.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules.go index a3e35ebe49..830562ccff 100644 --- a/tencentcloud/data_source_tc_tse_gateway_canary_rules.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGatewayCanaryRules() *schema.Resource { +func DataSourceTencentCloudTseGatewayCanaryRules() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewayCanaryRulesRead, Schema: map[string]*schema.Schema{ @@ -152,11 +155,11 @@ func dataSourceTencentCloudTseGatewayCanaryRules() *schema.Resource { } func dataSourceTencentCloudTseGatewayCanaryRulesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateway_canary_rules.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateway_canary_rules.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 gatewayId string paramMap := make(map[string]interface{}) @@ -169,14 +172,14 @@ func dataSourceTencentCloudTseGatewayCanaryRulesRead(d *schema.ResourceData, met paramMap["ServiceId"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.CloudAPIGatewayCanaryRuleList - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewayCanaryRulesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -290,7 +293,7 @@ func dataSourceTencentCloudTseGatewayCanaryRulesRead(d *schema.ResourceData, met d.SetId(gatewayId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), cloudAPIGatewayCanaryRuleListMap); e != nil { + if e := tccommon.WriteToFile(output.(string), cloudAPIGatewayCanaryRuleListMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateway_canary_rules_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules_test.go similarity index 91% rename from tencentcloud/data_source_tc_tse_gateway_canary_rules_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules_test.go index dde8ad529a..94aca732e8 100644 --- a/tencentcloud/data_source_tc_tse_gateway_canary_rules_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_canary_rules_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewayCanaryRulesDataSource_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: testAccTseGatewayCanaryRulesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_canary_rules.gateway_canary_rules"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_canary_rules.gateway_canary_rules"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_canary_rules.gateway_canary_rules", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_canary_rules.gateway_canary_rules", "result.0.canary_rule_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_canary_rules.gateway_canary_rules", "result.0.canary_rule_list.0.balanced_service_list.#"), diff --git a/tencentcloud/data_source_tc_tse_gateway_certificates.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_certificates.go similarity index 91% rename from tencentcloud/data_source_tc_tse_gateway_certificates.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_certificates.go index 2bcadfecd0..262a0eae77 100644 --- a/tencentcloud/data_source_tc_tse_gateway_certificates.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_certificates.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGatewayCertificates() *schema.Resource { +func DataSourceTencentCloudTseGatewayCertificates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewayCertificatesRead, Schema: map[string]*schema.Schema{ @@ -131,12 +134,12 @@ func dataSourceTencentCloudTseGatewayCertificates() *schema.Resource { } func dataSourceTencentCloudTseGatewayCertificatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateway_certificates.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateway_certificates.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("gateway_id"); ok { @@ -162,13 +165,13 @@ func dataSourceTencentCloudTseGatewayCertificatesRead(d *schema.ResourceData, me paramMap["filters"] = tmpSet } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.KongCertificatesList - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewayCertificatesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -247,7 +250,7 @@ func dataSourceTencentCloudTseGatewayCertificatesRead(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), kongCertificatesListMap); e != nil { + if e := tccommon.WriteToFile(output.(string), kongCertificatesListMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateway_certificates_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_certificates_test.go similarity index 90% rename from tencentcloud/data_source_tc_tse_gateway_certificates_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_certificates_test.go index c157aae7b8..4742292873 100644 --- a/tencentcloud/data_source_tc_tse_gateway_certificates_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_certificates_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewayCertificatesDataSource_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: testAccTseGatewayCertificatesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_certificates.gateway_certificates"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_certificates.gateway_certificates"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_certificates.gateway_certificates", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_certificates.gateway_certificates", "result.0.certificates_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_certificates.gateway_certificates", "result.0.certificates_list.0.bind_domains.#"), diff --git a/tencentcloud/data_source_tc_tse_gateway_nodes.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_nodes.go similarity index 85% rename from tencentcloud/data_source_tc_tse_gateway_nodes.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_nodes.go index bbc50f1993..c9932484b9 100644 --- a/tencentcloud/data_source_tc_tse_gateway_nodes.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_nodes.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGatewayNodes() *schema.Resource { +func DataSourceTencentCloudTseGatewayNodes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewayNodesRead, Schema: map[string]*schema.Schema{ @@ -80,12 +83,12 @@ func dataSourceTencentCloudTseGatewayNodes() *schema.Resource { } func dataSourceTencentCloudTseGatewayNodesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateway_nodes.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateway_nodes.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("gateway_id"); ok { @@ -96,13 +99,13 @@ func dataSourceTencentCloudTseGatewayNodesRead(d *schema.ResourceData, meta inte paramMap["GroupId"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*tse.CloudNativeAPIGatewayNode - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewayNodesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -155,7 +158,7 @@ func dataSourceTencentCloudTseGatewayNodesRead(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), nodeListList); e != nil { + if e := tccommon.WriteToFile(output.(string), nodeListList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateway_nodes_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_nodes_test.go similarity index 84% rename from tencentcloud/data_source_tc_tse_gateway_nodes_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_nodes_test.go index 702787cba1..9d2e36d792 100644 --- a/tencentcloud/data_source_tc_tse_gateway_nodes_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_nodes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewayNodesDataSource_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: testAccTseGatewayNodesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_nodes.gateway_nodes"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_nodes.gateway_nodes"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_nodes.gateway_nodes", "node_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_nodes.gateway_nodes", "node_list.0.group_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_nodes.gateway_nodes", "node_list.0.group_name"), diff --git a/tencentcloud/data_source_tc_tse_gateway_routes.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_routes.go similarity index 91% rename from tencentcloud/data_source_tc_tse_gateway_routes.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_routes.go index 1f046fa8bf..cfea54facd 100644 --- a/tencentcloud/data_source_tc_tse_gateway_routes.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_routes.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGatewayRoutes() *schema.Resource { +func DataSourceTencentCloudTseGatewayRoutes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewayRoutesRead, Schema: map[string]*schema.Schema{ @@ -169,12 +172,12 @@ func dataSourceTencentCloudTseGatewayRoutes() *schema.Resource { } func dataSourceTencentCloudTseGatewayRoutesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateway_routes.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateway_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("gateway_id"); ok { @@ -189,13 +192,13 @@ func dataSourceTencentCloudTseGatewayRoutesRead(d *schema.ResourceData, meta int paramMap["RouteName"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.KongServiceRouteList - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewayRoutesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -305,7 +308,7 @@ func dataSourceTencentCloudTseGatewayRoutesRead(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), kongServiceRouteListMap); e != nil { + if e := tccommon.WriteToFile(output.(string), kongServiceRouteListMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateway_routes_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_routes_test.go similarity index 91% rename from tencentcloud/data_source_tc_tse_gateway_routes_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_routes_test.go index 814d38ed73..033937bc56 100644 --- a/tencentcloud/data_source_tc_tse_gateway_routes_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_routes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewayRoutesDataSource_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: testAccTseGatewayRoutesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_routes.gateway_routes"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_routes.gateway_routes"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_routes.gateway_routes", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_routes.gateway_routes", "result.0.route_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_routes.gateway_routes", "result.0.route_list.0.name"), diff --git a/tencentcloud/data_source_tc_tse_gateway_services.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_services.go similarity index 95% rename from tencentcloud/data_source_tc_tse_gateway_services.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_services.go index 7161250d07..45e4a64b9c 100644 --- a/tencentcloud/data_source_tc_tse_gateway_services.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_services.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGatewayServices() *schema.Resource { +func DataSourceTencentCloudTseGatewayServices() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewayServicesRead, Schema: map[string]*schema.Schema{ @@ -244,12 +247,12 @@ func dataSourceTencentCloudTseGatewayServices() *schema.Resource { } func dataSourceTencentCloudTseGatewayServicesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateway_services.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateway_services.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("gateway_id"); ok { @@ -275,13 +278,13 @@ func dataSourceTencentCloudTseGatewayServicesRead(d *schema.ResourceData, meta i paramMap["filters"] = tmpSet } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.KongServices - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewayServicesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -452,7 +455,7 @@ func dataSourceTencentCloudTseGatewayServicesRead(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), kongServicesMap); e != nil { + if e := tccommon.WriteToFile(output.(string), kongServicesMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateway_services_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateway_services_test.go similarity index 91% rename from tencentcloud/data_source_tc_tse_gateway_services_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateway_services_test.go index c903ef7ea8..ffd12c2f46 100644 --- a/tencentcloud/data_source_tc_tse_gateway_services_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateway_services_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewayServicesDataSource_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: testAccTseGatewayServicesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_services.gateway_services"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateway_services.gateway_services"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_services.gateway_services", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_services.gateway_services", "result.0.service_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateway_services.gateway_services", "result.0.service_list.0.created_time"), diff --git a/tencentcloud/data_source_tc_tse_gateways.go b/tencentcloud/services/tse/data_source_tc_tse_gateways.go similarity index 95% rename from tencentcloud/data_source_tc_tse_gateways.go rename to tencentcloud/services/tse/data_source_tc_tse_gateways.go index 600ce2c34d..f62dcf3357 100644 --- a/tencentcloud/data_source_tc_tse_gateways.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateways.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGateways() *schema.Resource { +func DataSourceTencentCloudTseGateways() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGatewaysRead, Schema: map[string]*schema.Schema{ @@ -254,11 +257,11 @@ func dataSourceTencentCloudTseGateways() *schema.Resource { } func dataSourceTencentCloudTseGatewaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_gateways.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_gateways.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, ok := d.GetOk("filters"); ok { @@ -281,13 +284,13 @@ func dataSourceTencentCloudTseGatewaysRead(d *schema.ResourceData, meta interfac paramMap["filters"] = tmpSet } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.ListCloudNativeAPIGatewayResult - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGatewaysByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -466,7 +469,7 @@ func dataSourceTencentCloudTseGatewaysRead(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), listCloudNativeAPIGatewayResultMap); e != nil { + if e := tccommon.WriteToFile(output.(string), listCloudNativeAPIGatewayResultMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_gateways_test.go b/tencentcloud/services/tse/data_source_tc_tse_gateways_test.go similarity index 93% rename from tencentcloud/data_source_tc_tse_gateways_test.go rename to tencentcloud/services/tse/data_source_tc_tse_gateways_test.go index 6b7cef86ed..1b6cb53f09 100644 --- a/tencentcloud/data_source_tc_tse_gateways_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_gateways_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGatewaysDataSource_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: testAccTseGatewaysDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateways.gateways"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_gateways.gateways"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateways.gateways", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateways.gateways", "result.0.gateway_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_gateways.gateways", "result.0.gateway_list.0.auto_renew_flag"), diff --git a/tencentcloud/data_source_tc_tse_groups.go b/tencentcloud/services/tse/data_source_tc_tse_groups.go similarity index 96% rename from tencentcloud/data_source_tc_tse_groups.go rename to tencentcloud/services/tse/data_source_tc_tse_groups.go index 0073859a99..041ed4d758 100644 --- a/tencentcloud/data_source_tc_tse_groups.go +++ b/tencentcloud/services/tse/data_source_tc_tse_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseGroups() *schema.Resource { +func DataSourceTencentCloudTseGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseGroupsRead, Schema: map[string]*schema.Schema{ @@ -315,12 +318,12 @@ func dataSourceTencentCloudTseGroups() *schema.Resource { } func dataSourceTencentCloudTseGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_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("gateway_id"); ok { @@ -347,13 +350,13 @@ func dataSourceTencentCloudTseGroupsRead(d *schema.ResourceData, meta interface{ paramMap["filters"] = tmpSet } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tse.NativeGatewayServerGroups - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTseGroupsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -581,7 +584,7 @@ func dataSourceTencentCloudTseGroupsRead(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), nativeGatewayServerGroupsMap); e != nil { + if e := tccommon.WriteToFile(output.(string), nativeGatewayServerGroupsMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tse_groups_test.go b/tencentcloud/services/tse/data_source_tc_tse_groups_test.go similarity index 90% rename from tencentcloud/data_source_tc_tse_groups_test.go rename to tencentcloud/services/tse/data_source_tc_tse_groups_test.go index d9d554ff06..c7890994cd 100644 --- a/tencentcloud/data_source_tc_tse_groups_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseGroupsDataSource_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: testAccTseGroupsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_groups.groups"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_groups.groups"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_groups.groups", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_groups.groups", "result.0.gateway_group_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_groups.groups", "result.0.gateway_group_list.0.binding_strategy.#"), @@ -45,7 +47,7 @@ func TestAccTencentCloudTseGroupsDataSource_basic(t *testing.T) { }) } -const testAccTseGroupsDataSource = DefaultTseVar + ` +const testAccTseGroupsDataSource = tcacctest.DefaultTseVar + ` data "tencentcloud_tse_groups" "groups" { gateway_id = var.gateway_id diff --git a/tencentcloud/data_source_tc_tse_nacos_replicas.go b/tencentcloud/services/tse/data_source_tc_tse_nacos_replicas.go similarity index 84% rename from tencentcloud/data_source_tc_tse_nacos_replicas.go rename to tencentcloud/services/tse/data_source_tc_tse_nacos_replicas.go index 8b5ccc6f1f..2c9c7fe656 100644 --- a/tencentcloud/data_source_tc_tse_nacos_replicas.go +++ b/tencentcloud/services/tse/data_source_tc_tse_nacos_replicas.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseNacosReplicas() *schema.Resource { +func DataSourceTencentCloudTseNacosReplicas() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseNacosReplicasRead, Schema: map[string]*schema.Schema{ @@ -74,12 +77,12 @@ func dataSourceTencentCloudTseNacosReplicas() *schema.Resource { } func dataSourceTencentCloudTseNacosReplicasRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_nacos_replicas.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_nacos_replicas.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{}) @@ -88,14 +91,14 @@ func dataSourceTencentCloudTseNacosReplicasRead(d *schema.ResourceData, meta int paramMap["InstanceId"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var replicas []*tse.NacosReplica - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTseNacosReplicasByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } replicas = result return nil @@ -147,7 +150,7 @@ func dataSourceTencentCloudTseNacosReplicasRead(d *schema.ResourceData, meta int 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_tse_nacos_replicas_test.go b/tencentcloud/services/tse/data_source_tc_tse_nacos_replicas_test.go similarity index 80% rename from tencentcloud/data_source_tc_tse_nacos_replicas_test.go rename to tencentcloud/services/tse/data_source_tc_tse_nacos_replicas_test.go index f6b9516c67..ca76b55f75 100644 --- a/tencentcloud/data_source_tc_tse_nacos_replicas_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_nacos_replicas_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 @@ import ( func TestAccTencentCloudTseNacosReplicasDataSource_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: testAccTseNacosReplicasDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_nacos_replicas.nacos_replicas"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_nacos_replicas.nacos_replicas"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_replicas.nacos_replicas", "replicas.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_replicas.nacos_replicas", "replicas.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_replicas.nacos_replicas", "replicas.0.status"), diff --git a/tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces.go b/tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces.go new file mode 100644 index 0000000000..29464eae7d --- /dev/null +++ b/tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces.go @@ -0,0 +1,97 @@ +package tse + +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" + tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" +) + +func DataSourceTencentCloudTseNacosServerInterfaces() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudTseNacosServerInterfacesRead, + Schema: map[string]*schema.Schema{ + "instance_id": { + Optional: true, + Type: schema.TypeString, + Description: "engine instance ID.", + }, + + "content": { + Computed: true, + Type: schema.TypeList, + Description: "interface list.", + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "interface": { + Type: schema.TypeString, + Computed: true, + Description: "interface nameNote: This field may return null, indicating that a valid value is not available.", + }, + }, + }, + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudTseNacosServerInterfacesRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_tse_nacos_server_interfaces.read")() + defer tccommon.InconsistentCheck(d, meta)() + + 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 := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + var content []*tse.NacosServerInterface + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeTseNacosServerInterfacesByFilter(ctx, instanceId) + if e != nil { + return tccommon.RetryError(e) + } + content = result + return nil + }) + if err != nil { + return err + } + + tmpList := make([]map[string]interface{}, 0, len(content)) + + if content != nil { + for _, nacosServerInterface := range content { + nacosServerInterfaceMap := map[string]interface{}{} + + if nacosServerInterface.Interface != nil { + nacosServerInterfaceMap["interface"] = nacosServerInterface.Interface + } + + tmpList = append(tmpList, nacosServerInterfaceMap) + } + + _ = d.Set("content", tmpList) + } + + d.SetId(instanceId) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { + return e + } + } + return nil +} diff --git a/tencentcloud/data_source_tc_tse_nacos_server_interfaces_test.go b/tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces_test.go similarity index 77% rename from tencentcloud/data_source_tc_tse_nacos_server_interfaces_test.go rename to tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces_test.go index 89c6388b12..2251896606 100644 --- a/tencentcloud/data_source_tc_tse_nacos_server_interfaces_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_nacos_server_interfaces_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseNacosServerInterfacesDataSource_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: testAccTseNacosServerInterfacesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "content.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "content.0.interface"), diff --git a/tencentcloud/data_source_tc_tse_zookeeper_replicas.go b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas.go similarity index 85% rename from tencentcloud/data_source_tc_tse_zookeeper_replicas.go rename to tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas.go index 5e215d480e..7aec4323e4 100644 --- a/tencentcloud/data_source_tc_tse_zookeeper_replicas.go +++ b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseZookeeperReplicas() *schema.Resource { +func DataSourceTencentCloudTseZookeeperReplicas() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseZookeeperReplicasRead, Schema: map[string]*schema.Schema{ @@ -79,12 +82,12 @@ func dataSourceTencentCloudTseZookeeperReplicas() *schema.Resource { } func dataSourceTencentCloudTseZookeeperReplicasRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_zookeeper_replicas.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_zookeeper_replicas.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{}) @@ -93,14 +96,14 @@ func dataSourceTencentCloudTseZookeeperReplicasRead(d *schema.ResourceData, meta paramMap["InstanceId"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var replicas []*tse.ZookeeperReplica - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTseZookeeperReplicasByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } replicas = result return nil @@ -156,7 +159,7 @@ func dataSourceTencentCloudTseZookeeperReplicasRead(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_tse_zookeeper_replicas_test.go b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas_test.go similarity index 85% rename from tencentcloud/data_source_tc_tse_zookeeper_replicas_test.go rename to tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas_test.go index 54b6bd6ef3..b9d6946b9b 100644 --- a/tencentcloud/data_source_tc_tse_zookeeper_replicas_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_replicas_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseZookeeperReplicasDataSource_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: testAccTseZookeeperReplicasDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_zookeeper_replicas.zookeeper_replicas"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_zookeeper_replicas.zookeeper_replicas"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_zookeeper_replicas.zookeeper_replicas", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_zookeeper_replicas.zookeeper_replicas", "replicas.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_zookeeper_replicas.zookeeper_replicas", "replicas.0.alias_name"), diff --git a/tencentcloud/data_source_tc_tse_zookeeper_server_interfaces.go b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces.go similarity index 76% rename from tencentcloud/data_source_tc_tse_zookeeper_server_interfaces.go rename to tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces.go index 3ea794e85f..7a226879bf 100644 --- a/tencentcloud/data_source_tc_tse_zookeeper_server_interfaces.go +++ b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces.go @@ -1,15 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTseZookeeperServerInterfaces() *schema.Resource { +func DataSourceTencentCloudTseZookeeperServerInterfaces() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTseZookeeperServerInterfacesRead, Schema: map[string]*schema.Schema{ @@ -44,12 +47,12 @@ func dataSourceTencentCloudTseZookeeperServerInterfaces() *schema.Resource { } func dataSourceTencentCloudTseZookeeperServerInterfacesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tse_zookeeper_server_interfaces.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tse_zookeeper_server_interfaces.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{}) @@ -58,14 +61,14 @@ func dataSourceTencentCloudTseZookeeperServerInterfacesRead(d *schema.ResourceDa paramMap["InstanceId"] = helper.String(v.(string)) } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var content []*tse.ZookeeperServerInterface - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTseZookeeperServerInterfacesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } content = result return nil @@ -93,7 +96,7 @@ func dataSourceTencentCloudTseZookeeperServerInterfacesRead(d *schema.ResourceDa 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_tse_zookeeper_server_interfaces_test.go b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces_test.go similarity index 75% rename from tencentcloud/data_source_tc_tse_zookeeper_server_interfaces_test.go rename to tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces_test.go index be023279a3..7d6579fc9b 100644 --- a/tencentcloud/data_source_tc_tse_zookeeper_server_interfaces_test.go +++ b/tencentcloud/services/tse/data_source_tc_tse_zookeeper_server_interfaces_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseZookeeperServerInterfacesDataSource_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: testAccTseZookeeperServerInterfacesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_zookeeper_server_interfaces.zookeeper_server_interfaces"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tse_zookeeper_server_interfaces.zookeeper_server_interfaces"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_zookeeper_server_interfaces.zookeeper_server_interfaces", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tse_zookeeper_server_interfaces.zookeeper_server_interfaces", "content.#"), ), diff --git a/tencentcloud/resource_tc_tse_cngw_canary_rule.go b/tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule.go similarity index 85% rename from tencentcloud/resource_tc_tse_cngw_canary_rule.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule.go index 816863b699..cfec799aef 100644 --- a/tencentcloud/resource_tc_tse_cngw_canary_rule.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule.go @@ -1,6 +1,9 @@ -package tencentcloud +package tse import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -10,10 +13,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwCanaryRule() *schema.Resource { +func ResourceTencentCloudTseCngwCanaryRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwCanaryRuleCreate, Read: resourceTencentCloudTseCngwCanaryRuleRead, @@ -150,10 +154,10 @@ func resourceTencentCloudTseCngwCanaryRule() *schema.Resource { } func resourceTencentCloudTseCngwCanaryRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_canary_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_canary_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tse.NewCreateCloudNativeAPIGatewayCanaryRuleRequest() @@ -233,10 +237,10 @@ func resourceTencentCloudTseCngwCanaryRuleCreate(d *schema.ResourceData, meta in request.CanaryRule = &cloudNativeAPIGatewayCanaryRule } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayCanaryRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayCanaryRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -247,12 +251,12 @@ func resourceTencentCloudTseCngwCanaryRuleCreate(d *schema.ResourceData, meta in return err } - d.SetId(gatewayId + FILED_SP + serviceId + FILED_SP + strconv.Itoa(priority)) + d.SetId(gatewayId + tccommon.FILED_SP + serviceId + tccommon.FILED_SP + strconv.Itoa(priority)) - 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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tse:%s:uin/:cngw_canary_rule/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -263,15 +267,15 @@ func resourceTencentCloudTseCngwCanaryRuleCreate(d *schema.ResourceData, meta in } func resourceTencentCloudTseCngwCanaryRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_canary_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_canary_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) - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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()) } @@ -381,8 +385,8 @@ func resourceTencentCloudTseCngwCanaryRuleRead(d *schema.ResourceData, meta inte _ = d.Set("canary_rule", []interface{}{canaryRuleMap}) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tse", "cngw_canary_rule", tcClient.Region, d.Id()) if err != nil { return err @@ -393,14 +397,14 @@ func resourceTencentCloudTseCngwCanaryRuleRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTseCngwCanaryRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_canary_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_canary_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tse.NewModifyCloudNativeAPIGatewayCanaryRuleRequest() - 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()) } @@ -485,10 +489,10 @@ func resourceTencentCloudTseCngwCanaryRuleUpdate(d *schema.ResourceData, meta in request.CanaryRule = &cloudNativeAPIGatewayCanaryRule } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGatewayCanaryRule(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGatewayCanaryRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -500,12 +504,12 @@ func resourceTencentCloudTseCngwCanaryRuleUpdate(d *schema.ResourceData, meta in } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tse", "cngw_canary_rule", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tse", "cngw_canary_rule", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -515,14 +519,14 @@ func resourceTencentCloudTseCngwCanaryRuleUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTseCngwCanaryRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_canary_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_canary_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_canary_rule_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule_test.go similarity index 84% rename from tencentcloud/resource_tc_tse_cngw_canary_rule_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule_test.go index c02bd60f83..3d999f9e20 100644 --- a/tencentcloud/resource_tc_tse_cngw_canary_rule_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_canary_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "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" @@ -16,9 +20,9 @@ func TestAccTencentCloudTseCngwCanaryRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwCanaryRuleDestroy, Steps: []resource.TestStep{ { @@ -26,7 +30,7 @@ func TestAccTencentCloudTseCngwCanaryRuleResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwCanaryRuleExists("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "tags.created", "terraform"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "canary_rule.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_canary_rule.cngw_canary_rule", "canary_rule.0.enabled", "true"), @@ -53,15 +57,15 @@ func TestAccTencentCloudTseCngwCanaryRuleResource_basic(t *testing.T) { } func testAccCheckTseCngwCanaryRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_canary_rule" { 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("invalid ID %s", rs.Primary.ID) } @@ -88,15 +92,15 @@ func testAccCheckTseCngwCanaryRuleDestroy(s *terraform.State) error { func testAccCheckTseCngwCanaryRuleExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } @@ -104,7 +108,7 @@ func testAccCheckTseCngwCanaryRuleExists(r string) resource.TestCheckFunc { serviceId := idSplit[1] priority := idSplit[2] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwCanaryRuleById(ctx, gatewayId, serviceId, priority) if err != nil { return err diff --git a/tencentcloud/services/tse/resource_tc_tse_cngw_certificate.go b/tencentcloud/services/tse/resource_tc_tse_cngw_certificate.go new file mode 100644 index 0000000000..00c5385094 --- /dev/null +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_certificate.go @@ -0,0 +1,248 @@ +package tse + +import ( + "context" + "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" + tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTseCngwCertificate() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTseCngwCertificateCreate, + Read: resourceTencentCloudTseCngwCertificateRead, + Update: resourceTencentCloudTseCngwCertificateUpdate, + Delete: resourceTencentCloudTseCngwCertificateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "gateway_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Gateway ID.", + }, + + "bind_domains": { + Required: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "Domains of the binding.", + }, + + "cert_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Certificate ID of ssl platform.", + }, + + "name": { + Optional: true, + Type: schema.TypeString, + Description: "Certificate name.", + }, + + "key": { + Computed: true, + Type: schema.TypeString, + Description: "Private key of certificate.", + }, + + "crt": { + Computed: true, + Type: schema.TypeString, + Description: "Pem format of certificate.", + }, + }, + } +} + +func resourceTencentCloudTseCngwCertificateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_certificate.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tse.NewCreateCloudNativeAPIGatewayCertificateRequest() + response = tse.NewCreateCloudNativeAPIGatewayCertificateResponse() + gatewayId string + certificateId string + ) + if v, ok := d.GetOk("gateway_id"); ok { + gatewayId = v.(string) + request.GatewayId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("bind_domains"); ok { + bindDomainsSet := v.(*schema.Set).List() + for i := range bindDomainsSet { + bindDomains := bindDomainsSet[i].(string) + request.BindDomains = append(request.BindDomains, &bindDomains) + } + } + + if v, ok := d.GetOk("cert_id"); ok { + request.CertId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayCertificate(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 tse cngwCertificate failed, reason:%+v", logId, err) + return err + } + + certificateId = *response.Response.Result.Id + d.SetId(gatewayId + tccommon.FILED_SP + certificateId) + + return resourceTencentCloudTseCngwCertificateRead(d, meta) +} + +func resourceTencentCloudTseCngwCertificateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_certificate.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TseService{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()) + } + gatewayId := idSplit[0] + certificateId := idSplit[1] + + cngwCertificate, err := service.DescribeTseCngwCertificateById(ctx, gatewayId, certificateId) + if err != nil { + return err + } + + if cngwCertificate == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TseCngwCertificate` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("gateway_id", gatewayId) + + if cngwCertificate.BindDomains != nil { + _ = d.Set("bind_domains", cngwCertificate.BindDomains) + } + + if cngwCertificate.CertId != nil { + _ = d.Set("cert_id", cngwCertificate.CertId) + } + + if cngwCertificate.Name != nil { + _ = d.Set("name", cngwCertificate.Name) + } + + if cngwCertificate.Key != nil { + _ = d.Set("key", cngwCertificate.Key) + } + + if cngwCertificate.Crt != nil { + _ = d.Set("crt", cngwCertificate.Crt) + } + + return nil +} + +func resourceTencentCloudTseCngwCertificateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_certificate.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tse.NewUpdateCloudNativeAPIGatewayCertificateInfoRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + gatewayId := idSplit[0] + certificateId := idSplit[1] + + request.GatewayId = &gatewayId + request.Id = &certificateId + + if v, ok := d.GetOk("bind_domains"); ok { + bindDomainsSet := v.(*schema.Set).List() + for i := range bindDomainsSet { + bindDomains := bindDomainsSet[i].(string) + request.BindDomains = append(request.BindDomains, &bindDomains) + } + } + + if d.HasChange("name") { + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().UpdateCloudNativeAPIGatewayCertificateInfo(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tse cngwCertificate failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudTseCngwCertificateRead(d, meta) +} + +func resourceTencentCloudTseCngwCertificateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_certificate.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TseService{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()) + } + gatewayId := idSplit[0] + certificateId := idSplit[1] + + if err := service.DeleteTseCngwCertificateById(ctx, gatewayId, certificateId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tse_cngw_certificate_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_certificate_test.go similarity index 75% rename from tencentcloud/resource_tc_tse_cngw_certificate_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_certificate_test.go index ac958377cf..b6fa98c72c 100644 --- a/tencentcloud/resource_tc_tse_cngw_certificate_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_certificate_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "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" @@ -17,9 +21,9 @@ func TestAccTencentCloudTseCngwCertificateResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwCertificateDestroy, Steps: []resource.TestStep{ { @@ -28,8 +32,8 @@ func TestAccTencentCloudTseCngwCertificateResource_basic(t *testing.T) { testAccCheckTseCngwCngwCertificateExists("tencentcloud_tse_cngw_certificate.cngw_certificate"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_certificate.cngw_certificate", "id"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "name", "tf-certificate"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "cert_id", defaultTseCertId), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "cert_id", tcacctest.DefaultTseCertId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "bind_domains.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "bind_domains.0", "example.com"), ), @@ -45,8 +49,8 @@ func TestAccTencentCloudTseCngwCertificateResource_basic(t *testing.T) { testAccCheckTseCngwCngwCertificateExists("tencentcloud_tse_cngw_certificate.cngw_certificate"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_certificate.cngw_certificate", "id"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "name", "tf-certificate-up"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "cert_id", defaultTseCertId), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "cert_id", tcacctest.DefaultTseCertId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "bind_domains.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_certificate.cngw_certificate", "bind_domains.0", "example-up.com"), ), @@ -56,15 +60,15 @@ func TestAccTencentCloudTseCngwCertificateResource_basic(t *testing.T) { } func testAccCheckTseCngwCertificateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_certificate" { 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("invalid ID %s", rs.Primary.ID) } @@ -90,22 +94,22 @@ func testAccCheckTseCngwCertificateDestroy(s *terraform.State) error { func testAccCheckTseCngwCngwCertificateExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } gatewayId := idSplit[0] certificateId := idSplit[1] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwCertificateById(ctx, gatewayId, certificateId) if err != nil { return err @@ -119,7 +123,7 @@ func testAccCheckTseCngwCngwCertificateExists(r string) resource.TestCheckFunc { } } -const testAccTseCngwCertificate = DefaultTseVar + ` +const testAccTseCngwCertificate = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_certificate" "cngw_certificate" { gateway_id = var.gateway_id @@ -130,7 +134,7 @@ resource "tencentcloud_tse_cngw_certificate" "cngw_certificate" { ` -const testAccTseCngwCertificateUp = DefaultTseVar + ` +const testAccTseCngwCertificateUp = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_certificate" "cngw_certificate" { gateway_id = var.gateway_id diff --git a/tencentcloud/resource_tc_tse_cngw_gateway.go b/tencentcloud/services/tse/resource_tc_tse_cngw_gateway.go similarity index 85% rename from tencentcloud/resource_tc_tse_cngw_gateway.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_gateway.go index b20eb137da..77a2b6b5b3 100644 --- a/tencentcloud/resource_tc_tse_cngw_gateway.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_gateway.go @@ -1,6 +1,9 @@ -package tencentcloud +package tse import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwGateway() *schema.Resource { +func ResourceTencentCloudTseCngwGateway() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwGatewayCreate, Read: resourceTencentCloudTseCngwGatewayRead, @@ -226,11 +230,11 @@ func resourceTencentCloudTseCngwGateway() *schema.Resource { } func resourceTencentCloudTseCngwGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_gateway.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_gateway.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 = tse.NewCreateCloudNativeAPIGatewayRequest() @@ -328,10 +332,10 @@ func resourceTencentCloudTseCngwGatewayCreate(d *schema.ResourceData, meta inter request.InternetConfig = &internetConfig } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGateway(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGateway(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -346,14 +350,14 @@ func resourceTencentCloudTseCngwGatewayCreate(d *schema.ResourceData, meta inter gatewayId = *response.Response.Result.GatewayId d.SetId(gatewayId) - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseNativeAPIGatewayStatusById(ctx, gatewayId, "create"); err != nil { return err } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tse:%s:uin/:gateway/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -364,14 +368,14 @@ func resourceTencentCloudTseCngwGatewayCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTseCngwGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_gateway.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_gateway.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} gatewayId := d.Id() @@ -482,8 +486,8 @@ func resourceTencentCloudTseCngwGatewayRead(d *schema.ResourceData, meta interfa _ = d.Set("public_ip_addresses", addresses) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tse", "gateway", tcClient.Region, d.Id()) if err != nil { return err @@ -494,11 +498,11 @@ func resourceTencentCloudTseCngwGatewayRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_gateway.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_gateway.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 := tse.NewModifyCloudNativeAPIGatewayRequest() @@ -536,10 +540,10 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter } if changeFlag { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGateway(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGateway(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -550,7 +554,7 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter return err } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseNativeAPIGatewayStatusById(ctx, gatewayId, "update"); err != nil { return err } @@ -560,7 +564,7 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter // Get the default group id paramMap := make(map[string]interface{}) paramMap["GatewayId"] = &gatewayId - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} cngwGroup, err := service.DescribeTseGroupsByFilter(ctx, paramMap) if err != nil { return err @@ -591,10 +595,10 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter nodeConfigRequest.NodeConfig = &cloudNativeAPIGatewayNodeConfig } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().UpdateCloudNativeAPIGatewaySpec(nodeConfigRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().UpdateCloudNativeAPIGatewaySpec(nodeConfigRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, nodeConfigRequest.GetAction(), nodeConfigRequest.ToJsonString(), result.ToJsonString()) } @@ -611,12 +615,12 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tse", "gateway", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tse", "gateway", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -626,13 +630,13 @@ func resourceTencentCloudTseCngwGatewayUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTseCngwGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_gateway.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_gateway.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} gatewayId := d.Id() if err := service.DeleteTseCngwGatewayById(ctx, gatewayId); err != nil { diff --git a/tencentcloud/resource_tc_tse_cngw_gateway_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_gateway_test.go similarity index 90% rename from tencentcloud/resource_tc_tse_cngw_gateway_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_gateway_test.go index 5df3ba9955..409d9e021d 100644 --- a/tencentcloud/resource_tc_tse_cngw_gateway_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_gateway_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tse_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "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" @@ -15,9 +19,9 @@ func TestAccTencentCloudTseCngwGatewayResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwGatewayDestroy, Steps: []resource.TestStep{ { @@ -76,9 +80,9 @@ func TestAccTencentCloudTseCngwGatewayResource_basic(t *testing.T) { } func testAccCheckTseCngwGatewayDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_gateway" { continue @@ -103,15 +107,15 @@ func testAccCheckTseCngwGatewayDestroy(s *terraform.State) error { func testAccCheckTseCngwCngwGatewayExists(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 := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwGatewayById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_tse_cngw_group.go b/tencentcloud/services/tse/resource_tc_tse_cngw_group.go similarity index 84% rename from tencentcloud/resource_tc_tse_cngw_group.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_group.go index 9456884a69..faa91723f3 100644 --- a/tencentcloud/resource_tc_tse_cngw_group.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwGroup() *schema.Resource { +func ResourceTencentCloudTseCngwGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwGroupCreate, Read: resourceTencentCloudTseCngwGroupRead, @@ -128,11 +131,11 @@ func resourceTencentCloudTseCngwGroup() *schema.Resource { } func resourceTencentCloudTseCngwGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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) var ( request = tse.NewCreateNativeGatewayServerGroupRequest() @@ -201,10 +204,10 @@ func resourceTencentCloudTseCngwGroupCreate(d *schema.ResourceData, meta interfa request.InternetConfig = &internetConfig } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateNativeGatewayServerGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateNativeGatewayServerGroup(request) if e != nil { - return retryError(e) + return tccommon.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,9 +220,9 @@ func resourceTencentCloudTseCngwGroupCreate(d *schema.ResourceData, meta interfa } groupId = *response.Response.Result.GroupId - d.SetId(gatewayId + FILED_SP + groupId) + d.SetId(gatewayId + tccommon.FILED_SP + groupId) - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseNativeAPIGatewayGroupStatusById(ctx, gatewayId, groupId, "create"); err != nil { return err } @@ -228,16 +231,16 @@ func resourceTencentCloudTseCngwGroupCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTseCngwGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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,15 +334,15 @@ func resourceTencentCloudTseCngwGroupRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTseCngwGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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 := tse.NewModifyNativeGatewayServerGroupRequest() - 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,10 +372,10 @@ func resourceTencentCloudTseCngwGroupUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyNativeGatewayServerGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyNativeGatewayServerGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -383,7 +386,7 @@ func resourceTencentCloudTseCngwGroupUpdate(d *schema.ResourceData, meta interfa return err } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseNativeAPIGatewayGroupStatusById(ctx, gatewayId, groupId, "update"); err != nil { return err } @@ -392,14 +395,14 @@ func resourceTencentCloudTseCngwGroupUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTseCngwGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_group_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_group_test.go similarity index 75% rename from tencentcloud/resource_tc_tse_cngw_group_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_group_test.go index 1a5ab82270..39a4c5e411 100644 --- a/tencentcloud/resource_tc_tse_cngw_group_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "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" @@ -16,9 +20,9 @@ func TestAccTencentCloudNeedFixTseCngwGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwGroupDestroy, Steps: []resource.TestStep{ { @@ -43,15 +47,15 @@ func TestAccTencentCloudNeedFixTseCngwGroupResource_basic(t *testing.T) { } func testAccCheckTseCngwGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_gateway" { 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("invalid ID %s", rs.Primary.ID) } @@ -77,22 +81,22 @@ func testAccCheckTseCngwGroupDestroy(s *terraform.State) error { func testAccCheckTseCngwGroupExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } gatewayId := idSplit[0] groupId := idSplit[1] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwGroupById(ctx, gatewayId, groupId) if err != nil { return err @@ -106,7 +110,7 @@ func testAccCheckTseCngwGroupExists(r string) resource.TestCheckFunc { } } -const testAccTseCngwGroup = DefaultTseVar + ` +const testAccTseCngwGroup = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_group" "cngw_group" { description = "terraform desc" diff --git a/tencentcloud/resource_tc_tse_cngw_route.go b/tencentcloud/services/tse/resource_tc_tse_cngw_route.go similarity index 86% rename from tencentcloud/resource_tc_tse_cngw_route.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_route.go index 939e984adc..d88611fb2f 100644 --- a/tencentcloud/resource_tc_tse_cngw_route.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_route.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwRoute() *schema.Resource { +func ResourceTencentCloudTseCngwRoute() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwRouteCreate, Read: resourceTencentCloudTseCngwRouteRead, @@ -140,10 +143,10 @@ func resourceTencentCloudTseCngwRoute() *schema.Resource { } func resourceTencentCloudTseCngwRouteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tse.NewCreateCloudNativeAPIGatewayRouteRequest() @@ -236,10 +239,10 @@ func resourceTencentCloudTseCngwRouteCreate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayRoute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayRoute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -250,22 +253,22 @@ func resourceTencentCloudTseCngwRouteCreate(d *schema.ResourceData, meta interfa return err } - d.SetId(gatewayId + FILED_SP + serviceID + FILED_SP + routeName) + d.SetId(gatewayId + tccommon.FILED_SP + serviceID + tccommon.FILED_SP + routeName) return resourceTencentCloudTseCngwRouteRead(d, meta) } func resourceTencentCloudTseCngwRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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()) } @@ -352,15 +355,15 @@ func resourceTencentCloudTseCngwRouteRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTseCngwRouteUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route.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 := tse.NewModifyCloudNativeAPIGatewayRouteRequest() - 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()) } @@ -368,7 +371,7 @@ func resourceTencentCloudTseCngwRouteUpdate(d *schema.ResourceData, meta interfa serviceID := idSplit[1] routeName := idSplit[2] - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} cngwRoute, err := service.DescribeTseCngwRouteById(ctx, gatewayId, serviceID, routeName) if err != nil { return err @@ -475,10 +478,10 @@ func resourceTencentCloudTseCngwRouteUpdate(d *schema.ResourceData, meta interfa } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGatewayRoute(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGatewayRoute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -493,14 +496,14 @@ func resourceTencentCloudTseCngwRouteUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTseCngwRouteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_route_rate_limit.go b/tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit.go similarity index 91% rename from tencentcloud/resource_tc_tse_cngw_route_rate_limit.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit.go index bc8522efa8..f6531a0dde 100644 --- a/tencentcloud/resource_tc_tse_cngw_route_rate_limit.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwRouteRateLimit() *schema.Resource { +func ResourceTencentCloudTseCngwRouteRateLimit() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwRouteRateLimitCreate, Read: resourceTencentCloudTseCngwRouteRateLimitRead, @@ -187,10 +190,10 @@ func resourceTencentCloudTseCngwRouteRateLimit() *schema.Resource { } func resourceTencentCloudTseCngwRouteRateLimitCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tse.NewCreateCloudNativeAPIGatewayRouteRateLimitRequest() @@ -294,10 +297,10 @@ func resourceTencentCloudTseCngwRouteRateLimitCreate(d *schema.ResourceData, met request.LimitDetail = &cloudNativeAPIGatewayRateLimitDetail } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayRouteRateLimit(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayRouteRateLimit(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -308,21 +311,21 @@ func resourceTencentCloudTseCngwRouteRateLimitCreate(d *schema.ResourceData, met return err } - d.SetId(gatewayId + FILED_SP + routeId) + d.SetId(gatewayId + tccommon.FILED_SP + routeId) return resourceTencentCloudTseCngwRouteRateLimitRead(d, meta) } func resourceTencentCloudTseCngwRouteRateLimitRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route_rate_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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()) } @@ -467,14 +470,14 @@ func resourceTencentCloudTseCngwRouteRateLimitRead(d *schema.ResourceData, meta } func resourceTencentCloudTseCngwRouteRateLimitUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tse.NewModifyCloudNativeAPIGatewayRouteRateLimitRequest() - 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()) } @@ -581,10 +584,10 @@ func resourceTencentCloudTseCngwRouteRateLimitUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGatewayRouteRateLimit(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGatewayRouteRateLimit(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -599,14 +602,14 @@ func resourceTencentCloudTseCngwRouteRateLimitUpdate(d *schema.ResourceData, met } func resourceTencentCloudTseCngwRouteRateLimitDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_route_rate_limit.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_route_rate_limit_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit_test.go similarity index 81% rename from tencentcloud/resource_tc_tse_cngw_route_rate_limit_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit_test.go index f4a0401c70..b9885260c3 100644 --- a/tencentcloud/resource_tc_tse_cngw_route_rate_limit_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_route_rate_limit_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,9 +19,9 @@ func TestAccTencentCloudTseCngwRouteRateLimitResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwRouteRateLimitDestroy, Steps: []resource.TestStep{ { @@ -25,7 +29,7 @@ func TestAccTencentCloudTseCngwRouteRateLimitResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwRouteRateLimitExists("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "limit_detail.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "limit_detail.0.enabled", "true"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route_rate_limit.cngw_route_rate_limit", "limit_detail.0.header", "req"), @@ -50,15 +54,15 @@ func TestAccTencentCloudTseCngwRouteRateLimitResource_basic(t *testing.T) { } func testAccCheckTseCngwRouteRateLimitDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_route_rate_limit" { 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("invalid ID %s", rs.Primary.ID) } @@ -79,22 +83,22 @@ func testAccCheckTseCngwRouteRateLimitDestroy(s *terraform.State) error { func testAccCheckTseCngwRouteRateLimitExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } gatewayId := idSplit[0] routeId := idSplit[1] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwRouteRateLimitById(ctx, gatewayId, routeId) if err != nil { return err diff --git a/tencentcloud/resource_tc_tse_cngw_route_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_route_test.go similarity index 82% rename from tencentcloud/resource_tc_tse_cngw_route_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_route_test.go index 8e62e51c82..9bf57e5018 100644 --- a/tencentcloud/resource_tc_tse_cngw_route_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_route_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,9 +19,9 @@ func TestAccTencentCloudTseCngwRouteResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwRouteDestroy, Steps: []resource.TestStep{ { @@ -25,7 +29,7 @@ func TestAccTencentCloudTseCngwRouteResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwRouteExists("tencentcloud_tse_cngw_route.cngw_route"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_route.cngw_route", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "hosts.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "https_redirect_status_code", "426"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "paths.#", "1"), @@ -49,7 +53,7 @@ func TestAccTencentCloudTseCngwRouteResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwRouteExists("tencentcloud_tse_cngw_route.cngw_route"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_route.cngw_route", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "hosts.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "https_redirect_status_code", "301"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_route.cngw_route", "paths.#", "1"), @@ -68,15 +72,15 @@ func TestAccTencentCloudTseCngwRouteResource_basic(t *testing.T) { } func testAccCheckTseCngwRouteDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_route" { 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("invalid ID %s", rs.Primary.ID) } @@ -98,15 +102,15 @@ func testAccCheckTseCngwRouteDestroy(s *terraform.State) error { func testAccCheckTseCngwRouteExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } @@ -114,7 +118,7 @@ func testAccCheckTseCngwRouteExists(r string) resource.TestCheckFunc { serviceID := idSplit[1] routeName := idSplit[2] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwRouteById(ctx, gatewayId, serviceID, routeName) if err != nil { return err @@ -128,7 +132,7 @@ func testAccCheckTseCngwRouteExists(r string) resource.TestCheckFunc { } } -const testAccTseCngwRoute = DefaultTseVar + ` +const testAccTseCngwRoute = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_route" "cngw_route" { destination_ports = [] @@ -155,7 +159,7 @@ resource "tencentcloud_tse_cngw_route" "cngw_route" { } ` -const testAccTseCngwRouteUp = DefaultTseVar + ` +const testAccTseCngwRouteUp = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_route" "cngw_route" { destination_ports = [] diff --git a/tencentcloud/resource_tc_tse_cngw_service.go b/tencentcloud/services/tse/resource_tc_tse_cngw_service.go similarity index 88% rename from tencentcloud/resource_tc_tse_cngw_service.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_service.go index 2f671cbc26..95fa70bc20 100644 --- a/tencentcloud/resource_tc_tse_cngw_service.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_service.go @@ -1,6 +1,9 @@ -package tencentcloud +package tse import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwService() *schema.Resource { +func ResourceTencentCloudTseCngwService() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwServiceCreate, Read: resourceTencentCloudTseCngwServiceRead, @@ -223,10 +227,10 @@ func resourceTencentCloudTseCngwService() *schema.Resource { } func resourceTencentCloudTseCngwServiceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tse.NewCreateCloudNativeAPIGatewayServiceRequest() @@ -341,10 +345,10 @@ func resourceTencentCloudTseCngwServiceCreate(d *schema.ResourceData, meta inter request.UpstreamInfo = &kongUpstreamInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayService(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayService(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -355,12 +359,12 @@ func resourceTencentCloudTseCngwServiceCreate(d *schema.ResourceData, meta inter return err } - d.SetId(gatewayId + FILED_SP + name) + d.SetId(gatewayId + tccommon.FILED_SP + name) - 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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tse:%s:uin/:cngw_service/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -371,15 +375,15 @@ func resourceTencentCloudTseCngwServiceCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTseCngwServiceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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()) } @@ -539,8 +543,8 @@ func resourceTencentCloudTseCngwServiceRead(d *schema.ResourceData, meta interfa _ = d.Set("service_id", cngwService.ID) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tse", "cngw_service", tcClient.Region, d.Id()) if err != nil { return err @@ -551,15 +555,15 @@ func resourceTencentCloudTseCngwServiceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTseCngwServiceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service.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 := tse.NewModifyCloudNativeAPIGatewayServiceRequest() - 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()) } @@ -568,7 +572,7 @@ func resourceTencentCloudTseCngwServiceUpdate(d *schema.ResourceData, meta inter request.GatewayId = &gatewayId request.Name = &name - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} cngwService, err := service.DescribeTseCngwServiceById(ctx, gatewayId, name) if err != nil { return err @@ -690,10 +694,10 @@ func resourceTencentCloudTseCngwServiceUpdate(d *schema.ResourceData, meta inter request.UpstreamInfo = &kongUpstreamInfo } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGatewayService(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGatewayService(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -705,11 +709,11 @@ func resourceTencentCloudTseCngwServiceUpdate(d *schema.ResourceData, meta inter } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tse", "cngw_service", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tse", "cngw_service", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -719,14 +723,14 @@ func resourceTencentCloudTseCngwServiceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTseCngwServiceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_service_rate_limit.go b/tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit.go similarity index 91% rename from tencentcloud/resource_tc_tse_cngw_service_rate_limit.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit.go index de7c411597..82c27b1889 100644 --- a/tencentcloud/resource_tc_tse_cngw_service_rate_limit.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseCngwServiceRateLimit() *schema.Resource { +func ResourceTencentCloudTseCngwServiceRateLimit() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseCngwServiceRateLimitCreate, Read: resourceTencentCloudTseCngwServiceRateLimitRead, @@ -187,10 +190,10 @@ func resourceTencentCloudTseCngwServiceRateLimit() *schema.Resource { } func resourceTencentCloudTseCngwServiceRateLimitCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tse.NewCreateCloudNativeAPIGatewayServiceRateLimitRequest() @@ -294,10 +297,10 @@ func resourceTencentCloudTseCngwServiceRateLimitCreate(d *schema.ResourceData, m request.LimitDetail = &cloudNativeAPIGatewayRateLimitDetail } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateCloudNativeAPIGatewayServiceRateLimit(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateCloudNativeAPIGatewayServiceRateLimit(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -308,21 +311,21 @@ func resourceTencentCloudTseCngwServiceRateLimitCreate(d *schema.ResourceData, m return err } - d.SetId(gatewayId + FILED_SP + name) + d.SetId(gatewayId + tccommon.FILED_SP + name) return resourceTencentCloudTseCngwServiceRateLimitRead(d, meta) } func resourceTencentCloudTseCngwServiceRateLimitRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service_rate_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{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()) } @@ -470,14 +473,14 @@ func resourceTencentCloudTseCngwServiceRateLimitRead(d *schema.ResourceData, met } func resourceTencentCloudTseCngwServiceRateLimitUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tse.NewModifyCloudNativeAPIGatewayServiceRateLimitRequest() - 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()) } @@ -584,10 +587,10 @@ func resourceTencentCloudTseCngwServiceRateLimitUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().ModifyCloudNativeAPIGatewayServiceRateLimit(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().ModifyCloudNativeAPIGatewayServiceRateLimit(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -602,14 +605,14 @@ func resourceTencentCloudTseCngwServiceRateLimitUpdate(d *schema.ResourceData, m } func resourceTencentCloudTseCngwServiceRateLimitDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_cngw_service_rate_limit.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TseService{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_tse_cngw_service_rate_limit_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit_test.go similarity index 81% rename from tencentcloud/resource_tc_tse_cngw_service_rate_limit_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit_test.go index fca2409828..4017d5200e 100644 --- a/tencentcloud/resource_tc_tse_cngw_service_rate_limit_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_service_rate_limit_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,9 +19,9 @@ func TestAccTencentCloudTseCngwServiceRateLimitResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwServiceRateLimitDestroy, Steps: []resource.TestStep{ { @@ -25,7 +29,7 @@ func TestAccTencentCloudTseCngwServiceRateLimitResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwServiceRateLimitExists("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "gateway_id", tcacctest.DefaultTseGatewayId), // resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "name", "test"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "limit_detail.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service_rate_limit.cngw_service_rate_limit", "limit_detail.0.enabled", "true"), @@ -51,15 +55,15 @@ func TestAccTencentCloudTseCngwServiceRateLimitResource_basic(t *testing.T) { } func testAccCheckTseCngwServiceRateLimitDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_service_rate_limit" { 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("invalid ID %s", rs.Primary.ID) } @@ -80,22 +84,22 @@ func testAccCheckTseCngwServiceRateLimitDestroy(s *terraform.State) error { func testAccCheckTseCngwServiceRateLimitExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } gatewayId := idSplit[0] name := idSplit[1] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwServiceRateLimitById(ctx, gatewayId, name) if err != nil { return err @@ -109,7 +113,7 @@ func testAccCheckTseCngwServiceRateLimitExists(r string) resource.TestCheckFunc } } -const testAccTseCngwServiceRateLimit = DefaultTseVar + ` +const testAccTseCngwServiceRateLimit = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_service_rate_limit" "cngw_service_rate_limit" { gateway_id = var.gateway_id diff --git a/tencentcloud/resource_tc_tse_cngw_service_test.go b/tencentcloud/services/tse/resource_tc_tse_cngw_service_test.go similarity index 88% rename from tencentcloud/resource_tc_tse_cngw_service_test.go rename to tencentcloud/services/tse/resource_tc_tse_cngw_service_test.go index 9fd05b267f..4ed172f983 100644 --- a/tencentcloud/resource_tc_tse_cngw_service_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_cngw_service_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse_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" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + "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" @@ -16,9 +20,9 @@ func TestAccTencentCloudTseCngwServiceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTseCngwServiceDestroy, Steps: []resource.TestStep{ { @@ -26,7 +30,7 @@ func TestAccTencentCloudTseCngwServiceResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwServiceExists("tencentcloud_tse_cngw_service.cngw_service"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_service.cngw_service", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "name", "terraform-test"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "path", "/test"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "protocol", "http"), @@ -60,7 +64,7 @@ func TestAccTencentCloudTseCngwServiceResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTseCngwServiceExists("tencentcloud_tse_cngw_service.cngw_service"), resource.TestCheckResourceAttrSet("tencentcloud_tse_cngw_service.cngw_service", "id"), - resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "gateway_id", defaultTseGatewayId), + resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "gateway_id", tcacctest.DefaultTseGatewayId), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "name", "terraform-test"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "path", "/test-1"), resource.TestCheckResourceAttr("tencentcloud_tse_cngw_service.cngw_service", "protocol", "http"), @@ -88,15 +92,15 @@ func TestAccTencentCloudTseCngwServiceResource_basic(t *testing.T) { } func testAccCheckTseCngwServiceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tse_cngw_service" { 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("invalid ID %s", rs.Primary.ID) } @@ -122,22 +126,22 @@ func testAccCheckTseCngwServiceDestroy(s *terraform.State) error { func testAccCheckTseCngwServiceExists(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) } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } gatewayId := idSplit[0] name := idSplit[1] - service := TseService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTseCngwServiceById(ctx, gatewayId, name) if err != nil { return err @@ -151,7 +155,7 @@ func testAccCheckTseCngwServiceExists(r string) resource.TestCheckFunc { } } -const testAccTseCngwService = DefaultTseVar + ` +const testAccTseCngwService = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_service" "cngw_service" { gateway_id = var.gateway_id @@ -182,7 +186,7 @@ resource "tencentcloud_tse_cngw_service" "cngw_service" { ` -const testAccTseCngwServiceUp = DefaultTseVar + ` +const testAccTseCngwServiceUp = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_cngw_service" "cngw_service" { gateway_id = var.gateway_id diff --git a/tencentcloud/resource_tc_tse_instance.go b/tencentcloud/services/tse/resource_tc_tse_instance.go similarity index 85% rename from tencentcloud/resource_tc_tse_instance.go rename to tencentcloud/services/tse/resource_tc_tse_instance.go index 03bc173425..462ca155c3 100644 --- a/tencentcloud/resource_tc_tse_instance.go +++ b/tencentcloud/services/tse/resource_tc_tse_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package tse import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTseInstance() *schema.Resource { +func ResourceTencentCloudTseInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseInstanceCreate, Read: resourceTencentCloudTseInstanceRead, @@ -153,11 +157,11 @@ func resourceTencentCloudTseInstance() *schema.Resource { } func resourceTencentCloudTseInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_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 = tse.NewCreateEngineRequest() @@ -256,10 +260,10 @@ func resourceTencentCloudTseInstanceCreate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateEngine(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateEngine(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -274,14 +278,14 @@ func resourceTencentCloudTseInstanceCreate(d *schema.ResourceData, meta interfac instanceId = *response.Response.InstanceId d.SetId(instanceId) - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseInstanceStatusById(ctx, instanceId, "create"); err != nil { return err } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tse:%s:uin/:instance/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -292,13 +296,13 @@ func resourceTencentCloudTseInstanceCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTseInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -420,8 +424,8 @@ func resourceTencentCloudTseInstanceRead(d *schema.ResourceData, meta interface{ _ = d.Set("enable_client_internet_access", instance.EnableInternet) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tse", "instance", tcClient.Region, d.Id()) if err != nil { return err @@ -432,11 +436,11 @@ func resourceTencentCloudTseInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTseInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_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) request := tse.NewUpdateEngineInternetAccessRequest() instanceId := d.Id() @@ -460,10 +464,10 @@ func resourceTencentCloudTseInstanceUpdate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().UpdateEngineInternetAccess(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().UpdateEngineInternetAccess(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -474,18 +478,18 @@ func resourceTencentCloudTseInstanceUpdate(d *schema.ResourceData, meta interfac return err } - service := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.CheckTseInstanceStatusById(ctx, instanceId, "update"); err != nil { return err } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tse", "instance", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tse", "instance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -495,13 +499,13 @@ func resourceTencentCloudTseInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTseInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() if err := service.DeleteTseInstanceById(ctx, instanceId); err != nil { diff --git a/tencentcloud/services/tse/resource_tc_tse_instance_test.go b/tencentcloud/services/tse/resource_tc_tse_instance_test.go new file mode 100644 index 0000000000..794b9e22f2 --- /dev/null +++ b/tencentcloud/services/tse/resource_tc_tse_instance_test.go @@ -0,0 +1,130 @@ +package tse_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctse "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tse" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTseInstanceResource_basic -v +func TestAccTencentCloudTseInstanceResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTseInstanceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTseInstance, + Check: resource.ComposeTestCheckFunc( + testAccCheckTseInstanceExists("tencentcloud_tse_instance.instance"), + resource.TestCheckResourceAttrSet("tencentcloud_tse_instance.instance", "id"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_type", "zookeeper"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_version", "3.5.9.4"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_product_version", "STANDARD"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_region", "ap-guangzhou"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_name", "zookeeper-test"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "trade_type", "0"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_resource_spec", tcacctest.DefaultEngineResourceSpec), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "engine_node_num", "3"), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "vpc_id", tcacctest.DefaultTseVpcId), + resource.TestCheckResourceAttr("tencentcloud_tse_instance.instance", "subnet_id", tcacctest.DefaultTseSubnetId), + ), + }, + { + ResourceName: "tencentcloud_tse_instance.instance", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTseInstanceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tse_instance" { + continue + } + + res, err := service.DescribeTseInstanceById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tse instance %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTseInstanceExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctse.NewTseService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTseInstanceById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tse instance %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTseInstanceVar = ` +variable "engine_resource_spec" { + default = "` + tcacctest.DefaultEngineResourceSpec + `" +} + +variable "vpc_id" { + default = "` + tcacctest.DefaultTseVpcId + `" +} + +variable "subnet_id" { + default = "` + tcacctest.DefaultTseSubnetId + `" +} +` + +const testAccTseInstance = testAccTseInstanceVar + ` + +resource "tencentcloud_tse_instance" "instance" { + engine_type = "zookeeper" + engine_version = "3.5.9.4" + engine_product_version = "STANDARD" + engine_region = "ap-guangzhou" + engine_name = "zookeeper-test" + trade_type = 0 + engine_resource_spec = var.engine_resource_spec + engine_node_num = 3 + vpc_id = var.vpc_id + subnet_id = var.subnet_id + + tags = { + "createdBy" = "terraform" + } +} + +` diff --git a/tencentcloud/services/tse/resource_tc_tse_waf_domains.go b/tencentcloud/services/tse/resource_tc_tse_waf_domains.go new file mode 100644 index 0000000000..0f58e4b0fc --- /dev/null +++ b/tencentcloud/services/tse/resource_tc_tse_waf_domains.go @@ -0,0 +1,146 @@ +package tse + +import ( + "context" + "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" + tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTseWafDomains() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTseWafDomainsCreate, + Read: resourceTencentCloudTseWafDomainsRead, + Delete: resourceTencentCloudTseWafDomainsDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "gateway_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Gateway ID.", + }, + + "domain": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "The waf protected domain name.", + }, + }, + } +} + +func resourceTencentCloudTseWafDomainsCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_domains.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tse.NewCreateWafDomainsRequest() + gatewayId string + domain string + ) + if v, ok := d.GetOk("gateway_id"); ok { + gatewayId = v.(string) + request.GatewayId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("domain"); ok { + domain = v.(string) + request.Domains = append(request.Domains, helper.String(v.(string))) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CreateWafDomains(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 tse wafDomains failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{gatewayId, domain}, tccommon.FILED_SP)) + + return resourceTencentCloudTseWafDomainsRead(d, meta) +} + +func resourceTencentCloudTseWafDomainsRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_domains.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TseService{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()) + } + gatewayId := idSplit[0] + domain := idSplit[1] + + wafDomains, err := service.DescribeTseWafDomainsById(ctx, gatewayId) + if err != nil { + return err + } + + if wafDomains == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TseWafDomains` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("gateway_id", gatewayId) + + if wafDomains.Domains != nil { + for _, v := range wafDomains.Domains { + if *v == domain { + _ = d.Set("domain", domain) + break + } + } + } + + return nil +} + +func resourceTencentCloudTseWafDomainsDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_domains.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TseService{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()) + } + gatewayId := idSplit[0] + domain := idSplit[1] + + if err := service.DeleteTseWafDomainsById(ctx, gatewayId, domain); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tse_waf_domains_test.go b/tencentcloud/services/tse/resource_tc_tse_waf_domains_test.go similarity index 79% rename from tencentcloud/resource_tc_tse_waf_domains_test.go rename to tencentcloud/services/tse/resource_tc_tse_waf_domains_test.go index 271ee6f116..9b9f2515f1 100644 --- a/tencentcloud/resource_tc_tse_waf_domains_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_waf_domains_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseWafDomainsResource_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: testAccTseWafDomains, @@ -31,7 +33,7 @@ func TestAccTencentCloudTseWafDomainsResource_basic(t *testing.T) { }) } -const testAccTseWafDomains = DefaultTseVar + ` +const testAccTseWafDomains = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_waf_domains" "waf_domains" { domain = "tse.exmaple.com" diff --git a/tencentcloud/resource_tc_tse_waf_protection.go b/tencentcloud/services/tse/resource_tc_tse_waf_protection.go similarity index 75% rename from tencentcloud/resource_tc_tse_waf_protection.go rename to tencentcloud/services/tse/resource_tc_tse_waf_protection.go index a1411df689..20fcc8d5d4 100644 --- a/tencentcloud/resource_tc_tse_waf_protection.go +++ b/tencentcloud/services/tse/resource_tc_tse_waf_protection.go @@ -1,16 +1,18 @@ -package tencentcloud +package tse 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" ) -func resourceTencentCloudTseWafProtection() *schema.Resource { +func ResourceTencentCloudTseWafProtection() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTseWafProtectionCreate, Read: resourceTencentCloudTseWafProtectionRead, @@ -56,8 +58,8 @@ func resourceTencentCloudTseWafProtection() *schema.Resource { } func resourceTencentCloudTseWafProtectionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_protection.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_protection.create")() + defer tccommon.InconsistentCheck(d, meta)() var gatewayId string if v, ok := d.GetOk("gateway_id"); ok { @@ -70,14 +72,14 @@ func resourceTencentCloudTseWafProtectionCreate(d *schema.ResourceData, meta int } func resourceTencentCloudTseWafProtectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_protection.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_protection.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 := TseService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TseService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} gatewayId := d.Id() @@ -102,10 +104,10 @@ func resourceTencentCloudTseWafProtectionRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTseWafProtectionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_protection.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_protection.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( resourceType string @@ -132,10 +134,10 @@ func resourceTencentCloudTseWafProtectionUpdate(d *schema.ResourceData, meta int request.GatewayId = &gatewayId request.Type = &resourceType request.List = resourceList - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().OpenWafProtection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().OpenWafProtection(request) if e != nil { - return retryError(e) + return tccommon.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,10 +152,10 @@ func resourceTencentCloudTseWafProtectionUpdate(d *schema.ResourceData, meta int request.GatewayId = &gatewayId request.Type = &resourceType request.List = resourceList - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CloseWafProtection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTseClient().CloseWafProtection(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -172,8 +174,8 @@ func resourceTencentCloudTseWafProtectionUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudTseWafProtectionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tse_waf_protection.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tse_waf_protection.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tse_waf_protection_test.go b/tencentcloud/services/tse/resource_tc_tse_waf_protection_test.go similarity index 87% rename from tencentcloud/resource_tc_tse_waf_protection_test.go rename to tencentcloud/services/tse/resource_tc_tse_waf_protection_test.go index 54e5c1e02c..e5891b574c 100644 --- a/tencentcloud/resource_tc_tse_waf_protection_test.go +++ b/tencentcloud/services/tse/resource_tc_tse_waf_protection_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tse_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 TestAccTencentCloudTseWafProtectionResource_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: testAccTseWafProtection_open, @@ -47,7 +49,7 @@ resource "tencentcloud_tse_waf_protection" "waf_protection" { } ` -const testAccTseWafProtection_close = DefaultTseVar + ` +const testAccTseWafProtection_close = tcacctest.DefaultTseVar + ` resource "tencentcloud_tse_waf_protection" "waf_protection" { gateway_id = var.gateway_id diff --git a/tencentcloud/service_tencentcloud_tse.go b/tencentcloud/services/tse/service_tencentcloud_tse.go similarity index 96% rename from tencentcloud/service_tencentcloud_tse.go rename to tencentcloud/services/tse/service_tencentcloud_tse.go index f98ae35b99..c95663eefc 100644 --- a/tencentcloud/service_tencentcloud_tse.go +++ b/tencentcloud/services/tse/service_tencentcloud_tse.go @@ -1,4 +1,4 @@ -package tencentcloud +package tse import ( "context" @@ -6,20 +6,27 @@ import ( "log" "strconv" + 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" tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207" + "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 NewTseService(client *connectivity.TencentCloudClient) TseService { + return TseService{client: client} +} + type TseService struct { client *connectivity.TencentCloudClient } func (me *TseService) DescribeTseInstanceById(ctx context.Context, instanceId string) (instance *tse.SREInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeSREInstancesRequest() filter := &tse.Filter{ @@ -52,9 +59,9 @@ func (me *TseService) DescribeTseInstanceById(ctx context.Context, instanceId st } func (me *TseService) CheckTseInstanceStatusById(ctx context.Context, instanceId, operate string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := me.DescribeTseInstanceById(ctx, instanceId) if e != nil { return resource.NonRetryableError(e) @@ -109,7 +116,7 @@ func (me *TseService) CheckTseInstanceStatusById(ctx context.Context, instanceId } func (me *TseService) DeleteTseInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteEngineRequest() request.InstanceId = &instanceId @@ -134,7 +141,7 @@ func (me *TseService) DeleteTseInstanceById(ctx context.Context, instanceId stri func (me *TseService) DescribeTseAccessAddressByFilter(ctx context.Context, param map[string]interface{}) (accessAddress *tse.DescribeSREInstanceAccessAddressResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeSREInstanceAccessAddressRequest() ) @@ -180,7 +187,7 @@ func (me *TseService) DescribeTseAccessAddressByFilter(ctx context.Context, para func (me *TseService) DescribeTseNacosReplicasByFilter(ctx context.Context, param map[string]interface{}) (nacosReplicas []*tse.NacosReplica, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeNacosReplicasRequest() ) @@ -228,7 +235,7 @@ func (me *TseService) DescribeTseNacosReplicasByFilter(ctx context.Context, para func (me *TseService) DescribeTseZookeeperReplicasByFilter(ctx context.Context, param map[string]interface{}) (zookeeperReplicas []*tse.ZookeeperReplica, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeZookeeperReplicasRequest() ) @@ -276,7 +283,7 @@ func (me *TseService) DescribeTseZookeeperReplicasByFilter(ctx context.Context, func (me *TseService) DescribeTseZookeeperServerInterfacesByFilter(ctx context.Context, param map[string]interface{}) (zookeeperServerInterfaces []*tse.ZookeeperServerInterface, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeZookeeperServerInterfacesRequest() ) @@ -324,7 +331,7 @@ func (me *TseService) DescribeTseZookeeperServerInterfacesByFilter(ctx context.C func (me *TseService) DescribeTseNacosServerInterfacesByFilter(ctx context.Context, instanceId string) (nacosServerInterfaces []*tse.NacosServerInterface, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeNacosServerInterfacesRequest() ) @@ -368,7 +375,7 @@ func (me *TseService) DescribeTseNacosServerInterfacesByFilter(ctx context.Conte func (me *TseService) DescribeTseGatewayNodesByFilter(ctx context.Context, param map[string]interface{}) (gatewayNodes []*tse.CloudNativeAPIGatewayNode, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewayNodesRequest() ) @@ -419,7 +426,7 @@ func (me *TseService) DescribeTseGatewayNodesByFilter(ctx context.Context, param func (me *TseService) DescribeTseGatewayCanaryRulesByFilter(ctx context.Context, param map[string]interface{}) (gatewayCanaryRules *tse.CloudAPIGatewayCanaryRuleList, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewayCanaryRulesRequest() ) @@ -478,7 +485,7 @@ func (me *TseService) DescribeTseGatewayCanaryRulesByFilter(ctx context.Context, func (me *TseService) DescribeTseGatewayRoutesByFilter(ctx context.Context, param map[string]interface{}) (gatewayRoutes *tse.KongServiceRouteList, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewayRoutesRequest() ) @@ -543,7 +550,7 @@ func (me *TseService) DescribeTseGatewayRoutesByFilter(ctx context.Context, para func (me *TseService) DescribeTseGatewayServicesByFilter(ctx context.Context, param map[string]interface{}) (gatewayServices *tse.KongServices, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewayServicesRequest() ) @@ -601,7 +608,7 @@ func (me *TseService) DescribeTseGatewayServicesByFilter(ctx context.Context, pa } func (me *TseService) DescribeTseCngwServiceById(ctx context.Context, gatewayId, name string) (cngwService *tse.KongServiceDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeOneCloudNativeAPIGatewayServiceRequest() request.GatewayId = &gatewayId @@ -631,7 +638,7 @@ func (me *TseService) DescribeTseCngwServiceById(ctx context.Context, gatewayId, } func (me *TseService) DeleteTseCngwServiceById(ctx context.Context, gatewayId, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayServiceRequest() request.GatewayId = &gatewayId @@ -656,7 +663,7 @@ func (me *TseService) DeleteTseCngwServiceById(ctx context.Context, gatewayId, n } func (me *TseService) DescribeTseCngwServiceRateLimitById(ctx context.Context, gatewayId string, name string) (cngwServiceRateLimit *tse.CloudNativeAPIGatewayRateLimitDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeCloudNativeAPIGatewayServiceRateLimitRequest() request.GatewayId = &gatewayId @@ -686,7 +693,7 @@ func (me *TseService) DescribeTseCngwServiceRateLimitById(ctx context.Context, g } func (me *TseService) DeleteTseCngwServiceRateLimitById(ctx context.Context, gatewayId string, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayServiceRateLimitRequest() request.GatewayId = &gatewayId @@ -711,7 +718,7 @@ func (me *TseService) DeleteTseCngwServiceRateLimitById(ctx context.Context, gat } func (me *TseService) DescribeTseCngwRouteById(ctx context.Context, gatewayId string, serviceID string, routeName string) (cngwRoute *tse.KongRoutePreview, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeCloudNativeAPIGatewayRoutesRequest() request.GatewayId = &gatewayId @@ -746,7 +753,7 @@ func (me *TseService) DescribeTseCngwRouteById(ctx context.Context, gatewayId st } func (me *TseService) DeleteTseCngwRouteById(ctx context.Context, gatewayId string, routeName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayRouteRequest() request.GatewayId = &gatewayId @@ -771,7 +778,7 @@ func (me *TseService) DeleteTseCngwRouteById(ctx context.Context, gatewayId stri } func (me *TseService) DescribeTseCngwRouteRateLimitById(ctx context.Context, gatewayId, routeId string) (cngwRouteRateLimit *tse.CloudNativeAPIGatewayRateLimitDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeCloudNativeAPIGatewayRouteRateLimitRequest() request.GatewayId = &gatewayId @@ -801,7 +808,7 @@ func (me *TseService) DescribeTseCngwRouteRateLimitById(ctx context.Context, gat } func (me *TseService) DeleteTseCngwRouteRateLimitById(ctx context.Context, gatewayId, routeId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayRouteRateLimitRequest() request.GatewayId = &gatewayId @@ -826,7 +833,7 @@ func (me *TseService) DeleteTseCngwRouteRateLimitById(ctx context.Context, gatew } func (me *TseService) DescribeTseCngwCanaryRuleById(ctx context.Context, gatewayId string, serviceId string, priority string) (cngwCanaryRule *tse.CloudNativeAPIGatewayCanaryRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) priorityInt64, err := strconv.ParseInt(priority, 10, 64) if err != nil { @@ -867,7 +874,7 @@ func (me *TseService) DescribeTseCngwCanaryRuleById(ctx context.Context, gateway } func (me *TseService) DeleteTseCngwCanaryRuleById(ctx context.Context, gatewayId string, serviceId string, priority string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) priorityInt64, err := strconv.ParseInt(priority, 10, 64) if err != nil { @@ -898,7 +905,7 @@ func (me *TseService) DeleteTseCngwCanaryRuleById(ctx context.Context, gatewayId } func (me *TseService) DescribeTseCngwGatewayById(ctx context.Context, gatewayId string) (cngwGateway *tse.DescribeCloudNativeAPIGatewayResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeCloudNativeAPIGatewayRequest() request.GatewayId = &gatewayId @@ -927,7 +934,7 @@ func (me *TseService) DescribeTseCngwGatewayById(ctx context.Context, gatewayId } func (me *TseService) DeleteTseCngwGatewayById(ctx context.Context, gatewayId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayRequest() request.GatewayId = &gatewayId @@ -951,9 +958,9 @@ func (me *TseService) DeleteTseCngwGatewayById(ctx context.Context, gatewayId st } func (me *TseService) CheckTseNativeAPIGatewayStatusById(ctx context.Context, gatewayId, operate string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { gateway, e := me.DescribeTseCngwGatewayById(ctx, gatewayId) if e != nil && operate != "delete" { return resource.NonRetryableError(e) @@ -1014,7 +1021,7 @@ func (me *TseService) CheckTseNativeAPIGatewayStatusById(ctx context.Context, ga } func (me *TseService) DescribeTseCngwGroupById(ctx context.Context, gatewayId string, groupId string) (cngwGroup *tse.NativeGatewayServerGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeNativeGatewayServerGroupsRequest() request.GatewayId = &gatewayId @@ -1050,7 +1057,7 @@ func (me *TseService) DescribeTseCngwGroupById(ctx context.Context, gatewayId st } func (me *TseService) DeleteTseCngwGroupById(ctx context.Context, gatewayId string, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteNativeGatewayServerGroupRequest() request.GatewayId = &gatewayId @@ -1076,7 +1083,7 @@ func (me *TseService) DeleteTseCngwGroupById(ctx context.Context, gatewayId stri func (me *TseService) DescribeTseGatewaysByFilter(ctx context.Context, param map[string]interface{}) (gateways *tse.ListCloudNativeAPIGatewayResult, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewaysRequest() ) @@ -1132,7 +1139,7 @@ func (me *TseService) DescribeTseGatewaysByFilter(ctx context.Context, param map } func (me *TseService) DescribeTseGroupsByFilter(ctx context.Context, param map[string]interface{}) (groups *tse.NativeGatewayServerGroups, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeNativeGatewayServerGroupsRequest() ) @@ -1191,9 +1198,9 @@ func (me *TseService) DescribeTseGroupsByFilter(ctx context.Context, param map[s } func (me *TseService) CheckTseNativeAPIGatewayGroupStatusById(ctx context.Context, gatewayId, groupId, operate string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { gateway, e := me.DescribeTseCngwGroupById(ctx, gatewayId, groupId) if e != nil && operate != "delete" { return resource.NonRetryableError(e) @@ -1255,7 +1262,7 @@ func (me *TseService) CheckTseNativeAPIGatewayGroupStatusById(ctx context.Contex func (me *TseService) DescribeTseGatewayCertificatesByFilter(ctx context.Context, param map[string]interface{}) (gatewayCertificates *tse.KongCertificatesList, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tse.NewDescribeCloudNativeAPIGatewayCertificatesRequest() ) @@ -1313,7 +1320,7 @@ func (me *TseService) DescribeTseGatewayCertificatesByFilter(ctx context.Context } func (me *TseService) DescribeTseCngwCertificateById(ctx context.Context, gatewayId string, id string) (cngwCertificate *tse.KongCertificatesPreview, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeCloudNativeAPIGatewayCertificateDetailsRequest() request.GatewayId = &gatewayId @@ -1342,7 +1349,7 @@ func (me *TseService) DescribeTseCngwCertificateById(ctx context.Context, gatewa } func (me *TseService) DeleteTseCngwCertificateById(ctx context.Context, gatewayId string, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteCloudNativeAPIGatewayCertificateRequest() request.GatewayId = &gatewayId @@ -1367,7 +1374,7 @@ func (me *TseService) DeleteTseCngwCertificateById(ctx context.Context, gatewayI } func (me *TseService) DescribeTseWafProtectionById(ctx context.Context, gatewayId string) (wafProtection *tse.DescribeWafProtectionResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeWafProtectionRequest() request.GatewayId = &gatewayId @@ -1396,7 +1403,7 @@ func (me *TseService) DescribeTseWafProtectionById(ctx context.Context, gatewayI } func (me *TseService) DescribeTseWafDomainsById(ctx context.Context, gatewayId string) (wafDomains *tse.DescribeWafDomainsResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDescribeWafDomainsRequest() request.GatewayId = &gatewayId @@ -1425,7 +1432,7 @@ func (me *TseService) DescribeTseWafDomainsById(ctx context.Context, gatewayId s } func (me *TseService) DeleteTseWafDomainsById(ctx context.Context, gatewayId string, domain string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tse.NewDeleteWafDomainsRequest() request.GatewayId = &gatewayId diff --git a/tencentcloud/data_source_tc_tsf_api_detail.go b/tencentcloud/services/tsf/data_source_tc_tsf_api_detail.go similarity index 92% rename from tencentcloud/data_source_tc_tsf_api_detail.go rename to tencentcloud/services/tsf/data_source_tc_tsf_api_detail.go index 05066307a3..8b7552d457 100644 --- a/tencentcloud/data_source_tc_tsf_api_detail.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_api_detail.go @@ -1,16 +1,19 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApiDetail() *schema.Resource { +func DataSourceTencentCloudTsfApiDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApiDetailRead, Schema: map[string]*schema.Schema{ @@ -185,12 +188,12 @@ func dataSourceTencentCloudTsfApiDetail() *schema.Resource { } func dataSourceTencentCloudTsfApiDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_api_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_api_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) var ( microserviceId string path string @@ -225,13 +228,13 @@ func dataSourceTencentCloudTsfApiDetailRead(d *schema.ResourceData, meta interfa paramMap["ApplicationId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var apiDetail *tsf.ApiDetailResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApiDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiDetail = result return nil @@ -357,10 +360,10 @@ func dataSourceTencentCloudTsfApiDetailRead(d *schema.ResourceData, meta interfa _ = d.Set("result", []interface{}{apiDetailResponseMap}) } - d.SetId(strings.Join([]string{microserviceId, path, method, pkgVersion, applicationId}, FILED_SP)) + d.SetId(strings.Join([]string{microserviceId, path, method, pkgVersion, applicationId}, tccommon.FILED_SP)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), apiDetailResponseMap); e != nil { + if e := tccommon.WriteToFile(output.(string), apiDetailResponseMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_api_detail_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_api_detail_test.go similarity index 85% rename from tencentcloud/data_source_tc_tsf_api_detail_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_api_detail_test.go index 0cdc17dbf8..281bf1f6d5 100644 --- a/tencentcloud/data_source_tc_tsf_api_detail_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_api_detail_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApiDetailDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApiDetailDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_api_detail.api_detail"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_api_detail.api_detail"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_detail.api_detail", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_detail.api_detail", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_detail.api_detail", "result.0.can_run"), diff --git a/tencentcloud/data_source_tc_tsf_api_group.go b/tencentcloud/services/tsf/data_source_tc_tsf_api_group.go similarity index 95% rename from tencentcloud/data_source_tc_tsf_api_group.go rename to tencentcloud/services/tsf/data_source_tc_tsf_api_group.go index 789792ceea..f1a6fa3663 100644 --- a/tencentcloud/data_source_tc_tsf_api_group.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_api_group.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApiGroup() *schema.Resource { +func DataSourceTencentCloudTsfApiGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApiGroupRead, Schema: map[string]*schema.Schema{ @@ -218,12 +221,12 @@ func dataSourceTencentCloudTsfApiGroup() *schema.Resource { } func dataSourceTencentCloudTsfApiGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_api_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_api_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("search_word"); ok { @@ -254,13 +257,13 @@ func dataSourceTencentCloudTsfApiGroupRead(d *schema.ResourceData, meta interfac paramMap["GatewayInstanceId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var apiGroupInfo *tsf.TsfPageApiGroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApiGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiGroupInfo = result return nil @@ -402,7 +405,7 @@ func dataSourceTencentCloudTsfApiGroupRead(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), tsfPageApiGroupInfoMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageApiGroupInfoMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_api_group_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_api_group_test.go similarity index 90% rename from tencentcloud/data_source_tc_tsf_api_group_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_api_group_test.go index c68534700d..c66d3fe0b6 100644 --- a/tencentcloud/data_source_tc_tsf_api_group_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_api_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApiGroupDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApiGroupDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_api_group.api_group"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_api_group.api_group"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_group.api_group", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_group.api_group", "result.0.content.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_api_group.api_group", "result.0.content.0.acl_mode"), diff --git a/tencentcloud/data_source_tc_tsf_application.go b/tencentcloud/services/tsf/data_source_tc_tsf_application.go similarity index 93% rename from tencentcloud/data_source_tc_tsf_application.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application.go index 31c594862d..f7c927d7cb 100644 --- a/tencentcloud/data_source_tc_tsf_application.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApplication() *schema.Resource { +func DataSourceTencentCloudTsfApplication() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApplicationRead, Schema: map[string]*schema.Schema{ @@ -189,12 +192,12 @@ func dataSourceTencentCloudTsfApplication() *schema.Resource { } func dataSourceTencentCloudTsfApplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_application.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_application.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("application_type"); ok { @@ -215,13 +218,13 @@ func dataSourceTencentCloudTsfApplicationRead(d *schema.ResourceData, meta inter paramMap["ApplicationIdList"] = helper.InterfacesStringsPoint(applicationIdListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var application *tsf.TsfPageApplication - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApplicationByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } application = result return nil @@ -351,7 +354,7 @@ func dataSourceTencentCloudTsfApplicationRead(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), tsfPageApplicationMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageApplicationMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_application_attribute.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_attribute.go similarity index 79% rename from tencentcloud/data_source_tc_tsf_application_attribute.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_attribute.go index 2f30f962d2..62ae6f7ff8 100644 --- a/tencentcloud/data_source_tc_tsf_application_attribute.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_attribute.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApplicationAttribute() *schema.Resource { +func DataSourceTencentCloudTsfApplicationAttribute() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApplicationAttributeRead, Schema: map[string]*schema.Schema{ @@ -54,11 +57,11 @@ func dataSourceTencentCloudTsfApplicationAttribute() *schema.Resource { } func dataSourceTencentCloudTsfApplicationAttributeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_application_attribute.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_application_attribute.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) ids := "" paramMap := make(map[string]interface{}) @@ -67,14 +70,14 @@ func dataSourceTencentCloudTsfApplicationAttributeRead(d *schema.ResourceData, m paramMap["ApplicationId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var attribute *tsf.ApplicationAttribute - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApplicationAttributeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } attribute = result return nil @@ -103,7 +106,7 @@ func dataSourceTencentCloudTsfApplicationAttributeRead(d *schema.ResourceData, m d.SetId(ids) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), applicationAttributeMap); e != nil { + if e := tccommon.WriteToFile(output.(string), applicationAttributeMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_application_attribute_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_attribute_test.go similarity index 76% rename from tencentcloud/data_source_tc_tsf_application_attribute_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_attribute_test.go index 226c8b2599..43584de07b 100644 --- a/tencentcloud/data_source_tc_tsf_application_attribute_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_attribute_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApplicationAttributeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationAttributeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_attribute.application_attribute"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_attribute.application_attribute"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_attribute.application_attribute", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_attribute.application_attribute", "result.0.group_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_attribute.application_attribute", "result.0.instance_count"), diff --git a/tencentcloud/data_source_tc_tsf_application_config.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_config.go similarity index 92% rename from tencentcloud/data_source_tc_tsf_application_config.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_config.go index c6fcdb8a70..12fe756e5c 100644 --- a/tencentcloud/data_source_tc_tsf_application_config.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_config.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApplicationConfig() *schema.Resource { +func DataSourceTencentCloudTsfApplicationConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApplicationConfigRead, Schema: map[string]*schema.Schema{ @@ -140,12 +143,12 @@ func dataSourceTencentCloudTsfApplicationConfig() *schema.Resource { } func dataSourceTencentCloudTsfApplicationConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_application_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_application_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("application_id"); ok { @@ -169,13 +172,13 @@ func dataSourceTencentCloudTsfApplicationConfigRead(d *schema.ResourceData, meta paramMap["ConfigVersion"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var config *tsf.TsfPageConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApplicationConfigByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -260,7 +263,7 @@ func dataSourceTencentCloudTsfApplicationConfigRead(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), tsfPageConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_application_config_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_config_test.go similarity index 84% rename from tencentcloud/data_source_tc_tsf_application_config_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_config_test.go index 158fae9b73..6bd69f89a8 100644 --- a/tencentcloud/data_source_tc_tsf_application_config_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApplicationConfigDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationConfigDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_config.application_config"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_config.application_config"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_config.application_config", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_config.application_config", "result.0.content.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_config.application_config", "result.0.content.0.application_id"), @@ -36,11 +38,11 @@ func TestAccTencentCloudTsfApplicationConfigDataSource_basic(t *testing.T) { const testAccTsfApplicationConfigDataSourceVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } variable "config_id" { - default = "` + defaultTsfConfigId + `" + default = "` + tcacctest.DefaultTsfConfigId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_application_file_config.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_file_config.go similarity index 93% rename from tencentcloud/data_source_tc_tsf_application_file_config.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_file_config.go index f25ba4b448..bf2a14078f 100644 --- a/tencentcloud/data_source_tc_tsf_application_file_config.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_file_config.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApplicationFileConfig() *schema.Resource { +func DataSourceTencentCloudTsfApplicationFileConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApplicationFileConfigRead, Schema: map[string]*schema.Schema{ @@ -160,12 +163,12 @@ func dataSourceTencentCloudTsfApplicationFileConfig() *schema.Resource { } func dataSourceTencentCloudTsfApplicationFileConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_application_file_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_application_file_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("config_id"); ok { @@ -189,13 +192,13 @@ func dataSourceTencentCloudTsfApplicationFileConfigRead(d *schema.ResourceData, paramMap["ConfigVersion"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var config *tsf.TsfPageFileConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApplicationFileConfigByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -293,7 +296,7 @@ func dataSourceTencentCloudTsfApplicationFileConfigRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tsfPageFileConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageFileConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_application_file_config_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_file_config_test.go similarity index 89% rename from tencentcloud/data_source_tc_tsf_application_file_config_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_file_config_test.go index a2a04f96bb..5e126355e1 100644 --- a/tencentcloud/data_source_tc_tsf_application_file_config_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_file_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApplicationFileConfigDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationFileConfigDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_file_config.application_file_config"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_file_config.application_file_config"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_file_config.application_file_config", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_file_config.application_file_config", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_file_config.application_file_config", "result.0.content.#"), diff --git a/tencentcloud/data_source_tc_tsf_application_public_config.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_public_config.go similarity index 91% rename from tencentcloud/data_source_tc_tsf_application_public_config.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_public_config.go index 570f601c58..e717707126 100644 --- a/tencentcloud/data_source_tc_tsf_application_public_config.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_public_config.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { +func DataSourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfApplicationPublicConfigRead, Schema: map[string]*schema.Schema{ @@ -134,12 +137,12 @@ func dataSourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { } func dataSourceTencentCloudTsfApplicationPublicConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_application_public_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_application_public_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("config_id"); ok { @@ -159,13 +162,13 @@ func dataSourceTencentCloudTsfApplicationPublicConfigRead(d *schema.ResourceData paramMap["ConfigVersion"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var config *tsf.TsfPageConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfApplicationPublicConfigByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -247,7 +250,7 @@ func dataSourceTencentCloudTsfApplicationPublicConfigRead(d *schema.ResourceData d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tsfPageConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_application_public_config_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_public_config_test.go similarity index 85% rename from tencentcloud/data_source_tc_tsf_application_public_config_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_public_config_test.go index 86ae6908fe..fb56bdfe68 100644 --- a/tencentcloud/data_source_tc_tsf_application_public_config_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_public_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApplicationPublicConfigDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationPublicConfigDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_public_config.application_public_config"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application_public_config.application_public_config"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_public_config.application_public_config", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_public_config.application_public_config", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application_public_config.application_public_config", "result.0.content.#"), diff --git a/tencentcloud/data_source_tc_tsf_application_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_application_test.go similarity index 86% rename from tencentcloud/data_source_tc_tsf_application_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_application_test.go index d78881ff76..377615a5be 100644 --- a/tencentcloud/data_source_tc_tsf_application_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_application_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfApplicationDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application.application"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_application.application"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application.application", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application.application", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_application.application", "result.0.content.#"), @@ -38,7 +40,7 @@ func TestAccTencentCloudTsfApplicationDataSource_basic(t *testing.T) { const testAccTsfApplicationDataSourceVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_business_log_configs.go b/tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs.go similarity index 95% rename from tencentcloud/data_source_tc_tsf_business_log_configs.go rename to tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs.go index c3eaa23cda..d6b8247453 100644 --- a/tencentcloud/data_source_tc_tsf_business_log_configs.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfBusinessLogConfigs() *schema.Resource { +func DataSourceTencentCloudTsfBusinessLogConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfBusinessLogConfigsRead, Schema: map[string]*schema.Schema{ @@ -211,12 +214,12 @@ func dataSourceTencentCloudTsfBusinessLogConfigs() *schema.Resource { } func dataSourceTencentCloudTsfBusinessLogConfigsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_business_log_configs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_business_log_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("search_word"); ok { @@ -232,13 +235,13 @@ func dataSourceTencentCloudTsfBusinessLogConfigsRead(d *schema.ResourceData, met paramMap["ConfigIdList"] = helper.InterfacesStringsPoint(configIdListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var logConfig *tsf.TsfPageBusinessLogConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfBusinessLogConfigsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } logConfig = result return nil @@ -389,7 +392,7 @@ func dataSourceTencentCloudTsfBusinessLogConfigsRead(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), tsfPageBusinessLogConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageBusinessLogConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_business_log_configs_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs_test.go similarity index 84% rename from tencentcloud/data_source_tc_tsf_business_log_configs_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs_test.go index c7811b8f42..e8d60b673f 100644 --- a/tencentcloud/data_source_tc_tsf_business_log_configs_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_business_log_configs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfBusinessLogConfigsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfBusinessLogConfigsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_business_log_configs.business_log_configs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_business_log_configs.business_log_configs"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_business_log_configs.business_log_configs", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_business_log_configs.business_log_configs", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_business_log_configs.business_log_configs", "result.0.content.0.config_create_time"), @@ -31,7 +33,7 @@ func TestAccTencentCloudTsfBusinessLogConfigsDataSource_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_business_log_configs.business_log_configs", "result.0.content.0.config_tags"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_business_log_configs.business_log_configs", "result.0.content.0.config_update_time"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_business_log_configs.business_log_configs")), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_business_log_configs.business_log_configs")), }, }, }) diff --git a/tencentcloud/data_source_tc_tsf_cluster.go b/tencentcloud/services/tsf/data_source_tc_tsf_cluster.go similarity index 96% rename from tencentcloud/data_source_tc_tsf_cluster.go rename to tencentcloud/services/tsf/data_source_tc_tsf_cluster.go index 0829138f61..77f65ef076 100644 --- a/tencentcloud/data_source_tc_tsf_cluster.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_cluster.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfCluster() *schema.Resource { +func DataSourceTencentCloudTsfCluster() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfClusterRead, Schema: map[string]*schema.Schema{ @@ -290,12 +293,12 @@ func dataSourceTencentCloudTsfCluster() *schema.Resource { } func dataSourceTencentCloudTsfClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("cluster_id_list"); ok { @@ -315,13 +318,13 @@ func dataSourceTencentCloudTsfClusterRead(d *schema.ResourceData, meta interface paramMap["DisableProgramAuthCheck"] = helper.Bool(v.(bool)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var cluster *tsf.TsfPageCluster - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfClusterByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } cluster = result return nil @@ -523,7 +526,7 @@ func dataSourceTencentCloudTsfClusterRead(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), tsfPageClusterMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageClusterMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_cluster_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_cluster_test.go similarity index 81% rename from tencentcloud/data_source_tc_tsf_cluster_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_cluster_test.go index 2b428b17bd..c66eb52569 100644 --- a/tencentcloud/data_source_tc_tsf_cluster_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_cluster_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfClusterDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfClusterDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_cluster.cluster"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_cluster.cluster"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_cluster.cluster", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_cluster.cluster", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_cluster.cluster", "result.0.content.#"), @@ -33,7 +35,7 @@ func TestAccTencentCloudTsfClusterDataSource_basic(t *testing.T) { const testAccTsfClusterDataSourceVar = ` variable "cluster_id" { - default = "` + defaultTsfClustId + `" + default = "` + tcacctest.DefaultTsfClustId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_config_summary.go b/tencentcloud/services/tsf/data_source_tc_tsf_config_summary.go similarity index 92% rename from tencentcloud/data_source_tc_tsf_config_summary.go rename to tencentcloud/services/tsf/data_source_tc_tsf_config_summary.go index 0296a1ccec..bc32f3db07 100644 --- a/tencentcloud/data_source_tc_tsf_config_summary.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_config_summary.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfConfigSummary() *schema.Resource { +func DataSourceTencentCloudTsfConfigSummary() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfConfigSummaryRead, Schema: map[string]*schema.Schema{ @@ -155,12 +158,12 @@ func dataSourceTencentCloudTsfConfigSummary() *schema.Resource { } func dataSourceTencentCloudTsfConfigSummaryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_config_summary.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_config_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("application_id"); ok { @@ -193,13 +196,13 @@ func dataSourceTencentCloudTsfConfigSummaryRead(d *schema.ResourceData, meta int paramMap["ConfigIdList"] = helper.InterfacesStringsPoint(configIdListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var config *tsf.TsfPageConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfConfigSummaryByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -281,7 +284,7 @@ func dataSourceTencentCloudTsfConfigSummaryRead(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), tsfPageConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_config_summary_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_config_summary_test.go similarity index 85% rename from tencentcloud/data_source_tc_tsf_config_summary_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_config_summary_test.go index 94373c7444..7e1b6cb138 100644 --- a/tencentcloud/data_source_tc_tsf_config_summary_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_config_summary_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfConfigSummaryDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfConfigSummaryDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_config_summary.config_summary"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_config_summary.config_summary"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_config_summary.config_summary", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_config_summary.config_summary", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_config_summary.config_summary", "result.0.content.#"), diff --git a/tencentcloud/data_source_tc_tsf_container_group.go b/tencentcloud/services/tsf/data_source_tc_tsf_container_group.go similarity index 93% rename from tencentcloud/data_source_tc_tsf_container_group.go rename to tencentcloud/services/tsf/data_source_tc_tsf_container_group.go index 9e9955ca49..f6622c9b58 100644 --- a/tencentcloud/data_source_tc_tsf_container_group.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_container_group.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfContainerGroup() *schema.Resource { +func DataSourceTencentCloudTsfContainerGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfContainerGroupRead, Schema: map[string]*schema.Schema{ @@ -168,12 +171,12 @@ func dataSourceTencentCloudTsfContainerGroup() *schema.Resource { } func dataSourceTencentCloudTsfContainerGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf__container_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf__container_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("search_word"); ok { @@ -200,13 +203,13 @@ func dataSourceTencentCloudTsfContainerGroupRead(d *schema.ResourceData, meta in paramMap["NamespaceId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.ContainGroupResult - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfDescriptionContainerGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -309,7 +312,7 @@ func dataSourceTencentCloudTsfContainerGroupRead(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), containGroupResultMap); e != nil { + if e := tccommon.WriteToFile(output.(string), containGroupResultMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_container_group_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_container_group_test.go similarity index 83% rename from tencentcloud/data_source_tc_tsf_container_group_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_container_group_test.go index 3fe7a35742..933134c2c3 100644 --- a/tencentcloud/data_source_tc_tsf_container_group_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_container_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfDContainerGroupDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfContainerGroupDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_container_group.container_group"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_container_group.container_group"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_container_group.container_group", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_container_group.container_group", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_container_group.container_group", "result.0.content.#"), @@ -38,13 +40,13 @@ func TestAccTencentCloudTsfDContainerGroupDataSource_basic(t *testing.T) { const testAccTsfContainerGroupDataSourceVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } variable "cluster_id" { - default = "` + defaultTsfClustId + `" + default = "` + tcacctest.DefaultTsfClustId + `" } variable "namespace_id" { - default = "` + defaultNamespaceId + `" + default = "` + tcacctest.DefaultNamespaceId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_delivery_config_by_group_id.go b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id.go similarity index 77% rename from tencentcloud/data_source_tc_tsf_delivery_config_by_group_id.go rename to tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id.go index de729aa145..5eaec80d51 100644 --- a/tencentcloud/data_source_tc_tsf_delivery_config_by_group_id.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfDeliveryConfigByGroupId() *schema.Resource { +func DataSourceTencentCloudTsfDeliveryConfigByGroupId() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfDeliveryConfigByGroupIdRead, Schema: map[string]*schema.Schema{ @@ -49,11 +52,11 @@ func dataSourceTencentCloudTsfDeliveryConfigByGroupId() *schema.Resource { } func dataSourceTencentCloudTsfDeliveryConfigByGroupIdRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_delivery_config_by_group_id.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_delivery_config_by_group_id.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 groupId string paramMap := make(map[string]interface{}) @@ -62,13 +65,13 @@ func dataSourceTencentCloudTsfDeliveryConfigByGroupIdRead(d *schema.ResourceData paramMap["GroupId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var deliveryConfig *tsf.SimpleKafkaDeliveryConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfDeliveryConfigByGroupIdByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } deliveryConfig = result return nil @@ -93,7 +96,7 @@ func dataSourceTencentCloudTsfDeliveryConfigByGroupIdRead(d *schema.ResourceData d.SetId(groupId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), simpleKafkaDeliveryConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), simpleKafkaDeliveryConfigMap); e != nil { return e } } diff --git a/tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id_test.go new file mode 100644 index 0000000000..00b98fea82 --- /dev/null +++ b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_config_by_group_id_test.go @@ -0,0 +1,37 @@ +package tsf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfDeliveryConfigByGroupIdDataSource_basic -v +func TestAccTencentCloudTsfDeliveryConfigByGroupIdDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTsfDeliveryConfigByGroupIdDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.#"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.0.config_id"), + resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_config_by_group_id.delivery_config_by_group_id", "result.0.config_name"), + ), + }, + }, + }) +} + +const testAccTsfDeliveryConfigByGroupIdDataSource = ` + +data "tencentcloud_tsf_delivery_config_by_group_id" "delivery_config_by_group_id" { + group_id = "group-yrjkln9v" +} + +` diff --git a/tencentcloud/data_source_tc_tsf_delivery_configs.go b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs.go similarity index 94% rename from tencentcloud/data_source_tc_tsf_delivery_configs.go rename to tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs.go index edae5e295f..af2afe8890 100644 --- a/tencentcloud/data_source_tc_tsf_delivery_configs.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfDeliveryConfigs() *schema.Resource { +func DataSourceTencentCloudTsfDeliveryConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfDeliveryConfigsRead, Schema: map[string]*schema.Schema{ @@ -202,26 +205,26 @@ func dataSourceTencentCloudTsfDeliveryConfigs() *schema.Resource { } func dataSourceTencentCloudTsfDeliveryConfigsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_delivery_configs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_delivery_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("search_word"); ok { paramMap["SearchWord"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var bindGroups *tsf.DeliveryConfigBindGroups - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfDeliveryConfigsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } bindGroups = result return nil @@ -377,7 +380,7 @@ func dataSourceTencentCloudTsfDeliveryConfigsRead(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), deliveryConfigBindGroupsMap); e != nil { + if e := tccommon.WriteToFile(output.(string), deliveryConfigBindGroupsMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_delivery_configs_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs_test.go similarity index 85% rename from tencentcloud/data_source_tc_tsf_delivery_configs_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs_test.go index 13e72be448..5de17f050f 100644 --- a/tencentcloud/data_source_tc_tsf_delivery_configs_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_delivery_configs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfDeliveryConfigsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfDeliveryConfigsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_delivery_configs.delivery_configs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_delivery_configs.delivery_configs"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_configs.delivery_configs", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_configs.delivery_configs", "result.0.content.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_delivery_configs.delivery_configs", "result.0.content.0.config_id"), diff --git a/tencentcloud/data_source_tc_tsf_gateway_all_group_apis.go b/tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis.go similarity index 91% rename from tencentcloud/data_source_tc_tsf_gateway_all_group_apis.go rename to tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis.go index e327f4a507..93d2a4e805 100644 --- a/tencentcloud/data_source_tc_tsf_gateway_all_group_apis.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfGatewayAllGroupApis() *schema.Resource { +func DataSourceTencentCloudTsfGatewayAllGroupApis() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfGatewayAllGroupApisRead, Schema: map[string]*schema.Schema{ @@ -128,11 +131,11 @@ func dataSourceTencentCloudTsfGatewayAllGroupApis() *schema.Resource { } func dataSourceTencentCloudTsfGatewayAllGroupApisRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_gateway_all_group_apis.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_gateway_all_group_apis.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 gatewayDeployGroupId string paramMap := make(map[string]interface{}) @@ -145,13 +148,13 @@ func dataSourceTencentCloudTsfGatewayAllGroupApisRead(d *schema.ResourceData, me paramMap["SearchWord"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.GatewayVo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfGatewayAllGroupApisByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -243,7 +246,7 @@ func dataSourceTencentCloudTsfGatewayAllGroupApisRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash([]string{gatewayDeployGroupId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), gatewayVoMap); e != nil { + if e := tccommon.WriteToFile(output.(string), gatewayVoMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_gateway_all_group_apis_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis_test.go similarity index 87% rename from tencentcloud/data_source_tc_tsf_gateway_all_group_apis_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis_test.go index fbb97f3bf1..0e8dcf0023 100644 --- a/tencentcloud/data_source_tc_tsf_gateway_all_group_apis_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_gateway_all_group_apis_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfGatewayAllGroupApisDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfGatewayAllGroupApisDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_gateway_all_group_apis.gateway_all_group_apis"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_gateway_all_group_apis.gateway_all_group_apis"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_gateway_all_group_apis.gateway_all_group_apis", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_gateway_all_group_apis.gateway_all_group_apis", "result.0.gateway_deploy_group_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_gateway_all_group_apis.gateway_all_group_apis", "result.0.gateway_deploy_group_name"), diff --git a/tencentcloud/data_source_tc_tsf_group_config_release.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_config_release.go similarity index 96% rename from tencentcloud/data_source_tc_tsf_group_config_release.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_config_release.go index e20779d348..0630ae1c7f 100644 --- a/tencentcloud/data_source_tc_tsf_group_config_release.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_config_release.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfGroupConfigRelease() *schema.Resource { +func DataSourceTencentCloudTsfGroupConfigRelease() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfGroupConfigReleaseRead, Schema: map[string]*schema.Schema{ @@ -281,11 +284,11 @@ func dataSourceTencentCloudTsfGroupConfigRelease() *schema.Resource { } func dataSourceTencentCloudTsfGroupConfigReleaseRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_group_config_release.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_group_config_release.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 groupId string paramMap := make(map[string]interface{}) @@ -294,13 +297,13 @@ func dataSourceTencentCloudTsfGroupConfigReleaseRead(d *schema.ResourceData, met paramMap["GroupId"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.GroupRelease - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfGroupConfigReleaseByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -522,7 +525,7 @@ func dataSourceTencentCloudTsfGroupConfigReleaseRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash([]string{groupId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupReleaseMap); e != nil { + if e := tccommon.WriteToFile(output.(string), groupReleaseMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_group_config_release_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_config_release_test.go similarity index 89% rename from tencentcloud/data_source_tc_tsf_group_config_release_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_config_release_test.go index 2c9fc9cf10..e1d71f9491 100644 --- a/tencentcloud/data_source_tc_tsf_group_config_release_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_config_release_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfGroupConfigReleaseDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfGroupConfigReleaseDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_config_release.group_config_release"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_config_release.group_config_release"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_config_release.group_config_release", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_config_release.group_config_release", "result.0.package_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_config_release.group_config_release", "result.0.package_name"), @@ -42,7 +44,7 @@ func TestAccTencentCloudTsfGroupConfigReleaseDataSource_basic(t *testing.T) { const testAccTsfGroupConfigReleaseDataSourceVar = ` variable "group_id" { - default = "` + defaultTsfGroupId + `" + default = "` + tcacctest.DefaultTsfGroupId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_group_gateways.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_gateways.go similarity index 94% rename from tencentcloud/data_source_tc_tsf_group_gateways.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_gateways.go index b6239fc3de..46c91ffa58 100644 --- a/tencentcloud/data_source_tc_tsf_group_gateways.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_gateways.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfGroupGateways() *schema.Resource { +func DataSourceTencentCloudTsfGroupGateways() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfGroupGatewaysRead, Schema: map[string]*schema.Schema{ @@ -188,12 +191,12 @@ func dataSourceTencentCloudTsfGroupGateways() *schema.Resource { } func dataSourceTencentCloudTsfGroupGatewaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_group_gateways.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_group_gateways.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("gateway_deploy_group_id"); ok { @@ -204,13 +207,13 @@ func dataSourceTencentCloudTsfGroupGatewaysRead(d *schema.ResourceData, meta int paramMap["SearchWord"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.TsfPageApiGroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfGroupGatewaysByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -352,7 +355,7 @@ func dataSourceTencentCloudTsfGroupGatewaysRead(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), tsfPageApiGroupInfoMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageApiGroupInfoMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_group_gateways_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_gateways_test.go similarity index 88% rename from tencentcloud/data_source_tc_tsf_group_gateways_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_gateways_test.go index 4d5ce83445..8af9ba8670 100644 --- a/tencentcloud/data_source_tc_tsf_group_gateways_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_gateways_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfGroupGatewaysDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfGroupGatewaysDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_gateways.group_gateways"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_gateways.group_gateways"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_gateways.group_gateways", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_gateways.group_gateways", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_gateways.group_gateways", "result.0.content.#"), diff --git a/tencentcloud/data_source_tc_tsf_group_instances.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_instances.go similarity index 96% rename from tencentcloud/data_source_tc_tsf_group_instances.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_instances.go index 0a86c1fbc2..57e1eb5b4c 100644 --- a/tencentcloud/data_source_tc_tsf_group_instances.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfGroupInstances() *schema.Resource { +func DataSourceTencentCloudTsfGroupInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfGroupInstancesRead, Schema: map[string]*schema.Schema{ @@ -266,12 +269,12 @@ func dataSourceTencentCloudTsfGroupInstances() *schema.Resource { } func dataSourceTencentCloudTsfGroupInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_group_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_group_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("group_id"); ok { @@ -290,13 +293,13 @@ func dataSourceTencentCloudTsfGroupInstancesRead(d *schema.ResourceData, meta in paramMap["OrderType"] = helper.IntInt64(v.(int)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.TsfPageInstance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfGroupInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -486,7 +489,7 @@ func dataSourceTencentCloudTsfGroupInstancesRead(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), tsfPageInstanceMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageInstanceMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_group_instances_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_group_instances_test.go similarity index 88% rename from tencentcloud/data_source_tc_tsf_group_instances_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_group_instances_test.go index 2e3580f4c8..8cbe298740 100644 --- a/tencentcloud/data_source_tc_tsf_group_instances_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_group_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfGroupInstancesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfGroupInstancesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_instances.group_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_group_instances.group_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_instances.group_instances", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_instances.group_instances", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_group_instances.group_instances", "result.0.content.#"), @@ -42,7 +44,7 @@ func TestAccTencentCloudTsfGroupInstancesDataSource_basic(t *testing.T) { const testAccTsfGroupInstancesDataSourceVar = ` variable "group_id" { - default = "` + defaultTsfGroupId + `" + default = "` + tcacctest.DefaultTsfGroupId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_groups.go b/tencentcloud/services/tsf/data_source_tc_tsf_groups.go similarity index 94% rename from tencentcloud/data_source_tc_tsf_groups.go rename to tencentcloud/services/tsf/data_source_tc_tsf_groups.go index 37cc242747..058a4d8cde 100644 --- a/tencentcloud/data_source_tc_tsf_groups.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfGroups() *schema.Resource { +func DataSourceTencentCloudTsfGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfGroupsRead, Schema: map[string]*schema.Schema{ @@ -197,12 +200,12 @@ func dataSourceTencentCloudTsfGroups() *schema.Resource { } func dataSourceTencentCloudTsfGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_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("search_word"); ok { @@ -243,13 +246,13 @@ func dataSourceTencentCloudTsfGroupsRead(d *schema.ResourceData, meta interface{ paramMap["GroupIdList"] = helper.InterfacesStringsPoint(groupIdListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.TsfPageVmGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfGroupsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -355,7 +358,7 @@ func dataSourceTencentCloudTsfGroupsRead(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), tsfPageVmGroupMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageVmGroupMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_groups_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_groups_test.go similarity index 85% rename from tencentcloud/data_source_tc_tsf_groups_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_groups_test.go index 26f71277ce..f083698a79 100644 --- a/tencentcloud/data_source_tc_tsf_groups_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfGroupsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfGroupsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_groups.groups"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_groups.groups"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_groups.groups", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_groups.groups", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_groups.groups", "result.0.content.#"), @@ -44,16 +46,16 @@ func TestAccTencentCloudTsfGroupsDataSource_basic(t *testing.T) { const testAccTsfGroupsDataSourceVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } variable "cluster_id" { - default = "` + defaultTsfClustId + `" + default = "` + tcacctest.DefaultTsfClustId + `" } variable "namespace_id" { - default = "` + defaultNamespaceId + `" + default = "` + tcacctest.DefaultNamespaceId + `" } variable "group_id" { - default = "` + defaultTsfGroupId + `" + default = "` + tcacctest.DefaultTsfGroupId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_microservice.go b/tencentcloud/services/tsf/data_source_tc_tsf_microservice.go similarity index 90% rename from tencentcloud/data_source_tc_tsf_microservice.go rename to tencentcloud/services/tsf/data_source_tc_tsf_microservice.go index 258b584d76..2dd15be75c 100644 --- a/tencentcloud/data_source_tc_tsf_microservice.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_microservice.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfMicroservice() *schema.Resource { +func DataSourceTencentCloudTsfMicroservice() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfMicroserviceRead, Schema: map[string]*schema.Schema{ @@ -120,12 +123,12 @@ func dataSourceTencentCloudTsfMicroservice() *schema.Resource { } func dataSourceTencentCloudTsfMicroserviceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_microservice.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_microservice.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("namespace_id"); ok { @@ -147,13 +150,13 @@ func dataSourceTencentCloudTsfMicroserviceRead(d *schema.ResourceData, meta inte paramMap["MicroserviceNameList"] = helper.InterfacesStringsPoint(microserviceNameListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var microservice *tsf.TsfPageMicroservice - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfMicroserviceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } microservice = result return nil @@ -222,7 +225,7 @@ func dataSourceTencentCloudTsfMicroserviceRead(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), tsfPageMicroserviceMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageMicroserviceMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_microservice_api_version.go b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version.go similarity index 82% rename from tencentcloud/data_source_tc_tsf_microservice_api_version.go rename to tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version.go index 148fb55227..7c469a5751 100644 --- a/tencentcloud/data_source_tc_tsf_microservice_api_version.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfMicroserviceApiVersion() *schema.Resource { +func DataSourceTencentCloudTsfMicroserviceApiVersion() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfMicroserviceApiVersionRead, Schema: map[string]*schema.Schema{ @@ -66,12 +69,12 @@ func dataSourceTencentCloudTsfMicroserviceApiVersion() *schema.Resource { } func dataSourceTencentCloudTsfMicroserviceApiVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_microservice_api_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_microservice_api_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("microservice_id"); ok { @@ -86,13 +89,13 @@ func dataSourceTencentCloudTsfMicroserviceApiVersionRead(d *schema.ResourceData, paramMap["Method"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var apiVersion []*tsf.ApiVersionArray - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfMicroserviceApiVersionByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiVersion = result return nil @@ -129,7 +132,7 @@ func dataSourceTencentCloudTsfMicroserviceApiVersionRead(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_tsf_microservice_api_version_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version_test.go similarity index 77% rename from tencentcloud/data_source_tc_tsf_microservice_api_version_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version_test.go index 69c14d1e78..a08960cf54 100644 --- a/tencentcloud/data_source_tc_tsf_microservice_api_version_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_api_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfMicroserviceApiVersionDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfMicroserviceApiVersionDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_microservice_api_version.microservice_api_version"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_microservice_api_version.microservice_api_version"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice_api_version.microservice_api_version", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice_api_version.microservice_api_version", "result.0.application_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice_api_version.microservice_api_version", "result.0.application_name"), diff --git a/tencentcloud/data_source_tc_tsf_microservice_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_test.go similarity index 81% rename from tencentcloud/data_source_tc_tsf_microservice_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_microservice_test.go index f86f71cfde..4ad5ac3a98 100644 --- a/tencentcloud/data_source_tc_tsf_microservice_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_microservice_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfMicroserviceDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfMicroserviceDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_microservice.microservice"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_microservice.microservice"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice.microservice", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice.microservice", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_microservice.microservice", "result.0.content.#"), @@ -32,7 +34,7 @@ func TestAccTencentCloudTsfMicroserviceDataSource_basic(t *testing.T) { const testAccTsfMicroserviceDataSourceVar = ` variable "namespace_id" { - default = "` + defaultNamespaceId + `" + default = "` + tcacctest.DefaultNamespaceId + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_ms_api_list.go b/tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list.go similarity index 84% rename from tencentcloud/data_source_tc_tsf_ms_api_list.go rename to tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list.go index e99d483042..6f62fb19c4 100644 --- a/tencentcloud/data_source_tc_tsf_ms_api_list.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfMsApiList() *schema.Resource { +func DataSourceTencentCloudTsfMsApiList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfMsApiListRead, Schema: map[string]*schema.Schema{ @@ -79,12 +82,12 @@ func dataSourceTencentCloudTsfMsApiList() *schema.Resource { } func dataSourceTencentCloudTsfMsApiListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_ms_api_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_ms_api_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("microservice_id"); ok { @@ -95,13 +98,13 @@ func dataSourceTencentCloudTsfMsApiListRead(d *schema.ResourceData, meta interfa paramMap["SearchWord"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.TsfApiListResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfMsApiListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -152,7 +155,7 @@ func dataSourceTencentCloudTsfMsApiListRead(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), tsfApiListResponseMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfApiListResponseMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_ms_api_list_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list_test.go similarity index 79% rename from tencentcloud/data_source_tc_tsf_ms_api_list_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list_test.go index 4a85949faa..c584d1e24a 100644 --- a/tencentcloud/data_source_tc_tsf_ms_api_list_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_ms_api_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfMsApiListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfMsApiListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_ms_api_list.ms_api_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_ms_api_list.ms_api_list"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_ms_api_list.ms_api_list", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_ms_api_list.ms_api_list", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_ms_api_list.ms_api_list", "result.0.content.#"), diff --git a/tencentcloud/data_source_tc_tsf_pod_instances.go b/tencentcloud/services/tsf/data_source_tc_tsf_pod_instances.go similarity index 91% rename from tencentcloud/data_source_tc_tsf_pod_instances.go rename to tencentcloud/services/tsf/data_source_tc_tsf_pod_instances.go index 3a6c26c9b8..ef2f2e599e 100644 --- a/tencentcloud/data_source_tc_tsf_pod_instances.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_pod_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfPodInstances() *schema.Resource { +func DataSourceTencentCloudTsfPodInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfPodInstancesRead, Schema: map[string]*schema.Schema{ @@ -132,12 +135,12 @@ func dataSourceTencentCloudTsfPodInstances() *schema.Resource { } func dataSourceTencentCloudTsfPodInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_pod_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_pod_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("group_id"); ok { @@ -149,12 +152,12 @@ func dataSourceTencentCloudTsfPodInstancesRead(d *schema.ResourceData, meta inte paramMap["PodNameList"] = helper.InterfacesStringsPoint(podNameListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groupPodResult *tsf.GroupPodResult - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfDescribePodInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groupPodResult = result return nil @@ -244,7 +247,7 @@ func dataSourceTencentCloudTsfPodInstancesRead(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), groupPodResultMap); e != nil { + if e := tccommon.WriteToFile(output.(string), groupPodResultMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_pod_instances_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_pod_instances_test.go similarity index 84% rename from tencentcloud/data_source_tc_tsf_pod_instances_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_pod_instances_test.go index 4f738027c6..8635767f5c 100644 --- a/tencentcloud/data_source_tc_tsf_pod_instances_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_pod_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfPodInstancesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfPodInstancesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_pod_instances.pod_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_pod_instances.pod_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_pod_instances.pod_instances", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_pod_instances.pod_instances", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_pod_instances.pod_instances", "result.0.content.#"), @@ -38,11 +40,11 @@ func TestAccTencentCloudTsfPodInstancesDataSource_basic(t *testing.T) { const testAccTsfPodInstancesDataSourceVar = ` variable "group_id" { - default = "` + defaultTsfContainerGroupId + `" + default = "` + tcacctest.DefaultTsfContainerGroupId + `" } variable "pod_name" { - default = "` + defaultTsfpodName + `" + default = "` + tcacctest.DefaultTsfpodName + `" } ` diff --git a/tencentcloud/data_source_tc_tsf_public_config_summary.go b/tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary.go similarity index 92% rename from tencentcloud/data_source_tc_tsf_public_config_summary.go rename to tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary.go index 98b3317e9c..275ed3d22f 100644 --- a/tencentcloud/data_source_tc_tsf_public_config_summary.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfPublicConfigSummary() *schema.Resource { +func DataSourceTencentCloudTsfPublicConfigSummary() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfPublicConfigSummaryRead, Schema: map[string]*schema.Schema{ @@ -149,12 +152,12 @@ func dataSourceTencentCloudTsfPublicConfigSummary() *schema.Resource { } func dataSourceTencentCloudTsfPublicConfigSummaryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_public_config_summary.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_public_config_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("search_word"); ok { @@ -183,13 +186,13 @@ func dataSourceTencentCloudTsfPublicConfigSummaryRead(d *schema.ResourceData, me paramMap["ConfigIdList"] = helper.InterfacesStringsPoint(configIdListSet) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var config *tsf.TsfPageConfig - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfPublicConfigSummaryByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -271,7 +274,7 @@ func dataSourceTencentCloudTsfPublicConfigSummaryRead(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), tsfPageConfigMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageConfigMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_public_config_summary_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary_test.go similarity index 81% rename from tencentcloud/data_source_tc_tsf_public_config_summary_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary_test.go index af70ba21e7..f828c1b54f 100644 --- a/tencentcloud/data_source_tc_tsf_public_config_summary_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_public_config_summary_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfPublicConfigSummaryDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfPublicConfigSummaryDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_public_config_summary.public_config_summary"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_public_config_summary.public_config_summary"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_public_config_summary.public_config_summary", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_public_config_summary.public_config_summary", "result.0.content.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_public_config_summary.public_config_summary", "result.0.content.0.config_id"), diff --git a/tencentcloud/data_source_tc_tsf_repository.go b/tencentcloud/services/tsf/data_source_tc_tsf_repository.go similarity index 89% rename from tencentcloud/data_source_tc_tsf_repository.go rename to tencentcloud/services/tsf/data_source_tc_tsf_repository.go index 575e877406..a69109dcac 100644 --- a/tencentcloud/data_source_tc_tsf_repository.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_repository.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfRepository() *schema.Resource { +func DataSourceTencentCloudTsfRepository() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfRepositoryRead, Schema: map[string]*schema.Schema{ @@ -104,12 +107,12 @@ func dataSourceTencentCloudTsfRepository() *schema.Resource { } func dataSourceTencentCloudTsfRepositoryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_repository.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_repository.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 { @@ -120,13 +123,13 @@ func dataSourceTencentCloudTsfRepositoryRead(d *schema.ResourceData, meta interf paramMap["RepositoryType"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var repository *tsf.RepositoryList - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfRepositoryByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } repository = result return nil @@ -196,7 +199,7 @@ func dataSourceTencentCloudTsfRepositoryRead(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), repositoryListMap); e != nil { + if e := tccommon.WriteToFile(output.(string), repositoryListMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_repository_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_repository_test.go similarity index 81% rename from tencentcloud/data_source_tc_tsf_repository_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_repository_test.go index b96b446e0f..cfd4cbd9eb 100644 --- a/tencentcloud/data_source_tc_tsf_repository_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_repository_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfRepositoryDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfRepositoryDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_repository.repository"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_repository.repository"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_repository.repository", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_repository.repository", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_repository.repository", "result.0.total_count"), diff --git a/tencentcloud/data_source_tc_tsf_unit_rules.go b/tencentcloud/services/tsf/data_source_tc_tsf_unit_rules.go similarity index 93% rename from tencentcloud/data_source_tc_tsf_unit_rules.go rename to tencentcloud/services/tsf/data_source_tc_tsf_unit_rules.go index 5038c586c0..f10148f06e 100644 --- a/tencentcloud/data_source_tc_tsf_unit_rules.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_unit_rules.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfUnitRules() *schema.Resource { +func DataSourceTencentCloudTsfUnitRules() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfUnitRulesRead, Schema: map[string]*schema.Schema{ @@ -182,12 +185,12 @@ func dataSourceTencentCloudTsfUnitRules() *schema.Resource { } func dataSourceTencentCloudTsfUnitRulesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_unit_rules.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_unit_rules.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("gateway_instance_id"); ok { @@ -198,13 +201,13 @@ func dataSourceTencentCloudTsfUnitRulesRead(d *schema.ResourceData, meta interfa paramMap["Status"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var unitRule *tsf.TsfPageUnitRuleV2 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTsfUnitRulesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } unitRule = result return nil @@ -345,7 +348,7 @@ func dataSourceTencentCloudTsfUnitRulesRead(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_tsf_unit_rules_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_unit_rules_test.go similarity index 92% rename from tencentcloud/data_source_tc_tsf_unit_rules_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_unit_rules_test.go index 4381e6c82f..c8967b1f08 100644 --- a/tencentcloud/data_source_tc_tsf_unit_rules_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_unit_rules_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfUnitRulesDataSource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfUnitRulesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_unit_rules.unit_rules"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_unit_rules.unit_rules"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_unit_rules.unit_rules", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_unit_rules.unit_rules", "status"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_unit_rules.unit_rules", "result.#"), diff --git a/tencentcloud/data_source_tc_tsf_usable_unit_namespaces.go b/tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces.go similarity index 86% rename from tencentcloud/data_source_tc_tsf_usable_unit_namespaces.go rename to tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces.go index 9557d79793..abccb3e124 100644 --- a/tencentcloud/data_source_tc_tsf_usable_unit_namespaces.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces.go @@ -1,15 +1,18 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudTsfUsableUnitNamespaces() *schema.Resource { +func DataSourceTencentCloudTsfUsableUnitNamespaces() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTsfUsableUnitNamespacesRead, Schema: map[string]*schema.Schema{ @@ -83,25 +86,25 @@ func dataSourceTencentCloudTsfUsableUnitNamespaces() *schema.Resource { } func dataSourceTencentCloudTsfUsableUnitNamespacesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tsf_usable_unit_namespaces.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tsf_usable_unit_namespaces.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 { paramMap["SearchWord"] = helper.String(v.(string)) } - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *tsf.TsfPageUnitNamespace - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeTsfUsableUnitNamespacesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -160,7 +163,7 @@ func dataSourceTencentCloudTsfUsableUnitNamespacesRead(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), tsfPageUnitNamespaceMap); e != nil { + if e := tccommon.WriteToFile(output.(string), tsfPageUnitNamespaceMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_tsf_usable_unit_namespaces_test.go b/tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces_test.go similarity index 78% rename from tencentcloud/data_source_tc_tsf_usable_unit_namespaces_test.go rename to tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces_test.go index cf96aa2173..2230c33524 100644 --- a/tencentcloud/data_source_tc_tsf_usable_unit_namespaces_test.go +++ b/tencentcloud/services/tsf/data_source_tc_tsf_usable_unit_namespaces_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 @@ import ( func TestAccTencentCloudTsfUsableUnitNamespacesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfUsableUnitNamespacesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_usable_unit_namespaces.usable_unit_namespaces"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_tsf_usable_unit_namespaces.usable_unit_namespaces"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_usable_unit_namespaces.usable_unit_namespaces", "result.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_usable_unit_namespaces.usable_unit_namespaces", "result.0.total_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_tsf_usable_unit_namespaces.usable_unit_namespaces", "result.0.content.#"), diff --git a/tencentcloud/resource_tc_tsf_api_group.go b/tencentcloud/services/tsf/resource_tc_tsf_api_group.go similarity index 88% rename from tencentcloud/resource_tc_tsf_api_group.go rename to tencentcloud/services/tsf/resource_tc_tsf_api_group.go index 724ba024d6..27e5da2e76 100644 --- a/tencentcloud/resource_tc_tsf_api_group.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_api_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApiGroup() *schema.Resource { +func ResourceTencentCloudTsfApiGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApiGroupCreate, Read: resourceTencentCloudTsfApiGroupRead, @@ -174,10 +177,10 @@ func resourceTencentCloudTsfApiGroup() *schema.Resource { } func resourceTencentCloudTsfApiGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateApiGroupRequest() @@ -224,10 +227,10 @@ func resourceTencentCloudTsfApiGroupCreate(d *schema.ResourceData, meta interfac request.ServiceNameKeyPosition = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateApiGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateApiGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -246,14 +249,14 @@ func resourceTencentCloudTsfApiGroupCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfApiGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupId := d.Id() @@ -377,10 +380,10 @@ func resourceTencentCloudTsfApiGroupRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTsfApiGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewUpdateApiGroupRequest() @@ -438,10 +441,10 @@ func resourceTencentCloudTsfApiGroupUpdate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().UpdateApiGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().UpdateApiGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -456,13 +459,13 @@ func resourceTencentCloudTsfApiGroupUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfApiGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupId := d.Id() if err := service.DeleteTsfApiGroupById(ctx, groupId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_api_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_api_group_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_api_group_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_api_group_test.go index d29a3a02cf..9b620a67c8 100644 --- a/tencentcloud/resource_tc_tsf_api_group_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_api_group_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "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" @@ -15,8 +19,8 @@ func TestAccTencentCloudTsfApiGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfApiGroupDestroy, Steps: []resource.TestStep{ { @@ -43,9 +47,9 @@ func TestAccTencentCloudTsfApiGroupResource_basic(t *testing.T) { } func testAccCheckTsfApiGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_api_group" { continue @@ -69,15 +73,15 @@ func testAccCheckTsfApiGroupDestroy(s *terraform.State) error { func testAccCheckTsfApiGroupExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfApiGroupById(ctx, rs.Primary.ID) if err != nil { return err @@ -93,7 +97,7 @@ func testAccCheckTsfApiGroupExists(r string) resource.TestCheckFunc { const testAccTsfApiGroupVar = ` variable "gateway_instance_id" { - default = "` + defaultTsfGateway + `" + default = "` + tcacctest.DefaultTsfGateway + `" } ` diff --git a/tencentcloud/resource_tc_tsf_api_rate_limit_rule.go b/tencentcloud/services/tsf/resource_tc_tsf_api_rate_limit_rule.go similarity index 75% rename from tencentcloud/resource_tc_tsf_api_rate_limit_rule.go rename to tencentcloud/services/tsf/resource_tc_tsf_api_rate_limit_rule.go index 8f3dce41ff..32cdbe582b 100644 --- a/tencentcloud/resource_tc_tsf_api_rate_limit_rule.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_api_rate_limit_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApiRateLimitRule() *schema.Resource { +func ResourceTencentCloudTsfApiRateLimitRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApiRateLimitRuleCreate, Read: resourceTencentCloudTsfApiRateLimitRuleRead, @@ -38,7 +41,7 @@ func resourceTencentCloudTsfApiRateLimitRule() *schema.Resource { Optional: true, Computed: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"enabled", "disabled"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"enabled", "disabled"}), Description: "Enabled/disabled, enabled/disabled, if not passed, it is enabled by default.", }, @@ -88,10 +91,10 @@ func resourceTencentCloudTsfApiRateLimitRule() *schema.Resource { } func resourceTencentCloudTsfApiRateLimitRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateApiRateLimitRuleWithDetailRespRequest() @@ -112,10 +115,10 @@ func resourceTencentCloudTsfApiRateLimitRuleCreate(d *schema.ResourceData, meta request.UsableStatus = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateApiRateLimitRuleWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateApiRateLimitRuleWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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,22 +131,22 @@ func resourceTencentCloudTsfApiRateLimitRuleCreate(d *schema.ResourceData, meta } ruleId = *response.Response.Result.RuleId - d.SetId(apiId + FILED_SP + ruleId) + d.SetId(apiId + tccommon.FILED_SP + ruleId) return resourceTencentCloudTsfApiRateLimitRuleRead(d, meta) } func resourceTencentCloudTsfApiRateLimitRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_rate_limit_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{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()) } @@ -205,14 +208,14 @@ func resourceTencentCloudTsfApiRateLimitRuleRead(d *schema.ResourceData, meta in } func resourceTencentCloudTsfApiRateLimitRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewUpdateApiRateLimitRuleRequest() - 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()) } @@ -241,10 +244,10 @@ func resourceTencentCloudTsfApiRateLimitRuleUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().UpdateApiRateLimitRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().UpdateApiRateLimitRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -259,14 +262,14 @@ func resourceTencentCloudTsfApiRateLimitRuleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTsfApiRateLimitRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_api_rate_limit_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_api_rate_limit_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TsfService{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/services/tsf/resource_tc_tsf_api_rate_limit_rule_test.go b/tencentcloud/services/tsf/resource_tc_tsf_api_rate_limit_rule_test.go new file mode 100644 index 0000000000..a0be4b5065 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_api_rate_limit_rule_test.go @@ -0,0 +1,117 @@ +package tsf_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfApiRateLimitRuleResource_basic -v +func TestAccTencentCloudTsfApiRateLimitRuleResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfApiRateLimitRuleDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfApiRateLimitRule, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfApiRateLimitRuleExists("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "api_id", tcacctest.DefaultTsfApiId), + resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "max_qps", "10"), + resource.TestCheckResourceAttr("tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", "usable_status", "enabled"), + ), + }, + { + ResourceName: "tencentcloud_tsf_api_rate_limit_rule.api_rate_limit_rule", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfApiRateLimitRuleDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_api_rate_limit_rule" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + apiId := idSplit[0] + ruleId := idSplit[1] + + res, err := service.DescribeTsfApiRateLimitRuleById(ctx, apiId, ruleId) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf ApiRateLimitRule %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfApiRateLimitRuleExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + apiId := idSplit[0] + ruleId := idSplit[1] + + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfApiRateLimitRuleById(ctx, apiId, ruleId) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf ApiRateLimitRule %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfApiRateLimitRuleVar = ` +variable "api_id" { + default = "` + tcacctest.DefaultTsfApiId + `" +} +` + +const testAccTsfApiRateLimitRule = testAccTsfApiRateLimitRuleVar + ` + +resource "tencentcloud_tsf_api_rate_limit_rule" "api_rate_limit_rule" { + api_id = var.api_id + max_qps = 10 + usable_status = "enabled" +} + +` diff --git a/tencentcloud/resource_tc_tsf_application.go b/tencentcloud/services/tsf/resource_tc_tsf_application.go similarity index 88% rename from tencentcloud/resource_tc_tsf_application.go rename to tencentcloud/services/tsf/resource_tc_tsf_application.go index 84534a5207..35feb117a8 100644 --- a/tencentcloud/resource_tc_tsf_application.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApplication() *schema.Resource { +func ResourceTencentCloudTsfApplication() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApplicationCreate, Read: resourceTencentCloudTsfApplicationRead, @@ -138,10 +141,10 @@ func resourceTencentCloudTsfApplication() *schema.Resource { } func resourceTencentCloudTsfApplicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateApplicationRequest() @@ -223,10 +226,10 @@ func resourceTencentCloudTsfApplicationCreate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateApplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateApplication(request) if e != nil { - return retryError(e) + return tccommon.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,14 +248,14 @@ func resourceTencentCloudTsfApplicationCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfApplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} applicationId := d.Id() @@ -356,10 +359,10 @@ func resourceTencentCloudTsfApplicationRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTsfApplicationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyApplicationRequest() @@ -420,10 +423,10 @@ func resourceTencentCloudTsfApplicationUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyApplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyApplication(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -438,13 +441,13 @@ func resourceTencentCloudTsfApplicationUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfApplicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} applicationId := d.Id() if err := service.DeleteTsfApplicationById(ctx, applicationId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_application_config.go b/tencentcloud/services/tsf/resource_tc_tsf_application_config.go similarity index 81% rename from tencentcloud/resource_tc_tsf_application_config.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_config.go index 601af6af2e..7ede121208 100644 --- a/tencentcloud/resource_tc_tsf_application_config.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApplicationConfig() *schema.Resource { +func ResourceTencentCloudTsfApplicationConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApplicationConfigCreate, Read: resourceTencentCloudTsfApplicationConfigRead, @@ -82,10 +85,10 @@ func resourceTencentCloudTsfApplicationConfig() *schema.Resource { } func resourceTencentCloudTsfApplicationConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateConfigWithDetailRespRequest() @@ -128,10 +131,10 @@ func resourceTencentCloudTsfApplicationConfigCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateConfigWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateConfigWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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,14 +153,14 @@ func resourceTencentCloudTsfApplicationConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudTsfApplicationConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() @@ -208,8 +211,8 @@ func resourceTencentCloudTsfApplicationConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudTsfApplicationConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_microservice.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_microservice.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{ "config_name", @@ -232,13 +235,13 @@ func resourceTencentCloudTsfApplicationConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudTsfApplicationConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() if err := service.DeleteTsfApplicationConfigById(ctx, configId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_application_config_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_config_test.go similarity index 76% rename from tencentcloud/resource_tc_tsf_application_config_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_config_test.go index 26add7d718..a315e4fd50 100644 --- a/tencentcloud/resource_tc_tsf_application_config_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfApplicationConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfApplicationConfigDestroy, Steps: []resource.TestStep{ { @@ -40,9 +44,9 @@ func TestAccTencentCloudTsfApplicationConfigResource_basic(t *testing.T) { } func testAccCheckTsfApplicationConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_application_config" { continue @@ -62,15 +66,15 @@ func testAccCheckTsfApplicationConfigDestroy(s *terraform.State) error { func testAccCheckTsfApplicationConfigExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfApplicationConfigById(ctx, rs.Primary.ID, "") if err != nil { return err @@ -86,7 +90,7 @@ func testAccCheckTsfApplicationConfigExists(r string) resource.TestCheckFunc { const testAccTsfApplicationConfigVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } ` diff --git a/tencentcloud/resource_tc_tsf_application_file_config.go b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config.go similarity index 84% rename from tencentcloud/resource_tc_tsf_application_file_config.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_file_config.go index f89f86b196..43ace455bf 100644 --- a/tencentcloud/resource_tc_tsf_application_file_config.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApplicationFileConfig() *schema.Resource { +func ResourceTencentCloudTsfApplicationFileConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApplicationFileConfigCreate, Read: resourceTencentCloudTsfApplicationFileConfigRead, @@ -101,10 +104,10 @@ func resourceTencentCloudTsfApplicationFileConfig() *schema.Resource { } func resourceTencentCloudTsfApplicationFileConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateFileConfigWithDetailRespRequest() @@ -159,10 +162,10 @@ func resourceTencentCloudTsfApplicationFileConfigCreate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateFileConfigWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateFileConfigWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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,14 +184,14 @@ func resourceTencentCloudTsfApplicationFileConfigCreate(d *schema.ResourceData, } func resourceTencentCloudTsfApplicationFileConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() @@ -243,13 +246,13 @@ func resourceTencentCloudTsfApplicationFileConfigRead(d *schema.ResourceData, me } func resourceTencentCloudTsfApplicationFileConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_file_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() if err := service.DeleteTsfApplicationFileConfigById(ctx, configId); err != nil { diff --git a/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release.go b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release.go new file mode 100644 index 0000000000..7f6327ce7f --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release.go @@ -0,0 +1,158 @@ +package tsf + +import ( + "context" + "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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTsfApplicationFileConfigRelease() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfApplicationFileConfigReleaseCreate, + Read: resourceTencentCloudTsfApplicationFileConfigReleaseRead, + Delete: resourceTencentCloudTsfApplicationFileConfigReleaseDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "config_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "File config id.", + }, + + "group_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Group Id.", + }, + + "release_desc": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "release Description.", + }, + }, + } +} + +func resourceTencentCloudTsfApplicationFileConfigReleaseCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_config_release.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tsf.NewReleaseFileConfigRequest() + configId string + groupId string + ) + if v, ok := d.GetOk("config_id"); ok { + configId = v.(string) + request.ConfigId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("group_id"); ok { + groupId = v.(string) + request.GroupId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("release_desc"); ok { + request.ReleaseDesc = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ReleaseFileConfig(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 tsf applicationFileConfigRelease failed, reason:%+v", logId, err) + return err + } + + d.SetId(configId + tccommon.FILED_SP + groupId) + + return resourceTencentCloudTsfApplicationFileConfigReleaseRead(d, meta) +} + +func resourceTencentCloudTsfApplicationFileConfigReleaseRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_config_release.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + configId := idSplit[0] + groupId := idSplit[1] + + applicationFileConfigRelease, err := service.DescribeTsfApplicationFileConfigReleaseById(ctx, configId, groupId) + if err != nil { + return err + } + + if applicationFileConfigRelease == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfApplicationFileConfigRelease` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if applicationFileConfigRelease.ConfigId != nil { + _ = d.Set("config_id", applicationFileConfigRelease.ConfigId) + } + + if applicationFileConfigRelease.GroupId != nil { + _ = d.Set("group_id", applicationFileConfigRelease.GroupId) + } + + if applicationFileConfigRelease.ReleaseDesc != nil { + _ = d.Set("release_desc", applicationFileConfigRelease.ReleaseDesc) + } + + return nil +} + +func resourceTencentCloudTsfApplicationFileConfigReleaseDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_file_config_release.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + configId := idSplit[0] + groupId := idSplit[1] + + if err := service.DeleteTsfApplicationFileConfigReleaseById(ctx, configId, groupId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tsf_application_file_config_release_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release_test.go similarity index 82% rename from tencentcloud/resource_tc_tsf_application_file_config_release_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release_test.go index cf9ce27a9c..fcdd4093c9 100644 --- a/tencentcloud/resource_tc_tsf_application_file_config_release_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_release_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 TestAccTencentCloudTsfApplicationFileConfigReleaseResource_basic(t *testing // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationFileConfigRelease, @@ -32,7 +34,7 @@ func TestAccTencentCloudTsfApplicationFileConfigReleaseResource_basic(t *testing const testAccTsfApplicationFileConfigReleaseVar = ` variable "config_id" { - default = "` + defaultTsfFileConfigId + `" + default = "` + tcacctest.DefaultTsfFileConfigId + `" } ` const testAccTsfApplicationFileConfigRelease = testAccTsfGroup + testAccTsfApplicationFileConfigReleaseVar + ` diff --git a/tencentcloud/resource_tc_tsf_application_file_config_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_application_file_config_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_file_config_test.go index ce87b2b79c..d8c9eeb60c 100644 --- a/tencentcloud/resource_tc_tsf_application_file_config_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_file_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfApplicationFileConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfApplicationFileConfigDestroy, Steps: []resource.TestStep{ { @@ -23,7 +27,7 @@ func TestAccTencentCloudTsfApplicationFileConfigResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTsfApplicationFileConfigExists("tencentcloud_tsf_application_file_config.application_file_config"), resource.TestCheckResourceAttrSet("tencentcloud_tsf_application_file_config.application_file_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_application_file_config.application_file_config", "application_id", defaultTsfApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tsf_application_file_config.application_file_config", "application_id", tcacctest.DefaultTsfApplicationId), resource.TestCheckResourceAttr("tencentcloud_tsf_application_file_config.application_file_config", "config_name", "terraform-test"), resource.TestCheckResourceAttr("tencentcloud_tsf_application_file_config.application_file_config", "config_file_code", "UTF-8"), resource.TestCheckResourceAttr("tencentcloud_tsf_application_file_config.application_file_config", "config_file_name", "application.yaml"), @@ -39,9 +43,9 @@ func TestAccTencentCloudTsfApplicationFileConfigResource_basic(t *testing.T) { } func testAccCheckTsfApplicationFileConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_application_file_config" { continue @@ -61,15 +65,15 @@ func testAccCheckTsfApplicationFileConfigDestroy(s *terraform.State) error { func testAccCheckTsfApplicationFileConfigExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfApplicationFileConfigById(ctx, rs.Primary.ID) if err != nil { return err @@ -85,7 +89,7 @@ func testAccCheckTsfApplicationFileConfigExists(r string) resource.TestCheckFunc const testAccTsfApplicationFileConfigVar = ` variable "application_id" { - default = "` + defaultTsfApplicationId + `" + default = "` + tcacctest.DefaultTsfApplicationId + `" } ` diff --git a/tencentcloud/resource_tc_tsf_application_public_config.go b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config.go similarity index 80% rename from tencentcloud/resource_tc_tsf_application_public_config.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_public_config.go index f9ea4033a3..ecb70097e6 100644 --- a/tencentcloud/resource_tc_tsf_application_public_config.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { +func ResourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApplicationPublicConfigCreate, Read: resourceTencentCloudTsfApplicationPublicConfigRead, @@ -75,10 +78,10 @@ func resourceTencentCloudTsfApplicationPublicConfig() *schema.Resource { } func resourceTencentCloudTsfApplicationPublicConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreatePublicConfigWithDetailRespRequest() @@ -117,10 +120,10 @@ func resourceTencentCloudTsfApplicationPublicConfigCreate(d *schema.ResourceData } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreatePublicConfigWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreatePublicConfigWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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,14 +142,14 @@ func resourceTencentCloudTsfApplicationPublicConfigCreate(d *schema.ResourceData } func resourceTencentCloudTsfApplicationPublicConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() @@ -193,13 +196,13 @@ func resourceTencentCloudTsfApplicationPublicConfigRead(d *schema.ResourceData, } func resourceTencentCloudTsfApplicationPublicConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_public_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() if err := service.DeleteTsfApplicationPublicConfigById(ctx, configId); err != nil { diff --git a/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release.go b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release.go new file mode 100644 index 0000000000..9c341bfce8 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release.go @@ -0,0 +1,157 @@ +package tsf + +import ( + "context" + "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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTsfApplicationPublicConfigRelease() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfApplicationPublicConfigReleaseCreate, + Read: resourceTencentCloudTsfApplicationPublicConfigReleaseRead, + Delete: resourceTencentCloudTsfApplicationPublicConfigReleaseDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "config_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "ConfigId.", + }, + + "namespace_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "namespace-id.", + }, + + "release_desc": { + Optional: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Release description.", + }, + }, + } +} + +func resourceTencentCloudTsfApplicationPublicConfigReleaseCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_config_release.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tsf.NewReleasePublicConfigRequest() + configId string + namespaceId string + ) + if v, ok := d.GetOk("config_id"); ok { + configId = v.(string) + request.ConfigId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("namespace_id"); ok { + namespaceId = v.(string) + request.NamespaceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("release_desc"); ok { + request.ReleaseDesc = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ReleasePublicConfig(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 tsf applicationPublicConfigRelease failed, reason:%+v", logId, err) + return err + } + + d.SetId(configId + tccommon.FILED_SP + namespaceId) + + return resourceTencentCloudTsfApplicationPublicConfigReleaseRead(d, meta) +} + +func resourceTencentCloudTsfApplicationPublicConfigReleaseRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_config_release.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + configId := idSplit[0] + namespaceId := idSplit[1] + + applicationPublicConfigRelease, err := service.DescribeTsfApplicationPublicConfigReleaseById(ctx, configId, namespaceId) + if err != nil { + return err + } + + if applicationPublicConfigRelease == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfApplicationPublicConfigRelease` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if applicationPublicConfigRelease.ConfigId != nil { + _ = d.Set("config_id", applicationPublicConfigRelease.ConfigId) + } + + if applicationPublicConfigRelease.NamespaceId != nil { + _ = d.Set("namespace_id", applicationPublicConfigRelease.NamespaceId) + } + + if applicationPublicConfigRelease.ReleaseDesc != nil { + _ = d.Set("release_desc", applicationPublicConfigRelease.ReleaseDesc) + } + + return nil +} + +func resourceTencentCloudTsfApplicationPublicConfigReleaseDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_public_config_release.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + configId := idSplit[0] + namespaceId := idSplit[1] + + if err := service.DeleteTsfApplicationPublicConfigReleaseById(ctx, configId, namespaceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_tsf_application_public_config_release_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release_test.go similarity index 85% rename from tencentcloud/resource_tc_tsf_application_public_config_release_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release_test.go index 2ab58286fa..83224c9026 100644 --- a/tencentcloud/resource_tc_tsf_application_public_config_release_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_release_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 TestAccTencentCloudTsfApplicationPublicConfigReleaseResource_basic(t *testi // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfApplicationPublicConfigRelease, diff --git a/tencentcloud/resource_tc_tsf_application_public_config_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_test.go similarity index 78% rename from tencentcloud/resource_tc_tsf_application_public_config_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_public_config_test.go index d34072578f..afb47d3c26 100644 --- a/tencentcloud/resource_tc_tsf_application_public_config_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_public_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfApplicationPublicConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfApplicationPublicConfigDestroy, Steps: []resource.TestStep{ { @@ -41,9 +45,9 @@ func TestAccTencentCloudTsfApplicationPublicConfigResource_basic(t *testing.T) { } func testAccCheckTsfApplicationPublicConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_application_release_config" { continue @@ -63,15 +67,15 @@ func testAccCheckTsfApplicationPublicConfigDestroy(s *terraform.State) error { func testAccCheckTsfApplicationPublicConfigExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfApplicationPublicConfigById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_tsf_application_release_config.go b/tencentcloud/services/tsf/resource_tc_tsf_application_release_config.go similarity index 80% rename from tencentcloud/resource_tc_tsf_application_release_config.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_release_config.go index 64ff06d2e6..7beb4f9cf5 100644 --- a/tencentcloud/resource_tc_tsf_application_release_config.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_release_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfApplicationReleaseConfig() *schema.Resource { +func ResourceTencentCloudTsfApplicationReleaseConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfApplicationReleaseConfigCreate, Read: resourceTencentCloudTsfApplicationReleaseConfigRead, @@ -107,10 +110,10 @@ func resourceTencentCloudTsfApplicationReleaseConfig() *schema.Resource { } func resourceTencentCloudTsfApplicationReleaseConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_release_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_release_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewReleaseConfigWithDetailRespRequest() @@ -132,10 +135,10 @@ func resourceTencentCloudTsfApplicationReleaseConfigCreate(d *schema.ResourceDat request.ReleaseDesc = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ReleaseConfigWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ReleaseConfigWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -148,22 +151,22 @@ func resourceTencentCloudTsfApplicationReleaseConfigCreate(d *schema.ResourceDat } configReleaseId := *response.Response.Result.ConfigReleaseId - d.SetId(configId + FILED_SP + groupId + FILED_SP + configReleaseId) + d.SetId(configId + tccommon.FILED_SP + groupId + tccommon.FILED_SP + configReleaseId) return resourceTencentCloudTsfApplicationReleaseConfigRead(d, meta) } func resourceTencentCloudTsfApplicationReleaseConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_release_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_release_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{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()) } @@ -237,14 +240,14 @@ func resourceTencentCloudTsfApplicationReleaseConfigRead(d *schema.ResourceData, } func resourceTencentCloudTsfApplicationReleaseConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_application_release_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_application_release_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TsfService{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/services/tsf/resource_tc_tsf_application_release_config_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_release_config_test.go new file mode 100644 index 0000000000..2ce6dd6d7a --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_release_config_test.go @@ -0,0 +1,119 @@ +package tsf_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfApplicationReleaseConfigResource_basic -v +func TestAccTencentCloudTsfApplicationReleaseConfigResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfApplicationReleaseConfigDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfApplicationReleaseConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfApplicationReleaseConfigExists("tencentcloud_tsf_application_release_config.application_release_config"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_application_release_config.application_release_config", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "config_id", tcacctest.DefaultTsfConfigId), + resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "group_id", tcacctest.DefaultTsfGroupId), + resource.TestCheckResourceAttr("tencentcloud_tsf_application_release_config.application_release_config", "release_desc", "terraform_release_desc")), + }, + { + ResourceName: "tencentcloud_tsf_application_release_config.application_release_config", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfApplicationReleaseConfigDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_application_release_config" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + configId := idSplit[0] + groupId := idSplit[1] + + res, err := service.DescribeTsfApplicationReleaseConfigById(ctx, configId, groupId) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf ApplicationReleaseConfig %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfApplicationReleaseConfigExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 3 { + return fmt.Errorf("invalid ID %s", rs.Primary.ID) + } + configId := idSplit[0] + groupId := idSplit[1] + + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfApplicationReleaseConfigById(ctx, configId, groupId) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf ApplicationReleaseConfig %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfApplicationReleaseConfigVar = ` +variable "group_id" { + default = "` + tcacctest.DefaultTsfGroupId + `" +} +variable "config_id" { + default = "` + tcacctest.DefaultTsfConfigId + `" +} +` + +const testAccTsfApplicationReleaseConfig = testAccTsfApplicationReleaseConfigVar + ` + +resource "tencentcloud_tsf_application_release_config" "application_release_config" { + config_id = var.config_id + group_id = var.group_id + release_desc = "terraform_release_desc" +} + +` diff --git a/tencentcloud/resource_tc_tsf_application_test.go b/tencentcloud/services/tsf/resource_tc_tsf_application_test.go similarity index 81% rename from tencentcloud/resource_tc_tsf_application_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_application_test.go index 4de7115ab0..a077dce71f 100644 --- a/tencentcloud/resource_tc_tsf_application_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_application_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfApplicationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfApplicationDestroy, Steps: []resource.TestStep{ { @@ -49,9 +53,9 @@ func TestAccTencentCloudTsfApplicationResource_basic(t *testing.T) { } func testAccCheckTsfApplicationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_application_release_config" { continue @@ -71,15 +75,15 @@ func testAccCheckTsfApplicationDestroy(s *terraform.State) error { func testAccCheckTsfApplicationExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfApplicationById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group.go b/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group.go new file mode 100644 index 0000000000..0c32767b76 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group.go @@ -0,0 +1,138 @@ +package tsf + +import ( + "context" + "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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" +) + +func ResourceTencentCloudTsfBindApiGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfBindApiGroupCreate, + Read: resourceTencentCloudTsfBindApiGroupRead, + Delete: resourceTencentCloudTsfBindApiGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "gateway_deploy_group_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "gateway group id.", + }, + + "group_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "group id.", + }, + }, + } +} + +func resourceTencentCloudTsfBindApiGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_bind_api_group.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tsf.NewBindApiGroupRequest() + groupId string + gatewayDeployGroupId string + ) + if v, ok := d.GetOk("gateway_deploy_group_id"); ok { + gatewayDeployGroupId = v.(string) + } + + if v, ok := d.GetOk("group_id"); ok { + groupId = v.(string) + } + request.GroupGatewayList = []*tsf.GatewayGroupIds{ + { + GatewayDeployGroupId: &gatewayDeployGroupId, + GroupId: &groupId, + }, + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().BindApiGroup(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 tsf bindApiGroup failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{groupId, gatewayDeployGroupId}, tccommon.FILED_SP)) + + return resourceTencentCloudTsfBindApiGroupRead(d, meta) +} + +func resourceTencentCloudTsfBindApiGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_bind_api_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := TsfService{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()) + } + groupId := idSplit[0] + gatewayDeployGroupId := idSplit[1] + + bindApiGroup, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) + if err != nil { + return err + } + + if bindApiGroup == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfBindApiGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("gateway_deploy_group_id", gatewayDeployGroupId) + _ = d.Set("group_id", groupId) + + return nil +} + +func resourceTencentCloudTsfBindApiGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_bind_api_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + groupId := idSplit[0] + gatewayDeployGroupId := idSplit[1] + + if err := service.DeleteTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group_test.go new file mode 100644 index 0000000000..e290b0807a --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_bind_api_group_test.go @@ -0,0 +1,108 @@ +package tsf_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfBindApiGroupResource_basic -v +func TestAccTencentCloudTsfBindApiGroupResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfBindApiGroupDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfBindApiGroup, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfBindApiGroupExists("tencentcloud_tsf_bind_api_group.bind_api_group"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_bind_api_group.bind_api_group", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_bind_api_group.bind_api_group", "gateway_deploy_group_id", "group-vzd97zpy"), + resource.TestCheckResourceAttr("tencentcloud_tsf_bind_api_group.bind_api_group", "group_id", "grp-qp0rj3zi"), + ), + }, + { + ResourceName: "tencentcloud_tsf_bind_api_group.bind_api_group", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfBindApiGroupDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_bind_api_group" { + continue + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + groupId := idSplit[0] + gatewayDeployGroupId := idSplit[1] + + res, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf bindApiGroup %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfBindApiGroupExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + groupId := idSplit[0] + gatewayDeployGroupId := idSplit[1] + + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfBindApiGroupById(ctx, groupId, gatewayDeployGroupId) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf bindApiGroup %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfBindApiGroup = ` + +resource "tencentcloud_tsf_bind_api_group" "bind_api_group" { + gateway_deploy_group_id = "group-vzd97zpy" + group_id = "grp-qp0rj3zi" +} + +` diff --git a/tencentcloud/resource_tc_tsf_cluster.go b/tencentcloud/services/tsf/resource_tc_tsf_cluster.go similarity index 89% rename from tencentcloud/resource_tc_tsf_cluster.go rename to tencentcloud/services/tsf/resource_tc_tsf_cluster.go index 273fbffccd..a89b849c31 100644 --- a/tencentcloud/resource_tc_tsf_cluster.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_cluster.go @@ -1,6 +1,9 @@ -package tencentcloud +package tsf import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfCluster() *schema.Resource { +func ResourceTencentCloudTsfCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfClusterCreate, Read: resourceTencentCloudTsfClusterRead, @@ -352,10 +356,10 @@ func resourceTencentCloudTsfCluster() *schema.Resource { } func resourceTencentCloudTsfClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_cluster.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateClusterRequest() @@ -430,10 +434,10 @@ func resourceTencentCloudTsfClusterCreate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateCluster(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -448,11 +452,11 @@ func resourceTencentCloudTsfClusterCreate(d *schema.ResourceData, meta interface clusterId = *response.Response.Result d.SetId(clusterId) - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf( + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf( []string{"Creating"}, []string{"Running"}, - 8*readRetryTimeout, + 8*tccommon.ReadRetryTimeout, time.Second, service.TsfClusterStateRefreshFunc(d.Id(), []string{}), ) @@ -460,10 +464,10 @@ func resourceTencentCloudTsfClusterCreate(d *schema.ResourceData, meta interface 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 := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::tsf:%s:uin/:cluster/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -474,14 +478,14 @@ func resourceTencentCloudTsfClusterCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudTsfClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() @@ -712,8 +716,8 @@ func resourceTencentCloudTsfClusterRead(d *schema.ResourceData, meta interface{} _ = d.Set("cluster_remark_name", cluster.ClusterRemarkName) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "tsf", "cluster", tcClient.Region, d.Id()) if err != nil { return err @@ -724,10 +728,10 @@ func resourceTencentCloudTsfClusterRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudTsfClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_cluster.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_cluster.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyClusterRequest() @@ -761,10 +765,10 @@ func resourceTencentCloudTsfClusterUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyCluster(request) if e != nil { - return retryError(e) + return tccommon.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,12 +780,12 @@ func resourceTencentCloudTsfClusterUpdate(d *schema.ResourceData, meta interface } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("tsf", "cluster", tcClient.Region, d.Id()) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tsf", "cluster", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -791,13 +795,13 @@ func resourceTencentCloudTsfClusterUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudTsfClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() if err := service.DeleteTsfClusterById(ctx, clusterId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_cluster_test.go b/tencentcloud/services/tsf/resource_tc_tsf_cluster_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_cluster_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_cluster_test.go index 2e89714f2d..c19fa8f3d6 100644 --- a/tencentcloud/resource_tc_tsf_cluster_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_cluster_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfClusterResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfClusterDestroy, Steps: []resource.TestStep{ { @@ -44,9 +48,9 @@ func TestAccTencentCloudTsfClusterResource_basic(t *testing.T) { } func testAccCheckTsfClusterDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_cluster" { continue @@ -66,15 +70,15 @@ func testAccCheckTsfClusterDestroy(s *terraform.State) error { func testAccCheckTsfClusterExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfClusterById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_tsf_config_template.go b/tencentcloud/services/tsf/resource_tc_tsf_config_template.go similarity index 79% rename from tencentcloud/resource_tc_tsf_config_template.go rename to tencentcloud/services/tsf/resource_tc_tsf_config_template.go index 6847cc2c26..a4c4c3e237 100644 --- a/tencentcloud/resource_tc_tsf_config_template.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_config_template.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfConfigTemplate() *schema.Resource { +func ResourceTencentCloudTsfConfigTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfConfigTemplateCreate, Read: resourceTencentCloudTsfConfigTemplateRead, @@ -76,10 +79,10 @@ func resourceTencentCloudTsfConfigTemplate() *schema.Resource { } func resourceTencentCloudTsfConfigTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_config_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_config_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateConfigTemplateWithDetailRespRequest() @@ -110,10 +113,10 @@ func resourceTencentCloudTsfConfigTemplateCreate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateConfigTemplateWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateConfigTemplateWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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,14 +135,14 @@ func resourceTencentCloudTsfConfigTemplateCreate(d *schema.ResourceData, meta in } func resourceTencentCloudTsfConfigTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_config_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_config_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() @@ -190,10 +193,10 @@ func resourceTencentCloudTsfConfigTemplateRead(d *schema.ResourceData, meta inte } func resourceTencentCloudTsfConfigTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_config_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_config_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewUpdateConfigTemplateRequest() @@ -229,10 +232,10 @@ func resourceTencentCloudTsfConfigTemplateUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().UpdateConfigTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().UpdateConfigTemplate(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -247,13 +250,13 @@ func resourceTencentCloudTsfConfigTemplateUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudTsfConfigTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_config_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_config_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() if err := service.DeleteTsfConfigTemplateById(ctx, templateId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_config_template_test.go b/tencentcloud/services/tsf/resource_tc_tsf_config_template_test.go similarity index 82% rename from tencentcloud/resource_tc_tsf_config_template_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_config_template_test.go index 73f187b1cc..3d73e2983a 100644 --- a/tencentcloud/resource_tc_tsf_config_template_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_config_template_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "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" @@ -15,8 +19,8 @@ func TestAccTencentCloudTsfConfigTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfConfigTemplateDestroy, Steps: []resource.TestStep{ { @@ -51,9 +55,9 @@ func TestAccTencentCloudTsfConfigTemplateResource_basic(t *testing.T) { } func testAccCheckTsfConfigTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_config_template" { continue @@ -77,15 +81,15 @@ func testAccCheckTsfConfigTemplateDestroy(s *terraform.State) error { func testAccCheckTsfConfigTemplateExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfConfigTemplateById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_tsf_deploy_container_group.go b/tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group.go similarity index 96% rename from tencentcloud/resource_tc_tsf_deploy_container_group.go rename to tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group.go index f18a4d6c0c..acac619f13 100644 --- a/tencentcloud/resource_tc_tsf_deploy_container_group.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfDeployContainerGroup() *schema.Resource { +func ResourceTencentCloudTsfDeployContainerGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfDeployContainerGroupCreate, Read: resourceTencentCloudTsfDeployContainerGroupRead, @@ -683,11 +686,11 @@ func resourceTencentCloudTsfDeployContainerGroup() *schema.Resource { } func resourceTencentCloudTsfDeployContainerGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_container_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_container_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) var ( request = tsf.NewDeployContainerGroupRequest() @@ -1047,10 +1050,10 @@ func resourceTencentCloudTsfDeployContainerGroupCreate(d *schema.ResourceData, m request.WarmupSetting = &warmupSetting } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().DeployContainerGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().DeployContainerGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -1067,11 +1070,11 @@ func resourceTencentCloudTsfDeployContainerGroupCreate(d *schema.ResourceData, m } d.SetId(groupId) - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { groupInfo, err := service.DescribeTsfStartContainerGroupById(ctx, groupId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if groupInfo == nil { err = fmt.Errorf("group %s not exists", groupId) @@ -1096,13 +1099,13 @@ func resourceTencentCloudTsfDeployContainerGroupCreate(d *schema.ResourceData, m } func resourceTencentCloudTsfDeployContainerGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_container_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_container_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupId := d.Id() @@ -1467,9 +1470,9 @@ func resourceTencentCloudTsfDeployContainerGroupRead(d *schema.ResourceData, met } func resourceTencentCloudTsfDeployContainerGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_container_group.update")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_container_group.update")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyContainerReplicasRequest() @@ -1491,10 +1494,10 @@ func resourceTencentCloudTsfDeployContainerGroupUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyContainerReplicas(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyContainerReplicas(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -1509,8 +1512,8 @@ func resourceTencentCloudTsfDeployContainerGroupUpdate(d *schema.ResourceData, m } func resourceTencentCloudTsfDeployContainerGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_container_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_container_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tsf_deploy_container_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group_test.go similarity index 96% rename from tencentcloud/resource_tc_tsf_deploy_container_group_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group_test.go index 7abde506ca..9a9f9ba693 100644 --- a/tencentcloud/resource_tc_tsf_deploy_container_group_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_deploy_container_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 TestAccTencentCloudTsfDeployContainerGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, Steps: []resource.TestStep{ { @@ -77,7 +79,7 @@ func TestAccTencentCloudTsfDeployContainerGroupResource_basic(t *testing.T) { const testAccTsfDeployContainerGroupVar = ` variable "group_id" { - default = "` + defaultTsfContainerGroupId + `" + default = "` + tcacctest.DefaultTsfContainerGroupId + `" } ` diff --git a/tencentcloud/resource_tc_tsf_deploy_vm_group.go b/tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group.go similarity index 95% rename from tencentcloud/resource_tc_tsf_deploy_vm_group.go rename to tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group.go index 318591698b..994f744fdf 100644 --- a/tencentcloud/resource_tc_tsf_deploy_vm_group.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfDeployVmGroup() *schema.Resource { +func ResourceTencentCloudTsfDeployVmGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfDeployVmGroupCreate, Read: resourceTencentCloudTsfDeployVmGroupRead, @@ -383,11 +386,11 @@ func resourceTencentCloudTsfDeployVmGroup() *schema.Resource { } func resourceTencentCloudTsfDeployVmGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_vm_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_vm_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) var ( request = tsf.NewDeployGroupRequest() @@ -580,10 +583,10 @@ func resourceTencentCloudTsfDeployVmGroupCreate(d *schema.ResourceData, meta int request.WarmupSetting = &warmupSetting } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().DeployGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().DeployGroup(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -596,11 +599,11 @@ func resourceTencentCloudTsfDeployVmGroupCreate(d *schema.ResourceData, meta int d.SetId(groupId) - service := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { groupInfo, err := service.DescribeTsfStartGroupById(ctx, groupId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if groupInfo == nil { err = fmt.Errorf("group %s not exists", groupId) @@ -625,14 +628,14 @@ func resourceTencentCloudTsfDeployVmGroupCreate(d *schema.ResourceData, meta int } func resourceTencentCloudTsfDeployVmGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_vm_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_vm_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupId := d.Id() @@ -847,8 +850,8 @@ func resourceTencentCloudTsfDeployVmGroupRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfDeployVmGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_deploy_vm_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_deploy_vm_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_tsf_deploy_vm_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group_test.go similarity index 94% rename from tencentcloud/resource_tc_tsf_deploy_vm_group_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group_test.go index d94ef70541..495b8d1699 100644 --- a/tencentcloud/resource_tc_tsf_deploy_vm_group_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_deploy_vm_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 TestAccTencentCloudTsfDeployVmGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule.go b/tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule.go new file mode 100644 index 0000000000..228119c5f8 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule.go @@ -0,0 +1,139 @@ +package tsf + +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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" +) + +func ResourceTencentCloudTsfEnableUnitRule() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfEnableUnitRuleCreate, + Read: resourceTencentCloudTsfEnableUnitRuleRead, + Update: resourceTencentCloudTsfEnableUnitRuleUpdate, + Delete: resourceTencentCloudTsfEnableUnitRuleDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "rule_id": { + Required: true, + Type: schema.TypeString, + Description: "api ID.", + }, + + "switch": { + Required: true, + Type: schema.TypeString, + Description: "switch, on: `enabled`, off: `disabled`.", + }, + }, + } +} + +func resourceTencentCloudTsfEnableUnitRuleCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_enable_unit_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var id string + if v, ok := d.GetOk("rule_id"); ok { + id = v.(string) + } + + d.SetId(id) + + return resourceTencentCloudTsfEnableUnitRuleUpdate(d, meta) +} + +func resourceTencentCloudTsfEnableUnitRuleRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_enable_unit_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + id := d.Id() + + enableUnitRule, err := service.DescribeTsfEnableUnitRuleById(ctx, id) + if err != nil { + return err + } + + if enableUnitRule == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfEnableUnitRule` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if enableUnitRule.Id != nil { + _ = d.Set("rule_id", enableUnitRule.Id) + } + + if enableUnitRule.Status != nil { + _ = d.Set("switch", enableUnitRule.Status) + } + + return nil +} + +func resourceTencentCloudTsfEnableUnitRuleUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_enable_unit_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + id := d.Id() + if v, ok := d.GetOk("switch"); ok { + if v.(string) == "enabled" { + request := tsf.NewEnableUnitRuleRequest() + request.Id = &id + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().EnableUnitRule(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf enableUnitRule failed, reason:%+v", logId, err) + return err + } + } + + if v.(string) == "disabled" { + request := tsf.NewDisableUnitRuleRequest() + request.Id = &id + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().DisableUnitRule(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf disableUnitRule failed, reason:%+v", logId, err) + return err + } + } + } + + return resourceTencentCloudTsfEnableUnitRuleRead(d, meta) +} + +func resourceTencentCloudTsfEnableUnitRuleDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_enable_unit_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_tsf_enable_unit_rule_test.go b/tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule_test.go similarity index 75% rename from tencentcloud/resource_tc_tsf_enable_unit_rule_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule_test.go index 8517586eb0..d05557ca0b 100644 --- a/tencentcloud/resource_tc_tsf_enable_unit_rule_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_enable_unit_rule_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfEnableUnitRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfEnableUnitRuleDestroy, Steps: []resource.TestStep{ { @@ -44,9 +48,9 @@ func TestAccTencentCloudTsfEnableUnitRuleResource_basic(t *testing.T) { } func testAccCheckTsfEnableUnitRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_enable_unit_rule" { continue @@ -66,15 +70,15 @@ func testAccCheckTsfEnableUnitRuleDestroy(s *terraform.State) error { func testAccCheckTsfEnableUnitRuleExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfEnableUnitRuleById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tsf/resource_tc_tsf_group.go b/tencentcloud/services/tsf/resource_tc_tsf_group.go new file mode 100644 index 0000000000..826a45ec52 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_group.go @@ -0,0 +1,289 @@ +package tsf + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTsfGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfGroupCreate, + Read: resourceTencentCloudTsfGroupRead, + Update: resourceTencentCloudTsfGroupUpdate, + Delete: resourceTencentCloudTsfGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "application_id": { + Required: true, + Type: schema.TypeString, + Description: "The application ID to which the group belongs.", + }, + + "namespace_id": { + Required: true, + Type: schema.TypeString, + Description: "ID of the namespace to which the group belongs.", + }, + + "group_name": { + Required: true, + Type: schema.TypeString, + Description: "Group name field, length 1~60, beginning with a letter or underscore, can contain alphanumeric underscore.", + }, + + "cluster_id": { + Required: true, + Type: schema.TypeString, + Description: "Cluster ID.", + }, + + "group_desc": { + Optional: true, + Type: schema.TypeString, + Description: "Group description.", + }, + + "alias": { + Optional: true, + Type: schema.TypeString, + Description: "Deployment Group Notes.", + }, + + "group_resource_type": { + Computed: true, + Type: schema.TypeString, + Description: "Deployment Group Resource Type.", + }, + + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + }, + } +} + +func resourceTencentCloudTsfGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_group.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tsf.NewCreateGroupRequest() + response = tsf.NewCreateGroupResponse() + groupId string + ) + if v, ok := d.GetOk("application_id"); ok { + request.ApplicationId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("namespace_id"); ok { + request.NamespaceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("group_name"); ok { + request.GroupName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("group_desc"); ok { + request.GroupDesc = helper.String(v.(string)) + } + + if v, ok := d.GetOk("alias"); ok { + request.Alias = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateGroup(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 tsf group failed, reason:%+v", logId, err) + return err + } + + groupId = *response.Response.Result + d.SetId(groupId) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tsf:%s:uin/:group/%s", region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudTsfGroupRead(d, meta) +} + +func resourceTencentCloudTsfGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + groupId := d.Id() + + group, err := service.DescribeTsfGroupById(ctx, groupId) + if err != nil { + return err + } + + if group == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if group.ApplicationId != nil { + _ = d.Set("application_id", group.ApplicationId) + } + + if group.NamespaceId != nil { + _ = d.Set("namespace_id", group.NamespaceId) + } + + if group.GroupName != nil { + _ = d.Set("group_name", group.GroupName) + } + + if group.ClusterId != nil { + _ = d.Set("cluster_id", group.ClusterId) + } + + if group.GroupDesc != nil { + _ = d.Set("group_desc", group.GroupDesc) + } + + if group.GroupResourceType != nil { + _ = d.Set("group_resource_type", group.GroupResourceType) + } + + if group.Alias != nil { + _ = d.Set("alias", group.Alias) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "tsf", "group", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTsfGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_group.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := tsf.NewModifyGroupRequest() + + groupId := d.Id() + + request.GroupId = &groupId + + immutableArgs := []string{"application_id", "namespace_id", "cluster_id", "group_resource_type", "alias"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("group_name") { + if v, ok := d.GetOk("group_name"); ok { + request.GroupName = helper.String(v.(string)) + } + } + + if d.HasChange("group_desc") { + if v, ok := d.GetOk("group_desc"); ok { + request.GroupDesc = helper.String(v.(string)) + } + } + + if d.HasChange("alias") { + if v, ok := d.GetOk("alias"); ok { + request.Alias = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyGroup(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf group failed, reason:%+v", logId, err) + return err + } + + if d.HasChange("tags") { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tsf", "group", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudTsfGroupRead(d, meta) +} + +func resourceTencentCloudTsfGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + groupId := d.Id() + + if err := service.DeleteTsfGroupById(ctx, groupId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tsf/resource_tc_tsf_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_group_test.go new file mode 100644 index 0000000000..9a0d682308 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_group_test.go @@ -0,0 +1,124 @@ +package tsf_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "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" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfGroupResource_basic -v +func TestAccTencentCloudTsfGroupResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfGroupDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfGroup, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfGroupExists("tencentcloud_tsf_group.group"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_group.group", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "application_id", tcacctest.DefaultTsfApplicationId), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "namespace_id", tcacctest.DefaultNamespaceId), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "group_name", "terraform-test"), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "cluster_id", tcacctest.DefaultTsfClustId), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "group_desc", "terraform desc"), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "alias", "terraform test"), + resource.TestCheckResourceAttr("tencentcloud_tsf_group.group", "tags.createdBy", "terraform"), + ), + }, + { + ResourceName: "tencentcloud_tsf_group.group", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfGroupDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_group" { + continue + } + + res, err := service.DescribeTsfGroupById(ctx, rs.Primary.ID) + if err != nil { + code := err.(*sdkErrors.TencentCloudSDKError).Code + if code == "ResourceNotFound.GroupNotExist" { + return nil + } + return err + } + + if res != nil { + return fmt.Errorf("tsf group %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfGroupExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfGroupById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf group %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfGroupVar = ` +variable "application_id" { + default = "` + tcacctest.DefaultTsfApplicationId + `" +} +variable "namespace_id" { + default = "` + tcacctest.DefaultNamespaceId + `" +} +variable "cluster_id" { + default = "` + tcacctest.DefaultTsfClustId + `" +} +` + +const testAccTsfGroup = testAccTsfGroupVar + ` + +resource "tencentcloud_tsf_group" "group" { + application_id = var.application_id + namespace_id = var.namespace_id + group_name = "terraform-test" + cluster_id = var.cluster_id + group_desc = "terraform desc" + alias = "terraform test" + tags = { + "createdBy" = "terraform" + } + } + +` diff --git a/tencentcloud/resource_tc_tsf_instances_attachment.go b/tencentcloud/services/tsf/resource_tc_tsf_instances_attachment.go similarity index 86% rename from tencentcloud/resource_tc_tsf_instances_attachment.go rename to tencentcloud/services/tsf/resource_tc_tsf_instances_attachment.go index 44306ab1ea..61acf2ced4 100644 --- a/tencentcloud/resource_tc_tsf_instances_attachment.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_instances_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfInstancesAttachment() *schema.Resource { +func ResourceTencentCloudTsfInstancesAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfInstancesAttachmentCreate, Read: resourceTencentCloudTsfInstancesAttachmentRead, @@ -131,10 +134,10 @@ func resourceTencentCloudTsfInstancesAttachment() *schema.Resource { } func resourceTencentCloudTsfInstancesAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_instances_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_instances_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewAddClusterInstancesRequest() @@ -206,10 +209,10 @@ func resourceTencentCloudTsfInstancesAttachmentCreate(d *schema.ResourceData, me } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().AddClusterInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().AddClusterInstances(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -220,22 +223,22 @@ func resourceTencentCloudTsfInstancesAttachmentCreate(d *schema.ResourceData, me return err } - d.SetId(clusterId + FILED_SP + instanceId) + d.SetId(clusterId + tccommon.FILED_SP + instanceId) return resourceTencentCloudTsfInstancesAttachmentRead(d, meta) } func resourceTencentCloudTsfInstancesAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_instances_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_instances_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{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()) } @@ -315,14 +318,14 @@ func resourceTencentCloudTsfInstancesAttachmentRead(d *schema.ResourceData, meta } func resourceTencentCloudTsfInstancesAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_instances_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_instances_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TsfService{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_tsf_instances_attachment_test.go b/tencentcloud/services/tsf/resource_tc_tsf_instances_attachment_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_instances_attachment_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_instances_attachment_test.go index a7475ee6b6..0a27f7e6f3 100644 --- a/tencentcloud/resource_tc_tsf_instances_attachment_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_instances_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf_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" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,8 +19,8 @@ func TestAccTencentCloudTsfInstancesAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfInstancesAttachmentDestroy, Steps: []resource.TestStep{ { @@ -24,8 +28,8 @@ func TestAccTencentCloudTsfInstancesAttachmentResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTsfInstancesAttachmentExists("tencentcloud_tsf_instances_attachment.instances_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_tsf_instances_attachment.instances_attachment", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "cluster_id", defaultTsfClustId), - resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "image_id", defaultTsfImageId), + resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "cluster_id", tcacctest.DefaultTsfClustId), + resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "image_id", tcacctest.DefaultTsfImageId), resource.TestCheckResourceAttrSet("tencentcloud_tsf_instances_attachment.instances_attachment", "instance_id"), resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "instance_import_mode", "R"), resource.TestCheckResourceAttr("tencentcloud_tsf_instances_attachment.instances_attachment", "os_customize_type", "my_customize"), @@ -39,15 +43,15 @@ func TestAccTencentCloudTsfInstancesAttachmentResource_basic(t *testing.T) { } func testAccCheckTsfInstancesAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_instances_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) } @@ -68,21 +72,21 @@ func testAccCheckTsfInstancesAttachmentDestroy(s *terraform.State) error { func testAccCheckTsfInstancesAttachmentExists(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) } - 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) } clusterId := idSplit[0] instanceId := idSplit[1] - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfInstancesAttachmentById(ctx, clusterId, instanceId) if err != nil { return err @@ -98,11 +102,11 @@ func testAccCheckTsfInstancesAttachmentExists(r string) resource.TestCheckFunc { const testAccTsfInstancesAttachmentVar = ` variable "cluster_id" { - default = "` + defaultTsfClustId + `" + default = "` + tcacctest.DefaultTsfClustId + `" } variable "image_id" { - default = "` + defaultTsfImageId + `" + default = "` + tcacctest.DefaultTsfImageId + `" } ` diff --git a/tencentcloud/resource_tc_tsf_lane.go b/tencentcloud/services/tsf/resource_tc_tsf_lane.go similarity index 86% rename from tencentcloud/resource_tc_tsf_lane.go rename to tencentcloud/services/tsf/resource_tc_tsf_lane.go index 574c1e9065..cfb8df532b 100644 --- a/tencentcloud/resource_tc_tsf_lane.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_lane.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfLane() *schema.Resource { +func ResourceTencentCloudTsfLane() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfLaneCreate, Read: resourceTencentCloudTsfLaneRead, @@ -147,10 +150,10 @@ func resourceTencentCloudTsfLane() *schema.Resource { } func resourceTencentCloudTsfLaneCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateLaneRequest() @@ -217,10 +220,10 @@ func resourceTencentCloudTsfLaneCreate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateLane(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateLane(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -239,14 +242,14 @@ func resourceTencentCloudTsfLaneCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTsfLaneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} laneId := d.Id() @@ -354,10 +357,10 @@ func resourceTencentCloudTsfLaneRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudTsfLaneUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyLaneRequest() @@ -383,10 +386,10 @@ func resourceTencentCloudTsfLaneUpdate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyLane(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyLane(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -401,13 +404,13 @@ func resourceTencentCloudTsfLaneUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTsfLaneDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} laneId := d.Id() if err := service.DeleteTsfLaneById(ctx, laneId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_lane_rule.go b/tencentcloud/services/tsf/resource_tc_tsf_lane_rule.go similarity index 86% rename from tencentcloud/resource_tc_tsf_lane_rule.go rename to tencentcloud/services/tsf/resource_tc_tsf_lane_rule.go index 49f890e9be..1d7aa25105 100644 --- a/tencentcloud/resource_tc_tsf_lane_rule.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_lane_rule.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfLaneRule() *schema.Resource { +func ResourceTencentCloudTsfLaneRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfLaneRuleCreate, Read: resourceTencentCloudTsfLaneRuleRead, @@ -137,10 +140,10 @@ func resourceTencentCloudTsfLaneRule() *schema.Resource { } func resourceTencentCloudTsfLaneRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateLaneRuleRequest() @@ -200,10 +203,10 @@ func resourceTencentCloudTsfLaneRuleCreate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateLaneRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateLaneRule(request) if e != nil { - return retryError(e) + return tccommon.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,14 +225,14 @@ func resourceTencentCloudTsfLaneRuleCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfLaneRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleId := d.Id() @@ -328,10 +331,10 @@ func resourceTencentCloudTsfLaneRuleRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTsfLaneRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyLaneRuleRequest() @@ -395,10 +398,10 @@ func resourceTencentCloudTsfLaneRuleUpdate(d *schema.ResourceData, meta interfac request.LaneId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyLaneRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyLaneRule(request) if e != nil { - return retryError(e) + return tccommon.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,13 +416,13 @@ func resourceTencentCloudTsfLaneRuleUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfLaneRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_lane_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_lane_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleId := d.Id() if err := service.DeleteTsfLaneRuleById(ctx, ruleId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_lane_rule_test.go b/tencentcloud/services/tsf/resource_tc_tsf_lane_rule_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_lane_rule_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_lane_rule_test.go index adabd80358..682f69784c 100644 --- a/tencentcloud/resource_tc_tsf_lane_rule_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_lane_rule_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfLaneRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfLaneRuleDestroy, Steps: []resource.TestStep{ { @@ -43,9 +47,9 @@ func TestAccTencentCloudTsfLaneRuleResource_basic(t *testing.T) { } func testAccCheckTsfLaneRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_lane_rule" { continue @@ -65,15 +69,15 @@ func testAccCheckTsfLaneRuleDestroy(s *terraform.State) error { func testAccCheckTsfLaneRuleExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfLaneRuleById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tsf/resource_tc_tsf_lane_test.go b/tencentcloud/services/tsf/resource_tc_tsf_lane_test.go new file mode 100644 index 0000000000..b85f640330 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_lane_test.go @@ -0,0 +1,108 @@ +package tsf_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfLaneResource_basic -v +func TestAccTencentCloudTsfLaneResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfLaneDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfLane, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfLaneExists("tencentcloud_tsf_lane.lane"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_lane.lane", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_name", "terraform-lane"), + resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "remark", "lane desc"), + resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.#", "1"), + resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.0.group_id", tcacctest.DefaultTsfGroupId), + resource.TestCheckResourceAttr("tencentcloud_tsf_lane.lane", "lane_group_list.0.entrance", "true"), + ), + }, + // { + // ResourceName: "tencentcloud_tsf_lane.lane", + // ImportState: true, + // ImportStateVerify: true, + // }, + }, + }) +} + +func testAccCheckTsfLaneDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_lane" { + continue + } + + res, err := service.DescribeTsfLaneById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf lane %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfLaneExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfLaneById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf lane %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfLaneVar = ` +variable "group_id" { + default = "` + tcacctest.DefaultTsfGroupId + `" +} +` + +const testAccTsfLane = testAccTsfLaneVar + ` + +resource "tencentcloud_tsf_lane" "lane" { + lane_name = "terraform-lane" + remark = "lane desc" + lane_group_list { + group_id = var.group_id + entrance = true + } +} + +` diff --git a/tencentcloud/services/tsf/resource_tc_tsf_microservice.go b/tencentcloud/services/tsf/resource_tc_tsf_microservice.go new file mode 100644 index 0000000000..7327e14a97 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_microservice.go @@ -0,0 +1,254 @@ +package tsf + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTsfMicroservice() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfMicroserviceCreate, + Read: resourceTencentCloudTsfMicroserviceRead, + Update: resourceTencentCloudTsfMicroserviceUpdate, + Delete: resourceTencentCloudTsfMicroserviceDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "namespace_id": { + Required: true, + Type: schema.TypeString, + Description: "Namespace ID.", + }, + + "microservice_name": { + Required: true, + Type: schema.TypeString, + Description: "Microservice name.", + }, + + "microservice_desc": { + Optional: true, + Type: schema.TypeString, + Description: "Microservice description information.", + }, + + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + }, + } +} + +func resourceTencentCloudTsfMicroserviceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_microservice.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + request = tsf.NewCreateMicroserviceRequest() + response = tsf.NewCreateMicroserviceResponse() + microserviceName string + namespaceId string + microserviceId string + ) + if v, ok := d.GetOk("namespace_id"); ok { + namespaceId = v.(string) + request.NamespaceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("microservice_name"); ok { + microserviceName = v.(string) + request.MicroserviceName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("microservice_desc"); ok { + request.MicroserviceDesc = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateMicroservice(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 tsf microservice failed, reason:%+v", logId, err) + return err + } + + if *response.Response.Result { + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + microservice, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, "", microserviceName) + if err != nil { + return err + } + + microserviceId = *microservice.MicroserviceId + d.SetId(namespaceId + tccommon.FILED_SP + microserviceId) + } else { + return fmt.Errorf("[DEBUG]%s api[%s] Creation failed, and the return result of interface creation is false", logId, request.GetAction()) + } + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::tsf:%s:uin/:microservice/%s", region, microserviceId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudTsfMicroserviceRead(d, meta) +} + +func resourceTencentCloudTsfMicroserviceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_microservice.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + namespaceId := idSplit[0] + microserviceId := idSplit[1] + + microservice, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") + if err != nil { + return err + } + + if microservice == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfMicroservice` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + if microservice.NamespaceId != nil { + _ = d.Set("namespace_id", microservice.NamespaceId) + } + + if microservice.MicroserviceName != nil { + _ = d.Set("microservice_name", microservice.MicroserviceName) + } + + if microservice.MicroserviceDesc != nil { + _ = d.Set("microservice_desc", microservice.MicroserviceDesc) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "tsf", "microservice", tcClient.Region, microserviceId) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudTsfMicroserviceUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_microservice.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := tsf.NewModifyMicroserviceRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + // namespaceId := idSplit[0] + microserviceId := idSplit[1] + + request.MicroserviceId = µserviceId + + immutableArgs := []string{"namespace_id", "microservice_name"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("microservice_desc") { + if v, ok := d.GetOk("microservice_desc"); ok { + request.MicroserviceDesc = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyMicroservice(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf microservice failed, reason:%+v", logId, err) + return err + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("tsf", "microservice", tcClient.Region, microserviceId) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudTsfMicroserviceRead(d, meta) +} + +func resourceTencentCloudTsfMicroserviceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_microservice.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{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()) + } + // namespaceId := idSplit[0] + microserviceId := idSplit[1] + + if err := service.DeleteTsfMicroserviceById(ctx, microserviceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/services/tsf/resource_tc_tsf_microservice_test.go b/tencentcloud/services/tsf/resource_tc_tsf_microservice_test.go new file mode 100644 index 0000000000..fd0ef6fc87 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_microservice_test.go @@ -0,0 +1,120 @@ +package tsf_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfMicroserviceResource_basic -v +func TestAccTencentCloudTsfMicroserviceResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfMicroserviceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfMicroservice, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfMicroserviceExists("tencentcloud_tsf_microservice.microservice"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_microservice.microservice", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "microservice_name", "test-microservice"), + resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "microservice_desc", "desc-microservice"), + resource.TestCheckResourceAttr("tencentcloud_tsf_microservice.microservice", "tags.createdBy", "terraform"), + ), + }, + { + ResourceName: "tencentcloud_tsf_microservice.microservice", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfMicroserviceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_microservice" { + continue + } + + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + namespaceId := idSplit[0] + microserviceId := idSplit[1] + + res, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf microservice %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfMicroserviceExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + namespaceId := idSplit[0] + microserviceId := idSplit[1] + + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfMicroserviceById(ctx, namespaceId, microserviceId, "") + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf microservice %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfMicroserviceVar = ` +variable "namespace_id" { + default = "` + tcacctest.DefaultNamespaceId + `" +} +` + +const testAccTsfMicroservice = testAccTsfMicroserviceVar + ` + +resource "tencentcloud_tsf_microservice" "microservice" { + namespace_id = var.namespace_id + microservice_name = "test-microservice" + microservice_desc = "desc-microservice" + tags = { + "createdBy" = "terraform" + } +} + +` diff --git a/tencentcloud/resource_tc_tsf_namespace.go b/tencentcloud/services/tsf/resource_tc_tsf_namespace.go similarity index 84% rename from tencentcloud/resource_tc_tsf_namespace.go rename to tencentcloud/services/tsf/resource_tc_tsf_namespace.go index e405e7f097..8ba5c88f48 100644 --- a/tencentcloud/resource_tc_tsf_namespace.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_namespace.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfNamespace() *schema.Resource { +func ResourceTencentCloudTsfNamespace() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfNamespaceCreate, Read: resourceTencentCloudTsfNamespaceRead, @@ -130,10 +133,10 @@ func resourceTencentCloudTsfNamespace() *schema.Resource { } func resourceTencentCloudTsfNamespaceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_namespace.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_namespace.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateNamespaceRequest() @@ -180,10 +183,10 @@ func resourceTencentCloudTsfNamespaceCreate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateNamespace(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateNamespace(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -202,14 +205,14 @@ func resourceTencentCloudTsfNamespaceCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTsfNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_namespace.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_namespace.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} namespaceId := d.Id() @@ -292,10 +295,10 @@ func resourceTencentCloudTsfNamespaceRead(d *schema.ResourceData, meta interface } func resourceTencentCloudTsfNamespaceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_namespace.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_namespace.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyNamespaceRequest() @@ -329,10 +332,10 @@ func resourceTencentCloudTsfNamespaceUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyNamespace(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyNamespace(request) if e != nil { - return retryError(e) + return tccommon.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,13 +350,13 @@ func resourceTencentCloudTsfNamespaceUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudTsfNamespaceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_namespace.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_namespace.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} namespaceId := d.Id() if err := service.DeleteTsfNamespaceById(ctx, namespaceId); err != nil { diff --git a/tencentcloud/services/tsf/resource_tc_tsf_namespace_test.go b/tencentcloud/services/tsf/resource_tc_tsf_namespace_test.go new file mode 100644 index 0000000000..5a5a88617b --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_namespace_test.go @@ -0,0 +1,99 @@ +package tsf_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfNamespaceResource_basic -v +func TestAccTencentCloudTsfNamespaceResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfNamespaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfNamespace, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfNamespaceExists("tencentcloud_tsf_namespace.namespace"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_namespace.namespace", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_name", "terraform-namespace-name"), + resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_desc", "terraform-test"), + resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "namespace_type", "DEF"), + resource.TestCheckResourceAttr("tencentcloud_tsf_namespace.namespace", "is_ha_enable", "0"), + ), + }, + // { + // ResourceName: "tencentcloud_tsf_namespace.namespace", + // ImportState: true, + // ImportStateVerify: true, + // }, + }, + }) +} + +func testAccCheckTsfNamespaceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_namespace" { + continue + } + + res, err := service.DescribeTsfNamespaceById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf namespace %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfNamespaceExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfNamespaceById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf namespace %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfNamespace = ` + +resource "tencentcloud_tsf_namespace" "namespace" { + namespace_name = "terraform-namespace-name" + namespace_desc = "terraform-test" + namespace_type = "DEF" + is_ha_enable = "0" +} + +` diff --git a/tencentcloud/services/tsf/resource_tc_tsf_operate_container_group.go b/tencentcloud/services/tsf/resource_tc_tsf_operate_container_group.go new file mode 100644 index 0000000000..cabc7178fe --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_operate_container_group.go @@ -0,0 +1,179 @@ +package tsf + +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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" +) + +func ResourceTencentCloudTsfOperateContainerGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfOperateContainerGroupCreate, + Read: resourceTencentCloudTsfOperateContainerGroupRead, + Update: resourceTencentCloudTsfOperateContainerGroupUpdate, + Delete: resourceTencentCloudTsfOperateContainerGroupDelete, + + Schema: map[string]*schema.Schema{ + "group_id": { + Required: true, + Type: schema.TypeString, + Description: "group Id.", + }, + + "operate": { + Required: true, + Type: schema.TypeString, + Description: "Operation, `start`- start the container, `stop`- stop the container.", + }, + }, + } +} + +func resourceTencentCloudTsfOperateContainerGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_container_group.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var groupId string + if v, ok := d.GetOk("group_id"); ok { + groupId = v.(string) + } + + d.SetId(groupId) + + return resourceTencentCloudTsfOperateContainerGroupUpdate(d, meta) +} + +func resourceTencentCloudTsfOperateContainerGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_container_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + groupId := d.Id() + startContainerGroup, err := service.DescribeTsfStartContainerGroupById(ctx, groupId) + if err != nil { + return err + } + + if startContainerGroup == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfOperateContainerGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("group_id", groupId) + + return nil +} + +func resourceTencentCloudTsfOperateContainerGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_container_group.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + groupId := d.Id() + + if v, ok := d.GetOk("operate"); ok { + var status bool + operate := v.(string) + if operate == "start" { + request := tsf.NewStartContainerGroupRequest() + request.GroupId = &groupId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().StartContainerGroup(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()) + } + status = *result.Response.Result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf startContainerGroup failed, reason:%+v", logId, err) + return err + } + + if !status { + return fmt.Errorf("[CRITAL]%s start tsf containerGroup failed", logId) + } + } else if operate == "stop" { + request := tsf.NewStopContainerGroupRequest() + request.GroupId = &groupId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().StopContainerGroup(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()) + } + status = *result.Response.Result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf stopContainerGroup failed, reason:%+v", logId, err) + return err + } + + if !status { + return fmt.Errorf("[CRITAL]%s stop tsf containerGroup failed", logId) + } + } else { + return fmt.Errorf("[CRITAL]%s operate type error, %s", logId, operate) + } + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + groupInfo, err := service.DescribeTsfStartContainerGroupById(ctx, groupId) + if err != nil { + return tccommon.RetryError(err) + } + if groupInfo == nil { + err = fmt.Errorf("group %s not exists", groupId) + return resource.NonRetryableError(err) + } + if operate == "start" && *groupInfo.Status == "Running" { + return nil + } + if operate == "stop" && *groupInfo.Status == "Paused" { + return nil + } + if operate == "start" && *groupInfo.Status == "Paused" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) + } + if operate == "stop" && *groupInfo.Status == "Running" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) + } + if *groupInfo.Status == "Waiting" || *groupInfo.Status == "Updating" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.Status)) + } + err = fmt.Errorf("start or stop operation status is %v, we won't wait for it finish", *groupInfo.Status) + return resource.NonRetryableError(err) + }) + + if err != nil { + log.Printf("[CRITAL]%s start or stop operation, reason:%s\n ", logId, err.Error()) + return err + } + } + + return resourceTencentCloudTsfOperateContainerGroupRead(d, meta) +} + +func resourceTencentCloudTsfOperateContainerGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_Operate_container_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_tsf_operate_container_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_operate_container_group_test.go similarity index 76% rename from tencentcloud/resource_tc_tsf_operate_container_group_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_operate_container_group_test.go index 2d3a59444e..87dae4810d 100644 --- a/tencentcloud/resource_tc_tsf_operate_container_group_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_operate_container_group_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfOperateContainerGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfOperateContainerGroup, @@ -37,15 +41,15 @@ func TestAccTencentCloudTsfOperateContainerGroupResource_basic(t *testing.T) { func testAccCheckTsfOperateContainerGroupExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfStartContainerGroupById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/tsf/resource_tc_tsf_operate_group.go b/tencentcloud/services/tsf/resource_tc_tsf_operate_group.go new file mode 100644 index 0000000000..8f8a1126eb --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_operate_group.go @@ -0,0 +1,169 @@ +package tsf + +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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" +) + +func ResourceTencentCloudTsfOperateGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfOperateGroupCreate, + Read: resourceTencentCloudTsfOperateGroupRead, + Update: resourceTencentCloudTsfOperateGroupUpdate, + Delete: resourceTencentCloudTsfOperateGroupDelete, + + Schema: map[string]*schema.Schema{ + "group_id": { + Required: true, + Type: schema.TypeString, + Description: "group id.", + }, + + "operate": { + Required: true, + Type: schema.TypeString, + Description: "Operation, `start`- start the group, `stop`- stop the group.", + }, + }, + } +} + +func resourceTencentCloudTsfOperateGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_group.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var groupId string + if v, ok := d.GetOk("group_id"); ok { + groupId = v.(string) + } + + d.SetId(groupId) + + return resourceTencentCloudTsfOperateGroupUpdate(d, meta) +} + +func resourceTencentCloudTsfOperateGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + groupId := d.Id() + startGroup, err := service.DescribeTsfStartGroupById(ctx, groupId) + if err != nil { + return err + } + + if startGroup == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfOperateGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if startGroup.GroupId != nil { + _ = d.Set("group_id", startGroup.GroupId) + } + + return nil +} + +func resourceTencentCloudTsfOperateGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_group.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + groupId := d.Id() + if v, ok := d.GetOk("operate"); ok { + operate := v.(string) + if operate == "start" { + request := tsf.NewStartGroupRequest() + request.GroupId = &groupId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().StartGroup(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf startGroup failed, reason:%+v", logId, err) + return err + } + } + if operate == "stop" { + request := tsf.NewStopGroupRequest() + request.GroupId = &groupId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().StopGroup(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update tsf stopGroup failed, reason:%+v", logId, err) + return err + } + } + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + groupInfo, err := service.DescribeTsfStartGroupById(ctx, groupId) + if err != nil { + return tccommon.RetryError(err) + } + if groupInfo == nil { + err = fmt.Errorf("group %s not exists", groupId) + return resource.NonRetryableError(err) + } + if operate == "start" && *groupInfo.GroupStatus == "Running" { + return nil + } + if operate == "stop" && *groupInfo.GroupStatus == "Paused" { + return nil + } + if operate == "start" && *groupInfo.GroupStatus == "Paused" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) + } + if operate == "stop" && *groupInfo.GroupStatus == "Running" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) + } + if *groupInfo.GroupStatus == "Waiting" || *groupInfo.GroupStatus == "Updating" { + return resource.RetryableError(fmt.Errorf("start or stop operation status is %s", *groupInfo.GroupStatus)) + } + err = fmt.Errorf("start or stop operation status is %v, we won't wait for it finish", *groupInfo.GroupStatus) + return resource.NonRetryableError(err) + }) + + if err != nil { + log.Printf("[CRITAL]%s start or stop operation, reason:%s\n ", logId, err.Error()) + return err + } + + } + + return resourceTencentCloudTsfOperateGroupRead(d, meta) +} + +func resourceTencentCloudTsfOperateGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_operate_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/tsf/resource_tc_tsf_operate_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_operate_group_test.go new file mode 100644 index 0000000000..a8aa0ad575 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_operate_group_test.go @@ -0,0 +1,87 @@ +package tsf_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfOperateGroupResource_basic -v +func TestAccTencentCloudTsfOperateGroupResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfOperateGroup, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfOperateGroupExists("tencentcloud_tsf_operate_group.operate_group"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_operate_group.operate_group", "id"), + ), + }, + { + Config: testAccTsfOperateGroupUp, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfOperateGroupExists("tencentcloud_tsf_operate_group.operate_group"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_operate_group.operate_group", "id"), + ), + }, + }, + }) +} + +func testAccCheckTsfOperateGroupExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfStartGroupById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf group %s is not found", rs.Primary.ID) + } + + if *res.GroupStatus != "Running" && *res.GroupStatus != "Paused" { + return fmt.Errorf("tsf group %s start or stop operation failed", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfOperateGroup = ` + +resource "tencentcloud_tsf_operate_group" "operate_group" { + group_id = "group-yrjkln9v" + operate = "stop" +} + +` + +const testAccTsfOperateGroupUp = ` + +resource "tencentcloud_tsf_operate_group" "operate_group" { + group_id = "group-yrjkln9v" + operate = "start" +} + +` diff --git a/tencentcloud/resource_tc_tsf_path_rewrite.go b/tencentcloud/services/tsf/resource_tc_tsf_path_rewrite.go similarity index 77% rename from tencentcloud/resource_tc_tsf_path_rewrite.go rename to tencentcloud/services/tsf/resource_tc_tsf_path_rewrite.go index 859b1815ee..723ea82bab 100644 --- a/tencentcloud/resource_tc_tsf_path_rewrite.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_path_rewrite.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfPathRewrite() *schema.Resource { +func ResourceTencentCloudTsfPathRewrite() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfPathRewriteCreate, Read: resourceTencentCloudTsfPathRewriteRead, @@ -61,10 +64,10 @@ func resourceTencentCloudTsfPathRewrite() *schema.Resource { } func resourceTencentCloudTsfPathRewriteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_path_rewrite.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_path_rewrite.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreatePathRewritesWithDetailRespRequest() @@ -95,10 +98,10 @@ func resourceTencentCloudTsfPathRewriteCreate(d *schema.ResourceData, meta inter pathRewrites = append(pathRewrites, &pathRewrite) request.PathRewrites = pathRewrites - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreatePathRewritesWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreatePathRewritesWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudTsfPathRewriteCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfPathRewriteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_path_rewrite.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_path_rewrite.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} pathRewriteId := d.Id() @@ -167,10 +170,10 @@ func resourceTencentCloudTsfPathRewriteRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudTsfPathRewriteUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_path_rewrite.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_path_rewrite.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyPathRewriteRequest() @@ -210,10 +213,10 @@ func resourceTencentCloudTsfPathRewriteUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyPathRewrite(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyPathRewrite(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -228,13 +231,13 @@ func resourceTencentCloudTsfPathRewriteUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfPathRewriteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_path_rewrite.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_path_rewrite.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} pathRewriteId := d.Id() if err := service.DeleteTsfPathRewriteById(ctx, pathRewriteId); err != nil { diff --git a/tencentcloud/services/tsf/resource_tc_tsf_path_rewrite_test.go b/tencentcloud/services/tsf/resource_tc_tsf_path_rewrite_test.go new file mode 100644 index 0000000000..1dc818c788 --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_path_rewrite_test.go @@ -0,0 +1,107 @@ +package tsf_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfPathRewriteResource_basic -v +func TestAccTencentCloudTsfPathRewriteResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfPathRewriteDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfPathRewrite, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfPathRewritekExists("tencentcloud_tsf_path_rewrite.path_rewrite"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_path_rewrite.path_rewrite", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "gateway_group_id", tcacctest.DefaultTsfGroupId), + resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "regex", "/test"), + resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "replacement", "/tt"), + resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "blocked", "N"), + resource.TestCheckResourceAttr("tencentcloud_tsf_path_rewrite.path_rewrite", "order", "2"), + ), + }, + { + ResourceName: "tencentcloud_tsf_path_rewrite.path_rewrite", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfPathRewriteDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_path_rewrite" { + continue + } + + res, err := service.DescribeTsfPathRewriteById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf PathRewrite %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfPathRewritekExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfPathRewriteById(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf PathRewrite %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfPathRewriteVar = ` +variable "group_id" { + default = "` + tcacctest.DefaultTsfGroupId + `" +} +` + +const testAccTsfPathRewrite = testAccTsfPathRewriteVar + ` + +resource "tencentcloud_tsf_path_rewrite" "path_rewrite" { + gateway_group_id = var.group_id + regex = "/test" + replacement = "/tt" + blocked = "N" + order = 2 +} + +` diff --git a/tencentcloud/services/tsf/resource_tc_tsf_release_api_group.go b/tencentcloud/services/tsf/resource_tc_tsf_release_api_group.go new file mode 100644 index 0000000000..f57b35070e --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_release_api_group.go @@ -0,0 +1,106 @@ +package tsf + +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" + tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudTsfReleaseApiGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudTsfReleaseApiGroupCreate, + Read: resourceTencentCloudTsfReleaseApiGroupRead, + Delete: resourceTencentCloudTsfReleaseApiGroupDelete, + + Schema: map[string]*schema.Schema{ + "group_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "api group Id.", + }, + }, + } +} + +func resourceTencentCloudTsfReleaseApiGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_release_api_group.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = tsf.NewReleaseApiGroupRequest() + response = tsf.NewReleaseApiGroupResponse() + groupId string + ) + if v, ok := d.GetOk("group_id"); ok { + groupId = v.(string) + request.GroupId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ReleaseApiGroup(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 tsf releaseApiGroup failed, reason:%+v", logId, err) + return err + } + + if !*response.Response.Result { + return fmt.Errorf("[CRITAL]%s create tsf releaseApiGroup failed", logId) + } + d.SetId(groupId) + + return resourceTencentCloudTsfReleaseApiGroupRead(d, meta) +} + +func resourceTencentCloudTsfReleaseApiGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_release_api_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + groupId := d.Id() + releaseApiGroup, err := service.DescribeTsfReleaseApiGroupById(ctx, groupId) + if err != nil { + return err + } + + if releaseApiGroup == nil { + d.SetId("") + log.Printf("[WARN]%s resource `TsfReleaseApiGroup` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if releaseApiGroup.GroupId != nil { + _ = d.Set("group_id", releaseApiGroup.GroupId) + } + + return nil +} + +func resourceTencentCloudTsfReleaseApiGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_tsf_release_api_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_tsf_release_api_group_test.go b/tencentcloud/services/tsf/resource_tc_tsf_release_api_group_test.go similarity index 75% rename from tencentcloud/resource_tc_tsf_release_api_group_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_release_api_group_test.go index 81a490d6ba..62402a5a91 100644 --- a/tencentcloud/resource_tc_tsf_release_api_group_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_release_api_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package tsf_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 TestAccTencentCloudTsfReleaseApiGroupResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_tsf_repository.go b/tencentcloud/services/tsf/resource_tc_tsf_repository.go similarity index 77% rename from tencentcloud/resource_tc_tsf_repository.go rename to tencentcloud/services/tsf/resource_tc_tsf_repository.go index 95e2c47530..cfde0108e6 100644 --- a/tencentcloud/resource_tc_tsf_repository.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_repository.go @@ -1,20 +1,22 @@ /* Provides a resource to create a tsf repository -Example Usage +# Example Usage ```hcl -resource "tencentcloud_tsf_repository" "repository" { - repository_name = "" - repository_type = "" - bucket_name = "" - bucket_region = "" - directory = "" - repository_desc = "" -} + + resource "tencentcloud_tsf_repository" "repository" { + repository_name = "" + repository_type = "" + bucket_name = "" + bucket_region = "" + directory = "" + repository_desc = "" + } + ``` -Import +# Import tsf repository can be imported using the id, e.g. @@ -22,20 +24,23 @@ tsf repository can be imported using the id, e.g. terraform import tencentcloud_tsf_repository.repository repository_id ``` */ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfRepository() *schema.Resource { +func ResourceTencentCloudTsfRepository() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfRepositoryCreate, Read: resourceTencentCloudTsfRepositoryRead, @@ -105,10 +110,10 @@ func resourceTencentCloudTsfRepository() *schema.Resource { } func resourceTencentCloudTsfRepositoryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_repository.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_repository.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateRepositoryRequest() @@ -139,10 +144,10 @@ func resourceTencentCloudTsfRepositoryCreate(d *schema.ResourceData, meta interf request.RepositoryDesc = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateRepository(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateRepository(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -161,14 +166,14 @@ func resourceTencentCloudTsfRepositoryCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudTsfRepositoryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_repository.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_repository.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} repositoryId := d.Id() @@ -223,10 +228,10 @@ func resourceTencentCloudTsfRepositoryRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfRepositoryUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_repository.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_repository.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewUpdateRepositoryRequest() @@ -248,10 +253,10 @@ func resourceTencentCloudTsfRepositoryUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().UpdateRepository(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().UpdateRepository(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -266,13 +271,13 @@ func resourceTencentCloudTsfRepositoryUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudTsfRepositoryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_repository.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_repository.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} repositoryId := d.Id() if err := service.DeleteTsfRepositoryById(ctx, repositoryId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_repository_test.go b/tencentcloud/services/tsf/resource_tc_tsf_repository_test.go similarity index 77% rename from tencentcloud/resource_tc_tsf_repository_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_repository_test.go index f60843a382..562e34aca9 100644 --- a/tencentcloud/resource_tc_tsf_repository_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_repository_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package tsf_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNeedFixTsfRepositoryResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTsfRepository, diff --git a/tencentcloud/resource_tc_tsf_task.go b/tencentcloud/services/tsf/resource_tc_tsf_task.go similarity index 91% rename from tencentcloud/resource_tc_tsf_task.go rename to tencentcloud/services/tsf/resource_tc_tsf_task.go index 4a8300c472..f1f2aeb44d 100644 --- a/tencentcloud/resource_tc_tsf_task.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_task.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfTask() *schema.Resource { +func ResourceTencentCloudTsfTask() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfTaskCreate, Read: resourceTencentCloudTsfTaskRead, @@ -211,10 +214,10 @@ func resourceTencentCloudTsfTask() *schema.Resource { } func resourceTencentCloudTsfTaskCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_task.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_task.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateTaskRequest() @@ -313,10 +316,10 @@ func resourceTencentCloudTsfTaskCreate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateTask(request) if e != nil { - return retryError(e) + return tccommon.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,14 +338,14 @@ func resourceTencentCloudTsfTaskCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTsfTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() @@ -485,10 +488,10 @@ func resourceTencentCloudTsfTaskRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudTsfTaskUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_task.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_task.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewModifyTaskRequest() @@ -628,10 +631,10 @@ func resourceTencentCloudTsfTaskUpdate(d *schema.ResourceData, meta interface{}) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().ModifyTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().ModifyTask(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -646,13 +649,13 @@ func resourceTencentCloudTsfTaskUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudTsfTaskDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_task.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() if err := service.DeleteTsfTaskById(ctx, taskId); err != nil { diff --git a/tencentcloud/resource_tc_tsf_task_test.go b/tencentcloud/services/tsf/resource_tc_tsf_task_test.go similarity index 78% rename from tencentcloud/resource_tc_tsf_task_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_task_test.go index 9e31c7f6a5..880c9cbe8c 100644 --- a/tencentcloud/resource_tc_tsf_task_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_task_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ func TestAccTencentCloudTsfTaskResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfTaskDestroy, Steps: []resource.TestStep{ { @@ -28,7 +32,7 @@ func TestAccTencentCloudTsfTaskResource_basic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "execute_type", "unicast"), resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "task_type", "java"), resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "time_out", "60000"), - resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "group_id", defaultTsfGWGroupId), + resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "group_id", tcacctest.DefaultTsfGWGroupId), resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "task_rule.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "task_rule.0.rule_type", "Cron"), resource.TestCheckResourceAttr("tencentcloud_tsf_task.task", "task_rule.0.expression", "0 * 1 * * ? "), @@ -50,9 +54,9 @@ func TestAccTencentCloudTsfTaskResource_basic(t *testing.T) { } func testAccCheckTsfTaskDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_task" { continue @@ -75,15 +79,15 @@ func testAccCheckTsfTaskDestroy(s *terraform.State) error { func testAccCheckTsfTaskExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfTaskById(ctx, rs.Primary.ID) if err != nil { return err @@ -99,7 +103,7 @@ func testAccCheckTsfTaskExists(r string) resource.TestCheckFunc { const testAccTsfTaskVar = ` variable "group_id" { - default = "` + defaultTsfGWGroupId + `" + default = "` + tcacctest.DefaultTsfGWGroupId + `" } ` diff --git a/tencentcloud/resource_tc_tsf_unit_namespace.go b/tencentcloud/services/tsf/resource_tc_tsf_unit_namespace.go similarity index 77% rename from tencentcloud/resource_tc_tsf_unit_namespace.go rename to tencentcloud/services/tsf/resource_tc_tsf_unit_namespace.go index a558f83c03..823bd7b066 100644 --- a/tencentcloud/resource_tc_tsf_unit_namespace.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_unit_namespace.go @@ -1,4 +1,4 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfUnitNamespace() *schema.Resource { +func ResourceTencentCloudTsfUnitNamespace() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfUnitNamespaceCreate, Read: resourceTencentCloudTsfUnitNamespaceRead, @@ -54,10 +57,10 @@ func resourceTencentCloudTsfUnitNamespace() *schema.Resource { } func resourceTencentCloudTsfUnitNamespaceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_namespace.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_namespace.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateUnitNamespacesRequest() @@ -89,10 +92,10 @@ func resourceTencentCloudTsfUnitNamespaceCreate(d *schema.ResourceData, meta int } request.UnitNamespaceList = append(request.UnitNamespaceList, &unitNamespace) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateUnitNamespaces(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateUnitNamespaces(request) if e != nil { - return retryError(e) + return tccommon.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,22 +111,22 @@ func resourceTencentCloudTsfUnitNamespaceCreate(d *schema.ResourceData, meta int return fmt.Errorf("[CRITAL]%s create tsf unitNamespace failed", logId) } - d.SetId(gatewayInstanceId + FILED_SP + namespaceId) + d.SetId(gatewayInstanceId + tccommon.FILED_SP + namespaceId) return resourceTencentCloudTsfUnitNamespaceRead(d, meta) } func resourceTencentCloudTsfUnitNamespaceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_namespace.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_namespace.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{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()) } @@ -160,14 +163,14 @@ func resourceTencentCloudTsfUnitNamespaceRead(d *schema.ResourceData, meta inter } func resourceTencentCloudTsfUnitNamespaceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_namespace.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_namespace.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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := TsfService{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/services/tsf/resource_tc_tsf_unit_namespace_test.go b/tencentcloud/services/tsf/resource_tc_tsf_unit_namespace_test.go new file mode 100644 index 0000000000..925485603a --- /dev/null +++ b/tencentcloud/services/tsf/resource_tc_tsf_unit_namespace_test.go @@ -0,0 +1,123 @@ +package tsf_test + +import ( + "context" + "fmt" + "strings" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +// go test -i; go test -test.run TestAccTencentCloudTsfUnitNamespaceResource_basic -v +func TestAccTencentCloudTsfUnitNamespaceResource_basic(t *testing.T) { + t.Parallel() + + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckTsfUnitNamespaceDestroy, + Steps: []resource.TestStep{ + { + Config: testAccTsfUnitNamespace, + Check: resource.ComposeTestCheckFunc( + testAccCheckTsfUnitNamespaceExists("tencentcloud_tsf_unit_namespace.unit_namespace"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "id"), + resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "gateway_instance_id", tcacctest.DefaultTsfGateway), + resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "namespace_id", tcacctest.DefaultTsfGWNamespaceId), + resource.TestCheckResourceAttr("tencentcloud_tsf_unit_namespace.unit_namespace", "namespace_name", "keep-terraform-cls"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "created_time"), + resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_namespace.unit_namespace", "updated_time"), + ), + }, + { + ResourceName: "tencentcloud_tsf_unit_namespace.unit_namespace", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckTsfUnitNamespaceDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_tsf_unit_namespace" { + continue + } + + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + gatewayInstanceId := ids[0] + namespaceId := ids[1] + + res, err := service.DescribeTsfUnitNamespaceById(ctx, gatewayInstanceId, namespaceId) + if err != nil { + return err + } + + if res != nil { + return fmt.Errorf("tsf unitNamespace %s still exists", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckTsfUnitNamespaceExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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) + } + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) + if len(ids) != 2 { + return fmt.Errorf("id is broken,%s", rs.Primary.ID) + } + gatewayInstanceId := ids[0] + namespaceId := ids[1] + + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + res, err := service.DescribeTsfUnitNamespaceById(ctx, gatewayInstanceId, namespaceId) + if err != nil { + return err + } + + if res == nil { + return fmt.Errorf("tsf unitNamespace %s is not found", rs.Primary.ID) + } + + return nil + } +} + +const testAccTsfUnitNamespaceVar = ` +variable "gateway_instance_id" { + default = "` + tcacctest.DefaultTsfGateway + `" +} + +variable "namespace_id" { + default = "` + tcacctest.DefaultTsfGWNamespaceId + `" +} +` + +const testAccTsfUnitNamespace = testAccTsfUnitNamespaceVar + ` + +resource "tencentcloud_tsf_unit_namespace" "unit_namespace" { + gateway_instance_id = var.gateway_instance_id + namespace_id = var.namespace_id + namespace_name = "keep-terraform-cls" +} + +` diff --git a/tencentcloud/resource_tc_tsf_unit_rule.go b/tencentcloud/services/tsf/resource_tc_tsf_unit_rule.go similarity index 89% rename from tencentcloud/resource_tc_tsf_unit_rule.go rename to tencentcloud/services/tsf/resource_tc_tsf_unit_rule.go index f617046090..13915eb8dd 100644 --- a/tencentcloud/resource_tc_tsf_unit_rule.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_unit_rule.go @@ -1,17 +1,20 @@ -package tencentcloud +package tsf 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" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudTsfUnitRule() *schema.Resource { +func ResourceTencentCloudTsfUnitRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudTsfUnitRuleCreate, Read: resourceTencentCloudTsfUnitRuleRead, @@ -149,10 +152,10 @@ func resourceTencentCloudTsfUnitRule() *schema.Resource { } func resourceTencentCloudTsfUnitRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = tsf.NewCreateUnitRuleWithDetailRespRequest() @@ -228,10 +231,10 @@ func resourceTencentCloudTsfUnitRuleCreate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().CreateUnitRuleWithDetailResp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().CreateUnitRuleWithDetailResp(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -250,14 +253,14 @@ func resourceTencentCloudTsfUnitRuleCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfUnitRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -377,10 +380,10 @@ func resourceTencentCloudTsfUnitRuleRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudTsfUnitRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := tsf.NewUpdateUnitRuleRequest() @@ -465,10 +468,10 @@ func resourceTencentCloudTsfUnitRuleUpdate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTsfClient().UpdateUnitRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTsfClient().UpdateUnitRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -483,13 +486,13 @@ func resourceTencentCloudTsfUnitRuleUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudTsfUnitRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_tsf_unit_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_tsf_unit_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 := TsfService{client: meta.(*TencentCloudClient).apiV3Conn} + service := TsfService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteTsfUnitRuleById(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_tsf_unit_rule_test.go b/tencentcloud/services/tsf/resource_tc_tsf_unit_rule_test.go similarity index 78% rename from tencentcloud/resource_tc_tsf_unit_rule_test.go rename to tencentcloud/services/tsf/resource_tc_tsf_unit_rule_test.go index a74d79e7f2..a0dd8158b4 100644 --- a/tencentcloud/resource_tc_tsf_unit_rule_test.go +++ b/tencentcloud/services/tsf/resource_tc_tsf_unit_rule_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package tsf_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctsf "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tsf" + "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" @@ -15,8 +19,8 @@ func TestAccTencentCloudTsfUnitRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_TSF) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_TSF) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckTsfUnitRuleDestroy, Steps: []resource.TestStep{ { @@ -24,11 +28,11 @@ func TestAccTencentCloudTsfUnitRuleResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTsfUnitRuleExists("tencentcloud_tsf_unit_rule.unit_rule"), resource.TestCheckResourceAttrSet("tencentcloud_tsf_unit_rule.unit_rule", "id"), - resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "gateway_instance_id", defaultTsfGateway), + resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "gateway_instance_id", tcacctest.DefaultTsfGateway), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "description", "terraform-desc"), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.#", "1"), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.relationship", "AND"), - resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.dest_namespace_id", defaultTsfDestNamespaceId), + resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.dest_namespace_id", tcacctest.DefaultTsfDestNamespaceId), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.dest_namespace_name", "KEEP-terraform-请勿删除_default"), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.name", "Rule1"), resource.TestCheckResourceAttr("tencentcloud_tsf_unit_rule.unit_rule", "unit_rule_item_list.0.description", "rule1-desc"), @@ -49,9 +53,9 @@ func TestAccTencentCloudTsfUnitRuleResource_basic(t *testing.T) { } func testAccCheckTsfUnitRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_tsf_unit_rule" { continue @@ -75,15 +79,15 @@ func testAccCheckTsfUnitRuleDestroy(s *terraform.State) error { func testAccCheckTsfUnitRuleExists(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 := TsfService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svctsf.NewTsfService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.DescribeTsfUnitRuleById(ctx, rs.Primary.ID) if err != nil { return err @@ -99,10 +103,10 @@ func testAccCheckTsfUnitRuleExists(r string) resource.TestCheckFunc { const testAccTsfUnitRuleVar = ` variable "gateway_instance_id" { - default = "` + defaultTsfGateway + `" + default = "` + tcacctest.DefaultTsfGateway + `" } variable "dest_namespace_id" { - default = "` + defaultTsfDestNamespaceId + `" + default = "` + tcacctest.DefaultTsfDestNamespaceId + `" } ` diff --git a/tencentcloud/service_tencentcloud_tsf.go b/tencentcloud/services/tsf/service_tencentcloud_tsf.go similarity index 96% rename from tencentcloud/service_tencentcloud_tsf.go rename to tencentcloud/services/tsf/service_tencentcloud_tsf.go index 7d0c441e23..1fc1dd78e6 100644 --- a/tencentcloud/service_tencentcloud_tsf.go +++ b/tencentcloud/services/tsf/service_tencentcloud_tsf.go @@ -1,23 +1,30 @@ -package tencentcloud +package tsf import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" tsf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf/v20180326" + "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 NewTsfService(client *connectivity.TencentCloudClient) TsfService { + return TsfService{client: client} +} + type TsfService struct { client *connectivity.TencentCloudClient } func (me *TsfService) DescribeTsfClusterById(ctx context.Context, clusterId string) (cluster *tsf.ClusterV2, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeClustersRequest() request.ClusterIdList = []*string{&clusterId} @@ -64,7 +71,7 @@ func (me *TsfService) DescribeTsfClusterById(ctx context.Context, clusterId stri } func (me *TsfService) DeleteTsfClusterById(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteClusterRequest() request.ClusterId = &clusterId @@ -89,7 +96,7 @@ func (me *TsfService) DeleteTsfClusterById(ctx context.Context, clusterId string func (me *TsfService) TsfClusterStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, err := me.DescribeTsfClusterById(ctx, clusterId) @@ -102,7 +109,7 @@ func (me *TsfService) TsfClusterStateRefreshFunc(clusterId string, failStates [] } func (me *TsfService) DescribeTsfApplicationConfigById(ctx context.Context, configId, configName string) (applicationConfig *tsf.Config, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeConfigsRequest() request.ConfigId = &configId @@ -145,7 +152,7 @@ func (me *TsfService) DescribeTsfApplicationConfigById(ctx context.Context, conf } func (me *TsfService) DeleteTsfApplicationConfigById(ctx context.Context, configId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteConfigRequest() request.ConfigId = &configId @@ -169,7 +176,7 @@ func (me *TsfService) DeleteTsfApplicationConfigById(ctx context.Context, config } func (me *TsfService) DescribeTsfMicroserviceById(ctx context.Context, namespaceId, microserviceId, microserviceName string) (microservice *tsf.Microservice, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeMicroservicesRequest() request.NamespaceId = &namespaceId @@ -208,7 +215,7 @@ func (me *TsfService) DescribeTsfMicroserviceById(ctx context.Context, namespace } func (me *TsfService) DeleteTsfMicroserviceById(ctx context.Context, microserviceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteMicroserviceRequest() request.MicroserviceId = µserviceId @@ -232,7 +239,7 @@ func (me *TsfService) DeleteTsfMicroserviceById(ctx context.Context, microservic } func (me *TsfService) DescribeTsfApiGroupById(ctx context.Context, groupId string) (apiGroup *tsf.ApiGroupInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeApiGroupRequest() request.GroupId = &groupId @@ -261,7 +268,7 @@ func (me *TsfService) DescribeTsfApiGroupById(ctx context.Context, groupId strin } func (me *TsfService) DeleteTsfApiGroupById(ctx context.Context, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteApiGroupRequest() request.GroupId = &groupId @@ -285,7 +292,7 @@ func (me *TsfService) DeleteTsfApiGroupById(ctx context.Context, groupId string) } func (me *TsfService) DescribeTsfApiRateLimitRuleById(ctx context.Context, apiId, ruleId string) (apiRateLimitRule *tsf.ApiRateLimitRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeApiRateLimitRulesRequest() request.ApiId = &apiId @@ -320,7 +327,7 @@ func (me *TsfService) DescribeTsfApiRateLimitRuleById(ctx context.Context, apiId } func (me *TsfService) DeleteTsfApiRateLimitRuleById(ctx context.Context, apiId, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteApiRateLimitRuleRequest() request.RuleId = &ruleId @@ -344,7 +351,7 @@ func (me *TsfService) DeleteTsfApiRateLimitRuleById(ctx context.Context, apiId, } func (me *TsfService) DescribeTsfConfigTemplateById(ctx context.Context, templateId string) (configTemplate *tsf.ConfigTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeConfigTemplateRequest() request.ConfigTemplateId = &templateId @@ -373,7 +380,7 @@ func (me *TsfService) DescribeTsfConfigTemplateById(ctx context.Context, templat } func (me *TsfService) DeleteTsfConfigTemplateById(ctx context.Context, templateId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteConfigTemplateRequest() request.ConfigTemplateId = &templateId @@ -397,7 +404,7 @@ func (me *TsfService) DeleteTsfConfigTemplateById(ctx context.Context, templateI } func (me *TsfService) DescribeTsfLaneById(ctx context.Context, laneId string) (lane *tsf.LaneInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeLanesRequest() request.LaneIdList = []*string{&laneId} @@ -426,7 +433,7 @@ func (me *TsfService) DescribeTsfLaneById(ctx context.Context, laneId string) (l } func (me *TsfService) DeleteTsfLaneById(ctx context.Context, laneId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteLaneRequest() request.LaneId = &laneId @@ -450,7 +457,7 @@ func (me *TsfService) DeleteTsfLaneById(ctx context.Context, laneId string) (err } func (me *TsfService) DescribeTsfLaneRuleById(ctx context.Context, ruleId string) (laneRule *tsf.LaneRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeLaneRulesRequest() request.RuleId = &ruleId @@ -481,7 +488,7 @@ func (me *TsfService) DescribeTsfLaneRuleById(ctx context.Context, ruleId string } func (me *TsfService) DeleteTsfLaneRuleById(ctx context.Context, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteLaneRuleRequest() request.RuleId = &ruleId @@ -505,7 +512,7 @@ func (me *TsfService) DeleteTsfLaneRuleById(ctx context.Context, ruleId string) } func (me *TsfService) DescribeTsfNamespaceById(ctx context.Context, namespaceId string) (namespace *tsf.Namespace, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeSimpleNamespacesRequest() request.NamespaceId = &namespaceId @@ -534,7 +541,7 @@ func (me *TsfService) DescribeTsfNamespaceById(ctx context.Context, namespaceId } func (me *TsfService) DeleteTsfNamespaceById(ctx context.Context, namespaceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteNamespaceRequest() request.NamespaceId = &namespaceId @@ -557,7 +564,7 @@ func (me *TsfService) DeleteTsfNamespaceById(ctx context.Context, namespaceId st return } func (me *TsfService) DescribeTsfPathRewriteById(ctx context.Context, pathRewriteId string) (pathRewrite *tsf.PathRewrite, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribePathRewriteRequest() request.PathRewriteId = &pathRewriteId @@ -586,7 +593,7 @@ func (me *TsfService) DescribeTsfPathRewriteById(ctx context.Context, pathRewrit } func (me *TsfService) DeleteTsfPathRewriteById(ctx context.Context, pathRewriteId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeletePathRewritesRequest() request.PathRewriteIds = []*string{&pathRewriteId} @@ -610,7 +617,7 @@ func (me *TsfService) DeleteTsfPathRewriteById(ctx context.Context, pathRewriteI } func (me *TsfService) DescribeTsfRepositoryById(ctx context.Context, repositoryId string) (repository *tsf.RepositoryInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeRepositoryRequest() request.RepositoryId = &repositoryId @@ -639,7 +646,7 @@ func (me *TsfService) DescribeTsfRepositoryById(ctx context.Context, repositoryI } func (me *TsfService) DeleteTsfRepositoryById(ctx context.Context, repositoryId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteRepositoryRequest() request.RepositoryId = &repositoryId @@ -663,7 +670,7 @@ func (me *TsfService) DeleteTsfRepositoryById(ctx context.Context, repositoryId } func (me *TsfService) DescribeTsfTaskById(ctx context.Context, taskId string) (task *tsf.TaskRecord, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeTaskDetailRequest() request.TaskId = &taskId @@ -692,7 +699,7 @@ func (me *TsfService) DescribeTsfTaskById(ctx context.Context, taskId string) (t } func (me *TsfService) DeleteTsfTaskById(ctx context.Context, taskId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteTaskRequest() request.TaskId = &taskId @@ -716,7 +723,7 @@ func (me *TsfService) DeleteTsfTaskById(ctx context.Context, taskId string) (err } func (me *TsfService) DescribeTsfUnitRuleById(ctx context.Context, id string) (unitRule *tsf.UnitRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeUnitRuleRequest() request.Id = &id @@ -745,7 +752,7 @@ func (me *TsfService) DescribeTsfUnitRuleById(ctx context.Context, id string) (u } func (me *TsfService) DeleteTsfUnitRuleById(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteUnitRuleRequest() request.Id = &id @@ -768,7 +775,7 @@ func (me *TsfService) DeleteTsfUnitRuleById(ctx context.Context, id string) (err return } func (me *TsfService) DescribeTsfContainGroupById(ctx context.Context, groupId string) (containGroup *tsf.ContainerGroupDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeContainerGroupDetailRequest() request.GroupId = &groupId @@ -797,7 +804,7 @@ func (me *TsfService) DescribeTsfContainGroupById(ctx context.Context, groupId s } func (me *TsfService) DeleteTsfContainGroupById(ctx context.Context, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteContainerGroupRequest() request.GroupId = &groupId @@ -821,7 +828,7 @@ func (me *TsfService) DeleteTsfContainGroupById(ctx context.Context, groupId str } func (me *TsfService) DescribeTsfApplicationReleaseConfigById(ctx context.Context, configId string, groupId string) (applicationReleaseConfig *tsf.ConfigRelease, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeConfigReleasesRequest() request.ConfigId = &configId @@ -851,7 +858,7 @@ func (me *TsfService) DescribeTsfApplicationReleaseConfigById(ctx context.Contex } func (me *TsfService) DeleteTsfApplicationReleaseConfigById(ctx context.Context, configReleaseId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewRevocationConfigRequest() request.ConfigReleaseId = &configReleaseId @@ -875,7 +882,7 @@ func (me *TsfService) DeleteTsfApplicationReleaseConfigById(ctx context.Context, } func (me *TsfService) DescribeTsfGroupById(ctx context.Context, groupId string) (group *tsf.VmGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeGroupRequest() request.GroupId = &groupId @@ -904,7 +911,7 @@ func (me *TsfService) DescribeTsfGroupById(ctx context.Context, groupId string) } func (me *TsfService) DeleteTsfGroupById(ctx context.Context, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteGroupRequest() request.GroupId = &groupId @@ -928,7 +935,7 @@ func (me *TsfService) DeleteTsfGroupById(ctx context.Context, groupId string) (e } func (me *TsfService) DescribeTsfApplicationById(ctx context.Context, applicationId string) (application *tsf.ApplicationForPage, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeApplicationRequest() request.ApplicationId = &applicationId @@ -957,7 +964,7 @@ func (me *TsfService) DescribeTsfApplicationById(ctx context.Context, applicatio } func (me *TsfService) DeleteTsfApplicationById(ctx context.Context, applicationId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteApplicationRequest() request.ApplicationId = &applicationId @@ -981,7 +988,7 @@ func (me *TsfService) DeleteTsfApplicationById(ctx context.Context, applicationI } func (me *TsfService) DescribeTsfApplicationFileConfigReleaseById(ctx context.Context, configId string, groupId string) (applicationFileConfigRelease *tsf.FileConfigRelease, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeFileConfigReleasesRequest() request.ConfigId = &configId @@ -1011,7 +1018,7 @@ func (me *TsfService) DescribeTsfApplicationFileConfigReleaseById(ctx context.Co } func (me *TsfService) DeleteTsfApplicationFileConfigReleaseById(ctx context.Context, configId string, groupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewRevokeFileConfigRequest() @@ -1042,7 +1049,7 @@ func (me *TsfService) DeleteTsfApplicationFileConfigReleaseById(ctx context.Cont } func (me *TsfService) DescribeTsfApplicationPublicConfigById(ctx context.Context, configId string) (applicationPublicConfig *tsf.Config, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribePublicConfigRequest() request.ConfigId = &configId @@ -1071,7 +1078,7 @@ func (me *TsfService) DescribeTsfApplicationPublicConfigById(ctx context.Context } func (me *TsfService) DeleteTsfApplicationPublicConfigById(ctx context.Context, configId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeletePublicConfigRequest() request.ConfigId = &configId @@ -1095,7 +1102,7 @@ func (me *TsfService) DeleteTsfApplicationPublicConfigById(ctx context.Context, } func (me *TsfService) DescribeTsfApplicationPublicConfigReleaseById(ctx context.Context, configId, namespaceId string) (applicationPublicConfigRelease *tsf.ConfigRelease, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribePublicConfigReleasesRequest() request.ConfigId = &configId @@ -1125,7 +1132,7 @@ func (me *TsfService) DescribeTsfApplicationPublicConfigReleaseById(ctx context. } func (me *TsfService) DeleteTsfApplicationPublicConfigReleaseById(ctx context.Context, configId, namespaceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewRevocationPublicConfigRequest() @@ -1156,7 +1163,7 @@ func (me *TsfService) DeleteTsfApplicationPublicConfigReleaseById(ctx context.Co } func (me *TsfService) DescribeTsfInstancesAttachmentById(ctx context.Context, clusterId string, instanceId string) (instance *tsf.Instance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeClusterInstancesRequest() request.ClusterId = &clusterId @@ -1203,7 +1210,7 @@ func (me *TsfService) DescribeTsfInstancesAttachmentById(ctx context.Context, cl } func (me *TsfService) DeleteTsfInstancesAttachmentById(ctx context.Context, clusterId string, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewRemoveInstancesRequest() request.ClusterId = &clusterId @@ -1229,7 +1236,7 @@ func (me *TsfService) DeleteTsfInstancesAttachmentById(ctx context.Context, clus func (me *TsfService) DescribeTsfApplicationByFilter(ctx context.Context, param map[string]interface{}) (application *tsf.TsfPageApplication, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeApplicationsRequest() ) @@ -1293,7 +1300,7 @@ func (me *TsfService) DescribeTsfApplicationByFilter(ctx context.Context, param } func (me *TsfService) DescribeTsfApplicationConfigByFilter(ctx context.Context, param map[string]interface{}) (applicationConfig *tsf.TsfPageConfig, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeConfigsRequest() @@ -1362,7 +1369,7 @@ func (me *TsfService) DescribeTsfApplicationConfigByFilter(ctx context.Context, func (me *TsfService) DescribeTsfApplicationFileConfigByFilter(ctx context.Context, param map[string]interface{}) (applicationFileConfig *tsf.TsfPageFileConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeFileConfigsRequest() ) @@ -1430,7 +1437,7 @@ func (me *TsfService) DescribeTsfApplicationFileConfigByFilter(ctx context.Conte func (me *TsfService) DescribeTsfApplicationPublicConfigByFilter(ctx context.Context, param map[string]interface{}) (applicationPublicConfig *tsf.TsfPageConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribePublicConfigsRequest() ) @@ -1495,7 +1502,7 @@ func (me *TsfService) DescribeTsfApplicationPublicConfigByFilter(ctx context.Con func (me *TsfService) DescribeTsfClusterByFilter(ctx context.Context, param map[string]interface{}) (cluster *tsf.TsfPageCluster, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeSimpleClustersRequest() ) @@ -1560,7 +1567,7 @@ func (me *TsfService) DescribeTsfClusterByFilter(ctx context.Context, param map[ func (me *TsfService) DescribeTsfMicroserviceByFilter(ctx context.Context, param map[string]interface{}) (microservice *tsf.TsfPageMicroservice, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeMicroservicesRequest() ) @@ -1625,7 +1632,7 @@ func (me *TsfService) DescribeTsfMicroserviceByFilter(ctx context.Context, param func (me *TsfService) DescribeTsfUnitRulesByFilter(ctx context.Context, param map[string]interface{}) (unitRule *tsf.TsfPageUnitRuleV2, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeUnitRulesV2Request() ) @@ -1684,7 +1691,7 @@ func (me *TsfService) DescribeTsfUnitRulesByFilter(ctx context.Context, param ma func (me *TsfService) DescribeTsfConfigSummaryByFilter(ctx context.Context, param map[string]interface{}) (configSummary *tsf.TsfPageConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeConfigSummaryRequest() ) @@ -1758,7 +1765,7 @@ func (me *TsfService) DescribeTsfConfigSummaryByFilter(ctx context.Context, para func (me *TsfService) DescribeTsfDeliveryConfigByGroupIdByFilter(ctx context.Context, param map[string]interface{}) (deliveryConfigByGroupID *tsf.SimpleKafkaDeliveryConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeDeliveryConfigByGroupIdRequest() ) @@ -1793,7 +1800,7 @@ func (me *TsfService) DescribeTsfDeliveryConfigByGroupIdByFilter(ctx context.Con func (me *TsfService) DescribeTsfDeliveryConfigsByFilter(ctx context.Context, param map[string]interface{}) (deliveryConfigs *tsf.DeliveryConfigBindGroups, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeDeliveryConfigsRequest() ) @@ -1850,7 +1857,7 @@ func (me *TsfService) DescribeTsfDeliveryConfigsByFilter(ctx context.Context, pa func (me *TsfService) DescribeTsfPublicConfigSummaryByFilter(ctx context.Context, param map[string]interface{}) (publicConfigSummary *tsf.TsfPageConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribePublicConfigSummaryRequest() ) @@ -1921,7 +1928,7 @@ func (me *TsfService) DescribeTsfPublicConfigSummaryByFilter(ctx context.Context func (me *TsfService) DescribeTsfApiGroupByFilter(ctx context.Context, param map[string]interface{}) (apiGroupInfo *tsf.TsfPageApiGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeApiGroupsRequest() ) @@ -1995,7 +2002,7 @@ func (me *TsfService) DescribeTsfApiGroupByFilter(ctx context.Context, param map func (me *TsfService) DescribeTsfApplicationAttributeByFilter(ctx context.Context, param map[string]interface{}) (applicationAttribute *tsf.ApplicationAttribute, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeApplicationAttributeRequest() ) @@ -2030,7 +2037,7 @@ func (me *TsfService) DescribeTsfApplicationAttributeByFilter(ctx context.Contex func (me *TsfService) DescribeTsfBusinessLogConfigsByFilter(ctx context.Context, param map[string]interface{}) (businessLogConfigs *tsf.TsfPageBusinessLogConfig, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeBusinessLogConfigsRequest() ) @@ -2092,7 +2099,7 @@ func (me *TsfService) DescribeTsfBusinessLogConfigsByFilter(ctx context.Context, func (me *TsfService) DescribeTsfApiDetailByFilter(ctx context.Context, param map[string]interface{}) (apiDetail *tsf.ApiDetailResponse, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeApiDetailRequest() ) @@ -2139,7 +2146,7 @@ func (me *TsfService) DescribeTsfApiDetailByFilter(ctx context.Context, param ma func (me *TsfService) DescribeTsfMicroserviceApiVersionByFilter(ctx context.Context, param map[string]interface{}) (microserviceApiVersion []*tsf.ApiVersionArray, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeApiVersionsRequest() ) @@ -2179,7 +2186,7 @@ func (me *TsfService) DescribeTsfMicroserviceApiVersionByFilter(ctx context.Cont } func (me *TsfService) DescribeTsfBindApiGroupById(ctx context.Context, groupId string, gatewayDeployGroupId string) (bindApiGroup *tsf.GatewayDeployGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeGroupBindedGatewaysRequest() request.GroupId = &groupId @@ -2228,7 +2235,7 @@ func (me *TsfService) DescribeTsfBindApiGroupById(ctx context.Context, groupId s } func (me *TsfService) DeleteTsfBindApiGroupById(ctx context.Context, groupId string, gatewayDeployGroupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewUnbindApiGroupRequest() request.GroupGatewayList = []*tsf.GatewayGroupIds{ @@ -2258,7 +2265,7 @@ func (me *TsfService) DeleteTsfBindApiGroupById(ctx context.Context, groupId str func (me *TsfService) DescribeTsfRepositoryByFilter(ctx context.Context, param map[string]interface{}) (repositoryList *tsf.RepositoryList, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeRepositoriesRequest() ) @@ -2316,7 +2323,7 @@ func (me *TsfService) DescribeTsfRepositoryByFilter(ctx context.Context, param m } func (me *TsfService) DescribeTsfApplicationFileConfigById(ctx context.Context, configId string) (applicationFileConfig *tsf.FileConfig, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeFileConfigsRequest() request.ConfigId = &configId @@ -2345,7 +2352,7 @@ func (me *TsfService) DescribeTsfApplicationFileConfigById(ctx context.Context, } func (me *TsfService) DeleteTsfApplicationFileConfigById(ctx context.Context, configId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteFileConfigRequest() request.ConfigId = &configId @@ -2369,7 +2376,7 @@ func (me *TsfService) DeleteTsfApplicationFileConfigById(ctx context.Context, co } func (me *TsfService) DescribeTsfEnableUnitRuleById(ctx context.Context, id string) (enableUnitRuleAttachment *tsf.UnitRule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeUnitRuleRequest() request.Id = &id @@ -2399,7 +2406,7 @@ func (me *TsfService) DescribeTsfEnableUnitRuleById(ctx context.Context, id stri func (me *TsfService) DescribeTsfDescribePodInstancesByFilter(ctx context.Context, param map[string]interface{}) (describePodInstances *tsf.GroupPodResult, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribePodInstancesRequest() ) @@ -2456,7 +2463,7 @@ func (me *TsfService) DescribeTsfDescribePodInstancesByFilter(ctx context.Contex func (me *TsfService) DescribeTsfGatewayAllGroupApisByFilter(ctx context.Context, param map[string]interface{}) (gatewayAllGroupApis *tsf.GatewayVo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeGatewayAllGroupApisRequest() ) @@ -2494,7 +2501,7 @@ func (me *TsfService) DescribeTsfGatewayAllGroupApisByFilter(ctx context.Context func (me *TsfService) DescribeTsfGroupGatewaysByFilter(ctx context.Context, param map[string]interface{}) (groupGateways *tsf.TsfPageApiGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeGroupGatewaysRequest() ) @@ -2551,7 +2558,7 @@ func (me *TsfService) DescribeTsfGroupGatewaysByFilter(ctx context.Context, para func (me *TsfService) DescribeTsfGroupInstancesByFilter(ctx context.Context, param map[string]interface{}) (groupInstances *tsf.TsfPageInstance, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeGroupInstancesRequest() ) @@ -2614,7 +2621,7 @@ func (me *TsfService) DescribeTsfGroupInstancesByFilter(ctx context.Context, par func (me *TsfService) DescribeTsfUsableUnitNamespacesByFilter(ctx context.Context, param map[string]interface{}) (usableUnitNamespaces *tsf.TsfPageUnitNamespace, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeUsableUnitNamespacesRequest() ) @@ -2668,7 +2675,7 @@ func (me *TsfService) DescribeTsfUsableUnitNamespacesByFilter(ctx context.Contex func (me *TsfService) DescribeTsfGroupConfigReleaseByFilter(ctx context.Context, param map[string]interface{}) (groupConfigRelease *tsf.GroupRelease, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeGroupReleaseRequest() ) @@ -2701,7 +2708,7 @@ func (me *TsfService) DescribeTsfGroupConfigReleaseByFilter(ctx context.Context, } func (me *TsfService) DescribeTsfDeployVmGroupById(ctx context.Context, groupId string) (deployVmGroup *tsf.VmGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeGroupRequest() request.GroupId = &groupId @@ -2730,7 +2737,7 @@ func (me *TsfService) DescribeTsfDeployVmGroupById(ctx context.Context, groupId } func (me *TsfService) DescribeTsfReleaseApiGroupById(ctx context.Context, groupId string) (releaseApiGroup *tsf.ApiGroupInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeApiGroupRequest() request.GroupId = &groupId @@ -2760,7 +2767,7 @@ func (me *TsfService) DescribeTsfReleaseApiGroupById(ctx context.Context, groupI } func (me *TsfService) DescribeTsfStartContainerGroupById(ctx context.Context, groupId string) (startContainerGroup *tsf.ContainerGroupOther, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeContainerGroupAttributeRequest() request.GroupId = &groupId @@ -2790,7 +2797,7 @@ func (me *TsfService) DescribeTsfStartContainerGroupById(ctx context.Context, gr } func (me *TsfService) DescribeTsfStartGroupById(ctx context.Context, groupId string) (startGroup *tsf.VmGroupOther, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeGroupAttributeRequest() request.GroupId = &groupId @@ -2819,7 +2826,7 @@ func (me *TsfService) DescribeTsfStartGroupById(ctx context.Context, groupId str } func (me *TsfService) DescribeTsfUnitNamespaceById(ctx context.Context, gatewayInstanceId, namespaceId string) (unitNamespace *tsf.UnitNamespace, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeUnitNamespacesRequest() request.GatewayInstanceId = &gatewayInstanceId @@ -2854,7 +2861,7 @@ func (me *TsfService) DescribeTsfUnitNamespaceById(ctx context.Context, gatewayI } func (me *TsfService) DeleteTsfUnitNamespaceById(ctx context.Context, gatewayInstanceId, unitNamespace string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDeleteUnitNamespacesRequest() request.GatewayInstanceId = &gatewayInstanceId @@ -2879,7 +2886,7 @@ func (me *TsfService) DeleteTsfUnitNamespaceById(ctx context.Context, gatewayIns } func (me *TsfService) DescribeTsfDeployContainerGroupById(ctx context.Context, groupId string) (deployContainerGroup *tsf.ContainerGroupDeploy, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := tsf.NewDescribeContainerGroupDeployInfoRequest() request.GroupId = &groupId @@ -2909,7 +2916,7 @@ func (me *TsfService) DescribeTsfDeployContainerGroupById(ctx context.Context, g func (me *TsfService) DescribeTsfDescriptionContainerGroupByFilter(ctx context.Context, param map[string]interface{}) (descriptionContainerGroup *tsf.ContainGroupResult, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeContainerGroupsRequest() ) @@ -2978,7 +2985,7 @@ func (me *TsfService) DescribeTsfDescriptionContainerGroupByFilter(ctx context.C func (me *TsfService) DescribeTsfGroupsByFilter(ctx context.Context, param map[string]interface{}) (groups *tsf.TsfPageVmGroup, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeGroupsRequest() ) @@ -3056,7 +3063,7 @@ func (me *TsfService) DescribeTsfGroupsByFilter(ctx context.Context, param map[s func (me *TsfService) DescribeTsfMsApiListByFilter(ctx context.Context, param map[string]interface{}) (msApiList *tsf.TsfApiListResponse, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = tsf.NewDescribeMsApiListRequest() ) diff --git a/tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates.go b/tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates.go similarity index 95% rename from tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates.go rename to tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates.go index 54d8f06144..fd864ecdcc 100644 --- a/tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates.go +++ b/tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod import ( "context" @@ -6,11 +6,14 @@ import ( "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" ) -func dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates() *schema.Resource { +func DataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplatesRead, @@ -186,10 +189,10 @@ func dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates() *schema.Resour } func dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vod_adaptive_dynamic_streaming_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vod_adaptive_dynamic_streaming_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) filter := make(map[string]interface{}) if v, ok := d.GetOk("definition"); ok { @@ -203,7 +206,7 @@ func dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplatesRead(d *schema.Re } vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } templates, err := vodService.DescribeAdaptiveDynamicStreamingTemplatesByFilter(ctx, filter) if err != nil { @@ -264,7 +267,7 @@ func dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplatesRead(d *schema.Re } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), templatesList); err != nil { + if err := tccommon.WriteToFile(output.(string), templatesList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err } diff --git a/tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go b/tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go similarity index 93% rename from tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go rename to tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go index 09b74d8643..8af14a0d20 100644 --- a/tencentcloud/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go +++ b/tencentcloud/services/vod/data_source_tc_vod_adaptive_dynamic_streaming_templates_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vod_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates(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: testAccVodAdaptiveDynamicStreamingTemplates, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vod_adaptive_dynamic_streaming_templates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vod_adaptive_dynamic_streaming_templates.foo"), resource.TestCheckResourceAttr("data.tencentcloud_vod_adaptive_dynamic_streaming_templates.foo", "template_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_adaptive_dynamic_streaming_templates.foo", "template_list.0.format", "HLS"), resource.TestCheckResourceAttr("data.tencentcloud_vod_adaptive_dynamic_streaming_templates.foo", "template_list.0.name", "tf-adaptive"), diff --git a/tencentcloud/data_source_tc_vod_image_sprite_templates.go b/tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates.go similarity index 93% rename from tencentcloud/data_source_tc_vod_image_sprite_templates.go rename to tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates.go index 6bad509308..299c28a8ce 100644 --- a/tencentcloud/data_source_tc_vod_image_sprite_templates.go +++ b/tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates.go @@ -1,15 +1,18 @@ -package tencentcloud +package vod import ( "context" "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" ) -func dataSourceTencentCloudVodImageSpriteTemplates() *schema.Resource { +func DataSourceTencentCloudVodImageSpriteTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVodImageSpriteTemplatesRead, @@ -118,10 +121,10 @@ func dataSourceTencentCloudVodImageSpriteTemplates() *schema.Resource { } func dataSourceTencentCloudVodImageSpriteTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vod_image_sprite_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vod_image_sprite_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) filter := make(map[string]interface{}) if v, ok := d.GetOk("definition"); ok { @@ -135,7 +138,7 @@ func dataSourceTencentCloudVodImageSpriteTemplatesRead(d *schema.ResourceData, m } vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } templates, err := vodService.DescribeImageSpriteTemplatesByFilter(ctx, filter) if err != nil { @@ -171,7 +174,7 @@ func dataSourceTencentCloudVodImageSpriteTemplatesRead(d *schema.ResourceData, m } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), templatesList); err != nil { + if err := tccommon.WriteToFile(output.(string), templatesList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err } diff --git a/tencentcloud/data_source_tc_vod_image_sprite_templates_test.go b/tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates_test.go similarity index 87% rename from tencentcloud/data_source_tc_vod_image_sprite_templates_test.go rename to tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates_test.go index 079c0552e0..f7d3b00fda 100644 --- a/tencentcloud/data_source_tc_vod_image_sprite_templates_test.go +++ b/tencentcloud/services/vod/data_source_tc_vod_image_sprite_templates_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vod_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVodImageSpriteTemplates(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: testAccVodImageSpriteTemplates, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vod_image_sprite_templates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vod_image_sprite_templates.foo"), resource.TestCheckResourceAttr("data.tencentcloud_vod_image_sprite_templates.foo", "template_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_image_sprite_templates.foo", "template_list.0.sample_type", "Percent"), resource.TestCheckResourceAttr("data.tencentcloud_vod_image_sprite_templates.foo", "template_list.0.sample_interval", "10"), diff --git a/tencentcloud/data_source_tc_vod_procedure_templates.go b/tencentcloud/services/vod/data_source_tc_vod_procedure_templates.go similarity index 97% rename from tencentcloud/data_source_tc_vod_procedure_templates.go rename to tencentcloud/services/vod/data_source_tc_vod_procedure_templates.go index 5b52bfe6e6..21c4494f09 100644 --- a/tencentcloud/data_source_tc_vod_procedure_templates.go +++ b/tencentcloud/services/vod/data_source_tc_vod_procedure_templates.go @@ -1,15 +1,18 @@ -package tencentcloud +package vod import ( "context" "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" ) -func dataSourceTencentCloudVodProcedureTemplates() *schema.Resource { +func DataSourceTencentCloudVodProcedureTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVodProcedureTemplatesRead, @@ -282,10 +285,10 @@ func dataSourceTencentCloudVodProcedureTemplates() *schema.Resource { } func dataSourceTencentCloudVodProcedureTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vod_procedure_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vod_procedure_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) filter := make(map[string]interface{}) if v, ok := d.GetOk("name"); ok { @@ -299,7 +302,7 @@ func dataSourceTencentCloudVodProcedureTemplatesRead(d *schema.ResourceData, met } vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } templates, err := vodService.DescribeProcedureTemplatesByFilter(ctx, filter) if err != nil { @@ -514,7 +517,7 @@ func dataSourceTencentCloudVodProcedureTemplatesRead(d *schema.ResourceData, met } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), templatesList); err != nil { + if err := tccommon.WriteToFile(output.(string), templatesList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err } diff --git a/tencentcloud/data_source_tc_vod_procedure_templates_test.go b/tencentcloud/services/vod/data_source_tc_vod_procedure_templates_test.go similarity index 91% rename from tencentcloud/data_source_tc_vod_procedure_templates_test.go rename to tencentcloud/services/vod/data_source_tc_vod_procedure_templates_test.go index 025313acc4..398b74b23c 100644 --- a/tencentcloud/data_source_tc_vod_procedure_templates_test.go +++ b/tencentcloud/services/vod/data_source_tc_vod_procedure_templates_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vod_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVodProcedureTemplates(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: testAccVodProcedureTemplates, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vod_procedure_templates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vod_procedure_templates.foo"), resource.TestCheckResourceAttr("data.tencentcloud_vod_procedure_templates.foo", "template_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_procedure_templates.foo", "template_list.0.name", "tf-procedure1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_procedure_templates.foo", "template_list.0.comment", "test"), diff --git a/tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates.go b/tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates.go similarity index 92% rename from tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates.go rename to tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates.go index 763dd14c23..5f90ba840e 100644 --- a/tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates.go +++ b/tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates.go @@ -1,15 +1,18 @@ -package tencentcloud +package vod import ( "context" "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" ) -func dataSourceTencentCloudVodSnapshotByTimeOffsetTemplates() *schema.Resource { +func DataSourceTencentCloudVodSnapshotByTimeOffsetTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVodSnapshotByTimeOffsetTemplatesRead, @@ -103,10 +106,10 @@ func dataSourceTencentCloudVodSnapshotByTimeOffsetTemplates() *schema.Resource { } func dataSourceTencentCloudVodSnapshotByTimeOffsetTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vod_snapshot_by_time_offset_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vod_snapshot_by_time_offset_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) filter := make(map[string]interface{}) if v, ok := d.GetOk("definition"); ok { @@ -120,7 +123,7 @@ func dataSourceTencentCloudVodSnapshotByTimeOffsetTemplatesRead(d *schema.Resour } vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } templates, err := vodService.DescribeSnapshotByTimeOffsetTemplatesByFilter(ctx, filter) if err != nil { @@ -153,7 +156,7 @@ func dataSourceTencentCloudVodSnapshotByTimeOffsetTemplatesRead(d *schema.Resour } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), templatesList); err != nil { + if err := tccommon.WriteToFile(output.(string), templatesList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err } diff --git a/tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates_test.go b/tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates_test.go similarity index 86% rename from tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates_test.go rename to tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates_test.go index b23b61a542..a29aa749f9 100644 --- a/tencentcloud/data_source_tc_vod_snapshot_by_time_offset_templates_test.go +++ b/tencentcloud/services/vod/data_source_tc_vod_snapshot_by_time_offset_templates_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vod_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVodSnapshotByTimeOffsetTemplates(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: testAccVodSnapshotByTimeOffsetTemplates, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vod_snapshot_by_time_offset_templates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vod_snapshot_by_time_offset_templates.foo"), resource.TestCheckResourceAttr("data.tencentcloud_vod_snapshot_by_time_offset_templates.foo", "template_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_snapshot_by_time_offset_templates.foo", "template_list.0.name", "tf-snapshot"), resource.TestCheckResourceAttr("data.tencentcloud_vod_snapshot_by_time_offset_templates.foo", "template_list.0.width", "128"), diff --git a/tencentcloud/data_source_tc_vod_super_player_configs.go b/tencentcloud/services/vod/data_source_tc_vod_super_player_configs.go similarity index 93% rename from tencentcloud/data_source_tc_vod_super_player_configs.go rename to tencentcloud/services/vod/data_source_tc_vod_super_player_configs.go index 147903cf98..705b780211 100644 --- a/tencentcloud/data_source_tc_vod_super_player_configs.go +++ b/tencentcloud/services/vod/data_source_tc_vod_super_player_configs.go @@ -1,15 +1,18 @@ -package tencentcloud +package vod import ( "context" "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" ) -func dataSourceTencentCloudVodSuperPlayerConfigs() *schema.Resource { +func DataSourceTencentCloudVodSuperPlayerConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVodSuperPlayerConfigsRead, @@ -131,10 +134,10 @@ func dataSourceTencentCloudVodSuperPlayerConfigs() *schema.Resource { } func dataSourceTencentCloudVodSuperPlayerConfigsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vod_super_player_configs.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vod_super_player_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) filter := make(map[string]interface{}) if v, ok := d.GetOk("name"); ok { @@ -148,7 +151,7 @@ func dataSourceTencentCloudVodSuperPlayerConfigsRead(d *schema.ResourceData, met } vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } configs, err := vodService.DescribeSuperPlayerConfigsByFilter(ctx, filter) if err != nil { @@ -204,7 +207,7 @@ func dataSourceTencentCloudVodSuperPlayerConfigsRead(d *schema.ResourceData, met } if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), configsList); err != nil { + if err := tccommon.WriteToFile(output.(string), configsList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]", logId, output.(string), err.Error()) return err } diff --git a/tencentcloud/data_source_tc_vod_super_player_configs_test.go b/tencentcloud/services/vod/data_source_tc_vod_super_player_configs_test.go similarity index 91% rename from tencentcloud/data_source_tc_vod_super_player_configs_test.go rename to tencentcloud/services/vod/data_source_tc_vod_super_player_configs_test.go index 41ee53105b..f9b5c77252 100644 --- a/tencentcloud/data_source_tc_vod_super_player_configs_test.go +++ b/tencentcloud/services/vod/data_source_tc_vod_super_player_configs_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vod_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVodSuperPlayerConfigs(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: testAccVodSuperPlayerConfigs, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vod_super_player_configs.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vod_super_player_configs.foo"), resource.TestCheckResourceAttr("data.tencentcloud_vod_super_player_configs.foo", "config_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_super_player_configs.foo", "config_list.0.name", "tf-super-player1"), resource.TestCheckResourceAttr("data.tencentcloud_vod_super_player_configs.foo", "config_list.0.drm_switch", "true"), diff --git a/tencentcloud/extension_vod.go b/tencentcloud/services/vod/extension_vod.go similarity index 90% rename from tencentcloud/extension_vod.go rename to tencentcloud/services/vod/extension_vod.go index 6841aa06b1..6ed3abdadd 100644 --- a/tencentcloud/extension_vod.go +++ b/tencentcloud/services/vod/extension_vod.go @@ -1,6 +1,10 @@ -package tencentcloud +package vod -import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" +) const ( VOD_AUDIO_CHANNEL_MONO = "mono" @@ -65,13 +69,13 @@ func VodWatermarkResource() *schema.Resource { "text_content": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 100), Description: "Text content of up to `100` characters. This needs to be entered only when the watermark type is text. Note: this field may return null, indicating that no valid values can be obtained.", }, "svg_content": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 2000000), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 2000000), Description: "SVG content of up to `2000000` characters. This needs to be entered only when the watermark type is `SVG`. Note: this field may return null, indicating that no valid values can be obtained.", }, "start_time_offset": { diff --git a/tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template.go b/tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template.go similarity index 90% rename from tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template.go rename to tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template.go index d1593277e1..af14e6810f 100644 --- a/tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template.go +++ b/tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod import ( "context" @@ -7,14 +7,17 @@ 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" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource { +func ResourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVodAdaptiveDynamicStreamingTemplateCreate, Read: resourceTencentCloudVodAdaptiveDynamicStreamingTemplateRead, @@ -33,7 +36,7 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Template name. Length limit: 64 characters.", }, "drm_type": { @@ -57,7 +60,7 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource "comment": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 256), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 256), Description: "Template description. Length limit: 256 characters.", }, "sub_app_id": { @@ -87,7 +90,7 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource "fps": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 60), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 60), Description: "Video frame rate in Hz. Value range: `[0, 60]`. If the value is `0`, the frame rate will be the same as that of the source video.", }, "bitrate": { @@ -117,7 +120,7 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource Type: schema.TypeString, Optional: true, Default: "black", - ValidateFunc: validateAllowedStringValue([]string{"stretch", "black"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"stretch", "black"}), Description: "Fill type. Fill refers to the way of processing a screenshot when its aspect ratio is different from that of the source video. The following fill types are supported: `stretch`: stretch. The screenshot will be stretched frame by frame to match the aspect ratio of the source video, which may make the screenshot shorter or longer; `black`: fill with black. This option retains the aspect ratio of the source video for the screenshot and fills the unmatched area with black color blocks. Default value: black. Note: this field may return null, indicating that no valid values can be obtained.", }, }, @@ -180,10 +183,10 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplate() *schema.Resource } func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.create")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewCreateAdaptiveDynamicStreamingTemplateRequest() ) @@ -229,12 +232,12 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateCreate(d *schema.Res var response *vod.CreateAdaptiveDynamicStreamingTemplateResponse 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.UseVodClient().CreateAdaptiveDynamicStreamingTemplate(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateAdaptiveDynamicStreamingTemplate(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 }) @@ -250,15 +253,15 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateCreate(d *schema.Res } func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.read")() + 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) id = d.Id() subAppId = d.Get("sub_app_id").(int) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() vodService = VodService{client: client} ) // waiting for refreshing cache @@ -312,10 +315,10 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateRead(d *schema.Resou } func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewModifyAdaptiveDynamicStreamingTemplateRequest() id = d.Id() changeFlag = false @@ -389,12 +392,12 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateUpdate(d *schema.Res if changeFlag { var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifyAdaptiveDynamicStreamingTemplate(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifyAdaptiveDynamicStreamingTemplate(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 }) @@ -409,14 +412,14 @@ func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateUpdate(d *schema.Res } func resourceTencentCloudVodAdaptiveDynamicStreamingTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_adaptive_dynamic_streaming_template.delete")() - 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() vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := vodService.DeleteAdaptiveDynamicStreamingTemplate(ctx, id, uint64(d.Get("sub_app_id").(int))); err != nil { diff --git a/tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template_test.go b/tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template_test.go similarity index 90% rename from tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template_test.go rename to tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template_test.go index 628ac7ba79..7ab4ae3b60 100644 --- a/tencentcloud/resource_tc_vod_adaptive_dynamic_streaming_template_test.go +++ b/tencentcloud/services/vod/resource_tc_vod_adaptive_dynamic_streaming_template_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod_test import ( "context" @@ -6,6 +6,10 @@ import ( "strconv" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvod "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,16 +19,14 @@ func init() { resource.AddTestSweepers("tencentcloud_vod_adaptive_dynamic_streaming_template", &resource.Sweeper{ Name: "tencentcloud_vod_adaptive_dynamic_streaming_template", 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) - vodService := VodService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + vodService := svcvod.NewVodService(client.GetAPIV3Conn()) filter := make(map[string]interface{}) templates, e := vodService.DescribeAdaptiveDynamicStreamingTemplatesByFilter(ctx, filter) if e != nil { @@ -44,8 +46,8 @@ func init() { func TestAccTencentCloudVodAdaptiveDynamicStreamingTemplateResource(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: testAccCheckVodAdaptiveDynamicStreamingTemplateDestroy, Steps: []resource.TestStep{ { @@ -115,12 +117,10 @@ func TestAccTencentCloudVodAdaptiveDynamicStreamingTemplateResource(t *testing.T } func testAccCheckVodAdaptiveDynamicStreamingTemplateDestroy(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) - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vod_adaptive_dynamic_streaming_template" { continue @@ -145,8 +145,8 @@ func testAccCheckVodAdaptiveDynamicStreamingTemplateDestroy(s *terraform.State) func testAccCheckVodAdaptiveDynamicStreamingTemplateExists(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 { @@ -155,9 +155,7 @@ func testAccCheckVodAdaptiveDynamicStreamingTemplateExists(n string) resource.Te if rs.Primary.ID == "" { return fmt.Errorf("vod adaptive dynamic streaming template id is not set") } - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) var ( filter = map[string]interface{}{ "definitions": []string{rs.Primary.ID}, diff --git a/tencentcloud/resource_tc_vod_image_sprite_template.go b/tencentcloud/services/vod/resource_tc_vod_image_sprite_template.go similarity index 84% rename from tencentcloud/resource_tc_vod_image_sprite_template.go rename to tencentcloud/services/vod/resource_tc_vod_image_sprite_template.go index 0c3726ef0a..bfa6c9fb0f 100644 --- a/tencentcloud/resource_tc_vod_image_sprite_template.go +++ b/tencentcloud/services/vod/resource_tc_vod_image_sprite_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod import ( "context" @@ -7,14 +7,17 @@ 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" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudVodImageSpriteTemplate() *schema.Resource { +func ResourceTencentCloudVodImageSpriteTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVodImageSpriteTemplateCreate, Read: resourceTencentCloudVodImageSpriteTemplateRead, @@ -28,7 +31,7 @@ func resourceTencentCloudVodImageSpriteTemplate() *schema.Resource { "sample_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{"Percent", "Time"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"Percent", "Time"}), Description: "Sampling type. Valid values: `Percent`, `Time`. `Percent`: by percent. `Time`: by time interval.", }, "sample_interval": { @@ -49,13 +52,13 @@ func resourceTencentCloudVodImageSpriteTemplate() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Name of a time point screen capturing template. Length limit: 64 characters.", }, "comment": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 256), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 256), Description: "Template description. Length limit: 256 characters.", }, "fill_type": { @@ -103,10 +106,10 @@ func resourceTencentCloudVodImageSpriteTemplate() *schema.Resource { } func resourceTencentCloudVodImageSpriteTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_image_sprite_template.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_image_sprite_template.create")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewCreateImageSpriteTemplateRequest() ) @@ -128,12 +131,12 @@ func resourceTencentCloudVodImageSpriteTemplateCreate(d *schema.ResourceData, me var response *vod.CreateImageSpriteTemplateResponse 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.UseVodClient().CreateImageSpriteTemplate(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateImageSpriteTemplate(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 }) @@ -149,15 +152,15 @@ func resourceTencentCloudVodImageSpriteTemplateCreate(d *schema.ResourceData, me } func resourceTencentCloudVodImageSpriteTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_image_sprite_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vod_image_sprite_template.read")() + 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) id = d.Id() subAppId = d.Get("sub_app_id").(int) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() vodService = VodService{client: client} ) // waiting for refreshing cache @@ -188,10 +191,10 @@ func resourceTencentCloudVodImageSpriteTemplateRead(d *schema.ResourceData, meta } func resourceTencentCloudVodImageSpriteTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_image_sprite_template.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_image_sprite_template.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewModifyImageSpriteTemplateRequest() id = d.Id() changeFlag = false @@ -240,12 +243,12 @@ func resourceTencentCloudVodImageSpriteTemplateUpdate(d *schema.ResourceData, me if changeFlag { var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifyImageSpriteTemplate(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifyImageSpriteTemplate(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 }) @@ -260,14 +263,14 @@ func resourceTencentCloudVodImageSpriteTemplateUpdate(d *schema.ResourceData, me } func resourceTencentCloudVodImageSpriteTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_image_sprite_template.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_image_sprite_template.delete")() - 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() vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := vodService.DeleteImageSpriteTemplate(ctx, id, uint64(d.Get("sub_app_id").(int))); err != nil { diff --git a/tencentcloud/resource_tc_vod_image_sprite_template_test.go b/tencentcloud/services/vod/resource_tc_vod_image_sprite_template_test.go similarity index 86% rename from tencentcloud/resource_tc_vod_image_sprite_template_test.go rename to tencentcloud/services/vod/resource_tc_vod_image_sprite_template_test.go index 1ef79adcd5..23b5cf0805 100644 --- a/tencentcloud/resource_tc_vod_image_sprite_template_test.go +++ b/tencentcloud/services/vod/resource_tc_vod_image_sprite_template_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vod_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvod "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudVodImageSpriteTemplateResource(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: testAccCheckVodImageSpriteTemplateDestroy, Steps: []resource.TestStep{ { @@ -60,12 +64,10 @@ func TestAccTencentCloudVodImageSpriteTemplateResource(t *testing.T) { } func testAccCheckVodImageSpriteTemplateDestroy(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) - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vod_image_sprite_template" { continue @@ -90,8 +92,8 @@ func testAccCheckVodImageSpriteTemplateDestroy(s *terraform.State) error { func testAccCheckVodImageSpriteTemplateExists(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 { @@ -100,9 +102,7 @@ func testAccCheckVodImageSpriteTemplateExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("vod image sprite template id is not set") } - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) var ( filter = map[string]interface{}{ "definitions": []string{rs.Primary.ID}, diff --git a/tencentcloud/resource_tc_vod_procedure_template.go b/tencentcloud/services/vod/resource_tc_vod_procedure_template.go similarity index 94% rename from tencentcloud/resource_tc_vod_procedure_template.go rename to tencentcloud/services/vod/resource_tc_vod_procedure_template.go index b98251d56d..865bdfd2b4 100644 --- a/tencentcloud/resource_tc_vod_procedure_template.go +++ b/tencentcloud/services/vod/resource_tc_vod_procedure_template.go @@ -1,18 +1,21 @@ -package tencentcloud +package vod 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" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudVodProcedureTemplate() *schema.Resource { +func ResourceTencentCloudVodProcedureTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVodProcedureTemplateCreate, Read: resourceTencentCloudVodProcedureTemplateRead, @@ -27,13 +30,13 @@ func resourceTencentCloudVodProcedureTemplate() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 20), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 20), Description: "Task flow name (up to 20 characters).", }, "comment": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 256), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 256), Description: "Template description. Length limit: 256 characters.", }, "sub_app_id": { @@ -222,7 +225,7 @@ func resourceTencentCloudVodProcedureTemplate() *schema.Resource { "position_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{"Time", "Percent"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"Time", "Percent"}), Description: "Screen capturing mode. Valid values: `Time`, `Percent`. `Time`: screen captures by time point, `Percent`: screen captures by percentage.", }, "position_value": { @@ -521,10 +524,10 @@ func generateMediaProcessTask(d *schema.ResourceData) (mediaReq *vod.MediaProces } func resourceTencentCloudVodProcedureTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_procedure_template.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_procedure_template.create")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewCreateProcedureTemplateRequest() ) @@ -541,12 +544,12 @@ func resourceTencentCloudVodProcedureTemplateCreate(d *schema.ResourceData, meta } var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().CreateProcedureTemplate(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateProcedureTemplate(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 }) @@ -559,15 +562,15 @@ func resourceTencentCloudVodProcedureTemplateCreate(d *schema.ResourceData, meta } func resourceTencentCloudVodProcedureTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_procedure_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vod_procedure_template.read")() + 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) id = d.Id() subAppId = d.Get("sub_app_id").(int) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() vodService = VodService{client: client} ) template, has, err := vodService.DescribeProcedureTemplatesById(ctx, id, subAppId) @@ -776,10 +779,10 @@ func resourceTencentCloudVodProcedureTemplateRead(d *schema.ResourceData, meta i } func resourceTencentCloudVodProcedureTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_procedure_template.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_procedure_template.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewResetProcedureTemplateRequest() id = d.Id() changeFlag = false @@ -802,12 +805,12 @@ func resourceTencentCloudVodProcedureTemplateUpdate(d *schema.ResourceData, meta if changeFlag { var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ResetProcedureTemplate(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ResetProcedureTemplate(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 }) @@ -822,14 +825,14 @@ func resourceTencentCloudVodProcedureTemplateUpdate(d *schema.ResourceData, meta } func resourceTencentCloudVodProcedureTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_procedure_template.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_procedure_template.delete")() - 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() vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := vodService.DeleteProcedureTemplate(ctx, id, uint64(d.Get("sub_app_id").(int))); err != nil { diff --git a/tencentcloud/resource_tc_vod_procedure_template_test.go b/tencentcloud/services/vod/resource_tc_vod_procedure_template_test.go similarity index 86% rename from tencentcloud/resource_tc_vod_procedure_template_test.go rename to tencentcloud/services/vod/resource_tc_vod_procedure_template_test.go index 84028b30ba..d838b669c3 100644 --- a/tencentcloud/resource_tc_vod_procedure_template_test.go +++ b/tencentcloud/services/vod/resource_tc_vod_procedure_template_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vod_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvod "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,16 +18,14 @@ func init() { resource.AddTestSweepers("tencentcloud_vod_procedure_template", &resource.Sweeper{ Name: "tencentcloud_vod_procedure_template", 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) - vodService := VodService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + vodService := svcvod.NewVodService(client.GetAPIV3Conn()) filter := make(map[string]interface{}) templates, err := vodService.DescribeProcedureTemplatesByFilter(ctx, filter) if err != nil { @@ -44,8 +46,8 @@ func init() { func TestAccTencentCloudVodProcedureTemplateResource(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: testAccCheckVodProcedureTemplateDestroy, Steps: []resource.TestStep{ { @@ -92,12 +94,10 @@ func TestAccTencentCloudVodProcedureTemplateResource(t *testing.T) { } func testAccCheckVodProcedureTemplateDestroy(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) - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vod_procedure_template" { continue @@ -122,8 +122,8 @@ func testAccCheckVodProcedureTemplateDestroy(s *terraform.State) error { func testAccCheckVodProcedureTemplateExists(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 { @@ -132,9 +132,7 @@ func testAccCheckVodProcedureTemplateExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("vod procedure template id is not set") } - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) var ( filter = map[string]interface{}{ "name": []string{rs.Primary.ID}, diff --git a/tencentcloud/resource_tc_vod_snapshot_by_time_offset_template.go b/tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template.go similarity index 83% rename from tencentcloud/resource_tc_vod_snapshot_by_time_offset_template.go rename to tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template.go index ce4ecad156..233d984d07 100644 --- a/tencentcloud/resource_tc_vod_snapshot_by_time_offset_template.go +++ b/tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod import ( "context" @@ -7,14 +7,17 @@ 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" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudVodSnapshotByTimeOffsetTemplate() *schema.Resource { +func ResourceTencentCloudVodSnapshotByTimeOffsetTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVodSnapshotByTimeOffsetTemplateCreate, Read: resourceTencentCloudVodSnapshotByTimeOffsetTemplateRead, @@ -28,7 +31,7 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplate() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Name of a time point screen capturing template. Length limit: 64 characters.", }, "width": { @@ -57,7 +60,7 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplate() *schema.Resource { "comment": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 256), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 256), Description: "Template description. Length limit: 256 characters.", }, "sub_app_id": { @@ -87,10 +90,10 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplate() *schema.Resource { } func resourceTencentCloudVodSnapshotByTimeOffsetTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.create")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewCreateSnapshotByTimeOffsetTemplateRequest() ) @@ -111,12 +114,12 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplateCreate(d *schema.Resourc var response *vod.CreateSnapshotByTimeOffsetTemplateResponse 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.UseVodClient().CreateSnapshotByTimeOffsetTemplate(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateSnapshotByTimeOffsetTemplate(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 }) @@ -132,15 +135,15 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplateCreate(d *schema.Resourc } func resourceTencentCloudVodSnapshotByTimeOffsetTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.read")() + 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) id = d.Id() subAppId = d.Get("sub_app_id").(int) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() vodService = VodService{client: client} ) // waiting for refreshing cache @@ -168,10 +171,10 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplateRead(d *schema.ResourceD } func resourceTencentCloudVodSnapshotByTimeOffsetTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewModifySnapshotByTimeOffsetTemplateRequest() id = d.Id() changeFlag = false @@ -208,12 +211,12 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplateUpdate(d *schema.Resourc if changeFlag { var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySnapshotByTimeOffsetTemplate(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySnapshotByTimeOffsetTemplate(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 }) @@ -228,14 +231,14 @@ func resourceTencentCloudVodSnapshotByTimeOffsetTemplateUpdate(d *schema.Resourc } func resourceTencentCloudVodSnapshotByTimeOffsetTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_snapshot_by_time_offset_template.delete")() - 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() vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := vodService.DeleteSnapshotByTimeOffsetTemplate(ctx, id, uint64(d.Get("sub_app_id").(int))); err != nil { diff --git a/tencentcloud/resource_tc_vod_snapshot_by_time_offset_template_test.go b/tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template_test.go similarity index 84% rename from tencentcloud/resource_tc_vod_snapshot_by_time_offset_template_test.go rename to tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template_test.go index 523635635b..9fda33d5b2 100644 --- a/tencentcloud/resource_tc_vod_snapshot_by_time_offset_template_test.go +++ b/tencentcloud/services/vod/resource_tc_vod_snapshot_by_time_offset_template_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod_test import ( "context" @@ -6,6 +6,10 @@ import ( "strconv" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvod "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,16 +19,14 @@ func init() { resource.AddTestSweepers("tencentcloud_vod_snapshot_template", &resource.Sweeper{ Name: "tencentcloud_vod_snapshot_template", 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) - vodService := VodService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + vodService := svcvod.NewVodService(client.GetAPIV3Conn()) filter := make(map[string]interface{}) templates, e := vodService.DescribeSnapshotByTimeOffsetTemplatesByFilter(ctx, filter) if e != nil { @@ -55,8 +57,8 @@ func init() { func TestAccTencentCloudVodSnapshotByTimeOffsetTemplateResource(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: testAccCheckVodSnapshotByTimeOffsetTemplateDestroy, Steps: []resource.TestStep{ { @@ -97,12 +99,10 @@ func TestAccTencentCloudVodSnapshotByTimeOffsetTemplateResource(t *testing.T) { } func testAccCheckVodSnapshotByTimeOffsetTemplateDestroy(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) - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vod_snapshot_by_time_offset_template" { continue @@ -127,8 +127,8 @@ func testAccCheckVodSnapshotByTimeOffsetTemplateDestroy(s *terraform.State) erro func testAccCheckVodSnapshotByTimeOffsetTemplateExists(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 { @@ -137,9 +137,7 @@ func testAccCheckVodSnapshotByTimeOffsetTemplateExists(n string) resource.TestCh if rs.Primary.ID == "" { return fmt.Errorf("vod snapshot by time offset template id is not set") } - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) var ( filter = map[string]interface{}{ diff --git a/tencentcloud/services/vod/resource_tc_vod_sub_application.go b/tencentcloud/services/vod/resource_tc_vod_sub_application.go new file mode 100644 index 0000000000..1771af4311 --- /dev/null +++ b/tencentcloud/services/vod/resource_tc_vod_sub_application.go @@ -0,0 +1,258 @@ +package vod + +import ( + "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" + vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func ResourceTencentCloudVodSubApplication() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVodSubApplicationCreate, + Read: resourceTencentCloudVodSubApplicationRead, + Update: resourceTencentCloudVodSubApplicationUpdate, + Delete: resourceTencentCloudVodSubApplicationDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 40), + Description: "Sub application name, which can contain up to 64 letters, digits, underscores, and hyphens (such as test_ABC-123) and must be unique under a user.", + }, + "status": { + Type: schema.TypeString, + Required: true, + Description: "Sub appliaction status.", + ValidateFunc: tccommon.ValidateAllowedStringValue(VOD_SUB_APPLICATION_STATUS), + }, + "description": { + Type: schema.TypeString, + Optional: true, + Description: "Sub application description.", + }, + //computed + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "The time when the sub application was created.", + }, + }, + } +} + +func resourceTencentCloudVodSubApplicationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vod_sub_application.create")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = vod.NewCreateSubAppIdRequest() + subAppId *uint64 + subAppName *string + ) + + if v, ok := d.GetOk("name"); ok { + subAppName = helper.String(v.(string)) + request.Name = subAppName + } + + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateSubAppId(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + return tccommon.RetryError(err) + } + subAppId = response.Response.SubAppId + return nil + }); err != nil { + return err + } + + d.SetId(*subAppName + tccommon.FILED_SP + helper.UInt64ToStr(*subAppId)) + + if v, ok := d.GetOk("status"); ok { + statusResquest := vod.NewModifySubAppIdStatusRequest() + statusResquest.SubAppId = subAppId + statusResquest.Status = helper.String(v.(string)) + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(statusResquest.GetAction()) + _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySubAppIdStatus(statusResquest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + return tccommon.RetryError(err) + } + return nil + }); err != nil { + return err + } + } + + return resourceTencentCloudVodSubApplicationRead(d, meta) +} + +func resourceTencentCloudVodSubApplicationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vod_sub_application.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + //logId = tccommon.GetLogId(tccommon.ContextNil) + //ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() + request = vod.NewDescribeSubAppIdsRequest() + appInfo = vod.SubAppIdInfo{} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("sub application id is borken, id is %s", d.Id()) + } + subAppName := idSplit[0] + subAppId := idSplit[1] + + request.Name = &subAppName + + response, err := client.UseVodClient().DescribeSubAppIds(request) + if err != nil { + return err + } + infoSet := response.Response.SubAppIdInfoSet + if len(infoSet) == 0 { + d.SetId("") + return nil + } + + for _, info := range infoSet { + if helper.UInt64ToStr(helper.PUint64(info.SubAppId)) == subAppId { + appInfo = *info + break + } + } + _ = d.Set("name", appInfo.Name) + _ = d.Set("description", appInfo.Description) + // there may hide a bug, appInfo do not return status. So use the user input + //_ = d.Set("status", appInfo.Status) + _ = d.Set("status", helper.String(d.Get("status").(string))) + _ = d.Set("create_time", appInfo.CreateTime) + return nil +} + +func resourceTencentCloudVodSubApplicationUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vod_sub_application.update")() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = vod.NewModifySubAppIdInfoRequest() + changeFlag = false + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("sub application id is borken, id is %s", d.Id()) + } + subAppId := idSplit[1] + + if d.HasChange("name") { + changeFlag = true + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + } + if d.HasChange("description") { + changeFlag = true + if v, ok := d.GetOk("description"); ok { + request.Description = helper.String(v.(string)) + } + } + request.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) + + if changeFlag { + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySubAppIdInfo(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return err + } + } + if d.HasChange("status") { + var statusRequest = vod.NewModifySubAppIdStatusRequest() + if v, ok := d.GetOk("status"); ok { + statusRequest.Status = helper.String(v.(string)) + } + statusRequest.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(statusRequest.GetAction()) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySubAppIdStatus(statusRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) + return tccommon.RetryError(err) + } + return nil + }) + } + return resourceTencentCloudVodSubApplicationRead(d, meta) +} + +func resourceTencentCloudVodSubApplicationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vod_sub_application.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("sub application id is borken, id is %s", d.Id()) + } + subAppId := idSplit[1] + var statusRequest = vod.NewModifySubAppIdStatusRequest() + // first turn off + statusRequest.Status = helper.String("Off") + statusRequest.SubAppId = helper.Uint64(helper.StrToUInt64(subAppId)) + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(statusRequest.GetAction()) + if _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySubAppIdStatus(statusRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + return err + } + // then destroy + statusRequest.Status = helper.String("Destroyed") + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(statusRequest.GetAction()) + if _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySubAppIdStatus(statusRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, statusRequest.GetAction(), err.Error()) + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vod_super_player_config.go b/tencentcloud/services/vod/resource_tc_vod_super_player_config.go similarity index 88% rename from tencentcloud/resource_tc_vod_super_player_config.go rename to tencentcloud/services/vod/resource_tc_vod_super_player_config.go index fc24670f50..c5820ce1d7 100644 --- a/tencentcloud/resource_tc_vod_super_player_config.go +++ b/tencentcloud/services/vod/resource_tc_vod_super_player_config.go @@ -1,18 +1,21 @@ -package tencentcloud +package vod 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" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudVodSuperPlayerConfig() *schema.Resource { +func ResourceTencentCloudVodSuperPlayerConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVodSuperPlayerConfigCreate, Read: resourceTencentCloudVodSuperPlayerConfigRead, @@ -27,7 +30,7 @@ func resourceTencentCloudVodSuperPlayerConfig() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Player configuration name, which can contain up to 64 letters, digits, underscores, and hyphens (such as test_ABC-123) and must be unique under a user.", }, "drm_switch": { @@ -96,7 +99,7 @@ func resourceTencentCloudVodSuperPlayerConfig() *schema.Resource { "comment": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 256), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 256), Description: "Template description. Length limit: 256 characters.", }, "sub_app_id": { @@ -120,10 +123,10 @@ func resourceTencentCloudVodSuperPlayerConfig() *schema.Resource { } func resourceTencentCloudVodSuperPlayerConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_super_player_config.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_super_player_config.create")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewCreateSuperPlayerConfigRequest() ) @@ -198,12 +201,12 @@ func resourceTencentCloudVodSuperPlayerConfigCreate(d *schema.ResourceData, meta } var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().CreateSuperPlayerConfig(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().CreateSuperPlayerConfig(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 }) @@ -217,14 +220,14 @@ func resourceTencentCloudVodSuperPlayerConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudVodSuperPlayerConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_super_player_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vod_super_player_config.read")() + 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) id = d.Id() - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() vodService = VodService{client: client} ) config, has, err := vodService.DescribeSuperPlayerConfigsById(ctx, id) @@ -272,10 +275,10 @@ func resourceTencentCloudVodSuperPlayerConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudVodSuperPlayerConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_super_player_config.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_super_player_config.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = vod.NewModifySuperPlayerConfigRequest() id = d.Id() changeFlag = false @@ -345,12 +348,12 @@ func resourceTencentCloudVodSuperPlayerConfigUpdate(d *schema.ResourceData, meta if changeFlag { var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err = meta.(*TencentCloudClient).apiV3Conn.UseVodClient().ModifySuperPlayerConfig(request) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVodClient().ModifySuperPlayerConfig(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 }) @@ -365,14 +368,14 @@ func resourceTencentCloudVodSuperPlayerConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudVodSuperPlayerConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vod_super_player_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vod_super_player_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) id := d.Id() vodService := VodService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := vodService.DeleteSuperPlayerConfig(ctx, id, uint64(d.Get("sub_app_id").(int))); err != nil { diff --git a/tencentcloud/resource_tc_vod_super_player_config_test.go b/tencentcloud/services/vod/resource_tc_vod_super_player_config_test.go similarity index 85% rename from tencentcloud/resource_tc_vod_super_player_config_test.go rename to tencentcloud/services/vod/resource_tc_vod_super_player_config_test.go index bc4fbedf84..06da487c06 100644 --- a/tencentcloud/resource_tc_vod_super_player_config_test.go +++ b/tencentcloud/services/vod/resource_tc_vod_super_player_config_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vod_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvod "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vod" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,16 +18,14 @@ func init() { resource.AddTestSweepers("tencentcloud_vod_super_player_config", &resource.Sweeper{ Name: "tencentcloud_vod_super_player_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) - vodService := VodService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + vodService := svcvod.NewVodService(client.GetAPIV3Conn()) filter := make(map[string]interface{}) configs, e := vodService.DescribeSuperPlayerConfigsByFilter(ctx, filter) if e != nil { @@ -42,8 +44,8 @@ func init() { func TestAccTencentCloudVodSuperPlayerConfigResource(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: testAccCheckVodSuperPlayerConfigDestroy, Steps: []resource.TestStep{ { @@ -92,12 +94,10 @@ func TestAccTencentCloudVodSuperPlayerConfigResource(t *testing.T) { } func testAccCheckVodSuperPlayerConfigDestroy(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) - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vod_super_player_config" { continue @@ -117,8 +117,8 @@ func testAccCheckVodSuperPlayerConfigDestroy(s *terraform.State) error { func testAccCheckVodSuperPlayerConfigExists(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 { @@ -127,9 +127,7 @@ func testAccCheckVodSuperPlayerConfigExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("vod super player config id is not set") } - vodService := VodService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vodService := svcvod.NewVodService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := vodService.DescribeSuperPlayerConfigsById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/service_tencentcloud_vod.go b/tencentcloud/services/vod/service_tencentcloud_vod.go similarity index 88% rename from tencentcloud/service_tencentcloud_vod.go rename to tencentcloud/services/vod/service_tencentcloud_vod.go index 3e73eb5b39..742a9bd951 100644 --- a/tencentcloud/service_tencentcloud_vod.go +++ b/tencentcloud/services/vod/service_tencentcloud_vod.go @@ -1,4 +1,4 @@ -package tencentcloud +package vod import ( "context" @@ -6,19 +6,26 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" vod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" + "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 NewVodService(client *connectivity.TencentCloudClient) VodService { + return VodService{client: client} +} + type VodService struct { client *connectivity.TencentCloudClient } func (me *VodService) DescribeAdaptiveDynamicStreamingTemplatesByFilter(ctx context.Context, filters map[string]interface{}) (templates []*vod.AdaptiveDynamicStreamingTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDescribeAdaptiveDynamicStreamingTemplatesRequest() offset := VOD_DEFAULT_OFFSET @@ -42,11 +49,11 @@ func (me *VodService) DescribeAdaptiveDynamicStreamingTemplatesByFilter(ctx cont for { var response *vod.DescribeAdaptiveDynamicStreamingTemplatesResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseVodClient().DescribeAdaptiveDynamicStreamingTemplates(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } templates = append(templates, response.Response.AdaptiveDynamicStreamingTemplateSet...) return nil @@ -90,7 +97,7 @@ func (me *VodService) DescribeAdaptiveDynamicStreamingTemplatesById(ctx context. } func (me *VodService) DeleteAdaptiveDynamicStreamingTemplate(ctx context.Context, templateId string, subAppid uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDeleteAdaptiveDynamicStreamingTemplateRequest() idUint, _ := strconv.ParseUint(templateId, 0, 64) @@ -99,12 +106,12 @@ func (me *VodService) DeleteAdaptiveDynamicStreamingTemplate(ctx context.Context request.SubAppId = &subAppid } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseVodClient().DeleteAdaptiveDynamicStreamingTemplate(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 }) @@ -116,7 +123,7 @@ func (me *VodService) DeleteAdaptiveDynamicStreamingTemplate(ctx context.Context } func (me *VodService) DescribeProcedureTemplatesByFilter(ctx context.Context, filters map[string]interface{}) (templates []*vod.ProcedureTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDescribeProcedureTemplatesRequest() offset := VOD_DEFAULT_OFFSET @@ -139,11 +146,11 @@ func (me *VodService) DescribeProcedureTemplatesByFilter(ctx context.Context, fi for { var response *vod.DescribeProcedureTemplatesResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseVodClient().DescribeProcedureTemplates(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } templates = append(templates, response.Response.ProcedureTemplateSet...) return nil @@ -187,7 +194,7 @@ func (me *VodService) DescribeProcedureTemplatesById(ctx context.Context, templa } func (me *VodService) DeleteProcedureTemplate(ctx context.Context, templateId string, subAppid uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDeleteProcedureTemplateRequest() request.Name = &templateId @@ -195,12 +202,12 @@ func (me *VodService) DeleteProcedureTemplate(ctx context.Context, templateId st request.SubAppId = &subAppid } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseVodClient().DeleteProcedureTemplate(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 }) @@ -212,7 +219,7 @@ func (me *VodService) DeleteProcedureTemplate(ctx context.Context, templateId st } func (me *VodService) DescribeSnapshotByTimeOffsetTemplatesByFilter(ctx context.Context, filters map[string]interface{}) (templates []*vod.SnapshotByTimeOffsetTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDescribeSnapshotByTimeOffsetTemplatesRequest() offset := VOD_DEFAULT_OFFSET @@ -236,11 +243,11 @@ func (me *VodService) DescribeSnapshotByTimeOffsetTemplatesByFilter(ctx context. for { var response *vod.DescribeSnapshotByTimeOffsetTemplatesResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseVodClient().DescribeSnapshotByTimeOffsetTemplates(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } templates = append(templates, response.Response.SnapshotByTimeOffsetTemplateSet...) return nil @@ -284,7 +291,7 @@ func (me *VodService) DescribeSnapshotByTimeOffsetTemplatesById(ctx context.Cont } func (me *VodService) DeleteSnapshotByTimeOffsetTemplate(ctx context.Context, templateId string, subAppid uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDeleteSnapshotByTimeOffsetTemplateRequest() idUint, _ := strconv.ParseUint(templateId, 0, 64) @@ -293,12 +300,12 @@ func (me *VodService) DeleteSnapshotByTimeOffsetTemplate(ctx context.Context, te request.SubAppId = &subAppid } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseVodClient().DeleteSnapshotByTimeOffsetTemplate(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 }) @@ -310,7 +317,7 @@ func (me *VodService) DeleteSnapshotByTimeOffsetTemplate(ctx context.Context, te } func (me *VodService) DescribeImageSpriteTemplatesByFilter(ctx context.Context, filters map[string]interface{}) (templates []*vod.ImageSpriteTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDescribeImageSpriteTemplatesRequest() offset := VOD_DEFAULT_OFFSET @@ -334,11 +341,11 @@ func (me *VodService) DescribeImageSpriteTemplatesByFilter(ctx context.Context, for { var response *vod.DescribeImageSpriteTemplatesResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseVodClient().DescribeImageSpriteTemplates(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } templates = append(templates, response.Response.ImageSpriteTemplateSet...) return nil @@ -382,7 +389,7 @@ func (me *VodService) DescribeImageSpriteTemplatesById(ctx context.Context, temp } func (me *VodService) DeleteImageSpriteTemplate(ctx context.Context, templateId string, subAppid uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDeleteImageSpriteTemplateRequest() idUint, _ := strconv.ParseUint(templateId, 0, 64) @@ -391,12 +398,12 @@ func (me *VodService) DeleteImageSpriteTemplate(ctx context.Context, templateId request.SubAppId = &subAppid } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseVodClient().DeleteImageSpriteTemplate(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 }) @@ -408,7 +415,7 @@ func (me *VodService) DeleteImageSpriteTemplate(ctx context.Context, templateId } func (me *VodService) DescribeSuperPlayerConfigsByFilter(ctx context.Context, filters map[string]interface{}) (configs []*vod.PlayerConfig, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDescribeSuperPlayerConfigsRequest() offset := VOD_DEFAULT_OFFSET @@ -431,11 +438,11 @@ func (me *VodService) DescribeSuperPlayerConfigsByFilter(ctx context.Context, fi for { var response *vod.DescribeSuperPlayerConfigsResponse var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseVodClient().DescribeSuperPlayerConfigs(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } configs = append(configs, response.Response.PlayerConfigSet...) return nil @@ -478,7 +485,7 @@ func (me *VodService) DescribeSuperPlayerConfigsById(ctx context.Context, config } func (me *VodService) DeleteSuperPlayerConfig(ctx context.Context, configId string, subAppid uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := vod.NewDeleteSuperPlayerConfigRequest() request.Name = &configId @@ -486,12 +493,12 @@ func (me *VodService) DeleteSuperPlayerConfig(ctx context.Context, configId stri request.SubAppId = &subAppid } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseVodClient().DeleteSuperPlayerConfig(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 }) diff --git a/tencentcloud/data_source_tc_address_template_groups.go b/tencentcloud/services/vpc/data_source_tc_address_template_groups.go similarity index 83% rename from tencentcloud/data_source_tc_address_template_groups.go rename to tencentcloud/services/vpc/data_source_tc_address_template_groups.go index 36b12f3777..474f254a73 100644 --- a/tencentcloud/data_source_tc_address_template_groups.go +++ b/tencentcloud/services/vpc/data_source_tc_address_template_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudAddressTemplateGroups() *schema.Resource { +func DataSourceTencentCloudAddressTemplateGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAddressTemplateGroupsRead, @@ -64,10 +67,10 @@ func dataSourceTencentCloudAddressTemplateGroups() *schema.Resource { } func dataSourceTencentCloudAddressTemplateGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_address_template_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_address_template_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) var name, templateId string var filters = make([]*vpc.Filter, 0) @@ -81,14 +84,14 @@ func dataSourceTencentCloudAddressTemplateGroupsRead(d *schema.ResourceData, met filters = append(filters, &vpc.Filter{Name: helper.String("address-template-group-id"), Values: []*string{&templateId}}) } - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error groups, outErr := vpcService.DescribeAddressTemplateGroups(ctx, filters) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { groups, inErr = vpcService.DescribeAddressTemplateGroups(ctx, filters) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -117,7 +120,7 @@ func dataSourceTencentCloudAddressTemplateGroupsRead(d *schema.ResourceData, met output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), templateGroupList); e != nil { + if e := tccommon.WriteToFile(output.(string), templateGroupList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_address_template_groups_test.go b/tencentcloud/services/vpc/data_source_tc_address_template_groups_test.go similarity index 87% rename from tencentcloud/data_source_tc_address_template_groups_test.go rename to tencentcloud/services/vpc/data_source_tc_address_template_groups_test.go index 2c4cb88085..762811f1fd 100644 --- a/tencentcloud/data_source_tc_address_template_groups_test.go +++ b/tencentcloud/services/vpc/data_source_tc_address_template_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 testDataAddressTemplateGroupsNameAll = "data.tencentcloud_address_template_g func TestAccTencentCloudDataAddressTemplateGroups(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: testAccCheckAddressTemplateGroupDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_address_templates.go b/tencentcloud/services/vpc/data_source_tc_address_templates.go similarity index 82% rename from tencentcloud/data_source_tc_address_templates.go rename to tencentcloud/services/vpc/data_source_tc_address_templates.go index 848ef7b6b2..f62a539180 100644 --- a/tencentcloud/data_source_tc_address_templates.go +++ b/tencentcloud/services/vpc/data_source_tc_address_templates.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudAddressTemplates() *schema.Resource { +func DataSourceTencentCloudAddressTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAddressTemplatesRead, @@ -64,10 +67,10 @@ func dataSourceTencentCloudAddressTemplates() *schema.Resource { } func dataSourceTencentCloudAddressTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_address_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_address_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var name, templateId string var filters = make([]*vpc.Filter, 0) @@ -81,14 +84,14 @@ func dataSourceTencentCloudAddressTemplatesRead(d *schema.ResourceData, meta int filters = append(filters, &vpc.Filter{Name: helper.String("address-template-id"), Values: []*string{&templateId}}) } - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error templates, outErr := vpcService.DescribeAddressTemplates(ctx, filters) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { templates, inErr = vpcService.DescribeAddressTemplates(ctx, filters) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -117,7 +120,7 @@ func dataSourceTencentCloudAddressTemplatesRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), templateList); e != nil { + if e := tccommon.WriteToFile(output.(string), templateList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_address_templates_test.go b/tencentcloud/services/vpc/data_source_tc_address_templates_test.go similarity index 86% rename from tencentcloud/data_source_tc_address_templates_test.go rename to tencentcloud/services/vpc/data_source_tc_address_templates_test.go index 521279fa81..7b627d38f2 100644 --- a/tencentcloud/data_source_tc_address_templates_test.go +++ b/tencentcloud/services/vpc/data_source_tc_address_templates_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 testDataAddressTemplatesNameAll = "data.tencentcloud_address_templates.all_t func TestAccTencentCloudDataAddressTemplates(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: testAccCheckAddressTemplateDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_dnats.go b/tencentcloud/services/vpc/data_source_tc_dnats.go similarity index 88% rename from tencentcloud/data_source_tc_dnats.go rename to tencentcloud/services/vpc/data_source_tc_dnats.go index 48d7d8b153..e185415191 100644 --- a/tencentcloud/data_source_tc_dnats.go +++ b/tencentcloud/services/vpc/data_source_tc_dnats.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudDnats() *schema.Resource { +func DataSourceTencentCloudDnats() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudDnatsRead, @@ -28,19 +31,19 @@ func dataSourceTencentCloudDnats() *schema.Resource { "elastic_ip": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Network address of the EIP.", }, "elastic_port": { Type: schema.TypeString, Optional: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "Port of the EIP.", }, "private_ip": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Network address of the backend service.", }, "description": { @@ -51,7 +54,7 @@ func dataSourceTencentCloudDnats() *schema.Resource { "private_port": { Type: schema.TypeString, Optional: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "Port of intranet.", }, "result_output_file": { @@ -115,9 +118,9 @@ func dataSourceTencentCloudDnats() *schema.Resource { } func dataSourceTencentCloudDnatsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_dnats.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_dnats.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() params := make(map[string]string) if v, ok := d.GetOk("nat_id"); ok { @@ -157,12 +160,12 @@ func dataSourceTencentCloudDnatsRead(d *schema.ResourceData, meta interface{}) e limit := uint64(NAT_DESCRIBE_LIMIT) request.Limit = &limit for { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(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) } response = result return nil @@ -207,7 +210,7 @@ func dataSourceTencentCloudDnatsRead(d *schema.ResourceData, meta interface{}) e output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), dnatList); e != nil { + if e := tccommon.WriteToFile(output.(string), dnatList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_dnats_test.go b/tencentcloud/services/vpc/data_source_tc_dnats_test.go similarity index 77% rename from tencentcloud/data_source_tc_dnats_test.go rename to tencentcloud/services/vpc/data_source_tc_dnats_test.go index 5e4eef6cc4..2effc1a3af 100644 --- a/tencentcloud/data_source_tc_dnats_test.go +++ b/tencentcloud/services/vpc/data_source_tc_dnats_test.go @@ -1,30 +1,32 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNatGatewayTransRuleDataSource(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: testAccTencentCloudDataSourceDnatsBase, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_dnats.multi_dnats"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_dnats.multi_dnats"), resource.TestCheckResourceAttr("data.tencentcloud_dnats.multi_dnats", "dnat_list.#", "1"), - resource.TestCheckResourceAttr("data.tencentcloud_dnats.multi_dnats", "dnat_list.0.description", defaultInsName), + resource.TestCheckResourceAttr("data.tencentcloud_dnats.multi_dnats", "dnat_list.0.description", tcacctest.DefaultInsName), ), }, }, }) } -const testAccTencentCloudDataSourceDnatsBase = instanceCommonTestCase + ` +const testAccTencentCloudDataSourceDnatsBase = tcacctest.InstanceCommonTestCase + ` # Create EIP resource "tencentcloud_eip" "eip_dev_dnat" { name = var.instance_name diff --git a/tencentcloud/data_source_tc_enis.go b/tencentcloud/services/vpc/data_source_tc_enis.go similarity index 94% rename from tencentcloud/data_source_tc_enis.go rename to tencentcloud/services/vpc/data_source_tc_enis.go index 9bcdb536cf..9b2172dde6 100644 --- a/tencentcloud/data_source_tc_enis.go +++ b/tencentcloud/services/vpc/data_source_tc_enis.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "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 dataSourceTencentCloudEnis() *schema.Resource { +func DataSourceTencentCloudEnis() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudEnisRead, Schema: map[string]*schema.Schema{ @@ -175,11 +178,11 @@ func dataSourceTencentCloudEnis() *schema.Resource { } func dataSourceTencentCloudEnisRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_enis.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_enis.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ids []string @@ -285,7 +288,7 @@ func dataSourceTencentCloudEnisRead(d *schema.ResourceData, m interface{}) error d.SetId(helper.DataResourceIdsHash(eniIds)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), enis); err != nil { + if err := tccommon.WriteToFile(output.(string), enis); 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_enis_test.go b/tencentcloud/services/vpc/data_source_tc_enis_test.go similarity index 90% rename from tencentcloud/data_source_tc_enis_test.go rename to tencentcloud/services/vpc/data_source_tc_enis_test.go index 000baf3327..752d0a7d97 100644 --- a/tencentcloud/data_source_tc_enis_test.go +++ b/tencentcloud/services/vpc/data_source_tc_enis_test.go @@ -1,9 +1,12 @@ -package tencentcloud +package vpc_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,13 +14,13 @@ import ( func TestAccDataSourceTencentCloudEnis_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: TestAccDataSourceTencentCloudEnisBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.foo"), resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "ids.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.foo", "enis.0.id"), @@ -28,7 +31,7 @@ func TestAccDataSourceTencentCloudEnis_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.0.security_groups.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.0.primary", "false"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.foo", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.foo", "enis.0.create_time"), resource.TestCheckResourceAttr("data.tencentcloud_enis.foo", "enis.0.ipv4s.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.foo", "enis.0.ipv4s.0.ip"), @@ -43,13 +46,13 @@ func TestAccDataSourceTencentCloudEnis_basic(t *testing.T) { func TestAccDataSourceTencentCloudEnis_filter(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: TestAccDataSourceTencentCloudEnisFilter, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.vpc"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.vpc"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.vpc", "vpc_id"), resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.vpc", "enis.0.id"), @@ -60,7 +63,7 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.security_groups.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.primary", "false"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.vpc", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.vpc", "enis.0.create_time"), resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.tags.test", "test"), resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.ipv4s.#", "1"), @@ -68,7 +71,7 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.ipv4s.0.primary", "true"), resource.TestCheckResourceAttr("data.tencentcloud_enis.vpc", "enis.0.ipv4s.0.description", "eni desc"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.subnet"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.subnet"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.subnet", "subnet_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.subnet", "security_group"), resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.#", "1"), @@ -80,7 +83,7 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.security_groups.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.primary", "false"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.subnet", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.subnet", "enis.0.create_time"), resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.tags.test", "test"), resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.ipv4s.#", "1"), @@ -88,7 +91,7 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.ipv4s.0.primary", "true"), resource.TestCheckResourceAttr("data.tencentcloud_enis.subnet", "enis.0.ipv4s.0.description", "eni desc"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.name"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.name"), resource.TestCheckResourceAttr("data.tencentcloud_enis.name", "name", "ci-test-eni"), resource.TestMatchResourceAttr("data.tencentcloud_enis.name", "enis.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.id"), @@ -98,13 +101,13 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.subnet_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.primary"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.name", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.name", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.create_time"), resource.TestMatchResourceAttr("data.tencentcloud_enis.name", "enis.0.ipv4s.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.ipv4s.0.ip"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.name", "enis.0.ipv4s.0.primary"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.description"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.description"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "description"), resource.TestMatchResourceAttr("data.tencentcloud_enis.description", "enis.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.id"), @@ -114,13 +117,13 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.subnet_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.primary"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.description", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.description", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.create_time"), resource.TestMatchResourceAttr("data.tencentcloud_enis.description", "enis.0.ipv4s.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.ipv4s.0.ip"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.description", "enis.0.ipv4s.0.primary"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.ipv4"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.ipv4"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "ipv4"), resource.TestMatchResourceAttr("data.tencentcloud_enis.ipv4", "enis.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.id"), @@ -130,13 +133,13 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.subnet_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.primary"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.ipv4", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.ipv4", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.create_time"), resource.TestMatchResourceAttr("data.tencentcloud_enis.ipv4", "enis.0.ipv4s.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.ipv4s.0.ip"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.ipv4", "enis.0.ipv4s.0.primary"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_enis.tags"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_enis.tags"), resource.TestMatchResourceAttr("data.tencentcloud_enis.tags", "enis.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.name"), @@ -145,7 +148,7 @@ func TestAccDataSourceTencentCloudEnis_filter(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.subnet_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.primary"), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.mac"), - resource.TestCheckResourceAttr("data.tencentcloud_enis.tags", "enis.0.state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("data.tencentcloud_enis.tags", "enis.0.state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttrSet("data.tencentcloud_enis.tags", "enis.0.create_time"), resource.TestCheckResourceAttr("data.tencentcloud_enis.tags", "enis.0.tags.test", "test"), resource.TestMatchResourceAttr("data.tencentcloud_enis.tags", "enis.0.ipv4s.#", regexp.MustCompile(`^[1-9]\d*$`)), diff --git a/tencentcloud/data_source_tc_ha_vip_eip_attachments.go b/tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments.go similarity index 81% rename from tencentcloud/data_source_tc_ha_vip_eip_attachments.go rename to tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments.go index 2dcee51630..cb0a4844a2 100644 --- a/tencentcloud/data_source_tc_ha_vip_eip_attachments.go +++ b/tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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" "github.com/pkg/errors" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudHaVipEipAttachments() *schema.Resource { +func DataSourceTencentCloudHaVipEipAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudHaVipEipAttachmentsRead, @@ -54,9 +57,9 @@ func dataSourceTencentCloudHaVipEipAttachments() *schema.Resource { } func dataSourceTencentCloudHaVipEipAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ha_vip_eip_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ha_vip_eip_attachments.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) haVipId := d.Get("havip_id").(string) eip := d.Get("address_ip").(string) @@ -64,10 +67,10 @@ func dataSourceTencentCloudHaVipEipAttachmentsRead(d *schema.ResourceData, meta request := vpc.NewDescribeHaVipsRequest() request.HaVipIds = []*string{&haVipId} var response *vpc.DescribeHaVipsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(request) if e != nil { - return retryError(errors.WithStack(e)) + return tccommon.RetryError(errors.WithStack(e)) } response = result return nil @@ -101,7 +104,7 @@ func dataSourceTencentCloudHaVipEipAttachmentsRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), haVipEipAttachmentList); e != nil { + if e := tccommon.WriteToFile(output.(string), haVipEipAttachmentList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ha_vip_eip_attachments_test.go b/tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments_test.go similarity index 82% rename from tencentcloud/data_source_tc_ha_vip_eip_attachments_test.go rename to tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments_test.go index 8744184dc7..63ced969bd 100644 --- a/tencentcloud/data_source_tc_ha_vip_eip_attachments_test.go +++ b/tencentcloud/services/vpc/data_source_tc_ha_vip_eip_attachments_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudHaVipEipAttachmentsDataSource_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: testAccCheckHaVipEipAttachmentDestroy, Steps: []resource.TestStep{ { @@ -25,7 +27,7 @@ func TestAccTencentCloudHaVipEipAttachmentsDataSource_basic(t *testing.T) { }) } -const testAccHaVipEipAttachmentsDataSource_basic = defaultVpcVariable + ` +const testAccHaVipEipAttachmentsDataSource_basic = tcacctest.DefaultVpcVariable + ` #Create EIP resource "tencentcloud_eip" "eip" { name = "havip_eip" diff --git a/tencentcloud/data_source_tc_ha_vips.go b/tencentcloud/services/vpc/data_source_tc_ha_vips.go similarity index 88% rename from tencentcloud/data_source_tc_ha_vips.go rename to tencentcloud/services/vpc/data_source_tc_ha_vips.go index 6599f0f58d..618e4f6ea1 100644 --- a/tencentcloud/data_source_tc_ha_vips.go +++ b/tencentcloud/services/vpc/data_source_tc_ha_vips.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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" "github.com/pkg/errors" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudHaVips() *schema.Resource { +func DataSourceTencentCloudHaVips() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudHaVipsRead, @@ -18,7 +21,7 @@ func dataSourceTencentCloudHaVips() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the HA VIP. The length of character is limited to 1-60.", }, "id": { @@ -39,7 +42,7 @@ func dataSourceTencentCloudHaVips() *schema.Resource { "address_ip": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "EIP of the HA VIP to be queried.", }, "result_output_file": { @@ -113,9 +116,9 @@ func dataSourceTencentCloudHaVips() *schema.Resource { } func dataSourceTencentCloudHaVipsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ha_vips.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ha_vips.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewDescribeHaVipsRequest() @@ -150,10 +153,10 @@ func dataSourceTencentCloudHaVipsRead(d *schema.ResourceData, meta interface{}) request.Limit = &limit for { var response *vpc.DescribeHaVipsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeHaVips(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(request) if e != nil { - return retryError(errors.WithStack(e)) + return tccommon.RetryError(errors.WithStack(e)) } response = result return nil @@ -202,7 +205,7 @@ func dataSourceTencentCloudHaVipsRead(d *schema.ResourceData, meta interface{}) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), haVipList); e != nil { + if e := tccommon.WriteToFile(output.(string), haVipList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ha_vips_test.go b/tencentcloud/services/vpc/data_source_tc_ha_vips_test.go similarity index 77% rename from tencentcloud/data_source_tc_ha_vips_test.go rename to tencentcloud/services/vpc/data_source_tc_ha_vips_test.go index 8243ad8929..c263fd1020 100644 --- a/tencentcloud/data_source_tc_ha_vips_test.go +++ b/tencentcloud/services/vpc/data_source_tc_ha_vips_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudHaVipsDataSource(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: testAccTencentCloudHaVipsDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ha_vips.havips"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ha_vips.havips"), resource.TestCheckResourceAttr("data.tencentcloud_ha_vips.havips", "ha_vip_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_ha_vips.havips", "ha_vip_list.0.name", "terraform_test"), resource.TestCheckResourceAttrSet("data.tencentcloud_ha_vips.havips", "ha_vip_list.0.vpc_id"), @@ -29,7 +31,7 @@ func TestAccTencentCloudHaVipsDataSource(t *testing.T) { }) } -const testAccTencentCloudHaVipsDataSourceConfig_basic = defaultVpcVariable + ` +const testAccTencentCloudHaVipsDataSourceConfig_basic = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_ha_vip" "havip" { name = "terraform_test" vpc_id = var.vpc_id diff --git a/tencentcloud/data_source_tc_nat_dc_route.go b/tencentcloud/services/vpc/data_source_tc_nat_dc_route.go similarity index 85% rename from tencentcloud/data_source_tc_nat_dc_route.go rename to tencentcloud/services/vpc/data_source_tc_nat_dc_route.go index 60395b3534..e12d163872 100644 --- a/tencentcloud/data_source_tc_nat_dc_route.go +++ b/tencentcloud/services/vpc/data_source_tc_nat_dc_route.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudNatDcRoute() *schema.Resource { +func DataSourceTencentCloudNatDcRoute() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudNatDcRouteRead, Schema: map[string]*schema.Schema{ @@ -70,12 +73,12 @@ func dataSourceTencentCloudNatDcRoute() *schema.Resource { } func dataSourceTencentCloudNatDcRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_nat_dc_route.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_nat_dc_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("nat_gateway_id"); ok { @@ -86,14 +89,14 @@ func dataSourceTencentCloudNatDcRouteRead(d *schema.ResourceData, meta interface paramMap["VpcId"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var natDirectConnectGatewayRouteSet []*vpc.NatDirectConnectGatewayRoute - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeNatDcRouteByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } natDirectConnectGatewayRouteSet = result return nil @@ -139,7 +142,7 @@ func dataSourceTencentCloudNatDcRouteRead(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/services/vpc/data_source_tc_nat_dc_route_test.go b/tencentcloud/services/vpc/data_source_tc_nat_dc_route_test.go new file mode 100644 index 0000000000..a4f18ad371 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_nat_dc_route_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixNatDcRouteDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccNatDcRouteDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_nat_dc_route.nat_dc_route")), + }, + }, + }) +} + +const testAccNatDcRouteDataSource = ` + +data "tencentcloud_nat_dc_route" "nat_dc_route" { + nat_gateway_id = "nat-gnxkey2e" + vpc_id = "vpc-pyyv5k3v" +} +` diff --git a/tencentcloud/data_source_tc_nat_gateway_snats.go b/tencentcloud/services/vpc/data_source_tc_nat_gateway_snats.go similarity index 85% rename from tencentcloud/data_source_tc_nat_gateway_snats.go rename to tencentcloud/services/vpc/data_source_tc_nat_gateway_snats.go index 25daf0adbf..cac3a03ffd 100644 --- a/tencentcloud/data_source_tc_nat_gateway_snats.go +++ b/tencentcloud/services/vpc/data_source_tc_nat_gateway_snats.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "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 dataSourceTencentCloudNatGatewaySnats() *schema.Resource { +func DataSourceTencentCloudNatGatewaySnats() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudNatGatewaySnatRead, @@ -60,13 +63,13 @@ func dataSourceTencentCloudNatGatewaySnats() *schema.Resource { } func dataSourceTencentCloudNatGatewaySnatRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_nat_gateway_snats.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_nat_gateway_snats.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) natGatewayId = d.Get("nat_gateway_id").(string) - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) params := make(map[string]string) @@ -117,7 +120,7 @@ func dataSourceTencentCloudNatGatewaySnatRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), snatList); e != nil { + if e := tccommon.WriteToFile(output.(string), snatList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_nat_gateway_snats_test.go b/tencentcloud/services/vpc/data_source_tc_nat_gateway_snats_test.go similarity index 89% rename from tencentcloud/data_source_tc_nat_gateway_snats_test.go rename to tencentcloud/services/vpc/data_source_tc_nat_gateway_snats_test.go index 2d09999938..dad5193c70 100644 --- a/tencentcloud/data_source_tc_nat_gateway_snats_test.go +++ b/tencentcloud/services/vpc/data_source_tc_nat_gateway_snats_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNeedFixNatGatewaySnatsDataSource(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: testAccTencentCloudNatGatewaySnatsDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_nat_gateway_snats.snat"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_nat_gateway_snats.snat"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateway_snats.snat", "snat_list.#", "2"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateway_snats.snat", "snat_list.0.resource_type", "SUBNET"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateway_snats.snat", "snat_list.1.resource_type", "NETWORKINTERFACE"), diff --git a/tencentcloud/data_source_tc_nat_gateways.go b/tencentcloud/services/vpc/data_source_tc_nat_gateways.go similarity index 90% rename from tencentcloud/data_source_tc_nat_gateways.go rename to tencentcloud/services/vpc/data_source_tc_nat_gateways.go index 07aca3f821..9dcbf2c4ca 100644 --- a/tencentcloud/data_source_tc_nat_gateways.go +++ b/tencentcloud/services/vpc/data_source_tc_nat_gateways.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudNatGateways() *schema.Resource { +func DataSourceTencentCloudNatGateways() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudNatGatewaysRead, @@ -96,9 +99,9 @@ func dataSourceTencentCloudNatGateways() *schema.Resource { } func dataSourceTencentCloudNatGatewaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_nat_gateways.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_nat_gateways.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewDescribeNatGatewaysRequest() params := make(map[string]string) @@ -126,12 +129,12 @@ func dataSourceTencentCloudNatGatewaysRead(d *schema.ResourceData, meta interfac request.Limit = &limit for { var response *vpc.DescribeNatGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGateways(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGateways(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) } response = result return nil @@ -180,7 +183,7 @@ func dataSourceTencentCloudNatGatewaysRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), natList); e != nil { + if e := tccommon.WriteToFile(output.(string), natList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_nat_gateways_test.go b/tencentcloud/services/vpc/data_source_tc_nat_gateways_test.go similarity index 86% rename from tencentcloud/data_source_tc_nat_gateways_test.go rename to tencentcloud/services/vpc/data_source_tc_nat_gateways_test.go index 15ba7c0f32..06b0f49ffd 100644 --- a/tencentcloud/data_source_tc_nat_gateways_test.go +++ b/tencentcloud/services/vpc/data_source_tc_nat_gateways_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNatGatewaysDataSource(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: testAccTencentCloudNatGatewaysDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_nat_gateways.multi_nat"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_nat_gateways.multi_nat"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateways.multi_nat", "nats.#", "2"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateways.multi_nat", "nats.0.name", "terraform_test_nats"), resource.TestCheckResourceAttr("data.tencentcloud_nat_gateways.multi_nat", "nats.1.bandwidth", "500"), diff --git a/tencentcloud/data_source_tc_nats.go b/tencentcloud/services/vpc/data_source_tc_nats.go similarity index 91% rename from tencentcloud/data_source_tc_nats.go rename to tencentcloud/services/vpc/data_source_tc_nats.go index ba4e06ca3c..2a40c0b43d 100644 --- a/tencentcloud/data_source_tc_nats.go +++ b/tencentcloud/services/vpc/data_source_tc_nats.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudNats() *schema.Resource { +func DataSourceTencentCloudNats() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.18.0. Please use 'tencentcloud_nat_gateways' instead.", Read: dataSourceTencentCloudNatsRead, @@ -28,7 +31,7 @@ func dataSourceTencentCloudNats() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "The name for NAT Gateway.", }, "state": { @@ -101,9 +104,9 @@ func dataSourceTencentCloudNats() *schema.Resource { } func dataSourceTencentCloudNatsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_nats.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_nats.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewDescribeNatGatewaysRequest() request.Offset = helper.Uint64(0) request.Limit = helper.Uint64(100) @@ -129,12 +132,12 @@ func dataSourceTencentCloudNatsRead(d *schema.ResourceData, meta interface{}) er } var response *vpc.DescribeNatGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGateways(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGateways(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) } response = result return nil diff --git a/tencentcloud/data_source_tc_nats_test.go b/tencentcloud/services/vpc/data_source_tc_nats_test.go similarity index 86% rename from tencentcloud/data_source_tc_nats_test.go rename to tencentcloud/services/vpc/data_source_tc_nats_test.go index b2d4b5ee56..8eef9c0063 100644 --- a/tencentcloud/data_source_tc_nats_test.go +++ b/tencentcloud/services/vpc/data_source_tc_nats_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNatsDataSource(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: testAccTencentCloudNatsDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_nats.multi_nat"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_nats.multi_nat"), resource.TestCheckResourceAttr("data.tencentcloud_nats.multi_nat", "nats.#", "2"), resource.TestCheckResourceAttr("data.tencentcloud_nats.multi_nat", "nats.0.name", "terraform_test_nats"), resource.TestCheckResourceAttr("data.tencentcloud_nats.multi_nat", "nats.1.bandwidth", "500"), diff --git a/tencentcloud/data_source_tc_protocol_template_groups.go b/tencentcloud/services/vpc/data_source_tc_protocol_template_groups.go similarity index 83% rename from tencentcloud/data_source_tc_protocol_template_groups.go rename to tencentcloud/services/vpc/data_source_tc_protocol_template_groups.go index 02f05d575b..5ec83adb27 100644 --- a/tencentcloud/data_source_tc_protocol_template_groups.go +++ b/tencentcloud/services/vpc/data_source_tc_protocol_template_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudProtocolTemplateGroups() *schema.Resource { +func DataSourceTencentCloudProtocolTemplateGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudProtocolTemplateGroupsRead, @@ -64,10 +67,10 @@ func dataSourceTencentCloudProtocolTemplateGroups() *schema.Resource { } func dataSourceTencentCloudProtocolTemplateGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_protocol_template_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_protocol_template_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) var name, templateId string var filters = make([]*vpc.Filter, 0) @@ -81,14 +84,14 @@ func dataSourceTencentCloudProtocolTemplateGroupsRead(d *schema.ResourceData, me filters = append(filters, &vpc.Filter{Name: helper.String("service-template-group-id"), Values: []*string{&templateId}}) } - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error groups, outErr := vpcService.DescribeServiceTemplateGroups(ctx, filters) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { groups, inErr = vpcService.DescribeServiceTemplateGroups(ctx, filters) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -117,7 +120,7 @@ func dataSourceTencentCloudProtocolTemplateGroupsRead(d *schema.ResourceData, me output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), templateGroupList); e != nil { + if e := tccommon.WriteToFile(output.(string), templateGroupList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_protocol_template_groups_test.go b/tencentcloud/services/vpc/data_source_tc_protocol_template_groups_test.go similarity index 87% rename from tencentcloud/data_source_tc_protocol_template_groups_test.go rename to tencentcloud/services/vpc/data_source_tc_protocol_template_groups_test.go index 0364fda62d..999db0d99e 100644 --- a/tencentcloud/data_source_tc_protocol_template_groups_test.go +++ b/tencentcloud/services/vpc/data_source_tc_protocol_template_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 testDataProtocolTemplateGroupsNameAll = "data.tencentcloud_protocol_template func TestAccTencentCloudDataProtocolTemplateGroups(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: testAccCheckProtocolTemplateGroupDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_protocol_templates.go b/tencentcloud/services/vpc/data_source_tc_protocol_templates.go similarity index 82% rename from tencentcloud/data_source_tc_protocol_templates.go rename to tencentcloud/services/vpc/data_source_tc_protocol_templates.go index e21f5c4793..965fda0d17 100644 --- a/tencentcloud/data_source_tc_protocol_templates.go +++ b/tencentcloud/services/vpc/data_source_tc_protocol_templates.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudProtocolTemplates() *schema.Resource { +func DataSourceTencentCloudProtocolTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudProtocolTemplatesRead, @@ -64,10 +67,10 @@ func dataSourceTencentCloudProtocolTemplates() *schema.Resource { } func dataSourceTencentCloudProtocolTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_protocol_templates.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_protocol_templates.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var name, templateId string var filters = make([]*vpc.Filter, 0) @@ -81,14 +84,14 @@ func dataSourceTencentCloudProtocolTemplatesRead(d *schema.ResourceData, meta in filters = append(filters, &vpc.Filter{Name: helper.String("service-template-id"), Values: []*string{&templateId}}) } - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var outErr, inErr error templates, outErr := vpcService.DescribeServiceTemplates(ctx, filters) if outErr != nil { - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { templates, inErr = vpcService.DescribeServiceTemplates(ctx, filters) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -117,7 +120,7 @@ func dataSourceTencentCloudProtocolTemplatesRead(d *schema.ResourceData, meta in output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), templateList); e != nil { + if e := tccommon.WriteToFile(output.(string), templateList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_protocol_templates_test.go b/tencentcloud/services/vpc/data_source_tc_protocol_templates_test.go similarity index 85% rename from tencentcloud/data_source_tc_protocol_templates_test.go rename to tencentcloud/services/vpc/data_source_tc_protocol_templates_test.go index 2f4216114f..0745142363 100644 --- a/tencentcloud/data_source_tc_protocol_templates_test.go +++ b/tencentcloud/services/vpc/data_source_tc_protocol_templates_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 testDataProtocolTemplatesNameAll = "data.tencentcloud_protocol_templates.all func TestAccTencentCloudDataProtocolTemplates(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: testAccCheckProtocolTemplateDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_route_table.go b/tencentcloud/services/vpc/data_source_tc_route_table.go similarity index 89% rename from tencentcloud/data_source_tc_route_table.go rename to tencentcloud/services/vpc/data_source_tc_route_table.go index d00f2c425e..57680ec055 100644 --- a/tencentcloud/data_source_tc_route_table.go +++ b/tencentcloud/services/vpc/data_source_tc_route_table.go @@ -1,14 +1,16 @@ -package tencentcloud +package vpc import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudRouteTable() *schema.Resource { +func DataSourceTencentCloudRouteTable() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.10.0. Please use 'tencentcloud_vpc_route_tables' instead.", Read: dataSourceTencentCloudRouteTableRead, @@ -80,11 +82,11 @@ func dataSourceTencentCloudRouteTable() *schema.Resource { } func dataSourceTencentCloudRouteTableRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_route_table.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_route_table.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( routeTableId string diff --git a/tencentcloud/services/vpc/data_source_tc_route_table_test.go b/tencentcloud/services/vpc/data_source_tc_route_table_test.go new file mode 100644 index 0000000000..aebd671a57 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_route_table_test.go @@ -0,0 +1,101 @@ +package vpc_test + +import ( + "context" + "fmt" + "log" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func init() { + resource.AddTestSweepers("tencentcloud_route_table", &resource.Sweeper{ + Name: "tencentcloud_route_table", + F: testSweepRouteTable, + }) +} + +func testSweepRouteTable(region string) error { + 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.(tccommon.ProviderMeta) + + vpcService := svcvpc.NewVpcService(client.GetAPIV3Conn()) + + instances, err := vpcService.DescribeRouteTables(ctx, "", "", "", nil, nil, "") + if err != nil { + return fmt.Errorf("get instance list error: %s", err.Error()) + } + + for _, v := range instances { + + instanceId := v.RouteTableId() + instanceName := v.Name() + now := time.Now() + createTime := tccommon.StringToTime(v.CreateTime()) + interval := now.Sub(createTime).Minutes() + + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { + continue + } + + if tccommon.NeedProtect == 1 && int64(interval) < 30 { + continue + } + + if err = vpcService.DeleteRouteTable(ctx, instanceId); err != nil { + log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error()) + } + } + + return nil +} + +func TestAccDataSourceTencentCloudRouteTable_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceTencentCloudRouteTableConfig, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_route_table.foo"), + resource.TestCheckResourceAttr("data.tencentcloud_route_table.foo", "name", "tf-ci-test"), + ), + }, + }, + }) +} + +const testAccDataSourceTencentCloudRouteTableConfig = ` +variable "availability_zone" { + default = "ap-guangzhou-3" +} + +resource "tencentcloud_vpc" "foo" { + name = "tf-ci-test" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_route_table" "route_table" { + vpc_id = tencentcloud_vpc.foo.id + name = "tf-ci-test" +} + +data "tencentcloud_route_table" "foo" { + route_table_id = tencentcloud_route_table.route_table.id +} +` diff --git a/tencentcloud/data_source_tc_security_group.go b/tencentcloud/services/vpc/data_source_tc_security_group.go similarity index 84% rename from tencentcloud/data_source_tc_security_group.go rename to tencentcloud/services/vpc/data_source_tc_security_group.go index f86fc8656a..5e152eca3a 100644 --- a/tencentcloud/data_source_tc_security_group.go +++ b/tencentcloud/services/vpc/data_source_tc_security_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "context" @@ -6,11 +6,13 @@ import ( "fmt" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" ) -func dataSourceTencentCloudSecurityGroup() *schema.Resource { +func DataSourceTencentCloudSecurityGroup() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.14.0. Please use 'tencentcloud_security_groups' instead.", Read: dataSourceTencentCloudSecurityGroupRead, @@ -24,7 +26,7 @@ func dataSourceTencentCloudSecurityGroup() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), ConflictsWith: []string{"security_group_id"}, Description: "Name of the security group to be queried. Conflict with `security_group_id`.", }, @@ -53,12 +55,12 @@ func dataSourceTencentCloudSecurityGroup() *schema.Resource { } func dataSourceTencentCloudSecurityGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_security_group.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_security_group.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() vpcService := VpcService{client: client} var ( diff --git a/tencentcloud/data_source_tc_security_group_test.go b/tencentcloud/services/vpc/data_source_tc_security_group_test.go similarity index 80% rename from tencentcloud/data_source_tc_security_group_test.go rename to tencentcloud/services/vpc/data_source_tc_security_group_test.go index c5cc2ed5bd..2bdfd3d654 100644 --- a/tencentcloud/data_source_tc_security_group_test.go +++ b/tencentcloud/services/vpc/data_source_tc_security_group_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudSecurityGroup_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: TestAccDataSourceTencentCloudSecurityGroupConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_group.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_group.foo"), resource.TestCheckResourceAttr("data.tencentcloud_security_group.foo", "name", "tf-ci-test"), resource.TestCheckResourceAttr("data.tencentcloud_security_group.foo", "description", "terraform-ci-test"), resource.TestCheckResourceAttr("data.tencentcloud_security_group.foo", "be_associate_count", "0"), diff --git a/tencentcloud/data_source_tc_security_groups.go b/tencentcloud/services/vpc/data_source_tc_security_groups.go similarity index 91% rename from tencentcloud/data_source_tc_security_groups.go rename to tencentcloud/services/vpc/data_source_tc_security_groups.go index b751aed973..fa49d121a0 100644 --- a/tencentcloud/data_source_tc_security_groups.go +++ b/tencentcloud/services/vpc/data_source_tc_security_groups.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "errors" "fmt" @@ -11,10 +14,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudSecurityGroups() *schema.Resource { +func DataSourceTencentCloudSecurityGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudSecurityGroupsRead, Schema: map[string]*schema.Schema{ @@ -27,7 +31,7 @@ func dataSourceTencentCloudSecurityGroups() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), ConflictsWith: []string{"security_group_id"}, Description: "Name of the security group to be queried. Conflict with `security_group_id`.", }, @@ -111,14 +115,14 @@ func dataSourceTencentCloudSecurityGroups() *schema.Resource { } func dataSourceTencentCloudSecurityGroupsRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("data_source.tencentcloud_security_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_security_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) - client := m.(*TencentCloudClient).apiV3Conn + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region var ( @@ -244,7 +248,7 @@ func dataSourceTencentCloudSecurityGroupsRead(d *schema.ResourceData, m interfac d.SetId(idBuilder.String()) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), sgInstances); err != nil { + if err := tccommon.WriteToFile(output.(string), sgInstances); 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_security_groups_test.go b/tencentcloud/services/vpc/data_source_tc_security_groups_test.go similarity index 81% rename from tencentcloud/data_source_tc_security_groups_test.go rename to tencentcloud/services/vpc/data_source_tc_security_groups_test.go index 498848911d..b8d4c11ed2 100644 --- a/tencentcloud/data_source_tc_security_groups_test.go +++ b/tencentcloud/services/vpc/data_source_tc_security_groups_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vpc_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudSecurityGroups_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: TestAccDataSourceTencentCloudSecurityGroupsConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.0.name", "ci-temp-security-groups-test"), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.0.description", "ci-temp-security-groups-test"), @@ -32,13 +34,13 @@ func TestAccDataSourceTencentCloudSecurityGroups_basic(t *testing.T) { func TestAccDataSourceTencentCloudSecurityGroups_searchByName(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: TestAccDataSourceTencentCloudSecurityGroupsConfigSearchByName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), resource.TestMatchResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.#", regexp.MustCompile(`^[1-9]\d*$`)), ), }, @@ -49,14 +51,14 @@ func TestAccDataSourceTencentCloudSecurityGroups_searchByName(t *testing.T) { func TestAccDataSourceTencentCloudSecurityGroups_emptyResult(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: TestAccDataSourceTencentCloudSecurityGroupsConfigEmptyResult, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.bar"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.bar"), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.#", "0"), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.bar", "security_groups.#", "0"), ), @@ -68,13 +70,13 @@ func TestAccDataSourceTencentCloudSecurityGroups_emptyResult(t *testing.T) { func TestAccDataSourceTencentCloudSecurityGroups_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: TestAccDataSourceTencentCloudSecurityGroupsTags, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), resource.TestMatchResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.0.tags.test", "test"), ), @@ -85,13 +87,13 @@ func TestAccDataSourceTencentCloudSecurityGroups_tags(t *testing.T) { func TestAccDataSourceTencentCloudSecurityGroups_searchByProjectId(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: TestAccDataSourceTencentCloudSecurityGroupsConfigSearchByProjectId, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_security_groups.foo"), resource.TestMatchResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttr("data.tencentcloud_security_groups.foo", "security_groups.0.project_id", "0"), ), diff --git a/tencentcloud/data_source_tc_subnet.go b/tencentcloud/services/vpc/data_source_tc_subnet.go similarity index 80% rename from tencentcloud/data_source_tc_subnet.go rename to tencentcloud/services/vpc/data_source_tc_subnet.go index 0313f1b806..38e6f17603 100644 --- a/tencentcloud/data_source_tc_subnet.go +++ b/tencentcloud/services/vpc/data_source_tc_subnet.go @@ -1,13 +1,15 @@ -package tencentcloud +package vpc import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudSubnet() *schema.Resource { +func DataSourceTencentCloudSubnet() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.10.0. Please use 'tencentcloud_vpc_subnets' instead.", Read: dataSourceTencentCloudSubnetRead, @@ -48,11 +50,11 @@ func dataSourceTencentCloudSubnet() *schema.Resource { } func dataSourceTencentCloudSubnetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_subnet.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_subnet.read")() - 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()} vpcId := d.Get("vpc_id").(string) subnetId := d.Get("subnet_id").(string) diff --git a/tencentcloud/data_source_tc_subnet_test.go b/tencentcloud/services/vpc/data_source_tc_subnet_test.go similarity index 80% rename from tencentcloud/data_source_tc_subnet_test.go rename to tencentcloud/services/vpc/data_source_tc_subnet_test.go index fc03cbbd75..a1fdcca4ec 100644 --- a/tencentcloud/data_source_tc_subnet_test.go +++ b/tencentcloud/services/vpc/data_source_tc_subnet_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudSubnet_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: TestAccDataSourceTencentCloudSubnetConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_subnet.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_subnet.foo"), resource.TestCheckResourceAttr("data.tencentcloud_subnet.foo", "name", "tf-ci-test"), resource.TestCheckResourceAttr("data.tencentcloud_subnet.foo", "availability_zone", "ap-guangzhou-3"), ), diff --git a/tencentcloud/data_source_tc_vpc.go b/tencentcloud/services/vpc/data_source_tc_vpc.go similarity index 81% rename from tencentcloud/data_source_tc_vpc.go rename to tencentcloud/services/vpc/data_source_tc_vpc.go index 4e5ff52263..7beb1d42fe 100644 --- a/tencentcloud/data_source_tc_vpc.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc.go @@ -1,13 +1,15 @@ -package tencentcloud +package vpc import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudVpc() *schema.Resource { +func DataSourceTencentCloudVpc() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.10.0. Please use 'tencentcloud_vpc_instances' instead.", Read: dataSourceTencentCloudVpcRead, @@ -45,11 +47,11 @@ func dataSourceTencentCloudVpc() *schema.Resource { } func dataSourceTencentCloudVpcRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( vpcId string diff --git a/tencentcloud/data_source_tc_vpc_account_attributes.go b/tencentcloud/services/vpc/data_source_tc_vpc_account_attributes.go similarity index 77% rename from tencentcloud/data_source_tc_vpc_account_attributes.go rename to tencentcloud/services/vpc/data_source_tc_vpc_account_attributes.go index d283992251..d542f05ab7 100644 --- a/tencentcloud/data_source_tc_vpc_account_attributes.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_account_attributes.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcAccountAttributes() *schema.Resource { +func DataSourceTencentCloudVpcAccountAttributes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcAccountAttributesRead, Schema: map[string]*schema.Schema{ @@ -46,21 +49,21 @@ func dataSourceTencentCloudVpcAccountAttributes() *schema.Resource { } func dataSourceTencentCloudVpcAccountAttributesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_account_attributes.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_account_attributes.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 accountAttributeSet []*vpc.AccountAttribute - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcAccountAttributes(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accountAttributeSet = result return nil @@ -94,7 +97,7 @@ func dataSourceTencentCloudVpcAccountAttributesRead(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/services/vpc/data_source_tc_vpc_account_attributes_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_account_attributes_test.go new file mode 100644 index 0000000000..66920bf781 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_account_attributes_test.go @@ -0,0 +1,31 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcAccountAttributesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcAccountAttributesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_account_attributes.account_attributes")), + }, + }, + }) +} + +const testAccVpcAccountAttributesDataSource = ` + +data "tencentcloud_vpc_account_attributes" "account_attributes" {} + +` diff --git a/tencentcloud/data_source_tc_vpc_acls.go b/tencentcloud/services/vpc/data_source_tc_vpc_acls.go similarity index 91% rename from tencentcloud/data_source_tc_vpc_acls.go rename to tencentcloud/services/vpc/data_source_tc_vpc_acls.go index 9a114f55b9..380e28f7a2 100644 --- a/tencentcloud/data_source_tc_vpc_acls.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_acls.go @@ -1,14 +1,17 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcAcls() *schema.Resource { +func DataSourceTencentCloudVpcAcls() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcACLRead, @@ -16,19 +19,19 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource { "vpc_id": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "ID of the VPC instance.", }, "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 60), Description: "Name of the network ACL.", }, "id": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "ID of the network ACL instance.", }, "result_output_file": { @@ -172,11 +175,11 @@ func dataSourceTencentCloudVpcAcls() *schema.Resource { } func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_acls.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_acls.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} vpcID = d.Get("vpc_id").(string) name = d.Get("name").(string) @@ -262,7 +265,7 @@ func dataSourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), aclList); err != nil { + if err := tccommon.WriteToFile(output.(string), aclList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_vpc_acls_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_acls_test.go similarity index 75% rename from tencentcloud/data_source_tc_vpc_acls_test.go rename to tencentcloud/services/vpc/data_source_tc_vpc_acls_test.go index 23f9caa551..0399dafe5e 100644 --- a/tencentcloud/data_source_tc_vpc_acls_test.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_acls_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVpcACL_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: TestAccDataSourceTencentCloudVpcACLInstances, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_acls.default"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_acls.default"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_acls.default", "name", "test_acl"), ), }, diff --git a/tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage.go b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage.go similarity index 79% rename from tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage.go rename to tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage.go index 6c5e407c82..a418ec02ca 100644 --- a/tencentcloud/data_source_tc_vpc_bandwidth_package_bill_usage.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudVpcBandwidthPackageBillUsage() *schema.Resource { +func DataSourceTencentCloudVpcBandwidthPackageBillUsage() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcBandwidthPackageBillUsageRead, Schema: map[string]*schema.Schema{ @@ -45,26 +48,26 @@ func dataSourceTencentCloudVpcBandwidthPackageBillUsage() *schema.Resource { } func dataSourceTencentCloudVpcBandwidthPackageBillUsageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_bandwidth_package_bill_usage.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_bandwidth_package_bill_usage.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("bandwidth_package_id"); ok { paramMap["BandwidthPackageId"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var bandwidthPackageBillBandwidthSet []*vpc.BandwidthPackageBillBandwidth - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcBandwidthPackageBillUsageByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } bandwidthPackageBillBandwidthSet = result return nil @@ -94,7 +97,7 @@ func dataSourceTencentCloudVpcBandwidthPackageBillUsageRead(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/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage_test.go new file mode 100644 index 0000000000..8b7b00cb78 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_bill_usage_test.go @@ -0,0 +1,42 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcBandwidthPackageBillUsageDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcBandwidthPackageBillUsageDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_bandwidth_package_bill_usage.bandwidth_package_bill_usage")), + }, + }, + }) +} + +const testAccVpcBandwidthPackageBillUsageDataSource = ` + +resource "tencentcloud_vpc_bandwidth_package" "bandwidth_package" { + network_type = "BGP" + charge_type = "TOP5_POSTPAID_BY_MONTH" + bandwidth_package_name = "iac-test-data" + tags = { + "createdBy" = "terraform" + } +} + +data "tencentcloud_vpc_bandwidth_package_bill_usage" "bandwidth_package_bill_usage" { + bandwidth_package_id = tencentcloud_vpc_bandwidth_package.bandwidth_package.id +} + +` diff --git a/tencentcloud/data_source_tc_vpc_bandwidth_package_quota.go b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_quota.go similarity index 76% rename from tencentcloud/data_source_tc_vpc_bandwidth_package_quota.go rename to tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_quota.go index 40934194c4..528dfa5397 100644 --- a/tencentcloud/data_source_tc_vpc_bandwidth_package_quota.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_quota.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcBandwidthPackageQuota() *schema.Resource { +func DataSourceTencentCloudVpcBandwidthPackageQuota() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcBandwidthPackageQuotaRead, Schema: map[string]*schema.Schema{ @@ -48,21 +51,21 @@ func dataSourceTencentCloudVpcBandwidthPackageQuota() *schema.Resource { } func dataSourceTencentCloudVpcBandwidthPackageQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_bandwidth_package_quota.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_bandwidth_package_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.DescribeVpcBandwidthPackageQuota(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } quotaSet = result return nil @@ -100,7 +103,7 @@ func dataSourceTencentCloudVpcBandwidthPackageQuotaRead(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/services/vpc/data_source_tc_vpc_bandwidth_package_quota_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_quota_test.go new file mode 100644 index 0000000000..a4d1cf2686 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_bandwidth_package_quota_test.go @@ -0,0 +1,32 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcBandwidthPackageQuotaDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcBandwidthPackageQuotaDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_bandwidth_package_quota.bandwidth_package_quota")), + }, + }, + }) +} + +const testAccVpcBandwidthPackageQuotaDataSource = ` + +data "tencentcloud_vpc_bandwidth_package_quota" "bandwidth_package_quota" { + } + +` diff --git a/tencentcloud/data_source_tc_vpc_classic_link_instances.go b/tencentcloud/services/vpc/data_source_tc_vpc_classic_link_instances.go similarity index 84% rename from tencentcloud/data_source_tc_vpc_classic_link_instances.go rename to tencentcloud/services/vpc/data_source_tc_vpc_classic_link_instances.go index 535a31c85d..8d2ff3812f 100644 --- a/tencentcloud/data_source_tc_vpc_classic_link_instances.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_classic_link_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcClassicLinkInstances() *schema.Resource { +func DataSourceTencentCloudVpcClassicLinkInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcClassicLinkInstancesRead, Schema: map[string]*schema.Schema{ @@ -66,12 +69,12 @@ func dataSourceTencentCloudVpcClassicLinkInstances() *schema.Resource { } func dataSourceTencentCloudVpcClassicLinkInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_classic_link_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_classic_link_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("filters"); ok { @@ -94,14 +97,14 @@ func dataSourceTencentCloudVpcClassicLinkInstancesRead(d *schema.ResourceData, m paramMap["Filters"] = tmpSet } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var classicLinkInstanceSet []*vpc.ClassicLinkInstance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcClassicLinkInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } classicLinkInstanceSet = result return nil @@ -135,7 +138,7 @@ func dataSourceTencentCloudVpcClassicLinkInstancesRead(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/services/vpc/data_source_tc_vpc_classic_link_instances_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_classic_link_instances_test.go new file mode 100644 index 0000000000..f871843aff --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_classic_link_instances_test.go @@ -0,0 +1,36 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcClassicLinkInstancesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcClassicLinkInstancesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_classic_link_instances.classic_link_instances")), + }, + }, + }) +} + +const testAccVpcClassicLinkInstancesDataSource = ` + +data "tencentcloud_vpc_classic_link_instances" "classic_link_instances" { + filters { + name = "vpc-id" + values = ["vpc-lh4nqig9"] + } +} + +` diff --git a/tencentcloud/data_source_tc_vpc_cvm_instances.go b/tencentcloud/services/vpc/data_source_tc_vpc_cvm_instances.go similarity index 90% rename from tencentcloud/data_source_tc_vpc_cvm_instances.go rename to tencentcloud/services/vpc/data_source_tc_vpc_cvm_instances.go index 34431b7a83..a9dc6fa17c 100644 --- a/tencentcloud/data_source_tc_vpc_cvm_instances.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_cvm_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcCvmInstances() *schema.Resource { +func DataSourceTencentCloudVpcCvmInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcCvmInstancesRead, Schema: map[string]*schema.Schema{ @@ -116,12 +119,12 @@ func dataSourceTencentCloudVpcCvmInstances() *schema.Resource { } func dataSourceTencentCloudVpcCvmInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_cvm_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_cvm_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("filters"); ok { @@ -144,14 +147,14 @@ func dataSourceTencentCloudVpcCvmInstancesRead(d *schema.ResourceData, meta inte paramMap["Filters"] = tmpSet } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceSet []*vpc.CvmInstance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcCvmInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceSet = result return nil @@ -225,7 +228,7 @@ func dataSourceTencentCloudVpcCvmInstancesRead(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/services/vpc/data_source_tc_vpc_cvm_instances_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_cvm_instances_test.go new file mode 100644 index 0000000000..739734a713 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_cvm_instances_test.go @@ -0,0 +1,35 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcCvmInstancesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcCvmInstancesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_cvm_instances.cvm_instances")), + }, + }, + }) +} + +const testAccVpcCvmInstancesDataSource = ` + +data "tencentcloud_vpc_cvm_instances" "cvm_instances" { + filters { + name = "vpc-id" + values = ["vpc-lh4nqig9"] + } +} +` diff --git a/tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail.go b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_monitor_detail.go similarity index 88% rename from tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail.go rename to tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_monitor_detail.go index 8f84da0894..5687ea6ecc 100644 --- a/tencentcloud/data_source_tc_vpc_gateway_flow_monitor_detail.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_monitor_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcGatewayFlowMonitorDetail() *schema.Resource { +func DataSourceTencentCloudVpcGatewayFlowMonitorDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcGatewayFlowMonitorDetailRead, Schema: map[string]*schema.Schema{ @@ -100,12 +103,12 @@ func dataSourceTencentCloudVpcGatewayFlowMonitorDetail() *schema.Resource { } func dataSourceTencentCloudVpcGatewayFlowMonitorDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_gateway_flow_monitor_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_gateway_flow_monitor_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("time_point"); ok { @@ -136,14 +139,14 @@ func dataSourceTencentCloudVpcGatewayFlowMonitorDetailRead(d *schema.ResourceDat paramMap["OrderDirection"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var gatewayFlowMonitorDetailSet []*vpc.GatewayFlowMonitorDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcGatewayFlowMonitorDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } gatewayFlowMonitorDetailSet = result return nil @@ -189,7 +192,7 @@ func dataSourceTencentCloudVpcGatewayFlowMonitorDetailRead(d *schema.ResourceDat 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/vpc/data_source_tc_vpc_gateway_flow_monitor_detail_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_monitor_detail_test.go new file mode 100644 index 0000000000..b3229b586a --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_monitor_detail_test.go @@ -0,0 +1,36 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcGatewayFlowMonitorDetailDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcGatewayFlowMonitorDetailDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_gateway_flow_monitor_detail.gateway_flow_monitor_detail")), + }, + }, + }) +} + +const testAccVpcGatewayFlowMonitorDetailDataSource = ` + +data "tencentcloud_vpc_gateway_flow_monitor_detail" "gateway_flow_monitor_detail" { + time_point = "2023-06-02 12:15:20" + vpn_id = "vpngw-gt8bianl" + order_field = "OutTraffic" + order_direction = "DESC" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_gateway_flow_qos.go b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_qos.go similarity index 83% rename from tencentcloud/data_source_tc_vpc_gateway_flow_qos.go rename to tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_qos.go index af00dbd07d..9cb9b214a0 100644 --- a/tencentcloud/data_source_tc_vpc_gateway_flow_qos.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_qos.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcGatewayFlowQos() *schema.Resource { +func DataSourceTencentCloudVpcGatewayFlowQos() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcGatewayFlowQosRead, Schema: map[string]*schema.Schema{ @@ -68,12 +71,12 @@ func dataSourceTencentCloudVpcGatewayFlowQos() *schema.Resource { } func dataSourceTencentCloudVpcGatewayFlowQosRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_gateway_flow_qos.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_gateway_flow_qos.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("gateway_id"); ok { @@ -85,14 +88,14 @@ func dataSourceTencentCloudVpcGatewayFlowQosRead(d *schema.ResourceData, meta in paramMap["IpAddresses"] = helper.InterfacesStringsPoint(ipAddressesSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var gatewayQosSet []*vpc.GatewayQos - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcGatewayFlowQosByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } gatewayQosSet = result return nil @@ -134,7 +137,7 @@ func dataSourceTencentCloudVpcGatewayFlowQosRead(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/services/vpc/data_source_tc_vpc_gateway_flow_qos_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_qos_test.go new file mode 100644 index 0000000000..747bff2729 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_gateway_flow_qos_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcGatewayFlowQosDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcGatewayFlowQosDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_gateway_flow_qos.gateway_flow_qos")), + }, + }, + }) +} + +const testAccVpcGatewayFlowQosDataSource = ` + +data "tencentcloud_vpc_gateway_flow_qos" "gateway_flow_qos" { + gateway_id = "vpngw-gt8bianl" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_instances.go b/tencentcloud/services/vpc/data_source_tc_vpc_instances.go similarity index 89% rename from tencentcloud/data_source_tc_vpc_instances.go rename to tencentcloud/services/vpc/data_source_tc_vpc_instances.go index cc1553b603..19e07ecc29 100644 --- a/tencentcloud/data_source_tc_vpc_instances.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_instances.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "context" @@ -8,12 +8,15 @@ 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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudVpcInstances() *schema.Resource { +func DataSourceTencentCloudVpcInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcInstancesRead, @@ -119,12 +122,12 @@ func dataSourceTencentCloudVpcInstances() *schema.Resource { } func dataSourceTencentCloudVpcInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_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 ( vpcId string @@ -154,10 +157,10 @@ func dataSourceTencentCloudVpcInstancesRead(d *schema.ResourceData, meta interfa vpcInfos []VpcBasicInfo err error ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { vpcInfos, err = service.DescribeVpcs(ctx, vpcId, name, tags, isDefault, tagKey, cidrBlock) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -228,7 +231,7 @@ func dataSourceTencentCloudVpcInstancesRead(d *schema.ResourceData, meta interfa d.SetId(id) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), vpcInfoList); err != nil { + if err := tccommon.WriteToFile(output.(string), vpcInfoList); 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_vpc_instances_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_instances_test.go similarity index 89% rename from tencentcloud/data_source_tc_vpc_instances_test.go rename to tencentcloud/services/vpc/data_source_tc_vpc_instances_test.go index ecd50aefac..343eececc2 100644 --- a/tencentcloud/data_source_tc_vpc_instances_test.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_instances_test.go @@ -1,24 +1,26 @@ -package tencentcloud +package vpc_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVpcV3Instances_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: TestAccDataSourceTencentCloudVpcInstances, Check: resource.ComposeTestCheckFunc( // id filter - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.id_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.id_instances"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.id_instances", "instance_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.id_instances", "instance_list.0.name", "guagua_vpc_instance_test"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.id_instances", "instance_list.0.cidr_block", "10.0.0.0/16"), @@ -31,7 +33,7 @@ func TestAccDataSourceTencentCloudVpcV3Instances_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.id_instances", "instance_list.0.tags.test", "test"), // name filter ,Every VPC with a "guagua_vpc_instance_test" name will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.name_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.name_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.name_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.name_instances", "instance_list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.name_instances", "instance_list.0.cidr_block"), @@ -43,7 +45,7 @@ func TestAccDataSourceTencentCloudVpcV3Instances_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.name_instances", "instance_list.0.create_time"), // tag filter ,Every VPC with a tag test:test will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.tags_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.tags_instances"), resource.TestMatchResourceAttr("data.tencentcloud_vpc_instances.tags_instances", "instance_list.#", regexp.MustCompile(`^[1-9]\d*$`)), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.tags_instances", "instance_list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.tags_instances", "instance_list.0.cidr_block"), @@ -56,7 +58,7 @@ func TestAccDataSourceTencentCloudVpcV3Instances_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.tags_instances", "instance_list.0.tags.test", "test"), // cidr filter ,Every VPC with "10.0.0.0/16" cidr will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.cidr_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_instances.cidr_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_instances.cidr_instances", "instance_list.#"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_instances.cidr_instances", "instance_list.0.cidr_block", "10.0.0.0/16"), ), diff --git a/tencentcloud/data_source_tc_vpc_limits.go b/tencentcloud/services/vpc/data_source_tc_vpc_limits.go similarity index 78% rename from tencentcloud/data_source_tc_vpc_limits.go rename to tencentcloud/services/vpc/data_source_tc_vpc_limits.go index 68a3d0fc92..0480c461c1 100644 --- a/tencentcloud/data_source_tc_vpc_limits.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_limits.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcLimits() *schema.Resource { +func DataSourceTencentCloudVpcLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcLimitsRead, Schema: map[string]*schema.Schema{ @@ -52,12 +55,12 @@ func dataSourceTencentCloudVpcLimits() *schema.Resource { } func dataSourceTencentCloudVpcLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_limits.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_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("limit_types"); ok { @@ -65,14 +68,14 @@ func dataSourceTencentCloudVpcLimitsRead(d *schema.ResourceData, meta interface{ paramMap["LimitTypes"] = helper.InterfacesStringsPoint(limitTypesSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var vpcLimitSet []*vpc.VpcLimit - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcLimitsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } vpcLimitSet = result return nil @@ -106,7 +109,7 @@ func dataSourceTencentCloudVpcLimitsRead(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/services/vpc/data_source_tc_vpc_limits_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_limits_test.go new file mode 100644 index 0000000000..e44d5bb4d8 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_limits_test.go @@ -0,0 +1,32 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcLimitsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcLimitsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_limits.limits")), + }, + }, + }) +} + +const testAccVpcLimitsDataSource = ` + +data "tencentcloud_vpc_limits" "limits" { + limit_types = ["appid-max-vpcs", "vpc-max-subnets"] +} +` diff --git a/tencentcloud/data_source_tc_vpc_net_detect_state_check.go b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_state_check.go similarity index 90% rename from tencentcloud/data_source_tc_vpc_net_detect_state_check.go rename to tencentcloud/services/vpc/data_source_tc_vpc_net_detect_state_check.go index 13bedfa900..a2fa4136c7 100644 --- a/tencentcloud/data_source_tc_vpc_net_detect_state_check.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_state_check.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcNetDetectStateCheck() *schema.Resource { +func DataSourceTencentCloudVpcNetDetectStateCheck() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcNetDetectStateCheckRead, Schema: map[string]*schema.Schema{ @@ -98,12 +101,12 @@ func dataSourceTencentCloudVpcNetDetectStateCheck() *schema.Resource { } func dataSourceTencentCloudVpcNetDetectStateCheckRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_net_detect_state_check.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_net_detect_state_check.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("detect_destination_ip"); ok { @@ -135,14 +138,14 @@ func dataSourceTencentCloudVpcNetDetectStateCheckRead(d *schema.ResourceData, me paramMap["NetDetectName"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var netDetectIpStateSet []*vpc.NetDetectIpState - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcNetDetectStateCheck(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } netDetectIpStateSet = result return nil @@ -184,7 +187,7 @@ func dataSourceTencentCloudVpcNetDetectStateCheckRead(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/vpc/data_source_tc_vpc_net_detect_state_check_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_state_check_test.go new file mode 100644 index 0000000000..b8522fa12f --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_state_check_test.go @@ -0,0 +1,39 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixVpcNetDetectStateCheckDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcNetDetectStateCheckDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_net_detect_state_check.net_detect_state_check")), + }, + }, + }) +} + +const testAccVpcNetDetectStateCheckDataSource = ` + +data "tencentcloud_vpc_net_detect_state_check" "net_detect_state_check" { + net_detect_id = "netd-12345678" + detect_destination_ip = [ + "10.0.0.3", + "10.0.0.2" + ] + next_hop_type = "NORMAL_CVM" + next_hop_destination = "10.0.0.4" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_net_detect_states.go b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_states.go similarity index 90% rename from tencentcloud/data_source_tc_vpc_net_detect_states.go rename to tencentcloud/services/vpc/data_source_tc_vpc_net_detect_states.go index 1eea52e977..1bd2982dd2 100644 --- a/tencentcloud/data_source_tc_vpc_net_detect_states.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_states.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcNetDetectStates() *schema.Resource { +func DataSourceTencentCloudVpcNetDetectStates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcNetDetectStatesRead, Schema: map[string]*schema.Schema{ @@ -99,12 +102,12 @@ func dataSourceTencentCloudVpcNetDetectStates() *schema.Resource { } func dataSourceTencentCloudVpcNetDetectStatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_net_detect_states.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_net_detect_states.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("net_detect_ids"); ok { @@ -132,14 +135,14 @@ func dataSourceTencentCloudVpcNetDetectStatesRead(d *schema.ResourceData, meta i paramMap["Filters"] = tmpSet } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var netDetectStateSet []*vpc.NetDetectState - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcNetDetectStatesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } netDetectStateSet = result return nil @@ -196,7 +199,7 @@ func dataSourceTencentCloudVpcNetDetectStatesRead(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/services/vpc/data_source_tc_vpc_net_detect_states_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_states_test.go new file mode 100644 index 0000000000..df7f47f817 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_net_detect_states_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixVpcNetDetectStatesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcNetDetectStatesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_net_detect_states.net_detect_states")), + }, + }, + }) +} + +const testAccVpcNetDetectStatesDataSource = ` + +data "tencentcloud_vpc_net_detect_states" "net_detect_states" { + net_detect_ids = ["netd-12345678"] +} + +` diff --git a/tencentcloud/data_source_tc_vpc_network_interface_limit.go b/tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit.go similarity index 86% rename from tencentcloud/data_source_tc_vpc_network_interface_limit.go rename to tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit.go index 60395cefa0..a7e8df2853 100644 --- a/tencentcloud/data_source_tc_vpc_network_interface_limit.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcNetworkInterfaceLimit() *schema.Resource { +func DataSourceTencentCloudVpcNetworkInterfaceLimit() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcNetworkInterfaceLimitRead, Schema: map[string]*schema.Schema{ @@ -65,12 +68,12 @@ func dataSourceTencentCloudVpcNetworkInterfaceLimit() *schema.Resource { } func dataSourceTencentCloudVpcNetworkInterfaceLimitRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_network_interface_limit.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_network_interface_limit.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{}) @@ -79,14 +82,14 @@ func dataSourceTencentCloudVpcNetworkInterfaceLimitRead(d *schema.ResourceData, paramMap["InstanceId"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var networkInterfaceLimit *vpc.DescribeNetworkInterfaceLimitResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcNetworkInterfaceLimit(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } networkInterfaceLimit = result return nil @@ -130,7 +133,7 @@ func dataSourceTencentCloudVpcNetworkInterfaceLimitRead(d *schema.ResourceData, d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), limitMap); e != nil { + if e := tccommon.WriteToFile(output.(string), limitMap); e != nil { return e } } diff --git a/tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit_test.go new file mode 100644 index 0000000000..764b93200b --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_network_interface_limit_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcNetworkInterfaceLimitDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcNetworkInterfaceLimitDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_network_interface_limit.network_interface_limit")), + }, + }, + }) +} + +const testAccVpcNetworkInterfaceLimitDataSource = ` + +data "tencentcloud_vpc_network_interface_limit" "network_interface_limit" { + instance_id = "ins-cr2rfq78" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_private_ip_addresses.go b/tencentcloud/services/vpc/data_source_tc_vpc_private_ip_addresses.go similarity index 84% rename from tencentcloud/data_source_tc_vpc_private_ip_addresses.go rename to tencentcloud/services/vpc/data_source_tc_vpc_private_ip_addresses.go index 938db902c4..e9130ebc1e 100644 --- a/tencentcloud/data_source_tc_vpc_private_ip_addresses.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_private_ip_addresses.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcPrivateIpAddresses() *schema.Resource { +func DataSourceTencentCloudVpcPrivateIpAddresses() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcPrivateIpAddressesRead, Schema: map[string]*schema.Schema{ @@ -68,12 +71,12 @@ func dataSourceTencentCloudVpcPrivateIpAddresses() *schema.Resource { } func dataSourceTencentCloudVpcPrivateIpAddressesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_private_ip_addresses.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_private_ip_addresses.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 { @@ -85,14 +88,14 @@ func dataSourceTencentCloudVpcPrivateIpAddressesRead(d *schema.ResourceData, met paramMap["PrivateIpAddresses"] = helper.InterfacesStringsPoint(privateIpAddressesSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var vpcPrivateIpAddressSet []*vpc.VpcPrivateIpAddress - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcPrivateIpAddresses(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } vpcPrivateIpAddressSet = result return nil @@ -134,7 +137,7 @@ func dataSourceTencentCloudVpcPrivateIpAddressesRead(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/vpc/data_source_tc_vpc_private_ip_addresses_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_private_ip_addresses_test.go new file mode 100644 index 0000000000..085d8c3cd7 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_private_ip_addresses_test.go @@ -0,0 +1,34 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcPrivateIpAddressesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcPrivateIpAddressesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_private_ip_addresses.private_ip_addresses")), + }, + }, + }) +} + +const testAccVpcPrivateIpAddressesDataSource = ` + +data "tencentcloud_vpc_private_ip_addresses" "private_ip_addresses" { + vpc_id = "vpc-l0dw94uh" + private_ip_addresses = ["10.0.0.1"] +} + +` diff --git a/tencentcloud/data_source_tc_vpc_product_quota.go b/tencentcloud/services/vpc/data_source_tc_vpc_product_quota.go similarity index 82% rename from tencentcloud/data_source_tc_vpc_product_quota.go rename to tencentcloud/services/vpc/data_source_tc_vpc_product_quota.go index 00837eb971..22ff79acae 100644 --- a/tencentcloud/data_source_tc_vpc_product_quota.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_product_quota.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcProductQuota() *schema.Resource { +func DataSourceTencentCloudVpcProductQuota() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcProductQuotaRead, Schema: map[string]*schema.Schema{ @@ -64,26 +67,26 @@ func dataSourceTencentCloudVpcProductQuota() *schema.Resource { } func dataSourceTencentCloudVpcProductQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_product_quota.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_product_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) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("product"); ok { paramMap["Product"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var productQuotaSet []*vpc.ProductQuota - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcProductQuota(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } productQuotaSet = result return nil @@ -129,7 +132,7 @@ func dataSourceTencentCloudVpcProductQuotaRead(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/services/vpc/data_source_tc_vpc_product_quota_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_product_quota_test.go new file mode 100644 index 0000000000..6e19ad75b4 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_product_quota_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcProductQuotaDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcProductQuotaDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_product_quota.product_quota")), + }, + }, + }) +} + +const testAccVpcProductQuotaDataSource = ` + +data "tencentcloud_vpc_product_quota" "product_quota" { + product = "vpc" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_resource_dashboard.go b/tencentcloud/services/vpc/data_source_tc_vpc_resource_dashboard.go similarity index 94% rename from tencentcloud/data_source_tc_vpc_resource_dashboard.go rename to tencentcloud/services/vpc/data_source_tc_vpc_resource_dashboard.go index c7c2f9f0d1..2619e3ced1 100644 --- a/tencentcloud/data_source_tc_vpc_resource_dashboard.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_resource_dashboard.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcResourceDashboard() *schema.Resource { +func DataSourceTencentCloudVpcResourceDashboard() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcResourceDashboardRead, Schema: map[string]*schema.Schema{ @@ -252,12 +255,12 @@ func dataSourceTencentCloudVpcResourceDashboard() *schema.Resource { } func dataSourceTencentCloudVpcResourceDashboardRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_resource_dashboard.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_resource_dashboard.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_ids"); ok { @@ -265,14 +268,14 @@ func dataSourceTencentCloudVpcResourceDashboardRead(d *schema.ResourceData, meta paramMap["VpcIds"] = helper.InterfacesStringsPoint(vpcIdsSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var resourceDashboardSet []*vpc.ResourceDashboard - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcResourceDashboard(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } resourceDashboardSet = result return nil @@ -466,7 +469,7 @@ func dataSourceTencentCloudVpcResourceDashboardRead(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/services/vpc/data_source_tc_vpc_resource_dashboard_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_resource_dashboard_test.go new file mode 100644 index 0000000000..ca6ece3d86 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_resource_dashboard_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcResourceDashboardDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcResourceDashboardDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_resource_dashboard.resource_dashboard")), + }, + }, + }) +} + +const testAccVpcResourceDashboardDataSource = ` + +data "tencentcloud_vpc_resource_dashboard" "resource_dashboard" { + vpc_ids = ["vpc-4owdpnwr"] +} + +` diff --git a/tencentcloud/data_source_tc_vpc_route_conflicts.go b/tencentcloud/services/vpc/data_source_tc_vpc_route_conflicts.go similarity index 90% rename from tencentcloud/data_source_tc_vpc_route_conflicts.go rename to tencentcloud/services/vpc/data_source_tc_vpc_route_conflicts.go index b083e4bfbb..e30c10c76e 100644 --- a/tencentcloud/data_source_tc_vpc_route_conflicts.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_route_conflicts.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcRouteConflicts() *schema.Resource { +func DataSourceTencentCloudVpcRouteConflicts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcRouteConflictsRead, Schema: map[string]*schema.Schema{ @@ -127,12 +130,12 @@ func dataSourceTencentCloudVpcRouteConflicts() *schema.Resource { } func dataSourceTencentCloudVpcRouteConflictsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_route_conflicts.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_route_conflicts.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("route_table_id"); ok { @@ -144,14 +147,14 @@ func dataSourceTencentCloudVpcRouteConflictsRead(d *schema.ResourceData, meta in paramMap["DestinationCidrBlocks"] = helper.InterfacesStringsPoint(destinationCidrBlocksSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var routeConflictSet []*vpc.RouteConflict - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcRouteConflicts(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } routeConflictSet = result return nil @@ -244,7 +247,7 @@ func dataSourceTencentCloudVpcRouteConflictsRead(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/services/vpc/data_source_tc_vpc_route_conflicts_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_route_conflicts_test.go new file mode 100644 index 0000000000..b84c5e6f51 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_route_conflicts_test.go @@ -0,0 +1,34 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcRouteConflictsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcRouteConflictsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_conflicts.route_conflicts")), + }, + }, + }) +} + +const testAccVpcRouteConflictsDataSource = ` + +data "tencentcloud_vpc_route_conflicts" "route_conflicts" { + route_table_id = "rtb-6xypllqe" + destination_cidr_blocks = ["172.18.111.0/24"] +} + +` diff --git a/tencentcloud/data_source_tc_vpc_route_tables.go b/tencentcloud/services/vpc/data_source_tc_vpc_route_tables.go similarity index 88% rename from tencentcloud/data_source_tc_vpc_route_tables.go rename to tencentcloud/services/vpc/data_source_tc_vpc_route_tables.go index e1b1b282c8..0d7acead1a 100644 --- a/tencentcloud/data_source_tc_vpc_route_tables.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_route_tables.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "crypto/md5" "encoding/json" @@ -9,10 +12,11 @@ import ( "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 dataSourceTencentCloudVpcRouteTables() *schema.Resource { +func DataSourceTencentCloudVpcRouteTables() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcRouteTablesRead, @@ -140,14 +144,14 @@ func dataSourceTencentCloudVpcRouteTables() *schema.Resource { } func dataSourceTencentCloudVpcRouteTablesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_route_tables.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_route_tables.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} - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region var ( routeTableId string @@ -182,10 +186,10 @@ func dataSourceTencentCloudVpcRouteTablesRead(d *schema.ResourceData, meta inter err error ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = service.DescribeRouteTables(ctx, routeTableId, name, vpcId, tags, associationMain, tagKey) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -249,7 +253,7 @@ func dataSourceTencentCloudVpcRouteTablesRead(d *schema.ResourceData, meta inter d.SetId(id) 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_vpc_route_tables_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_route_tables_test.go similarity index 87% rename from tencentcloud/data_source_tc_vpc_route_tables_test.go rename to tencentcloud/services/vpc/data_source_tc_vpc_route_tables_test.go index b342fbf104..c97ce5acbb 100644 --- a/tencentcloud/data_source_tc_vpc_route_tables_test.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_route_tables_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVpcV3RouteTables_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: TestAccDataSourceTencentCloudVpcRouteTables, Check: resource.ComposeTestCheckFunc( // id filter - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.id_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.id_instances"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_route_tables.id_instances", "instance_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_route_tables.id_instances", "instance_list.0.name", "ci-temp-test-rt"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.id_instances", "instance_list.0.vpc_id"), @@ -27,7 +29,7 @@ func TestAccDataSourceTencentCloudVpcV3RouteTables_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.id_instances", "instance_list.0.create_time"), // name filter ,Every routable with a "ci-temp-test-rt" name will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.name_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.name_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.name_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.name_instances", "instance_list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.name_instances", "instance_list.0.vpc_id"), @@ -38,7 +40,7 @@ func TestAccDataSourceTencentCloudVpcV3RouteTables_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.name_instances", "instance_list.0.create_time"), // tags filter ,Every routable with a tag test:test will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.tags_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.tags_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.tags_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.tags_instances", "instance_list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.tags_instances", "instance_list.0.vpc_id"), @@ -50,12 +52,12 @@ func TestAccDataSourceTencentCloudVpcV3RouteTables_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_vpc_route_tables.tags_instances", "instance_list.0.tags.test", "test"), // vpc_id filter - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.vpc_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.vpc_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.vpc_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.tags_instances", "instance_list.0.vpc_id"), // vpc_id && association_main filter - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.vpc_default_instance"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_route_tables.vpc_default_instance"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_route_tables.vpc_default_instance", "instance_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_route_tables.vpc_default_instance", "instance_list.0.vpc_id"), ), diff --git a/tencentcloud/data_source_tc_vpc_security_group_limits.go b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits.go similarity index 86% rename from tencentcloud/data_source_tc_vpc_security_group_limits.go rename to tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits.go index a760ec1fcb..61690995bc 100644 --- a/tencentcloud/data_source_tc_vpc_security_group_limits.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcSecurityGroupLimits() *schema.Resource { +func DataSourceTencentCloudVpcSecurityGroupLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSecurityGroupLimitsRead, Schema: map[string]*schema.Schema{ @@ -73,22 +76,22 @@ func dataSourceTencentCloudVpcSecurityGroupLimits() *schema.Resource { } func dataSourceTencentCloudVpcSecurityGroupLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_security_group_limits.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_security_group_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{}) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var securityGroupLimitSet *vpc.SecurityGroupLimitSet - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcSecurityGroupLimits(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } securityGroupLimitSet = result return nil @@ -140,7 +143,7 @@ func dataSourceTencentCloudVpcSecurityGroupLimitsRead(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), securityGroupLimitSetMap); e != nil { + if e := tccommon.WriteToFile(output.(string), securityGroupLimitSetMap); e != nil { return e } } diff --git a/tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits_test.go new file mode 100644 index 0000000000..15ae3bb7f8 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_limits_test.go @@ -0,0 +1,31 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcSecurityGroupLimitsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcSecurityGroupLimitsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_security_group_limits.security_group_limits")), + }, + }, + }) +} + +const testAccVpcSecurityGroupLimitsDataSource = ` + +data "tencentcloud_vpc_security_group_limits" "security_group_limits" {} + +` diff --git a/tencentcloud/data_source_tc_vpc_security_group_references.go b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_references.go similarity index 81% rename from tencentcloud/data_source_tc_vpc_security_group_references.go rename to tencentcloud/services/vpc/data_source_tc_vpc_security_group_references.go index d8a42895d0..08f7f5f93e 100644 --- a/tencentcloud/data_source_tc_vpc_security_group_references.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_references.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcSecurityGroupReferences() *schema.Resource { +func DataSourceTencentCloudVpcSecurityGroupReferences() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSecurityGroupReferencesRead, Schema: map[string]*schema.Schema{ @@ -55,12 +58,12 @@ func dataSourceTencentCloudVpcSecurityGroupReferences() *schema.Resource { } func dataSourceTencentCloudVpcSecurityGroupReferencesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_security_group_references.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_security_group_references.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("security_group_ids"); ok { @@ -68,14 +71,14 @@ func dataSourceTencentCloudVpcSecurityGroupReferencesRead(d *schema.ResourceData paramMap["SecurityGroupIds"] = helper.InterfacesStringsPoint(securityGroupIdsSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var referredSecurityGroupSet []*vpc.ReferredSecurityGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcSecurityGroupReferences(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } referredSecurityGroupSet = result return nil @@ -109,7 +112,7 @@ func dataSourceTencentCloudVpcSecurityGroupReferencesRead(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/services/vpc/data_source_tc_vpc_security_group_references_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_references_test.go new file mode 100644 index 0000000000..a0fb2213c8 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_security_group_references_test.go @@ -0,0 +1,32 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcSecurityGroupReferencesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcSecurityGroupReferencesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_security_group_references.security_group_references")), + }, + }, + }) +} + +const testAccVpcSecurityGroupReferencesDataSource = ` + +data "tencentcloud_vpc_security_group_references" "security_group_references" { + security_group_ids = ["sg-edmur627"] +} +` diff --git a/tencentcloud/data_source_tc_vpc_sg_snapshot_file_content.go b/tencentcloud/services/vpc/data_source_tc_vpc_sg_snapshot_file_content.go similarity index 95% rename from tencentcloud/data_source_tc_vpc_sg_snapshot_file_content.go rename to tencentcloud/services/vpc/data_source_tc_vpc_sg_snapshot_file_content.go index 67e57830fb..6aadf4a2ef 100644 --- a/tencentcloud/data_source_tc_vpc_sg_snapshot_file_content.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_sg_snapshot_file_content.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcSgSnapshotFileContent() *schema.Resource { +func DataSourceTencentCloudVpcSgSnapshotFileContent() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSgSnapshotFileContentRead, Schema: map[string]*schema.Schema{ @@ -245,12 +248,12 @@ func dataSourceTencentCloudVpcSgSnapshotFileContent() *schema.Resource { } func dataSourceTencentCloudVpcSgSnapshotFileContentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_sg_snapshot_file_content.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_sg_snapshot_file_content.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("snapshot_policy_id"); ok { @@ -265,14 +268,14 @@ func dataSourceTencentCloudVpcSgSnapshotFileContentRead(d *schema.ResourceData, paramMap["SecurityGroupId"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var content *vpc.DescribeSgSnapshotFileContentResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcSgSnapshotFileContent(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } content = result return nil @@ -449,7 +452,7 @@ func dataSourceTencentCloudVpcSgSnapshotFileContentRead(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/services/vpc/data_source_tc_vpc_sg_snapshot_file_content_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_sg_snapshot_file_content_test.go new file mode 100644 index 0000000000..623d9050a3 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_sg_snapshot_file_content_test.go @@ -0,0 +1,35 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixVpcSgSnapshotFileContentDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcSgSnapshotFileContentDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_sg_snapshot_file_content.sg_snapshot_file_content")), + }, + }, + }) +} + +const testAccVpcSgSnapshotFileContentDataSource = ` + +data "tencentcloud_vpc_sg_snapshot_file_content" "sg_snapshot_file_content" { + snapshot_policy_id = "sspolicy-ebjofe71" + snapshot_file_id = "ssfile-017gepjxpr" + security_group_id = "sg-ntrgm89v" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_snapshot_files.go b/tencentcloud/services/vpc/data_source_tc_vpc_snapshot_files.go similarity index 85% rename from tencentcloud/data_source_tc_vpc_snapshot_files.go rename to tencentcloud/services/vpc/data_source_tc_vpc_snapshot_files.go index 643543fa76..bbcbaef8da 100644 --- a/tencentcloud/data_source_tc_vpc_snapshot_files.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_snapshot_files.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcSnapshotFiles() *schema.Resource { +func DataSourceTencentCloudVpcSnapshotFiles() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSnapshotFilesRead, Schema: map[string]*schema.Schema{ @@ -82,12 +85,12 @@ func dataSourceTencentCloudVpcSnapshotFiles() *schema.Resource { } func dataSourceTencentCloudVpcSnapshotFilesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_snapshot_files.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_snapshot_files.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("business_type"); ok { @@ -106,14 +109,14 @@ func dataSourceTencentCloudVpcSnapshotFilesRead(d *schema.ResourceData, meta int paramMap["EndDate"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var snapshotFileSet []*vpc.SnapshotFileInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcSnapshotFilesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } snapshotFileSet = result return nil @@ -159,7 +162,7 @@ func dataSourceTencentCloudVpcSnapshotFilesRead(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/services/vpc/data_source_tc_vpc_snapshot_files_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_snapshot_files_test.go new file mode 100644 index 0000000000..b88376e06e --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_snapshot_files_test.go @@ -0,0 +1,36 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixVpcSnapshotFilesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcSnapshotFilesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_snapshot_files.snapshot_files")), + }, + }, + }) +} + +const testAccVpcSnapshotFilesDataSource = ` + +data "tencentcloud_vpc_snapshot_files" "snapshot_files" { + business_type = "securitygroup" + instance_id = "sg-902tl7t7" + start_date = "2022-10-10 00:00:00" + end_date = "2023-10-30 19:00:00" +} + +` diff --git a/tencentcloud/data_source_tc_vpc_subnet_resource_dashboard.go b/tencentcloud/services/vpc/data_source_tc_vpc_subnet_resource_dashboard.go similarity index 87% rename from tencentcloud/data_source_tc_vpc_subnet_resource_dashboard.go rename to tencentcloud/services/vpc/data_source_tc_vpc_subnet_resource_dashboard.go index 43b8760a27..ceada3629b 100644 --- a/tencentcloud/data_source_tc_vpc_subnet_resource_dashboard.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_subnet_resource_dashboard.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcSubnetResourceDashboard() *schema.Resource { +func DataSourceTencentCloudVpcSubnetResourceDashboard() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSubnetResourceDashboardRead, Schema: map[string]*schema.Schema{ @@ -81,12 +84,12 @@ func dataSourceTencentCloudVpcSubnetResourceDashboard() *schema.Resource { } func dataSourceTencentCloudVpcSubnetResourceDashboardRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_subnet_resource_dashboard.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_subnet_resource_dashboard.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("subnet_ids"); ok { @@ -94,14 +97,14 @@ func dataSourceTencentCloudVpcSubnetResourceDashboardRead(d *schema.ResourceData paramMap["SubnetIds"] = helper.InterfacesStringsPoint(subnetIdsSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var resourceStatisticsSet []*vpc.ResourceStatistics - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcSubnetResourceDashboardByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } resourceStatisticsSet = result return nil @@ -162,7 +165,7 @@ func dataSourceTencentCloudVpcSubnetResourceDashboardRead(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/services/vpc/data_source_tc_vpc_subnet_resource_dashboard_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_subnet_resource_dashboard_test.go new file mode 100644 index 0000000000..24831765cd --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_subnet_resource_dashboard_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcSubnetResourceDashboardDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcSubnetResourceDashboardDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnet_resource_dashboard.subnet_resource_dashboard")), + }, + }, + }) +} + +const testAccVpcSubnetResourceDashboardDataSource = ` + +data "tencentcloud_vpc_subnet_resource_dashboard" "subnet_resource_dashboard" { + subnet_ids = ["subnet-i9tpf6hq"] +} + +` diff --git a/tencentcloud/data_source_tc_vpc_subnets.go b/tencentcloud/services/vpc/data_source_tc_vpc_subnets.go similarity index 88% rename from tencentcloud/data_source_tc_vpc_subnets.go rename to tencentcloud/services/vpc/data_source_tc_vpc_subnets.go index f4be2b5a02..055fbb8d59 100644 --- a/tencentcloud/data_source_tc_vpc_subnets.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_subnets.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "crypto/md5" "encoding/json" @@ -9,10 +12,11 @@ import ( "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 dataSourceTencentCloudVpcSubnets() *schema.Resource { +func DataSourceTencentCloudVpcSubnets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcSubnetsRead, @@ -137,14 +141,14 @@ func dataSourceTencentCloudVpcSubnets() *schema.Resource { } func dataSourceTencentCloudVpcSubnetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_subnets.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_subnets.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} - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region var ( vpcId string @@ -194,13 +198,13 @@ func dataSourceTencentCloudVpcSubnetsRead(d *schema.ResourceData, meta interface err error ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = vpcService.DescribeSubnets(ctx, subnetId, vpcId, name, availabilityZone, tags, isDefault, isRemoteVpcSNAT, tagKey, cidrBlock) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -261,7 +265,7 @@ func dataSourceTencentCloudVpcSubnetsRead(d *schema.ResourceData, meta interface d.SetId(id) 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_vpc_subnets_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_subnets_test.go similarity index 91% rename from tencentcloud/data_source_tc_vpc_subnets_test.go rename to tencentcloud/services/vpc/data_source_tc_vpc_subnets_test.go index 4ac6a47ba4..850d5d6791 100644 --- a/tencentcloud/data_source_tc_vpc_subnets_test.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_subnets_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package vpc_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceTencentCloudVpcV3Subnets_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: TestAccDataSourceTencentCloudVpcSubnets, Check: resource.ComposeTestCheckFunc( // id filter - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.id_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.id_instances"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.id_instances", "instance_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.id_instances", "instance_list.0.availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.id_instances", "instance_list.0.name", "guagua_vpc_subnet_test"), @@ -30,7 +32,7 @@ func TestAccDataSourceTencentCloudVpcV3Subnets_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.id_instances", "instance_list.0.create_time"), // vpc_id filter ,Every subnet with the query vpc_id will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.vpc_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.vpc_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.vpc_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.vpc_instances", "instance_list.0.availability_zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.vpc_instances", "instance_list.0.name"), @@ -44,7 +46,7 @@ func TestAccDataSourceTencentCloudVpcV3Subnets_basic(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.vpc_instances", "instance_list.0.create_time"), // name filter ,Every subnet with a "guagua_vpc_subnet_test" name will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.name_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.name_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.name_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.name_instances", "instance_list.0.availability_zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.name_instances", "instance_list.0.name"), @@ -59,7 +61,7 @@ func TestAccDataSourceTencentCloudVpcV3Subnets_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.name_instances", "instance_list.0.name", "guagua_vpc_subnet_test"), // tags filter ,Every subnet with a tag test:test will be found - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.tags_instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.tags_instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.tags_instances", "instance_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.tags_instances", "instance_list.0.availability_zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.tags_instances", "instance_list.0.name"), @@ -74,7 +76,7 @@ func TestAccDataSourceTencentCloudVpcV3Subnets_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.tags_instances", "instance_list.0.tags.test", "test"), // name filter ,Every subnet with cidr_block "10.0.20.0/28" will be found - //testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.cidr_block_instances"), + //tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_subnets.cidr_block_instances"), //resource.TestCheckResourceAttrSet("data.tencentcloud_vpc_subnets.cidr_block_instances", "instance_list.#"), //resource.TestCheckResourceAttr("data.tencentcloud_vpc_subnets.cidr_block_instances", "instance_list.0.cidr_block", "10.0.20.0/28"), ), diff --git a/tencentcloud/data_source_tc_vpc_template_limits.go b/tencentcloud/services/vpc/data_source_tc_vpc_template_limits.go similarity index 80% rename from tencentcloud/data_source_tc_vpc_template_limits.go rename to tencentcloud/services/vpc/data_source_tc_vpc_template_limits.go index 22fff30423..20e3775e87 100644 --- a/tencentcloud/data_source_tc_vpc_template_limits.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_template_limits.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcTemplateLimits() *schema.Resource { +func DataSourceTencentCloudVpcTemplateLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcTemplateLimitsRead, Schema: map[string]*schema.Schema{ @@ -53,21 +56,21 @@ func dataSourceTencentCloudVpcTemplateLimits() *schema.Resource { } func dataSourceTencentCloudVpcTemplateLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_template_limits.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_template_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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var templateLimit *vpc.TemplateLimit - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcTemplateLimits(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } templateLimit = result return nil @@ -104,7 +107,7 @@ func dataSourceTencentCloudVpcTemplateLimitsRead(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), templateLimitMap); e != nil { + if e := tccommon.WriteToFile(output.(string), templateLimitMap); e != nil { return e } } diff --git a/tencentcloud/services/vpc/data_source_tc_vpc_template_limits_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_template_limits_test.go new file mode 100644 index 0000000000..6a3a3a5f7d --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_template_limits_test.go @@ -0,0 +1,31 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcTemplateLimitsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcTemplateLimitsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_template_limits.template_limits")), + }, + }, + }) +} + +const testAccVpcTemplateLimitsDataSource = ` + +data "tencentcloud_vpc_template_limits" "template_limits" {} + +` diff --git a/tencentcloud/services/vpc/data_source_tc_vpc_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_test.go new file mode 100644 index 0000000000..1c1a37ed31 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_test.go @@ -0,0 +1,37 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccDataSourceTencentCloudVpc_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: TestAccDataSourceTencentCloudVpcConfig_id, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc.id"), + resource.TestCheckResourceAttr("data.tencentcloud_vpc.id", "name", "tf-ci-test"), + ), + }, + }, + }) +} + +const TestAccDataSourceTencentCloudVpcConfig_id = ` +resource "tencentcloud_vpc" "foo" { + name = "tf-ci-test" + cidr_block = "10.0.0.0/16" +} + +data "tencentcloud_vpc" "id" { + id = tencentcloud_vpc.foo.id +} +` diff --git a/tencentcloud/data_source_tc_vpc_used_ip_address.go b/tencentcloud/services/vpc/data_source_tc_vpc_used_ip_address.go similarity index 85% rename from tencentcloud/data_source_tc_vpc_used_ip_address.go rename to tencentcloud/services/vpc/data_source_tc_vpc_used_ip_address.go index 1e80022cfa..0dc03fe1f5 100644 --- a/tencentcloud/data_source_tc_vpc_used_ip_address.go +++ b/tencentcloud/services/vpc/data_source_tc_vpc_used_ip_address.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpc 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 dataSourceTencentCloudVpcUsedIpAddress() *schema.Resource { +func DataSourceTencentCloudVpcUsedIpAddress() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcUsedIpAddressRead, Schema: map[string]*schema.Schema{ @@ -79,12 +82,12 @@ func dataSourceTencentCloudVpcUsedIpAddress() *schema.Resource { } func dataSourceTencentCloudVpcUsedIpAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_used_ip_address.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_used_ip_address.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 { @@ -100,14 +103,14 @@ func dataSourceTencentCloudVpcUsedIpAddressRead(d *schema.ResourceData, meta int paramMap["IpAddresses"] = helper.InterfacesStringsPoint(ipAddressesSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ipAddressStates []*vpc.IpAddressStates - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcUsedIpAddressByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ipAddressStates = result return nil @@ -153,7 +156,7 @@ func dataSourceTencentCloudVpcUsedIpAddressRead(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/services/vpc/data_source_tc_vpc_used_ip_address_test.go b/tencentcloud/services/vpc/data_source_tc_vpc_used_ip_address_test.go new file mode 100644 index 0000000000..c37dbafde8 --- /dev/null +++ b/tencentcloud/services/vpc/data_source_tc_vpc_used_ip_address_test.go @@ -0,0 +1,33 @@ +package vpc_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpcUsedIpAddressDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpcUsedIpAddressDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpc_used_ip_address.used_ip_address")), + }, + }, + }) +} + +const testAccVpcUsedIpAddressDataSource = ` + +data "tencentcloud_vpc_used_ip_address" "used_ip_address" { + vpc_id = "vpc-4owdpnwr" +} + +` diff --git a/tencentcloud/services/vpc/extension_security_group.go b/tencentcloud/services/vpc/extension_security_group.go new file mode 100644 index 0000000000..135f505823 --- /dev/null +++ b/tencentcloud/services/vpc/extension_security_group.go @@ -0,0 +1,3 @@ +package vpc + +const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/vpc/extension_vpc.go b/tencentcloud/services/vpc/extension_vpc.go new file mode 100644 index 0000000000..383750617b --- /dev/null +++ b/tencentcloud/services/vpc/extension_vpc.go @@ -0,0 +1,339 @@ +package vpc + +/* +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 ( + ROUTE_TYPE_STATIC = "STATIC" + ROUTE_TYPE_STATIC_ROUTE = "StaticRoute" + ROUTE_TYPE_POLICY = "Policy" +) + +var VPN_CONNECTION_ROUTE_TYPE = []string{ + ROUTE_TYPE_STATIC, + ROUTE_TYPE_STATIC_ROUTE, + ROUTE_TYPE_POLICY, +} + +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/services/vpc/resource_tc_address_template.go b/tencentcloud/services/vpc/resource_tc_address_template.go new file mode 100644 index 0000000000..b3c8ace2f5 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_address_template.go @@ -0,0 +1,172 @@ +package vpc + +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 ResourceTencentCloudAddressTemplate() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudAddressTemplateCreate, + Read: resourceTencentCloudAddressTemplateRead, + Update: resourceTencentCloudAddressTemplateUpdate, + Delete: resourceTencentCloudAddressTemplateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of the address template.", + }, + "addresses": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Required: true, + Description: "Address list. IP(`10.0.0.1`), CIDR(`10.0.1.0/24`), IP range(`10.0.0.1-10.0.0.100`) format are supported.", + }, + }, + } +} + +func resourceTencentCloudAddressTemplateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + name := d.Get("name").(string) + addresses := d.Get("addresses").(*schema.Set).List() + + vpcService := VpcService{ + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), + } + var outErr, inErr error + var templateId string + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + templateId, inErr = vpcService.CreateAddressTemplate(ctx, name, addresses) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(templateId) + + return resourceTencentCloudAddressTemplateRead(d, meta) +} + +func resourceTencentCloudAddressTemplateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + templateId := d.Id() + var outErr, inErr error + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + template, has, outErr := vpcService.DescribeAddressTemplateById(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + template, has, inErr = vpcService.DescribeAddressTemplateById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", template.AddressTemplateName) + _ = d.Set("addresses", template.AddressSet) + + return nil +} + +func resourceTencentCloudAddressTemplateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateId := d.Id() + + if d.HasChange("name") || d.HasChange("addresses") { + var outErr, inErr error + name := d.Get("name").(string) + addresses := d.Get("addresses").(*schema.Set).List() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.ModifyAddressTemplate(ctx, templateId, name, addresses) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + if outErr != nil { + return outErr + } + + } + + return resourceTencentCloudAddressTemplateRead(d, meta) +} + +func resourceTencentCloudAddressTemplateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateId := d.Id() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + var outErr, inErr error + + outErr = vpcService.DeleteAddressTemplate(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.DeleteAddressTemplate(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + //check not exist + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr := vpcService.DescribeAddressTemplateById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + return resource.RetryableError(fmt.Errorf("address template %s is still exists, retry...", templateId)) + } else { + return nil + } + }) + + return outErr +} diff --git a/tencentcloud/services/vpc/resource_tc_address_template_group.go b/tencentcloud/services/vpc/resource_tc_address_template_group.go new file mode 100644 index 0000000000..a0dc9896f6 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_address_template_group.go @@ -0,0 +1,171 @@ +package vpc + +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 ResourceTencentCloudAddressTemplateGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudAddressTemplateGroupCreate, + Read: resourceTencentCloudAddressTemplateGroupRead, + Update: resourceTencentCloudAddressTemplateGroupUpdate, + Delete: resourceTencentCloudAddressTemplateGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of the address template group.", + }, + "template_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Required: true, + Description: "Template ID list.", + }, + }, + } +} + +func resourceTencentCloudAddressTemplateGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template_group.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + name := d.Get("name").(string) + addresses := d.Get("template_ids").(*schema.Set).List() + + vpcService := VpcService{ + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), + } + var outErr, inErr error + var templateGroupId string + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + templateGroupId, inErr = vpcService.CreateAddressTemplateGroup(ctx, name, addresses) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(templateGroupId) + + return resourceTencentCloudAddressTemplateGroupRead(d, meta) +} + +func resourceTencentCloudAddressTemplateGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + templateId := d.Id() + var outErr, inErr error + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + templateGroup, has, outErr := vpcService.DescribeAddressTemplateGroupById(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + templateGroup, has, inErr = vpcService.DescribeAddressTemplateGroupById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", templateGroup.AddressTemplateGroupName) + _ = d.Set("template_ids", templateGroup.AddressTemplateIdSet) + + return nil +} + +func resourceTencentCloudAddressTemplateGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template_group.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateGroupId := d.Id() + + if d.HasChange("name") || d.HasChange("template_ids") { + var outErr, inErr error + name := d.Get("name").(string) + templadteIds := d.Get("template_ids").(*schema.Set).List() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.ModifyAddressTemplateGroup(ctx, templateGroupId, name, templadteIds) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudAddressTemplateGroupRead(d, meta) +} + +func resourceTencentCloudAddressTemplateGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_address_template_group.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateGroupId := d.Id() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + var outErr, inErr error + + outErr = vpcService.DeleteAddressTemplateGroup(ctx, templateGroupId) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.DeleteAddressTemplateGroup(ctx, templateGroupId) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + //check not exist + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr := vpcService.DescribeAddressTemplateGroupById(ctx, templateGroupId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + return resource.RetryableError(fmt.Errorf("address template group %s is still exists, retry...", templateGroupId)) + } else { + return nil + } + }) + + return outErr +} diff --git a/tencentcloud/resource_tc_address_template_group_test.go b/tencentcloud/services/vpc/resource_tc_address_template_group_test.go similarity index 77% rename from tencentcloud/resource_tc_address_template_group_test.go rename to tencentcloud/services/vpc/resource_tc_address_template_group_test.go index 6185e061cf..5cfe895a9e 100644 --- a/tencentcloud/resource_tc_address_template_group_test.go +++ b/tencentcloud/services/vpc/resource_tc_address_template_group_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vpc_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudAddressTemplateGroup_basic_and_update(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: testAccCheckAddressTemplateGroupDestroy, Steps: []resource.TestStep{ { @@ -41,9 +45,9 @@ func TestAccTencentCloudAddressTemplateGroup_basic_and_update(t *testing.T) { } func testAccCheckAddressTemplateGroupDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_address_template_group" { continue @@ -62,15 +66,15 @@ func testAccCheckAddressTemplateGroupDestroy(s *terraform.State) error { func testAccCheckAddressTemplateGroupExists(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 { return fmt.Errorf("Address template group %s is not found", n) } - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := vpcService.DescribeAddressTemplateGroupById(ctx, rs.Primary.ID) if !has { return fmt.Errorf("Address template group %s is not found", rs.Primary.ID) diff --git a/tencentcloud/services/vpc/resource_tc_address_template_test.go b/tencentcloud/services/vpc/resource_tc_address_template_test.go new file mode 100644 index 0000000000..6f9c318187 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_address_template_test.go @@ -0,0 +1,100 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudAddressTemplate_basic_and_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckAddressTemplateDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAddressTemplate_basic, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_address_template.template", "name", "test"), + resource.TestCheckResourceAttr("tencentcloud_address_template.template", "addresses.#", "1"), + ), + }, + { + ResourceName: "tencentcloud_address_template.template", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccAddressTemplate_basic_update_remark, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckAddressTemplateExists("tencentcloud_address_template.template"), + resource.TestCheckResourceAttr("tencentcloud_address_template.template", "name", "test_update"), + resource.TestCheckResourceAttr("tencentcloud_address_template.template", "addresses.#", "2"), + ), + }, + }, + }) +} + +func testAccCheckAddressTemplateDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_address_template" { + continue + } + + _, has, err := vpcService.DescribeAddressTemplateById(ctx, rs.Primary.ID) + if has { + return fmt.Errorf("address template still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckAddressTemplateExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Address template %s is not found", n) + } + + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := vpcService.DescribeAddressTemplateById(ctx, rs.Primary.ID) + if !has { + return fmt.Errorf("Address template %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccAddressTemplate_basic = ` +resource "tencentcloud_address_template" "template" { + name = "test" + addresses = ["1.1.1.1"] +}` + +const testAccAddressTemplate_basic_update_remark = ` +resource "tencentcloud_address_template" "template" { + name = "test_update" + addresses = ["1.1.1.1/24", "1.1.1.0-1.1.1.1"] +}` diff --git a/tencentcloud/resource_tc_dnat.go b/tencentcloud/services/vpc/resource_tc_dnat.go similarity index 79% rename from tencentcloud/resource_tc_dnat.go rename to tencentcloud/services/vpc/resource_tc_dnat.go index a0b2527e4a..b7327662c6 100644 --- a/tencentcloud/resource_tc_dnat.go +++ b/tencentcloud/services/vpc/resource_tc_dnat.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "encoding/json" @@ -9,13 +9,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" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudDnat() *schema.Resource { +func ResourceTencentCloudDnat() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudDnatCreate, Read: resourceTencentCloudDnatRead, @@ -42,35 +45,35 @@ func resourceTencentCloudDnat() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue([]string{"TCP", "UDP"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"TCP", "UDP"}), Description: "Type of the network protocol. Valid value: `TCP` and `UDP`.", }, "elastic_ip": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Network address of the EIP.", }, "elastic_port": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "Port of the EIP.", }, "private_ip": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Network address of the backend service.", }, "private_port": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "Port of intranet.", }, "description": { @@ -83,9 +86,9 @@ func resourceTencentCloudDnat() *schema.Resource { } func resourceTencentCloudDnatCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dnat.create")() + defer tccommon.LogElapsed("resource.tencentcloud_dnat.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewCreateNatGatewayDestinationIpPortTranslationNatRuleRequest() var natForward vpc.DestinationIpPortTranslationNatRule natForward.IpProtocol = helper.String(d.Get("protocol").(string)) @@ -113,12 +116,12 @@ func resourceTencentCloudDnatCreate(d *schema.ResourceData, meta interface{}) er request.DestinationIpPortTranslationNatRules = []*vpc.DestinationIpPortTranslationNatRule{&natForward} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateNatGatewayDestinationIpPortTranslationNatRule(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateNatGatewayDestinationIpPortTranslationNatRule(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 }) @@ -134,11 +137,11 @@ func resourceTencentCloudDnatCreate(d *schema.ResourceData, meta interface{}) er } func resourceTencentCloudDnatRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dnat.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_dnat.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - _, params, e := parseDnatId(d.Id()) + logId := tccommon.GetLogId(tccommon.ContextNil) + _, params, e := ParseDnatId(d.Id()) if e != nil { return fmt.Errorf("[CRITAL]parse DNAT id fail, reason[%s]\n", e.Error()) } @@ -152,12 +155,12 @@ func resourceTencentCloudDnatRead(d *schema.ResourceData, meta interface{}) erro } request.Filters = append(request.Filters, filter) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(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) } response = result return nil @@ -185,16 +188,16 @@ func resourceTencentCloudDnatRead(d *schema.ResourceData, meta interface{}) erro } func resourceTencentCloudDnatUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dnat.update")() + defer tccommon.LogElapsed("resource.tencentcloud_dnat.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) //only modify description if d.HasChange("description") { description := "" if v, ok := d.GetOk("description"); ok { description = v.(string) } - natForward, params, e := parseDnatId(d.Id()) + natForward, params, e := ParseDnatId(d.Id()) if e != nil { return fmt.Errorf("[CRITAL]parse DNAT id fail, reason[%s]\n", e.Error()) } @@ -209,12 +212,12 @@ func resourceTencentCloudDnatUpdate(d *schema.ResourceData, meta interface{}) er srequest.Filters = append(srequest.Filters, filter) } var sresponse *vpc.DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(srequest) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(srequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, srequest.GetAction(), srequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } sresponse = result return nil @@ -241,12 +244,12 @@ func resourceTencentCloudDnatUpdate(d *schema.ResourceData, meta interface{}) er newNatForward.IpProtocol = natForward.IpProtocol newNatForward.Description = helper.String(description) request.DestinationNatRule = newNatForward - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyNatGatewayDestinationIpPortTranslationNatRule(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyNatGatewayDestinationIpPortTranslationNatRule(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 }) @@ -259,10 +262,10 @@ func resourceTencentCloudDnatUpdate(d *schema.ResourceData, meta interface{}) er } func resourceTencentCloudDnatDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_dnat.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_dnat.delete")() - logId := getLogId(contextNil) - natForward, params, e := parseDnatId(d.Id()) + logId := tccommon.GetLogId(tccommon.ContextNil) + natForward, params, e := ParseDnatId(d.Id()) if e != nil { return fmt.Errorf("[CRITAL]parse DNAT id fail, reason[%s]\n", e.Error()) } @@ -277,12 +280,12 @@ func resourceTencentCloudDnatDelete(d *schema.ResourceData, meta interface{}) er srequest.Filters = append(srequest.Filters, filter) } var sresponse *vpc.DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(srequest) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(srequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, srequest.GetAction(), srequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } sresponse = result return nil @@ -301,12 +304,12 @@ func resourceTencentCloudDnatDelete(d *schema.ResourceData, meta interface{}) er request.NatGatewayId = helper.String(params["nat-gateway-id"]) request.DestinationIpPortTranslationNatRules = []*vpc.DestinationIpPortTranslationNatRule{natForward} - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteNatGatewayDestinationIpPortTranslationNatRule(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteNatGatewayDestinationIpPortTranslationNatRule(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 }) @@ -325,8 +328,8 @@ func buildDnatId(entry *vpc.DestinationIpPortTranslationNatRule, vpcId string, n return } -//Parse Forward Entry id -func parseDnatId(entryId string) (entry *vpc.DestinationIpPortTranslationNatRule, params map[string]string, err error) { +// ParseDnatId Parse Forward Entry id +func ParseDnatId(entryId string) (entry *vpc.DestinationIpPortTranslationNatRule, params map[string]string, err error) { log.Printf("[DEBUG] parseDnatId entryId: %s", entryId) params = make(map[string]string) u, errors := url.Parse(entryId) diff --git a/tencentcloud/resource_tc_dnat_test.go b/tencentcloud/services/vpc/resource_tc_dnat_test.go similarity index 82% rename from tencentcloud/resource_tc_dnat_test.go rename to tencentcloud/services/vpc/resource_tc_dnat_test.go index ad515b892a..5a1311c252 100644 --- a/tencentcloud/resource_tc_dnat_test.go +++ b/tencentcloud/services/vpc/resource_tc_dnat_test.go @@ -1,13 +1,18 @@ -package tencentcloud +package vpc_test import ( "fmt" "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -16,8 +21,8 @@ func TestAccTencentCloudNatGatewayTransRule_basic(t *testing.T) { var dnatId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckDnatDestroy, Steps: []resource.TestStep{ { @@ -38,7 +43,7 @@ func TestAccTencentCloudNatGatewayTransRule_basic(t *testing.T) { func testAccCheckDnatExists(n string, id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -47,11 +52,11 @@ func testAccCheckDnatExists(n string, id *string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("DNAT id is not set") } - _, params, e := parseDnatId(rs.Primary.ID) + _, params, e := svcvpc.ParseDnatId(rs.Primary.ID) if e != nil { return fmt.Errorf("[CRITAL]parse DNAT id fail, reason[%s]\n", e.Error()) } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() request.Filters = make([]*vpc.Filter, 0, len(params)) for k, v := range params { @@ -62,12 +67,12 @@ func testAccCheckDnatExists(n string, id *string) resource.TestCheckFunc { request.Filters = append(request.Filters, filter) } var response *vpc.DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(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) } response = result return nil @@ -84,17 +89,17 @@ func testAccCheckDnatExists(n string, id *string) resource.TestCheckFunc { } func testAccCheckDnatDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_dnat" { continue } - _, params, e := parseDnatId(rs.Primary.ID) + _, params, e := svcvpc.ParseDnatId(rs.Primary.ID) if e != nil { log.Printf("[CRITAL]parse DNAT id fail, reason[%s]\n", e.Error()) } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeNatGatewayDestinationIpPortTranslationNatRulesRequest() request.Filters = make([]*vpc.Filter, 0, len(params)) for k, v := range params { @@ -105,12 +110,12 @@ func testAccCheckDnatDestroy(s *terraform.State) error { request.Filters = append(request.Filters, filter) } var response *vpc.DescribeNatGatewayDestinationIpPortTranslationNatRulesResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeNatGatewayDestinationIpPortTranslationNatRules(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) } response = result return nil @@ -127,7 +132,7 @@ func testAccCheckDnatDestroy(s *terraform.State) error { } -const testAccDnatConfig = instanceCommonTestCase + ` +const testAccDnatConfig = tcacctest.InstanceCommonTestCase + ` # Create EIP resource "tencentcloud_eip" "eip_dev_dnat" { name = var.instance_name @@ -162,7 +167,7 @@ resource "tencentcloud_dnat" "dev_dnat" { } ` -const testAccDnatConfigUpdate = instanceCommonTestCase + ` +const testAccDnatConfigUpdate = tcacctest.InstanceCommonTestCase + ` # Create EIP resource "tencentcloud_eip" "eip_dev_dnat" { name = var.instance_name diff --git a/tencentcloud/resource_tc_eni.go b/tencentcloud/services/vpc/resource_tc_eni.go similarity index 88% rename from tencentcloud/resource_tc_eni.go rename to tencentcloud/services/vpc/resource_tc_eni.go index 3bd21a2e93..090c9338c7 100644 --- a/tencentcloud/resource_tc_eni.go +++ b/tencentcloud/services/vpc/resource_tc_eni.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "errors" "fmt" @@ -8,6 +11,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -33,7 +37,7 @@ func eniIpOutputResource() *schema.Resource { } } -func resourceTencentCloudEni() *schema.Resource { +func ResourceTencentCloudEni() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEniCreate, Read: resourceTencentCloudEniRead, @@ -47,7 +51,7 @@ func resourceTencentCloudEni() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(0, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 60), Description: "Name of the ENI, maximum length 60.", }, "vpc_id": { @@ -66,7 +70,7 @@ func resourceTencentCloudEni() *schema.Resource { Type: schema.TypeString, Optional: true, Default: "", - ValidateFunc: validateStringLengthInRange(0, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 60), Description: "Description of the ENI, maximum length 60.", }, "security_groups": { @@ -98,7 +102,7 @@ func resourceTencentCloudEni() *schema.Resource { Optional: true, Default: "", Description: "Description of the IP, maximum length 25.", - ValidateFunc: validateStringLengthInRange(0, 25), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 25), }, }, }, @@ -109,7 +113,7 @@ func resourceTencentCloudEni() *schema.Resource { Type: schema.TypeInt, Optional: true, ConflictsWith: []string{"ipv4s"}, - ValidateFunc: validateIntegerInRange(1, 30), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 30), Description: "The number of intranet IPv4s. When it is greater than 1, there is only one primary intranet IP. The others are auxiliary intranet IPs, which conflict with `ipv4s`.", }, "tags": { @@ -150,9 +154,9 @@ func resourceTencentCloudEni() *schema.Resource { } func resourceTencentCloudEniCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_eni.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) name := d.Get("name").(string) vpcId := d.Get("vpc_id").(string) @@ -221,9 +225,9 @@ func resourceTencentCloudEniCreate(d *schema.ResourceData, m interface{}) error tags = raw } - client := m.(*TencentCloudClient).apiV3Conn + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region var ( @@ -304,7 +308,7 @@ func resourceTencentCloudEniCreate(d *schema.ResourceData, m interface{}) error } if len(tags) > 0 { - resourceName := BuildTagResourceName("vpc", "eni", region, id) + resourceName := tccommon.BuildTagResourceName("vpc", "eni", region, id) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -314,15 +318,15 @@ func resourceTencentCloudEniCreate(d *schema.ResourceData, m interface{}) error } func resourceTencentCloudEniRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_eni.read")() + defer tccommon.InconsistentCheck(d, m)() - 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 := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} enis, err := service.DescribeEniById(ctx, []string{id}) if err != nil { @@ -378,17 +382,17 @@ func resourceTencentCloudEniRead(d *schema.ResourceData, m interface{}) error { } func resourceTencentCloudEniUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_eni.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() d.Partial(true) - client := m.(*TencentCloudClient).apiV3Conn + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} - tagService := TagService{client: client} + tagService := svctag.NewTagService(client) region := client.Region var ( @@ -593,9 +597,9 @@ func resourceTencentCloudEniUpdate(d *schema.ResourceData, m interface{}) error if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("vpc", "eni", region, id) + resourceName := tccommon.BuildTagResourceName("vpc", "eni", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err @@ -609,13 +613,13 @@ func resourceTencentCloudEniUpdate(d *schema.ResourceData, m interface{}) error } func resourceTencentCloudEniDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_eni.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_eni.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} return service.DeleteEni(ctx, id) } diff --git a/tencentcloud/services/vpc/resource_tc_eni_attachment.go b/tencentcloud/services/vpc/resource_tc_eni_attachment.go new file mode 100644 index 0000000000..37983bf3ca --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_eni_attachment.go @@ -0,0 +1,119 @@ +package vpc + +import ( + "context" + "fmt" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceTencentCloudEniAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudEniAttachmentCreate, + Read: resourceTencentCloudEniAttachmentRead, + Delete: resourceTencentCloudEniAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "eni_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the ENI.", + }, + "instance_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the instance which bind the ENI.", + }, + }, + } +} + +func resourceTencentCloudEniAttachmentCreate(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_attachment.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + eniId := d.Get("eni_id").(string) + cvmId := d.Get("instance_id").(string) + + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + if err := service.AttachEniToCvm(ctx, eniId, cvmId); err != nil { + return err + } + + d.SetId(fmt.Sprintf("%s+%s", eniId, cvmId)) + + return resourceTencentCloudEniAttachmentRead(d, m) +} + +func resourceTencentCloudEniAttachmentRead(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_attachment.read")() + defer tccommon.InconsistentCheck(d, m)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + split := strings.Split(id, "+") + if len(split) != 2 { + log.Printf("[CRITAL]%s id %s is invalid", logId, id) + d.SetId("") + return nil + } + + eniId := split[0] + + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + enis, err := service.DescribeEniById(ctx, []string{eniId}) + if err != nil { + return err + } + + if len(enis) < 1 { + d.SetId("") + return nil + } + + eni := enis[0] + + if eni.Attachment == nil { + d.SetId("") + return nil + } + + _ = d.Set("eni_id", eni.NetworkInterfaceId) + _ = d.Set("instance_id", eni.Attachment.InstanceId) + + return nil +} + +func resourceTencentCloudEniAttachmentDelete(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_attachment.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + split := strings.Split(id, "+") + if len(split) != 2 { + log.Printf("[CRITAL]%s id %s is invalid", logId, id) + d.SetId("") + return nil + } + + eniId, cvmId := split[0], split[1] + + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + return service.DetachEniFromCvm(ctx, eniId, cvmId) +} diff --git a/tencentcloud/resource_tc_eni_attachment_test.go b/tencentcloud/services/vpc/resource_tc_eni_attachment_test.go similarity index 79% rename from tencentcloud/resource_tc_eni_attachment_test.go rename to tencentcloud/services/vpc/resource_tc_eni_attachment_test.go index 80c869c52b..3649140df5 100644 --- a/tencentcloud/resource_tc_eni_attachment_test.go +++ b/tencentcloud/services/vpc/resource_tc_eni_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -19,8 +23,8 @@ func TestAccTencentCloudEniAttachmentBasic(t *testing.T) { ) resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniAttachmentDestroy(&eniId), Steps: []resource.TestStep{ { @@ -54,7 +58,7 @@ func testAccCheckEniAttachmentExists(n string, eniId, cvmId *string) resource.Te split := strings.Split(rs.Primary.ID, "+") *eniId, *cvmId = split[0], split[1] - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) enis, err := service.DescribeEniById(context.TODO(), []string{*eniId}) if err != nil { @@ -92,8 +96,8 @@ func testAccCheckEniAttachmentDestroy(eniId *string) resource.TestCheckFunc { if *eniId == "" { return nil } - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := VpcService{client: client} + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcvpc.NewVpcService(client) enis, err := service.DescribeEniById(context.TODO(), []string{*eniId}) if err != nil { @@ -108,7 +112,7 @@ func testAccCheckEniAttachmentDestroy(eniId *string) resource.TestCheckFunc { } } -const testAccEniAttachmentBasic = instanceCommonTestCase + ` +const testAccEniAttachmentBasic = tcacctest.InstanceCommonTestCase + ` resource "tencentcloud_eni" "foo" { name = var.instance_name vpc_id = var.vpc_id diff --git a/tencentcloud/services/vpc/resource_tc_eni_sg_attachment.go b/tencentcloud/services/vpc/resource_tc_eni_sg_attachment.go new file mode 100644 index 0000000000..698b7c0009 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_eni_sg_attachment.go @@ -0,0 +1,150 @@ +package vpc + +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" +) + +func ResourceTencentCloudEniSgAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudEniSgAttachmentCreate, + Read: resourceTencentCloudEniSgAttachmentRead, + Delete: resourceTencentCloudEniSgAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "network_interface_ids": { + Required: true, + ForceNew: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + MaxItems: 1, + Description: "ENI instance ID. Such as:eni-pxir56ns. It Only support set one eni instance now.", + }, + + "security_group_ids": { + Required: true, + ForceNew: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "Security group instance ID, for example:sg-33ocnj9n, can be obtained through DescribeSecurityGroups. There is a limit of 100 instances per request.", + }, + }, + } +} + +func resourceTencentCloudEniSgAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_sg_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAssociateNetworkInterfaceSecurityGroupsRequest() + networkInterfaceId string + ) + if v, ok := d.GetOk("network_interface_ids"); ok { + networkInterfaceIdsSet := v.(*schema.Set).List() + for i := range networkInterfaceIdsSet { + networkInterfaceId = networkInterfaceIdsSet[i].(string) + request.NetworkInterfaceIds = append(request.NetworkInterfaceIds, &networkInterfaceId) + } + } + + if v, ok := d.GetOk("security_group_ids"); ok { + securityGroupIdsSet := v.(*schema.Set).List() + for i := range securityGroupIdsSet { + securityGroupIds := securityGroupIdsSet[i].(string) + request.SecurityGroupIds = append(request.SecurityGroupIds, &securityGroupIds) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateNetworkInterfaceSecurityGroups(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 vpc eniSgAttachment failed, reason:%+v", logId, err) + return err + } + + d.SetId(networkInterfaceId) + + return resourceTencentCloudEniSgAttachmentRead(d, meta) +} + +func resourceTencentCloudEniSgAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_sg_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + networkInterfaceId := d.Id() + + enis, err := service.DescribeEniById(ctx, []string{networkInterfaceId}) + if err != nil { + return err + } + + if len(enis) < 1 { + d.SetId("") + log.Printf("[WARN]%s resource `VpcEniSgAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + eni := enis[0] + + _ = d.Set("network_interface_ids", []*string{&networkInterfaceId}) + + if eni.GroupSet != nil { + _ = d.Set("security_group_ids", eni.GroupSet) + } + + return nil +} + +func resourceTencentCloudEniSgAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_eni_sg_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + networkInterfaceId := d.Id() + + var securityGroupIds []string + if v, ok := d.GetOk("security_group_ids"); ok { + securityGroupIdsSet := v.(*schema.Set).List() + for i := range securityGroupIdsSet { + securityGroupId := securityGroupIdsSet[i].(string) + securityGroupIds = append(securityGroupIds, securityGroupId) + } + } + + if err := service.DeleteVpcEniSgAttachmentById(ctx, networkInterfaceId, securityGroupIds); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_eni_sg_attachment_test.go b/tencentcloud/services/vpc/resource_tc_eni_sg_attachment_test.go similarity index 75% rename from tencentcloud/resource_tc_eni_sg_attachment_test.go rename to tencentcloud/services/vpc/resource_tc_eni_sg_attachment_test.go index 264fb55918..5d8f71f35a 100644 --- a/tencentcloud/resource_tc_eni_sg_attachment_test.go +++ b/tencentcloud/services/vpc/resource_tc_eni_sg_attachment_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vpc_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,9 +17,9 @@ func TestAccTencentCloudVpcEniSgAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniSgAttachmentDestroy, Steps: []resource.TestStep{ { @@ -35,15 +39,15 @@ func TestAccTencentCloudVpcEniSgAttachmentResource_basic(t *testing.T) { func testAccCheckEniSgAttachmentExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) enis, err := service.DescribeEniById(ctx, []string{rs.Primary.ID}) if err != nil { @@ -73,9 +77,9 @@ func testAccCheckEniSgAttachmentDestroy(s *terraform.State) error { if rs.Type != "tencentcloud_eni_sg_attachment" { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) enis, err := service.DescribeEniById(ctx, []string{rs.Primary.ID}) if err != nil { diff --git a/tencentcloud/resource_tc_eni_test.go b/tencentcloud/services/vpc/resource_tc_eni_test.go similarity index 91% rename from tencentcloud/resource_tc_eni_test.go rename to tencentcloud/services/vpc/resource_tc_eni_test.go index 0eee0e2283..32a7ab24ef 100644 --- a/tencentcloud/resource_tc_eni_test.go +++ b/tencentcloud/services/vpc/resource_tc_eni_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -9,6 +9,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -21,18 +25,16 @@ func init() { } func testSweepEniInstance(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeEniByFilters(ctx, nil, nil, nil, nil, nil, nil, nil, nil) if err != nil { @@ -45,16 +47,16 @@ func testSweepEniInstance(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 } @@ -70,8 +72,8 @@ func TestAccTencentCloudEni_basic(t *testing.T) { var eniId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniDestroy(&eniId), Steps: []resource.TestStep{ { @@ -86,7 +88,7 @@ func TestAccTencentCloudEni_basic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_count", "1"), resource.TestCheckNoResourceAttr("tencentcloud_eni.foo", "tags"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "mac"), - resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "primary", "false"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "create_time"), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_info.#", "1"), @@ -106,8 +108,8 @@ func TestAccTencentCloudEni_updateAttr(t *testing.T) { var eniId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniDestroy(&eniId), Steps: []resource.TestStep{ { @@ -122,7 +124,7 @@ func TestAccTencentCloudEni_updateAttr(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_count", "1"), resource.TestCheckNoResourceAttr("tencentcloud_eni.foo", "tags"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "mac"), - resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "primary", "false"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "create_time"), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_info.#", "1"), @@ -153,8 +155,8 @@ func TestAccTencentCloudEni_updateCount(t *testing.T) { var eniId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniDestroy(&eniId), Steps: []resource.TestStep{ { @@ -169,7 +171,7 @@ func TestAccTencentCloudEni_updateCount(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_count", "1"), resource.TestCheckNoResourceAttr("tencentcloud_eni.foo", "tags"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "mac"), - resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "primary", "false"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "create_time"), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_info.#", "1"), @@ -200,8 +202,8 @@ func TestAccTencentCloudEni_updateManually(t *testing.T) { var eniId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEniDestroy(&eniId), Steps: []resource.TestStep{ { @@ -217,7 +219,7 @@ func TestAccTencentCloudEni_updateManually(t *testing.T) { resource.TestCheckNoResourceAttr("tencentcloud_eni.foo", "ipv4_count"), resource.TestCheckNoResourceAttr("tencentcloud_eni.foo", "tags"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "mac"), - resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", ENI_STATE_AVAILABLE), + resource.TestCheckResourceAttr("tencentcloud_eni.foo", "state", svcvpc.ENI_STATE_AVAILABLE), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "primary", "false"), resource.TestCheckResourceAttrSet("tencentcloud_eni.foo", "create_time"), resource.TestCheckResourceAttr("tencentcloud_eni.foo", "ipv4_info.#", "1"), @@ -261,7 +263,7 @@ func testAccCheckEniExists(n string, id *string) resource.TestCheckFunc { return fmt.Errorf("no eni id is set") } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) enis, err := service.DescribeEniById(context.TODO(), []string{rs.Primary.ID}) if err != nil { @@ -285,8 +287,8 @@ func testAccCheckEniExists(n string, id *string) resource.TestCheckFunc { func testAccCheckEniDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := VpcService{client: client} + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcvpc.NewVpcService(client) enis, err := service.DescribeEniById(context.TODO(), []string{*id}) if err != nil { diff --git a/tencentcloud/services/vpc/resource_tc_ha_vip.go b/tencentcloud/services/vpc/resource_tc_ha_vip.go new file mode 100644 index 0000000000..82bfe9ed1d --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_ha_vip.go @@ -0,0 +1,241 @@ +package vpc + +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" + "github.com/pkg/errors" + 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/internal/helper" +) + +func ResourceTencentCloudHaVip() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudHaVipCreate, + Read: resourceTencentCloudHaVipRead, + Update: resourceTencentCloudHaVipUpdate, + Delete: resourceTencentCloudHaVipDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), + Description: "Name of the HA VIP. The length of character is limited to 1-60.", + }, + "vpc_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "VPC ID.", + }, + "subnet_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Subnet ID.", + }, + "vip": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ValidateFunc: tccommon.ValidateIp, + Description: "Virtual IP address, it must not be occupied and in this VPC network segment. If not set, it will be assigned after resource created automatically.", + }, + "state": { + Type: schema.TypeString, + Computed: true, + Description: "State of the HA VIP. Valid value: `AVAILABLE`, `UNBIND`.", + }, + "instance_id": { + Type: schema.TypeString, + Computed: true, + Description: "Instance ID that is associated.", + }, + "network_interface_id": { + Type: schema.TypeString, + Computed: true, + Description: "Network interface ID that is associated.", + }, + "address_ip": { + Type: schema.TypeString, + Computed: true, + Description: "EIP that is associated.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the HA VIP.", + }, + }, + } +} + +func resourceTencentCloudHaVipCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewCreateHaVipRequest() + request.VpcId = helper.String(d.Get("vpc_id").(string)) + request.SubnetId = helper.String(d.Get("subnet_id").(string)) + request.HaVipName = helper.String(d.Get("name").(string)) + //optional + if v, ok := d.GetOk("vip"); ok { + request.Vip = helper.String(v.(string)) + } + var response *vpc.CreateHaVipResponse + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateHaVip(request) + if e != nil { + return tccommon.RetryError(errors.WithStack(e)) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create HA VIP failed, reason:%+v", logId, err) + return err + } + + if response.Response.HaVip == nil { + return fmt.Errorf("HA VIP id is nil") + } + haVipId := *response.Response.HaVip.HaVipId + d.SetId(haVipId) + + return resourceTencentCloudHaVipRead(d, meta) +} + +func resourceTencentCloudHaVipRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + haVipId := d.Id() + request := vpc.NewDescribeHaVipsRequest() + request.HaVipIds = []*string{&haVipId} + + var response *vpc.DescribeHaVipsResponse + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(request) + if e != nil { + return tccommon.RetryError(errors.WithStack(e)) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s read HA VIP failed, reason:%+v", logId, err) + return err + } + if len(response.Response.HaVipSet) < 1 { + d.SetId("") + return nil + } + + haVip := response.Response.HaVipSet[0] + + _ = d.Set("name", *haVip.HaVipName) + _ = d.Set("create_time", *haVip.CreatedTime) + _ = d.Set("vip", *haVip.Vip) + _ = d.Set("vpc_id", *haVip.VpcId) + _ = d.Set("subnet_id", *haVip.SubnetId) + _ = d.Set("address_ip", *haVip.AddressIp) + _ = d.Set("state", *haVip.State) + _ = d.Set("network_interface_id", *haVip.NetworkInterfaceId) + _ = d.Set("instance_id", *haVip.InstanceId) + + return nil +} + +func resourceTencentCloudHaVipUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + haVipId := d.Id() + request := vpc.NewModifyHaVipAttributeRequest() + request.HaVipId = &haVipId + if d.HasChange("name") { + request.HaVipName = helper.String(d.Get("name").(string)) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyHaVipAttribute(request) + if e != nil { + return tccommon.RetryError(errors.WithStack(e)) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s modify HA VIP failed, reason:%+v", logId, err) + return err + } + } + + return resourceTencentCloudHaVipRead(d, meta) +} + +func resourceTencentCloudHaVipDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + haVipId := d.Id() + + request := vpc.NewDeleteHaVipRequest() + request.HaVipId = &haVipId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteHaVip(request) + if e != nil { + return tccommon.RetryError(errors.WithStack(e), VPCUnsupportedOperation) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s delete HA VIP failed, reason:%+v", logId, err) + return err + } + //to get the status of haVip + statRequest := vpc.NewDescribeHaVipsRequest() + statRequest.HaVipIds = []*string{&haVipId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(statRequest) + if e != nil { + ee, ok := e.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(errors.WithStack(ee)) + } + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", + logId, statRequest.GetAction(), statRequest.ToJsonString(), e) + return nil + } else { + //when associated eip is in deleting process, delete ha vip may return unsupported operation error + return tccommon.RetryError(errors.WithStack(e), VPCUnsupportedOperation) + } + } else { + //if not, quit + if len(result.Response.HaVipSet) == 0 { + return nil + } + //else consider delete fail + return resource.RetryableError(fmt.Errorf("deleting retry")) + } + }) + if err != nil { + log.Printf("[CRITAL]%s delete HA VIP failed, reason:%+v", logId, err) + return err + } + return nil +} diff --git a/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment.go b/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment.go new file mode 100644 index 0000000000..0bd4e8acc3 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment.go @@ -0,0 +1,208 @@ +package vpc + +import ( + "context" + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudHaVipEipAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudHaVipEipAttachmentCreate, + Read: resourceTencentCloudHaVipEipAttachmentRead, + Delete: resourceTencentCloudHaVipEipAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "havip_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of the attached HA VIP.", + }, + "address_ip": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: tccommon.ValidateIp, + Description: "Public address of the EIP.", + }, + }, + } +} + +func resourceTencentCloudHaVipEipAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip_eip_attachment.create")() + + haVipId := d.Get("havip_id").(string) + addressIp := d.Get("address_ip").(string) + + bindErr := haVipAssociateEip(meta, haVipId, addressIp) + if bindErr != nil { + return bindErr + } + + d.SetId(haVipId + "#" + addressIp) + + return resourceTencentCloudHaVipEipAttachmentRead(d, meta) +} + +func resourceTencentCloudHaVipEipAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip_eip_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + haVipEipAttachmentId := d.Id() + + eip := "" + haVip := "" + has := false + vpcService := VpcService{ + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), + } + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + eipId, haVipId, flag, e := vpcService.DescribeHaVipEipById(ctx, haVipEipAttachmentId) + if e != nil { + return tccommon.RetryError(e) + } + has = flag + eip = eipId + haVip = haVipId + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s read HA VIP EIP attachment failed, reason:%s\n", logId, err) + return err + } + + if !has { + d.SetId("") + return nil + } + _ = d.Set("havip_id", haVip) + _ = d.Set("address_ip", eip) + d.SetId(haVipEipAttachmentId) + + return nil +} + +func resourceTencentCloudHaVipEipAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ha_vip_eip_attachment.delete")() + + haVipEipAttachmentId := d.Id() + items := strings.Split(haVipEipAttachmentId, "#") + if len(items) != 2 { + return fmt.Errorf("decode HA VIP EIP attachment id error") + } + haVipId := items[0] + addressIp := items[1] + + unBindErr := haVipDisassociateEip(meta, haVipId, addressIp) + if unBindErr != nil { + return unBindErr + } + + return nil +} + +func haVipAssociateEip(meta interface{}, havipId string, eip string) error { + //associate eip + logId := tccommon.GetLogId(tccommon.ContextNil) + bindRequest := vpc.NewHaVipAssociateAddressIpRequest() + bindRequest.HaVipId = helper.String(havipId) + bindRequest.AddressIp = helper.String(eip) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().HaVipAssociateAddressIp(bindRequest) + if e != nil { + return tccommon.RetryError(errors.WithStack(e)) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create HA VIP EIP attachment failed, reason:%+v", logId, err) + return err + } + + statRequest := vpc.NewDescribeHaVipsRequest() + statRequest.HaVipIds = []*string{&havipId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(statRequest) + if e != nil { + return tccommon.RetryError(errors.WithStack(e), VPCUnsupportedOperation) + } else { + if len(result.Response.HaVipSet) > 0 { + if *result.Response.HaVipSet[0].AddressIp == "" { + return resource.RetryableError(fmt.Errorf("Not binded yet, retry describing")) + } else { + return nil + } + } + return resource.NonRetryableError(fmt.Errorf("describe error")) + } + }) + if err != nil { + log.Printf("[CRITAL]%s describe HA VIP failed, reason:%+v", logId, err) + return err + } + + return nil +} + +func haVipDisassociateEip(meta interface{}, havipId string, eip string) error { + //associate eip + logId := tccommon.GetLogId(tccommon.ContextNil) + bindRequest := vpc.NewHaVipDisassociateAddressIpRequest() + bindRequest.HaVipId = helper.String(havipId) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().HaVipDisassociateAddressIp(bindRequest) + if e != nil { + return tccommon.RetryError(errors.WithStack(e)) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create HA VIP attachment failed, reason:%+v", logId, err) + return err + } + + statRequest := vpc.NewDescribeHaVipsRequest() + statRequest.HaVipIds = []*string{&havipId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeHaVips(statRequest) + if e != nil { + //when associated eip is in deleting process, delete ha vip may return unsupported operation error + return tccommon.RetryError(errors.WithStack(e), VPCUnsupportedOperation) + + } else { + //if not, quit + if len(result.Response.HaVipSet) > 0 { + if *result.Response.HaVipSet[0].AddressIp != "" { + return resource.RetryableError(fmt.Errorf("Not unbinded yet, retry describing")) + } else { + return nil + } + } + return resource.NonRetryableError(fmt.Errorf("describe error")) + } + }) + if err != nil { + log.Printf("[CRITAL]%s describe HA VIP failed, reason:%+v", logId, err) + return err + } + + return nil +} diff --git a/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment_test.go b/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment_test.go new file mode 100644 index 0000000000..1e11c5f295 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_ha_vip_eip_attachment_test.go @@ -0,0 +1,96 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudHaVipEipAttachment_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckHaVipEipAttachmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAccHaVipEipAttachment_basic, + Check: resource.ComposeTestCheckFunc( + testAccCheckHaVipEipAttachmentExists("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic"), + resource.TestCheckResourceAttrSet("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", "havip_id"), + resource.TestCheckResourceAttrSet("tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", "address_ip"), + ), + }, + { + ResourceName: "tencentcloud_ha_vip_eip_attachment.ha_vip_eip_attachment_basic", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckHaVipEipAttachmentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_ha_vip_eip_attachment" { + continue + } + + _, _, has, err := vpcService.DescribeHaVipEipById(ctx, rs.Primary.ID) + if err == nil && has { + return fmt.Errorf("HA VIP EIP attachment still exists: %s", rs.Primary.ID) + } + } + return nil +} + +func testAccCheckHaVipEipAttachmentExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("HA VIP EIP attachment %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("HA VIP EIP attachment id is not set") + } + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, _, has, err := vpcService.DescribeHaVipEipById(ctx, rs.Primary.ID) + if err != nil { + return err + } + if !has { + return fmt.Errorf("HA VIP EIP attachment does not exist: %s", rs.Primary.ID) + } + return nil + } +} + +const testAccHaVipEipAttachment_basic = tcacctest.DefaultVpcVariable + ` +#Create EIP +resource "tencentcloud_eip" "eip" { + name = "havip_eip" +} +resource "tencentcloud_ha_vip" "havip" { + name = "terraform_test" + vpc_id = var.vpc_id + subnet_id = var.subnet_id +} +resource "tencentcloud_ha_vip_eip_attachment" "ha_vip_eip_attachment_basic"{ + havip_id = tencentcloud_ha_vip.havip.id + address_ip = tencentcloud_eip.eip.public_ip +} +` diff --git a/tencentcloud/resource_tc_ha_vip_test.go b/tencentcloud/services/vpc/resource_tc_ha_vip_test.go similarity index 76% rename from tencentcloud/resource_tc_ha_vip_test.go rename to tencentcloud/services/vpc/resource_tc_ha_vip_test.go index 5bbcbdbc21..09b37f1cf9 100644 --- a/tencentcloud/resource_tc_ha_vip_test.go +++ b/tencentcloud/services/vpc/resource_tc_ha_vip_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/pkg/errors" @@ -23,18 +27,16 @@ func init() { } func testSweepHaVipInstance(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeHaVipByFilter(ctx, nil) if err != nil { @@ -47,13 +49,13 @@ func testSweepHaVipInstance(region string) error { 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 } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -68,8 +70,8 @@ func testSweepHaVipInstance(region string) error { func TestAccTencentCloudHaVip_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: testAccCheckHaVipDestroy, Steps: []resource.TestStep{ { @@ -103,8 +105,8 @@ func TestAccTencentCloudHaVip_basic(t *testing.T) { func TestAccTencentCloudHaVip_assigned(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: testAccCheckHaVipDestroy, Steps: []resource.TestStep{ { @@ -124,9 +126,9 @@ func TestAccTencentCloudHaVip_assigned(t *testing.T) { } func testAccCheckHaVipDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ha_vip" { continue @@ -134,19 +136,19 @@ func testAccCheckHaVipDestroy(s *terraform.State) error { request := vpc.NewDescribeHaVipsRequest() request.HaVipIds = []*string{&rs.Primary.ID} var response *vpc.DescribeHaVipsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeHaVips(request) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) if !ok { - return retryError(errors.WithStack(e)) + return tccommon.RetryError(errors.WithStack(e)) } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e) return resource.NonRetryableError(e) } else { - return retryError(errors.WithStack(e)) + return tccommon.RetryError(errors.WithStack(e)) } } response = result @@ -174,7 +176,7 @@ func testAccCheckHaVipDestroy(s *terraform.State) error { func testAccCheckHaVipExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -183,14 +185,14 @@ func testAccCheckHaVipExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("HA VIP id is not set") } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeHaVipsRequest() request.HaVipIds = []*string{&rs.Primary.ID} var response *vpc.DescribeHaVipsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeHaVips(request) if e != nil { - return retryError(errors.WithStack(e)) + return tccommon.RetryError(errors.WithStack(e)) } response = result return nil @@ -206,14 +208,14 @@ func testAccCheckHaVipExists(n string) resource.TestCheckFunc { } } -const testAccHaVipConfig = defaultVpcVariable + ` +const testAccHaVipConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_ha_vip" "havip" { name = "terraform_test" vpc_id = var.vpc_id subnet_id = var.subnet_id } ` -const testAccHaVipConfigUpdate = defaultVpcVariable + ` +const testAccHaVipConfigUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_ha_vip" "havip" { name = "terraform_update" vpc_id = var.vpc_id @@ -221,7 +223,7 @@ resource "tencentcloud_ha_vip" "havip" { } ` -const testAccHaVipConfigAssigned = defaultVpcVariable + ` +const testAccHaVipConfigAssigned = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_ha_vip" "havip" { name = "terraform_test" vpc_id = var.vpc_id diff --git a/tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth.go b/tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth.go new file mode 100644 index 0000000000..ddc841358d --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth.go @@ -0,0 +1,233 @@ +package vpc + +import ( + "context" + "fmt" + "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 ResourceTencentCloudIpv6AddressBandwidth() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudIpv6AddressBandwidthCreate, + Read: resourceTencentCloudIpv6AddressBandwidthRead, + Update: resourceTencentCloudIpv6AddressBandwidthUpdate, + Delete: resourceTencentCloudIpv6AddressBandwidthDelete, + // it can support import because + //Importer: &schema.ResourceImporter{ + // State: schema.ImportStatePassthrough, + //}, + Schema: map[string]*schema.Schema{ + "ipv6_address": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "IPV6 address that needs to be enabled for public network access.", + }, + + "internet_max_bandwidth_out": { + Optional: true, + Type: schema.TypeInt, + Default: 1, + Description: "Bandwidth, in Mbps. The default is 1Mbps.", + }, + + "internet_charge_type": { + Optional: true, + Type: schema.TypeString, + Description: "Network billing mode. IPV6 currently supports: `TRAFFIC_POSTPAID_BY_HOUR`, for standard account types; `BANDWIDTH_PACKAGE`, for traditional account types. The default network billing mode is: `TRAFFIC_POSTPAID_BY_HOUR`.", + }, + + "bandwidth_package_id": { + Optional: true, + Type: schema.TypeString, + Description: "The bandwidth package id, the Legacy account and the ipv6 address to apply for the bandwidth package charge type need to be passed in.", + }, + }, + } +} + +func resourceTencentCloudIpv6AddressBandwidthCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ipv6_address_bandwidth.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAllocateIp6AddressesBandwidthRequest() + response = vpc.NewAllocateIp6AddressesBandwidthResponse() + ip6AddressId string + ) + if v, ok := d.GetOk("ipv6_address"); ok { + ip6AddressId := helper.String(v.(string)) + request.Ip6Addresses = []*string{ip6AddressId} + } + + if v, ok := d.GetOkExists("internet_max_bandwidth_out"); ok { + request.InternetMaxBandwidthOut = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("internet_charge_type"); ok { + request.InternetChargeType = helper.String(v.(string)) + } + + if v, ok := d.GetOk("bandwidth_package_id"); ok { + request.BandwidthPackageId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AllocateIp6AddressesBandwidth(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 vpc ipv6Address failed, reason:%+v", logId, err) + return err + } + + taskId := *response.Response.TaskId + d.SetId(ip6AddressId) + + ip6AddressId = *response.Response.AddressSet[0] + d.SetId(ip6AddressId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*tccommon.ReadRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(taskId, []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + return resourceTencentCloudIpv6AddressBandwidthRead(d, meta) +} + +func resourceTencentCloudIpv6AddressBandwidthRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ipv6_address_bandwidth.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + ipv6AddressId := d.Id() + + ipv6Address, err := service.DescribeVpcIpv6AddressById(ctx, ipv6AddressId) + if err != nil { + return err + } + + if ipv6Address == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcIpv6Address` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("ipv6_address", ipv6Address.AddressIp) + + if ipv6Address.Bandwidth != nil { + _ = d.Set("internet_max_bandwidth_out", ipv6Address.Bandwidth) + } + + if ipv6Address.InternetChargeType != nil { + _ = d.Set("internet_charge_type", ipv6Address.InternetChargeType) + } + + //if ipv6Address.BandwidthPackageId != nil { + // _ = d.Set("bandwidth_package_id", ipv6Address.BandwidthPackageId) + //} + + return nil +} + +func resourceTencentCloudIpv6AddressBandwidthUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ipv6_address_bandwidth.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewModifyIp6AddressesBandwidthRequest() + + ipv6AddressId := d.Id() + + request.Ip6AddressIds = []*string{&ipv6AddressId} + + immutableArgs := []string{"internet_charge_type", "bandwidth_package_id"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + needChange := false + + if d.HasChange("internet_max_bandwidth_out") { + needChange = true + if v, ok := d.GetOkExists("internet_max_bandwidth_out"); ok { + request.InternetMaxBandwidthOut = helper.IntInt64(v.(int)) + } + } + + if needChange { + var taskId string + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyIp6AddressesBandwidth(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()) + } + taskId = *result.Response.TaskId + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc ipv6Address failed, reason:%+v", logId, err) + return err + } + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*tccommon.ReadRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(taskId, []string{})) + + if _, e := conf.WaitForState(); e != nil { + return e + } + + } + + return resourceTencentCloudIpv6AddressBandwidthRead(d, meta) +} + +func resourceTencentCloudIpv6AddressBandwidthDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_ipv6_address_bandwidth.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ipv6AddressId := d.Id() + + if err := service.DeleteVpcIpv6AddressById(ctx, ipv6AddressId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_ipv6_address_bandwidth_test.go b/tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth_test.go similarity index 88% rename from tencentcloud/resource_tc_ipv6_address_bandwidth_test.go rename to tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth_test.go index c3b61ef7b6..0db9574f05 100644 --- a/tencentcloud/resource_tc_ipv6_address_bandwidth_test.go +++ b/tencentcloud/services/vpc/resource_tc_ipv6_address_bandwidth_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudIpv6AddressBandwidthResource_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: testAccIpv6AddressBandwidth, diff --git a/tencentcloud/resource_tc_nat_gateway.go b/tencentcloud/services/vpc/resource_tc_nat_gateway.go similarity index 78% rename from tencentcloud/resource_tc_nat_gateway.go rename to tencentcloud/services/vpc/resource_tc_nat_gateway.go index 14a6de15f3..f0f3a4ba5f 100644 --- a/tencentcloud/resource_tc_nat_gateway.go +++ b/tencentcloud/services/vpc/resource_tc_nat_gateway.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( "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 resourceTencentCloudNatGateway() *schema.Resource { +func ResourceTencentCloudNatGateway() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudNatGatewayCreate, Read: resourceTencentCloudNatGatewayRead, @@ -32,14 +36,14 @@ func resourceTencentCloudNatGateway() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the NAT gateway.", }, "max_concurrent": { Type: schema.TypeInt, Optional: true, Default: 1000000, - ValidateFunc: validateAllowedIntValue([]int{1000000, 3000000, 10000000}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1000000, 3000000, 10000000}), Description: "The upper limit of concurrent connection of NAT gateway. Valid values: `1000000`, `3000000`, `10000000`. Default is `1000000`.", }, "bandwidth": { @@ -53,7 +57,7 @@ func resourceTencentCloudNatGateway() *schema.Resource { Required: true, Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, }, MinItems: 1, MaxItems: 10, @@ -95,9 +99,9 @@ func resourceTencentCloudNatGateway() *schema.Resource { } func resourceTencentCloudNatGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway.create")() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewCreateNatGatewayRequest() vpcId := d.Get("vpc_id").(string) natGatewayName := d.Get("name").(string) @@ -140,12 +144,12 @@ func resourceTencentCloudNatGatewayCreate(d *schema.ResourceData, meta interface } var response *vpc.CreateNatGatewayResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateNatGateway(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateNatGateway(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) } response = result return nil @@ -161,11 +165,11 @@ func resourceTencentCloudNatGatewayCreate(d *schema.ResourceData, meta interface d.SetId(*response.Response.NatGatewaySet[0].NatGatewayId) //cs::vpc:ap-guangzhou:uin/12345:nat/nat-nxxx - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("vpc", "nat", tcClient.Region, d.Id()) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + resourceName := tccommon.BuildTagResourceName("vpc", "nat", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -174,12 +178,12 @@ func resourceTencentCloudNatGatewayCreate(d *schema.ResourceData, meta interface // must wait for finishing creating NAT statRequest := vpc.NewDescribeNatGatewaysRequest() statRequest.NatGatewayIds = []*string{response.Response.NatGatewaySet[0].NatGatewayId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGateways(statRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGateways(statRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, statRequest.GetAction(), statRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { //if not, quit if len(result.Response.NatGatewaySet) != 1 { @@ -203,22 +207,22 @@ func resourceTencentCloudNatGatewayCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudNatGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway.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) natGatewayId := d.Id() request := vpc.NewDescribeNatGatewaysRequest() request.NatGatewayIds = []*string{&natGatewayId} var response *vpc.DescribeNatGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGateways(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGateways(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) } response = result return nil @@ -248,8 +252,8 @@ func resourceTencentCloudNatGatewayRead(d *schema.ResourceData, meta interface{} _ = d.Set("nat_product_version", *nat.NatProductVersion) } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) tags, err := tagService.DescribeResourceTags(ctx, "vpc", "nat", tcClient.Region, d.Id()) if err != nil { return err @@ -260,11 +264,11 @@ func resourceTencentCloudNatGatewayRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway.update")() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway.update")() - 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()} immutableArgs := []string{"zone"} @@ -290,12 +294,12 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface changed = true } if changed { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyNatGatewayAttribute(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyNatGatewayAttribute(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 }) @@ -311,12 +315,12 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface concurrent := d.Get("max_concurrent").(int) concurrent64 := uint64(concurrent) concurrentReq.MaxConcurrentConnection = &concurrent64 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ResetNatGatewayConnection(concurrentReq) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ResetNatGatewayConnection(concurrentReq) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, concurrentReq.GetAction(), concurrentReq.ToJsonString(), e.Error()) - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -369,10 +373,10 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface if len(unassignedRequest.PublicIpAddresses) > 0 { var response *vpc.DisassociateNatGatewayAddressResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result != nil && result.Response != nil { response = result.Response @@ -417,12 +421,12 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface } if len(assignedRequest.PublicIpAddresses) > 0 { var response *vpc.AssociateNatGatewayAddressResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateNatGatewayAddress(assignedRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, assignedRequest.GetAction(), assignedRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } if result != nil && result.Response != nil { response = result.Response @@ -449,10 +453,10 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface unassignedRequest := vpc.NewDisassociateNatGatewayAddressRequest() unassignedRequest.NatGatewayId = &natGatewayId unassignedRequest.PublicIpAddresses = []*string{&backUpOldIp} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := vpcService.DisassociateNatGatewayAddress(ctx, unassignedRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result != nil && result.Response != nil { response = result.Response @@ -476,12 +480,12 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface assignedRequest := vpc.NewAssociateNatGatewayAddressRequest() assignedRequest.NatGatewayId = &natGatewayId assignedRequest.PublicIpAddresses = []*string{&backUpNewIp} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateNatGatewayAddress(assignedRequest) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateNatGatewayAddress(assignedRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, assignedRequest.GetAction(), assignedRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } if result != nil && result.Response != nil { response = result.Response @@ -506,11 +510,11 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface if d.HasChange("tags") { oldValue, newValue := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("vpc", "nat", tcClient.Region, d.Id()) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + resourceName := tccommon.BuildTagResourceName("vpc", "nat", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -523,19 +527,19 @@ func resourceTencentCloudNatGatewayUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudNatGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) natGatewayId := d.Id() request := vpc.NewDeleteNatGatewayRequest() request.NatGatewayId = &natGatewayId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteNatGateway(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteNatGateway(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 }) @@ -549,12 +553,12 @@ func resourceTencentCloudNatGatewayDelete(d *schema.ResourceData, meta interface statRequest := vpc.NewDescribeNatGatewaysRequest() statRequest.NatGatewayIds = []*string{&natGatewayId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeNatGateways(statRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeNatGateways(statRequest) 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 { //if not, quit if len(result.Response.NatGatewaySet) == 0 { diff --git a/tencentcloud/resource_tc_nat_gateway_snat.go b/tencentcloud/services/vpc/resource_tc_nat_gateway_snat.go similarity index 86% rename from tencentcloud/resource_tc_nat_gateway_snat.go rename to tencentcloud/services/vpc/resource_tc_nat_gateway_snat.go index 0bbe04875a..7f212f4f28 100644 --- a/tencentcloud/resource_tc_nat_gateway_snat.go +++ b/tencentcloud/services/vpc/resource_tc_nat_gateway_snat.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc import ( "context" "errors" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "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 resourceTencentCloudNatGatewaySnat() *schema.Resource { +func ResourceTencentCloudNatGatewaySnat() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudNatGatewaySnatCreate, Read: resourceTencentCloudNatGatewaySnatRead, @@ -87,12 +90,12 @@ func NatGatewaySnatPara() map[string]*schema.Schema { } func resourceTencentCloudNatGatewaySnatCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway_snat.create")() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_snat.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()} natGatewayId = d.Get("nat_gateway_id").(string) ) @@ -133,13 +136,13 @@ func resourceTencentCloudNatGatewaySnatCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudNatGatewaySnatRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway_snat.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_snat.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) compositeId := helper.IdParse(id) @@ -180,12 +183,12 @@ func resourceTencentCloudNatGatewaySnatRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudNatGatewaySnatUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_route.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_route.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) compositeId := helper.IdParse(id) @@ -211,12 +214,12 @@ func resourceTencentCloudNatGatewaySnatUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudNatGatewaySnatDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_nat_gateway_snat.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_snat.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) natGatewayId := d.Get("nat_gateway_id").(string) @@ -230,7 +233,7 @@ func resourceTencentCloudNatGatewaySnatDelete(d *schema.ResourceData, meta inter } func paramValid(d *schema.ResourceData) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) resourceType := d.Get("resource_type") _, hasSubnetId := d.GetOk("subnet_id") _, hasCidrBlock := d.GetOk("subnet_cidr_block") diff --git a/tencentcloud/resource_tc_nat_gateway_snat_test.go b/tencentcloud/services/vpc/resource_tc_nat_gateway_snat_test.go similarity index 84% rename from tencentcloud/resource_tc_nat_gateway_snat_test.go rename to tencentcloud/services/vpc/resource_tc_nat_gateway_snat_test.go index e3ba7703b8..af0d107ca8 100644 --- a/tencentcloud/resource_tc_nat_gateway_snat_test.go +++ b/tencentcloud/services/vpc/resource_tc_nat_gateway_snat_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "fmt" @@ -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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudNatGatewaySnat_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: testAccCheckNatGatewaySnatDestroy, Steps: []resource.TestStep{ { @@ -40,9 +44,9 @@ func TestAccTencentCloudNatGatewaySnat_basic(t *testing.T) { } func testAccCheckNatGatewaySnatDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_nat_gateway_snat" { continue @@ -52,9 +56,9 @@ func testAccCheckNatGatewaySnatDestroy(s *terraform.State) error { return fmt.Errorf("nat gateway snat id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) - err, result := service.DescribeNatGatewaySnats(contextNil, ids[0], nil) + err, result := service.DescribeNatGatewaySnats(tccommon.ContextNil, ids[0], nil) if err != nil { log.Printf("[CRITAL]%s read nat gateway snat failed, reason:%s\n ", logId, err.Error()) return err @@ -69,7 +73,7 @@ func testAccCheckNatGatewaySnatDestroy(s *terraform.State) error { func testAccCheckNatGatewaySnatExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -80,10 +84,10 @@ func testAccCheckNatGatewaySnatExists(n string) resource.TestCheckFunc { return fmt.Errorf("nat gateway snat id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - err, result := service.DescribeNatGatewaySnats(contextNil, ids[0], nil) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + err, result := service.DescribeNatGatewaySnats(tccommon.ContextNil, ids[0], nil) if err != nil { log.Printf("[CRITAL]%s read nat gateway snat failed, reason:%s\n ", logId, err.Error()) return err diff --git a/tencentcloud/resource_tc_nat_gateway_test.go b/tencentcloud/services/vpc/resource_tc_nat_gateway_test.go similarity index 80% rename from tencentcloud/resource_tc_nat_gateway_test.go rename to tencentcloud/services/vpc/resource_tc_nat_gateway_test.go index 10b4324cd3..748086f7c0 100644 --- a/tencentcloud/resource_tc_nat_gateway_test.go +++ b/tencentcloud/services/vpc/resource_tc_nat_gateway_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" @@ -21,18 +25,16 @@ func init() { } func testSweepNatInstance(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeNatGatewayByFilter(ctx, nil) if err != nil { @@ -45,16 +47,16 @@ func testSweepNatInstance(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 } @@ -68,8 +70,8 @@ func testSweepNatInstance(region string) error { func TestAccTencentCloudNatGateway_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: testAccCheckNatGatewayDestroy, Steps: []resource.TestStep{ { @@ -99,9 +101,9 @@ func TestAccTencentCloudNatGateway_basic(t *testing.T) { } func testAccCheckNatGatewayDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_nat_gateway" { continue @@ -109,12 +111,12 @@ func testAccCheckNatGatewayDestroy(s *terraform.State) error { request := vpc.NewDescribeNatGatewaysRequest() request.NatGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeNatGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeNatGateways(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) } response = result return nil @@ -133,7 +135,7 @@ func testAccCheckNatGatewayDestroy(s *terraform.State) error { func testAccCheckNatGatewayExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -142,16 +144,16 @@ func testAccCheckNatGatewayExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("nat gateway id is not set") } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeNatGatewaysRequest() request.NatGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeNatGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeNatGateways(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) } response = result return nil diff --git a/tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route.go b/tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route.go new file mode 100644 index 0000000000..20599f24a4 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route.go @@ -0,0 +1,104 @@ +package vpc + +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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudNatRefreshNatDcRoute() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudNatRefreshNatDcRouteCreate, + Read: resourceTencentCloudNatRefreshNatDcRouteRead, + Delete: resourceTencentCloudNatRefreshNatDcRouteDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpc_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Unique identifier of Vpc.", + }, + + "nat_gateway_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Unique identifier of Nat Gateway.", + }, + + "dry_run": { + Required: true, + ForceNew: true, + Type: schema.TypeBool, + Description: "Whether to pre-refresh, valid values: True:yes, False:no.", + }, + }, + } +} + +func resourceTencentCloudNatRefreshNatDcRouteCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewRefreshDirectConnectGatewayRouteToNatGatewayRequest() + vpcId string + natGatewayId string + ) + if v, ok := d.GetOk("vpc_id"); ok { + vpcId = v.(string) + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("nat_gateway_id"); ok { + natGatewayId = v.(string) + request.NatGatewayId = helper.String(v.(string)) + } + + if v, ok := d.GetOkExists("dry_run"); ok { + request.DryRun = helper.Bool(v.(bool)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().RefreshDirectConnectGatewayRouteToNatGateway(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 vpc refreshNatDcRoute failed, reason:%+v", logId, err) + return err + } + + d.SetId(vpcId + tccommon.FILED_SP + natGatewayId) + + return resourceTencentCloudNatRefreshNatDcRouteRead(d, meta) +} + +func resourceTencentCloudNatRefreshNatDcRouteRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudNatRefreshNatDcRouteDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_nat_refresh_nat_dc_route.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_nat_refresh_nat_dc_route_test.go b/tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route_test.go similarity index 82% rename from tencentcloud/resource_tc_nat_refresh_nat_dc_route_test.go rename to tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route_test.go index c9f2bfe090..244ec52554 100644 --- a/tencentcloud/resource_tc_nat_refresh_nat_dc_route_test.go +++ b/tencentcloud/services/vpc/resource_tc_nat_refresh_nat_dc_route_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixNatRefreshNatDcRouteResource_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: testAccNatRefreshNatDcRoute, diff --git a/tencentcloud/services/vpc/resource_tc_protocol_template.go b/tencentcloud/services/vpc/resource_tc_protocol_template.go new file mode 100644 index 0000000000..906a5b4a4c --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_protocol_template.go @@ -0,0 +1,171 @@ +package vpc + +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 ResourceTencentCloudProtocolTemplate() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudProtocolTemplateCreate, + Read: resourceTencentCloudProtocolTemplateRead, + Update: resourceTencentCloudProtocolTemplateUpdate, + Delete: resourceTencentCloudProtocolTemplateDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of the protocol template.", + }, + "protocols": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + ValidateFunc: tccommon.ValidateLowCase, + }, + Required: true, + Description: "Protocol list. Valid protocols are `tcp`, `udp`, `icmp`, `gre`. Single port(tcp:80), multi-port(tcp:80,443), port range(tcp:3306-20000), all(tcp:all) format are support. Protocol `icmp` and `gre` cannot specify port.", + }, + }, + } +} + +func resourceTencentCloudProtocolTemplateCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + name := d.Get("name").(string) + protocols := d.Get("protocols").(*schema.Set).List() + + vpcProtocol := VpcService{ + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), + } + var outErr, inErr error + var templateId string + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + templateId, inErr = vpcProtocol.CreateServiceTemplate(ctx, name, protocols) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(templateId) + + return resourceTencentCloudProtocolTemplateRead(d, meta) +} + +func resourceTencentCloudProtocolTemplateRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + templateId := d.Id() + var outErr, inErr error + vpcProtocol := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + template, has, outErr := vpcProtocol.DescribeServiceTemplateById(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + template, has, inErr = vpcProtocol.DescribeServiceTemplateById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", template.ServiceTemplateName) + _ = d.Set("protocols", template.ServiceSet) + + return nil +} + +func resourceTencentCloudProtocolTemplateUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateId := d.Id() + + if d.HasChange("name") || d.HasChange("protocols") { + var outErr, inErr error + name := d.Get("name").(string) + protocols := d.Get("protocols").(*schema.Set).List() + vpcProtocol := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcProtocol.ModifyServiceTemplate(ctx, templateId, name, protocols) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + if outErr != nil { + return outErr + } + } + + return resourceTencentCloudProtocolTemplateRead(d, meta) +} + +func resourceTencentCloudProtocolTemplateDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateId := d.Id() + vpcProtocol := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + var outErr, inErr error + + outErr = vpcProtocol.DeleteServiceTemplate(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcProtocol.DeleteServiceTemplate(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + } + + if outErr != nil { + return outErr + } + //check not exist + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr := vpcProtocol.DescribeServiceTemplateById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + return resource.RetryableError(fmt.Errorf("protocol template %s is still exists, retry...", templateId)) + } else { + return nil + } + }) + + return outErr +} diff --git a/tencentcloud/services/vpc/resource_tc_protocol_template_group.go b/tencentcloud/services/vpc/resource_tc_protocol_template_group.go new file mode 100644 index 0000000000..909e1012d0 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_protocol_template_group.go @@ -0,0 +1,172 @@ +package vpc + +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 ResourceTencentCloudProtocolTemplateGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudProtocolTemplateGroupCreate, + Read: resourceTencentCloudProtocolTemplateGroupRead, + Update: resourceTencentCloudProtocolTemplateGroupUpdate, + Delete: resourceTencentCloudProtocolTemplateGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Name of the protocol template group.", + }, + "template_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Required: true, + Description: "Service template ID list.", + }, + }, + } +} + +func resourceTencentCloudProtocolTemplateGroupCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template_group.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + name := d.Get("name").(string) + protocols := d.Get("template_ids").(*schema.Set).List() + + vpcService := VpcService{ + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), + } + var outErr, inErr error + var templateGroupId string + + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + templateGroupId, inErr = vpcService.CreateServiceTemplateGroup(ctx, name, protocols) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + if outErr != nil { + return outErr + } + + d.SetId(templateGroupId) + + return resourceTencentCloudProtocolTemplateGroupRead(d, meta) +} + +func resourceTencentCloudProtocolTemplateGroupRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template_group.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + templateId := d.Id() + var outErr, inErr error + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + templateGroup, has, outErr := vpcService.DescribeServiceTemplateGroupById(ctx, templateId) + if outErr != nil { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + templateGroup, has, inErr = vpcService.DescribeServiceTemplateGroupById(ctx, templateId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + return nil + }) + } + if outErr != nil { + return outErr + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("name", templateGroup.ServiceTemplateGroupName) + _ = d.Set("template_ids", templateGroup.ServiceTemplateIdSet) + + return nil +} + +func resourceTencentCloudProtocolTemplateGroupUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template_group.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateGroupId := d.Id() + + if d.HasChange("name") || d.HasChange("template_ids") { + var outErr, inErr error + name := d.Get("name").(string) + templadteIds := d.Get("template_ids").(*schema.Set).List() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.ModifyServiceTemplateGroup(ctx, templateGroupId, name, templadteIds) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + if outErr != nil { + return outErr + } + + } + + return resourceTencentCloudProtocolTemplateGroupRead(d, meta) +} + +func resourceTencentCloudProtocolTemplateGroupDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_protocol_template_group.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + templateGroupId := d.Id() + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + var outErr, inErr error + + outErr = vpcService.DeleteServiceTemplateGroup(ctx, templateGroupId) + if outErr != nil { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + inErr = vpcService.DeleteServiceTemplateGroup(ctx, templateGroupId) + if inErr != nil { + return tccommon.RetryError(inErr, "UnsupportedOperation.MutexOperationTaskRunning") + } + return nil + }) + } + + if outErr != nil { + return outErr + } + + //check not exist + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, has, inErr := vpcService.DescribeServiceTemplateGroupById(ctx, templateGroupId) + if inErr != nil { + return tccommon.RetryError(inErr) + } + if has { + return resource.RetryableError(fmt.Errorf("protocol template group %s is still exists, retry...", templateGroupId)) + } else { + return nil + } + }) + + return outErr +} diff --git a/tencentcloud/resource_tc_protocol_template_group_test.go b/tencentcloud/services/vpc/resource_tc_protocol_template_group_test.go similarity index 77% rename from tencentcloud/resource_tc_protocol_template_group_test.go rename to tencentcloud/services/vpc/resource_tc_protocol_template_group_test.go index e3e4d54cb9..63447eee4e 100644 --- a/tencentcloud/resource_tc_protocol_template_group_test.go +++ b/tencentcloud/services/vpc/resource_tc_protocol_template_group_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vpc_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudProtocolTemplateGroup_basic_and_update(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: testAccCheckProtocolTemplateGroupDestroy, Steps: []resource.TestStep{ { @@ -41,9 +45,9 @@ func TestAccTencentCloudProtocolTemplateGroup_basic_and_update(t *testing.T) { } func testAccCheckProtocolTemplateGroupDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_protocol_template_group" { continue @@ -62,15 +66,15 @@ func testAccCheckProtocolTemplateGroupDestroy(s *terraform.State) error { func testAccCheckProtocolTemplateGroupExists(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 { return fmt.Errorf("Service template group %s is not found", n) } - vpcService := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := vpcService.DescribeServiceTemplateGroupById(ctx, rs.Primary.ID) if !has { return fmt.Errorf("Service template group %s is not found", rs.Primary.ID) diff --git a/tencentcloud/services/vpc/resource_tc_protocol_template_test.go b/tencentcloud/services/vpc/resource_tc_protocol_template_test.go new file mode 100644 index 0000000000..8d722685ed --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_protocol_template_test.go @@ -0,0 +1,100 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudProtocolTemplate_basic_and_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckProtocolTemplateDestroy, + Steps: []resource.TestStep{ + { + Config: testAccProtocolTemplate_basic, + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "name", "test"), + resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "protocols.#", "1"), + ), + }, + { + ResourceName: "tencentcloud_protocol_template.template", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccProtocolTemplate_basic_update_remark, + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckProtocolTemplateExists("tencentcloud_protocol_template.template"), + resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "name", "test_update"), + resource.TestCheckResourceAttr("tencentcloud_protocol_template.template", "protocols.#", "2"), + ), + }, + }, + }) +} + +func testAccCheckProtocolTemplateDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_protocol_template" { + continue + } + + _, has, err := vpcService.DescribeServiceTemplateById(ctx, rs.Primary.ID) + if has { + return fmt.Errorf("protocol template still exists") + } + if err != nil { + return err + } + } + return nil +} + +func testAccCheckProtocolTemplateExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("Service template %s is not found", n) + } + + vpcService := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := vpcService.DescribeServiceTemplateById(ctx, rs.Primary.ID) + if !has { + return fmt.Errorf("Service template %s is not found", rs.Primary.ID) + } + if err != nil { + return err + } + + return nil + } +} + +const testAccProtocolTemplate_basic = ` +resource "tencentcloud_protocol_template" "template" { + name = "test" + protocols = ["tcp:80"] +}` + +const testAccProtocolTemplate_basic_update_remark = ` +resource "tencentcloud_protocol_template" "template" { + name = "test_update" + protocols = ["udp:all", "tcp:80,90"] +}` diff --git a/tencentcloud/resource_tc_route_entry.go b/tencentcloud/services/vpc/resource_tc_route_entry.go similarity index 82% rename from tencentcloud/resource_tc_route_entry.go rename to tencentcloud/services/vpc/resource_tc_route_entry.go index 85be6e509c..278bc201c7 100644 --- a/tencentcloud/resource_tc_route_entry.go +++ b/tencentcloud/services/vpc/resource_tc_route_entry.go @@ -1,10 +1,12 @@ -package tencentcloud +package vpc 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/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -23,6 +25,8 @@ var routeTypeApiMap = map[string]int{ "local_gateway": 11, } +var RouteTypeApiMap = routeTypeApiMap + var routeTypeNewMap = map[string]string{ "public_gateway": "CVM", "vpn_gateway": "VPN", @@ -36,7 +40,9 @@ var routeTypeNewMap = map[string]string{ "local_gateway": "LOCAL_GATEWAY", } -func resourceTencentCloudRouteEntry() *schema.Resource { +var RouteTypeNewMap = routeTypeNewMap + +func ResourceTencentCloudRouteEntry() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.10.0. Please use 'tencentcloud_route_table_entry' instead.", Create: resourceTencentCloudRouteEntryCreate, @@ -60,7 +66,7 @@ func resourceTencentCloudRouteEntry() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCIDRNetworkAddress, + ValidateFunc: tccommon.ValidateCIDRNetworkAddress, Description: "The RouteEntry's target network segment.", }, "next_type": { @@ -92,11 +98,11 @@ func resourceTencentCloudRouteEntry() *schema.Resource { } func resourceTencentCloudRouteEntryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_entry.create")() + defer tccommon.LogElapsed("resource.tencentcloud_route_entry.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} vpcId := d.Get("vpc_id").(string) routeTableId := d.Get("route_table_id").(string) @@ -135,22 +141,22 @@ func resourceTencentCloudRouteEntryCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudRouteEntryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_entry.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_route_entry.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - route, ok := routeIdDecode(d.Id()) + route, ok := RouteIdDecode(d.Id()) if !ok { return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", d.Id()) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -195,22 +201,22 @@ func resourceTencentCloudRouteEntryRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudRouteEntryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_entry.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_route_entry.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - route, ok := routeIdDecode(d.Id()) + route, ok := RouteIdDecode(d.Id()) if !ok { return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", d.Id()) } var routeEntryId int64 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { @@ -250,7 +256,7 @@ func resourceTencentCloudRouteEntryDelete(d *schema.ResourceData, meta interface return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := service.DeleteRoutes(ctx, route["routeTableId"], uint64(routeEntryId)); err != nil { if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { if sdkErr.Code == VPCNotFound { @@ -277,7 +283,7 @@ func routeIdEncode(route map[string]string) (routeId string, ok bool) { return "", false } -func routeIdDecode(routeId string) (route map[string]string, ok bool) { +func RouteIdDecode(routeId string) (route map[string]string, ok bool) { route = map[string]string{} routeArray := strings.Split(routeId, "::") if len(routeArray) != 5 { diff --git a/tencentcloud/services/vpc/resource_tc_route_entry_test.go b/tencentcloud/services/vpc/resource_tc_route_entry_test.go new file mode 100644 index 0000000000..3f2f19dada --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_route_entry_test.go @@ -0,0 +1,175 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudVpcV2RouteEntryBasic(t *testing.T) { + t.Parallel() + var reId string + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckRouteEntryDestroy(&reId), + Steps: []resource.TestStep{ + { + Config: testAccVpcRouteEntryV2Config, + Check: resource.ComposeTestCheckFunc( + testAccCheckRouteEntryExists("tencentcloud_route_entry.foo", &reId), + resource.TestCheckResourceAttr("tencentcloud_route_entry.foo", "cidr_block", "10.0.0.0/24"), + resource.TestCheckResourceAttr("tencentcloud_route_entry.foo", "next_type", "eip"), + ), + }, + }, + }) +} + +func testAccCheckRouteEntryDestroy(id *string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + route, ok := svcvpc.RouteIdDecode(*id) + if !ok { + return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", id) + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) + if e != nil { + return tccommon.RetryError(e) + } + if has == 0 { + return nil + } + if has != 1 { + e = fmt.Errorf("one routeTable id get %d routeTable infos", has) + return resource.NonRetryableError(e) + } + for _, v := range info.EntryInfos() { + var nextType string + var nextTypeId string + for kk, vv := range svcvpc.RouteTypeNewMap { + if vv == v.NextType() { + nextType = kk + } + } + if _, ok := svcvpc.RouteTypeApiMap[nextType]; ok { + nextTypeId = fmt.Sprintf("%d", svcvpc.RouteTypeApiMap[nextType]) + } + if v.DestinationCidr() == route["destinationCidrBlock"] && + nextTypeId == route["nextType"] && + v.NextBub() == route["nextHub"] && + v.Description() == route["description"] { + return resource.NonRetryableError(fmt.Errorf("Route entry still exists: %s", *id)) + } + } + + return nil + }) + return err + } +} + +func testAccCheckRouteEntryExists(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 route entry ID is set") + } + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + route, ok := svcvpc.RouteIdDecode(rs.Primary.ID) + if !ok { + return fmt.Errorf("tencentcloud_route_entry read error, id decode faild, id:%v", rs.Primary.ID) + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeRouteTable(ctx, route["routeTableId"]) + if e != nil { + return tccommon.RetryError(e) + } + if has == 0 { + return resource.NonRetryableError(fmt.Errorf("Route entry not found: %s", rs.Primary.ID)) + } + if has != 1 { + e = fmt.Errorf("one routeTable id get %d routeTable infos", has) + return resource.NonRetryableError(e) + } + for _, v := range info.EntryInfos() { + var nextType string + var nextTypeId string + for kk, vv := range svcvpc.RouteTypeNewMap { + if vv == v.NextType() { + nextType = kk + } + } + if _, ok := svcvpc.RouteTypeApiMap[nextType]; ok { + nextTypeId = fmt.Sprintf("%d", svcvpc.RouteTypeApiMap[nextType]) + } + if v.DestinationCidr() == route["destinationCidrBlock"] && + nextTypeId == route["nextType"] && + v.NextBub() == route["nextHub"] && + v.Description() == route["description"] { + return nil + } + } + + return resource.NonRetryableError(fmt.Errorf("Route entry not found: %s", rs.Primary.ID)) + }) + if err != nil { + return err + } + + *id = rs.Primary.ID + return nil + } +} + +const testAccVpcRouteEntryV2Config = tcacctest.DefaultVpcVariable + ` +resource "tencentcloud_vpc" "foo" { + name = var.instance_name + cidr_block = var.vpc_cidr +} + +resource "tencentcloud_route_table" "foo" { + name = var.instance_name + vpc_id = tencentcloud_vpc.foo.id +} + +resource "tencentcloud_subnet" "foo" { + name = var.instance_name + vpc_id = tencentcloud_vpc.foo.id + availability_zone = var.availability_zone + cidr_block = var.subnet_cidr + is_multicast = false + route_table_id = tencentcloud_route_table.foo.id +} + +resource "tencentcloud_route_entry" "foo" { + vpc_id = tencentcloud_vpc.foo.id + route_table_id = tencentcloud_route_table.foo.id + cidr_block = "10.0.0.0/24" + next_type = "eip" + next_hub = "0" +} +` diff --git a/tencentcloud/services/vpc/resource_tc_route_table.go b/tencentcloud/services/vpc/resource_tc_route_table.go new file mode 100644 index 0000000000..b287036e92 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_route_table.go @@ -0,0 +1,249 @@ +package vpc + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcRouteTable() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcRouteTableCreate, + Read: resourceTencentCloudVpcRouteTableRead, + Update: resourceTencentCloudVpcRouteTableUpdate, + Delete: resourceTencentCloudVpcRouteTableDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpc_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "ID of VPC to which the route table should be associated.", + }, + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), + Description: "The name of routing table.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "The tags of routing table.", + }, + + // Computed values + "subnet_ids": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "ID list of the subnets associated with this route table.", + }, + "route_entry_ids": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "ID list of the routing entries.", + }, + "is_default": { + Type: schema.TypeBool, + Computed: true, + Description: "Indicates whether it is the default routing table.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Creation time of the routing table.", + }, + }, + } +} + +func resourceTencentCloudVpcRouteTableCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + vpcId string + name string + tags map[string]string + ) + if temp, ok := d.GetOk("vpc_id"); ok { + vpcId = temp.(string) + if len(vpcId) < 1 { + return fmt.Errorf("vpc_id should be not empty string") + } + } + if temp, ok := d.GetOk("name"); ok { + name = temp.(string) + } + + if temp := helper.GetTags(d, "tags"); len(temp) > 0 { + tags = temp + } + + routeTableId, err := vpcService.CreateRouteTable(ctx, name, vpcId, tags) + if err != nil { + return err + } + d.SetId(routeTableId) + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:rtb/%s", region, routeTableId) + + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudVpcRouteTableRead(d, meta) +} + +func resourceTencentCloudVpcRouteTableRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + + var ( + info VpcRouteTableBasicInfo + has int + e error + ) + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e = service.DescribeRouteTable(ctx, id) + if e != nil { + return tccommon.RetryError(e) + } + // deleted + if has == 0 { + d.SetId("") + return nil + } + if has != 1 { + errRet := fmt.Errorf("one route_table_id read get %d route_table info", has) + log.Printf("[CRITAL]%s %s", logId, errRet.Error()) + return resource.NonRetryableError(errRet) + } + return nil + }) + if err != nil { + return err + } + if has == 0 { + return nil + } + routeEntryIds := make([]string, 0, len(info.entryInfos)) + for _, v := range info.entryInfos { + tfRouteEntryId := fmt.Sprintf("%d.%s", v.routeEntryId, id) + routeEntryIds = append(routeEntryIds, tfRouteEntryId) + } + + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + tags, err := tagService.DescribeResourceTags(ctx, "vpc", "rtb", region, id) + if err != nil { + return err + } + + _ = d.Set("vpc_id", info.vpcId) + _ = d.Set("name", info.name) + _ = d.Set("subnet_ids", info.subnetIds) + _ = d.Set("route_entry_ids", routeEntryIds) + _ = d.Set("is_default", info.isDefault) + _ = d.Set("create_time", info.createTime) + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudVpcRouteTableUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + d.Partial(true) + + if d.HasChange("name") { + name := d.Get("name").(string) + err := service.ModifyRouteTableAttribute(ctx, id, name) + if err != nil { + return err + } + + } + + if d.HasChange("tags") { + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:rtb/%s", region, id) + + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + + } + + d.Partial(false) + + return resourceTencentCloudVpcRouteTableRead(d, meta) +} + +func resourceTencentCloudVpcRouteTableDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := service.DeleteRouteTable(ctx, d.Id()); err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == VPCNotFound { + return nil + } + } + return resource.RetryableError(err) + } + return nil + }) + + return err +} diff --git a/tencentcloud/services/vpc/resource_tc_route_table_association.go b/tencentcloud/services/vpc/resource_tc_route_table_association.go new file mode 100644 index 0000000000..700e31cb63 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_route_table_association.go @@ -0,0 +1,212 @@ +package vpc + +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" +) + +func ResourceTencentCloudRouteTableAssociation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudRouteTableAssociationCreate, + Read: resourceTencentCloudRouteTableAssociationRead, + Update: resourceTencentCloudRouteTableAssociationUpdate, + Delete: resourceTencentCloudRouteTableAssociationDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "subnet_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Subnet instance ID, such as `subnet-3x5lf5q0`. This can be queried using the DescribeSubnets API.", + }, + "route_table_id": { + Required: true, + Type: schema.TypeString, + Description: "The route table instance ID, such as `rtb-azd4dt1c`.", + }, + }, + } +} + +func resourceTencentCloudRouteTableAssociationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table_association.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var subnetId string + if v, ok := d.GetOk("subnet_id"); ok { + subnetId = v.(string) + } + + d.SetId(subnetId) + + return resourceTencentCloudRouteTableAssociationUpdate(d, meta) +} + +func resourceTencentCloudRouteTableAssociationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table_association.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + subnetId := d.Id() + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + info VpcSubnetBasicInfo + has int + e error + ) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e = service.DescribeSubnet(ctx, subnetId, nil, "", "") + if e != nil { + return tccommon.RetryError(e) + } + + // deleted + if has == 0 { + d.SetId("") + return nil + } + + if has != 1 { + errRet := fmt.Errorf("one subnet_id read get %d subnet info", has) + log.Printf("[CRITAL]%s %s", logId, errRet.Error()) + return resource.NonRetryableError(errRet) + } + return nil + }) + if err != nil { + return err + } + if has == 0 { + return nil + } + + _ = d.Set("subnet_id", subnetId) + if info.routeTableId != "" { + _ = d.Set("route_table_id", info.routeTableId) + } + + return nil +} + +func resourceTencentCloudRouteTableAssociationUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table_association.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewReplaceRouteTableAssociationRequest() + + subnetId := d.Id() + + request.SubnetId = &subnetId + request.RouteTableId = helper.String(d.Get("route_table_id").(string)) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceRouteTableAssociation(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc routeTable failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudRouteTableAssociationRead(d, meta) +} + +func resourceTencentCloudRouteTableAssociationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_route_table_association.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + subnetId := d.Id() + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + var ( + info VpcSubnetBasicInfo + has int + e error + ) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + info, has, e = service.DescribeSubnet(ctx, subnetId, nil, "", "") + if e != nil { + return tccommon.RetryError(e) + } + + // deleted + if has == 0 { + d.SetId("") + return nil + } + + if has != 1 { + errRet := fmt.Errorf("one subnet_id read get %d subnet info", has) + log.Printf("[CRITAL]%s %s", logId, errRet.Error()) + return resource.NonRetryableError(errRet) + } + return nil + }) + if err != nil { + return err + } + if has == 0 { + return fmt.Errorf("Unable to find the vpc corresponding to the current subnet: %s", subnetId) + } + + routeTables, err := service.DescribeRouteTables(ctx, "", "", info.vpcId, nil, helper.Bool(true), "") + + if err != nil { + log.Printf("[WARN] Describe default Route Table error: %s", err.Error()) + } + + if len(routeTables) < 1 { + return fmt.Errorf("Unable to find the default routetable corresponding to the current vpc: %s", info.vpcId) + } + + defaultRoutetableId := routeTables[0].routeTableId + + request := vpc.NewReplaceRouteTableAssociationRequest() + + request.SubnetId = &subnetId + request.RouteTableId = helper.String(defaultRoutetableId) + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceRouteTableAssociation(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc routeTable failed, reason:%+v", logId, err) + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_route_table_association_test.go b/tencentcloud/services/vpc/resource_tc_route_table_association_test.go similarity index 89% rename from tencentcloud/resource_tc_route_table_association_test.go rename to tencentcloud/services/vpc/resource_tc_route_table_association_test.go index 932841f1ab..a8f4f39035 100644 --- a/tencentcloud/resource_tc_route_table_association_test.go +++ b/tencentcloud/services/vpc/resource_tc_route_table_association_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudRouteTableAssociationResource_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: testAccRouteTableAssociation, diff --git a/tencentcloud/resource_tc_route_table_entry.go b/tencentcloud/services/vpc/resource_tc_route_table_entry.go similarity index 79% rename from tencentcloud/resource_tc_route_table_entry.go rename to tencentcloud/services/vpc/resource_tc_route_table_entry.go index c46324a30b..ed3a05e327 100644 --- a/tencentcloud/resource_tc_route_table_entry.go +++ b/tencentcloud/services/vpc/resource_tc_route_table_entry.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "context" @@ -6,7 +6,10 @@ import ( "strconv" "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/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -14,7 +17,7 @@ import ( "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) -func resourceTencentCloudVpcRouteEntry() *schema.Resource { +func ResourceTencentCloudVpcRouteEntry() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcRouteEntryCreate, Read: resourceTencentCloudVpcRouteEntryRead, @@ -35,14 +38,14 @@ func resourceTencentCloudVpcRouteEntry() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCIDRNetworkAddress, + ValidateFunc: tccommon.ValidateCIDRNetworkAddress, Description: "Destination address block.", }, "next_type": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(ALL_GATE_WAY_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(ALL_GATE_WAY_TYPES), Description: "Type of next-hop. Valid values: `CVM`, `VPN`, `DIRECTCONNECT`, `PEERCONNECTION`, `HAVIP`, `NAT`, `NORMAL_CVM`, `EIP` and `LOCAL_GATEWAY`.", }, "next_hub": { @@ -68,12 +71,12 @@ func resourceTencentCloudVpcRouteEntry() *schema.Resource { } func resourceTencentCloudVpcRouteEntryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_entry.create")() + defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry.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 ( description = "" @@ -135,22 +138,22 @@ func resourceTencentCloudVpcRouteEntryCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudVpcRouteEntryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_entry.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry.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()} items := strings.Split(d.Id(), ".") if len(items) != 2 { return fmt.Errorf("entry id be destroyed, we can not get route table id") } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeRouteTable(ctx, items[1]) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { @@ -185,9 +188,9 @@ func resourceTencentCloudVpcRouteEntryRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudVpcRouteEntryUpdate(d *schema.ResourceData, meta interface{}) 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() service := VpcService{client} items := strings.Split(d.Id(), ".") @@ -212,12 +215,12 @@ func resourceTencentCloudVpcRouteEntryUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudVpcRouteEntryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_route_table_entry.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_route_table_entry.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()} items := strings.Split(d.Id(), ".") if len(items) != 2 { @@ -230,7 +233,7 @@ func resourceTencentCloudVpcRouteEntryDelete(d *schema.ResourceData, meta interf return fmt.Errorf("entry id be destroyed, we can not get route entry id") } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := service.DeleteRoutes(ctx, routeTableId, entryId); err != nil { if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { if sdkErr.Code == VPCNotFound { diff --git a/tencentcloud/resource_tc_route_table_entry_test.go b/tencentcloud/services/vpc/resource_tc_route_table_entry_test.go similarity index 82% rename from tencentcloud/resource_tc_route_table_entry_test.go rename to tencentcloud/services/vpc/resource_tc_route_table_entry_test.go index 396153c10b..7911749b1d 100644 --- a/tencentcloud/resource_tc_route_table_entry_test.go +++ b/tencentcloud/services/vpc/resource_tc_route_table_entry_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -9,6 +9,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -18,9 +22,9 @@ func TestAccTencentCloudVpcV3RouteEntryBasic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { log.Printf("TF: \n%s", testAccVpcRouteEntryConfig) - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckVpcRouteEntryDestroy, Steps: []resource.TestStep{ { @@ -29,7 +33,7 @@ func TestAccTencentCloudVpcV3RouteEntryBasic(t *testing.T) { testAccCheckVpcRouteEntryExists("tencentcloud_route_table_entry.foo"), resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "next_type", "EIP"), - resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "description", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "description", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "destination_cidr_block", "10.0.0.0/24"), resource.TestCheckResourceAttr("tencentcloud_route_table_entry.foo", "next_hub", "0"), ), @@ -58,15 +62,15 @@ func TestAccTencentCloudVpcV3RouteEntryBasic(t *testing.T) { func testAccCheckVpcRouteEntryExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(rs.Primary.ID, ".") if len(items) != 2 { @@ -90,8 +94,8 @@ func testAccCheckVpcRouteEntryExists(r string) resource.TestCheckFunc { err = fmt.Errorf("one routeTable id get %d routeTable infos", has) return err } - for _, v := range info.entryInfos { - if v.routeEntryId == int64(entryId) { + for _, v := range info.EntryInfos() { + if v.RouteEntryId() == int64(entryId) { return nil } } @@ -101,10 +105,10 @@ func testAccCheckVpcRouteEntryExists(r string) resource.TestCheckFunc { } func testAccCheckVpcRouteEntryDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_route_table_entry" { continue @@ -134,8 +138,8 @@ func testAccCheckVpcRouteEntryDestroy(s *terraform.State) error { err = fmt.Errorf("one routeTable id get %d routeTable infos", has) return err } - for _, v := range info.entryInfos { - if v.routeEntryId == int64(entryId) { + for _, v := range info.EntryInfos() { + if v.RouteEntryId() == int64(entryId) { return fmt.Errorf("route table entry still exists") } } @@ -144,7 +148,7 @@ func testAccCheckVpcRouteEntryDestroy(s *terraform.State) error { return nil } -const testAccVpcRouteEntryConfig = defaultVpcVariable + ` +const testAccVpcRouteEntryConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -172,7 +176,7 @@ resource "tencentcloud_route_table_entry" "foo" { description = var.instance_name } ` -const testAccVpcRouteEntryUpdate = defaultVpcVariable + ` +const testAccVpcRouteEntryUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -201,7 +205,7 @@ resource "tencentcloud_route_table_entry" "foo" { disabled = true } ` -const testAccVpcRouteEntryUpdate2 = defaultVpcVariable + ` +const testAccVpcRouteEntryUpdate2 = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr diff --git a/tencentcloud/resource_tc_route_table_test.go b/tencentcloud/services/vpc/resource_tc_route_table_test.go similarity index 79% rename from tencentcloud/resource_tc_route_table_test.go rename to tencentcloud/services/vpc/resource_tc_route_table_test.go index ecb05436fc..24808a0aad 100644 --- a/tencentcloud/resource_tc_route_table_test.go +++ b/tencentcloud/services/vpc/resource_tc_route_table_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -6,6 +6,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,15 +17,15 @@ import ( func TestAccTencentCloudVpcV3RouteTableBasic(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: testAccCheckVpcRouteTableDestroy, Steps: []resource.TestStep{ { Config: testAccVpcRouteTableConfig, Check: resource.ComposeTestCheckFunc( testAccCheckVpcRouteTableExists("tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "vpc_id"), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "subnet_ids.#"), @@ -42,15 +46,15 @@ func TestAccTencentCloudVpcV3RouteTableBasic(t *testing.T) { func TestAccTencentCloudVpcV3RouteTableUpdate(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: testAccCheckVpcRouteTableDestroy, Steps: []resource.TestStep{ { Config: testAccVpcRouteTableConfig, Check: resource.ComposeTestCheckFunc( testAccCheckVpcRouteTableExists("tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "vpc_id"), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "subnet_ids.#"), @@ -63,7 +67,7 @@ func TestAccTencentCloudVpcV3RouteTableUpdate(t *testing.T) { Config: testAccVpcRouteTableConfigUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckVpcRouteTableExists("tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", defaultInsNameUpdate), + resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", tcacctest.DefaultInsNameUpdate), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "vpc_id"), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "subnet_ids.#"), @@ -79,15 +83,15 @@ func TestAccTencentCloudVpcV3RouteTableUpdate(t *testing.T) { func TestAccTencentCloudVpcV3RouteTableWithTags(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: testAccCheckVpcRouteTableDestroy, Steps: []resource.TestStep{ { Config: testAccVpcRouteTableConfigWithTags, Check: resource.ComposeTestCheckFunc( testAccCheckVpcRouteTableExists("tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "vpc_id"), resource.TestCheckResourceAttrSet("tencentcloud_route_table.foo", "subnet_ids.#"), @@ -103,7 +107,7 @@ func TestAccTencentCloudVpcV3RouteTableWithTags(t *testing.T) { Config: testAccVpcRouteTableConfigWithTagsUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckVpcRouteTableExists("tencentcloud_route_table.foo"), - resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_route_table.foo", "tags.abc", "abc"), resource.TestCheckNoResourceAttr("tencentcloud_route_table.foo", "tags.test"), @@ -115,15 +119,15 @@ func TestAccTencentCloudVpcV3RouteTableWithTags(t *testing.T) { func testAccCheckVpcRouteTableExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeRouteTable(ctx, rs.Primary.ID) if err != nil { return err @@ -137,10 +141,10 @@ func testAccCheckVpcRouteTableExists(r string) resource.TestCheckFunc { } func testAccCheckVpcRouteTableDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_route_table" { continue @@ -159,7 +163,7 @@ func testAccCheckVpcRouteTableDestroy(s *terraform.State) error { return nil } -const testAccVpcRouteTableConfig = defaultVpcVariable + ` +const testAccVpcRouteTableConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -171,7 +175,7 @@ resource "tencentcloud_route_table" "foo" { } ` -const testAccVpcRouteTableConfigUpdate = defaultVpcVariable + ` +const testAccVpcRouteTableConfigUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -183,7 +187,7 @@ resource "tencentcloud_route_table" "foo" { } ` -const testAccVpcRouteTableConfigWithTags = defaultVpcVariable + ` +const testAccVpcRouteTableConfigWithTags = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -199,7 +203,7 @@ resource "tencentcloud_route_table" "foo" { } ` -const testAccVpcRouteTableConfigWithTagsUpdate = defaultVpcVariable + ` +const testAccVpcRouteTableConfigWithTagsUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr diff --git a/tencentcloud/services/vpc/resource_tc_security_group.go b/tencentcloud/services/vpc/resource_tc_security_group.go new file mode 100644 index 0000000000..93dc16f3bc --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_security_group.go @@ -0,0 +1,257 @@ +package vpc + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + "strconv" + + "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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudSecurityGroup() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudSecurityGroupCreate, + Read: resourceTencentCloudSecurityGroupRead, + Update: resourceTencentCloudSecurityGroupUpdate, + Delete: resourceTencentCloudSecurityGroupDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), + Description: "Name of the security group to be queried.", + }, + "description": { + Type: schema.TypeString, + Optional: true, + Default: "", + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), + Description: "Description of the security group.", + }, + "project_id": { + Type: schema.TypeInt, + Optional: true, + Computed: true, + ForceNew: true, + Description: "Project ID of the security group.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tags of the security group.", + }, + }, + } +} + +func resourceTencentCloudSecurityGroupCreate(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_security_group.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() + vpcService := VpcService{client: client} + tagService := svctag.NewTagService(client) + region := client.Region + + name := d.Get("name").(string) + desc := d.Get("description").(string) + + var ( + projectId *int + tags map[string]string + ) + if projectIdInterface, exist := d.GetOk("project_id"); exist { + projectId = common.IntPtr(projectIdInterface.(int)) + } + + if temp := helper.GetTags(d, "tags"); len(temp) > 0 { + tags = temp + } + + id, err := vpcService.CreateSecurityGroup(ctx, name, desc, projectId, tags) + if err != nil { + return err + } + + d.SetId(id) + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + resourceName := tccommon.BuildTagResourceName("cvm", "sg", region, id) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudSecurityGroupRead(d, m) +} + +func resourceTencentCloudSecurityGroupRead(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_security_group.read")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() + vpcService := VpcService{client: client} + tagService := svctag.NewTagService(client) + region := client.Region + + id := d.Id() + + securityGroup, err := vpcService.DescribeSecurityGroup(ctx, id) + if err != nil { + return err + } + + if securityGroup == nil { + d.SetId("") + return nil + } + + _ = d.Set("name", *securityGroup.SecurityGroupName) + _ = d.Set("description", *securityGroup.SecurityGroupDesc) + + projectId, err := strconv.Atoi(*securityGroup.ProjectId) + if err != nil { + return fmt.Errorf("securtiy group %s project id invalid: %v", *securityGroup.SecurityGroupId, err) + } + _ = d.Set("project_id", projectId) + + tags, err := tagService.DescribeResourceTags(ctx, "cvm", "sg", region, id) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudSecurityGroupUpdate(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_security_group.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + client := m.(tccommon.ProviderMeta).GetAPIV3Conn() + vpcService := VpcService{client: client} + tagService := svctag.NewTagService(client) + region := client.Region + + id := d.Id() + + d.Partial(true) + + var ( + newName *string + newDesc *string + attrUpdate []string + ) + + if d.HasChange("name") { + newName = helper.String(d.Get("name").(string)) + attrUpdate = append(attrUpdate, "name") + } + + if d.HasChange("description") { + newDesc = helper.String(d.Get("description").(string)) + attrUpdate = append(attrUpdate, "description") + } + + if len(attrUpdate) > 0 { + if err := vpcService.ModifySecurityGroup(ctx, id, newName, newDesc); err != nil { + return err + } + + } + + if d.HasChange("tags") { + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + + resourceName := tccommon.BuildTagResourceName("cvm", "sg", region, id) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + + } + + d.Partial(false) + + return resourceTencentCloudSecurityGroupRead(d, m) +} + +func resourceTencentCloudSecurityGroupDelete(d *schema.ResourceData, m interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_security_group.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + id := d.Id() + + vpcService := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} + + // wait until all instances unbind this security group + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + associateSet, err := vpcService.DescribeSecurityGroupsAssociate(ctx, []string{id}) + if err != nil { + return resource.RetryableError(err) + } + + if len(associateSet) == 0 { + return nil + } + + statistics := associateSet[0] + if *statistics.CVM > 0 { + return resource.RetryableError(fmt.Errorf("security group %s still bind %d CVM instances", id, *statistics.CVM)) + } + + if *statistics.CLB > 0 { + return resource.RetryableError(fmt.Errorf("security group %s still bind %d CLB instances", id, *statistics.CLB)) + } + + if *statistics.CDB > 0 { + return resource.RetryableError(fmt.Errorf("security group %s still bind %d CDB instances", id, *statistics.CDB)) + } + + if *statistics.ENI > 0 { + return resource.RetryableError(fmt.Errorf("security group %s still bind %d ENI instances", id, *statistics.ENI)) + } + + if *statistics.SG > 0 { + return resource.RetryableError(fmt.Errorf("security group %s still bind %d SG instances", id, *statistics.SG)) + } + + return nil + }); err != nil { + return err + } + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + e := vpcService.DeleteSecurityGroup(ctx, id) + if e != nil { + return resource.RetryableError(fmt.Errorf("security group delete failed: %v", e)) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s security group delete failed: %v", logId, err) + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_security_group_lite_rule.go b/tencentcloud/services/vpc/resource_tc_security_group_lite_rule.go similarity index 82% rename from tencentcloud/resource_tc_security_group_lite_rule.go rename to tencentcloud/services/vpc/resource_tc_security_group_lite_rule.go index 0900326293..efad7151f3 100644 --- a/tencentcloud/resource_tc_security_group_lite_rule.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_lite_rule.go @@ -1,13 +1,16 @@ -package tencentcloud +package vpc 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 resourceTencentCloudSecurityGroupLiteRule() *schema.Resource { +func ResourceTencentCloudSecurityGroupLiteRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudSecurityGroupLiteRuleCreate, Read: resourceTencentCloudSecurityGroupLiteRuleRead, @@ -41,11 +44,11 @@ func resourceTencentCloudSecurityGroupLiteRule() *schema.Resource { } func resourceTencentCloudSecurityGroupLiteRuleCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_lite_rule.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_security_group_lite_rule.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} sgId := d.Get("security_group_id").(string) @@ -86,15 +89,15 @@ func resourceTencentCloudSecurityGroupLiteRuleCreate(d *schema.ResourceData, m i } func resourceTencentCloudSecurityGroupLiteRuleRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_lite_rule.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_lite_rule.read")() + defer tccommon.InconsistentCheck(d, m)() - 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 := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} respIngress, respEgress, exist, err := service.DescribeSecurityGroupPolices(ctx, id) if err != nil { @@ -124,13 +127,13 @@ func resourceTencentCloudSecurityGroupLiteRuleRead(d *schema.ResourceData, m int } func resourceTencentCloudSecurityGroupLiteRuleUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_lite_rule.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_security_group_lite_rule.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ingress []VpcSecurityGroupLiteRule @@ -230,13 +233,13 @@ func resourceTencentCloudSecurityGroupLiteRuleUpdate(d *schema.ResourceData, m i } func resourceTencentCloudSecurityGroupLiteRuleDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_lite_rule.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_security_group_lite_rule.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} return service.DetachAllLiteRulesFromSecurityGroup(ctx, id) } diff --git a/tencentcloud/resource_tc_security_group_lite_rule_test.go b/tencentcloud/services/vpc/resource_tc_security_group_lite_rule_test.go similarity index 94% rename from tencentcloud/resource_tc_security_group_lite_rule_test.go rename to tencentcloud/services/vpc/resource_tc_security_group_lite_rule_test.go index 985866010e..0a86b5f105 100644 --- a/tencentcloud/resource_tc_security_group_lite_rule_test.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_lite_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -6,6 +6,10 @@ import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -16,8 +20,8 @@ func TestAccTencentCloudSecurityGroupLiteRule_basic(t *testing.T) { var liteRuleId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupLiteRuleDestroy(&liteRuleId), Steps: []resource.TestStep{ { @@ -48,8 +52,8 @@ func TestAccTencentCloudSecurityGroupLiteRule_update(t *testing.T) { var liteRuleId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupLiteRuleDestroy(&liteRuleId), Steps: []resource.TestStep{ { @@ -155,7 +159,7 @@ func testAccCheckSecurityGroupLiteRuleExists(n string, id *string) resource.Test return fmt.Errorf("no security group rule ID is set") } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, exist, err := service.DescribeSecurityGroupPolices(context.TODO(), rs.Primary.ID) if err != nil { @@ -174,7 +178,7 @@ func testAccCheckSecurityGroupLiteRuleExists(n string, id *string) resource.Test func testAccCheckSecurityGroupLiteRuleDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ingress, egress, exist, err := service.DescribeSecurityGroupPolices(context.TODO(), *id) if err != nil { diff --git a/tencentcloud/resource_tc_security_group_rule.go b/tencentcloud/services/vpc/resource_tc_security_group_rule.go similarity index 88% rename from tencentcloud/resource_tc_security_group_rule.go rename to tencentcloud/services/vpc/resource_tc_security_group_rule.go index cc4cb075bc..290d9d2196 100644 --- a/tencentcloud/resource_tc_security_group_rule.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "context" @@ -8,13 +8,15 @@ 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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) -func resourceTencentCloudSecurityGroupRule() *schema.Resource { +func ResourceTencentCloudSecurityGroupRule() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource will be offline and no longer supported, beacause single security rule is hardly ordered. Please use 'tencentcloud_security_group_lite_rule' instead.", Create: resourceTencentCloudSecurityGroupRuleCreate, @@ -32,7 +34,7 @@ func resourceTencentCloudSecurityGroupRule() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValueIgnoreCase([]string{"ingress", "egress"}), + ValidateFunc: tccommon.ValidateAllowedStringValueIgnoreCase([]string{"ingress", "egress"}), Description: "Type of the security group rule. Valid values: `ingress` and `egress`.", }, "cidr_ip": { @@ -43,11 +45,11 @@ func resourceTencentCloudSecurityGroupRule() *schema.Resource { "source_sgid", }, //ValidateFunc: func(v interface{}, k string) (ws []string, errs []error) { - // if _, err := validateIp(v, k); len(err) == 0 { + // if _, err := tccommon.ValidateIp(v, k); len(err) == 0 { // return // } // - // if _, err := validateCIDRNetworkAddress(v, k); len(err) != 0 { + // if _, err := tccommon.ValidateCIDRNetworkAddress(v, k); len(err) != 0 { // errs = append(errs, fmt.Errorf("%s %v is not valid IP address or valid CIDR IP address", // k, v)) // } @@ -63,7 +65,7 @@ func resourceTencentCloudSecurityGroupRule() *schema.Resource { }, ForceNew: true, Computed: true, - ValidateFunc: validateAllowedStringValueIgnoreCase([]string{"TCP", "UDP", "ICMP"}), + ValidateFunc: tccommon.ValidateAllowedStringValueIgnoreCase([]string{"TCP", "UDP", "ICMP"}), Description: "Type of IP protocol. Valid values: `TCP`, `UDP` and `ICMP`. Default to all types protocol, and conflicts with `protocol_template`.", }, "port_range": { @@ -88,7 +90,7 @@ func resourceTencentCloudSecurityGroupRule() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValueIgnoreCase([]string{"ACCEPT", "DROP"}), + ValidateFunc: tccommon.ValidateAllowedStringValueIgnoreCase([]string{"ACCEPT", "DROP"}), Description: "Rule policy of security group. Valid values: `ACCEPT` and `DROP`.", }, "policy_index": { @@ -173,12 +175,12 @@ func resourceTencentCloudSecurityGroupRule() *schema.Resource { } func resourceTencentCloudSecurityGroupRuleCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule.create")() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule.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: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} sgId := d.Get("security_group_id").(string) @@ -296,19 +298,19 @@ func resourceTencentCloudSecurityGroupRuleCreate(d *schema.ResourceData, m inter } func resourceTencentCloudSecurityGroupRuleRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule.read")() + defer tccommon.InconsistentCheck(d, m)() - 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: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleId := d.Id() - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { sgId, policyType, policy, e := service.DescribeSecurityGroupPolicy(ctx, ruleId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if policy == nil { @@ -385,12 +387,12 @@ func resourceTencentCloudSecurityGroupRuleRead(d *schema.ResourceData, m interfa } func resourceTencentCloudSecurityGroupRuleDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule.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: m.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleId := d.Id() sgId, policyType, policy, err := service.DescribeSecurityGroupPolicy(ctx, ruleId) @@ -404,7 +406,7 @@ func resourceTencentCloudSecurityGroupRuleDelete(d *schema.ResourceData, m inter index := *policy.PolicyIndex - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := service.DeleteSecurityGroupPolicyByPolicyIndex(ctx, index, sgId, policyType) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { @@ -416,7 +418,7 @@ func resourceTencentCloudSecurityGroupRuleDelete(d *schema.ResourceData, m inter sgId, policyType, policy, err = service.DescribeSecurityGroupPolicy(ctx, ruleId) if err != nil { log.Printf("[CRITAL]%s security group rule query failed: %s\n ", logId, err.Error()) - return retryError(err) + return tccommon.RetryError(err) } if policy == nil { diff --git a/tencentcloud/resource_tc_security_group_rule_set.go b/tencentcloud/services/vpc/resource_tc_security_group_rule_set.go similarity index 90% rename from tencentcloud/resource_tc_security_group_rule_set.go rename to tencentcloud/services/vpc/resource_tc_security_group_rule_set.go index 0aa60f6bdf..667603e34d 100644 --- a/tencentcloud/resource_tc_security_group_rule_set.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_rule_set.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc import ( "context" @@ -7,18 +7,21 @@ import ( "strconv" "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/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudSecurityGroupRuleSet() *schema.Resource { +func ResourceTencentCloudSecurityGroupRuleSet() *schema.Resource { ruleElem := map[string]*schema.Schema{ "action": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValueIgnoreCase([]string{"ACCEPT", "DROP"}), + ValidateFunc: tccommon.ValidateAllowedStringValueIgnoreCase([]string{"ACCEPT", "DROP"}), Description: "Rule policy of security group. Valid values: `ACCEPT` and `DROP`.", }, "description": { @@ -116,12 +119,12 @@ func resourceTencentCloudSecurityGroupRuleSet() *schema.Resource { } func resourceTencentCloudSecurityGroupRuleSetCreate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule_set.create")() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule_set.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} request = vpc.NewModifySecurityGroupPoliciesRequest() securityGroupId string err error @@ -160,13 +163,13 @@ func resourceTencentCloudSecurityGroupRuleSetCreate(d *schema.ResourceData, m in } func resourceTencentCloudSecurityGroupRuleSetRead(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule_set.read")() - defer inconsistentCheck(d, m)() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule_set.read")() + defer tccommon.InconsistentCheck(d, m)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} securityGroupId = d.Id() ) @@ -201,12 +204,12 @@ func resourceTencentCloudSecurityGroupRuleSetRead(d *schema.ResourceData, m inte } func resourceTencentCloudSecurityGroupRuleSetUpdate(d *schema.ResourceData, m interface{}) error { - defer logElapsed("tencentcloud_security_group_rule_set.update")() + defer tccommon.LogElapsed("tencentcloud_security_group_rule_set.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} request = vpc.NewModifySecurityGroupPoliciesRequest() securityGroupId = d.Id() nextVer string @@ -310,12 +313,12 @@ func resourceTencentCloudSecurityGroupRuleSetUpdate(d *schema.ResourceData, m in } func resourceTencentCloudSecurityGroupRuleSetDelete(d *schema.ResourceData, m interface{}) error { - defer logElapsed("resource.tencentcloud_security_group_rule_set.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_security_group_rule_set.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: m.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: m.(tccommon.ProviderMeta).GetAPIV3Conn()} request = vpc.NewModifySecurityGroupPoliciesRequest() securityGroupId = d.Id() ) diff --git a/tencentcloud/resource_tc_security_group_rule_set_test.go b/tencentcloud/services/vpc/resource_tc_security_group_rule_set_test.go similarity index 94% rename from tencentcloud/resource_tc_security_group_rule_set_test.go rename to tencentcloud/services/vpc/resource_tc_security_group_rule_set_test.go index 942c9a7c04..3064ee6f25 100644 --- a/tencentcloud/resource_tc_security_group_rule_set_test.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_rule_set_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpc_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudSecurityGroupRuleSetResource_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: testAccSecurityGroupRuleSetResource_basic, @@ -82,11 +86,11 @@ func TestAccTencentCloudSecurityGroupRuleSetResource_basic(t *testing.T) { func testAccCheckSecurityGroupRuleSetResource_basicExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(defaultRegion) - client := cli.(*TencentCloudClient).apiV3Conn - service := VpcService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(tcacctest.DefaultRegion) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcvpc.NewVpcService(client) rs, ok := s.RootModule().Resources[n] if !ok { diff --git a/tencentcloud/resource_tc_security_group_rule_test.go b/tencentcloud/services/vpc/resource_tc_security_group_rule_test.go similarity index 93% rename from tencentcloud/resource_tc_security_group_rule_test.go rename to tencentcloud/services/vpc/resource_tc_security_group_rule_test.go index 71c834d7f2..18c7b1c2f4 100644 --- a/tencentcloud/resource_tc_security_group_rule_test.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_rule_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -6,6 +6,10 @@ import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -15,8 +19,8 @@ func TestAccTencentCloudSecurityGroupRule_basic(t *testing.T) { var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -40,8 +44,8 @@ func TestAccTencentCloudSecurityGroupRule_ssh(t *testing.T) { var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -64,8 +68,8 @@ func TestAccTencentCloudSecurityGroupRule_egress(t *testing.T) { var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -89,8 +93,8 @@ func TestAccTencentCloudSecurityGroupRule_sourcesgid(t *testing.T) { var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -113,8 +117,8 @@ func TestAccTencentCloudSecurityGroupRule_allDrop(t *testing.T) { var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -136,8 +140,8 @@ func TestAccTencentCloudSecurityGroupRule_addressTemplate(t *testing.T) { t.Parallel() var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -167,8 +171,8 @@ func TestAccTencentCloudSecurityGroupRule_protocolTemplate(t *testing.T) { t.Parallel() var sgrId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupRuleDestroy(&sgrId), Steps: []resource.TestStep{ { @@ -200,7 +204,7 @@ func TestAccTencentCloudSecurityGroupRule_protocolTemplate(t *testing.T) { func testAccCheckSecurityGroupRuleDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, policy, err := service.DescribeSecurityGroupPolicy(context.TODO(), *id) if err != nil { @@ -228,7 +232,7 @@ func testAccCheckSecurityGroupRuleExists(n string, id *string) resource.TestChec *id = rs.Primary.ID - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, policy, err := service.DescribeSecurityGroupPolicy(context.TODO(), *id) if err != nil { diff --git a/tencentcloud/resource_tc_security_group_test.go b/tencentcloud/services/vpc/resource_tc_security_group_test.go similarity index 80% rename from tencentcloud/resource_tc_security_group_test.go rename to tencentcloud/services/vpc/resource_tc_security_group_test.go index d3d0cdf165..f3a2810339 100644 --- a/tencentcloud/resource_tc_security_group_test.go +++ b/tencentcloud/services/vpc/resource_tc_security_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -20,17 +24,15 @@ func init() { } func testSweepSecurityGroups(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) - service := VpcService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + service := svcvpc.NewVpcService(client.GetAPIV3Conn()) sgs, err := service.DescribeSecurityGroups(ctx, nil, nil, nil, nil) @@ -43,15 +45,15 @@ func testSweepSecurityGroups(region string) error { id := *v.SecurityGroupId now := time.Now() - createTime := stringTotime(*v.CreatedTime) + createTime := tccommon.StringToTime(*v.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(name, keepResource) || strings.HasPrefix(name, defaultResource) { + if strings.HasPrefix(name, tcacctest.KeepResource) || strings.HasPrefix(name, 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 +70,8 @@ func TestAccTencentCloudSecurityGroup_basic(t *testing.T) { var sgId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupDestroy(&sgId), Steps: []resource.TestStep{ { @@ -95,8 +97,8 @@ func TestAccTencentCloudSecurityGroup_update(t *testing.T) { var sgId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupDestroy(&sgId), Steps: []resource.TestStep{ { @@ -124,8 +126,8 @@ func TestAccTencentCloudSecurityGroup_tags(t *testing.T) { var sgId string resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckSecurityGroupDestroy(&sgId), Steps: []resource.TestStep{ { @@ -150,8 +152,8 @@ func TestAccTencentCloudSecurityGroup_tags(t *testing.T) { func testAccCheckSecurityGroupDestroy(id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - client := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn - service := VpcService{client: client} + client := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() + service := svcvpc.NewVpcService(client) sg, err := service.DescribeSecurityGroup(context.TODO(), *id) if err != nil { @@ -177,7 +179,7 @@ func testAccCheckSecurityGroupExists(n string, id *string) resource.TestCheckFun return fmt.Errorf("no security group ID is set") } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) sg, err := service.DescribeSecurityGroup(context.TODO(), rs.Primary.ID) if err != nil { diff --git a/tencentcloud/resource_tc_subnet.go b/tencentcloud/services/vpc/resource_tc_subnet.go similarity index 76% rename from tencentcloud/resource_tc_subnet.go rename to tencentcloud/services/vpc/resource_tc_subnet.go index ed0d0c9b37..8343720b76 100644 --- a/tencentcloud/resource_tc_subnet.go +++ b/tencentcloud/services/vpc/resource_tc_subnet.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudVpcSubnet() *schema.Resource { +func ResourceTencentCloudVpcSubnet() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcSubnetCreate, Read: resourceTencentCloudVpcSubnetRead, @@ -37,14 +41,14 @@ func resourceTencentCloudVpcSubnet() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "The name of subnet to be created.", }, "cidr_block": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCIDRNetworkAddress, + ValidateFunc: tccommon.ValidateCIDRNetworkAddress, Description: "A network address block of the subnet.", }, "is_multicast": { @@ -86,12 +90,12 @@ func resourceTencentCloudVpcSubnet() *schema.Resource { } func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_subnet.create")() + defer tccommon.LogElapsed("resource.tencentcloud_subnet.create")() - 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} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( vpcId string @@ -165,9 +169,9 @@ func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{ } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - region := meta.(*TencentCloudClient).apiV3Conn.Region + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:subnet/%s", region, subnetId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { @@ -179,26 +183,26 @@ func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_subnet.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_subnet.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() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region var ( info VpcSubnetBasicInfo has int e error ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e = vpcService.DescribeSubnet(ctx, id, nil, "", "") if e != nil { - return retryError(e) + return tccommon.RetryError(e) } // deleted @@ -240,14 +244,14 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_subnet.update")() + defer tccommon.LogElapsed("resource.tencentcloud_subnet.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() - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( name string @@ -296,11 +300,11 @@ func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{ if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - region := meta.(*TencentCloudClient).apiV3Conn.Region + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:subnet/%s", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { @@ -315,14 +319,14 @@ func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudVpcSubnetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_subnet.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_subnet.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()} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := service.DeleteSubnet(ctx, d.Id()); err != nil { if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { if sdkErr.Code == VPCNotFound { diff --git a/tencentcloud/resource_tc_subnet_test.go b/tencentcloud/services/vpc/resource_tc_subnet_test.go similarity index 77% rename from tencentcloud/resource_tc_subnet_test.go rename to tencentcloud/services/vpc/resource_tc_subnet_test.go index ffd3d4b2fb..80c19ea27e 100644 --- a/tencentcloud/resource_tc_subnet_test.go +++ b/tencentcloud/services/vpc/resource_tc_subnet_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -20,18 +24,16 @@ func init() { } func testSweepSubnet(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeSubnets(ctx, "", "", "", "", nil, nil, nil, "", "") @@ -41,17 +43,17 @@ func testSweepSubnet(region string) error { for _, v := range instances { - instanceId := v.subnetId - instanceName := v.name + instanceId := v.SubnetId() + instanceName := v.Name() 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 } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -66,16 +68,16 @@ func testSweepSubnet(region string) error { func TestAccTencentCloudVpcV3SubnetBasic(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: testAccCheckVpcSubnetDestroy, Steps: []resource.TestStep{ { Config: testAccVpcSubnetConfig, Check: resource.ComposeTestCheckFunc( testAccCheckVpcSubnetExists("tencentcloud_subnet.subnet"), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", defaultSubnetCidr), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", tcacctest.DefaultSubnetCidr), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "is_multicast", "false"), ), }, @@ -91,16 +93,16 @@ func TestAccTencentCloudVpcV3SubnetBasic(t *testing.T) { func TestAccTencentCloudVpcV3SubnetUpdate(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: testAccCheckVpcSubnetDestroy, Steps: []resource.TestStep{ { Config: testAccVpcSubnetConfig, Check: resource.ComposeTestCheckFunc( testAccCheckVpcSubnetExists("tencentcloud_subnet.subnet"), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", defaultSubnetCidr), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", tcacctest.DefaultSubnetCidr), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "is_multicast", "false"), resource.TestCheckResourceAttrSet("tencentcloud_subnet.subnet", "vpc_id"), @@ -115,8 +117,8 @@ func TestAccTencentCloudVpcV3SubnetUpdate(t *testing.T) { Config: testAccVpcSubnetConfigUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckVpcSubnetExists("tencentcloud_subnet.subnet"), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", defaultSubnetCidrLess), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", defaultInsNameUpdate), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", tcacctest.DefaultSubnetCidrLess), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", tcacctest.DefaultInsNameUpdate), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "is_multicast", "true"), resource.TestCheckResourceAttrSet("tencentcloud_subnet.subnet", "vpc_id"), @@ -134,16 +136,16 @@ func TestAccTencentCloudVpcV3SubnetUpdate(t *testing.T) { func TestAccTencentCloudVpcV3SubnetWithTags(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: testAccCheckVpcSubnetDestroy, Steps: []resource.TestStep{ { Config: testAccVpcSubnetConfigWithTags, Check: resource.ComposeTestCheckFunc( testAccCheckVpcSubnetExists("tencentcloud_subnet.subnet"), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", defaultSubnetCidr), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", tcacctest.DefaultSubnetCidr), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "is_multicast", "false"), resource.TestCheckResourceAttrSet("tencentcloud_subnet.subnet", "vpc_id"), @@ -161,8 +163,8 @@ func TestAccTencentCloudVpcV3SubnetWithTags(t *testing.T) { Config: testAccVpcSubnetConfigWithTagsUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckVpcSubnetExists("tencentcloud_subnet.subnet"), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", defaultSubnetCidr), - resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "cidr_block", tcacctest.DefaultSubnetCidr), + resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "is_multicast", "false"), resource.TestCheckResourceAttr("tencentcloud_subnet.subnet", "tags.abc", "abc"), @@ -175,15 +177,15 @@ func TestAccTencentCloudVpcV3SubnetWithTags(t *testing.T) { func testAccCheckVpcSubnetExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeSubnet(ctx, rs.Primary.ID, nil, "", "") if err != nil { return err @@ -197,10 +199,10 @@ func testAccCheckVpcSubnetExists(r string) resource.TestCheckFunc { } func testAccCheckVpcSubnetDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_subnet" { continue @@ -219,7 +221,7 @@ func testAccCheckVpcSubnetDestroy(s *terraform.State) error { return nil } -const testAccVpcSubnetConfig = defaultVpcVariable + ` +const testAccVpcSubnetConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -234,7 +236,7 @@ resource "tencentcloud_subnet" "subnet" { } ` -const testAccVpcSubnetConfigUpdate = defaultVpcVariable + ` +const testAccVpcSubnetConfigUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -255,7 +257,7 @@ resource "tencentcloud_subnet" "subnet" { } ` -const testAccVpcSubnetConfigWithTags = defaultVpcVariable + ` +const testAccVpcSubnetConfigWithTags = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -274,7 +276,7 @@ resource "tencentcloud_subnet" "subnet" { } ` -const testAccVpcSubnetConfigWithTagsUpdate = defaultVpcVariable + ` +const testAccVpcSubnetConfigWithTagsUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr diff --git a/tencentcloud/resource_tc_vpc.go b/tencentcloud/services/vpc/resource_tc_vpc.go similarity index 80% rename from tencentcloud/resource_tc_vpc.go rename to tencentcloud/services/vpc/resource_tc_vpc.go index 6fe3f5c7e6..9f71dff80c 100644 --- a/tencentcloud/resource_tc_vpc.go +++ b/tencentcloud/services/vpc/resource_tc_vpc.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -11,10 +14,11 @@ import ( "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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudVpcInstance() *schema.Resource { +func ResourceTencentCloudVpcInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcInstanceCreate, Read: resourceTencentCloudVpcInstanceRead, @@ -28,14 +32,14 @@ func resourceTencentCloudVpcInstance() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "The name of the VPC.", }, "cidr_block": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCIDRNetworkAddress, + ValidateFunc: tccommon.ValidateCIDRNetworkAddress, Description: "A network address block which should be a subnet of the three internal network segments (10.0.0.0/16, 172.16.0.0/12 and 192.168.0.0/16).", }, "dns_servers": { @@ -98,12 +102,12 @@ func resourceTencentCloudVpcInstance() *schema.Resource { } func resourceTencentCloudVpcInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc.create")() - 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} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( name string @@ -156,25 +160,25 @@ func resourceTencentCloudVpcInstanceCreate(d *schema.ResourceData, meta interfac } } // protected while tag is not ready, default is 1s - time.Sleep(waitReadTimeout) + time.Sleep(tccommon.WaitReadTimeout) return resourceTencentCloudVpcInstanceRead(d, meta) } func resourceTencentCloudVpcInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc.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()} id := d.Id() - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeVpc(ctx, id, "", "") if e != nil { - return retryError(e) + return tccommon.RetryError(e) } // deleted @@ -235,14 +239,14 @@ func resourceTencentCloudVpcInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudVpcInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc.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() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} d.Partial(true) @@ -312,11 +316,11 @@ func resourceTencentCloudVpcInstanceUpdate(d *schema.ResourceData, meta interfac if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - region := meta.(*TencentCloudClient).apiV3Conn.Region + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:vpc/%s", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { @@ -331,14 +335,14 @@ func resourceTencentCloudVpcInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudVpcInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc.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()} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := service.DeleteVpc(ctx, d.Id()); err != nil { if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { if sdkErr.Code == VPCNotFound { diff --git a/tencentcloud/resource_tc_vpc_acl.go b/tencentcloud/services/vpc/resource_tc_vpc_acl.go similarity index 80% rename from tencentcloud/resource_tc_vpc_acl.go rename to tencentcloud/services/vpc/resource_tc_vpc_acl.go index 0b1147f611..2551b277c9 100644 --- a/tencentcloud/resource_tc_vpc_acl.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpc import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + "context" "fmt" "log" @@ -9,10 +12,11 @@ import ( vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudVpcACL() *schema.Resource { +func ResourceTencentCloudVpcACL() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcACLCreate, Read: resourceTencentCloudVpcACLRead, @@ -26,13 +30,13 @@ func resourceTencentCloudVpcACL() *schema.Resource { "vpc_id": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "ID of the VPC instance.", }, "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(0, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 60), Description: "Name of the network ACL.", }, "ingress": { @@ -63,12 +67,12 @@ func resourceTencentCloudVpcACL() *schema.Resource { } func resourceTencentCloudVpcACLCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_acl.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_acl.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()} ingress []VpcACLRule egress []VpcACLRule @@ -109,11 +113,11 @@ func resourceTencentCloudVpcACLCreate(d *schema.ResourceData, meta interface{}) d.SetId(aclID) - client := meta.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: client} + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(client) region := client.Region if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("vpc", "acl", region, aclID) + resourceName := tccommon.BuildTagResourceName("vpc", "acl", region, aclID) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -129,13 +133,13 @@ func resourceTencentCloudVpcACLCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_acl.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_acl.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) @@ -191,7 +195,7 @@ func resourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) er cidrBlock, port, protocol, - }, FILED_SP) + }, tccommon.FILED_SP) egressList = append(egressList, strings.ToUpper(result)) } @@ -230,14 +234,14 @@ func resourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) er cidrBlock, port, protocol, - }, FILED_SP) + }, tccommon.FILED_SP) ingressList = append(ingressList, strings.ToUpper(result)) } _ = d.Set("egress", egressList) _ = d.Set("ingress", ingressList) - client := meta.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: client} + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(client) region := client.Region tags, err := tagService.DescribeResourceTags(ctx, "vpc", "acl", region, id) if err != nil { @@ -249,12 +253,12 @@ func resourceTencentCloudVpcACLRead(d *schema.ResourceData, meta interface{}) er } func resourceTencentCloudVpcACLUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_acl.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_acl.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() name *string @@ -325,14 +329,14 @@ func resourceTencentCloudVpcACLUpdate(d *schema.ResourceData, meta interface{}) } if d.HasChange("tags") { - client := meta.(*TencentCloudClient).apiV3Conn - tagService := TagService{client: client} + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(client) region := client.Region oldTags, newTags := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("vpc", "acl", region, id) + resourceName := tccommon.BuildTagResourceName("vpc", "acl", region, id) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -344,12 +348,12 @@ func resourceTencentCloudVpcACLUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudVpcACLDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_acl.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_acl.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) diff --git a/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment.go b/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment.go new file mode 100644 index 0000000000..640708c0b1 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment.go @@ -0,0 +1,115 @@ +package vpc + +import ( + "context" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceTencentCloudVpcAclAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcAclAttachmentCreate, + Read: resourceTencentCloudVpcAclAttachmentRead, + Delete: resourceTencentCloudVpcAclAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "acl_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: tccommon.ValidateNotEmpty, + Description: "ID of the attached ACL.", + }, + "subnet_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The Subnet instance ID.", + }, + }, + } +} + +func resourceTencentCloudVpcAclAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_acl_attachment.create")() + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + subnetIds []string + ) + + aclId := d.Get("acl_id").(string) + subnetId := d.Get("subnet_id").(string) + + subnetIds = append(subnetIds, subnetId) + + err := service.AssociateAclSubnets(ctx, aclId, subnetIds) + if err != nil { + return err + } + + d.SetId(aclId + tccommon.FILED_SP + subnetId) + + return resourceTencentCloudVpcAclAttachmentRead(d, meta) +} + +func resourceTencentCloudVpcAclAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_acl_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + attachmentId = d.Id() + ) + + idSplit := strings.Split(attachmentId, tccommon.FILED_SP) + if len(idSplit) < 2 { + d.SetId("") + return nil + } + aclId := idSplit[0] + subnetId := idSplit[1] + results, err := service.DescribeNetWorkAcls(ctx, aclId, "", "") + if err != nil { + return err + } + if len(results) < 1 || len(results[0].SubnetSet) < 1 { + d.SetId("") + return nil + } + + _ = d.Set("acl_id", aclId) + _ = d.Set("subnet_id", subnetId) + + return nil + +} + +func resourceTencentCloudVpcAclAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_acl_attachment.delete")() + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + attachmentAcl = d.Id() + ) + + err := service.DeleteAclAttachment(ctx, attachmentAcl) + if err != nil { + log.Printf("[CRITAL]%s delete ACL attachment failed, reason:%s\n", logId, err.Error()) + return err + } + + return nil + +} diff --git a/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment_test.go b/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment_test.go new file mode 100644 index 0000000000..3f8a715d35 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl_attachment_test.go @@ -0,0 +1,105 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func TestAccTencentCloudVpcAclAttachment_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testVpcAclAttachmentDestroy, + Steps: []resource.TestStep{ + { + Config: testAclAttachment_basic, + Check: resource.ComposeTestCheckFunc( + testVpcAclAttachmentExists("tencentcloud_vpc_acl_attachment.attachment"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc_acl_attachment.attachment", "acl_id"), + ), + }, + { + ResourceName: "tencentcloud_vpc_acl_attachment.attachment", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testVpcAclAttachmentDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_vpc_acl_attachment" { + continue + } + has, err := service.DescribeByAclId(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if has { + return fmt.Errorf("[CHECK][ACL attachment][Destroy] check: ACL attachment still exists: %s", rs.Primary.ID) + } + } + return nil +} + +func testVpcAclAttachmentExists(n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("[CHECK][ACL attachment][Exists] check: %s is not found", n) + } + if rs.Primary.ID == "" { + return fmt.Errorf("[CHECK][ACL attachment][Exists] check: id is not set") + } + has, err := service.DescribeByAclId(ctx, rs.Primary.ID) + if err != nil { + return err + } + + if !has { + return fmt.Errorf("[CHECK][ACL attachment][Exists] check: not exists: %s", rs.Primary.ID) + } + return nil + } +} + +const testAclAttachment_basic = ` +data "tencentcloud_vpc_instances" "id_instances" { + is_default = true +} +resource "tencentcloud_vpc_acl" "foo" { + vpc_id = data.tencentcloud_vpc_instances.id_instances.instance_list.0.vpc_id + name = "test_acl" + ingress = [ + "ACCEPT#192.168.1.0/24#800#TCP", + "ACCEPT#192.168.1.0/24#800-900#TCP", + ] + egress = [ + "ACCEPT#192.168.1.0/24#800#TCP", + "ACCEPT#192.168.1.0/24#800-900#TCP", + ] +} +resource "tencentcloud_vpc_acl_attachment" "attachment"{ + acl_id = tencentcloud_vpc_acl.foo.id + subnet_id = data.tencentcloud_vpc_instances.id_instances.instance_list[0].subnet_ids[0] +} +` diff --git a/tencentcloud/services/vpc/resource_tc_vpc_acl_international_test.go b/tencentcloud/services/vpc/resource_tc_vpc_acl_international_test.go new file mode 100644 index 0000000000..03392099e6 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl_international_test.go @@ -0,0 +1,103 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" +) + +func TestAccTencentCloudInternationalVpcResource_acl(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckVpcACLDestroy, + Steps: []resource.TestStep{ + { + Config: testAccVpcACLConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcACLExists("tencentcloud_vpc_acl.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "name", "test_acl"), + resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "ingress.#", "2"), + resource.TestCheckResourceAttr("tencentcloud_vpc_acl.foo", "egress.#", "2"), + ), + }, + { + ResourceName: "tencentcloud_vpc_acl.foo", + ImportState: true, + }, + }, + }) +} + +func testAccInternationalCheckVpcACLExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := service.DescribeNetWorkByACLID(ctx, rs.Primary.ID) + if err != nil { + return err + } + if has > 0 { + return nil + } + + return fmt.Errorf("vpc network acl %s not exists", rs.Primary.ID) + } +} + +func testAccInternationalCheckVpcACLDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_vpc_acl" { + continue + } + _, has, err := service.DescribeNetWorkByACLID(ctx, rs.Primary.ID) + if err != nil { + return err + } + if has == 0 { + return nil + } + + return fmt.Errorf("vpc acl %s still exists", rs.Primary.ID) + } + + return nil +} + +const testAccInternationalVpcACLConfig = ` +data "tencentcloud_vpc_instances" "default" { + is_default = true +} + +resource "tencentcloud_vpc_acl" "foo" { + vpc_id = data.tencentcloud_vpc_instances.default.instance_list.0.vpc_id + name = "test_acl" + ingress = [ + "ACCEPT#192.168.1.0/24#80#TCP", + "ACCEPT#192.168.1.0/24#80-90#TCP", + ] + egress = [ + "ACCEPT#192.168.1.0/24#80#TCP", + "ACCEPT#192.168.1.0/24#80-90#TCP", + ] +} +` diff --git a/tencentcloud/resource_tc_vpc_acl_test.go b/tencentcloud/services/vpc/resource_tc_vpc_acl_test.go similarity index 89% rename from tencentcloud/resource_tc_vpc_acl_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_acl_test.go index e018e37501..bca952a357 100644 --- a/tencentcloud/resource_tc_vpc_acl_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vpc_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudVpcAclResource_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: testAccCheckVpcACLDestroy, Steps: []resource.TestStep{ { @@ -36,8 +40,8 @@ func TestAccTencentCloudVpcAclResource_basic(t *testing.T) { func TestAccTencentCloudVpcAclRulesResource_Update(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: testAccCheckVpcACLDestroy, Steps: []resource.TestStep{ { @@ -104,15 +108,15 @@ func TestAccTencentCloudVpcAclRulesResource_Update(t *testing.T) { func testAccCheckVpcACLExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeNetWorkByACLID(ctx, rs.Primary.ID) if err != nil { return err @@ -126,10 +130,10 @@ func testAccCheckVpcACLExists(r string) resource.TestCheckFunc { } func testAccCheckVpcACLDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpc_acl" { continue diff --git a/tencentcloud/resource_tc_vpc_acl_testing_test.go b/tencentcloud/services/vpc/resource_tc_vpc_acl_testing_test.go similarity index 87% rename from tencentcloud/resource_tc_vpc_acl_testing_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_acl_testing_test.go index 1338ef4013..7525682f63 100644 --- a/tencentcloud/resource_tc_vpc_acl_testing_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_acl_testing_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package vpc_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingVpcAclRulesResource_Update(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: testAccTestingVpcACLConfig, @@ -36,7 +38,7 @@ func TestAccTencentCloudTestingVpcAclRulesResource_Update(t *testing.T) { }) } -const testAccTestingVpcACLConfig = defaultVpcVariable + ` +const testAccTestingVpcACLConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr @@ -55,7 +57,7 @@ resource "tencentcloud_vpc_acl" "foo" { } ` -const testAccTestingVpcACLConfigUpdate = defaultVpcVariable + ` +const testAccTestingVpcACLConfigUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr diff --git a/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package.go b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package.go new file mode 100644 index 0000000000..a18e3776fa --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package.go @@ -0,0 +1,314 @@ +package vpc + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + + "context" + "fmt" + "log" + + "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 ResourceTencentCloudVpcBandwidthPackage() *schema.Resource { + return &schema.Resource{ + Read: resourceTencentCloudVpcBandwidthPackageRead, + Create: resourceTencentCloudVpcBandwidthPackageCreate, + Update: resourceTencentCloudVpcBandwidthPackageUpdate, + Delete: resourceTencentCloudVpcBandwidthPackageDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "network_type": { + Type: schema.TypeString, + Optional: true, + Description: "Bandwidth packet type, default: `BGP`. " + + "Optional value: `BGP`: common BGP shared bandwidth package; `HIGH_QUALITY_BGP`: High Quality BGP Shared Bandwidth Package; " + + "`SINGLEISP_CMCC`: CMCC shared bandwidth package; `SINGLEISP_CTCC:`: CTCC shared bandwidth package; `SINGLEISP_CUCC`: CUCC shared bandwidth package.", + }, + + "charge_type": { + Type: schema.TypeString, + Optional: true, + Description: "Bandwidth package billing type, default: `TOP5_POSTPAID_BY_MONTH`." + + " Optional value: `TOP5_POSTPAID_BY_MONTH`: TOP5 billed by monthly postpaid; `PERCENT95_POSTPAID_BY_MONTH`: 95 billed monthly postpaid;" + + " `FIXED_PREPAID_BY_MONTH`: Monthly prepaid billing (Type FIXED_PREPAID_BY_MONTH product API capability is under construction);" + + " `BANDWIDTH_POSTPAID_BY_DAY`: bandwidth billed by daily postpaid; `ENHANCED95_POSTPAID_BY_MONTH`: enhanced 95 billed monthly postpaid.", + }, + + "bandwidth_package_name": { + Type: schema.TypeString, + Optional: true, + Description: "Bandwidth package name.", + }, + + "internet_max_bandwidth": { + Type: schema.TypeInt, + Optional: true, + Description: "Bandwidth packet speed limit size. Unit: Mbps, -1 means no speed limit.", + }, + + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "Tag description list.", + }, + + "time_span": { + Type: schema.TypeInt, + Optional: true, + ForceNew: true, + Description: "The purchase duration of the prepaid monthly bandwidth package, unit: month, value range: 1~60.", + }, + + "egress": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Network egress. It defaults to `center_egress1`. If you want to try the egress feature, please [submit a ticket](https://console.cloud.tencent.com/workorder/category).", + }, + }, + } +} + +func resourceTencentCloudVpcBandwidthPackageCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_bwp_bandwidth_package.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewCreateBandwidthPackageRequest() + response *vpc.CreateBandwidthPackageResponse + ) + + if v, ok := d.GetOk("network_type"); ok { + request.NetworkType = helper.String(v.(string)) + } + + if v, ok := d.GetOk("charge_type"); ok { + request.ChargeType = helper.String(v.(string)) + } + + if v, ok := d.GetOk("bandwidth_package_name"); ok { + request.BandwidthPackageName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("internet_max_bandwidth"); ok { + request.InternetMaxBandwidth = helper.IntInt64(v.(int)) + } + + if v := helper.GetTags(d, "tags"); len(v) > 0 { + for tagKey, tagValue := range v { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + if v, ok := d.GetOkExists("time_span"); ok { + request.TimeSpan = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOk("egress"); ok { + request.Egress = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateBandwidthPackage(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 bwp bandwidthPackage failed, reason:%+v", logId, err) + return err + } + + bandwidthPackageId := *response.Response.BandwidthPackageId + + d.SetId(bandwidthPackageId) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := fmt.Sprintf("qcs::vpc:%s:uin/:bandwidthPackage/%s", region, bandwidthPackageId) + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { + instance, errRet := service.DescribeVpcBandwidthPackage(ctx, bandwidthPackageId) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + if instance == nil { + return resource.RetryableError(fmt.Errorf("vpc bandwidthPackage instance is being created, retry...")) + } + if *instance.Status == "CREATED" { + return nil + } + return resource.RetryableError(fmt.Errorf("vpc bandwidthPackage instance status is %v, retry...", *instance.Status)) + }) + if err != nil { + return err + } + + return resourceTencentCloudVpcBandwidthPackageRead(d, meta) +} + +func resourceTencentCloudVpcBandwidthPackageRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_bwp_bandwidth_package.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + bandwidthPackageId := d.Id() + + bandwidthPackage, err := service.DescribeVpcBandwidthPackage(ctx, bandwidthPackageId) + + if err != nil { + return err + } + + if bandwidthPackage == nil { + d.SetId("") + log.Printf("[WARN]%s resource `tencentcloud_vpc_bandwidth_package` [%s] not found, please check if it has been deleted.", + logId, bandwidthPackageId, + ) + return nil + } + + if bandwidthPackage.NetworkType != nil { + _ = d.Set("network_type", bandwidthPackage.NetworkType) + } + + if bandwidthPackage.ChargeType != nil { + _ = d.Set("charge_type", bandwidthPackage.ChargeType) + } + + if bandwidthPackage.BandwidthPackageName != nil { + _ = d.Set("bandwidth_package_name", bandwidthPackage.BandwidthPackageName) + } + + if bandwidthPackage.Bandwidth != nil { + _ = d.Set("internet_max_bandwidth", bandwidthPackage.Bandwidth) + } + + if bandwidthPackage.Egress != nil { + _ = d.Set("egress", bandwidthPackage.Egress) + } + + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + tags, err := tagService.DescribeResourceTags(ctx, "vpc", "bandwidthPackage", tcClient.Region, d.Id()) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudVpcBandwidthPackageUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_bandwidth_package.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + bandwidthPackageId := d.Id() + + immutableArgs := []string{ + "network_type", + "internet_max_bandwidth", + "egress", + } + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + request := vpc.NewModifyBandwidthPackageAttributeRequest() + request.BandwidthPackageId = &bandwidthPackageId + + if v, ok := d.GetOk("bandwidth_package_name"); ok { + request.BandwidthPackageName = helper.String(v.(string)) + } + + if d.HasChange("charge_type") { + if v, ok := d.GetOk("charge_type"); ok { + request.ChargeType = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyBandwidthPackageAttribute(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 vpc bandwidthPackage failed, reason:%+v", logId, err) + return err + } + + if d.HasChange("tags") { + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := svctag.NewTagService(tcClient) + oldTags, newTags := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) + resourceName := tccommon.BuildTagResourceName("vpc", "bandwidthPackage", tcClient.Region, d.Id()) + if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { + return err + } + } + + return resourceTencentCloudVpcBandwidthPackageRead(d, meta) +} + +func resourceTencentCloudVpcBandwidthPackageDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_bwp_bandwidth_package.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + bandwidthPackageId := d.Id() + + if err := service.DeleteVpcBandwidthPackageById(ctx, bandwidthPackageId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_bandwidth_package_attachment.go b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment.go similarity index 76% rename from tencentcloud/resource_tc_vpc_bandwidth_package_attachment.go rename to tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment.go index b9eb2796cb..7fb7dfec75 100644 --- a/tencentcloud/resource_tc_vpc_bandwidth_package_attachment.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc 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/internal/helper" ) -func resourceTencentCloudVpcBandwidthPackageAttachment() *schema.Resource { +func ResourceTencentCloudVpcBandwidthPackageAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudVpcBandwidthPackageAttachmentRead, Create: resourceTencentCloudVpcBandwidthPackageAttachmentCreate, @@ -60,10 +63,10 @@ func resourceTencentCloudVpcBandwidthPackageAttachment() *schema.Resource { } func resourceTencentCloudVpcBandwidthPackageAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_bandwidth_package_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_bandwidth_package_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewAddBandwidthPackageResourcesRequest() @@ -93,10 +96,10 @@ func resourceTencentCloudVpcBandwidthPackageAttachmentCreate(d *schema.ResourceD request.Protocol = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AddBandwidthPackageResources(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AddBandwidthPackageResources(request) if e != nil { - return retryError(e) + return tccommon.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,20 +112,20 @@ func resourceTencentCloudVpcBandwidthPackageAttachmentCreate(d *schema.ResourceD return err } - d.SetId(bandwidthPackageId + FILED_SP + resourceId) + d.SetId(bandwidthPackageId + tccommon.FILED_SP + resourceId) return resourceTencentCloudVpcBandwidthPackageAttachmentRead(d, meta) } func resourceTencentCloudVpcBandwidthPackageAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_bandwidth_package_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_bandwidth_package_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()} - 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,15 +168,15 @@ func resourceTencentCloudVpcBandwidthPackageAttachmentRead(d *schema.ResourceDat } func resourceTencentCloudVpcBandwidthPackageAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_bandwidth_package_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_bandwidth_package_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 := 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", d.Id()) } diff --git a/tencentcloud/resource_tc_vpc_bandwidth_package_attachment_test.go b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment_test.go similarity index 78% rename from tencentcloud/resource_tc_vpc_bandwidth_package_attachment_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment_test.go index 357270c91e..32375bd757 100644 --- a/tencentcloud/resource_tc_vpc_bandwidth_package_attachment_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc_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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -17,8 +21,8 @@ import ( func TestAccTencentCloudVpcBandwidthPackageAttachment_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: testAccCheckBandwidthPackageAttachmentDestroy, Steps: []resource.TestStep{ { @@ -35,14 +39,14 @@ func TestAccTencentCloudVpcBandwidthPackageAttachment_basic(t *testing.T) { } func testAccCheckBandwidthPackageAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpc_bandwidth_package_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) } @@ -73,22 +77,22 @@ func testAccCheckBandwidthPackageAttachmentDestroy(s *terraform.State) error { func testAccCheckBandwidthPackageAttachmentExists(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) } - 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) } bandwidthPackageId := idSplit[0] resourceId := idSplit[1] - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) bandwidthPackageResources, err := service.DescribeVpcBandwidthPackageAttachment(ctx, bandwidthPackageId, resourceId) if bandwidthPackageResources == nil { return fmt.Errorf("vpc bandwidthPackageResources %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_vpc_bandwidth_package_test.go b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_test.go similarity index 84% rename from tencentcloud/resource_tc_vpc_bandwidth_package_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_test.go index 2f955c951f..275207133a 100644 --- a/tencentcloud/resource_tc_vpc_bandwidth_package_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_bandwidth_package_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package vpc_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudVpcBandwidthPackageResource_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: testAccCheckBandwidthPackageDestroy, Steps: []resource.TestStep{ { @@ -48,8 +52,8 @@ func TestAccTencentCloudVpcBandwidthPackageResource_basic(t *testing.T) { func TestAccTencentCloudVpcBandwidthPackageResource_Egress(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: testAccCheckBandwidthPackageDestroy, Steps: []resource.TestStep{ { @@ -73,9 +77,9 @@ func TestAccTencentCloudVpcBandwidthPackageResource_Egress(t *testing.T) { } func testAccCheckBandwidthPackageDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpc_bandwidth_package" { continue @@ -94,15 +98,15 @@ func testAccCheckBandwidthPackageDestroy(s *terraform.State) error { func testAccCheckBandwidthPackageExists(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) bandwidthPackage, err := service.DescribeVpcBandwidthPackage(ctx, rs.Primary.ID) if bandwidthPackage == nil { return fmt.Errorf("vpc bandwidthPackage %s is not found", rs.Primary.ID) diff --git a/tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment.go b/tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment.go new file mode 100644 index 0000000000..dda14ac329 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment.go @@ -0,0 +1,218 @@ +/* +Provides a resource to create a vpc classic_link_attachment + +# Example Usage + +```hcl +data "tencentcloud_availability_zones" "zones" {} + + data "tencentcloud_images" "image" { + image_type = ["PUBLIC_IMAGE"] + image_name_regex = "Final" + } + + data "tencentcloud_instance_types" "instance_types" { + filter { + name = "zone" + values = [data.tencentcloud_availability_zones.zones.zones.0.name] + } + + filter { + name = "instance-family" + values = ["S5"] + } + + cpu_core_count = 2 + exclude_sold_out = true + } + + resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" + } + + resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name + name = "subnet-example" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false + } + + resource "tencentcloud_instance" "example" { + instance_name = "tf-example" + availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name + image_id = data.tencentcloud_images.image.images.0.image_id + instance_type = data.tencentcloud_instance_types.instance_types.instance_types.0.instance_type + system_disk_type = "CLOUD_PREMIUM" + disable_security_service = true + disable_monitor_service = true + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + } + + resource "tencentcloud_vpc_classic_link_attachment" "classic_link_attachment" { + vpc_id = tencentcloud_vpc.vpc.id + instance_ids = [tencentcloud_instance.example.id] + } + +``` + +# Import + +vpc classic_link_attachment can be imported using the id, e.g. + +``` +terraform import tencentcloud_vpc_classic_link_attachment.classic_link_attachment classic_link_attachment_id +``` +*/ +package vpc + +import ( + "context" + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcClassicLinkAttachment() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcClassicLinkAttachmentCreate, + Read: resourceTencentCloudVpcClassicLinkAttachmentRead, + Delete: resourceTencentCloudVpcClassicLinkAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpc_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "VPC instance ID.", + }, + + "instance_ids": { + Required: true, + ForceNew: true, + MaxItems: 1, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "CVM instance ID. It only support set one instance now.", + }, + }, + } +} + +func resourceTencentCloudVpcClassicLinkAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_classic_link_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAttachClassicLinkVpcRequest() + vpcId string + instanceId string + ) + if v, ok := d.GetOk("vpc_id"); ok { + vpcId = v.(string) + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("instance_ids"); ok { + instanceIdsSet := v.(*schema.Set).List() + for i := range instanceIdsSet { + instanceId = instanceIdsSet[i].(string) + request.InstanceIds = append(request.InstanceIds, &instanceId) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AttachClassicLinkVpc(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 vpc ClassicLinkAttachment failed, reason:%+v", logId, err) + return err + } + + d.SetId(vpcId + tccommon.FILED_SP + instanceId) + + return resourceTencentCloudVpcClassicLinkAttachmentRead(d, meta) +} + +func resourceTencentCloudVpcClassicLinkAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_classic_link_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + vpcId := idSplit[0] + instanceId := idSplit[1] + + classicLinkAttachment, err := service.DescribeVpcClassicLinkAttachmentById(ctx, vpcId, instanceId) + if err != nil { + return err + } + + if classicLinkAttachment == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcClassicLinkAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if classicLinkAttachment.VpcId != nil { + _ = d.Set("vpc_id", classicLinkAttachment.VpcId) + } + + if classicLinkAttachment.InstanceId != nil { + _ = d.Set("instance_ids", []*string{classicLinkAttachment.InstanceId}) + } + + return nil +} + +func resourceTencentCloudVpcClassicLinkAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_classic_link_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + vpcId := idSplit[0] + instanceId := idSplit[1] + + if err := service.DeleteVpcClassicLinkAttachmentById(ctx, vpcId, instanceId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_classic_link_attachment_test.go b/tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment_test.go similarity index 82% rename from tencentcloud/resource_tc_vpc_classic_link_attachment_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment_test.go index 49abd24357..9ae9019c04 100644 --- a/tencentcloud/resource_tc_vpc_classic_link_attachment_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_classic_link_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcClassicLinkAttachmentResource_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: testAccVpcClassicLinkAttachment, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address.go b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address.go new file mode 100644 index 0000000000..318d4bc4a1 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address.go @@ -0,0 +1,188 @@ +/* +Provides a resource to create a vpc dhcp_associate_address + +# Example Usage + +```hcl +data "tencentcloud_availability_zones" "zones" {} + + resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" + } + + resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name + name = "subnet-example" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false + } + + resource "tencentcloud_vpc_dhcp_ip" "example" { + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + dhcp_ip_name = "tf-example" + } + + resource "tencentcloud_eip" "eip" { + name = "example-eip" + } + + resource "tencentcloud_vpc_dhcp_associate_address" "example" { + dhcp_ip_id = tencentcloud_vpc_dhcp_ip.example.id + address_ip = tencentcloud_eip.eip.public_ip + } + +``` + +# Import + +vpc dhcp_associate_address can be imported using the id, e.g. + +``` +terraform import tencentcloud_vpc_dhcp_associate_address.dhcp_associate_address dhcp_associate_address_id +``` +*/ +package vpc + +import ( + "context" + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcDhcpAssociateAddress() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcDhcpAssociateAddressCreate, + Read: resourceTencentCloudVpcDhcpAssociateAddressRead, + Delete: resourceTencentCloudVpcDhcpAssociateAddressDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "dhcp_ip_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "`DhcpIp` unique `ID`, like: `dhcpip-9o233uri`. Must be a `DhcpIp` that is not bound to `EIP`.", + }, + + "address_ip": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Elastic public network `IP`. Must be `EIP` not bound to `DhcpIp`.", + }, + }, + } +} + +func resourceTencentCloudVpcDhcpAssociateAddressCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_associate_address.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAssociateDhcpIpWithAddressIpRequest() + dhcpIpId string + addressIp string + ) + if v, ok := d.GetOk("dhcp_ip_id"); ok { + dhcpIpId = v.(string) + request.DhcpIpId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("address_ip"); ok { + addressIp = v.(string) + request.AddressIp = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateDhcpIpWithAddressIp(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 vpc DhcpAssociateAddress failed, reason:%+v", logId, err) + return err + } + + d.SetId(dhcpIpId + tccommon.FILED_SP + addressIp) + + return resourceTencentCloudVpcDhcpAssociateAddressRead(d, meta) +} + +func resourceTencentCloudVpcDhcpAssociateAddressRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_associate_address.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + dhcpIpId := idSplit[0] + addressIp := idSplit[1] + + DhcpAssociateAddress, err := service.DescribeVpcDhcpAssociateAddressById(ctx, dhcpIpId, addressIp) + if err != nil { + return err + } + + if DhcpAssociateAddress == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcDhcpAssociateAddress` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if DhcpAssociateAddress.DhcpIpId != nil { + _ = d.Set("dhcp_ip_id", DhcpAssociateAddress.DhcpIpId) + } + + if DhcpAssociateAddress.AddressIp != nil { + _ = d.Set("address_ip", DhcpAssociateAddress.AddressIp) + } + + return nil +} + +func resourceTencentCloudVpcDhcpAssociateAddressDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_associate_address.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + dhcpIpId := idSplit[0] + + if err := service.DeleteVpcDhcpAssociateAddressById(ctx, dhcpIpId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_dhcp_associate_address_test.go b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address_test.go similarity index 82% rename from tencentcloud/resource_tc_vpc_dhcp_associate_address_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address_test.go index 192fc688a1..0a72cbd899 100644 --- a/tencentcloud/resource_tc_vpc_dhcp_associate_address_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_associate_address_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcDhcpAssociateAddressResource_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: testAccVpcDhcpAssociateAddress, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip.go b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip.go new file mode 100644 index 0000000000..bce493ff79 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip.go @@ -0,0 +1,196 @@ +package vpc + +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" +) + +func ResourceTencentCloudVpcDhcpIp() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcDhcpIpCreate, + Read: resourceTencentCloudVpcDhcpIpRead, + Update: resourceTencentCloudVpcDhcpIpUpdate, + Delete: resourceTencentCloudVpcDhcpIpDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpc_id": { + Required: true, + Type: schema.TypeString, + Description: "The private network `ID`.", + }, + + "subnet_id": { + Required: true, + Type: schema.TypeString, + Description: "Subnet `ID`.", + }, + + "dhcp_ip_name": { + Required: true, + Type: schema.TypeString, + Description: "`DhcpIp` name.", + }, + }, + } +} + +func resourceTencentCloudVpcDhcpIpCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_ip.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewCreateDhcpIpRequest() + response = vpc.NewCreateDhcpIpResponse() + dhcpIpId string + ) + if v, ok := d.GetOk("vpc_id"); ok { + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("subnet_id"); ok { + request.SubnetId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("dhcp_ip_name"); ok { + request.DhcpIpName = helper.String(v.(string)) + } + + // 默认1 + request.SecondaryPrivateIpAddressCount = helper.IntUint64(1) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateDhcpIp(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 vpc dhcpIp failed, reason:%+v", logId, err) + return err + } + + dhcpIpSet := response.Response.DhcpIpSet + if len(dhcpIpSet) < 1 { + return fmt.Errorf("create vpc dhcpIp failed.") + } + + dhcpIpId = *dhcpIpSet[0].DhcpIpId + d.SetId(dhcpIpId) + + return resourceTencentCloudVpcDhcpIpRead(d, meta) +} + +func resourceTencentCloudVpcDhcpIpRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_ip.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + dhcpIpId := d.Id() + + dhcpIp, err := service.DescribeVpcDhcpIpById(ctx, dhcpIpId) + if err != nil { + return err + } + + if dhcpIp == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcDhcpIp` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if dhcpIp.VpcId != nil { + _ = d.Set("vpc_id", dhcpIp.VpcId) + } + + if dhcpIp.SubnetId != nil { + _ = d.Set("subnet_id", dhcpIp.SubnetId) + } + + if dhcpIp.DhcpIpName != nil { + _ = d.Set("dhcp_ip_name", dhcpIp.DhcpIpName) + } + + return nil +} + +func resourceTencentCloudVpcDhcpIpUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_ip.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewModifyDhcpIpAttributeRequest() + + dhcpIpId := d.Id() + + request.DhcpIpId = &dhcpIpId + + immutableArgs := []string{"vpc_id", "subnet_id"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + if d.HasChange("dhcp_ip_name") { + if v, ok := d.GetOk("dhcp_ip_name"); ok { + request.DhcpIpName = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyDhcpIpAttribute(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc dhcpIp failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudVpcDhcpIpRead(d, meta) +} + +func resourceTencentCloudVpcDhcpIpDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_dhcp_ip.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + dhcpIpId := d.Id() + + if err := service.DeleteVpcDhcpIpById(ctx, dhcpIpId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_dhcp_ip_test.go b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_test.go similarity index 80% rename from tencentcloud/resource_tc_vpc_dhcp_ip_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_test.go index f4438504de..6c8bb76330 100644 --- a/tencentcloud/resource_tc_vpc_dhcp_ip_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcDhcpIpResource_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: testAccVpcDhcpIp, diff --git a/tencentcloud/resource_tc_vpc_dhcp_ip_testing_test.go b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_testing_test.go similarity index 86% rename from tencentcloud/resource_tc_vpc_dhcp_ip_testing_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_testing_test.go index d67c542b84..c89d017189 100644 --- a/tencentcloud/resource_tc_vpc_dhcp_ip_testing_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_dhcp_ip_testing_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package vpc_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingVpcDhcpIpResource_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: testAccTestingVpcDhcpIp, diff --git a/tencentcloud/resource_tc_vpc_flow_log_testing_test.go b/tencentcloud/services/vpc/resource_tc_vpc_flow_log_testing_test.go similarity index 92% rename from tencentcloud/resource_tc_vpc_flow_log_testing_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_flow_log_testing_test.go index 59ddeb3679..d9e298753c 100644 --- a/tencentcloud/resource_tc_vpc_flow_log_testing_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_flow_log_testing_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package vpc_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingVpcFlowLogResource_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: testAccTestingVpcFlowLog, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_international_test.go b/tencentcloud/services/vpc/resource_tc_vpc_international_test.go new file mode 100644 index 0000000000..bc5f4eaf51 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_international_test.go @@ -0,0 +1,94 @@ +package vpc_test + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" +) + +func TestAccTencentCloudInternationalVpcResource_instance(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccInternationalCheckVpcDestroy, + Steps: []resource.TestStep{ + { + Config: testAccInternationalVpcConfig, + Check: resource.ComposeTestCheckFunc( + testAccInternationalCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", "172.16.0.0/16"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", "tf-vpc"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "default_route_table_id"), + ), + }, + { + ResourceName: "tencentcloud_vpc.foo", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccInternationalCheckVpcExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") + if err != nil { + return err + } + if has > 0 { + return nil + } + + return fmt.Errorf("vpc %s not exists", rs.Primary.ID) + } +} + +func testAccInternationalCheckVpcDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_vpc" { + continue + } + time.Sleep(5 * time.Second) + _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") + if err != nil { + return err + } + if has == 0 { + return nil + } + return fmt.Errorf("vpc %s still exists", rs.Primary.ID) + } + + return nil +} + +const testAccInternationalVpcConfig = ` +resource "tencentcloud_vpc" "foo" { + name = "tf-vpc" + cidr_block = "172.16.0.0/16" +} +` diff --git a/tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block.go new file mode 100644 index 0000000000..55ef5386fe --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block.go @@ -0,0 +1,123 @@ +package vpc + +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 ResourceTencentCloudVpcIpv6CidrBlock() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcIpv6CidrBlockCreate, + Read: resourceTencentCloudVpcIpv6CidrBlockRead, + Delete: resourceTencentCloudVpcIpv6CidrBlockDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpc_id": { + Required: true, + Type: schema.TypeString, + ForceNew: true, + Description: "`VPC` instance `ID`, in the form of `vpc-f49l6u0z`.", + }, + "ipv6_cidr_block": { + Type: schema.TypeString, + Computed: true, + Description: "ipv6 cidr block.", + }, + }, + } +} + +func resourceTencentCloudVpcIpv6CidrBlockCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAssignIpv6CidrBlockRequest() + vpcId string + ) + if v, ok := d.GetOk("vpc_id"); ok { + vpcId = v.(string) + request.VpcId = helper.String(vpcId) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssignIpv6CidrBlock(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 vpc ipv6CidrBlock failed, reason:%+v", logId, err) + return err + } + + d.SetId(vpcId) + + return resourceTencentCloudVpcIpv6CidrBlockRead(d, meta) +} + +func resourceTencentCloudVpcIpv6CidrBlockRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + vpcId := d.Id() + + instance, err := service.DescribeVpcById(ctx, vpcId) + if err != nil { + return err + } + + if instance == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcIpv6CidrBlock` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if instance.VpcId != nil { + _ = d.Set("vpc_id", instance.VpcId) + } + + if instance.Ipv6CidrBlock != nil { + _ = d.Set("ipv6_cidr_block", instance.Ipv6CidrBlock) + } + + return nil +} + +func resourceTencentCloudVpcIpv6CidrBlockDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_cidr_block.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + vpcId := d.Id() + + if err := service.DeleteVpcIpv6CidrBlockById(ctx, vpcId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_ipv6_cidr_block_test.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block_test.go similarity index 83% rename from tencentcloud/resource_tc_vpc_ipv6_cidr_block_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block_test.go index 28ada57785..53e1e75431 100644 --- a/tencentcloud/resource_tc_vpc_ipv6_cidr_block_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_cidr_block_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcIpv6CidrBlockResource_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: testAccVpcIpv6CidrBlock, diff --git a/tencentcloud/resource_tc_vpc_ipv6_eni_address.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address.go similarity index 78% rename from tencentcloud/resource_tc_vpc_ipv6_eni_address.go rename to tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address.go index 8d4e2f4080..3b79d2dc02 100644 --- a/tencentcloud/resource_tc_vpc_ipv6_eni_address.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc 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" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudVpcIpv6EniAddress() *schema.Resource { +func ResourceTencentCloudVpcIpv6EniAddress() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcIpv6EniAddressCreate, Read: resourceTencentCloudVpcIpv6EniAddressRead, @@ -76,10 +79,10 @@ func resourceTencentCloudVpcIpv6EniAddress() *schema.Resource { } func resourceTencentCloudVpcIpv6EniAddressCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_eni_address.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_eni_address.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewAssignIpv6AddressesRequest() @@ -122,10 +125,10 @@ func resourceTencentCloudVpcIpv6EniAddressCreate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssignIpv6Addresses(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssignIpv6Addresses(request) if e != nil { - return retryError(e) + return tccommon.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,22 +147,22 @@ func resourceTencentCloudVpcIpv6EniAddressCreate(d *schema.ResourceData, meta in time.Sleep(5 * time.Second) - d.SetId(vpcId + FILED_SP + networkInterfaceId + FILED_SP + *addressSet[0].Address) + d.SetId(vpcId + tccommon.FILED_SP + networkInterfaceId + tccommon.FILED_SP + *addressSet[0].Address) return resourceTencentCloudVpcIpv6EniAddressRead(d, meta) } func resourceTencentCloudVpcIpv6EniAddressRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_eni_address.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_eni_address.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) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -185,14 +188,14 @@ func resourceTencentCloudVpcIpv6EniAddressRead(d *schema.ResourceData, meta inte } func resourceTencentCloudVpcIpv6EniAddressUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_eni_address.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_eni_address.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewModifyIpv6AddressesAttributeRequest() - 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()) } @@ -228,10 +231,10 @@ func resourceTencentCloudVpcIpv6EniAddressUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyIpv6AddressesAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyIpv6AddressesAttribute(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -246,14 +249,14 @@ func resourceTencentCloudVpcIpv6EniAddressUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudVpcIpv6EniAddressDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_eni_address.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_eni_address.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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := VpcService{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_vpc_ipv6_eni_address_test.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address_test.go similarity index 83% rename from tencentcloud/resource_tc_vpc_ipv6_eni_address_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address_test.go index f7d2be996c..b49d213264 100644 --- a/tencentcloud/resource_tc_vpc_ipv6_eni_address_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_eni_address_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 @@ func TestAccTencentCloudVpcIpv6EniAddressResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, //CheckDestroy: testAccCheckVpcIpv6EniAddressDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccVpcIpv6EniAddress, @@ -41,14 +43,14 @@ func TestAccTencentCloudVpcIpv6EniAddressResource_basic(t *testing.T) { // //func testAccCheckVpcIpv6EniAddressDestroy(s *terraform.State) error { -// logId := getLogId(contextNil) -// ctx := context.WithValue(context.TODO(), logIdKey, logId) -// service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} +// logId := tccommon.GetLogId(tccommon.ContextNil) +// ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) +// service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) // for _, rs := range s.RootModule().Resources { // if rs.Type != "tencentcloud_vpc_bandwidth_package_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) // } @@ -79,22 +81,22 @@ func TestAccTencentCloudVpcIpv6EniAddressResource_basic(t *testing.T) { // //func testAccCheckVpcIpv6EniAddressExists(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) // } // -// 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) // } // bandwidthPackageId := idSplit[0] // resourceId := idSplit[1] // -// service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} +// service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) // bandwidthPackageResources, err := service.DescribeVpcBandwidthPackageAttachment(ctx, bandwidthPackageId, resourceId) // if bandwidthPackageResources == nil { // return fmt.Errorf("vpc bandwidthPackageResources %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_vpc_ipv6_subnet_cidr_block.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block.go similarity index 75% rename from tencentcloud/resource_tc_vpc_ipv6_subnet_cidr_block.go rename to tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block.go index 1f355b4787..8bd1ebeec9 100644 --- a/tencentcloud/resource_tc_vpc_ipv6_subnet_cidr_block.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpc 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/internal/helper" ) -func resourceTencentCloudVpcIpv6SubnetCidrBlock() *schema.Resource { +func ResourceTencentCloudVpcIpv6SubnetCidrBlock() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcIpv6SubnetCidrBlockCreate, Read: resourceTencentCloudVpcIpv6SubnetCidrBlockRead, @@ -54,10 +57,10 @@ func resourceTencentCloudVpcIpv6SubnetCidrBlock() *schema.Resource { } func resourceTencentCloudVpcIpv6SubnetCidrBlockCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewAssignIpv6SubnetCidrBlockRequest() @@ -84,10 +87,10 @@ func resourceTencentCloudVpcIpv6SubnetCidrBlockCreate(d *schema.ResourceData, me } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssignIpv6SubnetCidrBlock(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssignIpv6SubnetCidrBlock(request) if e != nil { - return retryError(e) + return tccommon.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,22 +101,22 @@ func resourceTencentCloudVpcIpv6SubnetCidrBlockCreate(d *schema.ResourceData, me return err } - d.SetId(vpcId + FILED_SP + subnetId) + d.SetId(vpcId + tccommon.FILED_SP + subnetId) return resourceTencentCloudVpcIpv6SubnetCidrBlockRead(d, meta) } func resourceTencentCloudVpcIpv6SubnetCidrBlockRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.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", d.Id()) } @@ -147,14 +150,14 @@ func resourceTencentCloudVpcIpv6SubnetCidrBlockRead(d *schema.ResourceData, meta } func resourceTencentCloudVpcIpv6SubnetCidrBlockDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_ipv6_subnet_cidr_block.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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := VpcService{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_vpc_ipv6_subnet_cidr_block_test.go b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block_test.go similarity index 83% rename from tencentcloud/resource_tc_vpc_ipv6_subnet_cidr_block_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block_test.go index 371b825531..72e62e68f8 100644 --- a/tencentcloud/resource_tc_vpc_ipv6_subnet_cidr_block_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_ipv6_subnet_cidr_block_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcIpv6SubnetCidrBlockResource_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: testAccVpcIpv6SubnetCidrBlock, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_local_gateway.go b/tencentcloud/services/vpc/resource_tc_vpc_local_gateway.go new file mode 100644 index 0000000000..ba1ad7d59f --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_local_gateway.go @@ -0,0 +1,202 @@ +package vpc + +import ( + "context" + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcLocalGateway() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcLocalGatewayCreate, + Read: resourceTencentCloudVpcLocalGatewayRead, + Update: resourceTencentCloudVpcLocalGatewayUpdate, + Delete: resourceTencentCloudVpcLocalGatewayDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "local_gateway_name": { + Required: true, + Type: schema.TypeString, + Description: "Local gateway name.", + }, + + "vpc_id": { + Required: true, + Type: schema.TypeString, + Description: "VPC instance ID.", + }, + + "cdc_id": { + Required: true, + Type: schema.TypeString, + Description: "CDC instance ID.", + }, + }, + } +} + +func resourceTencentCloudVpcLocalGatewayCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_local_gateway.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewCreateLocalGatewayRequest() + response = vpc.NewCreateLocalGatewayResponse() + cdcId string + localGatewayId string + ) + if v, ok := d.GetOk("local_gateway_name"); ok { + request.LocalGatewayName = helper.String(v.(string)) + } + + if v, ok := d.GetOk("vpc_id"); ok { + request.VpcId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("cdc_id"); ok { + cdcId = v.(string) + request.CdcId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateLocalGateway(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 vpc localGateway failed, reason:%+v", logId, err) + return err + } + + localGatewayId = *response.Response.LocalGateway.UniqLocalGwId + d.SetId(cdcId + tccommon.FILED_SP + localGatewayId) + + return resourceTencentCloudVpcLocalGatewayRead(d, meta) +} + +func resourceTencentCloudVpcLocalGatewayRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_local_gateway.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + localGatewayId := idSplit[1] + + localGateway, err := service.DescribeVpcLocalGatewayById(ctx, localGatewayId) + if err != nil { + return err + } + + if localGateway == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcLocalGateway` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if localGateway.LocalGatewayName != nil { + _ = d.Set("local_gateway_name", localGateway.LocalGatewayName) + } + + if localGateway.VpcId != nil { + _ = d.Set("vpc_id", localGateway.VpcId) + } + + if localGateway.CdcId != nil { + _ = d.Set("cdc_id", localGateway.CdcId) + } + + return nil +} + +func resourceTencentCloudVpcLocalGatewayUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_local_gateway.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewModifyLocalGatewayRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + cdcId := idSplit[0] + localGatewayId := idSplit[1] + + request.CdcId = &cdcId + request.LocalGatewayId = &localGatewayId + + if v, ok := d.GetOk("local_gateway_name"); ok { + request.LocalGatewayName = helper.String(v.(string)) + } + + if d.HasChange("vpc_id") { + if v, ok := d.GetOk("vpc_id"); ok { + request.VpcId = helper.String(v.(string)) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyLocalGateway(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc localGateway failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudVpcLocalGatewayRead(d, meta) +} + +func resourceTencentCloudVpcLocalGatewayDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_local_gateway.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + cdcId := idSplit[0] + localGatewayId := idSplit[1] + + if err := service.DeleteVpcLocalGatewayById(ctx, cdcId, localGatewayId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_local_gateway_test.go b/tencentcloud/services/vpc/resource_tc_vpc_local_gateway_test.go similarity index 82% rename from tencentcloud/resource_tc_vpc_local_gateway_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_local_gateway_test.go index 84bd3561af..0d52817d12 100644 --- a/tencentcloud/resource_tc_vpc_local_gateway_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_local_gateway_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcLocalGatewayResource_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: testAccVpcLocalGateway, diff --git a/tencentcloud/resource_tc_vpc_net_detect.go b/tencentcloud/services/vpc/resource_tc_vpc_net_detect.go similarity index 82% rename from tencentcloud/resource_tc_vpc_net_detect.go rename to tencentcloud/services/vpc/resource_tc_vpc_net_detect.go index 4cbbaab5fd..13818f63d1 100644 --- a/tencentcloud/resource_tc_vpc_net_detect.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_net_detect.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 resourceTencentCloudVpcNetDetect() *schema.Resource { +func ResourceTencentCloudVpcNetDetect() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcNetDetectCreate, Read: resourceTencentCloudVpcNetDetectRead, @@ -71,10 +74,10 @@ func resourceTencentCloudVpcNetDetect() *schema.Resource { } func resourceTencentCloudVpcNetDetectCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_net_detect.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_net_detect.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewCreateNetDetectRequest() @@ -113,10 +116,10 @@ func resourceTencentCloudVpcNetDetectCreate(d *schema.ResourceData, meta interfa request.NetDetectDescription = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateNetDetect(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateNetDetect(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudVpcNetDetectCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudVpcNetDetectRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_net_detect.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_net_detect.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()} netDetectId := d.Id() @@ -189,10 +192,10 @@ func resourceTencentCloudVpcNetDetectRead(d *schema.ResourceData, meta interface } func resourceTencentCloudVpcNetDetectUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_net_detect.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_net_detect.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewModifyNetDetectRequest() @@ -239,10 +242,10 @@ func resourceTencentCloudVpcNetDetectUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyNetDetect(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyNetDetect(request) if e != nil { - return retryError(e) + return tccommon.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,13 +260,13 @@ func resourceTencentCloudVpcNetDetectUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudVpcNetDetectDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_net_detect.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_net_detect.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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} netDetectId := d.Id() if err := service.DeleteVpcNetDetectById(ctx, netDetectId); err != nil { diff --git a/tencentcloud/resource_tc_vpc_net_detect_test.go b/tencentcloud/services/vpc/resource_tc_vpc_net_detect_test.go similarity index 89% rename from tencentcloud/resource_tc_vpc_net_detect_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_net_detect_test.go index 8008c12cfa..a48cabc3e1 100644 --- a/tencentcloud/resource_tc_vpc_net_detect_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_net_detect_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcNetDetectResource_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: testAccVpcNetDetect, diff --git a/tencentcloud/resource_tc_vpc_net_detect_testing_test.go b/tencentcloud/services/vpc/resource_tc_vpc_net_detect_testing_test.go similarity index 89% rename from tencentcloud/resource_tc_vpc_net_detect_testing_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_net_detect_testing_test.go index bb5f9ef601..1fb0f47eb6 100644 --- a/tencentcloud/resource_tc_vpc_net_detect_testing_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_net_detect_testing_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package vpc_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingVpcNetDetectResource_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: testAccTestingVpcNetDetect, diff --git a/tencentcloud/resource_tc_vpc_network_acl_quintuple.go b/tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple.go similarity index 83% rename from tencentcloud/resource_tc_vpc_network_acl_quintuple.go rename to tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple.go index d7b093fd17..945b4e3751 100644 --- a/tencentcloud/resource_tc_vpc_network_acl_quintuple.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple.go @@ -1,68 +1,69 @@ /* Provides a resource to create a vpc network_acl_quintuple -Example Usage +# Example Usage ```hcl data "tencentcloud_availability_zones" "zones" {} -resource "tencentcloud_vpc" "vpc" { - name = "vpc-example" - cidr_block = "10.0.0.0/16" -} + resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" + } -resource "tencentcloud_subnet" "subnet" { - vpc_id = tencentcloud_vpc.vpc.id - name = "subnet-example" - cidr_block = "10.0.0.0/16" - availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name -} + resource "tencentcloud_subnet" "subnet" { + vpc_id = tencentcloud_vpc.vpc.id + name = "subnet-example" + cidr_block = "10.0.0.0/16" + availability_zone = data.tencentcloud_availability_zones.zones.zones.0.name + } -resource "tencentcloud_vpc_acl" "example" { - vpc_id = tencentcloud_vpc.vpc.id - name = "tf-example" - ingress = [ - "ACCEPT#192.168.1.0/24#800#TCP", - "ACCEPT#192.168.1.0/24#800-900#TCP", - ] - egress = [ - "ACCEPT#192.168.1.0/24#800#TCP", - "ACCEPT#192.168.1.0/24#800-900#TCP", - ] -} + resource "tencentcloud_vpc_acl" "example" { + vpc_id = tencentcloud_vpc.vpc.id + name = "tf-example" + ingress = [ + "ACCEPT#192.168.1.0/24#800#TCP", + "ACCEPT#192.168.1.0/24#800-900#TCP", + ] + egress = [ + "ACCEPT#192.168.1.0/24#800#TCP", + "ACCEPT#192.168.1.0/24#800-900#TCP", + ] + } + + resource "tencentcloud_vpc_network_acl_quintuple" "network_acl_quintuple" { + network_acl_id = tencentcloud_vpc_acl.example.id + network_acl_quintuple_set { + ingress { + protocol = "TCP" + description = "ingress desc." + source_port = "80" + source_cidr = "192.168.0.0/24" + destination_port = "8080" + destination_cidr = "192.168.0.0/24" + action = "DROP" + network_acl_quintuple_entry_id = "acli45-q1phngkz" + priority = 1 + network_acl_direction = "INGRESS" + } + egress { + protocol = "TCP" + description = "egress desc." + source_port = "80" + source_cidr = "192.168.0.0/24" + destination_port = "8080" + destination_cidr = "192.168.0.0/24" + action = "DROP" + network_acl_quintuple_entry_id = "acli45-q1phngkz" + priority = 1 + network_acl_direction = "EGRESS" + } + } + } -resource "tencentcloud_vpc_network_acl_quintuple" "network_acl_quintuple" { - network_acl_id = tencentcloud_vpc_acl.example.id - network_acl_quintuple_set { - ingress { - protocol = "TCP" - description = "ingress desc." - source_port = "80" - source_cidr = "192.168.0.0/24" - destination_port = "8080" - destination_cidr = "192.168.0.0/24" - action = "DROP" - network_acl_quintuple_entry_id = "acli45-q1phngkz" - priority = 1 - network_acl_direction = "INGRESS" - } - egress { - protocol = "TCP" - description = "egress desc." - source_port = "80" - source_cidr = "192.168.0.0/24" - destination_port = "8080" - destination_cidr = "192.168.0.0/24" - action = "DROP" - network_acl_quintuple_entry_id = "acli45-q1phngkz" - priority = 1 - network_acl_direction = "EGRESS" - } - } -} ``` -Import +# Import vpc network_acl_quintuple can be imported using the id, e.g. @@ -70,19 +71,22 @@ vpc network_acl_quintuple can be imported using the id, e.g. terraform import tencentcloud_vpc_network_acl_quintuple.network_acl_quintuple network_acl_quintuple_id ``` */ -package tencentcloud +package vpc 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 resourceTencentCloudVpcNetworkAclQuintuple() *schema.Resource { +func ResourceTencentCloudVpcNetworkAclQuintuple() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcNetworkAclQuintupleCreate, Read: resourceTencentCloudVpcNetworkAclQuintupleRead, @@ -241,10 +245,10 @@ func resourceTencentCloudVpcNetworkAclQuintuple() *schema.Resource { } func resourceTencentCloudVpcNetworkAclQuintupleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_network_acl_quintuple.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_network_acl_quintuple.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewCreateNetworkAclQuintupleEntriesRequest() @@ -340,10 +344,10 @@ func resourceTencentCloudVpcNetworkAclQuintupleCreate(d *schema.ResourceData, me request.NetworkAclQuintupleSet = &networkAclQuintupleEntries } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateNetworkAclQuintupleEntries(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateNetworkAclQuintupleEntries(request) if e != nil { - return retryError(e) + return tccommon.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,14 +364,14 @@ func resourceTencentCloudVpcNetworkAclQuintupleCreate(d *schema.ResourceData, me } func resourceTencentCloudVpcNetworkAclQuintupleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_network_acl_quintuple.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_network_acl_quintuple.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()} networkAclId := d.Id() @@ -498,10 +502,10 @@ func resourceTencentCloudVpcNetworkAclQuintupleRead(d *schema.ResourceData, meta } func resourceTencentCloudVpcNetworkAclQuintupleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_network_acl_quintuple.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_network_acl_quintuple.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewModifyNetworkAclQuintupleEntriesRequest() @@ -596,10 +600,10 @@ func resourceTencentCloudVpcNetworkAclQuintupleUpdate(d *schema.ResourceData, me } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyNetworkAclQuintupleEntries(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyNetworkAclQuintupleEntries(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -614,13 +618,13 @@ func resourceTencentCloudVpcNetworkAclQuintupleUpdate(d *schema.ResourceData, me } func resourceTencentCloudVpcNetworkAclQuintupleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_network_acl_quintuple.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_network_acl_quintuple.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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} networkAclId := d.Id() if err := service.DeleteVpcNetworkAclQuintupleById(ctx, networkAclId); err != nil { diff --git a/tencentcloud/resource_tc_vpc_network_acl_quintuple_test.go b/tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple_test.go similarity index 88% rename from tencentcloud/resource_tc_vpc_network_acl_quintuple_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple_test.go index 6244a2a628..959de5cc5f 100644 --- a/tencentcloud/resource_tc_vpc_network_acl_quintuple_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_network_acl_quintuple_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcNetworkAclQuintupleResource_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: testAccVpcNetworkAclQuintuple, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_notify_routes.go b/tencentcloud/services/vpc/resource_tc_vpc_notify_routes.go new file mode 100644 index 0000000000..e64f5e9de6 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_notify_routes.go @@ -0,0 +1,191 @@ +/* +Provides a resource to create a vpc notify_routes + +# Example Usage + +```hcl + + resource "tencentcloud_vpc" "vpc" { + name = "vpc-example" + cidr_block = "10.0.0.0/16" + } + + resource "tencentcloud_route_table" "route_table" { + vpc_id = tencentcloud_vpc.vpc.id + name = "tf-example" + } + + resource "tencentcloud_vpc_notify_routes" "example" { + route_table_id = tencentcloud_route_table.route_table.id + route_item_ids = ["rti-i8bap903"] + } + +``` + +# Import + +vpc notify_routes can be imported using the id, e.g. + +``` +terraform import tencentcloud_vpc_notify_routes.notify_routes notify_routes_id +``` +*/ +package vpc + +import ( + "context" + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcNotifyRoutes() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcNotifyRoutesCreate, + Read: resourceTencentCloudVpcNotifyRoutesRead, + Delete: resourceTencentCloudVpcNotifyRoutesDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "route_table_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "The unique ID of the routing table.", + }, + + "route_item_ids": { + Required: true, + ForceNew: true, + Type: schema.TypeSet, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Description: "The unique ID of the routing policy.", + }, + + "published_to_vbc": { + Computed: true, + Type: schema.TypeBool, + Description: "If published to vbc.", + }, + }, + } +} + +func resourceTencentCloudVpcNotifyRoutesCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_notify_routes.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewNotifyRoutesRequest() + routeTableId string + routeItemId string + ) + if v, ok := d.GetOk("route_table_id"); ok { + routeTableId = v.(string) + request.RouteTableId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("route_item_ids"); ok { + routeItemIdsSet := v.(*schema.Set).List() + for i := range routeItemIdsSet { + routeItemId = routeItemIdsSet[i].(string) + request.RouteItemIds = append(request.RouteItemIds, &routeItemId) + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().NotifyRoutes(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 vpc notifyRoutes failed, reason:%+v", logId, err) + return err + } + + d.SetId(routeTableId + tccommon.FILED_SP + routeItemId) + + return resourceTencentCloudVpcNotifyRoutesRead(d, meta) +} + +func resourceTencentCloudVpcNotifyRoutesRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_notify_routes.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + routeTableId := idSplit[0] + routeItemId := idSplit[1] + + notifyRoutes, err := service.DescribeVpcNotifyRoutesById(ctx, routeTableId, routeItemId) + if err != nil { + return err + } + + if notifyRoutes == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcNotifyRoutes` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if notifyRoutes.RouteTableId != nil { + _ = d.Set("route_table_id", notifyRoutes.RouteTableId) + } + + if notifyRoutes.RouteItemId != nil { + _ = d.Set("route_item_ids", []*string{notifyRoutes.RouteItemId}) + } + + if notifyRoutes.PublishedToVbc != nil { + _ = d.Set("published_to_vbc", notifyRoutes.PublishedToVbc) + } + + return nil +} + +func resourceTencentCloudVpcNotifyRoutesDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_notify_routes.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{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()) + } + routeTableId := idSplit[0] + routeItemId := idSplit[1] + + if err := service.DeleteVpcNotifyRoutesById(ctx, routeTableId, routeItemId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_notify_routes_test.go b/tencentcloud/services/vpc/resource_tc_vpc_notify_routes_test.go similarity index 80% rename from tencentcloud/resource_tc_vpc_notify_routes_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_notify_routes_test.go index d117236a81..7b5e529908 100644 --- a/tencentcloud/resource_tc_vpc_notify_routes_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_notify_routes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcNotifyRoutesResource_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: testAccVpcNotifyRoutes, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_accept_operation.go b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_accept_operation.go new file mode 100644 index 0000000000..659c1b77f4 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_accept_operation.go @@ -0,0 +1,76 @@ +package vpc + +import ( + "log" + + "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" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcPeerConnectAcceptOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcPeerConnectAcceptOperationCreate, + Read: resourceTencentCloudVpcPeerConnectAcceptOperationRead, + Delete: resourceTencentCloudVpcPeerConnectAcceptOperationDelete, + Schema: map[string]*schema.Schema{ + "peering_connection_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Peer connection unique ID.", + }, + }, + } +} + +func resourceTencentCloudVpcPeerConnectAcceptOperationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewAcceptVpcPeeringConnectionRequest() + peeringConnectionId string + ) + if v, ok := d.GetOk("peering_connection_id"); ok { + peeringConnectionId = v.(string) + request.PeeringConnectionId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AcceptVpcPeeringConnection(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 vpc PeerConnectAcceptOperation failed, reason:%+v", logId, err) + return err + } + + d.SetId(peeringConnectionId) + + return resourceTencentCloudVpcPeerConnectAcceptOperationRead(d, meta) +} + +func resourceTencentCloudVpcPeerConnectAcceptOperationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudVpcPeerConnectAcceptOperationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_accept_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_peer_connect_manager.go b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager.go similarity index 80% rename from tencentcloud/resource_tc_vpc_peer_connect_manager.go rename to tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager.go index cc2bc73fb8..e91e41901e 100644 --- a/tencentcloud/resource_tc_vpc_peer_connect_manager.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager.go @@ -1,17 +1,20 @@ -package tencentcloud +package vpc import ( "context" "fmt" + "log" + "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/common" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "log" ) -func resourceTencentCloudVpcPeerConnectManager() *schema.Resource { +func ResourceTencentCloudVpcPeerConnectManager() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcPeerConnectManagerCreate, Read: resourceTencentCloudVpcPeerConnectManagerRead, @@ -82,10 +85,10 @@ func resourceTencentCloudVpcPeerConnectManager() *schema.Resource { } func resourceTencentCloudVpcPeerConnectManagerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_manager.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_manager.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewCreateVpcPeeringConnectionRequest() @@ -128,10 +131,10 @@ func resourceTencentCloudVpcPeerConnectManagerCreate(d *schema.ResourceData, met request.QosLevel = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateVpcPeeringConnection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateVpcPeeringConnection(request) if e != nil { - return retryError(e) + return tccommon.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,14 +153,14 @@ func resourceTencentCloudVpcPeerConnectManagerCreate(d *schema.ResourceData, met } func resourceTencentCloudVpcPeerConnectManagerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_manager.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_manager.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()} peeringConnectionId := d.Id() @@ -208,10 +211,10 @@ func resourceTencentCloudVpcPeerConnectManagerRead(d *schema.ResourceData, meta } func resourceTencentCloudVpcPeerConnectManagerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_manager.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_manager.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewModifyVpcPeeringConnectionRequest() @@ -245,10 +248,10 @@ func resourceTencentCloudVpcPeerConnectManagerUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyVpcPeeringConnection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyVpcPeeringConnection(request) if e != nil { - return retryError(e) + return tccommon.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 +266,13 @@ func resourceTencentCloudVpcPeerConnectManagerUpdate(d *schema.ResourceData, met } func resourceTencentCloudVpcPeerConnectManagerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_peer_connect_manager.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_manager.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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} peeringConnectionId := d.Id() if err := service.DeleteVpcPeerConnectManagerById(ctx, peeringConnectionId); err != nil { diff --git a/tencentcloud/resource_tc_vpc_peer_connect_manager_test.go b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager_test.go similarity index 94% rename from tencentcloud/resource_tc_vpc_peer_connect_manager_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager_test.go index da7a115619..55a1184c82 100644 --- a/tencentcloud/resource_tc_vpc_peer_connect_manager_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_manager_test.go @@ -1,17 +1,20 @@ -package tencentcloud +package vpc_test import ( - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudVpcPeerConnectManagerResource_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: testAccVpcPeerConnectManager, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_reject_operation.go b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_reject_operation.go new file mode 100644 index 0000000000..0b9876fc65 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_peer_connect_reject_operation.go @@ -0,0 +1,76 @@ +package vpc + +import ( + "log" + + "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" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcPeerConnectRejectOperation() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcPeerConnectRejectOperationCreate, + Read: resourceTencentCloudVpcPeerConnectRejectOperationRead, + Delete: resourceTencentCloudVpcPeerConnectRejectOperationDelete, + Schema: map[string]*schema.Schema{ + "peering_connection_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Peer connection unique ID.", + }, + }, + } +} + +func resourceTencentCloudVpcPeerConnectRejectOperationCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewRejectVpcPeeringConnectionRequest() + peeringConnectionId string + ) + if v, ok := d.GetOk("peering_connection_id"); ok { + peeringConnectionId = v.(string) + request.PeeringConnectionId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().RejectVpcPeeringConnection(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 vpc PeerConnectRejectOperation failed, reason:%+v", logId, err) + return err + } + + d.SetId(peeringConnectionId) + + return resourceTencentCloudVpcPeerConnectRejectOperationRead(d, meta) +} + +func resourceTencentCloudVpcPeerConnectRejectOperationRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudVpcPeerConnectRejectOperationDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_peer_connect_reject_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance.go b/tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance.go new file mode 100644 index 0000000000..fc396aee7f --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance.go @@ -0,0 +1,103 @@ +package vpc + +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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpcResumeSnapshotInstance() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcResumeSnapshotInstanceCreate, + Read: resourceTencentCloudVpcResumeSnapshotInstanceRead, + Delete: resourceTencentCloudVpcResumeSnapshotInstanceDelete, + Schema: map[string]*schema.Schema{ + "snapshot_policy_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Snapshot policy Id.", + }, + + "snapshot_file_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Snapshot file Id.", + }, + + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "InstanceId.", + }, + }, + } +} + +func resourceTencentCloudVpcResumeSnapshotInstanceCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewResumeSnapshotInstanceRequest() + snapshotPolicyId string + snapshotFileId string + instanceId string + ) + if v, ok := d.GetOk("snapshot_policy_id"); ok { + snapshotPolicyId = v.(string) + request.SnapshotPolicyId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("snapshot_file_id"); ok { + snapshotFileId = v.(string) + request.SnapshotFileId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ResumeSnapshotInstance(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 vpc resumeSnapshotInstance failed, reason:%+v", logId, err) + return err + } + + d.SetId(snapshotPolicyId + tccommon.FILED_SP + snapshotFileId + tccommon.FILED_SP + instanceId) + + return resourceTencentCloudVpcResumeSnapshotInstanceRead(d, meta) +} + +func resourceTencentCloudVpcResumeSnapshotInstanceRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudVpcResumeSnapshotInstanceDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_resume_snapshot_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_resume_snapshot_instance_test.go b/tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance_test.go similarity index 83% rename from tencentcloud/resource_tc_vpc_resume_snapshot_instance_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance_test.go index 491fb394c2..09760d313c 100644 --- a/tencentcloud/resource_tc_vpc_resume_snapshot_instance_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_resume_snapshot_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcResumeSnapshotInstanceResource_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: testAccVpcResumeSnapshotInstance, diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy.go similarity index 85% rename from tencentcloud/resource_tc_vpc_snapshot_policy.go rename to tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy.go index 41a8f0c817..cbea71e535 100644 --- a/tencentcloud/resource_tc_vpc_snapshot_policy.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy.go @@ -1,17 +1,20 @@ -package tencentcloud +package vpc 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" ) -func resourceTencentCloudVpcSnapshotPolicy() *schema.Resource { +func ResourceTencentCloudVpcSnapshotPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcSnapshotPolicyCreate, Read: resourceTencentCloudVpcSnapshotPolicyRead, @@ -90,10 +93,10 @@ func resourceTencentCloudVpcSnapshotPolicy() *schema.Resource { } func resourceTencentCloudVpcSnapshotPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewCreateSnapshotPoliciesRequest() @@ -144,10 +147,10 @@ func resourceTencentCloudVpcSnapshotPolicyCreate(d *schema.ResourceData, meta in } request.SnapshotPolicies = append(request.SnapshotPolicies, &snapshotPolicy) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateSnapshotPolicies(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateSnapshotPolicies(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -172,14 +175,14 @@ func resourceTencentCloudVpcSnapshotPolicyCreate(d *schema.ResourceData, meta in } func resourceTencentCloudVpcSnapshotPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotPolicyId := d.Id() @@ -255,10 +258,10 @@ func resourceTencentCloudVpcSnapshotPolicyRead(d *schema.ResourceData, meta inte } func resourceTencentCloudVpcSnapshotPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policies.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policies.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := vpc.NewModifySnapshotPoliciesRequest() @@ -314,10 +317,10 @@ func resourceTencentCloudVpcSnapshotPolicyUpdate(d *schema.ResourceData, meta in } request.SnapshotPoliciesInfo = append(request.SnapshotPoliciesInfo, &snapshotPolicy) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifySnapshotPolicies(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifySnapshotPolicies(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -333,13 +336,13 @@ func resourceTencentCloudVpcSnapshotPolicyUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudVpcSnapshotPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotPolicyId := d.Id() if err := service.DeleteVpcSnapshotPoliciesById(ctx, snapshotPolicyId); err != nil { diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy_attachment.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment.go similarity index 80% rename from tencentcloud/resource_tc_vpc_snapshot_policy_attachment.go rename to tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment.go index 74326463db..92d913eb31 100644 --- a/tencentcloud/resource_tc_vpc_snapshot_policy_attachment.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment.go @@ -1,16 +1,19 @@ -package tencentcloud +package vpc 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 resourceTencentCloudVpcSnapshotPolicyAttachment() *schema.Resource { +func ResourceTencentCloudVpcSnapshotPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpcSnapshotPolicyAttachmentCreate, Read: resourceTencentCloudVpcSnapshotPolicyAttachmentRead, @@ -71,10 +74,10 @@ func resourceTencentCloudVpcSnapshotPolicyAttachment() *schema.Resource { } func resourceTencentCloudVpcSnapshotPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewAttachSnapshotInstancesRequest() @@ -108,10 +111,10 @@ func resourceTencentCloudVpcSnapshotPolicyAttachmentCreate(d *schema.ResourceDat } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AttachSnapshotInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AttachSnapshotInstances(request) if e != nil { - return retryError(e) + return tccommon.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,14 +131,14 @@ func resourceTencentCloudVpcSnapshotPolicyAttachmentCreate(d *schema.ResourceDat } func resourceTencentCloudVpcSnapshotPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotPolicyId := d.Id() @@ -188,13 +191,13 @@ func resourceTencentCloudVpcSnapshotPolicyAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudVpcSnapshotPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_snapshot_policy_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_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 := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotPolicyId := d.Id() if err := service.DeleteVpcSnapshotPolicyAttachmentById(ctx, snapshotPolicyId); err != nil { diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy_attachment_test.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment_test.go similarity index 91% rename from tencentcloud/resource_tc_vpc_snapshot_policy_attachment_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment_test.go index b70d4fc142..284bffaf0c 100644 --- a/tencentcloud/resource_tc_vpc_snapshot_policy_attachment_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcSnapshotPolicyAttachmentResource_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: testAccVpcSnapshotPolicyAttachment, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config.go new file mode 100644 index 0000000000..2ff261c949 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config.go @@ -0,0 +1,142 @@ +package vpc + +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" +) + +func ResourceTencentCloudVpcSnapshotPolicyConfig() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcSnapshotPolicyConfigCreate, + Read: resourceTencentCloudVpcSnapshotPolicyConfigRead, + Update: resourceTencentCloudVpcSnapshotPolicyConfigUpdate, + Delete: resourceTencentCloudVpcSnapshotPolicyConfigDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "snapshot_policy_id": { + Required: true, + Type: schema.TypeString, + Description: "Snapshot policy Id.", + }, + + "enable": { + Required: true, + Type: schema.TypeBool, + Description: "If enable snapshot policy.", + }, + }, + } +} + +func resourceTencentCloudVpcSnapshotPolicyConfigCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy_config.create")() + defer tccommon.InconsistentCheck(d, meta)() + + snapshotPolicyId := d.Get("snapshot_policy_id").(string) + + d.SetId(snapshotPolicyId) + + return resourceTencentCloudVpcSnapshotPolicyConfigUpdate(d, meta) +} + +func resourceTencentCloudVpcSnapshotPolicyConfigRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy_config.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + snapshotPolicyId := d.Id() + + snapshotPolicies, err := service.DescribeVpcSnapshotPoliciesById(ctx, snapshotPolicyId) + if err != nil { + return err + } + + if len(snapshotPolicies) < 1 { + d.SetId("") + log.Printf("[WARN]%s resource `VpcSnapshotPolicyConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + snapshotPolicy := snapshotPolicies[0] + + _ = d.Set("snapshot_policy_id", snapshotPolicyId) + + if snapshotPolicy.Enable != nil { + _ = d.Set("enable", snapshotPolicy.Enable) + } + + return nil +} + +func resourceTencentCloudVpcSnapshotPolicyConfigUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy_config.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + enable bool + enableRequest = vpc.NewEnableSnapshotPoliciesRequest() + disableRequest = vpc.NewDisableSnapshotPoliciesRequest() + ) + + logId := tccommon.GetLogId(tccommon.ContextNil) + + snapshotPolicyId := d.Id() + + if v, ok := d.GetOkExists("enable"); ok { + enable = v.(bool) + } + + if enable { + enableRequest.SnapshotPolicyIds = []*string{&snapshotPolicyId} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableSnapshotPolicies(enableRequest) + if e != nil { + 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()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc snapshotPolicyConfig failed, reason:%+v", logId, err) + return err + } + } else { + disableRequest.SnapshotPolicyIds = []*string{&snapshotPolicyId} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableSnapshotPolicies(disableRequest) + if e != nil { + 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()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpc snapshotPolicyConfig failed, reason:%+v", logId, err) + return err + } + } + + return resourceTencentCloudVpcSnapshotPolicyConfigRead(d, meta) +} + +func resourceTencentCloudVpcSnapshotPolicyConfigDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_snapshot_policy_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy_config_test.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config_test.go similarity index 82% rename from tencentcloud/resource_tc_vpc_snapshot_policy_config_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config_test.go index 1184e9f411..a4d8d8b679 100644 --- a/tencentcloud/resource_tc_vpc_snapshot_policy_config_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcSnapshotPolicyConfigResource_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: testAccVpcSnapshotPolicyConfig, diff --git a/tencentcloud/resource_tc_vpc_snapshot_policy_test.go b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_test.go similarity index 91% rename from tencentcloud/resource_tc_vpc_snapshot_policy_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_test.go index b977025f27..1c8d86ebb5 100644 --- a/tencentcloud/resource_tc_vpc_snapshot_policy_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_snapshot_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudVpcSnapshotPolicyResource_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: testAccVpcSnapshotPolicy, diff --git a/tencentcloud/services/vpc/resource_tc_vpc_test.go b/tencentcloud/services/vpc/resource_tc_vpc_test.go new file mode 100644 index 0000000000..44289321c9 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_test.go @@ -0,0 +1,253 @@ +package vpc_test + +import ( + "context" + "fmt" + "log" + "strings" + "testing" + "time" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +func init() { + resource.AddTestSweepers("tencentcloud_vpc", &resource.Sweeper{ + Name: "tencentcloud_vpc", + F: testSweepVpcInstance, + }) +} + +func testSweepVpcInstance(region string) error { + 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.(tccommon.ProviderMeta) + + vpcService := svcvpc.NewVpcService(client.GetAPIV3Conn()) + + instances, err := vpcService.DescribeVpcs(ctx, "", "", nil, nil, "", "") + if err != nil { + return fmt.Errorf("get instance list error: %s", err.Error()) + } + + for _, v := range instances { + instanceId := v.VpcId() + instanceName := v.Name() + + now := time.Now() + + createTime := tccommon.StringToTime(v.CreateTime()) + interval := now.Sub(createTime).Minutes() + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { + continue + } + // less than 30 minute, not delete + if tccommon.NeedProtect == 1 && int64(interval) < 30 { + continue + } + + if err = vpcService.DeleteVpc(ctx, instanceId); err != nil { + log.Printf("[ERROR] sweep instance %s error: %s", instanceId, err.Error()) + } + } + + return nil +} + +func TestAccTencentCloudVpcV3Basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckVpcDestroy, + Steps: []resource.TestStep{ + { + Config: testAccVpcConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidr), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsName), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "default_route_table_id"), + ), + }, + { + ResourceName: "tencentcloud_vpc.foo", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccTencentCloudVpcV3Update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckVpcDestroy, + Steps: []resource.TestStep{ + { + Config: testAccVpcConfig, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidr), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsName), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), + + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), + ), + }, + { + Config: testAccVpcConfigUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidrLess), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsNameUpdate), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "false"), + + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), + + resource.TestCheckTypeSetElemAttr("tencentcloud_vpc.foo", "dns_servers.*", "119.29.29.29"), + resource.TestCheckTypeSetElemAttr("tencentcloud_vpc.foo", "dns_servers.*", "182.254.116.116"), + ), + }, + }, + }) +} + +func TestAccTencentCloudVpcV3WithTags(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + CheckDestroy: testAccCheckVpcDestroy, + Steps: []resource.TestStep{ + { + Config: testAccVpcConfigWithTags, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidr), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsName), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), + + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "create_time"), + resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "dns_servers.#"), + + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "tags.test", "test"), + resource.TestCheckNoResourceAttr("tencentcloud_vpc.foo", "tags.abc"), + ), + }, + { + Config: testAccVpcConfigWithTagsUpdate, + Check: resource.ComposeTestCheckFunc( + testAccCheckVpcExists("tencentcloud_vpc.foo"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidr), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsName), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "tags.abc", "abc"), + resource.TestCheckNoResourceAttr("tencentcloud_vpc.foo", "tags.test"), + ), + }, + }, + }) +} + +func testAccCheckVpcExists(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + 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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") + if err != nil { + return err + } + if has > 0 { + return nil + } + + return fmt.Errorf("vpc %s not exists", rs.Primary.ID) + } +} + +func testAccCheckVpcDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_vpc" { + continue + } + time.Sleep(5 * time.Second) + _, has, err := service.DescribeVpc(ctx, rs.Primary.ID, "", "") + if err != nil { + return err + } + if has == 0 { + return nil + } + return fmt.Errorf("vpc %s still exists", rs.Primary.ID) + } + + return nil +} + +const testAccVpcConfig = tcacctest.DefaultVpcVariable + ` +resource "tencentcloud_vpc" "foo" { + name = var.instance_name + cidr_block = var.vpc_cidr +} +` + +const testAccVpcConfigUpdate = tcacctest.DefaultVpcVariable + ` +resource "tencentcloud_vpc" "foo" { + name = var.instance_name_update + cidr_block = var.vpc_cidr_less + dns_servers = ["119.29.29.29", "182.254.116.116"] + is_multicast = false +} +` + +const testAccVpcConfigWithTags = tcacctest.DefaultVpcVariable + ` +resource "tencentcloud_vpc" "foo" { + name = var.instance_name + cidr_block = var.vpc_cidr + + tags = { + "test" = "test" + } +} +` + +const testAccVpcConfigWithTagsUpdate = tcacctest.DefaultVpcVariable + ` +resource "tencentcloud_vpc" "foo" { + name = var.instance_name + cidr_block = var.vpc_cidr + + tags = { + "abc" = "abc" + } +} +` diff --git a/tencentcloud/resource_tc_vpc_testing_test.go b/tencentcloud/services/vpc/resource_tc_vpc_testing_test.go similarity index 77% rename from tencentcloud/resource_tc_vpc_testing_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_testing_test.go index 603bf95731..7ab0e22b11 100644 --- a/tencentcloud/resource_tc_vpc_testing_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_testing_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package vpc_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingVpcV3Update(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: testAccTestingVpcConfig, Check: resource.ComposeTestCheckFunc( testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidr), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidr), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "true"), resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), @@ -29,8 +31,8 @@ func TestAccTencentCloudTestingVpcV3Update(t *testing.T) { Config: testAccTestingVpcConfigUpdate, Check: resource.ComposeTestCheckFunc( testAccCheckVpcExists("tencentcloud_vpc.foo"), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", defaultVpcCidrLess), - resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", defaultInsNameUpdate), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "cidr_block", tcacctest.DefaultVpcCidrLess), + resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "name", tcacctest.DefaultInsNameUpdate), resource.TestCheckResourceAttr("tencentcloud_vpc.foo", "is_multicast", "false"), resource.TestCheckResourceAttrSet("tencentcloud_vpc.foo", "is_default"), @@ -42,14 +44,14 @@ func TestAccTencentCloudTestingVpcV3Update(t *testing.T) { }) } -const testAccTestingVpcConfig = defaultVpcVariable + ` +const testAccTestingVpcConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name cidr_block = var.vpc_cidr } ` -const testAccTestingVpcConfigUpdate = defaultVpcVariable + ` +const testAccTestingVpcConfigUpdate = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_vpc" "foo" { name = var.instance_name_update cidr_block = var.vpc_cidr_less diff --git a/tencentcloud/services/vpc/resource_tc_vpc_traffic_package.go b/tencentcloud/services/vpc/resource_tc_vpc_traffic_package.go new file mode 100644 index 0000000000..653b3a1518 --- /dev/null +++ b/tencentcloud/services/vpc/resource_tc_vpc_traffic_package.go @@ -0,0 +1,154 @@ +package vpc + +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" +) + +func ResourceTencentCloudVpcTrafficPackage() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpcTrafficPackageCreate, + Read: resourceTencentCloudVpcTrafficPackageRead, + Delete: resourceTencentCloudVpcTrafficPackageDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "traffic_amount": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + Description: "Traffic Package Amount, eg: 10,20,50,512,1024,5120,51200,60,300,600,3072,6144,30720,61440,307200.", + }, + + "remaining_amount": { + Computed: true, + Type: schema.TypeFloat, + Description: "Remaining amount.", + }, + + "used_amount": { + Computed: true, + Type: schema.TypeFloat, + Description: "Used amount.", + }, + + "created_time": { + Computed: true, + Type: schema.TypeString, + Description: "Created time.", + }, + }, + } +} + +func resourceTencentCloudVpcTrafficPackageCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_traffic_package.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewCreateTrafficPackagesRequest() + response = vpc.NewCreateTrafficPackagesResponse() + trafficPackageId string + ) + if v, ok := d.GetOkExists("traffic_amount"); ok { + request.TrafficAmount = helper.IntUint64(v.(int)) + } + request.TrafficPackageCount = helper.IntUint64(1) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateTrafficPackages(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 vpc TrafficPackage failed, reason:%+v", logId, err) + return err + } + + trafficPackageSet := response.Response.TrafficPackageSet + + if len(trafficPackageSet) < 1 { + return fmt.Errorf("create traffic package failed.") + } + trafficPackageId = *trafficPackageSet[0] + + d.SetId(trafficPackageId) + + return resourceTencentCloudVpcTrafficPackageRead(d, meta) +} + +func resourceTencentCloudVpcTrafficPackageRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_traffic_package.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + trafficPackageId := d.Id() + + TrafficPackage, err := service.DescribeVpcTrafficPackageById(ctx, trafficPackageId) + if err != nil { + return err + } + + if TrafficPackage == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcTrafficPackage` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if TrafficPackage.TotalAmount != nil { + _ = d.Set("traffic_amount", TrafficPackage.TotalAmount) + } + + if TrafficPackage.RemainingAmount != nil { + _ = d.Set("remaining_amount", TrafficPackage.RemainingAmount) + } + + if TrafficPackage.UsedAmount != nil { + _ = d.Set("used_amount", TrafficPackage.UsedAmount) + } + + if TrafficPackage.CreatedTime != nil { + _ = d.Set("created_time", TrafficPackage.CreatedTime) + } + + return nil +} + +func resourceTencentCloudVpcTrafficPackageDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpc_traffic_package.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + trafficPackageId := d.Id() + + if err := service.DeleteVpcTrafficPackageById(ctx, trafficPackageId); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_vpc_traffic_package_test.go b/tencentcloud/services/vpc/resource_tc_vpc_traffic_package_test.go similarity index 80% rename from tencentcloud/resource_tc_vpc_traffic_package_test.go rename to tencentcloud/services/vpc/resource_tc_vpc_traffic_package_test.go index baac0ac50c..d21b37b994 100644 --- a/tencentcloud/resource_tc_vpc_traffic_package_test.go +++ b/tencentcloud/services/vpc/resource_tc_vpc_traffic_package_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpc_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 TestAccTencentCloudNeedFixVpcTrafficPackageResource_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: testAccVpcTrafficPackage, diff --git a/tencentcloud/services/vpc/service_tencentcloud_vpc.go b/tencentcloud/services/vpc/service_tencentcloud_vpc.go new file mode 100644 index 0000000000..7fe0269152 --- /dev/null +++ b/tencentcloud/services/vpc/service_tencentcloud_vpc.go @@ -0,0 +1,7927 @@ +package vpc + +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 +} + +func (info VpcBasicInfo) VpcId() string { + return info.vpcId +} + +func (info VpcBasicInfo) Name() string { + return info.name +} + +func (info VpcBasicInfo) CreateTime() string { + return info.createTime +} + +// 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 +} + +func (info VpcSubnetBasicInfo) SubnetId() string { + return info.subnetId +} + +func (info VpcSubnetBasicInfo) Name() string { + return info.name +} + +func (info VpcSubnetBasicInfo) CreateTime() string { + return info.createTime +} + +// route entry basic information +type VpcRouteEntryBasicInfo struct { + routeEntryId int64 + destinationCidr string + nextType string + nextBub string + description string + entryType string + enabled bool +} + +func (info VpcRouteEntryBasicInfo) RouteEntryId() int64 { + return info.routeEntryId +} + +func (info VpcRouteEntryBasicInfo) NextType() string { + return info.nextType +} + +func (info VpcRouteEntryBasicInfo) DestinationCidr() string { + return info.destinationCidr +} + +func (info VpcRouteEntryBasicInfo) NextBub() string { + return info.nextBub +} + +func (info VpcRouteEntryBasicInfo) Description() string { + return info.description +} + +// route table basic information +type VpcRouteTableBasicInfo struct { + routeTableId string + name string + vpcId string + isDefault bool + subnetIds []string + entryInfos []VpcRouteEntryBasicInfo + createTime string +} + +func (info VpcRouteTableBasicInfo) EntryInfos() []VpcRouteEntryBasicInfo { + return info.entryInfos +} + +func (info VpcRouteTableBasicInfo) RouteTableId() string { + return info.routeTableId +} + +func (info VpcRouteTableBasicInfo) Name() string { + return info.name +} + +func (info VpcRouteTableBasicInfo) CreateTime() string { + return info.createTime +} + +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) 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) 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 +} +func (me *VpcService) DescribeVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (PeerConnectManager *vpc.PeerConnection, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcPeeringConnectionsRequest() + request.PeeringConnectionIds = []*string{&peeringConnectionId} + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s 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().DescribeVpcPeeringConnections(request) + if err != nil { + errRet = err + return + } + 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.PeerConnectionSet) < 1 { + return + } + + PeerConnectManager = response.Response.PeerConnectionSet[0] + return +} +func (me *VpcService) DeleteVpcPeerConnectManagerById(ctx context.Context, peeringConnectionId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcPeeringConnectionRequest() + request.PeeringConnectionId = &peeringConnectionId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s 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().DeleteVpcPeeringConnection(request) + if err != nil { + 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) DeleteVpcPeerConnectAccecptOrRejectById(ctx context.Context, peeringConnectionId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewRejectVpcPeeringConnectionRequest() + request.PeeringConnectionId = &peeringConnectionId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s 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().RejectVpcPeeringConnection(request) + if err != nil { + 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/data_source_tc_vpn_connections.go b/tencentcloud/services/vpn/data_source_tc_vpn_connections.go similarity index 90% rename from tencentcloud/data_source_tc_vpn_connections.go rename to tencentcloud/services/vpn/data_source_tc_vpn_connections.go index bb33f5b7e1..4a0795c203 100644 --- a/tencentcloud/data_source_tc_vpn_connections.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_connections.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "log" "reflect" @@ -8,10 +12,11 @@ import ( "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 dataSourceTencentCloudVpnConnections() *schema.Resource { +func DataSourceTencentCloudVpnConnections() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpnConnectionsRead, @@ -19,7 +24,7 @@ func dataSourceTencentCloudVpnConnections() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the VPN connection. The length of character is limited to 1-60.", }, "id": { @@ -238,13 +243,13 @@ func dataSourceTencentCloudVpnConnections() *schema.Resource { } func dataSourceTencentCloudVpnConnectionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_connections.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_connections.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region request := vpc.NewDescribeVpnConnectionsRequest() @@ -278,16 +283,16 @@ func dataSourceTencentCloudVpnConnectionsRead(d *schema.ResourceData, meta inter offset := uint64(0) request.Offset = &offset result := make([]*vpc.VpnConnection, 0) - limit := uint64(VPN_DESCRIBE_LIMIT) + limit := uint64(svcvpc.VPN_DESCRIBE_LIMIT) request.Limit = &limit for { var response *vpc.DescribeVpnConnectionsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(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) } response = result return nil @@ -297,7 +302,7 @@ func dataSourceTencentCloudVpnConnectionsRead(d *schema.ResourceData, meta inter return err } else { result = append(result, response.Response.VpnConnectionSet...) - if len(response.Response.VpnConnectionSet) < VPN_DESCRIBE_LIMIT { + if len(response.Response.VpnConnectionSet) < svcvpc.VPN_DESCRIBE_LIMIT { break } else { offset = offset + limit @@ -340,7 +345,7 @@ func dataSourceTencentCloudVpnConnectionsRead(d *schema.ResourceData, meta inter "ipsec_integrity_algorithm": *connection.IPSECOptionsSpecification.IntegrityAlgorith, "ipsec_pfs_dh_group": *connection.IPSECOptionsSpecification.PfsDhGroup, "ipsec_sa_lifetime_traffic": int(*connection.IPSECOptionsSpecification.IPSECSaLifetimeTraffic), - "security_group_policy": flattenVpnSPDList(connection.SecurityPolicyDatabaseSet), + "security_group_policy": svcvpc.FlattenVpnSPDList(connection.SecurityPolicyDatabaseSet), "net_status": *connection.NetStatus, "state": *connection.State, "create_time": *connection.CreatedTime, @@ -360,7 +365,7 @@ func dataSourceTencentCloudVpnConnectionsRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), connectionList); e != nil { + if e := tccommon.WriteToFile(output.(string), connectionList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_vpn_connections_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_connections_test.go similarity index 90% rename from tencentcloud/data_source_tc_vpn_connections_test.go rename to tencentcloud/services/vpn/data_source_tc_vpn_connections_test.go index b6ee560948..74fab58cbc 100644 --- a/tencentcloud/data_source_tc_vpn_connections_test.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_connections_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudVpnConnectionsDataSource(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: testAccTencentCloudVpnConnectionsDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_connections.connections"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_connections.connections"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_connections.connections", "connection_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_connections.connections", "connection_list.0.name", "vpn_connection_test"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_connections.connections", "connection_list.0.ike_proto_authen_algorithm", "MD5"), diff --git a/tencentcloud/data_source_tc_vpn_customer_gateway_vendors.go b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateway_vendors.go similarity index 76% rename from tencentcloud/data_source_tc_vpn_customer_gateway_vendors.go rename to tencentcloud/services/vpn/data_source_tc_vpn_customer_gateway_vendors.go index e19e7a5d50..c6c67abd39 100644 --- a/tencentcloud/data_source_tc_vpn_customer_gateway_vendors.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateway_vendors.go @@ -1,15 +1,19 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "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 dataSourceTencentCloudVpnCustomerGatewayVendors() *schema.Resource { +func DataSourceTencentCloudVpnCustomerGatewayVendors() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcVpnCustomerGatewayVendorsRead, Schema: map[string]*schema.Schema{ @@ -48,21 +52,21 @@ func dataSourceTencentCloudVpnCustomerGatewayVendors() *schema.Resource { } func dataSourceTencentCloudVpcVpnCustomerGatewayVendorsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_vpn_customer_gateway_vendors.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_vpn_customer_gateway_vendors.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 := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) var customerGatewayVendorSet []*vpc.CustomerGatewayVendor - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpnCustomerGatewayVendors(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } customerGatewayVendorSet = result return nil @@ -100,7 +104,7 @@ func dataSourceTencentCloudVpcVpnCustomerGatewayVendorsRead(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/services/vpn/data_source_tc_vpn_customer_gateway_vendors_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateway_vendors_test.go new file mode 100644 index 0000000000..1a2aaa7391 --- /dev/null +++ b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateway_vendors_test.go @@ -0,0 +1,31 @@ +package vpn_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpnCustomerGatewayVendorsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpnCustomerGatewayVendorsDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_customer_gateway_vendors.vpn_customer_gateway_vendors")), + }, + }, + }) +} + +const testAccVpnCustomerGatewayVendorsDataSource = ` + +data "tencentcloud_vpn_customer_gateway_vendors" "vpn_customer_gateway_vendors" {} + +` diff --git a/tencentcloud/data_source_tc_vpn_customer_gateways.go b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways.go similarity index 79% rename from tencentcloud/data_source_tc_vpn_customer_gateways.go rename to tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways.go index 7f7b67b1d5..363e3a67cf 100644 --- a/tencentcloud/data_source_tc_vpn_customer_gateways.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "log" "reflect" @@ -8,10 +12,11 @@ import ( "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 dataSourceTencentCloudVpnCustomerGateways() *schema.Resource { +func DataSourceTencentCloudVpnCustomerGateways() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpnCustomerGatewaysRead, @@ -19,7 +24,7 @@ func dataSourceTencentCloudVpnCustomerGateways() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the customer gateway. The length of character is limited to 1-60.", }, "id": { @@ -30,7 +35,7 @@ func dataSourceTencentCloudVpnCustomerGateways() *schema.Resource { "public_ip_address": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Public ip address of the VPN customer gateway.", }, "tags": { @@ -84,13 +89,13 @@ func dataSourceTencentCloudVpnCustomerGateways() *schema.Resource { } func dataSourceTencentCloudVpnCustomerGatewaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_customer_gateways.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_customer_gateways.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region request := vpc.NewDescribeCustomerGatewaysRequest() @@ -117,16 +122,16 @@ func dataSourceTencentCloudVpnCustomerGatewaysRead(d *schema.ResourceData, meta offset := uint64(0) request.Offset = &offset result := make([]*vpc.CustomerGateway, 0) - limit := uint64(VPN_DESCRIBE_LIMIT) + limit := uint64(svcvpc.VPN_DESCRIBE_LIMIT) request.Limit = &limit for { var response *vpc.DescribeCustomerGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeCustomerGateways(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCustomerGateways(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) } response = result return nil @@ -136,7 +141,7 @@ func dataSourceTencentCloudVpnCustomerGatewaysRead(d *schema.ResourceData, meta return err } else { result = append(result, response.Response.CustomerGatewaySet...) - if len(response.Response.CustomerGatewaySet) < VPN_DESCRIBE_LIMIT { + if len(response.Response.CustomerGatewaySet) < svcvpc.VPN_DESCRIBE_LIMIT { break } else { offset = offset + limit @@ -175,7 +180,7 @@ func dataSourceTencentCloudVpnCustomerGatewaysRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), gatewayList); e != nil { + if e := tccommon.WriteToFile(output.(string), gatewayList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_vpn_customer_gateways_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways_test.go similarity index 80% rename from tencentcloud/data_source_tc_vpn_customer_gateways_test.go rename to tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways_test.go index 35bbcf27ef..96f69a2e12 100644 --- a/tencentcloud/data_source_tc_vpn_customer_gateways_test.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_customer_gateways_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudVpnCustomerGatewaysDataSource(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: testAccTencentCloudVpnCustomerGatewaysDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_customer_gateways.cgws"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_customer_gateways.cgws"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_customer_gateways.cgws", "gateway_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_customer_gateways.cgws", "gateway_list.0.name", "terraform_test"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_customer_gateways.cgws", "gateway_list.0.public_ip_address", "1.1.1.3"), diff --git a/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip.go b/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip.go new file mode 100644 index 0000000000..ee7aeee07b --- /dev/null +++ b/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip.go @@ -0,0 +1,98 @@ +package vpn + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + + "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 DataSourceTencentCloudVpnDefaultHealthCheckIp() *schema.Resource { + return &schema.Resource{ + Read: dataSourceTencentCloudVpnDefaultHealthCheckIpRead, + Schema: map[string]*schema.Schema{ + "vpn_gateway_id": { + Required: true, + Type: schema.TypeString, + Description: "vpn gateway id.", + }, + + "health_check_local_ip": { + Computed: true, + Type: schema.TypeString, + Description: "local ip of health check.", + }, + + "health_check_remote_ip": { + Computed: true, + Type: schema.TypeString, + Description: "remote ip for health check.", + }, + + "result_output_file": { + Type: schema.TypeString, + Optional: true, + Description: "Used to save results.", + }, + }, + } +} + +func dataSourceTencentCloudVpnDefaultHealthCheckIpRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_default_health_check_ip.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var vpnGwId string + res := make(map[string]interface{}) + + paramMap := make(map[string]interface{}) + if v, ok := d.GetOk("vpn_gateway_id"); ok { + vpnGwId = v.(string) + paramMap["VpnGatewayId"] = helper.String(v.(string)) + } + + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + var defaultHealthCheck *vpc.GenerateVpnConnectionDefaultHealthCheckIpResponseParams + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeVpnDefaultHealthCheckIp(ctx, paramMap) + if e != nil { + return tccommon.RetryError(e) + } + defaultHealthCheck = result + return nil + }) + if err != nil { + return err + } + + if defaultHealthCheck.HealthCheckLocalIp != nil { + _ = d.Set("health_check_local_ip", defaultHealthCheck.HealthCheckLocalIp) + res["health_check_local_ip"] = defaultHealthCheck.HealthCheckLocalIp + } + + if defaultHealthCheck.HealthCheckRemoteIp != nil { + _ = d.Set("health_check_remote_ip", defaultHealthCheck.HealthCheckRemoteIp) + res["health_check_remote_ip"] = defaultHealthCheck.HealthCheckRemoteIp + } + + d.SetId(vpnGwId) + output, ok := d.GetOk("result_output_file") + if ok && output.(string) != "" { + if e := tccommon.WriteToFile(output.(string), res); e != nil { + return e + } + } + return nil +} diff --git a/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip_test.go new file mode 100644 index 0000000000..07ae511d64 --- /dev/null +++ b/tencentcloud/services/vpn/data_source_tc_vpn_default_health_check_ip_test.go @@ -0,0 +1,33 @@ +package vpn_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudVpnDefaultHealthCheckIpDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccVpnDefaultHealthCheckIpDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_default_health_check_ip.default_health_check_ip")), + }, + }, + }) +} + +const testAccVpnDefaultHealthCheckIpDataSource = ` + +data "tencentcloud_vpn_default_health_check_ip" "default_health_check_ip" { + vpn_gateway_id = "vpngw-gt8bianl" +} + +` diff --git a/tencentcloud/data_source_tc_vpn_gateway_routes.go b/tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes.go similarity index 81% rename from tencentcloud/data_source_tc_vpn_gateway_routes.go rename to tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes.go index 2d523a7116..4c0460a4fc 100644 --- a/tencentcloud/data_source_tc_vpn_gateway_routes.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes.go @@ -1,15 +1,19 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "log" "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 dataSourceTencentCloudVpnGatewayRoutes() *schema.Resource { +func DataSourceTencentCloudVpnGatewayRoutes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpnGatewayRoutesRead, @@ -54,13 +58,13 @@ func dataSourceTencentCloudVpnGatewayRoutes() *schema.Resource { } func dataSourceTencentCloudVpnGatewayRoutesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_gateway_routes.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_gateway_routes.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) vpnGatewayId = d.Get("vpn_gateway_id").(string) - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ) params := make(map[string]string) @@ -101,7 +105,7 @@ func dataSourceTencentCloudVpnGatewayRoutesRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), routeList); e != nil { + if e := tccommon.WriteToFile(output.(string), routeList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_vpn_gateway_routes_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes_test.go similarity index 84% rename from tencentcloud/data_source_tc_vpn_gateway_routes_test.go rename to tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes_test.go index ea6e8f975b..90082aecc3 100644 --- a/tencentcloud/data_source_tc_vpn_gateway_routes_test.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_gateway_routes_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudNeedFixVpnGatewayRoutesDataSource(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: testAccTencentCloudVpnGatewayRoutesDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_gateway_routes.routes"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_gateway_routes.routes"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateway_routes.routes", "vpn_gateway_route_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateway_routes.routes", "vpn_gateway_route_list.0.destination_cidr_block", "10.0.0.0/16"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateway_routes.routes", "vpn_gateway_route_list.0.instance_type", "VPNCONN"), @@ -29,7 +31,7 @@ func TestAccTencentCloudNeedFixVpnGatewayRoutesDataSource(t *testing.T) { }) } -const testAccTencentCloudVpnGatewayRoutesDataSourceConfig_basic = defaultVpnDataSource + ` +const testAccTencentCloudVpnGatewayRoutesDataSourceConfig_basic = tcacctest.DefaultVpnDataSource + ` resource "tencentcloud_vpn_gateway_route" "route1" { vpn_gateway_id = data.tencentcloud_vpn_gateways.foo.gateway_list.0.id destination_cidr_block = "10.0.0.0/18" diff --git a/tencentcloud/data_source_tc_vpn_gateways.go b/tencentcloud/services/vpn/data_source_tc_vpn_gateways.go similarity index 85% rename from tencentcloud/data_source_tc_vpn_gateways.go rename to tencentcloud/services/vpn/data_source_tc_vpn_gateways.go index 2bbaa8d3a6..0548f27ff3 100644 --- a/tencentcloud/data_source_tc_vpn_gateways.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_gateways.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "log" "reflect" @@ -8,10 +12,11 @@ import ( "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 dataSourceTencentCloudVpnGateways() *schema.Resource { +func DataSourceTencentCloudVpnGateways() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpnGatewaysRead, @@ -19,7 +24,7 @@ func dataSourceTencentCloudVpnGateways() *schema.Resource { "name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the VPN gateway. The length of character is limited to 1-60.", }, "id": { @@ -30,7 +35,7 @@ func dataSourceTencentCloudVpnGateways() *schema.Resource { "public_ip_address": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "Public ip address of the VPN gateway.", }, "zone": { @@ -149,13 +154,13 @@ func dataSourceTencentCloudVpnGateways() *schema.Resource { } func dataSourceTencentCloudVpnGatewaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_gateways.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_gateways.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region request := vpc.NewDescribeVpnGatewaysRequest() @@ -189,16 +194,16 @@ func dataSourceTencentCloudVpnGatewaysRead(d *schema.ResourceData, meta interfac offset := uint64(0) request.Offset = &offset result := make([]*vpc.VpnGateway, 0) - limit := uint64(VPN_DESCRIBE_LIMIT) + limit := uint64(svcvpc.VPN_DESCRIBE_LIMIT) request.Limit = &limit for { var response *vpc.DescribeVpnGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnGateways(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnGateways(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) } response = result return nil @@ -208,7 +213,7 @@ func dataSourceTencentCloudVpnGatewaysRead(d *schema.ResourceData, meta interfac return err } else { result = append(result, response.Response.VpnGatewaySet...) - if len(response.Response.VpnGatewaySet) < VPN_DESCRIBE_LIMIT { + if len(response.Response.VpnGatewaySet) < svcvpc.VPN_DESCRIBE_LIMIT { break } else { offset = offset + limit @@ -257,7 +262,7 @@ func dataSourceTencentCloudVpnGatewaysRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), gatewayList); e != nil { + if e := tccommon.WriteToFile(output.(string), gatewayList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_vpn_gateways_test.go b/tencentcloud/services/vpn/data_source_tc_vpn_gateways_test.go similarity index 81% rename from tencentcloud/data_source_tc_vpn_gateways_test.go rename to tencentcloud/services/vpn/data_source_tc_vpn_gateways_test.go index 8768be4ab4..c4041f7a6a 100644 --- a/tencentcloud/data_source_tc_vpn_gateways_test.go +++ b/tencentcloud/services/vpn/data_source_tc_vpn_gateways_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package vpn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudVpnGatewaysDataSource(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: testAccTencentCloudVpnGatewaysDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_gateways.cgws"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_vpn_gateways.cgws"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateways.cgws", "gateway_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateways.cgws", "gateway_list.0.name", "terraform_test"), resource.TestCheckResourceAttr("data.tencentcloud_vpn_gateways.cgws", "gateway_list.0.bandwidth", "10"), diff --git a/tencentcloud/resource_tc_vpn_connection.go b/tencentcloud/services/vpn/resource_tc_vpn_connection.go similarity index 85% rename from tencentcloud/resource_tc_vpn_connection.go rename to tencentcloud/services/vpn/resource_tc_vpn_connection.go index b15f96b00c..03143237de 100644 --- a/tencentcloud/resource_tc_vpn_connection.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_connection.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "fmt" "log" @@ -11,10 +15,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" 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/internal/helper" ) -func resourceTencentCloudVpnConnection() *schema.Resource { +func ResourceTencentCloudVpnConnection() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpnConnectionCreate, Read: resourceTencentCloudVpnConnectionRead, @@ -28,7 +33,7 @@ func resourceTencentCloudVpnConnection() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the VPN connection. The length of character is limited to 1-60.", }, "vpc_id": { @@ -89,31 +94,31 @@ func resourceTencentCloudVpnConnection() *schema.Resource { "ike_proto_encry_algorithm": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC, + Default: svcvpc.VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC, Description: "Proto encrypt algorithm of the IKE operation specification. Valid values: `3DES-CBC`, `AES-CBC-128`, `AES-CBC-192`, `AES-CBC-256`, `DES-CBC`, `SM4`, `AES128GCM128`, `AES192GCM128`, `AES256GCM128`,`AES128GCM128`, `AES192GCM128`, `AES256GCM128`. Default value is `3DES-CBC`.", }, "ike_proto_authen_algorithm": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5, + Default: svcvpc.VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5, Description: "Proto authenticate algorithm of the IKE operation specification. Valid values: `MD5`, `SHA`, `SHA-256`. Default Value is `MD5`.", }, "ike_exchange_mode": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_EXCHANGE_MODE_MAIN, + Default: svcvpc.VPN_IKE_EXCHANGE_MODE_MAIN, Description: "Exchange mode of the IKE operation specification. Valid values: `AGGRESSIVE`, `MAIN`. Default value is `MAIN`.", }, "ike_local_identity": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_IDENTITY_ADDRESS, + Default: svcvpc.VPN_IKE_IDENTITY_ADDRESS, Description: "Local identity way of IKE operation specification. Valid values: `ADDRESS`, `FQDN`. Default value is `ADDRESS`.", }, "ike_remote_identity": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_IDENTITY_ADDRESS, + Default: svcvpc.VPN_IKE_IDENTITY_ADDRESS, Description: "Remote identity way of IKE operation specification. Valid values: `ADDRESS`, `FQDN`. Default value is `ADDRESS`.", }, "ike_local_address": { @@ -143,14 +148,14 @@ func resourceTencentCloudVpnConnection() *schema.Resource { "ike_dh_group_name": { Type: schema.TypeString, Optional: true, - Default: VPN_IKE_DH_GROUP_NAME_GROUP1, + Default: svcvpc.VPN_IKE_DH_GROUP_NAME_GROUP1, Description: "DH group name of the IKE operation specification. Valid values: `GROUP1`, `GROUP2`, `GROUP5`, `GROUP14`, `GROUP24`. Default value is `GROUP1`.", }, "ike_sa_lifetime_seconds": { Type: schema.TypeInt, Optional: true, Default: 86400, - ValidateFunc: validateIntegerInRange(60, 604800), + ValidateFunc: tccommon.ValidateIntegerInRange(60, 604800), Description: "SA lifetime of the IKE operation specification, unit is `second`. The value ranges from 60 to 604800. Default value is 86400 seconds.", }, "ike_version": { @@ -162,20 +167,20 @@ func resourceTencentCloudVpnConnection() *schema.Resource { "ipsec_encrypt_algorithm": { Type: schema.TypeString, Optional: true, - Default: VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC, + Default: svcvpc.VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC, Description: "Encrypt algorithm of the IPSEC operation specification. Valid values: `3DES-CBC`, `AES-CBC-128`, `AES-CBC-192`, `AES-CBC-256`, `DES-CBC`, `SM4`, `NULL`, `AES128GCM128`, `AES192GCM128`, `AES256GCM128`. Default value is `3DES-CBC`.", }, "ipsec_integrity_algorithm": { Type: schema.TypeString, Optional: true, - Default: VPN_IPSEC_INTEGRITY_ALGORITHM_MD5, + Default: svcvpc.VPN_IPSEC_INTEGRITY_ALGORITHM_MD5, Description: "Integrity algorithm of the IPSEC operation specification. Valid values: `SHA1`, `MD5`, `SHA-256`. Default value is `MD5`.", }, "ipsec_sa_lifetime_seconds": { Type: schema.TypeInt, Optional: true, Default: 3600, - ValidateFunc: validateIntegerInRange(180, 604800), + ValidateFunc: tccommon.ValidateIntegerInRange(180, 604800), Description: "SA lifetime of the IPSEC operation specification, unit is second. Valid value ranges: [180~604800]. Default value is 3600 seconds.", }, "ipsec_pfs_dh_group": { @@ -188,7 +193,7 @@ func resourceTencentCloudVpnConnection() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 1843200, - ValidateFunc: validateIntegerMin(2560), + ValidateFunc: tccommon.ValidateIntegerMin(2560), Description: "SA lifetime of the IPSEC operation specification, unit is KB. The value should not be less then 2560. Default value is 1843200.", }, "tags": { @@ -200,21 +205,21 @@ func resourceTencentCloudVpnConnection() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(0, 1), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 1), Description: "Specifies whether to enable DPD. Valid values: 0 (disable) and 1 (enable).", }, "dpd_timeout": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(30, 60), + ValidateFunc: tccommon.ValidateIntegerInRange(30, 60), Description: "DPD timeout period.Valid value ranges: [30~60], Default: 30; unit: second. If the request is not responded within this period, the peer end is considered not exists. This parameter is valid when the value of DpdEnable is 1.", }, "dpd_action": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(DPD_ACTIONS), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcvpc.DPD_ACTIONS), Description: "The action after DPD timeout. Valid values: clear (disconnect) and restart (try again). It is valid when DpdEnable is 1.", }, "create_time": { @@ -237,7 +242,7 @@ func resourceTencentCloudVpnConnection() *schema.Resource { Optional: true, Computed: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(VPN_CONNECTION_ROUTE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(svcvpc.VPN_CONNECTION_ROUTE_TYPE), Description: "Route type of the VPN connection. Valid value: `STATIC`, `StaticRoute`, `Policy`.", }, "state": { @@ -273,12 +278,12 @@ func resourceTencentCloudVpnConnection() *schema.Resource { } func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ) // pre check vpn gateway id @@ -348,7 +353,7 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf ikeOptionsSpecification.ExchangeMode = helper.String(d.Get("ike_exchange_mode").(string)) ikeOptionsSpecification.LocalIdentity = helper.String(d.Get("ike_local_identity").(string)) ikeOptionsSpecification.RemoteIdentity = helper.String(d.Get("ike_remote_identity").(string)) - if *ikeOptionsSpecification.LocalIdentity == VPN_IKE_IDENTITY_ADDRESS { + if *ikeOptionsSpecification.LocalIdentity == svcvpc.VPN_IKE_IDENTITY_ADDRESS { if v, ok := d.GetOk("ike_local_address"); ok { ikeOptionsSpecification.LocalAddress = helper.String(v.(string)) } else { @@ -361,7 +366,7 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf return fmt.Errorf("ike_local_fqdn_name need to be set when ike_local_identity is `FQDN`") } } - if *ikeOptionsSpecification.LocalIdentity == VPN_IKE_IDENTITY_ADDRESS { + if *ikeOptionsSpecification.LocalIdentity == svcvpc.VPN_IKE_IDENTITY_ADDRESS { if v, ok := d.GetOk("ike_remote_address"); ok { ikeOptionsSpecification.RemoteAddress = helper.String(v.(string)) } else { @@ -405,12 +410,12 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf } var response *vpc.CreateVpnConnectionResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateVpnConnection(request) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateVpnConnection(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) } response = result return nil @@ -449,13 +454,13 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf offset := uint64(0) idRequest.Offset = &offset - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(idRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(idRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, idRequest.GetAction(), idRequest.ToJsonString(), e.Error()) - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } else { if len(result.Response.VpnConnectionSet) == 0 || *result.Response.VpnConnectionSet[0].VpnConnectionId == "" { return resource.RetryableError(fmt.Errorf("Id is creating, wait...")) @@ -480,18 +485,18 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf // must wait for finishing creating connection statRequest := vpc.NewDescribeVpnConnectionsRequest() statRequest.VpnConnectionIds = []*string{&vpnConnectionId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(statRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(statRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, statRequest.GetAction(), statRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { //if not, quit if len(result.Response.VpnConnectionSet) != 1 { return resource.NonRetryableError(fmt.Errorf("creating error")) } else { - if *result.Response.VpnConnectionSet[0].State == VPN_STATE_AVAILABLE { + if *result.Response.VpnConnectionSet[0].State == svcvpc.VPN_STATE_AVAILABLE { return nil } else { return resource.RetryableError(fmt.Errorf("State is not available: %s, wait for state to be AVAILABLE.", *result.Response.VpnConnectionSet[0].State)) @@ -506,10 +511,10 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "vpnx", region, vpnConnectionId) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "vpnx", region, vpnConnectionId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -520,29 +525,29 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudVpnConnectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) ) connectionId := d.Id() request := vpc.NewDescribeVpnConnectionsRequest() request.VpnConnectionIds = []*string{&connectionId} var response *vpc.DescribeVpnConnectionsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(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 && ee.Code == VPCNotFound { + if ok && ee.Code == svcvpc.VPCNotFound { return nil } - return retryError(e) + return tccommon.RetryError(e) } response = result @@ -580,8 +585,8 @@ func resourceTencentCloudVpnConnectionRead(d *schema.ResourceData, meta interfac _ = d.Set("customer_gateway_id", *connection.CustomerGatewayId) _ = d.Set("pre_share_key", *connection.PreShareKey) //set up SPD - if *connection.RouteType != ROUTE_TYPE_STATIC_ROUTE { - _ = d.Set("security_group_policy", flattenVpnSPDList(connection.SecurityPolicyDatabaseSet)) + if *connection.RouteType != svcvpc.ROUTE_TYPE_STATIC_ROUTE { + _ = d.Set("security_group_policy", svcvpc.FlattenVpnSPDList(connection.SecurityPolicyDatabaseSet)) } //set up IKE @@ -636,8 +641,8 @@ func resourceTencentCloudVpnConnectionRead(d *schema.ResourceData, meta interfac _ = d.Set("dpd_action", *connection.DpdAction) //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region tags, err := tagService.DescribeResourceTags(ctx, "vpc", "vpnx", region, connectionId) if err != nil { return err @@ -648,10 +653,10 @@ func resourceTencentCloudVpnConnectionRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection.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) connectionId := d.Id() @@ -748,7 +753,7 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf ikeOptionsSpecification.ExchangeMode = helper.String(d.Get("ike_exchange_mode").(string)) ikeOptionsSpecification.LocalIdentity = helper.String(d.Get("ike_local_identity").(string)) ikeOptionsSpecification.RemoteIdentity = helper.String(d.Get("ike_remote_identity").(string)) - if *ikeOptionsSpecification.LocalIdentity == VPN_IKE_IDENTITY_ADDRESS { + if *ikeOptionsSpecification.LocalIdentity == svcvpc.VPN_IKE_IDENTITY_ADDRESS { if v, ok := d.GetOk("ike_local_address"); ok { ikeOptionsSpecification.LocalAddress = helper.String(v.(string)) } else { @@ -761,7 +766,7 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf return fmt.Errorf("ike_local_fqdn_name need to be set when ike_local_identity is `FQDN`") } } - if *ikeOptionsSpecification.LocalIdentity == VPN_IKE_IDENTITY_ADDRESS { + if *ikeOptionsSpecification.LocalIdentity == svcvpc.VPN_IKE_IDENTITY_ADDRESS { if v, ok := d.GetOk("ike_remote_address"); ok { ikeOptionsSpecification.RemoteAddress = helper.String(v.(string)) } else { @@ -812,12 +817,12 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf changeFlag = true } if changeFlag { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyVpnConnectionAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyVpnConnectionAttribute(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 }) @@ -831,12 +836,10 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf //tag if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "vpnx", region, connectionId) + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "vpnx", region, connectionId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -848,9 +851,9 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudVpnConnectionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_connection.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) connectionId := d.Id() vpnGatewayId := d.Get("vpn_gateway_id").(string) @@ -858,8 +861,8 @@ func resourceTencentCloudVpnConnectionDelete(d *schema.ResourceData, meta interf request := vpc.NewDeleteVpnConnectionRequest() request.VpnConnectionId = &connectionId request.VpnGatewayId = &vpnGatewayId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteVpnConnection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteVpnConnection(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.GetCode() == "UnsupportedOperation.InvalidState" { @@ -868,7 +871,7 @@ func resourceTencentCloudVpnConnectionDelete(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) } return nil }) @@ -879,21 +882,21 @@ func resourceTencentCloudVpnConnectionDelete(d *schema.ResourceData, meta interf //to get the status of vpn connection statRequest := vpc.NewDescribeVpnConnectionsRequest() statRequest.VpnConnectionIds = []*string{&connectionId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(statRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(statRequest) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) if !ok { - return retryError(e) + return tccommon.RetryError(e) } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) return nil } else { 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 { //if not, quit diff --git a/tencentcloud/services/vpn/resource_tc_vpn_connection_reset.go b/tencentcloud/services/vpn/resource_tc_vpn_connection_reset.go new file mode 100644 index 0000000000..cb89bd0754 --- /dev/null +++ b/tencentcloud/services/vpn/resource_tc_vpn_connection_reset.go @@ -0,0 +1,90 @@ +package vpn + +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" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpnConnectionReset() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpnConnectionResetCreate, + Read: resourceTencentCloudVpnConnectionResetRead, + Delete: resourceTencentCloudVpnConnectionResetDelete, + Schema: map[string]*schema.Schema{ + "vpn_gateway_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "VPN GATEWAY INSTANCE ID.", + }, + + "vpn_connection_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "VPN CONNECTION INSTANCE ID.", + }, + }, + } +} + +func resourceTencentCloudVpnConnectionResetCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_connection_reset.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + var ( + request = vpc.NewResetVpnConnectionRequest() + vpnGatewayId string + vpnConnectionId string + ) + if v, ok := d.GetOk("vpn_gateway_id"); ok { + vpnGatewayId = v.(string) + request.VpnGatewayId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("vpn_connection_id"); ok { + vpnConnectionId = v.(string) + request.VpnConnectionId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ResetVpnConnection(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 vpc vpnConnectionReset failed, reason:%+v", logId, err) + return nil + } + + d.SetId(vpnGatewayId + tccommon.FILED_SP + vpnConnectionId) + + return resourceTencentCloudVpnConnectionResetRead(d, meta) +} + +func resourceTencentCloudVpnConnectionResetRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection_reset.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudVpnConnectionResetDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_connection_reset.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpn_connection_reset_test.go b/tencentcloud/services/vpn/resource_tc_vpn_connection_reset_test.go similarity index 78% rename from tencentcloud/resource_tc_vpn_connection_reset_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_connection_reset_test.go index 815840c3c9..f19df71d94 100644 --- a/tencentcloud/resource_tc_vpn_connection_reset_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_connection_reset_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpn_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 TestAccTencentCloudVpnConnectionResetResource_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: testAccVpnConnectionReset, diff --git a/tencentcloud/resource_tc_vpn_connection_test.go b/tencentcloud/services/vpn/resource_tc_vpn_connection_test.go similarity index 95% rename from tencentcloud/resource_tc_vpn_connection_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_connection_test.go index 11c679d096..9a930b1aa8 100644 --- a/tencentcloud/resource_tc_vpn_connection_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_connection_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "fmt" "log" "testing" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudVpnConnectionResource_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: testAccCheckVpnConnectionDestroy, Steps: []resource.TestStep{ { @@ -150,9 +154,9 @@ func TestAccTencentCloudVpnConnectionResource_basic(t *testing.T) { } func testAccCheckVpnConnectionDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpn_connection" { continue @@ -160,21 +164,21 @@ func testAccCheckVpnConnectionDestroy(s *terraform.State) error { request := vpc.NewDescribeVpnConnectionsRequest() request.VpnConnectionIds = []*string{&rs.Primary.ID} var response *vpc.DescribeVpnConnectionsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeVpnConnections(request) if e != nil { ee, ok := e.(*errors.TencentCloudSDKError) if !ok { - return retryError(e) + return tccommon.RetryError(e) } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) return resource.NonRetryableError(e) } else { 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) } } response = result @@ -203,7 +207,7 @@ func testAccCheckVpnConnectionDestroy(s *terraform.State) error { func testAccCheckVpnConnectionExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -212,16 +216,16 @@ func testAccCheckVpnConnectionExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("VPN connection id is not set") } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeVpnConnectionsRequest() request.VpnConnectionIds = []*string{&rs.Primary.ID} var response *vpc.DescribeVpnConnectionsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeVpnConnections(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) } response = result return nil diff --git a/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway.go b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway.go new file mode 100644 index 0000000000..4c40e9e095 --- /dev/null +++ b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway.go @@ -0,0 +1,319 @@ +package vpn + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "fmt" + "log" + + "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" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudVpnCustomerGateway() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpnCustomerGatewayCreate, + Read: resourceTencentCloudVpnCustomerGatewayRead, + Update: resourceTencentCloudVpnCustomerGatewayUpdate, + Delete: resourceTencentCloudVpnCustomerGatewayDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), + Description: "Name of the customer gateway. The length of character is limited to 1-60.", + }, + "public_ip_address": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + ValidateFunc: tccommon.ValidateIp, + Description: "Public IP of the customer gateway.", + }, + "tags": { + Type: schema.TypeMap, + Optional: true, + Description: "A list of tags used to associate different resources.", + }, + "create_time": { + Type: schema.TypeString, + Computed: true, + Description: "Create time of the customer gateway.", + }, + }, + } +} + +func resourceTencentCloudVpnCustomerGatewayCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway.create")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + request := vpc.NewCreateCustomerGatewayRequest() + request.CustomerGatewayName = helper.String(d.Get("name").(string)) + request.IpAddress = helper.String(d.Get("public_ip_address").(string)) + var response *vpc.CreateCustomerGatewayResponse + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateCustomerGateway(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 tccommon.RetryError(e) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + + if response.Response.CustomerGateway == nil { + return fmt.Errorf("VPN customer gateway id is nil") + } + customerGatewayId := *response.Response.CustomerGateway.CustomerGatewayId + d.SetId(customerGatewayId) + // must wait for finishing creating customer gateway + statRequest := vpc.NewDescribeCustomerGatewaysRequest() + statRequest.CustomerGatewayIds = []*string{response.Response.CustomerGateway.CustomerGatewayId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCustomerGateways(statRequest) + if e != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), e.Error()) + return tccommon.RetryError(e) + } else { + //if not, quit + if len(result.Response.CustomerGatewaySet) != 1 { + return resource.NonRetryableError(fmt.Errorf("creating error")) + } + //else consider created, cos there is no status of gateway + return nil + } + }) + if err != nil { + log.Printf("[CRITAL]%s create VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + + //modify tags + if tags := helper.GetTags(d, "tags"); len(tags) > 0 { + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "cgw", region, customerGatewayId) + + if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { + return err + } + } + + return resourceTencentCloudVpnCustomerGatewayRead(d, meta) +} + +func resourceTencentCloudVpnCustomerGatewayRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + customerGatewayId := d.Id() + request := vpc.NewDescribeCustomerGatewaysRequest() + request.CustomerGatewayIds = []*string{&customerGatewayId} + var response *vpc.DescribeCustomerGatewaysResponse + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCustomerGateways(request) + if e != nil { + ee, ok := e.(*errors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(e) + } + if ee.Code == svcvpc.VPCNotFound { + log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), e.Error()) + return nil + } else { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), e.Error()) + return tccommon.RetryError(e) + } + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s read VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + if response == nil || response.Response == nil || len(response.Response.CustomerGatewaySet) < 1 { + d.SetId("") + return nil + } + + gateway := response.Response.CustomerGatewaySet[0] + + _ = d.Set("name", *gateway.CustomerGatewayName) + _ = d.Set("public_ip_address", *gateway.IpAddress) + _ = d.Set("create_time", *gateway.CreatedTime) + + //tags + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + tags, err := tagService.DescribeResourceTags(ctx, "vpc", "cgw", region, customerGatewayId) + if err != nil { + return err + } + _ = d.Set("tags", tags) + + return nil +} + +func resourceTencentCloudVpnCustomerGatewayUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway.update")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + d.Partial(true) + customerGatewayId := d.Id() + request := vpc.NewModifyCustomerGatewayAttributeRequest() + request.CustomerGatewayId = &customerGatewayId + if d.HasChange("name") { + request.CustomerGatewayName = helper.String(d.Get("name").(string)) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCustomerGatewayAttribute(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 tccommon.RetryError(e) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s modify VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + } + + //tag + if d.HasChange("tags") { + oldInterface, newInterface := d.GetChange("tags") + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "cgw", region, customerGatewayId) + err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) + if err != nil { + return err + } + } + d.Partial(false) + + return resourceTencentCloudVpnCustomerGatewayRead(d, meta) +} + +func resourceTencentCloudVpnCustomerGatewayDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + customerGatewayId := d.Id() + + //check the customer gateway is not related with any tunnel + tRequest := vpc.NewDescribeVpnConnectionsRequest() + tRequest.Filters = make([]*vpc.Filter, 0, 1) + params := make(map[string]string) + params["customer-gateway-id"] = customerGatewayId + + for k, v := range params { + filter := &vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + tRequest.Filters = append(tRequest.Filters, filter) + } + offset := uint64(0) + tRequest.Offset = &offset + + tErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(tRequest) + + if e != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, tRequest.GetAction(), tRequest.ToJsonString(), e.Error()) + return tccommon.RetryError(e) + } else { + if len(result.Response.VpnConnectionSet) == 0 { + return nil + } else { + return resource.NonRetryableError(fmt.Errorf("There is associated tunnel exists, please delete associated tunnels first.")) + } + } + }) + if tErr != nil { + log.Printf("[CRITAL]%s describe VPN connection failed, reason:%s\n", logId, tErr.Error()) + return tErr + } + + request := vpc.NewDeleteCustomerGatewayRequest() + request.CustomerGatewayId = &customerGatewayId + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteCustomerGateway(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 tccommon.RetryError(e) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s delete VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + //to get the status of customer gateway + statRequest := vpc.NewDescribeCustomerGatewaysRequest() + statRequest.CustomerGatewayIds = []*string{&customerGatewayId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCustomerGateways(statRequest) + if e != nil { + ee, ok := e.(*errors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(e) + } + if ee.Code == svcvpc.VPCNotFound { + log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), e.Error()) + return nil + } else { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), e.Error()) + return tccommon.RetryError(e) + } + } else { + //if not, quit + if len(result.Response.CustomerGatewaySet) == 0 { + return nil + } + //else consider delete fail + return resource.RetryableError(fmt.Errorf("deleting retry")) + } + }) + if err != nil { + log.Printf("[CRITAL]%s delete VPN customer gateway failed, reason:%s\n", logId, err.Error()) + return err + } + return nil +} diff --git a/tencentcloud/resource_tc_vpn_customer_gateway_configuration_download.go b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download.go similarity index 80% rename from tencentcloud/resource_tc_vpn_customer_gateway_configuration_download.go rename to tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download.go index e7433d70ac..a77d7c0093 100644 --- a/tencentcloud/resource_tc_vpn_customer_gateway_configuration_download.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download.go @@ -1,15 +1,18 @@ -package tencentcloud +package vpn 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" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudVpnCustomerGatewayConfigurationDownload() *schema.Resource { +func ResourceTencentCloudVpnCustomerGatewayConfigurationDownload() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpnCustomerGatewayConfigurationDownloadCreate, Read: resourceTencentCloudVpnCustomerGatewayConfigurationDownloadRead, @@ -76,10 +79,10 @@ func resourceTencentCloudVpnCustomerGatewayConfigurationDownload() *schema.Resou } func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpn_customer_gateway_configuration_download.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpn_customer_gateway_configuration_download.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewDownloadCustomerGatewayConfigurationRequest() @@ -115,10 +118,10 @@ func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadCreate(d *schema request.InterfaceName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DownloadCustomerGatewayConfiguration(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DownloadCustomerGatewayConfiguration(request) if e != nil { - return retryError(e) + return tccommon.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,7 +133,7 @@ func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadCreate(d *schema return nil } - d.SetId(vpnGatewayId + FILED_SP + vpnConnectionId) + d.SetId(vpnGatewayId + tccommon.FILED_SP + vpnConnectionId) _ = d.Set("customer_gateway_configuration", response.Response.CustomerGatewayConfiguration) @@ -138,15 +141,15 @@ func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadCreate(d *schema } func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway_configuration_download.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway_configuration_download.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudVpnCustomerGatewayConfigurationDownloadDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_customer_gateway_configuration_download.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_customer_gateway_configuration_download.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_vpn_customer_gateway_configuration_download_test.go b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download_test.go similarity index 84% rename from tencentcloud/resource_tc_vpn_customer_gateway_configuration_download_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download_test.go index 39b23efb66..3a8cb9f2ae 100644 --- a/tencentcloud/resource_tc_vpn_customer_gateway_configuration_download_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_configuration_download_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpn_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 TestAccTencentCloudVpnCustomerGatewayConfigurationDownloadResource_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: testAccVpcVpnCustomerGatewayConfigurationDownload, diff --git a/tencentcloud/resource_tc_vpn_customer_gateway_test.go b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_test.go similarity index 77% rename from tencentcloud/resource_tc_vpn_customer_gateway_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_test.go index 5751e32fcb..3812f2fde6 100644 --- a/tencentcloud/resource_tc_vpn_customer_gateway_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_customer_gateway_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpn_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -22,18 +26,16 @@ func init() { } func testSweepVpnCustomerGateway(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeCustomerGatewayByFilter(ctx, nil) if err != nil { @@ -45,12 +47,12 @@ func testSweepVpnCustomerGateway(region string) error { customerName := *v.CustomerGatewayName now := time.Now() - createTime := stringTotime(*v.CreatedTime) + createTime := tccommon.StringToTime(*v.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(customerName, keepResource) || strings.HasPrefix(customerName, defaultResource) { + if strings.HasPrefix(customerName, tcacctest.KeepResource) || strings.HasPrefix(customerName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -65,8 +67,8 @@ func testSweepVpnCustomerGateway(region string) error { func TestAccTencentCloudVpnCustomerGateway_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: testAccCheckVpnCustomerGatewayDestroy, Steps: []resource.TestStep{ { @@ -91,9 +93,9 @@ func TestAccTencentCloudVpnCustomerGateway_basic(t *testing.T) { } func testAccCheckVpnCustomerGatewayDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpn_customer_gateway" { continue @@ -101,21 +103,21 @@ func testAccCheckVpnCustomerGatewayDestroy(s *terraform.State) error { request := vpc.NewDescribeCustomerGatewaysRequest() request.CustomerGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeCustomerGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeCustomerGateways(request) if e != nil { ee, ok := e.(*errors.TencentCloudSDKError) if !ok { - return retryError(e) + return tccommon.RetryError(e) } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) return resource.NonRetryableError(e) } else { 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) } } response = result @@ -144,7 +146,7 @@ func testAccCheckVpnCustomerGatewayDestroy(s *terraform.State) error { func testAccCheckVpnCustomerGatewayExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -153,16 +155,16 @@ func testAccCheckVpnCustomerGatewayExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("VPN customer gateway id is not set") } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeCustomerGatewaysRequest() request.CustomerGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeCustomerGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeCustomerGateways(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) } response = result return nil diff --git a/tencentcloud/resource_tc_vpn_gateway.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway.go similarity index 76% rename from tencentcloud/resource_tc_vpn_gateway.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway.go index a9bb9b44ab..2e2cd46bf6 100644 --- a/tencentcloud/resource_tc_vpn_gateway.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway.go @@ -1,6 +1,10 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "fmt" "log" @@ -10,10 +14,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "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/internal/helper" ) -func resourceTencentCloudVpnGateway() *schema.Resource { +func ResourceTencentCloudVpnGateway() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpnGatewayCreate, Read: resourceTencentCloudVpnGatewayRead, @@ -27,7 +32,7 @@ func resourceTencentCloudVpnGateway() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the VPN gateway. The length of character is limited to 1-60.", }, "vpc_id": { @@ -67,20 +72,20 @@ func resourceTencentCloudVpnGateway() *schema.Resource { "prepaid_renew_flag": { Type: schema.TypeString, Optional: true, - Default: VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY, + Default: svcvpc.VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY, Description: "Flag indicates whether to renew or not. Valid value: `NOTIFY_AND_AUTO_RENEW`, `NOTIFY_AND_MANUAL_RENEW`.", }, "prepaid_period": { Type: schema.TypeInt, Optional: true, Default: 1, - ValidateFunc: validateAllowedIntValue([]int{1, 2, 3, 4, 6, 7, 8, 9, 12, 24, 36}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2, 3, 4, 6, 7, 8, 9, 12, 24, 36}), Description: "Period of instance to be prepaid. Valid value: `1`, `2`, `3`, `4`, `6`, `7`, `8`, `9`, `12`, `24`, `36`. The unit is month. Caution: when this para and renew_flag para are valid, the request means to renew several months more pre-paid period. This para can only be changed on `IPSEC` vpn gateway.", }, "charge_type": { Type: schema.TypeString, Optional: true, - Default: VPN_CHARGE_TYPE_POSTPAID_BY_HOUR, + Default: svcvpc.VPN_CHARGE_TYPE_POSTPAID_BY_HOUR, Description: "Charge Type of the VPN gateway. Valid value: `PREPAID`, `POSTPAID_BY_HOUR`. The default is `POSTPAID_BY_HOUR`.", }, "cdc_id": { @@ -137,10 +142,10 @@ func resourceTencentCloudVpnGateway() *schema.Resource { } func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway.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 := vpc.NewCreateVpnGatewayRequest() request.VpnGatewayName = helper.String(d.Get("name").(string)) @@ -154,7 +159,7 @@ func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface } //only support change renew_flag when charge type is pre-paid - if chargeType == VPN_CHARGE_TYPE_PREPAID { + if chargeType == svcvpc.VPN_CHARGE_TYPE_PREPAID { var preChargePara vpc.InstanceChargePrepaid preChargePara.Period = helper.IntUint64(d.Get("prepaid_period").(int)) preChargePara.RenewFlag = helper.String(d.Get("prepaid_renew_flag").(string)) @@ -190,12 +195,12 @@ func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface } var response *vpc.CreateVpnGatewayResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().CreateVpnGateway(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateVpnGateway(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) } response = result return nil @@ -214,18 +219,18 @@ func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface // must wait for creating gateway finished statRequest := vpc.NewDescribeVpnGatewaysRequest() statRequest.VpnGatewayIds = []*string{helper.String(gatewayId)} - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnGateways(statRequest) + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnGateways(statRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, statRequest.GetAction(), statRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { //if not, quit if len(result.Response.VpnGatewaySet) != 1 { return resource.NonRetryableError(fmt.Errorf("creating error")) } else { - if *result.Response.VpnGatewaySet[0].State == VPN_STATE_AVAILABLE { + if *result.Response.VpnGatewaySet[0].State == svcvpc.VPN_STATE_AVAILABLE { return nil } else { return resource.RetryableError(fmt.Errorf("State is not available: %s, wait for state to be AVAILABLE.", *result.Response.VpnGatewaySet[0].State)) @@ -240,10 +245,10 @@ func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "vpngw", region, gatewayId) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "vpngw", region, gatewayId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -254,13 +259,13 @@ func resourceTencentCloudVpnGatewayCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudVpnGatewayRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) gatewayId = d.Id() ) @@ -290,8 +295,8 @@ func resourceTencentCloudVpnGatewayRead(d *schema.ResourceData, meta interface{} _ = d.Set("cdc_id", gateway.CdcId) _ = d.Set("max_connection", gateway.MaxConnection) //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region tags, err := tagService.DescribeResourceTags(ctx, "vpc", "vpngw", region, gatewayId) if err != nil { return err @@ -302,10 +307,10 @@ func resourceTencentCloudVpnGatewayRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway.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) gatewayId := d.Id() @@ -322,7 +327,7 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface if d.HasChange("prepaid_period") { chargeType := d.Get("charge_type").(string) period := d.Get("prepaid_period").(int) - if chargeType != VPN_CHARGE_TYPE_PREPAID { + if chargeType != svcvpc.VPN_CHARGE_TYPE_PREPAID { return fmt.Errorf("Invalid renew flag change. Only support pre-paid vpn.") } request := vpc.NewRenewVpnGatewayRequest() @@ -331,12 +336,12 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface preChargePara.Period = helper.IntUint64(period) request.InstanceChargePrepaid = &preChargePara - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().RenewVpnGateway(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().RenewVpnGateway(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 }) @@ -349,7 +354,7 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface if d.HasChange("prepaid_renew_flag") { chargeType := d.Get("charge_type").(string) renewFlag := d.Get("prepaid_renew_flag").(string) - if chargeType != VPN_CHARGE_TYPE_PREPAID { + if chargeType != svcvpc.VPN_CHARGE_TYPE_PREPAID { return fmt.Errorf("Invalid renew flag change. Only support pre-paid vpn.") } request := vpc.NewSetVpnGatewaysRenewFlagRequest() @@ -360,12 +365,12 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface request.AutoRenewFlag = helper.IntInt64(0) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().SetVpnGatewaysRenewFlag(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().SetVpnGatewaysRenewFlag(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 }) @@ -384,17 +389,17 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface request := vpc.NewModifyVpnGatewayAttributeRequest() request.VpnGatewayId = &gatewayId request.VpnGatewayName = helper.String(d.Get("name").(string)) - if oldChargeType == VPN_CHARGE_TYPE_PREPAID && newChargeType == VPN_CHARGE_TYPE_POSTPAID_BY_HOUR { + if oldChargeType == svcvpc.VPN_CHARGE_TYPE_PREPAID && newChargeType == svcvpc.VPN_CHARGE_TYPE_POSTPAID_BY_HOUR { request.InstanceChargeType = &newChargeType - } else if oldChargeType == VPN_CHARGE_TYPE_POSTPAID_BY_HOUR && newChargeType == VPN_CHARGE_TYPE_PREPAID { + } else if oldChargeType == svcvpc.VPN_CHARGE_TYPE_POSTPAID_BY_HOUR && newChargeType == svcvpc.VPN_CHARGE_TYPE_PREPAID { return fmt.Errorf("Invalid charge type change. Only support pre-paid to post-paid way.") } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyVpnGatewayAttribute(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyVpnGatewayAttribute(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 }) @@ -411,12 +416,12 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface bandwidth := d.Get("bandwidth").(int) bandwidth64 := uint64(bandwidth) request.InternetMaxBandwidthOut = &bandwidth64 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ResetVpnGatewayInternetMaxBandwidth(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ResetVpnGatewayInternetMaxBandwidth(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 }) @@ -430,12 +435,10 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface //tag if d.HasChange("tags") { oldInterface, newInterface := d.GetChange("tags") - replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) - tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, - } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("vpc", "vpngw", region, gatewayId) + replaceTags, deleteTags := svctag.DiffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) + tagService := svctag.NewTagService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("vpc", "vpngw", region, gatewayId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -453,9 +456,9 @@ func resourceTencentCloudVpnGatewayUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) gatewayId := d.Id() @@ -465,16 +468,16 @@ func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface //to get the type and networkinstanceid of gateway vpngwRequest := vpc.NewDescribeVpnGatewaysRequest() vpngwRequest.VpnGatewayIds = []*string{&gatewayId} - vpngwErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnGateways(vpngwRequest) + vpngwErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnGateways(vpngwRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { //if deleted, quit if len(result.Response.VpnGatewaySet) == 0 { return nil } - if result.Response.VpnGatewaySet[0].ExpiredTime != nil && *result.Response.VpnGatewaySet[0].InstanceChargeType == VPN_CHARGE_TYPE_PREPAID { + if result.Response.VpnGatewaySet[0].ExpiredTime != nil && *result.Response.VpnGatewaySet[0].InstanceChargeType == svcvpc.VPN_CHARGE_TYPE_PREPAID { expiredTime := *result.Response.VpnGatewaySet[0].ExpiredTime if expiredTime != "0000-00-00 00:00:00" { t, err := time.Parse("2006-01-02 15:04:05", expiredTime) @@ -486,7 +489,7 @@ func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface } } } - if *result.Response.VpnGatewaySet[0].Type == GATE_WAY_TYPE_CCN && *result.Response.VpnGatewaySet[0].NetworkInstanceId != "" { + if *result.Response.VpnGatewaySet[0].Type == svcvpc.GATE_WAY_TYPE_CCN && *result.Response.VpnGatewaySet[0].NetworkInstanceId != "" { return resource.NonRetryableError(fmt.Errorf("Delete operation is unsupported when VPN gateway is attached to CCN instance.")) } return nil @@ -517,13 +520,13 @@ func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface offset := uint64(0) tRequest.Offset = &offset - tErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnConnections(tRequest) + tErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnConnections(tRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, tRequest.GetAction(), tRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { if len(result.Response.VpnConnectionSet) == 0 { return nil @@ -540,12 +543,12 @@ func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface request := vpc.NewDeleteVpnGatewayRequest() request.VpnGatewayId = &gatewayId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DeleteVpnGateway(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteVpnGateway(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 }) @@ -556,21 +559,21 @@ func resourceTencentCloudVpnGatewayDelete(d *schema.ResourceData, meta interface //to get the status of gateway statRequest := vpc.NewDescribeVpnGatewaysRequest() statRequest.VpnGatewayIds = []*string{&gatewayId} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeVpnGateways(statRequest) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeVpnGateways(statRequest) if e != nil { ee, ok := e.(*errors.TencentCloudSDKError) if !ok { - return retryError(e) + return tccommon.RetryError(e) } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) return nil } else { 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 { //if not, quit diff --git a/tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes.go new file mode 100644 index 0000000000..6f356ffc70 --- /dev/null +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes.go @@ -0,0 +1,158 @@ +package vpn + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "fmt" + "log" + "strings" + + "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 ResourceTencentCloudVpnGatewayCcnRoutes() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpnGatewayCcnRoutesCreate, + Read: resourceTencentCloudVpnGatewayCcnRoutesRead, + Update: resourceTencentCloudVpnGatewayCcnRoutesUpdate, + Delete: resourceTencentCloudVpnGatewayCcnRoutesDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "vpn_gateway_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "VPN GATEWAY INSTANCE ID.", + }, + "route_id": { + Type: schema.TypeString, + ForceNew: true, + Required: true, + Description: "Route Id.", + }, + "status": { + Type: schema.TypeString, + Required: true, + Description: "Whether routing information is enabled. `ENABLE`: Enable Route, `DISABLE`: Disable Route.", + }, + "destination_cidr_block": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "Routing CIDR.", + }, + }, + } +} + +func resourceTencentCloudVpnGatewayCcnRoutesCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + vpnGwId string + routeId string + ) + + if v, ok := d.GetOk("vpn_gateway_id"); ok { + vpnGwId = v.(string) + } + + if v, ok := d.GetOk("route_id"); ok { + routeId = v.(string) + } + + d.SetId(vpnGwId + tccommon.FILED_SP + routeId) + + return resourceTencentCloudVpnGatewayCcnRoutesUpdate(d, meta) +} + +func resourceTencentCloudVpnGatewayCcnRoutesRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(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()) + } + vpnGatewayId := idSplit[0] + routeId := idSplit[1] + + vpnGatewayCcnRoutes, err := service.DescribeVpcVpnGatewayCcnRoutesById(ctx, vpnGatewayId, routeId) + if err != nil { + return err + } + + if vpnGatewayCcnRoutes == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpcVpnGatewayCcnRoutes` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("vpn_gateway_id", vpnGatewayId) + _ = d.Set("route_id", vpnGatewayCcnRoutes.RouteId) + _ = d.Set("status", vpnGatewayCcnRoutes.Status) + _ = d.Set("destination_cidr_block", vpnGatewayCcnRoutes.DestinationCidrBlock) + + return nil +} + +func resourceTencentCloudVpnGatewayCcnRoutesUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.update")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + request := vpc.NewModifyVpnGatewayCcnRoutesRequest() + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + vpnGatewayId := idSplit[0] + routeId := idSplit[1] + + request.VpnGatewayId = &vpnGatewayId + route := vpc.VpngwCcnRoutes{} + route.RouteId = &routeId + route.Status = helper.String(d.Get("status").(string)) + route.DestinationCidrBlock = helper.String(d.Get("destination_cidr_block").(string)) + request.Routes = append(request.Routes, &route) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyVpnGatewayCcnRoutes(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update vpnGatewayCcnRoutes failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudVpnGatewayCcnRoutesRead(d, meta) +} + +func resourceTencentCloudVpnGatewayCcnRoutesDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ccn_routes.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpn_gateway_ccn_routes_test.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes_test.go similarity index 83% rename from tencentcloud/resource_tc_vpn_gateway_ccn_routes_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes_test.go index 6334031124..cd51da5b9f 100644 --- a/tencentcloud/resource_tc_vpn_gateway_ccn_routes_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ccn_routes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpn_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 TestAccTencentCloudNeedFixVpnGatewayCcnRoutesResource_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: testAccVpcVpnGatewayCcnRoutes, diff --git a/tencentcloud/resource_tc_vpn_gateway_route.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_route.go similarity index 80% rename from tencentcloud/resource_tc_vpn_gateway_route.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway_route.go index 4c9b14714a..bef2fb9fe2 100644 --- a/tencentcloud/resource_tc_vpn_gateway_route.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_route.go @@ -1,6 +1,9 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "errors" "fmt" @@ -8,10 +11,11 @@ import ( "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 resourceTencentCloudVpnGatewayRoute() *schema.Resource { +func ResourceTencentCloudVpnGatewayRoute() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpnGatewayRouteCreate, Read: resourceTencentCloudVpnGatewayRouteRead, @@ -86,10 +90,10 @@ func VpnGatewayRoutePara() map[string]*schema.Schema { } func resourceTencentCloudVpnGatewayRouteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_route.create")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_route.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) vpnGatewayId := d.Get("vpn_gateway_id").(string) priority := int64(d.Get("priority").(int)) @@ -104,7 +108,7 @@ func resourceTencentCloudVpnGatewayRouteCreate(d *schema.ResourceData, meta inte route.Type = helper.String(routeType.(string)) } - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) err, routeList := vpcService.CreateVpnGatewayRoute(ctx, vpnGatewayId, []*vpc.VpnGatewayRoute{route}) if err != nil { log.Printf("[CRITAL]%s create VPN gateway route failed, reason:%s\n", logId, err.Error()) @@ -121,13 +125,13 @@ func resourceTencentCloudVpnGatewayRouteCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudVpnGatewayRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_route.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_route.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id = d.Id() ) compositeId := helper.IdParse(id) @@ -156,12 +160,12 @@ func resourceTencentCloudVpnGatewayRouteRead(d *schema.ResourceData, meta interf } func resourceTencentCloudVpnGatewayRouteUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_route.update")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_route.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id = d.Id() ) compositeId := helper.IdParse(id) @@ -186,12 +190,12 @@ func resourceTencentCloudVpnGatewayRouteUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudVpnGatewayRouteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_gateway_route.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_route.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) id = d.Id() ) compositeId := helper.IdParse(id) diff --git a/tencentcloud/resource_tc_vpn_gateway_route_test.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_route_test.go similarity index 78% rename from tencentcloud/resource_tc_vpn_gateway_route_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway_route_test.go index 0c26c313e3..ec8404d63b 100644 --- a/tencentcloud/resource_tc_vpn_gateway_route_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_route_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpn_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" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudVpnGatewayRoute_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: testAccCheckVpnGatewayRouteDestroy, Steps: []resource.TestStep{ { @@ -48,15 +52,15 @@ func TestAccTencentCloudVpnGatewayRoute_basic(t *testing.T) { } func testAccCheckVpnGatewayRouteDestroy(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpn_gateway_route" { continue } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) err, result := vpcService.DescribeVpnGatewayRoutes(ctx, ids[0], nil) if err != nil { log.Printf("[CRITAL]%s read VPN gateway route failed, reason:%s\n", logId, err.Error()) @@ -64,7 +68,7 @@ func testAccCheckVpnGatewayRouteDestroy(s *terraform.State) error { if !ok { return err } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { return nil } else { return err @@ -80,9 +84,9 @@ func testAccCheckVpnGatewayRouteDestroy(s *terraform.State) error { func testAccCheckVpnGatewayRouteExists(n string) resource.TestCheckFunc { return func(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 := svcvpc.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -91,7 +95,7 @@ func testAccCheckVpnGatewayRouteExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("VPN gateway route id is not set") } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) err, result := vpcService.DescribeVpnGatewayRoutes(ctx, ids[0], nil) if err != nil { log.Printf("[CRITAL]%s read VPN gateway failed, reason:%s\n", logId, err.Error()) @@ -104,7 +108,7 @@ func testAccCheckVpnGatewayRouteExists(n string) resource.TestCheckFunc { } } -const testVpnGatewayRouteCreate = defaultVpnDataSource + ` +const testVpnGatewayRouteCreate = tcacctest.DefaultVpnDataSource + ` # Create VPC data "tencentcloud_vpc_instances" "foo" { name = "Default-VPC" @@ -119,7 +123,7 @@ resource "tencentcloud_vpn_gateway_route" "route1" { status = "ENABLE" } ` -const testVpnGatewayRouteUpdate = defaultVpnDataSource + ` +const testVpnGatewayRouteUpdate = tcacctest.DefaultVpnDataSource + ` # Create VPC data "tencentcloud_vpc_instances" "foo" { name = "Default-VPC" diff --git a/tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert.go new file mode 100644 index 0000000000..cf13ac4b00 --- /dev/null +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert.go @@ -0,0 +1,168 @@ +package vpn + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "log" + + "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 ResourceTencentCloudVpnGatewaySslClientCert() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpnGatewaySslClientCertCreate, + Read: resourceTencentCloudVpnGatewaySslClientCertRead, + Update: resourceTencentCloudVpnGatewaySslClientCertUpdate, + Delete: resourceTencentCloudVpnGatewaySslClientCertDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "ssl_vpn_client_id": { + Required: true, + Type: schema.TypeString, + Description: "SSL-VPN-CLIENT Instance ID.", + }, + + "switch": { + Optional: true, + Type: schema.TypeString, + Default: "on", + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"on", "off"}), + Description: "`on`: Enable, `off`: Disable.", + }, + }, + } +} + +func resourceTencentCloudVpnGatewaySslClientCertCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.create")() + defer tccommon.InconsistentCheck(d, meta)() + + sslVpnClientId := d.Get("ssl_vpn_client_id").(string) + d.SetId(sslVpnClientId) + + return resourceTencentCloudVpnGatewaySslClientCertUpdate(d, meta) +} + +func resourceTencentCloudVpnGatewaySslClientCertRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + sslVpnClientId := d.Id() + + _, vpnGatewaySslClientCert, err := service.DescribeVpnSslClientById(ctx, sslVpnClientId) + if err != nil { + return err + } + + if vpnGatewaySslClientCert == nil { + d.SetId("") + log.Printf("[WARN]%s resource `VpnGatewaySslClientCert` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if vpnGatewaySslClientCert.SslVpnClientId != nil { + _ = d.Set("ssl_vpn_client_id", vpnGatewaySslClientCert.SslVpnClientId) + } + + if vpnGatewaySslClientCert.CertStatus != nil { + if *vpnGatewaySslClientCert.CertStatus == 1 { + _ = d.Set("switch", "on") + } + if *vpnGatewaySslClientCert.CertStatus == 2 { + _ = d.Set("switch", "off") + } + } + + return nil +} + +func resourceTencentCloudVpnGatewaySslClientCertUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var taskId *uint64 + + logId := tccommon.GetLogId(tccommon.ContextNil) + + sslVpnClientId := d.Id() + + certSwitch := d.Get("switch").(string) + + if certSwitch == "on" { + + var ( + request = vpc.NewEnableVpnGatewaySslClientCertRequest() + ) + + request.SslVpnClientId = &sslVpnClientId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableVpnGatewaySslClientCert(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()) + } + taskId = result.Response.TaskId + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s enable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err) + return err + } + + } else { + + var ( + request = vpc.NewDisableVpnGatewaySslClientCertRequest() + ) + + request.SslVpnClientId = &sslVpnClientId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableVpnGatewaySslClientCert(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()) + } + taskId = result.Response.TaskId + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s disable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err) + return err + } + } + + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := service.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) + if err != nil { + return err + } + + return resourceTencentCloudVpnGatewaySslClientCertRead(d, meta) +} + +func resourceTencentCloudVpnGatewaySslClientCertDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_vpn_gateway_ssl_client_cert_test.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert_test.go similarity index 93% rename from tencentcloud/resource_tc_vpn_gateway_ssl_client_cert_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert_test.go index 141537d25f..6637e913e2 100644 --- a/tencentcloud/resource_tc_vpn_gateway_ssl_client_cert_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_ssl_client_cert_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package vpn_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 TestAccTencentCloudVpnGatewaySslClientCertResource_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: testAccVpnGatewaySslClientCert, diff --git a/tencentcloud/resource_tc_vpn_gateway_test.go b/tencentcloud/services/vpn/resource_tc_vpn_gateway_test.go similarity index 81% rename from tencentcloud/resource_tc_vpn_gateway_test.go rename to tencentcloud/services/vpn/resource_tc_vpn_gateway_test.go index 5e75b2b46b..d8482f485b 100644 --- a/tencentcloud/resource_tc_vpn_gateway_test.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_gateway_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package vpn_test import ( "context" @@ -8,6 +8,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -22,18 +26,16 @@ func init() { } func testSweepVpnGateway(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 := svcvpc.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeVpnGwByFilter(ctx, nil) if err != nil { @@ -45,14 +47,14 @@ func testSweepVpnGateway(region string) error { vpnGwId := *v.VpnGatewayId vpnName := *v.VpnGatewayName now := time.Now() - createTime := stringTotime(*v.CreatedTime) + createTime := tccommon.StringToTime(*v.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(vpnName, keepResource) || strings.HasPrefix(vpnName, defaultResource) { + if strings.HasPrefix(vpnName, tcacctest.KeepResource) || strings.HasPrefix(vpnName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -67,8 +69,8 @@ func testSweepVpnGateway(region string) error { func TestAccTencentCloudVpnGatewayResource_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: testAccCheckVpnGatewayDestroy, Steps: []resource.TestStep{ { @@ -109,9 +111,9 @@ func TestAccTencentCloudVpnGatewayResource_basic(t *testing.T) { } func testAccCheckVpnGatewayDestroy(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_vpn_gateway" { continue @@ -119,12 +121,12 @@ func testAccCheckVpnGatewayDestroy(s *terraform.State) error { request := vpc.NewDescribeVpnGatewaysRequest() request.VpnGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeVpnGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeVpnGateways(request) if e != nil { ee, ok := e.(*errors.TencentCloudSDKError) if !ok { - return retryError(e) + return tccommon.RetryError(e) } if ee.Code == "ResourceNotFound" { log.Printf("[CRITAL]%s api[%s] success, request body [%s], reason[%s]\n", @@ -133,7 +135,7 @@ func testAccCheckVpnGatewayDestroy(s *terraform.State) error { } else { 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) } } response = result @@ -145,7 +147,7 @@ func testAccCheckVpnGatewayDestroy(s *terraform.State) error { if !ok { return err } - if ee.Code == VPCNotFound { + if ee.Code == svcvpc.VPCNotFound { return nil } else { return err @@ -162,7 +164,7 @@ func testAccCheckVpnGatewayDestroy(s *terraform.State) error { func testAccCheckVpnGatewayExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) rs, ok := s.RootModule().Resources[n] if !ok { @@ -171,16 +173,16 @@ func testAccCheckVpnGatewayExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("VPN gateway id is not set") } - conn := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn + conn := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn() request := vpc.NewDescribeVpnGatewaysRequest() request.VpnGatewayIds = []*string{&rs.Primary.ID} var response *vpc.DescribeVpnGatewaysResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := conn.UseVpcClient().DescribeVpnGateways(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) } response = result return nil diff --git a/tencentcloud/services/vpn/resource_tc_vpn_ssl_client.go b/tencentcloud/services/vpn/resource_tc_vpn_ssl_client.go new file mode 100644 index 0000000000..9882ce370f --- /dev/null +++ b/tencentcloud/services/vpn/resource_tc_vpn_ssl_client.go @@ -0,0 +1,148 @@ +package vpn + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + + "context" + "log" + + 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" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func ResourceTencentCloudVpnSslClient() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudVpnSslClientCreate, + Read: resourceTencentCloudVpnSslClientRead, + Delete: resourceTencentCloudVpnSslClientDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + + Schema: map[string]*schema.Schema{ + "ssl_vpn_server_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "VPN ssl server id.", + }, + "ssl_vpn_client_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + Description: "The name of ssl vpn client to be created.", + }, + }, + } +} + +func resourceTencentCloudVpnSslClientCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_client.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + request = vpc.NewCreateVpnGatewaySslClientRequest() + sslVpnServerId string + sslVpnClientName string + ) + + if v, ok := d.GetOk("ssl_vpn_server_id"); ok { + sslVpnServerId = v.(string) + request.SslVpnServerId = helper.String(sslVpnServerId) + } + if v, ok := d.GetOk("ssl_vpn_client_name"); ok { + sslVpnClientName = v.(string) + request.SslVpnClientName = helper.String(sslVpnClientName) + } + + var ( + taskId *uint64 + sslClientId *string + ) + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateVpnGatewaySslClient(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 tccommon.RetryError(err, tccommon.InternalError) + } + 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 + sslClientId = response.Response.SslVpnClientId + return nil + }); err != nil { + return err + } + + err := vpcService.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) + if err != nil { + return err + } + + d.SetId(*sslClientId) + + return resourceTencentCloudVpnSslClientRead(d, meta) +} + +func resourceTencentCloudVpnSslClientRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_client.read")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + sslClientId := d.Id() + vpcService := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + has, info, e := vpcService.DescribeVpnSslClientById(ctx, sslClientId) + if e != nil { + return tccommon.RetryError(e) + } + if !has { + d.SetId("") + return nil + } + + _ = d.Set("ssl_vpn_server_id", info.SslVpnServerId) + _ = d.Set("ssl_vpn_client_name", info.Name) + return nil + }) + if err != nil { + return err + } + return nil +} + +func resourceTencentCloudVpnSslClientDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_client.delete")() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + service := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) + + sslClientId := d.Id() + + taskId, err := service.DeleteVpnGatewaySslClient(ctx, sslClientId) + if err != nil { + return err + } + + err = service.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId))) + if err != nil { + return err + } + + return err +} diff --git a/tencentcloud/resource_tc_vpn_ssl_server.go b/tencentcloud/services/vpn/resource_tc_vpn_ssl_server.go similarity index 77% rename from tencentcloud/resource_tc_vpn_ssl_server.go rename to tencentcloud/services/vpn/resource_tc_vpn_ssl_server.go index 05c0817458..ef8b948fa0 100644 --- a/tencentcloud/resource_tc_vpn_ssl_server.go +++ b/tencentcloud/services/vpn/resource_tc_vpn_ssl_server.go @@ -1,10 +1,15 @@ -package tencentcloud +package vpn import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc" + "context" "log" 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" @@ -12,7 +17,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudVpnSslServer() *schema.Resource { +func ResourceTencentCloudVpnSslServer() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudVpnSslServerCreate, Read: resourceTencentCloudVpnSslServerRead, @@ -71,7 +76,7 @@ func resourceTencentCloudVpnSslServer() *schema.Resource { "compress": { Type: schema.TypeBool, Optional: true, - Default: FALSE, + Default: svccvm.FALSE, Description: "need compressed. Default value: False.", }, }, @@ -79,12 +84,12 @@ func resourceTencentCloudVpnSslServer() *schema.Resource { } func resourceTencentCloudVpnSslServerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_server.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_server.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = vpc.NewCreateVpnGatewaySslServerRequest() vpnGatewayId string ) @@ -126,13 +131,13 @@ func resourceTencentCloudVpnSslServerCreate(d *schema.ResourceData, meta interfa taskId *int64 sslServerId *string ) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := vpcService.client.UseVpcClient().CreateVpnGatewaySslServer(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateVpnGatewaySslServer(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, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -154,19 +159,19 @@ func resourceTencentCloudVpnSslServerCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudVpnSslServerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_server.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_server.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) sslServerId := d.Id() - vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { has, info, e := vpcService.DescribeVpnSslServerById(ctx, sslServerId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if !has { d.SetId("") @@ -197,14 +202,14 @@ func resourceTencentCloudVpnSslServerRead(d *schema.ResourceData, meta interface } func resourceTencentCloudVpnSslServerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_server.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_server.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 ( - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) request = vpc.NewModifyVpnGatewaySslServerRequest() ) @@ -256,13 +261,13 @@ func resourceTencentCloudVpnSslServerUpdate(d *schema.ResourceData, meta interfa var ( taskId *int64 ) - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := vpcService.client.UseVpcClient().ModifyVpnGatewaySslServer(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyVpnGatewaySslServer(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, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -281,12 +286,12 @@ func resourceTencentCloudVpnSslServerUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudVpnSslServerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpn_ssl_server.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_vpn_ssl_server.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 := svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn()) serverId := d.Id() diff --git a/tencentcloud/data_source_tc_waf_attack_log_histogram.go b/tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram.go similarity index 83% rename from tencentcloud/data_source_tc_waf_attack_log_histogram.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram.go index be3b893a08..6bed305639 100644 --- a/tencentcloud/data_source_tc_waf_attack_log_histogram.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafAttackLogHistogram() *schema.Resource { +func DataSourceTencentCloudWafAttackLogHistogram() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafAttackLogHistogramRead, Schema: map[string]*schema.Schema{ @@ -74,13 +77,13 @@ func dataSourceTencentCloudWafAttackLogHistogram() *schema.Resource { } func dataSourceTencentCloudWafAttackLogHistogramRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_attack_log_histogram.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_attack_log_histogram.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} data *waf.GetAttackHistogramResponseParams ) @@ -101,10 +104,10 @@ func dataSourceTencentCloudWafAttackLogHistogramRead(d *schema.ResourceData, met paramMap["QueryString"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafAttackLogHistogramByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result @@ -146,7 +149,7 @@ func dataSourceTencentCloudWafAttackLogHistogramRead(d *schema.ResourceData, met d.SetId(strconv.FormatInt(time.Now().Unix(), 10)) 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_waf_attack_log_histogram_test.go b/tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram_test.go similarity index 76% rename from tencentcloud/data_source_tc_waf_attack_log_histogram_test.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram_test.go index c44789921d..298d553f3d 100644 --- a/tencentcloud/data_source_tc_waf_attack_log_histogram_test.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_log_histogram_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAttackLogHistogramDataSource_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(testAccWafAttackLogHistogramDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_log_histogram.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_log_histogram.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_waf_attack_log_list.go b/tencentcloud/services/waf/data_source_tc_waf_attack_log_list.go similarity index 85% rename from tencentcloud/data_source_tc_waf_attack_log_list.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_log_list.go index 4034e5dcc2..c30cd21a6f 100644 --- a/tencentcloud/data_source_tc_waf_attack_log_list.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_log_list.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafAttackLogList() *schema.Resource { +func DataSourceTencentCloudWafAttackLogList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafAttackLogListRead, Schema: map[string]*schema.Schema{ @@ -92,13 +95,13 @@ func dataSourceTencentCloudWafAttackLogList() *schema.Resource { } func dataSourceTencentCloudWafAttackLogListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_attack_log_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_attack_log_list.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} attackLogList []*waf.AttackLogInfo ) @@ -131,10 +134,10 @@ func dataSourceTencentCloudWafAttackLogListRead(d *schema.ResourceData, meta int paramMap["Page"] = helper.IntInt64(v.(int)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafAttackLogListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } attackLogList = result @@ -176,7 +179,7 @@ func dataSourceTencentCloudWafAttackLogListRead(d *schema.ResourceData, meta int 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_waf_attack_log_list_test.go b/tencentcloud/services/waf/data_source_tc_waf_attack_log_list_test.go similarity index 77% rename from tencentcloud/data_source_tc_waf_attack_log_list_test.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_log_list_test.go index 1c8991ac6a..1f8fbdcb71 100644 --- a/tencentcloud/data_source_tc_waf_attack_log_list_test.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_log_list_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAttackLogListDataSource_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(testAccWafAttackLogListDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_log_list.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_log_list.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_waf_attack_overview.go b/tencentcloud/services/waf/data_source_tc_waf_attack_overview.go similarity index 83% rename from tencentcloud/data_source_tc_waf_attack_overview.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_overview.go index 463c36b22a..0cad3afe0c 100644 --- a/tencentcloud/data_source_tc_waf_attack_overview.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_overview.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafAttackOverview() *schema.Resource { +func DataSourceTencentCloudWafAttackOverview() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafAttackOverviewRead, Schema: map[string]*schema.Schema{ @@ -38,7 +41,7 @@ func dataSourceTencentCloudWafAttackOverview() *schema.Resource { "edition": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(EDITION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(EDITION_TYPE), Description: "support `sparta-waf`, `clb-waf`, otherwise not filter.", }, "instance_id": { @@ -91,13 +94,13 @@ func dataSourceTencentCloudWafAttackOverview() *schema.Resource { } func dataSourceTencentCloudWafAttackOverviewRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_attack_overview.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_attack_overview.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} attackOverview *waf.DescribeAttackOverviewResponseParams ) @@ -126,10 +129,10 @@ func dataSourceTencentCloudWafAttackOverviewRead(d *schema.ResourceData, meta in paramMap["InstanceID"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafAttackOverviewByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } attackOverview = result @@ -171,7 +174,7 @@ func dataSourceTencentCloudWafAttackOverviewRead(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), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_waf_attack_overview_test.go b/tencentcloud/services/waf/data_source_tc_waf_attack_overview_test.go similarity index 75% rename from tencentcloud/data_source_tc_waf_attack_overview_test.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_overview_test.go index 687950bd32..b3a738c1af 100644 --- a/tencentcloud/data_source_tc_waf_attack_overview_test.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_overview_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAttackOverviewDataSource_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(testAccWafAttackOverviewDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_overview.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_overview.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_waf_attack_total_count.go b/tencentcloud/services/waf/data_source_tc_waf_attack_total_count.go similarity index 76% rename from tencentcloud/data_source_tc_waf_attack_total_count.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_total_count.go index cd18f7a291..d307844340 100644 --- a/tencentcloud/data_source_tc_waf_attack_total_count.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_total_count.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafAttackTotalCount() *schema.Resource { +func DataSourceTencentCloudWafAttackTotalCount() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafAttackTotalCountRead, Schema: map[string]*schema.Schema{ @@ -51,13 +54,13 @@ func dataSourceTencentCloudWafAttackTotalCount() *schema.Resource { } func dataSourceTencentCloudWafAttackTotalCountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_attack_total_count.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_attack_total_count.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} attackTotalCount *waf.GetAttackTotalCountResponseParams ) @@ -78,10 +81,10 @@ func dataSourceTencentCloudWafAttackTotalCountRead(d *schema.ResourceData, meta paramMap["QueryString"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafAttackTotalCountByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } attackTotalCount = result @@ -99,7 +102,7 @@ func dataSourceTencentCloudWafAttackTotalCountRead(d *schema.ResourceData, meta d.SetId(strconv.FormatInt(time.Now().Unix(), 10)) 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_waf_attack_total_count_test.go b/tencentcloud/services/waf/data_source_tc_waf_attack_total_count_test.go similarity index 76% rename from tencentcloud/data_source_tc_waf_attack_total_count_test.go rename to tencentcloud/services/waf/data_source_tc_waf_attack_total_count_test.go index 2b070e1eee..944603ad89 100644 --- a/tencentcloud/data_source_tc_waf_attack_total_count_test.go +++ b/tencentcloud/services/waf/data_source_tc_waf_attack_total_count_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAttackTotalCountDataSource_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(testAccWafAttackTotalCountDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_total_count.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_attack_total_count.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_waf_ciphers.go b/tencentcloud/services/waf/data_source_tc_waf_ciphers.go similarity index 79% rename from tencentcloud/data_source_tc_waf_ciphers.go rename to tencentcloud/services/waf/data_source_tc_waf_ciphers.go index 5c61217c61..004c102035 100644 --- a/tencentcloud/data_source_tc_waf_ciphers.go +++ b/tencentcloud/services/waf/data_source_tc_waf_ciphers.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafCiphers() *schema.Resource { +func DataSourceTencentCloudWafCiphers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafCiphersRead, Schema: map[string]*schema.Schema{ @@ -47,20 +50,20 @@ func dataSourceTencentCloudWafCiphers() *schema.Resource { } func dataSourceTencentCloudWafCiphersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_ciphers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_ciphers.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ciphers []*waf.TLSCiphers ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafCiphersByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ciphers = result @@ -100,7 +103,7 @@ func dataSourceTencentCloudWafCiphersRead(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/services/waf/data_source_tc_waf_ciphers_test.go b/tencentcloud/services/waf/data_source_tc_waf_ciphers_test.go new file mode 100644 index 0000000000..6aef607bd6 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_ciphers_test.go @@ -0,0 +1,32 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafCiphersDataSource_basic -v +func TestAccTencentCloudNeedFixWafCiphersDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafCiphersDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_ciphers.example"), + ), + }, + }, + }) +} + +const testAccWafCiphersDataSource = ` +data "tencentcloud_waf_ciphers" "example" {} +` diff --git a/tencentcloud/data_source_tc_waf_domains.go b/tencentcloud/services/waf/data_source_tc_waf_domains.go similarity index 96% rename from tencentcloud/data_source_tc_waf_domains.go rename to tencentcloud/services/waf/data_source_tc_waf_domains.go index 19a29f70fe..7aaf4a4887 100644 --- a/tencentcloud/data_source_tc_waf_domains.go +++ b/tencentcloud/services/waf/data_source_tc_waf_domains.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafDomains() *schema.Resource { +func DataSourceTencentCloudWafDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafDomainsRead, Schema: map[string]*schema.Schema{ @@ -281,13 +284,13 @@ func dataSourceTencentCloudWafDomains() *schema.Resource { } func dataSourceTencentCloudWafDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_domains.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_domains.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domains []*waf.DomainInfo instanceID string domain string @@ -301,10 +304,10 @@ func dataSourceTencentCloudWafDomainsRead(d *schema.ResourceData, meta interface domain = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafDomainsByFilter(ctx, instanceID, domain) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } domains = result @@ -526,7 +529,7 @@ func dataSourceTencentCloudWafDomainsRead(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/services/waf/data_source_tc_waf_domains_test.go b/tencentcloud/services/waf/data_source_tc_waf_domains_test.go new file mode 100644 index 0000000000..cd4fc9d826 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_domains_test.go @@ -0,0 +1,35 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafDomainsDataSource_basic -v +func TestAccTencentCloudNeedFixWafDomainsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafDomainsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_domains.example"), + ), + }, + }, + }) +} + +const testAccWafDomainsDataSource = ` +data "tencentcloud_waf_domains" "example" { + instance_id = "waf_2kxtlbky01b3wceb" + domain = "tf.example.com" +} +` diff --git a/tencentcloud/data_source_tc_waf_find_domains.go b/tencentcloud/services/waf/data_source_tc_waf_find_domains.go similarity index 87% rename from tencentcloud/data_source_tc_waf_find_domains.go rename to tencentcloud/services/waf/data_source_tc_waf_find_domains.go index 44a4b1ed42..c5b5e34ad4 100644 --- a/tencentcloud/data_source_tc_waf_find_domains.go +++ b/tencentcloud/services/waf/data_source_tc_waf_find_domains.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafFindDomains() *schema.Resource { +func DataSourceTencentCloudWafFindDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafFindDomainsRead, Schema: map[string]*schema.Schema{ @@ -94,13 +97,13 @@ func dataSourceTencentCloudWafFindDomains() *schema.Resource { } func dataSourceTencentCloudWafFindDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_find_domains.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_find_domains.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} list []*waf.FindAllDomainDetail ) @@ -125,10 +128,10 @@ func dataSourceTencentCloudWafFindDomainsRead(d *schema.ResourceData, meta inter paramMap["Order"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafFindDomainsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } list = result @@ -188,7 +191,7 @@ func dataSourceTencentCloudWafFindDomainsRead(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/services/waf/data_source_tc_waf_find_domains_test.go b/tencentcloud/services/waf/data_source_tc_waf_find_domains_test.go new file mode 100644 index 0000000000..60273e3308 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_find_domains_test.go @@ -0,0 +1,37 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafFindDomainsDataSource_basic -v +func TestAccTencentCloudNeedFixWafFindDomainsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafFindDomainsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_find_domains.example"), + ), + }, + }, + }) +} + +const testAccWafFindDomainsDataSource = ` +data "tencentcloud_waf_find_domains" "example" { + key = "keyWord" + is_waf_domain = "1" + by = "FindTime" + order = "asc" +} +` diff --git a/tencentcloud/data_source_tc_waf_instance_qps_limit.go b/tencentcloud/services/waf/data_source_tc_waf_instance_qps_limit.go similarity index 82% rename from tencentcloud/data_source_tc_waf_instance_qps_limit.go rename to tencentcloud/services/waf/data_source_tc_waf_instance_qps_limit.go index 8faa1683be..ab8a9129ee 100644 --- a/tencentcloud/data_source_tc_waf_instance_qps_limit.go +++ b/tencentcloud/services/waf/data_source_tc_waf_instance_qps_limit.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafInstanceQpsLimit() *schema.Resource { +func DataSourceTencentCloudWafInstanceQpsLimit() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafInstanceQpsLimitRead, Schema: map[string]*schema.Schema{ @@ -67,13 +70,13 @@ func dataSourceTencentCloudWafInstanceQpsLimit() *schema.Resource { } func dataSourceTencentCloudWafInstanceQpsLimitRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_instance_qps_limit.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_instance_qps_limit.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} qpsData *waf.QpsData instanceId string ) @@ -88,10 +91,10 @@ func dataSourceTencentCloudWafInstanceQpsLimitRead(d *schema.ResourceData, meta paramMap["Type"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafInstanceQpsLimitByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } qpsData = result @@ -133,7 +136,7 @@ func dataSourceTencentCloudWafInstanceQpsLimitRead(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/services/waf/data_source_tc_waf_instance_qps_limit_test.go b/tencentcloud/services/waf/data_source_tc_waf_instance_qps_limit_test.go new file mode 100644 index 0000000000..73104c398a --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_instance_qps_limit_test.go @@ -0,0 +1,34 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudWafInstanceQpsLimitDataSource_basic -v +func TestAccTencentCloudWafInstanceQpsLimitDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafInstanceQpsLimitDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_instance_qps_limit.example"), + ), + }, + }, + }) +} + +const testAccWafInstanceQpsLimitDataSource = ` +data "tencentcloud_waf_instance_qps_limit" "example" { + instance_id = "waf_2kxtlbky00b3b4qz" +} +` diff --git a/tencentcloud/data_source_tc_waf_peak_points.go b/tencentcloud/services/waf/data_source_tc_waf_peak_points.go similarity index 90% rename from tencentcloud/data_source_tc_waf_peak_points.go rename to tencentcloud/services/waf/data_source_tc_waf_peak_points.go index eab683943b..cb80b2a21d 100644 --- a/tencentcloud/data_source_tc_waf_peak_points.go +++ b/tencentcloud/services/waf/data_source_tc_waf_peak_points.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafPeakPoints() *schema.Resource { +func DataSourceTencentCloudWafPeakPoints() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafPeakPointsRead, Schema: map[string]*schema.Schema{ @@ -43,7 +46,7 @@ func dataSourceTencentCloudWafPeakPoints() *schema.Resource { "metric_name": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(MetricNameList), + ValidateFunc: tccommon.ValidateAllowedStringValue(MetricNameList), Description: "Thirteen values are available: access-Peak qps trend chart; botAccess- bot peak qps trend chart; down-Downstream peak bandwidth trend chart; up-Upstream peak bandwidth trend chart; attack-Trend chart of total number of web attacks; cc-Trend chart of total number of CC attacks; StatusServerError-Trend chart of the number of status codes returned by WAF to the server; StatusClientError-Trend chart of the number of status codes returned by WAF to the client; StatusRedirect-Trend chart of the number of status codes returned by WAF to the client; StatusOk-Trend chart of the number of status codes returned by WAF to the client; UpstreamServerError-Trend chart of the number of status codes returned to WAF by the origin site; UpstreamClientError-Trend chart of the number of status codes returned to WAF by the origin site; UpstreamRedirect-Trend chart of the number of status codes returned to WAF by the origin site.", }, "points": { @@ -135,13 +138,13 @@ func dataSourceTencentCloudWafPeakPoints() *schema.Resource { } func dataSourceTencentCloudWafPeakPointsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_peak_points.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_peak_points.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} points []*waf.PeakPointsItem ) @@ -170,10 +173,10 @@ func dataSourceTencentCloudWafPeakPointsRead(d *schema.ResourceData, meta interf paramMap["MetricName"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafPeakPointsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } points = result @@ -255,7 +258,7 @@ func dataSourceTencentCloudWafPeakPointsRead(d *schema.ResourceData, meta interf 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_waf_peak_points_test.go b/tencentcloud/services/waf/data_source_tc_waf_peak_points_test.go similarity index 77% rename from tencentcloud/data_source_tc_waf_peak_points_test.go rename to tencentcloud/services/waf/data_source_tc_waf_peak_points_test.go index 1247f533a1..4d0c56f3ef 100644 --- a/tencentcloud/data_source_tc_waf_peak_points_test.go +++ b/tencentcloud/services/waf/data_source_tc_waf_peak_points_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafPeakPointsDataSource_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(testAccWafPeakPointsDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_waf_peak_points.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_peak_points.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_waf_ports.go b/tencentcloud/services/waf/data_source_tc_waf_ports.go similarity index 76% rename from tencentcloud/data_source_tc_waf_ports.go rename to tencentcloud/services/waf/data_source_tc_waf_ports.go index b700e529f5..16c2f4c087 100644 --- a/tencentcloud/data_source_tc_waf_ports.go +++ b/tencentcloud/services/waf/data_source_tc_waf_ports.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafPorts() *schema.Resource { +func DataSourceTencentCloudWafPorts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafPortsRead, Schema: map[string]*schema.Schema{ @@ -45,13 +48,13 @@ func dataSourceTencentCloudWafPorts() *schema.Resource { } func dataSourceTencentCloudWafPortsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_ports.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_ports.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ports *waf.DescribePortsResponseParams ) @@ -64,10 +67,10 @@ func dataSourceTencentCloudWafPortsRead(d *schema.ResourceData, meta interface{} paramMap["InstanceID"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafPortsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ports = result @@ -89,7 +92,7 @@ func dataSourceTencentCloudWafPortsRead(d *schema.ResourceData, meta interface{} d.SetId(*ports.RequestId) 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/waf/data_source_tc_waf_ports_test.go b/tencentcloud/services/waf/data_source_tc_waf_ports_test.go new file mode 100644 index 0000000000..6cc9ff0578 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_ports_test.go @@ -0,0 +1,35 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafPortsDataSource_basic -v +func TestAccTencentCloudNeedFixWafPortsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafPortsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_ports.example"), + ), + }, + }, + }) +} + +const testAccWafPortsDataSource = ` +data "tencentcloud_waf_ports" "example" { + edition = "clb-waf" + instance_id = "waf_2kxtlbky00b2v1fn" +} +` diff --git a/tencentcloud/data_source_tc_waf_tls_versions.go b/tencentcloud/services/waf/data_source_tc_waf_tls_versions.go similarity index 76% rename from tencentcloud/data_source_tc_waf_tls_versions.go rename to tencentcloud/services/waf/data_source_tc_waf_tls_versions.go index f3b9db85d4..3d330761f5 100644 --- a/tencentcloud/data_source_tc_waf_tls_versions.go +++ b/tencentcloud/services/waf/data_source_tc_waf_tls_versions.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafTlsVersions() *schema.Resource { +func DataSourceTencentCloudWafTlsVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafTlsVersionsRead, Schema: map[string]*schema.Schema{ @@ -42,20 +45,20 @@ func dataSourceTencentCloudWafTlsVersions() *schema.Resource { } func dataSourceTencentCloudWafTlsVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_tls_versions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_tls_versions.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tLS []*waf.TLSVersion ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafTlsVersionsByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tLS = result @@ -91,7 +94,7 @@ func dataSourceTencentCloudWafTlsVersionsRead(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/services/waf/data_source_tc_waf_tls_versions_test.go b/tencentcloud/services/waf/data_source_tc_waf_tls_versions_test.go new file mode 100644 index 0000000000..7f7236aa37 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_tls_versions_test.go @@ -0,0 +1,32 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafTlsVersionsDataSource_basic -v +func TestAccTencentCloudNeedFixWafTlsVersionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafTlsVersionsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_tls_versions.example"), + ), + }, + }, + }) +} + +const testAccWafTlsVersionsDataSource = ` +data "tencentcloud_waf_tls_versions" "example" {} +` diff --git a/tencentcloud/data_source_tc_waf_user_clb_regions.go b/tencentcloud/services/waf/data_source_tc_waf_user_clb_regions.go similarity index 79% rename from tencentcloud/data_source_tc_waf_user_clb_regions.go rename to tencentcloud/services/waf/data_source_tc_waf_user_clb_regions.go index 7701bd15fa..295cdc7f42 100644 --- a/tencentcloud/data_source_tc_waf_user_clb_regions.go +++ b/tencentcloud/services/waf/data_source_tc_waf_user_clb_regions.go @@ -1,16 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" ) -func dataSourceTencentCloudWafUserClbRegions() *schema.Resource { +func DataSourceTencentCloudWafUserClbRegions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafUserClbRegionsRead, Schema: map[string]*schema.Schema{ @@ -59,20 +61,20 @@ func dataSourceTencentCloudWafUserClbRegions() *schema.Resource { } func dataSourceTencentCloudWafUserClbRegionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_user_clb_regions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_user_clb_regions.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} userClbRegions *waf.DescribeUserClbWafRegionsResponseParams ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafUserClbRegionsByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } userClbRegions = result @@ -117,7 +119,7 @@ func dataSourceTencentCloudWafUserClbRegionsRead(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), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/services/waf/data_source_tc_waf_user_clb_regions_test.go b/tencentcloud/services/waf/data_source_tc_waf_user_clb_regions_test.go new file mode 100644 index 0000000000..a1f51ca446 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_user_clb_regions_test.go @@ -0,0 +1,32 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudWafUserClbRegionsDataSource_basic -v +func TestAccTencentCloudWafUserClbRegionsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafUserClbRegionsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_user_clb_regions.example"), + ), + }, + }, + }) +} + +const testAccWafUserClbRegionsDataSource = ` +data "tencentcloud_waf_user_clb_regions" "example" {} +` diff --git a/tencentcloud/data_source_tc_waf_user_domains.go b/tencentcloud/services/waf/data_source_tc_waf_user_domains.go similarity index 85% rename from tencentcloud/data_source_tc_waf_user_domains.go rename to tencentcloud/services/waf/data_source_tc_waf_user_domains.go index 5bda295294..baf7457b79 100644 --- a/tencentcloud/data_source_tc_waf_user_domains.go +++ b/tencentcloud/services/waf/data_source_tc_waf_user_domains.go @@ -1,15 +1,18 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafUserDomains() *schema.Resource { +func DataSourceTencentCloudWafUserDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafUserDomainsRead, Schema: map[string]*schema.Schema{ @@ -77,20 +80,20 @@ func dataSourceTencentCloudWafUserDomains() *schema.Resource { } func dataSourceTencentCloudWafUserDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_user_domains.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_user_domains.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usersInfo []*waf.UserDomainInfo ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafUserDomainsByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } usersInfo = result @@ -154,7 +157,7 @@ func dataSourceTencentCloudWafUserDomainsRead(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/services/waf/data_source_tc_waf_user_domains_test.go b/tencentcloud/services/waf/data_source_tc_waf_user_domains_test.go new file mode 100644 index 0000000000..6e34a4bd3e --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_user_domains_test.go @@ -0,0 +1,32 @@ +package waf_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWafUserDomainsDataSource_basic -v +func TestAccTencentCloudNeedFixWafUserDomainsDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafUserDomainsDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_user_domains.example"), + ), + }, + }, + }) +} + +const testAccWafUserDomainsDataSource = ` +data "tencentcloud_waf_user_domains" "example" {} +` diff --git a/tencentcloud/data_source_tc_waf_waf_infos.go b/tencentcloud/services/waf/data_source_tc_waf_waf_infos.go similarity index 89% rename from tencentcloud/data_source_tc_waf_waf_infos.go rename to tencentcloud/services/waf/data_source_tc_waf_waf_infos.go index ddef5edc26..998fa2ab0b 100644 --- a/tencentcloud/data_source_tc_waf_waf_infos.go +++ b/tencentcloud/services/waf/data_source_tc_waf_waf_infos.go @@ -1,29 +1,4 @@ -/* -Use this data source to query detailed information of waf waf_infos - -Example Usage - -```hcl -data "tencentcloud_waf_waf_infos" "example" { - params { - load_balancer_id = "lb-A8VF445" - } -} -``` - -Or - -```hcl -data "tencentcloud_waf_waf_infos" "example" { - params { - load_balancer_id = "lb-A8VF445" - listener_id = "lbl-nonkgvc2" - domain_id = "waf-MPtWPK5Q" - } -} -``` -*/ -package tencentcloud +package waf import ( "context" @@ -31,10 +6,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWafWafInfos() *schema.Resource { +func DataSourceTencentCloudWafWafInfos() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWafWafInfosRead, Schema: map[string]*schema.Schema{ @@ -165,13 +142,13 @@ func dataSourceTencentCloudWafWafInfos() *schema.Resource { } func dataSourceTencentCloudWafWafInfosRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_waf_waf_infos.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_waf_waf_infos.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} hostList []*waf.ClbHostResult ) @@ -202,10 +179,10 @@ func dataSourceTencentCloudWafWafInfosRead(d *schema.ResourceData, meta interfac paramMap["Params"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWafWafInfosByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } hostList = result @@ -299,7 +276,7 @@ func dataSourceTencentCloudWafWafInfosRead(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/services/waf/data_source_tc_waf_waf_infos.md b/tencentcloud/services/waf/data_source_tc_waf_waf_infos.md new file mode 100644 index 0000000000..09d56bc294 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_waf_infos.md @@ -0,0 +1,23 @@ +Use this data source to query detailed information of waf waf_infos + +Example Usage + +```hcl +data "tencentcloud_waf_waf_infos" "example" { + params { + load_balancer_id = "lb-A8VF445" + } +} +``` + +Or + +```hcl +data "tencentcloud_waf_waf_infos" "example" { + params { + load_balancer_id = "lb-A8VF445" + listener_id = "lbl-nonkgvc2" + domain_id = "waf-MPtWPK5Q" + } +} +``` diff --git a/tencentcloud/services/waf/data_source_tc_waf_waf_infos_test.go b/tencentcloud/services/waf/data_source_tc_waf_waf_infos_test.go new file mode 100644 index 0000000000..d9863fed28 --- /dev/null +++ b/tencentcloud/services/waf/data_source_tc_waf_waf_infos_test.go @@ -0,0 +1,38 @@ +package waf_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 TestAccTencentCloudNeedFixWafWafInfosDataSource_basic -v +func TestAccTencentCloudNeedFixWafWafInfosDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWafWafInfosDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_waf_waf_infos.example"), + ), + }, + }, + }) +} + +const testAccWafWafInfosDataSource = ` +data "tencentcloud_waf_waf_infos" "example" { + params { + load_balancer_id = "lb-A8VF445" + listener_id = "lbl-nonkgvc2" + domain_id = "waf-MPtWPK5Q" + } +} +` diff --git a/tencentcloud/extension_waf.go b/tencentcloud/services/waf/extension_waf.go similarity index 99% rename from tencentcloud/extension_waf.go rename to tencentcloud/services/waf/extension_waf.go index 16b358bf10..384164743f 100644 --- a/tencentcloud/extension_waf.go +++ b/tencentcloud/services/waf/extension_waf.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf const ( CUSTOM_RULE_ACTION_TYPE_1 = "1" diff --git a/tencentcloud/services/waf/resource_tc_waf_anti_fake.go b/tencentcloud/services/waf/resource_tc_waf_anti_fake.go new file mode 100644 index 0000000000..1adc04592a --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_anti_fake.go @@ -0,0 +1,296 @@ +package waf + +import ( + "context" + "fmt" + "log" + "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" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafAntiFake() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafAntiFakeCreate, + Read: resourceTencentCloudWafAntiFakeRead, + Update: resourceTencentCloudWafAntiFakeUpdate, + Delete: resourceTencentCloudWafAntiFakeDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "domain": { + Required: true, + Type: schema.TypeString, + Description: "Domain.", + }, + "name": { + Required: true, + Type: schema.TypeString, + Description: "Name.", + }, + "uri": { + Required: true, + Type: schema.TypeString, + Description: "Uri.", + }, + "status": { + Optional: true, + Type: schema.TypeInt, + Default: ANTI_FAKE_URL_STATUS_1, + ValidateFunc: tccommon.ValidateAllowedIntValue(ANTI_FAKE_URL_STATUS), + Description: "status. 0: Turn off rules and log switches, 1: Turn on the rule switch and Turn off the log switch; 2: Turn off the rule switch and turn on the log switch;3: Turn on the log switch.", + }, + "rule_id": { + Computed: true, + Type: schema.TypeInt, + Description: "rule id.", + }, + "protocol": { + Computed: true, + Type: schema.TypeString, + Description: "protocol.", + }, + }, + } +} + +func resourceTencentCloudWafAntiFakeCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_fake.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewAddAntiFakeUrlRequest() + response = waf.NewAddAntiFakeUrlResponse() + id string + domain string + ) + + if v, ok := d.GetOk("domain"); ok { + request.Domain = helper.String(v.(string)) + domain = v.(string) + } + + if v, ok := d.GetOk("name"); ok { + request.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("uri"); ok { + request.Uri = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().AddAntiFakeUrl(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 waf antiFake failed, reason:%+v", logId, err) + return err + } + + id = *response.Response.Id + d.SetId(strings.Join([]string{id, domain}, tccommon.FILED_SP)) + + // set status + if v, ok := d.GetOkExists("status"); ok { + status := v.(int) + if status != API_SAFE_STATUS_1 { + modifyAntiFakeUrlStatusRequest := waf.NewModifyAntiFakeUrlStatusRequest() + idUInt, _ := strconv.ParseUint(id, 10, 64) + modifyAntiFakeUrlStatusRequest.Ids = common.Uint64Ptrs([]uint64{idUInt}) + modifyAntiFakeUrlStatusRequest.Domain = &domain + modifyAntiFakeUrlStatusRequest.Status = helper.IntUint64(v.(int)) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiFakeUrlStatus(modifyAntiFakeUrlStatusRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlStatusRequest.GetAction(), modifyAntiFakeUrlStatusRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update waf antiFake status failed, reason:%+v", logId, err) + return err + } + } + } + + return resourceTencentCloudWafAntiFakeRead(d, meta) +} + +func resourceTencentCloudWafAntiFakeRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_fake.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + id := idSplit[0] + domain := idSplit[1] + + antiFake, err := service.DescribeWafAntiFakeById(ctx, id, domain) + if err != nil { + return err + } + + if antiFake == nil { + d.SetId("") + log.Printf("[WARN]%s resource `WafAntiFake` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if antiFake.Domain != nil { + _ = d.Set("domain", antiFake.Domain) + } + + if antiFake.Name != nil { + _ = d.Set("name", antiFake.Name) + } + + if antiFake.Uri != nil { + _ = d.Set("uri", antiFake.Uri) + } + + if antiFake.Status != nil { + _ = d.Set("status", antiFake.Status) + } + + if antiFake.Id != nil { + _ = d.Set("rule_id", antiFake.Id) + } + + if antiFake.Protocol != nil { + _ = d.Set("protocol", antiFake.Protocol) + } + + return nil +} + +func resourceTencentCloudWafAntiFakeUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_fake.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + modifyAntiFakeUrlRequest = waf.NewModifyAntiFakeUrlRequest() + modifyAntiFakeUrlStatusRequest = waf.NewModifyAntiFakeUrlStatusRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + id := idSplit[0] + domain := idSplit[1] + + immutableArgs := []string{"domain"} + + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + + idInt, _ := strconv.ParseInt(id, 10, 64) + modifyAntiFakeUrlRequest.Id = &idInt + modifyAntiFakeUrlRequest.Domain = &domain + + if v, ok := d.GetOk("name"); ok { + modifyAntiFakeUrlRequest.Name = helper.String(v.(string)) + } + + if v, ok := d.GetOk("uri"); ok { + modifyAntiFakeUrlRequest.Uri = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiFakeUrl(modifyAntiFakeUrlRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlRequest.GetAction(), modifyAntiFakeUrlRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update waf antiFake failed, reason:%+v", logId, err) + return err + } + + if d.HasChange("status") { + if v, ok := d.GetOkExists("status"); ok { + modifyAntiFakeUrlStatusRequest.Status = helper.IntUint64(v.(int)) + } + + idUInt, _ := strconv.ParseUint(id, 10, 64) + modifyAntiFakeUrlStatusRequest.Ids = common.Uint64Ptrs([]uint64{idUInt}) + modifyAntiFakeUrlStatusRequest.Domain = &domain + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiFakeUrlStatus(modifyAntiFakeUrlStatusRequest) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiFakeUrlStatusRequest.GetAction(), modifyAntiFakeUrlStatusRequest.ToJsonString(), result.ToJsonString()) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update waf antiFake status failed, reason:%+v", logId, err) + return err + } + } + + return resourceTencentCloudWafAntiFakeRead(d, meta) +} + +func resourceTencentCloudWafAntiFakeDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_fake.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + id := idSplit[0] + domain := idSplit[1] + + if err := service.DeleteWafAntiFakeById(ctx, id, domain); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_waf_anti_fake_test.go b/tencentcloud/services/waf/resource_tc_waf_anti_fake_test.go similarity index 91% rename from tencentcloud/resource_tc_waf_anti_fake_test.go rename to tencentcloud/services/waf/resource_tc_waf_anti_fake_test.go index f4f5927f2c..4df61521a9 100644 --- a/tencentcloud/resource_tc_waf_anti_fake_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_anti_fake_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAntiFakeResource_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: testAccWafAntiFake, diff --git a/tencentcloud/resource_tc_waf_anti_info_leak.go b/tencentcloud/services/waf/resource_tc_waf_anti_info_leak.go similarity index 77% rename from tencentcloud/resource_tc_waf_anti_info_leak.go rename to tencentcloud/services/waf/resource_tc_waf_anti_info_leak.go index 5811e32be6..a335882ebd 100644 --- a/tencentcloud/resource_tc_waf_anti_info_leak.go +++ b/tencentcloud/services/waf/resource_tc_waf_anti_info_leak.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafAntiInfoLeak() *schema.Resource { +func ResourceTencentCloudWafAntiInfoLeak() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafAntiInfoLeakCreate, Read: resourceTencentCloudWafAntiInfoLeakRead, @@ -36,7 +39,7 @@ func resourceTencentCloudWafAntiInfoLeak() *schema.Resource { "action_type": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(ANTI_INFO_LEAK_ACTION_TYPE), + ValidateFunc: tccommon.ValidateAllowedIntValue(ANTI_INFO_LEAK_ACTION_TYPE), Description: "Rule Action. 0: alarm; 1: replacement; 2: only displaying the first four digits; 3: only displaying the last four digits; 4: blocking.", }, "strategies": { @@ -48,7 +51,7 @@ func resourceTencentCloudWafAntiInfoLeak() *schema.Resource { "field": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(STRATEGIES_FIELD), + ValidateFunc: tccommon.ValidateAllowedStringValue(STRATEGIES_FIELD), Description: "Matching Fields. support: returncode, keywords, information.", }, "content": { @@ -68,7 +71,7 @@ func resourceTencentCloudWafAntiInfoLeak() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: ANTI_INFO_LEAK_RULE_STATUS_1, - ValidateFunc: validateAllowedIntValue(ANTI_INFO_LEAK_RULE_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(ANTI_INFO_LEAK_RULE_STATUS), Description: "status.", }, }, @@ -76,11 +79,11 @@ func resourceTencentCloudWafAntiInfoLeak() *schema.Resource { } func resourceTencentCloudWafAntiInfoLeakCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_info_leak.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_info_leak.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewAddAntiInfoLeakRulesRequest() response = waf.NewAddAntiInfoLeakRulesResponse() ruleId string @@ -121,10 +124,10 @@ func resourceTencentCloudWafAntiInfoLeakCreate(d *schema.ResourceData, meta inte request.Uri = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().AddAntiInfoLeakRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().AddAntiInfoLeakRules(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -140,7 +143,7 @@ func resourceTencentCloudWafAntiInfoLeakCreate(d *schema.ResourceData, meta inte ruleIdInt := *response.Response.RuleId ruleId = strconv.FormatInt(ruleIdInt, 10) - d.SetId(strings.Join([]string{ruleId, domain}, FILED_SP)) + d.SetId(strings.Join([]string{ruleId, domain}, tccommon.FILED_SP)) // set status if v, ok := d.GetOkExists("status"); ok { @@ -151,10 +154,10 @@ func resourceTencentCloudWafAntiInfoLeakCreate(d *schema.ResourceData, meta inte modifyAntiInfoLeakRuleStatusRequest.Domain = &domain modifyAntiInfoLeakRuleStatusRequest.RuleId = &idUInt modifyAntiInfoLeakRuleStatusRequest.Status = helper.IntUint64(v.(int)) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiInfoLeakRuleStatus(modifyAntiInfoLeakRuleStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiInfoLeakRuleStatus(modifyAntiInfoLeakRuleStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiInfoLeakRuleStatusRequest.GetAction(), modifyAntiInfoLeakRuleStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -172,16 +175,16 @@ func resourceTencentCloudWafAntiInfoLeakCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudWafAntiInfoLeakRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_info_leak.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_info_leak.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -241,11 +244,11 @@ func resourceTencentCloudWafAntiInfoLeakRead(d *schema.ResourceData, meta interf } func resourceTencentCloudWafAntiInfoLeakUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_info_leak.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_info_leak.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) modifyAntiInfoLeakRulesRequest = waf.NewModifyAntiInfoLeakRulesRequest() modifyAntiInfoLeakRuleStatusRequest = waf.NewModifyAntiInfoLeakRuleStatusRequest() ) @@ -258,7 +261,7 @@ func resourceTencentCloudWafAntiInfoLeakUpdate(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) } @@ -294,10 +297,10 @@ func resourceTencentCloudWafAntiInfoLeakUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiInfoLeakRules(modifyAntiInfoLeakRulesRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiInfoLeakRules(modifyAntiInfoLeakRulesRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiInfoLeakRulesRequest.GetAction(), modifyAntiInfoLeakRulesRequest.ToJsonString(), result.ToJsonString()) } @@ -317,10 +320,10 @@ func resourceTencentCloudWafAntiInfoLeakUpdate(d *schema.ResourceData, meta inte modifyAntiInfoLeakRuleStatusRequest.Domain = &domain modifyAntiInfoLeakRuleStatusRequest.RuleId = &ruleIdUInt - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyAntiInfoLeakRuleStatus(modifyAntiInfoLeakRuleStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAntiInfoLeakRuleStatus(modifyAntiInfoLeakRuleStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyAntiInfoLeakRuleStatusRequest.GetAction(), modifyAntiInfoLeakRuleStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -337,16 +340,16 @@ func resourceTencentCloudWafAntiInfoLeakUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudWafAntiInfoLeakDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_anti_info_leak.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_anti_info_leak.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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_waf_anti_info_leak_test.go b/tencentcloud/services/waf/resource_tc_waf_anti_info_leak_test.go similarity index 89% rename from tencentcloud/resource_tc_waf_anti_info_leak_test.go rename to tencentcloud/services/waf/resource_tc_waf_anti_info_leak_test.go index 6d1bf21e24..019e67a480 100644 --- a/tencentcloud/resource_tc_waf_anti_info_leak_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_anti_info_leak_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAntiInfoLeakResource_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: testAccWafAntiInfoLeak, diff --git a/tencentcloud/resource_tc_waf_auto_deny_rules.go b/tencentcloud/services/waf/resource_tc_waf_auto_deny_rules.go similarity index 75% rename from tencentcloud/resource_tc_waf_auto_deny_rules.go rename to tencentcloud/services/waf/resource_tc_waf_auto_deny_rules.go index fe76884806..bfa43b641c 100644 --- a/tencentcloud/resource_tc_waf_auto_deny_rules.go +++ b/tencentcloud/services/waf/resource_tc_waf_auto_deny_rules.go @@ -1,17 +1,20 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafAutoDenyRules() *schema.Resource { +func ResourceTencentCloudWafAutoDenyRules() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafAutoDenyRulesCreate, Read: resourceTencentCloudWafAutoDenyRulesRead, @@ -30,21 +33,21 @@ func resourceTencentCloudWafAutoDenyRules() *schema.Resource { Required: true, ForceNew: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(2, 100), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 100), Description: "The threshold number of attacks that triggers IP autodeny, ranging from 2 to 100 times.", }, "time_threshold": { Required: true, ForceNew: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(1, 60), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 60), Description: "IP autodeny statistical time, ranging from 1-60 minutes.", }, "deny_time_threshold": { Required: true, ForceNew: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(5, 360), + ValidateFunc: tccommon.ValidateIntegerInRange(5, 360), Description: "The IP autodeny time after triggering the IP autodeny, ranging from 5 to 360 minutes.", }, }, @@ -52,11 +55,11 @@ func resourceTencentCloudWafAutoDenyRules() *schema.Resource { } func resourceTencentCloudWafAutoDenyRulesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_auto_deny_rules.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_auto_deny_rules.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewModifyWafAutoDenyRulesRequest() domain string ) @@ -80,10 +83,10 @@ func resourceTencentCloudWafAutoDenyRulesCreate(d *schema.ResourceData, meta int request.DefenseStatus = helper.IntInt64(1) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyWafAutoDenyRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyWafAutoDenyRules(request) if e != nil { - return retryError(e) + return tccommon.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,13 +110,13 @@ func resourceTencentCloudWafAutoDenyRulesCreate(d *schema.ResourceData, meta int } func resourceTencentCloudWafAutoDenyRulesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_auto_deny_rules.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_auto_deny_rules.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domain = d.Id() ) @@ -146,11 +149,11 @@ func resourceTencentCloudWafAutoDenyRulesRead(d *schema.ResourceData, meta inter } func resourceTencentCloudWafAutoDenyRulesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_auto_deny_rules.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_auto_deny_rules.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewModifyWafAutoDenyRulesRequest() domain = d.Id() ) @@ -169,10 +172,10 @@ func resourceTencentCloudWafAutoDenyRulesDelete(d *schema.ResourceData, meta int request.Domain = &domain request.DefenseStatus = helper.IntInt64(0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyWafAutoDenyRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyWafAutoDenyRules(request) if e != nil { - return retryError(e) + return tccommon.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_waf_auto_deny_rules_test.go b/tencentcloud/services/waf/resource_tc_waf_auto_deny_rules_test.go similarity index 87% rename from tencentcloud/resource_tc_waf_auto_deny_rules_test.go rename to tencentcloud/services/waf/resource_tc_waf_auto_deny_rules_test.go index 7e5ccc858c..deb0a9056c 100644 --- a/tencentcloud/resource_tc_waf_auto_deny_rules_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_auto_deny_rules_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafAutoDenyRulesResource_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: testAccWafAutoDenyRules, diff --git a/tencentcloud/resource_tc_waf_cc.go b/tencentcloud/services/waf/resource_tc_waf_cc.go similarity index 84% rename from tencentcloud/resource_tc_waf_cc.go rename to tencentcloud/services/waf/resource_tc_waf_cc.go index 7585a19b76..ce1390dd9f 100644 --- a/tencentcloud/resource_tc_waf_cc.go +++ b/tencentcloud/services/waf/resource_tc_waf_cc.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafCc() *schema.Resource { +func ResourceTencentCloudWafCc() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafCcCreate, Read: resourceTencentCloudWafCcRead, @@ -84,7 +87,7 @@ func resourceTencentCloudWafCc() *schema.Resource { "edition": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(EDITION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(EDITION_TYPE), Description: "WAF edition. clb-waf means clb-waf, sparta-waf means saas-waf.", }, "type": { @@ -113,11 +116,11 @@ func resourceTencentCloudWafCc() *schema.Resource { } func resourceTencentCloudWafCcCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewUpsertCCRuleRequest() response = waf.NewUpsertCCRuleResponse() domain string @@ -196,10 +199,10 @@ func resourceTencentCloudWafCcCreate(d *schema.ResourceData, meta interface{}) e } request.RuleId = helper.IntInt64(0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertCCRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertCCRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -220,22 +223,22 @@ func resourceTencentCloudWafCcCreate(d *schema.ResourceData, meta interface{}) e ruleIdInt := *response.Response.RuleId ruleId = strconv.FormatInt(ruleIdInt, 10) - d.SetId(strings.Join([]string{domain, ruleId, name}, FILED_SP)) + d.SetId(strings.Join([]string{domain, ruleId, name}, tccommon.FILED_SP)) return resourceTencentCloudWafCcRead(d, meta) } func resourceTencentCloudWafCcRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -328,11 +331,11 @@ func resourceTencentCloudWafCcRead(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudWafCcUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewUpsertCCRuleRequest() ) @@ -344,7 +347,7 @@ func resourceTencentCloudWafCcUpdate(d *schema.ResourceData, meta interface{}) e } } - 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) } @@ -417,10 +420,10 @@ func resourceTencentCloudWafCcUpdate(d *schema.ResourceData, meta interface{}) e } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertCCRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertCCRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -437,16 +440,16 @@ func resourceTencentCloudWafCcUpdate(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudWafCcDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } diff --git a/tencentcloud/services/waf/resource_tc_waf_cc_auto_status.go b/tencentcloud/services/waf/resource_tc_waf_cc_auto_status.go new file mode 100644 index 0000000000..7e54c6355d --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_cc_auto_status.go @@ -0,0 +1,153 @@ +package waf + +import ( + "context" + "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" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafCcAutoStatus() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafCcAutoStatusCreate, + Read: resourceTencentCloudWafCcAutoStatusRead, + Delete: resourceTencentCloudWafCcAutoStatusDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "domain": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Domain.", + }, + "edition": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + ValidateFunc: tccommon.ValidateAllowedStringValue(EDITION_TYPE), + Description: "Waf edition. clb-waf means clb-waf, sparta-waf means saas-waf.", + }, + "status": { + Computed: true, + Type: schema.TypeInt, + Description: "cc auto status, 1 means open, 0 means close.", + }, + }, + } +} + +func resourceTencentCloudWafCcAutoStatusCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_auto_status.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewUpsertCCAutoStatusRequest() + domain string + edition string + ) + + if v, ok := d.GetOk("domain"); ok { + request.Domain = helper.String(v.(string)) + domain = v.(string) + } + + if v, ok := d.GetOk("edition"); ok { + request.Edition = helper.String(v.(string)) + edition = v.(string) + } + + request.Value = helper.IntInt64(1) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertCCAutoStatus(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 waf CcAutoStatus failed, reason:%+v", logId, err) + return err + } + + d.SetId(strings.Join([]string{domain, edition}, tccommon.FILED_SP)) + + return resourceTencentCloudWafCcAutoStatusRead(d, meta) +} + +func resourceTencentCloudWafCcAutoStatusRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_auto_status.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + domain := idSplit[0] + edition := idSplit[1] + + CcAutoStatus, err := service.DescribeWafCcAutoStatusById(ctx, domain) + if err != nil { + return err + } + + if CcAutoStatus == nil { + d.SetId("") + log.Printf("[WARN]%s resource `WafCcAutoStatus` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("domain", domain) + _ = d.Set("edition", edition) + + if CcAutoStatus.AutoCCSwitch != nil { + _ = d.Set("status", CcAutoStatus.AutoCCSwitch) + } + + return nil +} + +func resourceTencentCloudWafCcAutoStatusDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_auto_status.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", idSplit) + } + domain := idSplit[0] + edition := idSplit[1] + + if err := service.DeleteWafCcAutoStatusById(ctx, domain, edition); err != nil { + return err + } + + return nil +} diff --git a/tencentcloud/resource_tc_waf_cc_auto_status_test.go b/tencentcloud/services/waf/resource_tc_waf_cc_auto_status_test.go similarity index 85% rename from tencentcloud/resource_tc_waf_cc_auto_status_test.go rename to tencentcloud/services/waf/resource_tc_waf_cc_auto_status_test.go index 57adde3d76..0bbef2facf 100644 --- a/tencentcloud/resource_tc_waf_cc_auto_status_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_cc_auto_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafCcAutoStatusResource_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: testAccWafCcAutoStatus, diff --git a/tencentcloud/resource_tc_waf_cc_session.go b/tencentcloud/services/waf/resource_tc_waf_cc_session.go similarity index 79% rename from tencentcloud/resource_tc_waf_cc_session.go rename to tencentcloud/services/waf/resource_tc_waf_cc_session.go index 15ec582f1d..8d9c8adc9e 100644 --- a/tencentcloud/resource_tc_waf_cc_session.go +++ b/tencentcloud/services/waf/resource_tc_waf_cc_session.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafCcSession() *schema.Resource { +func ResourceTencentCloudWafCcSession() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafCcSessionCreate, Read: resourceTencentCloudWafCcSessionRead, @@ -61,7 +64,7 @@ func resourceTencentCloudWafCcSession() *schema.Resource { "edition": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(EDITION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(EDITION_TYPE), Description: "Waf edition. clb-waf means clb-waf, sparta-waf means saas-waf.", }, "session_name": { @@ -79,11 +82,11 @@ func resourceTencentCloudWafCcSession() *schema.Resource { } func resourceTencentCloudWafCcSessionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_session.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_session.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewUpsertSessionRequest() response = waf.NewUpsertSessionResponse() domain string @@ -131,10 +134,10 @@ func resourceTencentCloudWafCcSessionCreate(d *schema.ResourceData, meta interfa request.SessionID = helper.IntInt64(-1) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertSession(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertSession(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -154,22 +157,22 @@ func resourceTencentCloudWafCcSessionCreate(d *schema.ResourceData, meta interfa sessionIDInt := *response.Response.SessionID sessionID = strconv.FormatInt(sessionIDInt, 10) - d.SetId(strings.Join([]string{domain, edition, sessionID}, FILED_SP)) + d.SetId(strings.Join([]string{domain, edition, sessionID}, tccommon.FILED_SP)) return resourceTencentCloudWafCcSessionRead(d, meta) } func resourceTencentCloudWafCcSessionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_session.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_session.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -227,11 +230,11 @@ func resourceTencentCloudWafCcSessionRead(d *schema.ResourceData, meta interface } func resourceTencentCloudWafCcSessionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_session.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_session.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewUpsertSessionRequest() ) @@ -243,7 +246,7 @@ func resourceTencentCloudWafCcSessionUpdate(d *schema.ResourceData, meta interfa } } - 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) } @@ -284,10 +287,10 @@ func resourceTencentCloudWafCcSessionUpdate(d *schema.ResourceData, meta interfa request.SessionName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertSession(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertSession(request) if e != nil { - return retryError(e) + return tccommon.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,16 +307,16 @@ func resourceTencentCloudWafCcSessionUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudWafCcSessionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_cc_session.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_cc_session.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } diff --git a/tencentcloud/resource_tc_waf_cc_session_test.go b/tencentcloud/services/waf/resource_tc_waf_cc_session_test.go similarity index 95% rename from tencentcloud/resource_tc_waf_cc_session_test.go rename to tencentcloud/services/waf/resource_tc_waf_cc_session_test.go index 1230ca3b7a..3812e46303 100644 --- a/tencentcloud/resource_tc_waf_cc_session_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_cc_session_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafCcSessionResource_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: testAccWafCcSession, diff --git a/tencentcloud/resource_tc_waf_cc_test.go b/tencentcloud/services/waf/resource_tc_waf_cc_test.go similarity index 94% rename from tencentcloud/resource_tc_waf_cc_test.go rename to tencentcloud/services/waf/resource_tc_waf_cc_test.go index 7d2ba911f5..a5d1970452 100644 --- a/tencentcloud/resource_tc_waf_cc_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_cc_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafCcResource_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: testAccWafCc, diff --git a/tencentcloud/resource_tc_waf_clb_domain.go b/tencentcloud/services/waf/resource_tc_waf_clb_domain.go similarity index 83% rename from tencentcloud/resource_tc_waf_clb_domain.go rename to tencentcloud/services/waf/resource_tc_waf_clb_domain.go index 7a10a42a09..33fddd0a14 100644 --- a/tencentcloud/resource_tc_waf_clb_domain.go +++ b/tencentcloud/services/waf/resource_tc_waf_clb_domain.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafClbDomain() *schema.Resource { +func ResourceTencentCloudWafClbDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafClbDomainCreate, Read: resourceTencentCloudWafClbDomainRead, @@ -38,21 +41,21 @@ func resourceTencentCloudWafClbDomain() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: CLB_DOMAIN_STATUS_1, - ValidateFunc: validateAllowedIntValue(CLB_DOMAIN_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(CLB_DOMAIN_STATUS), Description: "Binding status between waf and LB, 0:not bind, 1:binding.", }, "engine": { Type: schema.TypeInt, Optional: true, Default: CLB_DOMAIN_ENGINE_20, - ValidateFunc: validateAllowedIntValue(CLB_DOMAIN_ENGINE), + ValidateFunc: tccommon.ValidateAllowedIntValue(CLB_DOMAIN_ENGINE), Description: "Protection Status: 10: Rule Observation&&AI Off Mode, 11: Rule Observation&&AI Observation Mode, 12: Rule Observation&&AI Interception Mode, 20: Rule Interception&&AI Off Mode, 21: Rule Interception&&AI Observation Mode, 22: Rule Interception&&AI Interception Mode, Default 20.", }, "is_cdn": { Type: schema.TypeInt, Optional: true, Default: ISCDN_0, - ValidateFunc: validateAllowedIntValue(ISCDN_STSTUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(ISCDN_STSTUS), Description: "Whether a proxy has been enabled before WAF, 0 no deployment, 1 deployment and use first IP in X-Forwarded-For as client IP, 2 deployment and use remote_addr as client IP, 3 deployment and use values of custom headers as client IP.", }, "load_balancer_set": { @@ -128,35 +131,35 @@ func resourceTencentCloudWafClbDomain() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: FLOW_MODE_0, - ValidateFunc: validateAllowedIntValue(FLOW_MODE_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(FLOW_MODE_STATUS), Description: "WAF traffic mode, 1 cleaning mode, 0 mirroring mode.", }, "cls_status": { Type: schema.TypeInt, Optional: true, Default: CLS_STATUS_0, - ValidateFunc: validateAllowedIntValue(CLS_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(CLS_STATUS), Description: "Whether to enable access logs, 1 enable, 0 disable.", }, "bot_status": { Type: schema.TypeInt, Optional: true, Default: BOT_STATUS_0, - ValidateFunc: validateAllowedIntValue(BOT_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(BOT_STATUS), Description: "Whether to enable bot, 1 enable, 0 disable.", }, "api_safe_status": { Type: schema.TypeInt, Optional: true, Default: API_SAFE_STATUS_0, - ValidateFunc: validateAllowedIntValue(API_SAFE_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(API_SAFE_STATUS), Description: "Whether to enable api safe, 1 enable, 0 disable.", }, "alb_type": { Type: schema.TypeString, Optional: true, Default: ALB_TYPE_CLB, - ValidateFunc: validateAllowedStringValue(ALB_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(ALB_TYPES), Description: "Load balancer type: clb, apisix or tsegw, default clb.", }, "ip_headers": { @@ -175,13 +178,13 @@ func resourceTencentCloudWafClbDomain() *schema.Resource { } func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_domain.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = waf.NewCreateHostRequest() instanceID string domain string @@ -301,10 +304,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa describeHostLimitRequest.Domain = &domain describeHostLimitRequest.InstanceID = &instanceID describeHostLimitRequest.AlbType = &albType - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().DescribeHostLimit(describeHostLimitRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().DescribeHostLimit(describeHostLimitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -323,10 +326,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa } request.Host = &hostRecord - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().CreateHost(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().CreateHost(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -354,13 +357,13 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa domainId = *domainInfo.DomainId } - d.SetId(strings.Join([]string{instanceID, domain, domainId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceID, domain, domainId}, tccommon.FILED_SP)) // wait domain state - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeDomainsById(ctx, instanceID, domain) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.State == 0 || *result.State == 1 { @@ -386,10 +389,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa modifyHostModeRequest.InstanceID = &instanceID modifyHostModeRequest.Mode = &engine - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostMode(modifyHostModeRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostMode(modifyHostModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostModeRequest.GetAction(), modifyHostModeRequest.ToJsonString(), result.ToJsonString()) } @@ -417,10 +420,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa modifyBotStatusRequest.Status = &tmpStatus modifyBotStatusRequest.Category = common.StringPtr("bot") - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyBotStatus(modifyBotStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyBotStatus(modifyBotStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyBotStatusRequest.GetAction(), modifyBotStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -446,10 +449,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa modifyApiAnalyzeStatusRequest.InstanceId = &instanceID modifyApiAnalyzeStatusRequest.Status = &apiSafeStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyApiAnalyzeStatusRequest.GetAction(), modifyApiAnalyzeStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -480,10 +483,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa } modifyDomainsCLSStatusRequest.Status = &clsStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainsCLSStatusRequest.GetAction(), modifyDomainsCLSStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -514,10 +517,10 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa }, } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostStatus(modifyHostStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostStatus(modifyHostStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostStatusRequest.GetAction(), modifyHostStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -536,16 +539,16 @@ func resourceTencentCloudWafClbDomainCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudWafClbDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_domain.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -689,11 +692,11 @@ func resourceTencentCloudWafClbDomainRead(d *schema.ResourceData, meta interface } func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_domain.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_domain.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) modifyHostRequest = waf.NewModifyHostRequest() isCdn int wafStatus uint64 @@ -704,7 +707,7 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa clsStatus uint64 ) - 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) } @@ -738,10 +741,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa }, } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostStatus(modifyHostStatusRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostStatus(modifyHostStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostStatusRequest.GetAction(), modifyHostStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -850,10 +853,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa } modifyHostRequest.Host = &hostRecord - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHost(modifyHostRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHost(modifyHostRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostRequest.GetAction(), modifyHostRequest.ToJsonString(), result.ToJsonString()) } @@ -876,10 +879,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa modifyHostFlowModeRequest.InstanceID = &instanceID modifyHostFlowModeRequest.FlowMode = &flowMode - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostFlowMode(modifyHostFlowModeRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostFlowMode(modifyHostFlowModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostFlowModeRequest.GetAction(), modifyHostFlowModeRequest.ToJsonString(), result.ToJsonString()) } @@ -904,10 +907,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa modifyHostModeRequest.InstanceID = &instanceID modifyHostModeRequest.Mode = &engine - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostMode(modifyHostModeRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostMode(modifyHostModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostModeRequest.GetAction(), modifyHostModeRequest.ToJsonString(), result.ToJsonString()) } @@ -933,10 +936,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa modifyBotStatusRequest.Status = &tmpStatus modifyBotStatusRequest.Category = common.StringPtr("bot") - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyBotStatus(modifyBotStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyBotStatus(modifyBotStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyBotStatusRequest.GetAction(), modifyBotStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -960,10 +963,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa modifyApiAnalyzeStatusRequest.InstanceId = &instanceID modifyApiAnalyzeStatusRequest.Status = &apiSafeStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyApiAnalyzeStatusRequest.GetAction(), modifyApiAnalyzeStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -991,10 +994,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa } modifyDomainsCLSStatusRequest.Status = &clsStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainsCLSStatusRequest.GetAction(), modifyDomainsCLSStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1025,10 +1028,10 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa }, } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyHostStatus(modifyHostStatusRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyHostStatus(modifyHostStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyHostStatusRequest.GetAction(), modifyHostStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1048,16 +1051,16 @@ func resourceTencentCloudWafClbDomainUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudWafClbDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_domain.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } diff --git a/tencentcloud/resource_tc_waf_clb_domain_test.go b/tencentcloud/services/waf/resource_tc_waf_clb_domain_test.go similarity index 93% rename from tencentcloud/resource_tc_waf_clb_domain_test.go rename to tencentcloud/services/waf/resource_tc_waf_clb_domain_test.go index e8c6944ba4..48fb0a39ab 100644 --- a/tencentcloud/resource_tc_waf_clb_domain_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_clb_domain_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafClbDomainResource_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: testAccWafClbDomain, diff --git a/tencentcloud/resource_tc_waf_clb_instance.go b/tencentcloud/services/waf/resource_tc_waf_clb_instance.go similarity index 83% rename from tencentcloud/resource_tc_waf_clb_instance.go rename to tencentcloud/services/waf/resource_tc_waf_clb_instance.go index 4c2cf8a715..681796fa1c 100644 --- a/tencentcloud/resource_tc_waf_clb_instance.go +++ b/tencentcloud/services/waf/resource_tc_waf_clb_instance.go @@ -1,17 +1,21 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + svccwp "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" ) -func resourceTencentCloudWafClbInstance() *schema.Resource { +func ResourceTencentCloudWafClbInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafClbInstanceCreate, Read: resourceTencentCloudWafClbInstanceRead, @@ -22,20 +26,20 @@ func resourceTencentCloudWafClbInstance() *schema.Resource { "goods_category": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(WAF_CATEGORY_CLB), + ValidateFunc: tccommon.ValidateAllowedStringValue(WAF_CATEGORY_CLB), Description: "Billing order parameters. support: premium_clb, enterprise_clb, ultimate_clb.", }, "time_span": { Optional: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(1), + ValidateFunc: tccommon.ValidateIntegerMin(1), Default: 1, Description: "Time interval.", }, "time_unit": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(TIME_UNIT), + ValidateFunc: tccommon.ValidateAllowedStringValue(TIME_UNIT), Default: "m", Description: "Time unit, support d, m, y. d: day, m: month, y: year.", }, @@ -49,47 +53,47 @@ func resourceTencentCloudWafClbInstance() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: AUTO_RENEW_FLAG_0, - ValidateFunc: validateAllowedIntValue(AUTO_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedIntValue(AUTO_RENEW_FLAG), Description: "Auto renew flag, 1: enable, 0: disable.", }, "elastic_mode": { Optional: true, Type: schema.TypeInt, Default: ELASTIC_MODE_0, - ValidateFunc: validateAllowedIntValue(ELASTIC_MODE), + ValidateFunc: tccommon.ValidateAllowedIntValue(ELASTIC_MODE), Description: "Is elastic billing enabled, 1: enable, 0: disable.", }, "qps_limit": { Optional: true, Computed: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(10000), + ValidateFunc: tccommon.ValidateIntegerMin(10000), Description: "QPS Limit, Minimum setting 10000. Only `elastic_mode` is 1, can be set.", }, "bot_management": { Optional: true, Type: schema.TypeInt, Default: BOT_MANAGEMENT_STATUS_0, - ValidateFunc: validateAllowedIntValue(BOT_MANAGEMENT_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(BOT_MANAGEMENT_STATUS), Description: "Whether to purchase Bot management, 1: yes, 0: no. Default is 0.", }, "api_security": { Optional: true, Type: schema.TypeInt, Default: API_SECURITY_STATUS_0, - ValidateFunc: validateAllowedIntValue(API_SECURITY_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(API_SECURITY_STATUS), Description: "Whether to purchase API Security, 1: yes, 0: no. Default is 0.", }, //"domain_pkg_count": { // Optional: true, // Type: schema.TypeInt, - // ValidateFunc: validateIntegerMin(1), + // ValidateFunc: tccommon.ValidateIntegerMin(1), // Description: "Domain extension package count.", //}, //"qps_pkg_count": { // Optional: true, // Type: schema.TypeInt, - // ValidateFunc: validateIntegerMin(1), + // ValidateFunc: tccommon.ValidateIntegerMin(1), // Description: "QPS extension package count.", //}, // computed @@ -123,14 +127,14 @@ func resourceTencentCloudWafClbInstance() *schema.Resource { } func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewGenerateDealsAndPayNewRequest() response = waf.NewGenerateDealsAndPayNewResponse() - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() instanceId string mainlandMode int goodsCategory string @@ -223,7 +227,7 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter apiSecurityGood.GoodsNum = helper.IntInt64(1) apiSecurityDetail.SubProductCode = helper.String(API_SECURITY_SUB_PRODUCT_CODE_CLB) apiSecurityDetail.Pid = helper.IntInt64(API_SECURITY_PID_CLB) - if mainlandMode == REGION_ID_1 { + if mainlandMode == svccwp.REGION_ID_1 { apiSecurityDetail.LabelTypes = helper.Strings([]string{API_SECURITY_LABEL_TYPES_CLB_REGION1[goodsCategory]}) } else { apiSecurityDetail.LabelTypes = helper.Strings([]string{API_SECURITY_LABEL_TYPES_CLB_REGION9[goodsCategory]}) @@ -301,10 +305,10 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter //} request.Goods = goods - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().GenerateDealsAndPayNew(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().GenerateDealsAndPayNew(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -333,10 +337,10 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter newSwitchElasticModeRequest.InstanceID = &instanceId newSwitchElasticModeRequest.Mode = helper.IntInt64(elasticMode) newSwitchElasticModeRequest.Edition = helper.String(EDITION_CLB) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, newSwitchElasticModeRequest.GetAction(), newSwitchElasticModeRequest.ToJsonString(), result.ToJsonString()) } @@ -355,10 +359,10 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest() modifyInstanceQpsLimitRequest.InstanceId = &instanceId modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString()) } @@ -382,13 +386,13 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudWafClbInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) @@ -464,11 +468,11 @@ func resourceTencentCloudWafClbInstanceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) modifyInstanceNameRequest = waf.NewModifyInstanceNameRequest() modifyInstanceRenewFlagRequest = waf.NewModifyInstanceRenewFlagRequest() newSwitchElasticModeRequest = waf.NewSwitchElasticModeRequest() @@ -489,10 +493,10 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter modifyInstanceNameRequest.InstanceID = &instanceId modifyInstanceNameRequest.InstanceName = helper.String(v.(string)) modifyInstanceNameRequest.Edition = helper.String(EDITION_CLB) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceName(modifyInstanceNameRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceName(modifyInstanceNameRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceNameRequest.GetAction(), modifyInstanceNameRequest.ToJsonString(), result.ToJsonString()) } @@ -511,10 +515,10 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter if v, ok := d.GetOkExists("auto_renew_flag"); ok { modifyInstanceRenewFlagRequest.InstanceId = &instanceId modifyInstanceRenewFlagRequest.RenewFlag = helper.IntInt64(v.(int)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceRenewFlag(modifyInstanceRenewFlagRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceRenewFlag(modifyInstanceRenewFlagRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceRenewFlagRequest.GetAction(), modifyInstanceRenewFlagRequest.ToJsonString(), result.ToJsonString()) } @@ -534,10 +538,10 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter newSwitchElasticModeRequest.InstanceID = &instanceId newSwitchElasticModeRequest.Mode = helper.IntInt64(v.(int)) newSwitchElasticModeRequest.Edition = helper.String(EDITION_CLB) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, newSwitchElasticModeRequest.GetAction(), newSwitchElasticModeRequest.ToJsonString(), result.ToJsonString()) } @@ -563,10 +567,10 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest() modifyInstanceQpsLimitRequest.InstanceId = &instanceId modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString()) } @@ -590,8 +594,8 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudWafClbInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_clb_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_clb_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return fmt.Errorf("tencentcloud waf clb instance not supported delete, please contact the work order for processing") } diff --git a/tencentcloud/resource_tc_waf_clb_instance_test.go b/tencentcloud/services/waf/resource_tc_waf_clb_instance_test.go similarity index 89% rename from tencentcloud/resource_tc_waf_clb_instance_test.go rename to tencentcloud/services/waf/resource_tc_waf_clb_instance_test.go index a0061690e2..992e681e6e 100644 --- a/tencentcloud/resource_tc_waf_clb_instance_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_clb_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudNeedFixWafClbInstanceResource_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: testAccWafClbInstance, diff --git a/tencentcloud/resource_tc_waf_custom_rule.go b/tencentcloud/services/waf/resource_tc_waf_custom_rule.go similarity index 81% rename from tencentcloud/resource_tc_waf_custom_rule.go rename to tencentcloud/services/waf/resource_tc_waf_custom_rule.go index 1b76517610..87038c4f38 100644 --- a/tencentcloud/resource_tc_waf_custom_rule.go +++ b/tencentcloud/services/waf/resource_tc_waf_custom_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafCustomRule() *schema.Resource { +func ResourceTencentCloudWafCustomRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafCustomRuleCreate, Read: resourceTencentCloudWafCustomRuleRead, @@ -80,13 +83,13 @@ func resourceTencentCloudWafCustomRule() *schema.Resource { "action_type": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(CUSTOM_RULE_ACTION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CUSTOM_RULE_ACTION_TYPE), Description: "Action type, 1 represents blocking, 2 represents captcha, 3 represents observation, and 4 represents redirection.", }, "status": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(CUSTOM_RULE_STATUS), + ValidateFunc: tccommon.ValidateAllowedStringValue(CUSTOM_RULE_STATUS), Default: CUSTOM_RULE_STATUS_1, Description: "The status of the switch, 1 is on, 0 is off, default 1.", }, @@ -100,11 +103,11 @@ func resourceTencentCloudWafCustomRule() *schema.Resource { } func resourceTencentCloudWafCustomRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewAddCustomRuleRequest() response = waf.NewAddCustomRuleResponse() statusRequest = waf.NewModifyCustomRuleStatusRequest() @@ -162,10 +165,10 @@ func resourceTencentCloudWafCustomRuleCreate(d *schema.ResourceData, meta interf request.ActionType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().AddCustomRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().AddCustomRule(request) if e != nil { - return retryError(e) + return tccommon.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,10 +194,10 @@ func resourceTencentCloudWafCustomRuleCreate(d *schema.ResourceData, meta interf tmpRuleId := uint64(ruleId) statusRequest.RuleId = &tmpRuleId statusRequest.Status = helper.IntUint64(CUSTOM_RULE_STATUS_0_INT) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomRuleStatus(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomRuleStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -208,21 +211,21 @@ func resourceTencentCloudWafCustomRuleCreate(d *schema.ResourceData, meta interf } } - d.SetId(strings.Join([]string{domain, ruleIdStr}, FILED_SP)) + d.SetId(strings.Join([]string{domain, ruleIdStr}, tccommon.FILED_SP)) return resourceTencentCloudWafCustomRuleRead(d, meta) } func resourceTencentCloudWafCustomRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -303,16 +306,16 @@ func resourceTencentCloudWafCustomRuleRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudWafCustomRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewModifyCustomRuleRequest() statusRequest = waf.NewModifyCustomRuleStatusRequest() ) - 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) } @@ -377,10 +380,10 @@ func resourceTencentCloudWafCustomRuleUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -404,10 +407,10 @@ func resourceTencentCloudWafCustomRuleUpdate(d *schema.ResourceData, meta interf statusRequest.Status = helper.IntUint64(CUSTOM_RULE_STATUS_1_INT) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomRuleStatus(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomRuleStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -426,16 +429,16 @@ func resourceTencentCloudWafCustomRuleUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudWafCustomRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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_waf_custom_rule_test.go b/tencentcloud/services/waf/resource_tc_waf_custom_rule_test.go similarity index 89% rename from tencentcloud/resource_tc_waf_custom_rule_test.go rename to tencentcloud/services/waf/resource_tc_waf_custom_rule_test.go index 0b663e5a05..d566fd8cba 100644 --- a/tencentcloud/resource_tc_waf_custom_rule_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_custom_rule_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafCustomRuleResource_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: testAccWafCustomRule, diff --git a/tencentcloud/resource_tc_waf_custom_white_rule.go b/tencentcloud/services/waf/resource_tc_waf_custom_white_rule.go similarity index 80% rename from tencentcloud/resource_tc_waf_custom_white_rule.go rename to tencentcloud/services/waf/resource_tc_waf_custom_white_rule.go index da4dafd9b5..2a6632618c 100644 --- a/tencentcloud/resource_tc_waf_custom_white_rule.go +++ b/tencentcloud/services/waf/resource_tc_waf_custom_white_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafCustomWhiteRule() *schema.Resource { +func ResourceTencentCloudWafCustomWhiteRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafCustomWhiteRuleCreate, Read: resourceTencentCloudWafCustomWhiteRuleRead, @@ -80,7 +83,7 @@ func resourceTencentCloudWafCustomWhiteRule() *schema.Resource { "status": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(CUSTOM_WHITE_RULE_STATUS), + ValidateFunc: tccommon.ValidateAllowedStringValue(CUSTOM_WHITE_RULE_STATUS), Default: CUSTOM_WHITE_RULE_STATUS_1, Description: "The status of the switch, 1 is on, 0 is off, default 1.", }, @@ -94,11 +97,11 @@ func resourceTencentCloudWafCustomWhiteRule() *schema.Resource { } func resourceTencentCloudWafCustomWhiteRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_white_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_white_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewAddCustomWhiteRuleRequest() response = waf.NewAddCustomWhiteRuleResponse() statusRequest = waf.NewModifyCustomWhiteRuleStatusRequest() @@ -148,10 +151,10 @@ func resourceTencentCloudWafCustomWhiteRuleCreate(d *schema.ResourceData, meta i request.Bypass = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().AddCustomWhiteRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().AddCustomWhiteRule(request) if e != nil { - return retryError(e) + return tccommon.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,10 +179,10 @@ func resourceTencentCloudWafCustomWhiteRuleCreate(d *schema.ResourceData, meta i statusRequest.Domain = &domain statusRequest.RuleId = &ruleId statusRequest.Status = helper.IntUint64(CUSTOM_WHITE_RULE_STATUS_0_INT) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomWhiteRuleStatus(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomWhiteRuleStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.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,21 +196,21 @@ func resourceTencentCloudWafCustomWhiteRuleCreate(d *schema.ResourceData, meta i } } - d.SetId(strings.Join([]string{domain, ruleIdStr}, FILED_SP)) + d.SetId(strings.Join([]string{domain, ruleIdStr}, tccommon.FILED_SP)) return resourceTencentCloudWafCustomWhiteRuleRead(d, meta) } func resourceTencentCloudWafCustomWhiteRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_white_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_white_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -284,16 +287,16 @@ func resourceTencentCloudWafCustomWhiteRuleRead(d *schema.ResourceData, meta int } func resourceTencentCloudWafCustomWhiteRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_white_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_white_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewModifyCustomWhiteRuleRequest() statusRequest = waf.NewModifyCustomWhiteRuleStatusRequest() ) - 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) } @@ -356,10 +359,10 @@ func resourceTencentCloudWafCustomWhiteRuleUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomWhiteRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomWhiteRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -383,10 +386,10 @@ func resourceTencentCloudWafCustomWhiteRuleUpdate(d *schema.ResourceData, meta i statusRequest.Status = helper.IntUint64(CUSTOM_WHITE_RULE_STATUS_1_INT) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyCustomWhiteRuleStatus(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyCustomWhiteRuleStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -405,16 +408,16 @@ func resourceTencentCloudWafCustomWhiteRuleUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudWafCustomWhiteRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_custom_white_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_custom_white_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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_waf_custom_white_rule_test.go b/tencentcloud/services/waf/resource_tc_waf_custom_white_rule_test.go similarity index 90% rename from tencentcloud/resource_tc_waf_custom_white_rule_test.go rename to tencentcloud/services/waf/resource_tc_waf_custom_white_rule_test.go index ff0d588ac2..9c5ae562cf 100644 --- a/tencentcloud/resource_tc_waf_custom_white_rule_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_custom_white_rule_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafCustomWhiteRuleResource_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: testAccWafCustomWhiteRule, diff --git a/tencentcloud/resource_tc_waf_ip_access_control.go b/tencentcloud/services/waf/resource_tc_waf_ip_access_control.go similarity index 78% rename from tencentcloud/resource_tc_waf_ip_access_control.go rename to tencentcloud/services/waf/resource_tc_waf_ip_access_control.go index 94fa9d99df..91d889eaf9 100644 --- a/tencentcloud/resource_tc_waf_ip_access_control.go +++ b/tencentcloud/services/waf/resource_tc_waf_ip_access_control.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafIpAccessControl() *schema.Resource { +func ResourceTencentCloudWafIpAccessControl() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafIpAccessControlCreate, Read: resourceTencentCloudWafIpAccessControlRead, @@ -36,7 +39,7 @@ func resourceTencentCloudWafIpAccessControl() *schema.Resource { "edition": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(EDITION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(EDITION_TYPE), Description: "Waf edition. clb-waf means clb-waf, sparta-waf means saas-waf.", }, "items": { @@ -58,7 +61,7 @@ func resourceTencentCloudWafIpAccessControl() *schema.Resource { "action": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateAllowedIntValue([]int{40, 42}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{40, 42}), Description: "Action value 40 is whitelist, 42 is blacklist.", }, "valid_ts": { @@ -89,11 +92,11 @@ func resourceTencentCloudWafIpAccessControl() *schema.Resource { } func resourceTencentCloudWafIpAccessControlCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_ip_access_control.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_ip_access_control.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewUpsertIpAccessControlRequest() instanceId string domain string @@ -143,10 +146,10 @@ func resourceTencentCloudWafIpAccessControlCreate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertIpAccessControl(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertIpAccessControl(request) if e != nil { - return retryError(e) + return tccommon.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,22 +167,22 @@ func resourceTencentCloudWafIpAccessControlCreate(d *schema.ResourceData, meta i return err } - d.SetId(strings.Join([]string{instanceId, domain, edition}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, domain, edition}, tccommon.FILED_SP)) return resourceTencentCloudWafIpAccessControlRead(d, meta) } func resourceTencentCloudWafIpAccessControlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_ip_access_control.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_ip_access_control.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -245,13 +248,13 @@ func resourceTencentCloudWafIpAccessControlRead(d *schema.ResourceData, meta int } func resourceTencentCloudWafIpAccessControlUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_ip_access_control.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_ip_access_control.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = waf.NewUpsertIpAccessControlRequest() ) @@ -263,7 +266,7 @@ func resourceTencentCloudWafIpAccessControlUpdate(d *schema.ResourceData, meta i } } - 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) } @@ -321,10 +324,10 @@ func resourceTencentCloudWafIpAccessControlUpdate(d *schema.ResourceData, meta i request.Domain = &domain request.Edition = &edition - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().UpsertIpAccessControl(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertIpAccessControl(request) if e != nil { - return retryError(e) + return tccommon.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,16 +344,16 @@ func resourceTencentCloudWafIpAccessControlUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudWafIpAccessControlDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_ip_access_control.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_ip_access_control.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } diff --git a/tencentcloud/resource_tc_waf_ip_access_control_test.go b/tencentcloud/services/waf/resource_tc_waf_ip_access_control_test.go similarity index 93% rename from tencentcloud/resource_tc_waf_ip_access_control_test.go rename to tencentcloud/services/waf/resource_tc_waf_ip_access_control_test.go index abaf7df125..ef8a888122 100644 --- a/tencentcloud/resource_tc_waf_ip_access_control_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_ip_access_control_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafIpAccessControlResource_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: testAccWafIpAccessControl, diff --git a/tencentcloud/services/waf/resource_tc_waf_modify_access_period.go b/tencentcloud/services/waf/resource_tc_waf_modify_access_period.go new file mode 100644 index 0000000000..bfb8d7273b --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_modify_access_period.go @@ -0,0 +1,91 @@ +package waf + +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" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafModifyAccessPeriod() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafModifyAccessPeriodCreate, + Read: resourceTencentCloudWafModifyAccessPeriodRead, + Delete: resourceTencentCloudWafModifyAccessPeriodDelete, + + Schema: map[string]*schema.Schema{ + "period": { + Required: true, + ForceNew: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateIntegerInRange(1, 180), + Description: "Access log retention period, range is [1, 180].", + }, + "topic_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Log topic, new version does not need to be uploaded.", + }, + }, + } +} + +func resourceTencentCloudWafModifyAccessPeriodCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_modify_access_period.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewModifyAccessPeriodRequest() + topicId string + ) + + if v, _ := d.GetOkExists("period"); v != nil { + request.Period = helper.IntInt64(v.(int)) + } + + if v, ok := d.GetOk("topic_id"); ok { + request.TopicId = helper.String(v.(string)) + topicId = v.(string) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyAccessPeriod(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 waf ModifyAccessPeriod failed, reason:%+v", logId, err) + return err + } + + d.SetId(topicId) + + return resourceTencentCloudWafModifyAccessPeriodRead(d, meta) +} + +func resourceTencentCloudWafModifyAccessPeriodRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_modify_access_period.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudWafModifyAccessPeriodDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_modify_access_period.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_waf_modify_access_period_test.go b/tencentcloud/services/waf/resource_tc_waf_modify_access_period_test.go similarity index 85% rename from tencentcloud/resource_tc_waf_modify_access_period_test.go rename to tencentcloud/services/waf/resource_tc_waf_modify_access_period_test.go index 38a3c7a39b..f73d670d78 100644 --- a/tencentcloud/resource_tc_waf_modify_access_period_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_modify_access_period_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudNeedFixWafModifyAccessPeriodResource_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: testAccWafModifyAccessPeriod, diff --git a/tencentcloud/services/waf/resource_tc_waf_module_status.go b/tencentcloud/services/waf/resource_tc_waf_module_status.go new file mode 100644 index 0000000000..9bf3441437 --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_module_status.go @@ -0,0 +1,202 @@ +package waf + +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" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafModuleStatus() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafModuleStatusCreate, + Read: resourceTencentCloudWafModuleStatusRead, + Update: resourceTencentCloudWafModuleStatusUpdate, + Delete: resourceTencentCloudWafModuleStatusDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "domain": { + Required: true, + Type: schema.TypeString, + Description: "Domain.", + }, + "web_security": { + Required: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "WEB security module status, 0:closed, 1:opened.", + }, + "access_control": { + Required: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "ACL module status, 0:closed, 1:opened.", + }, + "cc_protection": { + Required: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "CC module status, 0:closed, 1:opened.", + }, + "api_protection": { + Required: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "API security module status, 0:closed, 1:opened.", + }, + "anti_tamper": { + Optional: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "Anti tamper module status, 0:closed, 1:opened.", + }, + "anti_leakage": { + Optional: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "Anti leakage module status, 0:closed, 1:opened.", + }, + }, + } +} + +func resourceTencentCloudWafModuleStatusCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_module_status.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var domain string + if v, ok := d.GetOk("domain"); ok { + domain = v.(string) + } + + d.SetId(domain) + + return resourceTencentCloudWafModuleStatusUpdate(d, meta) +} + +func resourceTencentCloudWafModuleStatusRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_module_status.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + domain = d.Id() + ) + + moduleStatus, err := service.DescribeWafModuleStatusById(ctx, domain) + if err != nil { + return err + } + + if moduleStatus == nil { + d.SetId("") + log.Printf("[WARN]%s resource `WafModuleStatus` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("domain", domain) + + if moduleStatus.WebSecurity != nil { + _ = d.Set("web_security", moduleStatus.WebSecurity) + } + + if moduleStatus.AccessControl != nil { + _ = d.Set("access_control", moduleStatus.AccessControl) + } + + if moduleStatus.CcProtection != nil { + _ = d.Set("cc_protection", moduleStatus.CcProtection) + } + + if moduleStatus.ApiProtection != nil { + _ = d.Set("api_protection", moduleStatus.ApiProtection) + } + + if moduleStatus.AntiTamper != nil { + _ = d.Set("anti_tamper", moduleStatus.AntiTamper) + } + + if moduleStatus.AntiLeakage != nil { + _ = d.Set("anti_leakage", moduleStatus.AntiLeakage) + } + + return nil +} + +func resourceTencentCloudWafModuleStatusUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_module_status.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewModifyModuleStatusRequest() + domain = d.Id() + ) + + request.Domain = &domain + + if v, ok := d.GetOkExists("web_security"); ok { + request.WebSecurity = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("access_control"); ok { + request.AccessControl = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("cc_protection"); ok { + request.CcProtection = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("api_protection"); ok { + request.ApiProtection = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("anti_tamper"); ok { + request.AntiTamper = helper.IntUint64(v.(int)) + } + + if v, ok := d.GetOkExists("anti_leakage"); ok { + request.AntiLeakage = helper.IntUint64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyModuleStatus(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()) + } + + if result == nil { + e = fmt.Errorf("waf moduleStatus version not exists") + return resource.NonRetryableError(e) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s modify waf moduleStatus failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudWafModuleStatusRead(d, meta) +} + +func resourceTencentCloudWafModuleStatusDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_module_status.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_waf_module_status_test.go b/tencentcloud/services/waf/resource_tc_waf_module_status_test.go similarity index 90% rename from tencentcloud/resource_tc_waf_module_status_test.go rename to tencentcloud/services/waf/resource_tc_waf_module_status_test.go index 4cea3b3e3b..6775b5729e 100644 --- a/tencentcloud/resource_tc_waf_module_status_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_module_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafModuleStatusResource_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: testAccWafModuleStatus, diff --git a/tencentcloud/services/waf/resource_tc_waf_protection_mode.go b/tencentcloud/services/waf/resource_tc_waf_protection_mode.go new file mode 100644 index 0000000000..3ecb61e7c6 --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_protection_mode.go @@ -0,0 +1,166 @@ +package waf + +import ( + "context" + "fmt" + "log" + "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" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafProtectionMode() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafProtectionModeCreate, + Read: resourceTencentCloudWafProtectionModeRead, + Update: resourceTencentCloudWafProtectionModeUpdate, + Delete: resourceTencentCloudWafProtectionModeDelete, + + Schema: map[string]*schema.Schema{ + "domain": { + Required: true, + Type: schema.TypeString, + Description: "Domain.", + }, + "mode": { + Required: true, + Type: schema.TypeInt, + Description: "Protection status:10: Rule observation; AI off mode, 11: Rule observation; AI observation mode, 12: Rule observation; AI interception mode20: Rule interception; AI off mode, 21: Rule interception; AI observation mode, 22: Rule interception; AI interception mode.", + }, + "edition": { + Optional: true, + Type: schema.TypeString, + Default: "sparta-waf", + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"clb-waf", "sparta-waf"}), + Description: "WAF edition. clb-waf means clb-waf, sparta-waf means saas-waf, default is sparta-waf.", + }, + "type": { + Optional: true, + Type: schema.TypeInt, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), + Description: "0 is to modify the rule engine status, 1 is to modify the AI status.", + }, + }, + } +} + +func resourceTencentCloudWafProtectionModeCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_protection_mode.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + domain string + edition string + ) + + if v, ok := d.GetOk("domain"); ok { + domain = v.(string) + } + + if v, ok := d.GetOk("edition"); ok { + edition = v.(string) + } + + d.SetId(strings.Join([]string{domain, edition}, tccommon.FILED_SP)) + + return resourceTencentCloudWafProtectionModeUpdate(d, meta) +} + +func resourceTencentCloudWafProtectionModeRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_protection_mode.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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()) + } + domain := idSplit[0] + edition := idSplit[1] + + protectionInfo, err := service.DescribeSpartaProtectionInfoById(ctx, domain, edition) + if err != nil { + return err + } + + if protectionInfo == nil { + d.SetId("") + log.Printf("[WARN]%s resource `WafProtectionMode` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + _ = d.Set("domain", domain) + _ = d.Set("edition", edition) + + if protectionInfo.Engine != nil { + engineIne, _ := strconv.Atoi(*protectionInfo.Engine) + _ = d.Set("mode", engineIne) + } + + return nil +} + +func resourceTencentCloudWafProtectionModeUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_protection_mode.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewModifySpartaProtectionModeRequest() + ) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + domain := idSplit[0] + edition := idSplit[1] + + request.Domain = &domain + request.Edition = &edition + + if v, _ := d.GetOkExists("mode"); v != nil { + request.Mode = helper.IntUint64(v.(int)) + } + + if v, _ := d.GetOkExists("type"); v != nil { + request.Type = helper.IntUint64(v.(int)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifySpartaProtectionMode(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 waf protectionMode failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudWafProtectionModeRead(d, meta) +} + +func resourceTencentCloudWafProtectionModeDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_protection_mode.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_waf_protection_mode_test.go b/tencentcloud/services/waf/resource_tc_waf_protection_mode_test.go similarity index 86% rename from tencentcloud/resource_tc_waf_protection_mode_test.go rename to tencentcloud/services/waf/resource_tc_waf_protection_mode_test.go index df29e469c2..92dc4350ee 100644 --- a/tencentcloud/resource_tc_waf_protection_mode_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_protection_mode_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafProtectionModeResource_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: testAccWafProtectionMode, diff --git a/tencentcloud/resource_tc_waf_saas_domain.go b/tencentcloud/services/waf/resource_tc_waf_saas_domain.go similarity index 86% rename from tencentcloud/resource_tc_waf_saas_domain.go rename to tencentcloud/services/waf/resource_tc_waf_saas_domain.go index 5950da2f20..3b27d49493 100644 --- a/tencentcloud/resource_tc_waf_saas_domain.go +++ b/tencentcloud/services/waf/resource_tc_waf_saas_domain.go @@ -1,4 +1,4 @@ -package tencentcloud +package waf 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" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafSaasDomain() *schema.Resource { +func ResourceTencentCloudWafSaasDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafSaasDomainCreate, Read: resourceTencentCloudWafSaasDomainRead, @@ -38,7 +41,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: CERT_TYPE_0, - ValidateFunc: validateAllowedIntValue(CERT_TYPES), + ValidateFunc: tccommon.ValidateAllowedIntValue(CERT_TYPES), Description: "Certificate type, 0 represents no certificate, CertType=1 represents self owned certificate, and 2 represents managed certificate.", }, "cert": { @@ -60,13 +63,13 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: ISCDN_0, - ValidateFunc: validateAllowedIntValue(ISCDN_STSTUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(ISCDN_STSTUS), Description: "Whether a proxy has been enabled before WAF, 0 no deployment, 1 deployment and use first IP in X-Forwarded-For as client IP, 2 deployment and use remote_addr as client IP, 3 deployment and use values of custom headers as client IP.", }, "upstream_scheme": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(UPSTREAM_SCHEMES), + ValidateFunc: tccommon.ValidateAllowedStringValue(UPSTREAM_SCHEMES), Description: "Upstream scheme for https, http or https.", }, "https_upstream_port": { @@ -78,7 +81,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: UP_STREAM_TYPE_0, - ValidateFunc: validateAllowedIntValue(UP_STREAM_TYPES), + ValidateFunc: tccommon.ValidateAllowedIntValue(UP_STREAM_TYPES), Description: "Upstream type, 0 represents IP, 1 represents domain name.", }, "upstream_domain": { @@ -96,28 +99,28 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: IS_HTTP2_0, - ValidateFunc: validateAllowedIntValue(IS_HTTP2_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(IS_HTTP2_STATUS), Description: "Whether enable HTTP2, Enabling HTTP2 requires HTTPS support, 1 means enabled, 0 does not.", }, "is_websocket": { Optional: true, Type: schema.TypeInt, Default: IS_WEBSOCKET_0, - ValidateFunc: validateAllowedIntValue(IS_WEBSOCKET_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(IS_WEBSOCKET_STATUS), Description: "Is WebSocket support enabled. 1 means enabled, 0 does not.", }, "load_balance": { Optional: true, Type: schema.TypeString, Default: LOAD_BALANCE_0, - ValidateFunc: validateAllowedStringValue(LOAD_BALANCE_STATUS), + ValidateFunc: tccommon.ValidateAllowedStringValue(LOAD_BALANCE_STATUS), Description: "Load balancing strategy, where 0 represents polling and 1 represents IP hash and 2 weighted round robin.", }, "https_rewrite": { Optional: true, Type: schema.TypeInt, Default: HTTPS_REWRITE_0, - ValidateFunc: validateAllowedIntValue(HTTPS_REWRITE_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(HTTPS_REWRITE_STATUS), Description: "Whether redirect to https, 1 will redirect and 0 will not.", }, "ports": { @@ -158,7 +161,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeString, Default: IS_KEEP_ALIVE_1, - ValidateFunc: validateAllowedStringValue(IS_KEEP_ALIVE_STATUS), + ValidateFunc: tccommon.ValidateAllowedStringValue(IS_KEEP_ALIVE_STATUS), Description: "Whether to enable keep-alive, 0 disable, 1 enable.", }, "weights": { @@ -171,7 +174,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: ACTIVE_CHECK_0, - ValidateFunc: validateAllowedIntValue(ACTIVE_CHECK_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(ACTIVE_CHECK_STATUS), Description: "Whether to enable active health detection, 0 represents disable and 1 represents enable.", }, "tls_version": { @@ -191,7 +194,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: CIPHER_TEMPLATE_1, - ValidateFunc: validateAllowedIntValue(CIPHER_TEMPLATES), + ValidateFunc: tccommon.ValidateAllowedIntValue(CIPHER_TEMPLATES), Description: "Encryption Suite Template, 0:default 1:Universal template 2:Security template 3:Custom template.", }, "proxy_read_timeout": { @@ -210,7 +213,7 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: SNI_TYPE_0, - ValidateFunc: validateAllowedIntValue(SNI_TYPES), + ValidateFunc: tccommon.ValidateAllowedIntValue(SNI_TYPES), Description: "Sni type fo upstream, 0:disable SNI; 1:enable SNI and SNI equal original request host; 2:and SNI equal upstream host 3:enable SNI and equal customize host.", }, "sni_host": { @@ -228,42 +231,42 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: XFF_RESET_0, - ValidateFunc: validateAllowedIntValue(XFF_RESET_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(XFF_RESET_STATUS), Description: "0:disable xff reset; 1:ensable xff reset.", }, "bot_status": { Type: schema.TypeInt, Optional: true, Default: BOT_STATUS_0, - ValidateFunc: validateAllowedIntValue(BOT_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(BOT_STATUS), Description: "Whether to enable bot, 1 enable, 0 disable.", }, "api_safe_status": { Type: schema.TypeInt, Optional: true, Default: API_SAFE_STATUS_0, - ValidateFunc: validateAllowedIntValue(API_SAFE_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(API_SAFE_STATUS), Description: "Whether to enable api safe, 1 enable, 0 disable.", }, "cls_status": { Type: schema.TypeInt, Optional: true, Default: CLS_STATUS_0, - ValidateFunc: validateAllowedIntValue(CLS_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(CLS_STATUS), Description: "Whether to enable access logs, 1 enable, 0 disable.", }, //"ipv6_status": { // Type: schema.TypeInt, // Optional: true, // Default: IPV6_STATUS_0, - // ValidateFunc: validateAllowedIntValue(IPV6_STATUS), + // ValidateFunc: tccommon.ValidateAllowedIntValue(IPV6_STATUS), // Description: "Whether to enable ipv6, 1 enable, 0 disable.", //}, "status": { Type: schema.TypeInt, Optional: true, Default: PROTECTION_STATUS_1, - ValidateFunc: validateAllowedIntValue(PROTECTION_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(PROTECTION_STATUS), Description: "Binding status between waf and LB, 0:not bind, 1:binding.", }, "domain_id": { @@ -276,13 +279,13 @@ func resourceTencentCloudWafSaasDomain() *schema.Resource { } func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_domain.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} verifyRequest = waf.NewDescribeDomainVerifyResultRequest() request = waf.NewAddSpartaProtectionRequest() instanceID string @@ -311,10 +314,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf // check domain legal verifyRequest.InstanceID = &instanceID verifyRequest.Domain = &domain - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().DescribeDomainVerifyResult(verifyRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().DescribeDomainVerifyResult(verifyRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -560,10 +563,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf request.XFFReset = helper.IntInt64(v.(int)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().AddSpartaProtection(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().AddSpartaProtection(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf domainId = *domainInfo.DomainId } - d.SetId(strings.Join([]string{instanceID, domain, domainId}, FILED_SP)) + d.SetId(strings.Join([]string{instanceID, domain, domainId}, tccommon.FILED_SP)) // wait domain state - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeDomainsById(ctx, instanceID, domain) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.State == 0 || *result.State == 1 { @@ -624,10 +627,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf modifyBotStatusRequest.Status = &tmpStatus modifyBotStatusRequest.Category = common.StringPtr("bot") - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyBotStatus(modifyBotStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyBotStatus(modifyBotStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyBotStatusRequest.GetAction(), modifyBotStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -653,10 +656,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf modifyApiAnalyzeStatusRequest.InstanceId = &instanceID modifyApiAnalyzeStatusRequest.Status = &apiSafeStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyApiAnalyzeStatusRequest.GetAction(), modifyApiAnalyzeStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -687,10 +690,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf } modifyDomainsCLSStatusRequest.Status = &clsStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainsCLSStatusRequest.GetAction(), modifyDomainsCLSStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -717,10 +720,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf // modifyDomainIpv6StatusRequest.InstanceId = &instanceID // modifyDomainIpv6StatusRequest.Status = &ipv6Status // - // err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - // result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainIpv6Status(modifyDomainIpv6StatusRequest) + // err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + // result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainIpv6Status(modifyDomainIpv6StatusRequest) // if e != nil { - // return retryError(e) + // return tccommon.RetryError(e) // } else { // log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainIpv6StatusRequest.GetAction(), modifyDomainIpv6StatusRequest.ToJsonString(), result.ToJsonString()) // } @@ -745,10 +748,10 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf modifyProtectionStatusRequest.Domain = &domain modifyProtectionStatusRequest.Status = &protectionStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProtectionStatusRequest.GetAction(), modifyProtectionStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -767,16 +770,16 @@ func resourceTencentCloudWafSaasDomainCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudWafSaasDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_domain.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } @@ -983,13 +986,13 @@ func resourceTencentCloudWafSaasDomainRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_domain.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_domain.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = waf.NewModifySpartaProtectionRequest() botStatus uint64 apiSafeStatus uint64 @@ -1007,7 +1010,7 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf } } - 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) } @@ -1027,10 +1030,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf modifyProtectionStatusRequest.Domain = &domain modifyProtectionStatusRequest.Status = &protectionStatus - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProtectionStatusRequest.GetAction(), modifyProtectionStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1346,10 +1349,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf request.XFFReset = helper.IntInt64(v.(int)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifySpartaProtection(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifySpartaProtection(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -1373,10 +1376,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf modifyBotStatusRequest.Status = &tmpStatus modifyBotStatusRequest.Category = common.StringPtr("bot") - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyBotStatus(modifyBotStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyBotStatus(modifyBotStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyBotStatusRequest.GetAction(), modifyBotStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1400,10 +1403,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf modifyApiAnalyzeStatusRequest.InstanceId = &instanceID modifyApiAnalyzeStatusRequest.Status = &apiSafeStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyApiAnalyzeStatus(modifyApiAnalyzeStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyApiAnalyzeStatusRequest.GetAction(), modifyApiAnalyzeStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1431,10 +1434,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf } modifyDomainsCLSStatusRequest.Status = &clsStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainsCLSStatus(modifyDomainsCLSStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainsCLSStatusRequest.GetAction(), modifyDomainsCLSStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1463,10 +1466,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf // modifyDomainIpv6StatusRequest.InstanceId = &instanceID // modifyDomainIpv6StatusRequest.Status = &ipv6Status // - // err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - // result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyDomainIpv6Status(modifyDomainIpv6StatusRequest) + // err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + // result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyDomainIpv6Status(modifyDomainIpv6StatusRequest) // if e != nil { - // return retryError(e) + // return tccommon.RetryError(e) // } else { // log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyDomainIpv6StatusRequest.GetAction(), modifyDomainIpv6StatusRequest.ToJsonString(), result.ToJsonString()) // } @@ -1492,10 +1495,10 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf modifyProtectionStatusRequest.Domain = &domain modifyProtectionStatusRequest.Status = &protectionStatus - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyProtectionStatus(modifyProtectionStatusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProtectionStatusRequest.GetAction(), modifyProtectionStatusRequest.ToJsonString(), result.ToJsonString()) } @@ -1515,16 +1518,16 @@ func resourceTencentCloudWafSaasDomainUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudWafSaasDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_domain.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{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) } diff --git a/tencentcloud/resource_tc_waf_saas_domain_test.go b/tencentcloud/services/waf/resource_tc_waf_saas_domain_test.go similarity index 94% rename from tencentcloud/resource_tc_waf_saas_domain_test.go rename to tencentcloud/services/waf/resource_tc_waf_saas_domain_test.go index c4b1cc0241..92035ea621 100644 --- a/tencentcloud/resource_tc_waf_saas_domain_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_saas_domain_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafSaasDomainResource_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: testAccWafSaasDomain, diff --git a/tencentcloud/resource_tc_waf_saas_instance.go b/tencentcloud/services/waf/resource_tc_waf_saas_instance.go similarity index 83% rename from tencentcloud/resource_tc_waf_saas_instance.go rename to tencentcloud/services/waf/resource_tc_waf_saas_instance.go index bb6b01ce9c..d1e12a6756 100644 --- a/tencentcloud/resource_tc_waf_saas_instance.go +++ b/tencentcloud/services/waf/resource_tc_waf_saas_instance.go @@ -1,6 +1,9 @@ -package tencentcloud +package waf import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccwp "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" + "context" "fmt" "log" @@ -8,10 +11,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWafSaasInstance() *schema.Resource { +func ResourceTencentCloudWafSaasInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWafSaasInstanceCreate, Read: resourceTencentCloudWafSaasInstanceRead, @@ -22,20 +26,20 @@ func resourceTencentCloudWafSaasInstance() *schema.Resource { "goods_category": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(WAF_CATEGORY_SAAS), + ValidateFunc: tccommon.ValidateAllowedStringValue(WAF_CATEGORY_SAAS), Description: "Billing order parameters. support premium_saas, enterprise_saas, ultimate_saas.", }, "time_span": { Optional: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(1), + ValidateFunc: tccommon.ValidateIntegerMin(1), Default: 1, Description: "Time interval.", }, "time_unit": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(TIME_UNIT), + ValidateFunc: tccommon.ValidateAllowedStringValue(TIME_UNIT), Default: "m", Description: "Time unit, support d, m, y. d: day, m: month, y: year.", }, @@ -49,54 +53,54 @@ func resourceTencentCloudWafSaasInstance() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: AUTO_RENEW_FLAG_0, - ValidateFunc: validateAllowedIntValue(AUTO_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedIntValue(AUTO_RENEW_FLAG), Description: "Auto renew flag, 1: enable, 0: disable.", }, "elastic_mode": { Optional: true, Type: schema.TypeInt, Default: ELASTIC_MODE_0, - ValidateFunc: validateAllowedIntValue(ELASTIC_MODE), + ValidateFunc: tccommon.ValidateAllowedIntValue(ELASTIC_MODE), Description: "Is elastic billing enabled, 1: enable, 0: disable.", }, "qps_limit": { Optional: true, Computed: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(10000), + ValidateFunc: tccommon.ValidateIntegerMin(10000), Description: "QPS Limit, Minimum setting 10000. Only `elastic_mode` is 1, can be set.", }, "real_region": { Optional: true, Type: schema.TypeString, Default: SAAS_REAL_REGION_MAINLAND_GZ, - ValidateFunc: validateAllowedStringValue(SAAS_REAL_REGIONS), + ValidateFunc: tccommon.ValidateAllowedStringValue(SAAS_REAL_REGIONS), Description: "region. If Region is `ap-guangzhou`, support: gz, sh, bj, cd (Means: GuangZhou, ShangHai, BeiJing, ChengDu); If Region is `ap-seoul`, support: hk, sg, th, kr, in, de, ca, use, sao, usw, jkt (Means: HongKong, Singapore, Bandkok, Seoul, Mumbai, Frankfurt, Toronto, Virginia, SaoPaulo, SiliconValley, Jakarta).", }, "bot_management": { Optional: true, Type: schema.TypeInt, Default: BOT_MANAGEMENT_STATUS_0, - ValidateFunc: validateAllowedIntValue(BOT_MANAGEMENT_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(BOT_MANAGEMENT_STATUS), Description: "Whether to purchase Bot management, 1: yes, 0: no. Default is 0.", }, "api_security": { Optional: true, Type: schema.TypeInt, Default: API_SECURITY_STATUS_0, - ValidateFunc: validateAllowedIntValue(API_SECURITY_STATUS), + ValidateFunc: tccommon.ValidateAllowedIntValue(API_SECURITY_STATUS), Description: "Whether to purchase API Security, 1: yes, 0: no. Default is 0.", }, //"domain_pkg_count": { // Optional: true, // Type: schema.TypeInt, - // ValidateFunc: validateIntegerMin(1), + // ValidateFunc: tccommon.ValidateIntegerMin(1), // Description: "Domain extension package count.", //}, //"qps_pkg_count": { // Optional: true, // Type: schema.TypeInt, - // ValidateFunc: validateIntegerMin(1), + // ValidateFunc: tccommon.ValidateIntegerMin(1), // Description: "QPS extension package count.", //}, // computed @@ -130,14 +134,14 @@ func resourceTencentCloudWafSaasInstance() *schema.Resource { } func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = waf.NewGenerateDealsAndPayNewRequest() response = waf.NewGenerateDealsAndPayNewResponse() - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() instanceId string mainlandMode int realRegion string @@ -198,7 +202,7 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte } if mainlandMode == REGION_ID_MAINLAND { - if !IsContains(SAAS_REAL_REGION_MAINLAND, realRegion) { + if !tccommon.IsContains(SAAS_REAL_REGION_MAINLAND, realRegion) { return fmt.Errorf("If Region is `ap-guangzhou`, parameter `real_region` is not legal") } @@ -207,7 +211,7 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte instanceGoodDetail.RealRegion = &realRegionInt } else { - if !IsContains(SAAS_REAL_REGION_NON_MAINLAND, realRegion) { + if !tccommon.IsContains(SAAS_REAL_REGION_NON_MAINLAND, realRegion) { return fmt.Errorf("If Region is `ap-seoul`, parameter `real_region` is not legal") } @@ -254,7 +258,7 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte apiSecurityGood.GoodsNum = helper.IntInt64(1) apiSecurityDetail.SubProductCode = helper.String(API_SECURITY_SUB_PRODUCT_CODE_SAAS) apiSecurityDetail.Pid = helper.IntInt64(API_SECURITY_PID_SAAS) - if mainlandMode == REGION_ID_1 { + if mainlandMode == svccwp.REGION_ID_1 { apiSecurityDetail.LabelTypes = helper.Strings([]string{API_SECURITY_LABEL_TYPES_SAAS_REGION1[goodsCategory]}) } else { apiSecurityDetail.LabelTypes = helper.Strings([]string{API_SECURITY_LABEL_TYPES_SAAS_REGION9[goodsCategory]}) @@ -334,10 +338,10 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte //} request.Goods = goods - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().GenerateDealsAndPayNew(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().GenerateDealsAndPayNew(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -366,10 +370,10 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte newSwitchElasticModeRequest.InstanceID = &instanceId newSwitchElasticModeRequest.Mode = helper.IntInt64(elasticMode) newSwitchElasticModeRequest.Edition = helper.String(EDITION_SAAS) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, newSwitchElasticModeRequest.GetAction(), newSwitchElasticModeRequest.ToJsonString(), result.ToJsonString()) } @@ -388,10 +392,10 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest() modifyInstanceQpsLimitRequest.InstanceId = &instanceId modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString()) } @@ -415,13 +419,13 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudWafSaasInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WafService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) @@ -501,11 +505,11 @@ func resourceTencentCloudWafSaasInstanceRead(d *schema.ResourceData, meta interf } func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) modifyInstanceNameRequest = waf.NewModifyInstanceNameRequest() modifyInstanceRenewFlagRequest = waf.NewModifyInstanceRenewFlagRequest() newSwitchElasticModeRequest = waf.NewSwitchElasticModeRequest() @@ -526,10 +530,10 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte modifyInstanceNameRequest.InstanceID = &instanceId modifyInstanceNameRequest.InstanceName = helper.String(v.(string)) modifyInstanceNameRequest.Edition = helper.String(EDITION_SAAS) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceName(modifyInstanceNameRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceName(modifyInstanceNameRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceNameRequest.GetAction(), modifyInstanceNameRequest.ToJsonString(), result.ToJsonString()) } @@ -548,10 +552,10 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte if v, ok := d.GetOkExists("auto_renew_flag"); ok { modifyInstanceRenewFlagRequest.InstanceId = &instanceId modifyInstanceRenewFlagRequest.RenewFlag = helper.IntInt64(v.(int)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceRenewFlag(modifyInstanceRenewFlagRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceRenewFlag(modifyInstanceRenewFlagRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceRenewFlagRequest.GetAction(), modifyInstanceRenewFlagRequest.ToJsonString(), result.ToJsonString()) } @@ -571,10 +575,10 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte newSwitchElasticModeRequest.InstanceID = &instanceId newSwitchElasticModeRequest.Mode = helper.IntInt64(v.(int)) newSwitchElasticModeRequest.Edition = helper.String(EDITION_SAAS) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().SwitchElasticMode(newSwitchElasticModeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, newSwitchElasticModeRequest.GetAction(), newSwitchElasticModeRequest.ToJsonString(), result.ToJsonString()) } @@ -600,10 +604,10 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest() modifyInstanceQpsLimitRequest.InstanceId = &instanceId modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString()) } @@ -627,8 +631,8 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudWafSaasInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_waf_saas_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_waf_saas_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return fmt.Errorf("tencentcloud waf saas instance not supported delete, please contact the work order for processing") } diff --git a/tencentcloud/resource_tc_waf_saas_instance_test.go b/tencentcloud/services/waf/resource_tc_waf_saas_instance_test.go similarity index 90% rename from tencentcloud/resource_tc_waf_saas_instance_test.go rename to tencentcloud/services/waf/resource_tc_waf_saas_instance_test.go index b80d4d657e..cf599dc852 100644 --- a/tencentcloud/resource_tc_waf_saas_instance_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_saas_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudNeedFixWafSaasInstanceResource_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: testAccWafSaasInstance, diff --git a/tencentcloud/services/waf/resource_tc_waf_web_shell.go b/tencentcloud/services/waf/resource_tc_waf_web_shell.go new file mode 100644 index 0000000000..cbbc51eb09 --- /dev/null +++ b/tencentcloud/services/waf/resource_tc_waf_web_shell.go @@ -0,0 +1,132 @@ +package waf + +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" + waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudWafWebShell() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudWafWebShellCreate, + Read: resourceTencentCloudWafWebShellRead, + Update: resourceTencentCloudWafWebShellUpdate, + Delete: resourceTencentCloudWafWebShellDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, + Schema: map[string]*schema.Schema{ + "domain": { + Type: schema.TypeString, + Required: true, + Description: "Domain.", + }, + "status": { + Type: schema.TypeInt, + Required: true, + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1, 2}), + Description: "Webshell status, 1: open; 0: closed; 2: log.", + }, + }, + } +} + +func resourceTencentCloudWafWebShellCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_web_shell.create")() + defer tccommon.InconsistentCheck(d, meta)() + + var domain string + + if v, ok := d.GetOk("domain"); ok { + domain = v.(string) + } + + d.SetId(domain) + + return resourceTencentCloudWafWebShellUpdate(d, meta) +} + +func resourceTencentCloudWafWebShellRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_web_shell.read")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + domain = d.Id() + ) + + webShell, err := service.DescribeWafWebShellById(ctx, domain) + if err != nil { + return err + } + + if webShell == nil { + d.SetId("") + log.Printf("[WARN]%s resource `WafWebShell` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + + if webShell.Domain != nil { + _ = d.Set("domain", webShell.Domain) + } + + if webShell.Status != nil { + _ = d.Set("status", webShell.Status) + } + + return nil +} + +func resourceTencentCloudWafWebShellUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_web_shell.update")() + defer tccommon.InconsistentCheck(d, meta)() + + var ( + logId = tccommon.GetLogId(tccommon.ContextNil) + request = waf.NewModifyWebshellStatusRequest() + domain = d.Id() + ) + + webShellStatus := waf.WebshellStatus{} + webShellStatus.Domain = helper.String(domain) + + if v, ok := d.GetOkExists("status"); ok { + webShellStatus.Status = helper.IntUint64(v.(int)) + } + + request.Webshell = &webShellStatus + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().ModifyWebshellStatus(request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s update waf webShell failed, reason:%+v", logId, err) + return err + } + + return resourceTencentCloudWafWebShellRead(d, meta) +} + +func resourceTencentCloudWafWebShellDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_waf_web_shell.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/resource_tc_waf_web_shell_test.go b/tencentcloud/services/waf/resource_tc_waf_web_shell_test.go similarity index 88% rename from tencentcloud/resource_tc_waf_web_shell_test.go rename to tencentcloud/services/waf/resource_tc_waf_web_shell_test.go index d6b94ca4e3..e52e06c132 100644 --- a/tencentcloud/resource_tc_waf_web_shell_test.go +++ b/tencentcloud/services/waf/resource_tc_waf_web_shell_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package waf_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 TestAccTencentCloudWafWebShellResource_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: testAccWafWebShell, diff --git a/tencentcloud/service_tencentcloud_waf.go b/tencentcloud/services/waf/service_tencentcloud_waf.go similarity index 96% rename from tencentcloud/service_tencentcloud_waf.go rename to tencentcloud/services/waf/service_tencentcloud_waf.go index d46c4691f9..f4f8113ffb 100644 --- a/tencentcloud/service_tencentcloud_waf.go +++ b/tencentcloud/services/waf/service_tencentcloud_waf.go @@ -1,14 +1,17 @@ -package tencentcloud +package waf import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" waf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -18,7 +21,7 @@ type WafService struct { } func (me *WafService) DescribeWafCustomRuleById(ctx context.Context, domain, ruleId string) (CustomRule *waf.DescribeCustomRulesRspRuleListItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeCustomRuleListRequest() request.Domain = &domain @@ -57,7 +60,7 @@ func (me *WafService) DescribeWafCustomRuleById(ctx context.Context, domain, rul } func (me *WafService) DeleteWafCustomRuleById(ctx context.Context, domain, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteCustomRuleRequest() request.Domain = &domain @@ -83,7 +86,7 @@ func (me *WafService) DeleteWafCustomRuleById(ctx context.Context, domain, ruleI } func (me *WafService) DescribeWafCustomWhiteRuleById(ctx context.Context, domain, ruleId string) (CustomWhiteRule *waf.DescribeCustomRulesRspRuleListItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeCustomWhiteRuleRequest() request.Domain = &domain @@ -122,7 +125,7 @@ func (me *WafService) DescribeWafCustomWhiteRuleById(ctx context.Context, domain } func (me *WafService) DeleteWafCustomWhiteRuleById(ctx context.Context, domain, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteCustomWhiteRuleRequest() request.Domain = &domain @@ -150,7 +153,7 @@ func (me *WafService) DeleteWafCustomWhiteRuleById(ctx context.Context, domain, func (me *WafService) DescribeWafCiphersByFilter(ctx context.Context) (ciphers []*waf.TLSCiphers, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeCiphersDetailRequest() ) @@ -180,7 +183,7 @@ func (me *WafService) DescribeWafCiphersByFilter(ctx context.Context) (ciphers [ func (me *WafService) DescribeWafTlsVersionsByFilter(ctx context.Context) (tlsVersions []*waf.TLSVersion, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeTlsVersionRequest() ) @@ -209,7 +212,7 @@ func (me *WafService) DescribeWafTlsVersionsByFilter(ctx context.Context) (tlsVe } func (me *WafService) DescribeDomainsById(ctx context.Context, instanceID, domain string) (domainInfo *waf.DomainInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeDomainsRequest() request.Offset = common.Uint64Ptr(0) @@ -252,7 +255,7 @@ func (me *WafService) DescribeDomainsById(ctx context.Context, instanceID, domai } func (me *WafService) DescribeWafClbDomainById(ctx context.Context, instanceID, domain, domainId string) (clbDomainInfo *waf.ClbDomainsInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeDomainDetailsClbRequest() request.InstanceId = &instanceID @@ -284,7 +287,7 @@ func (me *WafService) DescribeWafClbDomainById(ctx context.Context, instanceID, } func (me *WafService) DeleteWafClbDomainById(ctx context.Context, instanceID, domain, domainId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteHostRequest() request.HostsDel = []*waf.HostDel{ @@ -315,7 +318,7 @@ func (me *WafService) DeleteWafClbDomainById(ctx context.Context, instanceID, do } func (me *WafService) DescribeWafSaasDomainById(ctx context.Context, instanceID, domain, domainId string) (saasDomain *waf.DomainsPartInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeDomainDetailsSaasRequest() request.InstanceId = &instanceID @@ -347,7 +350,7 @@ func (me *WafService) DescribeWafSaasDomainById(ctx context.Context, instanceID, } func (me *WafService) DeleteWafSaasDomainById(ctx context.Context, instanceID, domain string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteSpartaProtectionRequest() request.InstanceID = common.StringPtr(instanceID) @@ -374,7 +377,7 @@ func (me *WafService) DeleteWafSaasDomainById(ctx context.Context, instanceID, d func (me *WafService) DescribeWafDomainsByFilter(ctx context.Context, instanceID, domain string) (domains []*waf.DomainInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeDomainsRequest() ) @@ -437,7 +440,7 @@ func (me *WafService) DescribeWafDomainsByFilter(ctx context.Context, instanceID func (me *WafService) DescribeWafFindDomainsByFilter(ctx context.Context, param map[string]interface{}) (findDomains []*waf.FindAllDomainDetail, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeFindDomainListRequest() ) @@ -499,7 +502,7 @@ func (me *WafService) DescribeWafFindDomainsByFilter(ctx context.Context, param func (me *WafService) DescribeWafWafInfosByFilter(ctx context.Context, param map[string]interface{}) (wafInfos []*waf.ClbHostResult, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeWafInfoRequest() ) @@ -534,7 +537,7 @@ func (me *WafService) DescribeWafWafInfosByFilter(ctx context.Context, param map func (me *WafService) DescribeWafPortsByFilter(ctx context.Context, param map[string]interface{}) (ports *waf.DescribePortsResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribePortsRequest() ) @@ -573,7 +576,7 @@ func (me *WafService) DescribeWafPortsByFilter(ctx context.Context, param map[st func (me *WafService) DescribeWafUserDomainsByFilter(ctx context.Context) (userDomains []*waf.UserDomainInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeUserDomainInfoRequest() ) @@ -602,7 +605,7 @@ func (me *WafService) DescribeWafUserDomainsByFilter(ctx context.Context) (userD } func (me *WafService) DescribeWafInstanceById(ctx context.Context, instanceId string) (instance *waf.InstanceInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeInstancesRequest() request.Offset = common.Uint64Ptr(1) @@ -641,7 +644,7 @@ func (me *WafService) DescribeWafInstanceById(ctx context.Context, instanceId st func (me *WafService) DescribeWafAttackLogHistogramByFilter(ctx context.Context, param map[string]interface{}) (AttackLogHistogram *waf.GetAttackHistogramResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewGetAttackHistogramRequest() ) @@ -689,7 +692,7 @@ func (me *WafService) DescribeWafAttackLogHistogramByFilter(ctx context.Context, func (me *WafService) DescribeWafAttackLogListByFilter(ctx context.Context, param map[string]interface{}) (AttackLogList []*waf.AttackLogInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewSearchAttackLogRequest() ) @@ -751,7 +754,7 @@ func (me *WafService) DescribeWafAttackLogListByFilter(ctx context.Context, para func (me *WafService) DescribeWafAttackOverviewByFilter(ctx context.Context, param map[string]interface{}) (AttackOverview *waf.DescribeAttackOverviewResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeAttackOverviewRequest() ) @@ -807,7 +810,7 @@ func (me *WafService) DescribeWafAttackOverviewByFilter(ctx context.Context, par func (me *WafService) DescribeWafAttackTotalCountByFilter(ctx context.Context, param map[string]interface{}) (AttackTotalCount *waf.GetAttackTotalCountResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewGetAttackTotalCountRequest() ) @@ -854,7 +857,7 @@ func (me *WafService) DescribeWafAttackTotalCountByFilter(ctx context.Context, p func (me *WafService) DescribeWafPeakPointsByFilter(ctx context.Context, param map[string]interface{}) (PeakPoints []*waf.PeakPointsItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribePeakPointsRequest() ) @@ -909,7 +912,7 @@ func (me *WafService) DescribeWafPeakPointsByFilter(ctx context.Context, param m } func (me *WafService) DescribeWafAntiFakeById(ctx context.Context, id, domain string) (antiFake *waf.CacheUrlItems, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeAntiFakeRulesRequest() request.Domain = &domain @@ -948,7 +951,7 @@ func (me *WafService) DescribeWafAntiFakeById(ctx context.Context, id, domain st } func (me *WafService) DeleteWafAntiFakeById(ctx context.Context, id, domain string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteAntiFakeUrlRequest() idInt, _ := strconv.ParseUint(id, 10, 64) @@ -975,7 +978,7 @@ func (me *WafService) DeleteWafAntiFakeById(ctx context.Context, id, domain stri } func (me *WafService) DescribeWafAntiInfoLeakById(ctx context.Context, ruleId, domain string) (antiInfoLeak *waf.DescribeAntiLeakageItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeAntiInfoLeakageRulesRequest() request.Domain = &domain @@ -1012,7 +1015,7 @@ func (me *WafService) DescribeWafAntiInfoLeakById(ctx context.Context, ruleId, d } func (me *WafService) DeleteWafAntiInfoLeakById(ctx context.Context, ruleId, domain string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteAntiInfoLeakRuleRequest() ruleIdInt, _ := strconv.ParseUint(ruleId, 10, 64) @@ -1040,7 +1043,7 @@ func (me *WafService) DeleteWafAntiInfoLeakById(ctx context.Context, ruleId, dom func (me *WafService) DescribeWafInstanceQpsLimitByFilter(ctx context.Context, param map[string]interface{}) (instanceQpsLimit *waf.QpsData, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewGetInstanceQpsLimitRequest() ) @@ -1079,7 +1082,7 @@ func (me *WafService) DescribeWafInstanceQpsLimitByFilter(ctx context.Context, p } func (me *WafService) DescribeWafAutoDenyRulesById(ctx context.Context, domain string) (autoDenyRules *waf.DescribeWafAutoDenyRulesResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeWafAutoDenyRulesRequest() request.Domain = &domain @@ -1105,7 +1108,7 @@ func (me *WafService) DescribeWafAutoDenyRulesById(ctx context.Context, domain s } func (me *WafService) DescribeWafModuleStatusById(ctx context.Context, domain string) (moduleStatus *waf.DescribeModuleStatusResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeModuleStatusRequest() request.Domain = &domain @@ -1131,7 +1134,7 @@ func (me *WafService) DescribeWafModuleStatusById(ctx context.Context, domain st } func (me *WafService) DescribeSpartaProtectionInfoById(ctx context.Context, domain, edition string) (protectionInfo *waf.DescribeSpartaProtectionInfoResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeSpartaProtectionInfoRequest() request.Domain = &domain @@ -1158,7 +1161,7 @@ func (me *WafService) DescribeSpartaProtectionInfoById(ctx context.Context, doma } func (me *WafService) DescribeWafWebShellById(ctx context.Context, domain string) (webShell *waf.DescribeWebshellStatusResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeWebshellStatusRequest() request.Domain = &domain @@ -1185,7 +1188,7 @@ func (me *WafService) DescribeWafWebShellById(ctx context.Context, domain string func (me *WafService) DescribeWafUserClbRegionsByFilter(ctx context.Context) (userClbRegions *waf.DescribeUserClbWafRegionsResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = waf.NewDescribeUserClbWafRegionsRequest() ) @@ -1214,7 +1217,7 @@ func (me *WafService) DescribeWafUserClbRegionsByFilter(ctx context.Context) (us } func (me *WafService) DescribeWafCcById(ctx context.Context, domain, ruleId string) (cc *waf.CCRuleItems, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeCCRuleListRequest() request.Domain = &domain @@ -1254,7 +1257,7 @@ func (me *WafService) DescribeWafCcById(ctx context.Context, domain, ruleId stri } func (me *WafService) DeleteWafCcById(ctx context.Context, domain, ruleId, name string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteCCRuleRequest() request.Domain = common.StringPtr(domain) @@ -1282,7 +1285,7 @@ func (me *WafService) DeleteWafCcById(ctx context.Context, domain, ruleId, name } func (me *WafService) DescribeWafCcAutoStatusById(ctx context.Context, domain string) (CcAutoStatus *waf.DescribeCCAutoStatusResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeCCAutoStatusRequest() request.Domain = &domain @@ -1308,7 +1311,7 @@ func (me *WafService) DescribeWafCcAutoStatusById(ctx context.Context, domain st } func (me *WafService) DeleteWafCcAutoStatusById(ctx context.Context, domain, edition string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewUpsertCCAutoStatusRequest() request.Domain = &domain @@ -1335,7 +1338,7 @@ func (me *WafService) DeleteWafCcAutoStatusById(ctx context.Context, domain, edi } func (me *WafService) DescribeWafCcSessionById(ctx context.Context, domain, edition, sessionID string) (ccSession *waf.SessionItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeSessionRequest() request.Domain = &domain @@ -1372,7 +1375,7 @@ func (me *WafService) DescribeWafCcSessionById(ctx context.Context, domain, edit } func (me *WafService) DeleteWafCcSessionById(ctx context.Context, domain, edition, sessionID string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteSessionRequest() request.Domain = &domain @@ -1400,7 +1403,7 @@ func (me *WafService) DeleteWafCcSessionById(ctx context.Context, domain, editio } func (me *WafService) DescribeWafIpAccessControlById(ctx context.Context, domain string) (ipAccessControlList []*waf.IpAccessControlItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDescribeIpAccessControlRequest() request.Domain = &domain @@ -1446,7 +1449,7 @@ func (me *WafService) DescribeWafIpAccessControlById(ctx context.Context, domain } func (me *WafService) DeleteWafIpAccessControlByDiff(ctx context.Context, domain string, ids []string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteIpAccessControlRequest() request.Domain = &domain @@ -1473,7 +1476,7 @@ func (me *WafService) DeleteWafIpAccessControlByDiff(ctx context.Context, domain } func (me *WafService) DeleteWafIpAccessControlById(ctx context.Context, domain string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := waf.NewDeleteIpAccessControlRequest() request.Domain = &domain diff --git a/tencentcloud/data_source_tc_wedata_data_source_list.go b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_list.go similarity index 93% rename from tencentcloud/data_source_tc_wedata_data_source_list.go rename to tencentcloud/services/wedata/data_source_tc_wedata_data_source_list.go index 3d16333ee0..c4c0274e9e 100644 --- a/tencentcloud/data_source_tc_wedata_data_source_list.go +++ b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_list.go @@ -1,16 +1,19 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWedataDataSourceList() *schema.Resource { +func DataSourceTencentCloudWedataDataSourceList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWedataDataSourceListRead, Schema: map[string]*schema.Schema{ @@ -227,13 +230,13 @@ func dataSourceTencentCloudWedataDataSourceList() *schema.Resource { } func dataSourceTencentCloudWedataDataSourceListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_wedata_data_source_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_wedata_data_source_list.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} dataSourceList []*wedata.DataSourceInfo ) @@ -283,10 +286,10 @@ func dataSourceTencentCloudWedataDataSourceListRead(d *schema.ResourceData, meta paramMap["Filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWedataDataSourceListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dataSourceList = result @@ -440,7 +443,7 @@ func dataSourceTencentCloudWedataDataSourceListRead(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/services/wedata/data_source_tc_wedata_data_source_list_test.go b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_list_test.go new file mode 100644 index 0000000000..521c73064d --- /dev/null +++ b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_list_test.go @@ -0,0 +1,42 @@ +package wedata_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWedataDataSourceListDataSource_basic -v +func TestAccTencentCloudNeedFixWedataDataSourceListDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWedataDataSourceListDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_data_source_list.example"), + ), + }, + }, + }) +} + +const testAccWedataDataSourceListDataSource = ` +data "tencentcloud_wedata_data_source_list" "example" { + order_fields { + name = "create_time" + direction = "DESC" + } + + filters { + name = "Name" + values = ["tf_example"] + } +} +` diff --git a/tencentcloud/data_source_tc_wedata_data_source_without_info.go b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_without_info.go similarity index 94% rename from tencentcloud/data_source_tc_wedata_data_source_without_info.go rename to tencentcloud/services/wedata/data_source_tc_wedata_data_source_without_info.go index 1313bda802..c811fd6f5f 100644 --- a/tencentcloud/data_source_tc_wedata_data_source_without_info.go +++ b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_without_info.go @@ -1,16 +1,19 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWedataDataSourceWithoutInfo() *schema.Resource { +func DataSourceTencentCloudWedataDataSourceWithoutInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWedataDataSourceWithoutInfoRead, Schema: map[string]*schema.Schema{ @@ -227,13 +230,13 @@ func dataSourceTencentCloudWedataDataSourceWithoutInfo() *schema.Resource { } func dataSourceTencentCloudWedataDataSourceWithoutInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_wedata_data_source_without_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_wedata_data_source_without_info.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} data []*wedata.DataSourceInfo ) @@ -283,10 +286,10 @@ func dataSourceTencentCloudWedataDataSourceWithoutInfoRead(d *schema.ResourceDat paramMap["Filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWedataDataSourceWithoutInfoByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result @@ -440,7 +443,7 @@ func dataSourceTencentCloudWedataDataSourceWithoutInfoRead(d *schema.ResourceDat 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/wedata/data_source_tc_wedata_data_source_without_info_test.go b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_without_info_test.go new file mode 100644 index 0000000000..ca08404723 --- /dev/null +++ b/tencentcloud/services/wedata/data_source_tc_wedata_data_source_without_info_test.go @@ -0,0 +1,42 @@ +package wedata_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +// go test -i; go test -test.run TestAccTencentCloudNeedFixWedataDataSourceWithoutInfoDataSource_basic -v +func TestAccTencentCloudNeedFixWedataDataSourceWithoutInfoDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWedataDataSourceWithoutInfoDataSource, + Check: resource.ComposeTestCheckFunc( + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_data_source_without_info.example"), + ), + }, + }, + }) +} + +const testAccWedataDataSourceWithoutInfoDataSource = ` +data "tencentcloud_wedata_data_source_without_info" "example" { + filters { + name = "ownerProjectId" + values = ["1612982498218618880"] + } + + order_fields { + name = "create_time" + direction = "DESC" + } +} +` diff --git a/tencentcloud/data_source_tc_wedata_rule_templates.go b/tencentcloud/services/wedata/data_source_tc_wedata_rule_templates.go similarity index 92% rename from tencentcloud/data_source_tc_wedata_rule_templates.go rename to tencentcloud/services/wedata/data_source_tc_wedata_rule_templates.go index 91fab97001..043aafe0d7 100644 --- a/tencentcloud/data_source_tc_wedata_rule_templates.go +++ b/tencentcloud/services/wedata/data_source_tc_wedata_rule_templates.go @@ -1,15 +1,18 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudWedataRuleTemplates() *schema.Resource { +func DataSourceTencentCloudWedataRuleTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudWedataRuleTemplatesRead, Schema: map[string]*schema.Schema{ @@ -153,12 +156,12 @@ func dataSourceTencentCloudWedataRuleTemplates() *schema.Resource { } func dataSourceTencentCloudWedataRuleTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_wedata_rule_templates.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_wedata_rule_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.GetOkExists("type"); ok { @@ -183,14 +186,14 @@ func dataSourceTencentCloudWedataRuleTemplatesRead(d *schema.ResourceData, meta paramMap["SourceEngineTypes"] = sourceEngineTypes } - service := WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + service := WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var data []*wedata.RuleTemplate - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeWedataRuleTemplatesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result return nil @@ -288,7 +291,7 @@ func dataSourceTencentCloudWedataRuleTemplatesRead(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/services/wedata/data_source_tc_wedata_rule_templates_test.go b/tencentcloud/services/wedata/data_source_tc_wedata_rule_templates_test.go new file mode 100644 index 0000000000..f9e1c3ec9c --- /dev/null +++ b/tencentcloud/services/wedata/data_source_tc_wedata_rule_templates_test.go @@ -0,0 +1,36 @@ +package wedata_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixWedataRuleTemplatesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccWedataRuleTemplatesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_wedata_rule_templates.rule_templates")), + }, + }, + }) +} + +const testAccWedataRuleTemplatesDataSource = ` + +data "tencentcloud_wedata_rule_templates" "rule_templates" { + type = 2 + source_object_type = 2 + project_id = "1840731346428280832" + source_engine_types = [2, 4, 16] +} + +` diff --git a/tencentcloud/resource_tc_wedata_baseline.go b/tencentcloud/services/wedata/resource_tc_wedata_baseline.go similarity index 92% rename from tencentcloud/resource_tc_wedata_baseline.go rename to tencentcloud/services/wedata/resource_tc_wedata_baseline.go index cf2aa9300c..ea1a8ffe63 100644 --- a/tencentcloud/resource_tc_wedata_baseline.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_baseline.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataBaseline() *schema.Resource { +func ResourceTencentCloudWedataBaseline() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataBaselineCreate, Read: resourceTencentCloudWedataBaselineRead, @@ -245,11 +248,11 @@ func resourceTencentCloudWedataBaseline() *schema.Resource { } func resourceTencentCloudWedataBaselineCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_baseline.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_baseline.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateBaselineRequest() response = wedata.NewCreateBaselineResponse() projectId string @@ -427,10 +430,10 @@ func resourceTencentCloudWedataBaselineCreate(d *schema.ResourceData, meta inter request.BaselineCreateAlarmRuleRequest = &createAlarmRuleRequest } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateBaseline(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateBaseline(request) if e != nil { - return retryError(e) + return tccommon.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,22 +449,22 @@ func resourceTencentCloudWedataBaselineCreate(d *schema.ResourceData, meta inter baselineInt := *response.Response.Data.BaselineId baselineId = helper.Int64ToStr(baselineInt) - d.SetId(strings.Join([]string{projectId, baselineId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, baselineId}, tccommon.FILED_SP)) return resourceTencentCloudWedataBaselineRead(d, meta) } func resourceTencentCloudWedataBaselineRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_baseline.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_baseline.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -638,11 +641,11 @@ func resourceTencentCloudWedataBaselineRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudWedataBaselineUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_baseline.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_baseline.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewEditBaselineRequest() ) @@ -654,7 +657,7 @@ func resourceTencentCloudWedataBaselineUpdate(d *schema.ResourceData, meta inter } } - 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) } @@ -745,10 +748,10 @@ func resourceTencentCloudWedataBaselineUpdate(d *schema.ResourceData, meta inter request.AlarmRuleDto = &alarmRuleDto } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().EditBaseline(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().EditBaseline(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -765,16 +768,16 @@ func resourceTencentCloudWedataBaselineUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudWedataBaselineDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_baseline.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_baseline.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_baseline_test.go b/tencentcloud/services/wedata/resource_tc_wedata_baseline_test.go similarity index 96% rename from tencentcloud/resource_tc_wedata_baseline_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_baseline_test.go index a54ba43570..24132d1a51 100644 --- a/tencentcloud/resource_tc_wedata_baseline_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_baseline_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataBaselineResource_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: testAccWedataBaseline, diff --git a/tencentcloud/resource_tc_wedata_datasource.go b/tencentcloud/services/wedata/resource_tc_wedata_datasource.go similarity index 84% rename from tencentcloud/resource_tc_wedata_datasource.go rename to tencentcloud/services/wedata/resource_tc_wedata_datasource.go index f1ad17aeba..fbaf500496 100644 --- a/tencentcloud/resource_tc_wedata_datasource.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_datasource.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataDatasource() *schema.Resource { +func ResourceTencentCloudWedataDatasource() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataDatasourceCreate, Read: resourceTencentCloudWedataDatasourceRead, @@ -119,11 +122,11 @@ func resourceTencentCloudWedataDatasource() *schema.Resource { } func resourceTencentCloudWedataDatasourceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_datasource.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_datasource.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateDataSourceRequest() response = wedata.NewCreateDataSourceResponse() ownerProjectId string @@ -199,10 +202,10 @@ func resourceTencentCloudWedataDatasourceCreate(d *schema.ResourceData, meta int request.COSRegion = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateDataSource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateDataSource(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -223,22 +226,22 @@ func resourceTencentCloudWedataDatasourceCreate(d *schema.ResourceData, meta int DataInt := *response.Response.Data datasourceId = strconv.FormatUint(DataInt, 10) - d.SetId(strings.Join([]string{ownerProjectId, datasourceId}, FILED_SP)) + d.SetId(strings.Join([]string{ownerProjectId, datasourceId}, tccommon.FILED_SP)) return resourceTencentCloudWedataDatasourceRead(d, meta) } func resourceTencentCloudWedataDatasourceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_datasource.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_datasource.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -316,11 +319,11 @@ func resourceTencentCloudWedataDatasourceRead(d *schema.ResourceData, meta inter } func resourceTencentCloudWedataDatasourceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_datasource.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_datasource.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewModifyDataSourceRequest() ) @@ -332,7 +335,7 @@ func resourceTencentCloudWedataDatasourceUpdate(d *schema.ResourceData, meta int } } - 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) } @@ -409,10 +412,10 @@ func resourceTencentCloudWedataDatasourceUpdate(d *schema.ResourceData, meta int request.COSRegion = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyDataSource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyDataSource(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -429,16 +432,16 @@ func resourceTencentCloudWedataDatasourceUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudWedataDatasourceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_datasource.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_datasource.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_datasource_test.go b/tencentcloud/services/wedata/resource_tc_wedata_datasource_test.go similarity index 96% rename from tencentcloud/resource_tc_wedata_datasource_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_datasource_test.go index 1b613243a2..768bf2a048 100644 --- a/tencentcloud/resource_tc_wedata_datasource_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_datasource_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataDatasourceResource_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: testAccWedataDatasource, diff --git a/tencentcloud/resource_tc_wedata_dq_rule.go b/tencentcloud/services/wedata/resource_tc_wedata_dq_rule.go similarity index 94% rename from tencentcloud/resource_tc_wedata_dq_rule.go rename to tencentcloud/services/wedata/resource_tc_wedata_dq_rule.go index 7263144377..98940b3ec1 100644 --- a/tencentcloud/resource_tc_wedata_dq_rule.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_dq_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataDqRule() *schema.Resource { +func ResourceTencentCloudWedataDqRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataDqRuleCreate, Read: resourceTencentCloudWedataDqRuleRead, @@ -295,11 +298,11 @@ func resourceTencentCloudWedataDqRule() *schema.Resource { } func resourceTencentCloudWedataDqRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_dq_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_dq_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateRuleRequest() response = wedata.NewCreateRuleResponse() projectId string @@ -517,10 +520,10 @@ func resourceTencentCloudWedataDqRuleCreate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().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(), result.ToJsonString()) } @@ -541,22 +544,22 @@ func resourceTencentCloudWedataDqRuleCreate(d *schema.ResourceData, meta interfa ruleIdInt := *response.Response.Data.RuleId ruleId = helper.UInt64ToStr(ruleIdInt) - d.SetId(strings.Join([]string{projectId, ruleId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, ruleId}, tccommon.FILED_SP)) return resourceTencentCloudWedataDqRuleRead(d, meta) } func resourceTencentCloudWedataDqRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_dq_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_dq_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -791,11 +794,11 @@ func resourceTencentCloudWedataDqRuleRead(d *schema.ResourceData, meta interface } func resourceTencentCloudWedataDqRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_dq_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_dq_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewModifyRuleRequest() ) @@ -807,7 +810,7 @@ func resourceTencentCloudWedataDqRuleUpdate(d *schema.ResourceData, meta interfa } } - 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) } @@ -1013,10 +1016,10 @@ func resourceTencentCloudWedataDqRuleUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().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(), result.ToJsonString()) } @@ -1033,16 +1036,16 @@ func resourceTencentCloudWedataDqRuleUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudWedataDqRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_dq_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_dq_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_dq_rule_test.go b/tencentcloud/services/wedata/resource_tc_wedata_dq_rule_test.go similarity index 92% rename from tencentcloud/resource_tc_wedata_dq_rule_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_dq_rule_test.go index 27e8278c2d..d8e774c0fc 100644 --- a/tencentcloud/resource_tc_wedata_dq_rule_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_dq_rule_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataDqRuleResource_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: testAccWedataDqRule, diff --git a/tencentcloud/resource_tc_wedata_function.go b/tencentcloud/services/wedata/resource_tc_wedata_function.go similarity index 84% rename from tencentcloud/resource_tc_wedata_function.go rename to tencentcloud/services/wedata/resource_tc_wedata_function.go index 6d36b4f8ca..793c75379b 100644 --- a/tencentcloud/resource_tc_wedata_function.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_function.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataFunction() *schema.Resource { +func ResourceTencentCloudWedataFunction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataFunctionCreate, Read: resourceTencentCloudWedataFunctionRead, @@ -129,11 +132,11 @@ func resourceTencentCloudWedataFunction() *schema.Resource { } func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_function.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_function.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) createCustomFunctionRequest = wedata.NewCreateCustomFunctionRequest() createCustomFunctionResponse = wedata.NewCreateCustomFunctionResponse() saveCustomFunctionRequest = wedata.NewSaveCustomFunctionRequest() @@ -177,10 +180,10 @@ func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta inter projectId = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateCustomFunction(createCustomFunctionRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateCustomFunction(createCustomFunctionRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, createCustomFunctionRequest.GetAction(), createCustomFunctionRequest.ToJsonString(), result.ToJsonString()) } @@ -204,7 +207,7 @@ func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta inter } functionId = *createCustomFunctionResponse.Response.FunctionId - d.SetId(strings.Join([]string{functionId, funcType, funcName, projectId, clusterIdentifier}, FILED_SP)) + d.SetId(strings.Join([]string{functionId, funcType, funcName, projectId, clusterIdentifier}, tccommon.FILED_SP)) saveCustomFunctionRequest.FunctionId = &functionId submitCustomFunctionRequest.FunctionId = &functionId @@ -261,10 +264,10 @@ func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta inter saveCustomFunctionRequest.Example = helper.String(v.(string)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().SaveCustomFunction(saveCustomFunctionRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().SaveCustomFunction(saveCustomFunctionRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, saveCustomFunctionRequest.GetAction(), saveCustomFunctionRequest.ToJsonString(), result.ToJsonString()) } @@ -286,10 +289,10 @@ func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta inter submitCustomFunctionRequest.Comment = helper.String(v.(string)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().SubmitCustomFunction(submitCustomFunctionRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().SubmitCustomFunction(submitCustomFunctionRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, submitCustomFunctionRequest.GetAction(), submitCustomFunctionRequest.ToJsonString(), result.ToJsonString()) } @@ -311,16 +314,16 @@ func resourceTencentCloudWedataFunctionCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudWedataFunctionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_function.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_function.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -391,11 +394,11 @@ func resourceTencentCloudWedataFunctionRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudWedataFunctionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_function.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_function.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) saveCustomFunctionRequest = wedata.NewSaveCustomFunctionRequest() submitCustomFunctionRequest = wedata.NewSubmitCustomFunctionRequest() ) @@ -408,7 +411,7 @@ func resourceTencentCloudWedataFunctionUpdate(d *schema.ResourceData, meta inter } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -475,10 +478,10 @@ func resourceTencentCloudWedataFunctionUpdate(d *schema.ResourceData, meta inter saveCustomFunctionRequest.Example = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().SaveCustomFunction(saveCustomFunctionRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().SaveCustomFunction(saveCustomFunctionRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, saveCustomFunctionRequest.GetAction(), saveCustomFunctionRequest.ToJsonString(), result.ToJsonString()) } @@ -503,10 +506,10 @@ func resourceTencentCloudWedataFunctionUpdate(d *schema.ResourceData, meta inter submitCustomFunctionRequest.Comment = helper.String(v.(string)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().SubmitCustomFunction(submitCustomFunctionRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().SubmitCustomFunction(submitCustomFunctionRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, submitCustomFunctionRequest.GetAction(), submitCustomFunctionRequest.ToJsonString(), result.ToJsonString()) } @@ -528,16 +531,16 @@ func resourceTencentCloudWedataFunctionUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudWedataFunctionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_function.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_function.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 5 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_wedata_function_test.go b/tencentcloud/services/wedata/resource_tc_wedata_function_test.go similarity index 96% rename from tencentcloud/resource_tc_wedata_function_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_function_test.go index b0bfca464f..d9a62060a0 100644 --- a/tencentcloud/resource_tc_wedata_function_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_function_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataFunctionResource_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: testAccWedataFunction, diff --git a/tencentcloud/resource_tc_wedata_integration_offline_task.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task.go similarity index 97% rename from tencentcloud/resource_tc_wedata_integration_offline_task.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task.go index e73e5b830c..f7f14c392d 100644 --- a/tencentcloud/resource_tc_wedata_integration_offline_task.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataIntegrationOfflineTask() *schema.Resource { +func ResourceTencentCloudWedataIntegrationOfflineTask() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataIntegrationOfflineTaskCreate, Read: resourceTencentCloudWedataIntegrationOfflineTaskRead, @@ -840,11 +843,11 @@ func resourceTencentCloudWedataIntegrationOfflineTask() *schema.Resource { } func resourceTencentCloudWedataIntegrationOfflineTaskCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_offline_task.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_offline_task.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateOfflineTaskRequest() response = wedata.NewCreateOfflineTaskResponse() modifyIntegrationTaskRequest = wedata.NewModifyIntegrationTaskRequest() @@ -905,10 +908,10 @@ func resourceTencentCloudWedataIntegrationOfflineTaskCreate(d *schema.ResourceDa request.TaskMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateOfflineTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateOfflineTask(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -928,7 +931,7 @@ func resourceTencentCloudWedataIntegrationOfflineTaskCreate(d *schema.ResourceDa } taskId = *response.Response.TaskId - d.SetId(strings.Join([]string{projectId, taskId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, taskId}, tccommon.FILED_SP)) // Create IntegrationTask @@ -1538,10 +1541,10 @@ func resourceTencentCloudWedataIntegrationOfflineTaskCreate(d *schema.ResourceDa } modifyIntegrationTaskRequest.ProjectId = &projectId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationTask(modifyIntegrationTaskRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationTask(modifyIntegrationTaskRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyIntegrationTaskRequest.GetAction(), modifyIntegrationTaskRequest.ToJsonString(), result.ToJsonString()) } @@ -1558,16 +1561,16 @@ func resourceTencentCloudWedataIntegrationOfflineTaskCreate(d *schema.ResourceDa } func resourceTencentCloudWedataIntegrationOfflineTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_offline_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_offline_task.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -1620,11 +1623,11 @@ func resourceTencentCloudWedataIntegrationOfflineTaskRead(d *schema.ResourceData } func resourceTencentCloudWedataIntegrationOfflineTaskUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_offline_task.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_offline_task.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewModifyIntegrationTaskRequest() taskName string notes string @@ -1643,7 +1646,7 @@ func resourceTencentCloudWedataIntegrationOfflineTaskUpdate(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", idSplit) } @@ -2286,10 +2289,10 @@ func resourceTencentCloudWedataIntegrationOfflineTaskUpdate(d *schema.ResourceDa } request.ProjectId = &projectId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationTask(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -2306,16 +2309,16 @@ func resourceTencentCloudWedataIntegrationOfflineTaskUpdate(d *schema.ResourceDa } func resourceTencentCloudWedataIntegrationOfflineTaskDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_offline_task.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_offline_task.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_integration_offline_task_test.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task_test.go similarity index 96% rename from tencentcloud/resource_tc_wedata_integration_offline_task_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task_test.go index df1251dd7b..8e7a2d2e9e 100644 --- a/tencentcloud/resource_tc_wedata_integration_offline_task_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_offline_task_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataIntegrationOfflineTaskResource_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: testAccWedataIntegrationOfflineTask, diff --git a/tencentcloud/resource_tc_wedata_integration_realtime_task.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task.go similarity index 97% rename from tencentcloud/resource_tc_wedata_integration_realtime_task.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task.go index 6fa4af9893..1faf28625c 100644 --- a/tencentcloud/resource_tc_wedata_integration_realtime_task.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataIntegrationRealtimeTask() *schema.Resource { +func ResourceTencentCloudWedataIntegrationRealtimeTask() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataIntegrationRealtimeTaskCreate, Read: resourceTencentCloudWedataIntegrationRealtimeTaskRead, @@ -846,11 +849,11 @@ func resourceTencentCloudWedataIntegrationRealtimeTask() *schema.Resource { } func resourceTencentCloudWedataIntegrationRealtimeTaskCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_realtime_task.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_realtime_task.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateIntegrationTaskRequest() response = wedata.NewCreateIntegrationTaskResponse() modifyRequest = wedata.NewModifyIntegrationTaskRequest() @@ -893,10 +896,10 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskCreate(d *schema.ResourceD request.TaskInfo = &createIntegrationTaskInfo // create - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateIntegrationTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateIntegrationTask(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -911,7 +914,7 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskCreate(d *schema.ResourceD } taskId = *response.Response.TaskId - d.SetId(strings.Join([]string{projectId, taskId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, taskId}, tccommon.FILED_SP)) // modify if dMap, ok := helper.InterfacesHeadMap(d, "task_info"); ok { @@ -1533,10 +1536,10 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskCreate(d *schema.ResourceD } modifyRequest.ProjectId = &projectId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationTask(modifyRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationTask(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()) } @@ -1558,16 +1561,16 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskCreate(d *schema.ResourceD } func resourceTencentCloudWedataIntegrationRealtimeTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_realtime_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_realtime_task.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -2265,11 +2268,11 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskRead(d *schema.ResourceDat } func resourceTencentCloudWedataIntegrationRealtimeTaskUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_realtime_task.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_realtime_task.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewModifyIntegrationTaskRequest() ) @@ -2281,7 +2284,7 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskUpdate(d *schema.ResourceD } } - 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) } @@ -2916,10 +2919,10 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskUpdate(d *schema.ResourceD } request.ProjectId = &projectId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationTask(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -2936,16 +2939,16 @@ func resourceTencentCloudWedataIntegrationRealtimeTaskUpdate(d *schema.ResourceD } func resourceTencentCloudWedataIntegrationRealtimeTaskDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_realtime_task.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_realtime_task.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_integration_realtime_task_test.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task_test.go similarity index 95% rename from tencentcloud/resource_tc_wedata_integration_realtime_task_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task_test.go index c59fd9f14c..5a0c941d4c 100644 --- a/tencentcloud/resource_tc_wedata_integration_realtime_task_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_realtime_task_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataIntegrationRealtimeTaskResource_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: testAccWedataIntegrationRealtimeTask, diff --git a/tencentcloud/resource_tc_wedata_integration_task_node.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_task_node.go similarity index 94% rename from tencentcloud/resource_tc_wedata_integration_task_node.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_task_node.go index 503987112d..519d8d97a5 100644 --- a/tencentcloud/resource_tc_wedata_integration_task_node.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_task_node.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataIntegrationTaskNode() *schema.Resource { +func ResourceTencentCloudWedataIntegrationTaskNode() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataIntegrationTaskNodeCreate, Read: resourceTencentCloudWedataIntegrationTaskNodeRead, @@ -349,11 +352,11 @@ func resourceTencentCloudWedataIntegrationTaskNode() *schema.Resource { } func resourceTencentCloudWedataIntegrationTaskNodeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_task_node.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_task_node.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateIntegrationNodeRequest() response = wedata.NewCreateIntegrationNodeResponse() modifyRequest = wedata.NewModifyIntegrationNodeRequest() @@ -409,10 +412,10 @@ func resourceTencentCloudWedataIntegrationTaskNodeCreate(d *schema.ResourceData, // create request.NodeInfo = &createIntegrationNodeInfo - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateIntegrationNode(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateIntegrationNode(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -427,7 +430,7 @@ func resourceTencentCloudWedataIntegrationTaskNodeCreate(d *schema.ResourceData, } nodeId = *response.Response.Id - d.SetId(strings.Join([]string{projectId, nodeId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, nodeId}, tccommon.FILED_SP)) // modify modifyRequest.ProjectId = &projectId @@ -646,10 +649,10 @@ func resourceTencentCloudWedataIntegrationTaskNodeCreate(d *schema.ResourceData, } // create - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationNode(modifyRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationNode(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()) } @@ -666,16 +669,16 @@ func resourceTencentCloudWedataIntegrationTaskNodeCreate(d *schema.ResourceData, } func resourceTencentCloudWedataIntegrationTaskNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_task_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_task_node.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -948,11 +951,11 @@ func resourceTencentCloudWedataIntegrationTaskNodeRead(d *schema.ResourceData, m } func resourceTencentCloudWedataIntegrationTaskNodeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_task_node.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_task_node.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewModifyIntegrationNodeRequest() ) @@ -964,7 +967,7 @@ func resourceTencentCloudWedataIntegrationTaskNodeUpdate(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", idSplit) } @@ -1204,10 +1207,10 @@ func resourceTencentCloudWedataIntegrationTaskNodeUpdate(d *schema.ResourceData, request.NodeInfo = &integrationNodeInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyIntegrationNode(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyIntegrationNode(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -1224,16 +1227,16 @@ func resourceTencentCloudWedataIntegrationTaskNodeUpdate(d *schema.ResourceData, } func resourceTencentCloudWedataIntegrationTaskNodeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_integration_task_node.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_integration_task_node.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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_wedata_integration_task_node_test.go b/tencentcloud/services/wedata/resource_tc_wedata_integration_task_node_test.go similarity index 96% rename from tencentcloud/resource_tc_wedata_integration_task_node_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_integration_task_node_test.go index b44cb7c22f..671b55e4a0 100644 --- a/tencentcloud/resource_tc_wedata_integration_task_node_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_integration_task_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataIntegrationTaskNodeResource_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: testAccWedataIntegrationTaskNode, diff --git a/tencentcloud/resource_tc_wedata_resource.go b/tencentcloud/services/wedata/resource_tc_wedata_resource.go similarity index 77% rename from tencentcloud/resource_tc_wedata_resource.go rename to tencentcloud/services/wedata/resource_tc_wedata_resource.go index 407462e01e..394db31082 100644 --- a/tencentcloud/resource_tc_wedata_resource.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_resource.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataResource() *schema.Resource { +func ResourceTencentCloudWedataResource() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataResourceCreate, Read: resourceTencentCloudWedataResourceRead, @@ -63,11 +66,11 @@ func resourceTencentCloudWedataResource() *schema.Resource { } func resourceTencentCloudWedataResourceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_resource.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateOrUpdateResourceRequest() response = wedata.NewCreateOrUpdateResourceResponse() projectId string @@ -103,10 +106,10 @@ func resourceTencentCloudWedataResourceCreate(d *schema.ResourceData, meta inter request.NewFile = helper.Bool(true) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateOrUpdateResource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateOrUpdateResource(request) if e != nil { - return retryError(e) + return tccommon.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 resourceTencentCloudWedataResourceCreate(d *schema.ResourceData, meta inter } resourceId = *response.Response.Data[0].ResourceId - d.SetId(strings.Join([]string{projectId, filePath, resourceId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, filePath, resourceId}, tccommon.FILED_SP)) return resourceTencentCloudWedataResourceRead(d, meta) } func resourceTencentCloudWedataResourceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_resource.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } @@ -188,11 +191,11 @@ func resourceTencentCloudWedataResourceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudWedataResourceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_resource.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewCreateOrUpdateResourceRequest() ) @@ -204,7 +207,7 @@ func resourceTencentCloudWedataResourceUpdate(d *schema.ResourceData, meta inter } } - 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) } @@ -232,10 +235,10 @@ func resourceTencentCloudWedataResourceUpdate(d *schema.ResourceData, meta inter request.NewFile = helper.Bool(false) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateOrUpdateResource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateOrUpdateResource(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -252,16 +255,16 @@ func resourceTencentCloudWedataResourceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudWedataResourceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_resource.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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) } diff --git a/tencentcloud/resource_tc_wedata_resource_test.go b/tencentcloud/services/wedata/resource_tc_wedata_resource_test.go similarity index 93% rename from tencentcloud/resource_tc_wedata_resource_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_resource_test.go index 5227af80ec..d95df9ea43 100644 --- a/tencentcloud/resource_tc_wedata_resource_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_resource_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataResourceResource_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: testAccWedataResource, diff --git a/tencentcloud/resource_tc_wedata_rule_template.go b/tencentcloud/services/wedata/resource_tc_wedata_rule_template.go similarity index 82% rename from tencentcloud/resource_tc_wedata_rule_template.go rename to tencentcloud/services/wedata/resource_tc_wedata_rule_template.go index 97644320ac..6414c76ac9 100644 --- a/tencentcloud/resource_tc_wedata_rule_template.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_rule_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataRuleTemplate() *schema.Resource { +func ResourceTencentCloudWedataRuleTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataRuleTemplateCreate, Read: resourceTencentCloudWedataRuleTemplateRead, @@ -91,10 +94,10 @@ func resourceTencentCloudWedataRuleTemplate() *schema.Resource { } func resourceTencentCloudWedataRuleTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_rule_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_rule_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = wedata.NewCreateRuleTemplateRequest() @@ -148,10 +151,10 @@ func resourceTencentCloudWedataRuleTemplateCreate(d *schema.ResourceData, meta i request.WhereFlag = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().CreateRuleTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().CreateRuleTemplate(request) if e != nil { - return retryError(e) + return tccommon.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,22 +167,22 @@ func resourceTencentCloudWedataRuleTemplateCreate(d *schema.ResourceData, meta i } ruleTemplateId = *response.Response.Data - d.SetId(projectId + FILED_SP + helper.UInt64ToStr(ruleTemplateId)) + d.SetId(projectId + tccommon.FILED_SP + helper.UInt64ToStr(ruleTemplateId)) return resourceTencentCloudWedataRuleTemplateRead(d, meta) } func resourceTencentCloudWedataRuleTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_rule_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_rule_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 := WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + service := WedataService{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 resourceTencentCloudWedataRuleTemplateRead(d *schema.ResourceData, meta int } func resourceTencentCloudWedataRuleTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_rule_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_rule_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := wedata.NewModifyRuleTemplateRequest() - 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()) } @@ -313,10 +316,10 @@ func resourceTencentCloudWedataRuleTemplateUpdate(d *schema.ResourceData, meta i request.WhereFlag = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().ModifyRuleTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().ModifyRuleTemplate(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -331,14 +334,14 @@ func resourceTencentCloudWedataRuleTemplateUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudWedataRuleTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_rule_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_rule_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 := WedataService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := WedataService{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_wedata_rule_template_test.go b/tencentcloud/services/wedata/resource_tc_wedata_rule_template_test.go similarity index 85% rename from tencentcloud/resource_tc_wedata_rule_template_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_rule_template_test.go index 5e85535a16..1b0821f8c0 100644 --- a/tencentcloud/resource_tc_wedata_rule_template_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_rule_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataRuleTemplateResource_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: testAccWedataRuleTemplate, diff --git a/tencentcloud/resource_tc_wedata_script.go b/tencentcloud/services/wedata/resource_tc_wedata_script.go similarity index 78% rename from tencentcloud/resource_tc_wedata_script.go rename to tencentcloud/services/wedata/resource_tc_wedata_script.go index 2c214fa268..154dad6786 100644 --- a/tencentcloud/resource_tc_wedata_script.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_script.go @@ -1,4 +1,4 @@ -package tencentcloud +package wedata 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" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudWedataScript() *schema.Resource { +func ResourceTencentCloudWedataScript() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudWedataScriptCreate, Read: resourceTencentCloudWedataScriptRead, @@ -58,11 +61,11 @@ func resourceTencentCloudWedataScript() *schema.Resource { } func resourceTencentCloudWedataScriptCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_script.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_script.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewUploadContentRequest() response = wedata.NewUploadContentResponse() projectId string @@ -108,10 +111,10 @@ func resourceTencentCloudWedataScriptCreate(d *schema.ResourceData, meta interfa scriptRequestInfo.ExtraInfo = helper.String(extraInfoStr) request.ScriptRequestInfo = &scriptRequestInfo - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().UploadContent(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().UploadContent(request) if e != nil { - return retryError(e) + return tccommon.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,23 +129,23 @@ func resourceTencentCloudWedataScriptCreate(d *schema.ResourceData, meta interfa } resourceId = *response.Response.ScriptInfo.ResourceId - d.SetId(strings.Join([]string{projectId, filePath, resourceId}, FILED_SP)) + d.SetId(strings.Join([]string{projectId, filePath, resourceId}, tccommon.FILED_SP)) return resourceTencentCloudWedataScriptRead(d, meta) } func resourceTencentCloudWedataScriptRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_script.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_script.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} fileInfo *wedata.UserFileInfo ) - 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()) } @@ -181,17 +184,17 @@ func resourceTencentCloudWedataScriptRead(d *schema.ResourceData, meta interface } func resourceTencentCloudWedataScriptUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_script.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_script.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = wedata.NewUploadContentRequest() bucketName string region string ) - 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()) } @@ -233,10 +236,10 @@ func resourceTencentCloudWedataScriptUpdate(d *schema.ResourceData, meta interfa extraInfoStr := string(extraInfoBytes) scriptRequestInfo.ExtraInfo = helper.String(extraInfoStr) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseWedataClient().UploadContent(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataClient().UploadContent(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } @@ -253,16 +256,16 @@ func resourceTencentCloudWedataScriptUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudWedataScriptDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_wedata_script.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_wedata_script.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = WedataService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = WedataService{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()) } diff --git a/tencentcloud/resource_tc_wedata_script_test.go b/tencentcloud/services/wedata/resource_tc_wedata_script_test.go similarity index 93% rename from tencentcloud/resource_tc_wedata_script_test.go rename to tencentcloud/services/wedata/resource_tc_wedata_script_test.go index 0b4007baa9..cf18856ae1 100644 --- a/tencentcloud/resource_tc_wedata_script_test.go +++ b/tencentcloud/services/wedata/resource_tc_wedata_script_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package wedata_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 TestAccTencentCloudNeedFixWedataScriptResource_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: testAccWedataScript, diff --git a/tencentcloud/service_tencentcloud_wedata.go b/tencentcloud/services/wedata/service_tencentcloud_wedata.go similarity index 96% rename from tencentcloud/service_tencentcloud_wedata.go rename to tencentcloud/services/wedata/service_tencentcloud_wedata.go index 5c3e68a2a7..ecb0ca040a 100644 --- a/tencentcloud/service_tencentcloud_wedata.go +++ b/tencentcloud/services/wedata/service_tencentcloud_wedata.go @@ -1,12 +1,15 @@ -package tencentcloud +package wedata import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" wedata "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20210820" + "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" @@ -17,7 +20,7 @@ type WedataService struct { } func (me *WedataService) DescribeWedataRuleTemplateById(ctx context.Context, projectId string, ruleTemplateId string) (ruleTemplate *wedata.RuleTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeRuleTemplateRequest() request.ProjectId = helper.String(projectId) @@ -47,7 +50,7 @@ func (me *WedataService) DescribeWedataRuleTemplateById(ctx context.Context, pro } func (me *WedataService) DeleteWedataRuleTemplateById(ctx context.Context, projectId, ruleTemplateId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteRuleTemplateRequest() request.ProjectId = helper.String(projectId) @@ -73,7 +76,7 @@ func (me *WedataService) DeleteWedataRuleTemplateById(ctx context.Context, proje func (me *WedataService) DescribeWedataRuleTemplatesByFilter(ctx context.Context, param map[string]interface{}) (ruleTemplates []*wedata.RuleTemplate, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = wedata.NewDescribeRuleTemplatesRequest() ) @@ -114,7 +117,7 @@ func (me *WedataService) DescribeWedataRuleTemplatesByFilter(ctx context.Context func (me *WedataService) DescribeWedataDataSourceListByFilter(ctx context.Context, param map[string]interface{}) (dataSourceList []*wedata.DataSourceInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = wedata.NewDescribeDataSourceListRequest() ) @@ -168,7 +171,7 @@ func (me *WedataService) DescribeWedataDataSourceListByFilter(ctx context.Contex func (me *WedataService) DescribeWedataDataSourceInfoListByFilter(ctx context.Context, param map[string]interface{}) (dataSourceInfoList []*wedata.DatasourceBaseInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = wedata.NewDescribeDataSourceInfoListRequest() ) @@ -234,7 +237,7 @@ func (me *WedataService) DescribeWedataDataSourceInfoListByFilter(ctx context.Co func (me *WedataService) DescribeWedataDataSourceWithoutInfoByFilter(ctx context.Context, param map[string]interface{}) (dataSourceWithoutInfo []*wedata.DataSourceInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = wedata.NewDescribeDataSourceWithoutInfoRequest() ) @@ -273,7 +276,7 @@ func (me *WedataService) DescribeWedataDataSourceWithoutInfoByFilter(ctx context } func (me *WedataService) DescribeWedataDatasourceById(ctx context.Context, ownerProjectId, datasourceId string) (datasource *wedata.DataSourceInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeDataSourceListRequest() request.PageNumber = common.Uint64Ptr(1) @@ -314,7 +317,7 @@ func (me *WedataService) DescribeWedataDatasourceById(ctx context.Context, owner } func (me *WedataService) DeleteWedataDatasourceById(ctx context.Context, ownerProjectId, datasourceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteDataSourcesRequest() Id, _ := strconv.ParseUint(datasourceId, 10, 64) @@ -341,7 +344,7 @@ func (me *WedataService) DeleteWedataDatasourceById(ctx context.Context, ownerPr } func (me *WedataService) DescribeWedataFunctionById(ctx context.Context, functionId, funcType, funcName, projectId string) (function *wedata.OrganizationalFunction, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeOrganizationalFunctionsRequest() request.Type = common.StringPtr("FUNC_DEVELOP") @@ -381,7 +384,7 @@ func (me *WedataService) DescribeWedataFunctionById(ctx context.Context, functio } func (me *WedataService) DeleteWedataFunctionById(ctx context.Context, functionId, projectId, clusterIdentifier string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteCustomFunctionRequest() request.FunctionId = &functionId @@ -408,7 +411,7 @@ func (me *WedataService) DeleteWedataFunctionById(ctx context.Context, functionI } func (me *WedataService) DescribeWedataResourceById(ctx context.Context, projectId, filePath, resourceId string) (resourceInfo *wedata.ResourcePathTree, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeResourceManagePathTreesRequest() request.ProjectId = &projectId @@ -445,7 +448,7 @@ func (me *WedataService) DescribeWedataResourceById(ctx context.Context, project } func (me *WedataService) DeleteWedataResourceById(ctx context.Context, projectId, resourceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteResourceFileRequest() request.ProjectId = &projectId @@ -471,7 +474,7 @@ func (me *WedataService) DeleteWedataResourceById(ctx context.Context, projectId } func (me *WedataService) DescribeWedataScriptById(ctx context.Context, projectId, filePath string) (fileInfo *wedata.UserFileInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewGetFileInfoRequest() request.ProjectId = &projectId @@ -502,7 +505,7 @@ func (me *WedataService) DescribeWedataScriptById(ctx context.Context, projectId } func (me *WedataService) DeleteWedataScriptById(ctx context.Context, projectId, resourceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteFileRequest() request.ProjectId = &projectId @@ -528,7 +531,7 @@ func (me *WedataService) DeleteWedataScriptById(ctx context.Context, projectId, } func (me *WedataService) DescribeWedataDqRuleById(ctx context.Context, projectId, ruleId string) (dqRule *wedata.Rule, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeRuleRequest() request.ProjectId = &projectId ruleIdInt, _ := strconv.ParseUint(ruleId, 10, 64) @@ -559,7 +562,7 @@ func (me *WedataService) DescribeWedataDqRuleById(ctx context.Context, projectId } func (me *WedataService) DeleteWedataDqRuleById(ctx context.Context, projectId, ruleId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteRuleRequest() request.ProjectId = &projectId @@ -586,7 +589,7 @@ func (me *WedataService) DeleteWedataDqRuleById(ctx context.Context, projectId, } func (me *WedataService) DescribeWedataDqRuleTemplateById(ctx context.Context, projectId, templateId string) (dqRuleTemplate *wedata.RuleTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeRuleTemplateRequest() request.ProjectId = &projectId @@ -618,7 +621,7 @@ func (me *WedataService) DescribeWedataDqRuleTemplateById(ctx context.Context, p } func (me *WedataService) DeleteWedataDqRuleTemplateById(ctx context.Context, projectId, templateId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteRuleTemplateRequest() request.ProjectId = &projectId @@ -645,7 +648,7 @@ func (me *WedataService) DeleteWedataDqRuleTemplateById(ctx context.Context, pro } func (me *WedataService) DescribeWedataBaselineById(ctx context.Context, projectId, baselineId string) (baseline *wedata.BaselineDetailResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeBaselineByIdRequest() request.ProjectId = &projectId @@ -676,7 +679,7 @@ func (me *WedataService) DescribeWedataBaselineById(ctx context.Context, project } func (me *WedataService) DeleteWedataBaselineById(ctx context.Context, projectId, baselineId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteBaselineRequest() request.ProjectId = &projectId @@ -702,7 +705,7 @@ func (me *WedataService) DeleteWedataBaselineById(ctx context.Context, projectId } func (me *WedataService) DescribeWedataIntegrationOfflineTaskById(ctx context.Context, projectId, taskId string) (integrationOfflineTask *wedata.DescribeIntegrationTaskResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeIntegrationTaskRequest() request.ProjectId = &projectId @@ -735,7 +738,7 @@ func (me *WedataService) DescribeWedataIntegrationOfflineTaskById(ctx context.Co } func (me *WedataService) DeleteWedataIntegrationOfflineTaskById(ctx context.Context, projectId, taskId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteOfflineTaskRequest() request.OperatorName = common.StringPtr("") request.ProjectId = &projectId @@ -762,7 +765,7 @@ func (me *WedataService) DeleteWedataIntegrationOfflineTaskById(ctx context.Cont } func (me *WedataService) DescribeWedataIntegrationRealtimeTaskById(ctx context.Context, projectId, taskId string) (integrationRealtimeTask *wedata.DescribeIntegrationTaskResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeIntegrationTaskRequest() request.ProjectId = &projectId @@ -794,7 +797,7 @@ func (me *WedataService) DescribeWedataIntegrationRealtimeTaskById(ctx context.C } func (me *WedataService) DeleteWedataIntegrationRealtimeTaskById(ctx context.Context, projectId, taskId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteIntegrationTaskRequest() request.ProjectId = &projectId request.TaskId = &taskId @@ -819,7 +822,7 @@ func (me *WedataService) DeleteWedataIntegrationRealtimeTaskById(ctx context.Con } func (me *WedataService) DescribeWedataIntegrationTaskNodeById(ctx context.Context, projectId, nodeId string) (integrationTaskNode *wedata.DescribeIntegrationNodeResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDescribeIntegrationNodeRequest() request.ProjectId = &projectId @@ -850,7 +853,7 @@ func (me *WedataService) DescribeWedataIntegrationTaskNodeById(ctx context.Conte } func (me *WedataService) DeleteWedataIntegrationTaskNodeById(ctx context.Context, projectId, nodeId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := wedata.NewDeleteIntegrationNodeRequest() request.ProjectId = &projectId diff --git a/tencentcloud/tencentcloud_sweeper_test.go b/tencentcloud/tencentcloud_sweeper_test.go index b4dabba6cd..8d7adcb079 100644 --- a/tencentcloud/tencentcloud_sweeper_test.go +++ b/tencentcloud/tencentcloud_sweeper_test.go @@ -1,47 +1,11 @@ package tencentcloud import ( - "fmt" - "os" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" ) func TestMain(m *testing.M) { resource.TestMain(m) } - -func sharedClientForRegion(region string) (interface{}, error) { - var secretId string - if secretId = os.Getenv(PROVIDER_SECRET_ID); secretId == "" { - return nil, fmt.Errorf("%s can not be empty", PROVIDER_SECRET_ID) - } - - var secretKey string - if secretKey = os.Getenv(PROVIDER_SECRET_KEY); secretKey == "" { - return nil, fmt.Errorf("%s can not be empty", PROVIDER_SECRET_KEY) - } - - securityToken := os.Getenv(PROVIDER_SECURITY_TOKEN) - protocol := os.Getenv(PROVIDER_PROTOCOL) - domain := os.Getenv(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/validators.go b/tencentcloud/validators.go deleted file mode 100644 index b2294c4e48..0000000000 --- a/tencentcloud/validators.go +++ /dev/null @@ -1,393 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "net" - "regexp" - "strconv" - "strings" - "time" - "unicode" - "unicode/utf8" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/pkg/errors" - "gopkg.in/yaml.v2" -) - -func validateNameRegex(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if _, err := regexp.Compile(value); err != nil { - errors = append(errors, fmt.Errorf( - "%q contains an invalid regular expression: %s", - k, err)) - } - return -} - -func validateNotEmpty(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if value == "" { - errors = append(errors, fmt.Errorf("%s must not use empty string: %s", k, value)) - } - return -} - -func validateInstanceType(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if !strings.Contains(value, ".") { - errors = append(errors, fmt.Errorf("the format of %s is invalid: %s, it should be like S1.SMALL1", k, value)) - return - } - return -} - -// validateCIDRNetworkAddress ensures that the string value is a valid CIDR that -// represents a network address - it adds an error otherwise -func validateCIDRNetworkAddress(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - _, ipnet, err := net.ParseCIDR(value) - if err != nil { - errors = append(errors, fmt.Errorf("%q must contain a valid CIDR, got error parsing: %s", k, err)) - return - } - if ipnet == nil || value != ipnet.String() { - errors = append(errors, fmt.Errorf("%q must contain a valid network CIDR, expected %q, got %q", k, ipnet, value)) - } - return -} - -func validateIp(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - ip := net.ParseIP(value) - if ip == nil { - errors = append(errors, fmt.Errorf("%q must contain a valid IP: %s", k, value)) - } - return -} - -func validateImageID(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if !strings.HasPrefix(value, "img-") { - errors = append(errors, fmt.Errorf("the format of %q is invalid: %s, it should begin with `img-`", k, value)) - } - return -} - -// NOTE not exactly strict, but ok for now -func validateIntegerInRange(min, max int64) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := int64(v.(int)) - if value < min { - errors = append(errors, fmt.Errorf( - "%q cannot be lower than %d: %d", k, min, value)) - } - if value > max { - errors = append(errors, fmt.Errorf( - "%q cannot be higher than %d: %d", k, max, value)) - } - return - } -} - -func validateIntegerMin(min int) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(int) - if value < min { - errors = append(errors, fmt.Errorf( - "%q cannot be lower than %d: %d", k, min, value)) - } - return - } -} - -func validateStringLengthInRange(min, max int) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - length := utf8.RuneCountInString(v.(string)) - if length < min { - errors = append(errors, fmt.Errorf( - "length of %q cannot be lower than %d: %d", k, min, length)) - } - if length > max { - errors = append(errors, fmt.Errorf( - "length of %q cannot be higher than %d: %d", k, max, length)) - } - return - } -} - -func validateKeyPairName(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if len(value) > 25 || len(value) == 0 { - errors = append(errors, fmt.Errorf("the length of %s must be 1-25: %s", k, value)) - } - - pattern := `^[a-zA-Z0-9_]+$` - if match, _ := regexp.Match(pattern, []byte(value)); !match { - errors = append(errors, fmt.Errorf("%s only support letters, numbers and \"_\": %s", k, value)) - } - return -} - -func validateAllowedStringValueIgnoreCase(ss []string) schema.SchemaValidateFunc { - var upperStrs = make([]string, len(ss)) - for index, value := range ss { - upperStrs[index] = strings.ToUpper(value) - } - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if !IsContains(upperStrs, strings.ToUpper(value)) { - errors = append(errors, fmt.Errorf("%q must contain a valid string value must in array %#v, got %q", k, ss, value)) - } - return - } -} - -func validateAllowedStringValue(ss []string) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if !IsContains(ss, value) { - errors = append(errors, fmt.Errorf("%q must contain a valid string value must in array %#v, got %q", k, ss, value)) - } - return - } -} - -func validatePort(v interface{}, k string) (ws []string, errors []error) { - value := 0 - switch t := v.(type) { - case string: - value, _ = strconv.Atoi(t) - case int: - value = t - default: - errors = append(errors, fmt.Errorf("%q data type error ", k)) - return - } - if value < 1 || value > 65535 { - errors = append(errors, fmt.Errorf("%q must be a valid port between 1 and 65535", k)) - } - return -} - -func validatePortRange(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - items := strings.Split(value, "-") - if len(items) < 2 { - errors = append(errors, fmt.Errorf("%q must be like minport-maxport format", k)) - } - minPort, err := strconv.Atoi(items[0]) - if err != nil { - errors = append(errors, err) - } - if minPort < 1 || minPort > 65535 { - errors = append(errors, fmt.Errorf("%q min port must be a valid port between 1 and 65535", k)) - } - maxPort, err := strconv.Atoi(items[1]) - if err != nil { - errors = append(errors, err) - } - if maxPort < 1 || maxPort > 65535 { - errors = append(errors, fmt.Errorf("%q max port must be a valid port between 1 and 65535", k)) - } - if minPort > maxPort { - errors = append(errors, fmt.Errorf("%q min port should not be greater than max port", k)) - } - return -} - -func validateMysqlPassword(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if len(value) > 64 || len(value) < 8 { - // errors = append(errors, fmt.Errorf("%s invalid password, len(password) must between 8 and 64,%s", k, value)) - errors = append(errors, fmt.Errorf("the length of %s must be 8-64: %s", k, value)) - } - var match = make(map[string]bool) - if strings.ContainsAny(value, "_+-&=!@#$%^*()") { - match["alien"] = true - } - for i := 0; i < len(value); i++ { - if len(match) >= 2 { - break - } - if value[i] >= '0' && value[i] <= '9' { - match["number"] = true - continue - } - if (value[i] >= 'a' && value[i] <= 'z') || (value[i] >= 'A' && value[i] <= 'Z') { - match["letter"] = true - continue - } - } - if len(match) < 2 { - errors = append(errors, fmt.Errorf("the format of %s is invalid: %s, it must contain at least letters, Numbers, and characters(_+-&=!@#$%%^*())", k, value)) - } - return -} - -func validateAllowedIntValue(ints []int) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(int) - if !IsContains(ints, value) { - errors = append(errors, fmt.Errorf("%q must contain a valid int value in array %#v, got %d", k, ints, value)) - } - return - } -} - -// Only support lowercase letters, numbers and "-". It cannot be longer than 60 characters. -// specification: https://cloud.tencent.com/document/product/436/13312 -func validateCosBucketName(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if len(value) > 60 || len(value) < 1 { - errors = append(errors, fmt.Errorf("the length of %s must be 1-60: %s", k, value)) - } - - pattern := `^[a-z0-9]([a-z0-9-]*[a-z0-9])?-[0-9]{10}$` - if match, _ := regexp.Match(pattern, []byte(value)); !match { - errors = append(errors, fmt.Errorf("%s is not valid, please refer to the official documents: %s", k, value)) - } - 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)) - if err != nil { - errors = append(errors, fmt.Errorf( - "%s cannot be parsed as RFC3339 Timestamp Format: %s", k, value)) - } - - return -} - -func validateAsConfigPassword(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if len(value) > 16 || len(value) < 8 { - errors = append(errors, fmt.Errorf("the length of %s must be 8-16: %s", k, value)) - } - var match = make(map[string]bool) - if strings.ContainsAny(value, "()~!@#$%^&*-+={}[]:;',.?/") { - match["alien"] = true - } - for i := 0; i < len(value); i++ { - if len(match) >= 2 { - break - } - if value[i] >= '0' && value[i] <= '9' { - match["number"] = true - continue - } - if (value[i] >= 'a' && value[i] <= 'z') || (value[i] >= 'A' && value[i] <= 'Z') { - match["letter"] = true - continue - } - } - if len(match) < 2 { - errors = append(errors, fmt.Errorf("%s is invalid, it must contains at least letters, numbers, and characters(_+-&=!@#$%%^*()): %s", k, value)) - } - return -} - -func validateAsScheduleTimestamp(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - _, err := time.Parse(time.RFC3339, value) - if err != nil { - errors = append(errors, fmt.Errorf( - "%s cannot be parsed as RFC3339 Timestamp Format: %s", k, value)) - } - return -} - -// check if string has given prefix, if no one prefix matches, errors will have error -func validateStringPrefix(prefix ...string) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - for _, p := range prefix { - if strings.HasPrefix(value, p) { - return - } - } - errors = append(errors, fmt.Errorf("%s doesn't have preifx %v", k, prefix)) - return - } -} - -// check if string has given suffix, if no one suffix matches, errors will have error -func validateStringSuffix(suffix ...string) schema.SchemaValidateFunc { - return func(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - for _, s := range suffix { - if strings.HasSuffix(value, s) { - return - } - } - errors = append(errors, fmt.Errorf("%s doesn't have suffix %v", k, suffix)) - return - } -} - -func validateCidrIp(v interface{}, k string) (ws []string, errs []error) { - if _, err := validateIp(v, k); len(err) == 0 { - return - } - - if _, err := validateCIDRNetworkAddress(v, k); len(err) != 0 { - errs = append(errs, fmt.Errorf("%s must be a valid IP address or a valid CIDR IP address: %s", - k, v)) - } - return -} - -func validateStringNumber(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - _, err := strconv.ParseFloat(value, 64) - if err != nil { - errors = append(errors, fmt.Errorf("%s must be a number: %s", k, value)) - } - return -} - -func validateLowCase(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - for _, c := range value { - if unicode.IsUpper(c) { - errors = append(errors, fmt.Errorf("%s must be a low case string: %s", k, value)) - return - } - } - return -} - -func validateTime(layout string) schema.SchemaValidateFunc { - return func(v interface{}, k string) (wss []string, errs []error) { - timeStr := v.(string) - if _, err := time.Parse(layout, timeStr); err != nil { - errs = append(errs, errors.Errorf("%s time format is invalid", k)) - } - - return - } -} - -func validateYaml(v interface{}, k string) (ws []string, errors []error) { - value := v.(string) - if err := yaml.Unmarshal([]byte(value), make(map[interface{}]interface{})); err != nil { - errors = append(errors, fmt.Errorf( - "%s cannot be parsed as yaml Format, value: %s", k, value)) - } - return -} - -func validateTkeGpuDriverVersion(v interface{}, k string) (ws []string, errors []error) { - value := v.(map[string]interface{}) - if len(value) > 0 { - keySet := []string{"name", "version"} - for _, paraKey := range keySet { - if value[paraKey] == nil || strings.TrimSpace(value[paraKey].(string)) == "" { - errors = append(errors, fmt.Errorf("%s in %s cannot be empty", paraKey, k)) - } - } - } - return -}