From 74f6aa7a89d37d3bd53dc82d20bb716359240209 Mon Sep 17 00:00:00 2001 From: hellertang Date: Wed, 14 Sep 2022 22:28:07 +0800 Subject: [PATCH] support cam policy --- tencentcloud/common.go | 6 ++++++ tencentcloud/resource_tc_instance.go | 16 ++++++++++++++++ tencentcloud/resource_tc_vpc.go | 20 ++++++++------------ tencentcloud/service_tencentcloud_vpc.go | 13 ++++++++++++- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/tencentcloud/common.go b/tencentcloud/common.go index c7d624846c..37ecce0342 100644 --- a/tencentcloud/common.go +++ b/tencentcloud/common.go @@ -33,6 +33,7 @@ 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" @@ -51,6 +52,11 @@ var readRetryTimeout = time.Duration(readRetry) * 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) diff --git a/tencentcloud/resource_tc_instance.go b/tencentcloud/resource_tc_instance.go index 09f83fe9d7..a35b56113e 100644 --- a/tencentcloud/resource_tc_instance.go +++ b/tencentcloud/resource_tc_instance.go @@ -708,6 +708,22 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} request.UserData = &userData } + if v := helper.GetTags(d, "tags"); len(v) > 0 { + tags := make([]*cvm.Tag, 0) + for tagKey, tagValue := range v { + tag := cvm.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + tags = append(tags, &tag) + } + tagSpecification := cvm.TagSpecification{ + ResourceType: helper.String("instance"), + Tags: tags, + } + request.TagSpecification = append(request.TagSpecification, &tagSpecification) + } + instanceId := "" err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { diff --git a/tencentcloud/resource_tc_vpc.go b/tencentcloud/resource_tc_vpc.go index e2d74fe1d9..cde6c34baa 100644 --- a/tencentcloud/resource_tc_vpc.go +++ b/tencentcloud/resource_tc_vpc.go @@ -44,6 +44,7 @@ import ( "context" "fmt" "log" + "time" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" @@ -142,6 +143,7 @@ func resourceTencentCloudVpcInstanceCreate(d *schema.ResourceData, meta interfac cidrBlock string dnsServers = make([]string, 0, 4) isMulticast bool + tags map[string]string ) if temp, ok := d.GetOk("name"); ok { name = temp.(string) @@ -166,7 +168,10 @@ func resourceTencentCloudVpcInstanceCreate(d *schema.ResourceData, meta interfac } isMulticast = d.Get("is_multicast").(bool) - vpcId, _, err := vpcService.CreateVpc(ctx, name, cidrBlock, isMulticast, dnsServers) + if temp := helper.GetTags(d, "tags"); len(temp) > 0 { + tags = temp + } + vpcId, _, err := vpcService.CreateVpc(ctx, name, cidrBlock, isMulticast, dnsServers, tags) if err != nil { return err } @@ -183,17 +188,8 @@ func resourceTencentCloudVpcInstanceCreate(d *schema.ResourceData, meta interfac 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::vpc:%s:uin/:vpc/%s", region, vpcId) - - if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { - return err - } - } + // protected while tag is not ready, default is 1s + time.Sleep(waitReadTimeout) return resourceTencentCloudVpcInstanceRead(d, meta) } diff --git a/tencentcloud/service_tencentcloud_vpc.go b/tencentcloud/service_tencentcloud_vpc.go index 64e2f255e7..0b3236fd18 100644 --- a/tencentcloud/service_tencentcloud_vpc.go +++ b/tencentcloud/service_tencentcloud_vpc.go @@ -174,7 +174,7 @@ func (me *VpcService) fillFilter(ins []*vpc.Filter, key, value string) (outs []* // ////////api func (me *VpcService) CreateVpc(ctx context.Context, name, cidr string, - isMulticast bool, dnsServers []string) (vpcId string, isDefault bool, errRet error) { + isMulticast bool, dnsServers []string, tags map[string]string) (vpcId string, isDefault bool, errRet error) { logId := getLogId(ctx) request := vpc.NewCreateVpcRequest() @@ -197,6 +197,17 @@ func (me *VpcService) CreateVpc(ctx context.Context, name, cidr string, 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())