diff --git a/tencentcloud/extension_as.go b/tencentcloud/extension_as.go index 6a06252b79..daf72d0e22 100644 --- a/tencentcloud/extension_as.go +++ b/tencentcloud/extension_as.go @@ -129,6 +129,7 @@ const ( SCALING_GROUP_ACTIVITY_STATUS_CANCELLED = "CANCELLED" ) +const AsScheduleNotFound = "ResourceNotFound.ScheduledActionNotFound" const ( SCALING_GROUP_IN_ACTIVITY_STATUS = "IN_ACTIVITY" SCALING_GROUP_NOT_IN_ACTIVITY_STATUS = "NOT_IN_ACTIVITY" diff --git a/tencentcloud/extension_redis.go b/tencentcloud/extension_redis.go index a56f6287c9..d924d13708 100644 --- a/tencentcloud/extension_redis.go +++ b/tencentcloud/extension_redis.go @@ -98,3 +98,6 @@ const ( REDIS_TASK_FAILED = "failed" REDIS_TASK_ERROR = "error" ) + +//sdk redis not found error +const RedisInstanceNotFound = "ResourceNotFound.InstanceNotExists" diff --git a/tencentcloud/resource_tc_as_attachment.go b/tencentcloud/resource_tc_as_attachment.go index 3fedb07ca8..ab5b24b8f7 100644 --- a/tencentcloud/resource_tc_as_attachment.go +++ b/tencentcloud/resource_tc_as_attachment.go @@ -15,6 +15,7 @@ package tencentcloud import ( "context" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" ) @@ -73,12 +74,17 @@ func resourceTencentCloudAsAttachmentRead(d *schema.ResourceData, meta interface asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - instanceIds, err := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + instanceIds, e := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId) + if e != nil { + return retryError(e) + } + d.Set("instance_ids", instanceIds) + return nil + }) if err != nil { return err } - d.Set("instance_ids", instanceIds) - return nil } @@ -126,7 +132,17 @@ func resourceTencentCloudAsAttachmentDelete(d *schema.ResourceData, meta interfa asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - instanceIds, err := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId) + var ( + instanceIds []string + e error + ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + instanceIds, e = asService.DescribeAutoScalingAttachment(ctx, scalingGroupId) + if e != nil { + return retryError(e) + } + return nil + }) if err != nil { return err } @@ -135,6 +151,5 @@ func resourceTencentCloudAsAttachmentDelete(d *schema.ResourceData, meta interfa if err != nil { return err } - return nil } diff --git a/tencentcloud/resource_tc_as_lifecycle_hook.go b/tencentcloud/resource_tc_as_lifecycle_hook.go index 13cf508498..3ee9bf4a55 100644 --- a/tencentcloud/resource_tc_as_lifecycle_hook.go +++ b/tencentcloud/resource_tc_as_lifecycle_hook.go @@ -23,6 +23,7 @@ import ( "fmt" "log" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" ) @@ -157,33 +158,41 @@ func resourceTencentCloudAsLifecycleHookRead(d *schema.ResourceData, meta interf asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - lifecycleHook, err := asService.DescribeLifecycleHookById(ctx, lifecycleHookId) - if err != nil { - return err - } - - d.Set("scaling_group_id", *lifecycleHook.AutoScalingGroupId) - d.Set("lifecycle_hook_name", *lifecycleHook.LifecycleHookName) - d.Set("lifecycle_transition", *lifecycleHook.LifecycleTransition) - if lifecycleHook.DefaultResult != nil { - d.Set("default_result", *lifecycleHook.DefaultResult) - } - if lifecycleHook.HeartbeatTimeout != nil { - d.Set("heartbeat_timeout", *lifecycleHook.HeartbeatTimeout) - } - if lifecycleHook.NotificationMetadata != nil { - d.Set("notification_metadata", *lifecycleHook.NotificationMetadata) - } - if lifecycleHook.NotificationTarget != nil { - d.Set("notification_target_type", *lifecycleHook.NotificationTarget.TargetType) - if lifecycleHook.NotificationTarget.QueueName != nil { - d.Set("notification_queue_name", *lifecycleHook.NotificationTarget.QueueName) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + lifecycleHook, has, e := asService.DescribeLifecycleHookById(ctx, lifecycleHookId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil } - if lifecycleHook.NotificationTarget.TopicName != nil { - d.Set("notification_topic_name", *lifecycleHook.NotificationTarget.TopicName) + d.Set("scaling_group_id", *lifecycleHook.AutoScalingGroupId) + d.Set("lifecycle_hook_name", *lifecycleHook.LifecycleHookName) + d.Set("lifecycle_transition", *lifecycleHook.LifecycleTransition) + if lifecycleHook.DefaultResult != nil { + d.Set("default_result", *lifecycleHook.DefaultResult) } + if lifecycleHook.HeartbeatTimeout != nil { + d.Set("heartbeat_timeout", *lifecycleHook.HeartbeatTimeout) + } + if lifecycleHook.NotificationMetadata != nil { + d.Set("notification_metadata", *lifecycleHook.NotificationMetadata) + } + if lifecycleHook.NotificationTarget != nil { + d.Set("notification_target_type", *lifecycleHook.NotificationTarget.TargetType) + if lifecycleHook.NotificationTarget.QueueName != nil { + d.Set("notification_queue_name", *lifecycleHook.NotificationTarget.QueueName) + } + if lifecycleHook.NotificationTarget.TopicName != nil { + d.Set("notification_topic_name", *lifecycleHook.NotificationTarget.TopicName) + } + } + return nil + }) + if err != nil { + return err } - return nil } diff --git a/tencentcloud/resource_tc_as_lifecycle_hook_test.go b/tencentcloud/resource_tc_as_lifecycle_hook_test.go index 916735ba50..ec168c4a30 100644 --- a/tencentcloud/resource_tc_as_lifecycle_hook_test.go +++ b/tencentcloud/resource_tc_as_lifecycle_hook_test.go @@ -57,7 +57,7 @@ func testAccCheckAsLifecycleHookExists(n string) resource.TestCheckFunc { return fmt.Errorf("auto scaling lifecycle hook id is not set") } asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, err := asService.DescribeLifecycleHookById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeLifecycleHookById(ctx, rs.Primary.ID) if err != nil { return err } @@ -77,7 +77,7 @@ func testAccCheckAsLifecycleHookDestroy(s *terraform.State) error { continue } - _, err := asService.DescribeLifecycleHookById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeLifecycleHookById(ctx, rs.Primary.ID) if err == nil { return fmt.Errorf("auto scaling lifecycle hook still exists: %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_as_notification.go b/tencentcloud/resource_tc_as_notification.go index 2851be72ea..2654338e69 100644 --- a/tencentcloud/resource_tc_as_notification.go +++ b/tencentcloud/resource_tc_as_notification.go @@ -18,6 +18,7 @@ import ( "fmt" "log" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" ) @@ -102,15 +103,23 @@ func resourceTencentCloudAsNotificationRead(d *schema.ResourceData, meta interfa asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - notification, err := asService.DescribeNotificationById(ctx, notificationId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + notification, has, e := asService.DescribeNotificationById(ctx, notificationId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil + } + d.Set("scaling_group_id", *notification.AutoScalingGroupId) + d.Set("notification_type", flattenStringList(notification.NotificationTypes)) + d.Set("notification_user_group_ids", flattenStringList(notification.NotificationUserGroupIds)) + return nil + }) if err != nil { return err } - - d.Set("scaling_group_id", *notification.AutoScalingGroupId) - d.Set("notification_type", flattenStringList(notification.NotificationTypes)) - d.Set("notification_user_group_ids", flattenStringList(notification.NotificationUserGroupIds)) - return nil } diff --git a/tencentcloud/resource_tc_as_scaling_config.go b/tencentcloud/resource_tc_as_scaling_config.go index dad85f0b10..7d80deb705 100644 --- a/tencentcloud/resource_tc_as_scaling_config.go +++ b/tencentcloud/resource_tc_as_scaling_config.go @@ -12,7 +12,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { system_disk_type = "CLOUD_PREMIUM" system_disk_size = "50" - data_disk = { + data_disk { disk_type = "CLOUD_PREMIUM" disk_size = 50 } @@ -46,6 +46,7 @@ import ( "fmt" "log" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" ) @@ -369,29 +370,37 @@ func resourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta interf asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - config, err := asService.DescribeLaunchConfigurationById(ctx, configurationId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + config, has, e := asService.DescribeLaunchConfigurationById(ctx, configurationId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil + } + d.Set("configuration_name", *config.LaunchConfigurationName) + d.Set("status", *config.LaunchConfigurationStatus) + d.Set("image_id", *config.ImageId) + d.Set("project_id", *config.ProjectId) + d.Set("instance_types", flattenStringList(config.InstanceTypes)) + d.Set("system_disk_type", *config.SystemDisk.DiskType) + d.Set("system_disk_size", *config.SystemDisk.DiskSize) + d.Set("data_disk", flattenDataDiskMappings(config.DataDisks)) + d.Set("internet_charge_type", *config.InternetAccessible.InternetChargeType) + d.Set("internet_max_bandwidth_out", *config.InternetAccessible.InternetMaxBandwidthOut) + d.Set("public_ip_assigned", *config.InternetAccessible.PublicIpAssigned) + d.Set("login_settings.key_ids", flattenStringList(config.LoginSettings.KeyIds)) + d.Set("security_group_ids", flattenStringList(config.SecurityGroupIds)) + d.Set("enhanced_security_service", *config.EnhancedService.SecurityService.Enabled) + d.Set("enhanced_monitor_service", *config.EnhancedService.MonitorService.Enabled) + d.Set("user_data", pointerToString(config.UserData)) + d.Set("instance_tags", flattenInstanceTagsMapping(config.InstanceTags)) + return nil + }) if err != nil { return err } - - d.Set("configuration_name", *config.LaunchConfigurationName) - d.Set("status", *config.LaunchConfigurationStatus) - d.Set("image_id", *config.ImageId) - d.Set("project_id", *config.ProjectId) - d.Set("instance_types", flattenStringList(config.InstanceTypes)) - d.Set("system_disk_type", *config.SystemDisk.DiskType) - d.Set("system_disk_size", *config.SystemDisk.DiskSize) - d.Set("data_disk", flattenDataDiskMappings(config.DataDisks)) - d.Set("internet_charge_type", *config.InternetAccessible.InternetChargeType) - d.Set("internet_max_bandwidth_out", *config.InternetAccessible.InternetMaxBandwidthOut) - d.Set("public_ip_assigned", *config.InternetAccessible.PublicIpAssigned) - d.Set("login_settings.key_ids", flattenStringList(config.LoginSettings.KeyIds)) - d.Set("security_group_ids", flattenStringList(config.SecurityGroupIds)) - d.Set("enhanced_security_service", *config.EnhancedService.SecurityService.Enabled) - d.Set("enhanced_monitor_service", *config.EnhancedService.MonitorService.Enabled) - d.Set("user_data", pointerToString(config.UserData)) - d.Set("instance_tags", flattenInstanceTagsMapping(config.InstanceTags)) - return nil } diff --git a/tencentcloud/resource_tc_as_scaling_config_test.go b/tencentcloud/resource_tc_as_scaling_config_test.go index b384632f35..357e108f38 100644 --- a/tencentcloud/resource_tc_as_scaling_config_test.go +++ b/tencentcloud/resource_tc_as_scaling_config_test.go @@ -103,7 +103,7 @@ func testAccCheckAsScalingConfigExists(n string) resource.TestCheckFunc { return fmt.Errorf("auto scaling configuration id is not set") } asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, err := asService.DescribeLaunchConfigurationById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeLaunchConfigurationById(ctx, rs.Primary.ID) if err != nil { return err } @@ -123,7 +123,7 @@ func testAccCheckAsScalingConfigDestroy(s *terraform.State) error { continue } - _, err := asService.DescribeLaunchConfigurationById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeLaunchConfigurationById(ctx, rs.Primary.ID) if err == nil { return fmt.Errorf("auto scaling configuration still exists: %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_as_scaling_group.go b/tencentcloud/resource_tc_as_scaling_group.go index c22701cc39..113b2d57e5 100644 --- a/tencentcloud/resource_tc_as_scaling_group.go +++ b/tencentcloud/resource_tc_as_scaling_group.go @@ -343,7 +343,7 @@ func resourceTencentCloudAsScalingGroupCreate(d *schema.ResourceData, meta inter client: meta.(*TencentCloudClient).apiV3Conn, } err := resource.Retry(5*time.Minute, func() *resource.RetryError { - scalingGroup, errRet := asService.DescribeAutoScalingGroupById(ctx, id) + scalingGroup, _, errRet := asService.DescribeAutoScalingGroupById(ctx, id) if errRet != nil { return retryError(errRet, "InternalError") } @@ -372,17 +372,25 @@ func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interfa var ( scalingGroup *as.AutoScalingGroup - err error + e error + has int ) - if err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - scalingGroup, err = asService.DescribeAutoScalingGroupById(ctx, scalingGroupId) - if err != nil { - return retryError(err) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + scalingGroup, has, e = asService.DescribeAutoScalingGroupById(ctx, scalingGroupId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") } return nil - }); err != nil { + }) + if err != nil { return err } + if has == 0 { + return nil + } d.Set("scaling_group_name", scalingGroup.AutoScalingGroupName) d.Set("configuration_id", scalingGroup.LaunchConfigurationId) @@ -627,10 +635,13 @@ func resourceTencentCloudAsScalingGroupDelete(d *schema.ResourceData, meta inter // We need read the scaling group in order to check if there are instances. // If so, we need to remove those first. - scalingGroup, err := asService.DescribeAutoScalingGroupById(ctx, scalingGroupId) + scalingGroup, has, err := asService.DescribeAutoScalingGroupById(ctx, scalingGroupId) if err != nil { return err } + if has == 0 { + return nil + } if *scalingGroup.InstanceCount > 0 || *scalingGroup.DesiredCapacity > 0 { if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { return retryError(asService.ClearScalingGroupInstance(ctx, scalingGroupId)) diff --git a/tencentcloud/resource_tc_as_scaling_group_test.go b/tencentcloud/resource_tc_as_scaling_group_test.go index e0001ebdca..f1c8059907 100644 --- a/tencentcloud/resource_tc_as_scaling_group_test.go +++ b/tencentcloud/resource_tc_as_scaling_group_test.go @@ -139,7 +139,7 @@ func testAccCheckAsScalingGroupExists(n string) resource.TestCheckFunc { return fmt.Errorf("auto scaling group id is not set") } asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, err := asService.DescribeAutoScalingGroupById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeAutoScalingGroupById(ctx, rs.Primary.ID) if err != nil { return err } @@ -159,7 +159,7 @@ func testAccCheckAsScalingGroupDestroy(s *terraform.State) error { continue } - _, err := asService.DescribeAutoScalingGroupById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeAutoScalingGroupById(ctx, rs.Primary.ID) if err == nil { return fmt.Errorf("auto scaling group still exists: %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_as_scaling_policy.go b/tencentcloud/resource_tc_as_scaling_policy.go index 36c9de9480..7d5a7a0c79 100644 --- a/tencentcloud/resource_tc_as_scaling_policy.go +++ b/tencentcloud/resource_tc_as_scaling_policy.go @@ -26,6 +26,7 @@ import ( "fmt" "log" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" ) @@ -171,29 +172,36 @@ func resourceTencentCloudAsScalingPolicyRead(d *schema.ResourceData, meta interf asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - scalingPolicy, err := asService.DescribeScalingPolicyById(ctx, scalingPolicyId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + scalingPolicy, has, e := asService.DescribeScalingPolicyById(ctx, scalingPolicyId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil + } + d.Set("scaling_group_id", *scalingPolicy.AutoScalingGroupId) + d.Set("policy_name", *scalingPolicy.ScalingPolicyName) + d.Set("adjustment_type", *scalingPolicy.AdjustmentType) + d.Set("adjustment_value", *scalingPolicy.AdjustmentValue) + d.Set("comparison_operator", *scalingPolicy.MetricAlarm.ComparisonOperator) + d.Set("metric_name", *scalingPolicy.MetricAlarm.MetricName) + d.Set("threshold", *scalingPolicy.MetricAlarm.Threshold) + d.Set("period", *scalingPolicy.MetricAlarm.Period) + d.Set("continuous_time", *scalingPolicy.MetricAlarm.ContinuousTime) + d.Set("statistic", *scalingPolicy.MetricAlarm.Statistic) + d.Set("cooldown", *scalingPolicy.Cooldown) + if scalingPolicy.NotificationUserGroupIds != nil { + d.Set("notification_user_group_ids", flattenStringList(scalingPolicy.NotificationUserGroupIds)) + } + return nil + }) if err != nil { return err } - - d.Set("scaling_group_id", *scalingPolicy.AutoScalingGroupId) - d.Set("policy_name", *scalingPolicy.ScalingPolicyName) - d.Set("adjustment_type", *scalingPolicy.AdjustmentType) - d.Set("adjustment_value", *scalingPolicy.AdjustmentValue) - d.Set("comparison_operator", *scalingPolicy.MetricAlarm.ComparisonOperator) - d.Set("metric_name", *scalingPolicy.MetricAlarm.MetricName) - d.Set("threshold", *scalingPolicy.MetricAlarm.Threshold) - d.Set("period", *scalingPolicy.MetricAlarm.Period) - d.Set("continuous_time", *scalingPolicy.MetricAlarm.ContinuousTime) - d.Set("statistic", *scalingPolicy.MetricAlarm.Statistic) - d.Set("cooldown", *scalingPolicy.Cooldown) - if scalingPolicy.NotificationUserGroupIds != nil { - d.Set("notification_user_group_ids", flattenStringList(scalingPolicy.NotificationUserGroupIds)) - } - return nil } - func resourceTencentCloudAsScalingPolicyUpdate(d *schema.ResourceData, meta interface{}) error { defer logElapsed("resource.tencentcloud_as_scaling_policy.update")() diff --git a/tencentcloud/resource_tc_as_scaling_policy_test.go b/tencentcloud/resource_tc_as_scaling_policy_test.go index 8d1ae29f45..5f2614cfdc 100644 --- a/tencentcloud/resource_tc_as_scaling_policy_test.go +++ b/tencentcloud/resource_tc_as_scaling_policy_test.go @@ -66,7 +66,7 @@ func testAccCheckAsScalingPolicyExists(n string) resource.TestCheckFunc { return fmt.Errorf("auto scaling policy id is not set") } asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - _, err := asService.DescribeScalingPolicyById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeScalingPolicyById(ctx, rs.Primary.ID) if err != nil { return err } @@ -86,7 +86,7 @@ func testAccCheckAsScalingPolicyDestroy(s *terraform.State) error { continue } - _, err := asService.DescribeScalingPolicyById(ctx, rs.Primary.ID) + _, _, err := asService.DescribeScalingPolicyById(ctx, rs.Primary.ID) if err == nil { return fmt.Errorf("auto scaling policy still exists: %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_as_schedule.go b/tencentcloud/resource_tc_as_schedule.go index c2df026ceb..8d8c3181e2 100644 --- a/tencentcloud/resource_tc_as_schedule.go +++ b/tencentcloud/resource_tc_as_schedule.go @@ -23,8 +23,10 @@ import ( "fmt" "log" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) func resourceTencentCloudAsSchedule() *schema.Resource { @@ -137,25 +139,36 @@ func resourceTencentCloudAsScheduleRead(d *schema.ResourceData, meta interface{} asService := AsService{ client: meta.(*TencentCloudClient).apiV3Conn, } - scheduledAction, err := asService.DescribeScheduledActionById(ctx, scheduledActionId) - if err != nil { - return err - } + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + scheduledAction, e := asService.DescribeScheduledActionById(ctx, scheduledActionId) + if e != nil { + if sdkErr, ok := e.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == AsScheduleNotFound { + d.SetId("") + return nil + } + } + return retryError(e) + } - d.Set("scaling_group_id", *scheduledAction.AutoScalingGroupId) - d.Set("schedule_action_name", *scheduledAction.ScheduledActionName) - d.Set("max_size", *scheduledAction.MaxSize) - d.Set("min_size", *scheduledAction.MinSize) - d.Set("desired_capacity", *scheduledAction.DesiredCapacity) - d.Set("start_time", *scheduledAction.StartTime) + d.Set("scaling_group_id", *scheduledAction.AutoScalingGroupId) + d.Set("schedule_action_name", *scheduledAction.ScheduledActionName) + d.Set("max_size", *scheduledAction.MaxSize) + d.Set("min_size", *scheduledAction.MinSize) + d.Set("desired_capacity", *scheduledAction.DesiredCapacity) + d.Set("start_time", *scheduledAction.StartTime) - if scheduledAction.EndTime != nil { - d.Set("end_time", *scheduledAction.EndTime) - } - if scheduledAction.Recurrence != nil { - d.Set("recurrence", *scheduledAction.Recurrence) + if scheduledAction.EndTime != nil { + d.Set("end_time", *scheduledAction.EndTime) + } + if scheduledAction.Recurrence != nil { + d.Set("recurrence", *scheduledAction.Recurrence) + } + return nil + }) + if err != nil { + return err } - return nil } diff --git a/tencentcloud/resource_tc_ccn.go b/tencentcloud/resource_tc_ccn.go index a441db5a89..a3630b1941 100644 --- a/tencentcloud/resource_tc_ccn.go +++ b/tencentcloud/resource_tc_ccn.go @@ -114,24 +114,29 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error ctx := context.WithValue(context.TODO(), "logId", logId) service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeCcn(ctx, d.Id()) + if e != nil { + return retryError(e) + } - info, has, err := service.DescribeCcn(ctx, d.Id()) - if err != nil { - return err - } + if has == 0 { + d.SetId("") + return nil + } + + d.Set("name", info.name) + d.Set("description", info.description) + d.Set("qos", strings.ToUpper(info.qos)) + d.Set("state", strings.ToUpper(info.state)) + d.Set("instance_count", info.instanceCount) + d.Set("create_time", info.createTime) - if has == 0 { - d.SetId("") return nil + }) + if err != nil { + return err } - - d.Set("name", info.name) - d.Set("description", info.description) - d.Set("qos", strings.ToUpper(info.qos)) - d.Set("state", strings.ToUpper(info.state)) - d.Set("instance_count", info.instanceCount) - d.Set("create_time", info.createTime) - return nil } @@ -178,14 +183,21 @@ func resourceTencentCloudCcnDelete(d *schema.ResourceData, meta interface{}) err ctx := context.WithValue(context.TODO(), "logId", logId) service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - _, has, err := service.DescribeCcn(ctx, d.Id()) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, e := service.DescribeCcn(ctx, d.Id()) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil + } + return nil + }) if err != nil { return err } - if has == 0 { - return nil - } + if err = service.DeleteCcn(ctx, d.Id()); err != nil { return err } diff --git a/tencentcloud/resource_tc_ccn_attachment.go b/tencentcloud/resource_tc_ccn_attachment.go index a341406de1..ed280ae7ef 100644 --- a/tencentcloud/resource_tc_ccn_attachment.go +++ b/tencentcloud/resource_tc_ccn_attachment.go @@ -148,35 +148,48 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} var ( - ccnId = d.Get("ccn_id").(string) - instanceType = d.Get("instance_type").(string) - instanceRegion = d.Get("instance_region").(string) - instanceId = d.Get("instance_id").(string) + ccnId = d.Get("ccn_id").(string) + instanceType = d.Get("instance_type").(string) + instanceRegion = d.Get("instance_region").(string) + instanceId = d.Get("instance_id").(string) + onlineHas bool = true ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, e := service.DescribeCcn(ctx, ccnId) + if e != nil { + return retryError(e) + } - _, has, err := service.DescribeCcn(ctx, ccnId) + if has == 0 { + d.SetId("") + onlineHas = false + return nil + } + return nil + }) if err != nil { return err } - - if has == 0 { - d.SetId("") + if !onlineHas { return nil } - - info, has, err := service.DescribeCcnAttachedInstance(ctx, ccnId, instanceRegion, instanceType, instanceId) + err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeCcnAttachedInstance(ctx, ccnId, instanceRegion, instanceType, instanceId) + if e != nil { + return retryError(e) + } + if has == 0 { + d.SetId("") + return nil + } + d.Set("state", strings.ToUpper(info.state)) + d.Set("attached_time", info.attachedTime) + d.Set("cidr_block", info.cidrBlock) + return nil + }) if err != nil { return err } - if has == 0 { - d.SetId("") - return nil - } - - d.Set("state", strings.ToUpper(info.state)) - d.Set("attached_time", info.attachedTime) - d.Set("cidr_block", info.cidrBlock) - return nil } @@ -194,15 +207,19 @@ func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interf instanceRegion = d.Get("instance_region").(string) instanceId = d.Get("instance_id").(string) ) - - _, has, err := service.DescribeCcn(ctx, ccnId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, e := service.DescribeCcn(ctx, ccnId) + if e != nil { + return retryError(e) + } + if has == 0 { + return nil + } + return nil + }) if err != nil { return err } - if has == 0 { - return nil - } - if err := service.DetachCcnInstances(ctx, ccnId, instanceRegion, instanceType, instanceId); err != nil { return err } diff --git a/tencentcloud/resource_tc_ccn_bandwidth_limit.go b/tencentcloud/resource_tc_ccn_bandwidth_limit.go index 4e9bd92cff..fa367117da 100644 --- a/tencentcloud/resource_tc_ccn_bandwidth_limit.go +++ b/tencentcloud/resource_tc_ccn_bandwidth_limit.go @@ -27,6 +27,7 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" ) @@ -131,25 +132,40 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} var ( - ccnId = d.Get("ccn_id").(string) - region = d.Get("region").(string) + ccnId = d.Get("ccn_id").(string) + region = d.Get("region").(string) + onlineHas bool = true ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, e := service.DescribeCcn(ctx, ccnId) + if e != nil { + return retryError(e) + } - _, has, err := service.DescribeCcn(ctx, ccnId) + if has == 0 { + d.SetId("") + onlineHas = false + return nil + } + return nil + }) if err != nil { return err } - - if has == 0 { - d.SetId("") + if !onlineHas { return nil } - - bandwidth, err := service.DescribeCcnRegionBandwidthLimit(ctx, ccnId, region) + err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + bandwidth, e := service.DescribeCcnRegionBandwidthLimit(ctx, ccnId, region) + if e != nil { + return retryError(e) + } + d.Set("bandwidth_limit", bandwidth) + return nil + }) if err != nil { return err } - d.Set("bandwidth_limit", bandwidth) return nil } diff --git a/tencentcloud/resource_tc_dc_gateway.go b/tencentcloud/resource_tc_dc_gateway.go index bfcafcde39..0b9ff40192 100644 --- a/tencentcloud/resource_tc_dc_gateway.go +++ b/tencentcloud/resource_tc_dc_gateway.go @@ -30,6 +30,7 @@ package tencentcloud import ( "context" "fmt" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "strings" ) @@ -146,25 +147,29 @@ func resourceTencentCloudDcGatewayRead(d *schema.ResourceData, meta interface{}) ctx := context.WithValue(context.TODO(), "logId", logId) service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - info, has, err := service.DescribeDirectConnectGateway(ctx, d.Id()) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeDirectConnectGateway(ctx, d.Id()) + if e != nil { + return retryError(e) + } + + if has == 0 { + d.SetId("") + return nil + } + + d.Set("name", info.name) + d.Set("network_type", info.networkType) + d.Set("network_instance_id", info.networkInstanceId) + d.Set("gateway_type", info.gatewayType) + d.Set("cnn_route_type", info.cnnRouteType) + d.Set("enable_bgp", info.enableBGP) + d.Set("create_time", info.createTime) + return nil + }) if err != nil { return err } - - if has == 0 { - d.SetId("") - return nil - } - - d.Set("name", info.name) - d.Set("network_type", info.networkType) - d.Set("network_instance_id", info.networkInstanceId) - d.Set("gateway_type", info.gatewayType) - d.Set("cnn_route_type", info.cnnRouteType) - d.Set("enable_bgp", info.enableBGP) - d.Set("create_time", info.createTime) - return nil } @@ -190,14 +195,19 @@ func resourceTencentCloudDcGatewayDelete(d *schema.ResourceData, meta interface{ ctx := context.WithValue(context.TODO(), "logId", logId) service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - _, has, err := service.DescribeDirectConnectGateway(ctx, d.Id()) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + _, has, e := service.DescribeDirectConnectGateway(ctx, d.Id()) + if e != nil { + return retryError(e) + } + + if has == 0 { + return nil + } + return nil + }) if err != nil { return err } - - if has == 0 { - return nil - } - return service.DeleteDirectConnectGateway(ctx, d.Id()) } diff --git a/tencentcloud/resource_tc_dc_gateway_ccn_route.go b/tencentcloud/resource_tc_dc_gateway_ccn_route.go index 64e7c700ef..b63d31a0a7 100644 --- a/tencentcloud/resource_tc_dc_gateway_ccn_route.go +++ b/tencentcloud/resource_tc_dc_gateway_ccn_route.go @@ -33,6 +33,7 @@ package tencentcloud import ( "context" "fmt" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "strings" ) @@ -109,20 +110,25 @@ func resourceTencentCloudDcGatewayCcnRouteRead(d *schema.ResourceData, meta inte } dcgId, routeId := items[0], items[1] - info, has, err := service.DescribeDirectConnectGatewayCcnRoute(ctx, dcgId, routeId) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeDirectConnectGatewayCcnRoute(ctx, dcgId, routeId) + if e != nil { + return retryError(e) + } + + if has == 0 { + d.SetId("") + return nil + } + + d.Set("dcg_id", info.dcgId) + d.Set("cidr_block", info.cidrBlock) + d.Set("as_path", info.asPaths) + return nil + }) if err != nil { return err } - - if has == 0 { - d.SetId("") - return nil - } - - d.Set("dcg_id", info.dcgId) - d.Set("cidr_block", info.cidrBlock) - d.Set("as_path", info.asPaths) - return nil } diff --git a/tencentcloud/resource_tc_dcx.go b/tencentcloud/resource_tc_dcx.go index c5af86bdbb..6d18960ded 100644 --- a/tencentcloud/resource_tc_dcx.go +++ b/tencentcloud/resource_tc_dcx.go @@ -50,6 +50,7 @@ import ( "context" "fmt" "github.com/hashicorp/terraform/helper/hashcode" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" "strings" ) @@ -262,52 +263,57 @@ func resourceTencentCloudDcxInstanceRead(d *schema.ResourceData, meta interface{ var ( dcxId = d.Id() ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + item, has, e := service.DescribeDirectConnectTunnel(ctx, dcxId) + if e != nil { + return retryError(e) + } - item, has, err := service.DescribeDirectConnectTunnel(ctx, dcxId) - if err != nil { - return err - } - - if has == 0 { - d.SetId("") - } - - d.Set("dc_id", service.strPt2str(item.DirectConnectId)) - d.Set("name", *item.DirectConnectTunnelName) - d.Set("network_type", strings.ToUpper(service.strPt2str(item.NetworkType))) - d.Set("network_region", service.strPt2str(item.NetworkRegion)) - d.Set("vpc_id", service.strPt2str(item.VpcId)) - d.Set("bandwidth", service.int64Pt2int64(item.Bandwidth)) - - var routeType = strings.ToUpper(service.strPt2str(item.RouteType)) - d.Set("route_type", routeType) + if has == 0 { + d.SetId("") + return nil + } - if routeType == DC_ROUTE_TYPE_BGP { - if item.BgpPeer == nil { - d.Set("bgp_asn", 0) - d.Set("bgp_auth_key", "") + d.Set("dc_id", service.strPt2str(item.DirectConnectId)) + d.Set("name", *item.DirectConnectTunnelName) + d.Set("network_type", strings.ToUpper(service.strPt2str(item.NetworkType))) + d.Set("network_region", service.strPt2str(item.NetworkRegion)) + d.Set("vpc_id", service.strPt2str(item.VpcId)) + d.Set("bandwidth", service.int64Pt2int64(item.Bandwidth)) + + var routeType = strings.ToUpper(service.strPt2str(item.RouteType)) + d.Set("route_type", routeType) + + if routeType == DC_ROUTE_TYPE_BGP { + if item.BgpPeer == nil { + d.Set("bgp_asn", 0) + d.Set("bgp_auth_key", "") + } else { + d.Set("bgp_asn", service.int64Pt2int64(item.BgpPeer.Asn)) + d.Set("bgp_auth_key", service.strPt2str(item.BgpPeer.AuthKey)) + } } else { - d.Set("bgp_asn", service.int64Pt2int64(item.BgpPeer.Asn)) - d.Set("bgp_auth_key", service.strPt2str(item.BgpPeer.AuthKey)) - } - } else { - var routeFilterPrefixes = make([]string, 0, len(item.RouteFilterPrefixes)) - for _, v := range item.RouteFilterPrefixes { - if v.Cidr != nil { - routeFilterPrefixes = append(routeFilterPrefixes, *v.Cidr) + var routeFilterPrefixes = make([]string, 0, len(item.RouteFilterPrefixes)) + for _, v := range item.RouteFilterPrefixes { + if v.Cidr != nil { + routeFilterPrefixes = append(routeFilterPrefixes, *v.Cidr) + } } + d.Set("route_filter_prefixes", routeFilterPrefixes) } - d.Set("route_filter_prefixes", routeFilterPrefixes) - } - d.Set("vlan", service.int64Pt2int64(item.Vlan)) - d.Set("tencent_address", service.strPt2str(item.TencentAddress)) - d.Set("customer_address", service.strPt2str(item.CustomerAddress)) - d.Set("dcg_id", service.strPt2str(item.DirectConnectGatewayId)) - - d.Set("state", strings.ToUpper(service.strPt2str(item.State))) - d.Set("create_time", service.strPt2str(item.CreatedTime)) + d.Set("vlan", service.int64Pt2int64(item.Vlan)) + d.Set("tencent_address", service.strPt2str(item.TencentAddress)) + d.Set("customer_address", service.strPt2str(item.CustomerAddress)) + d.Set("dcg_id", service.strPt2str(item.DirectConnectGatewayId)) + d.Set("state", strings.ToUpper(service.strPt2str(item.State))) + d.Set("create_time", service.strPt2str(item.CreatedTime)) + return nil + }) + if err != nil { + return err + } return nil } diff --git a/tencentcloud/resource_tc_redis_backup_config.go b/tencentcloud/resource_tc_redis_backup_config.go index 7b5f0e3b61..ff5d1d3c76 100644 --- a/tencentcloud/resource_tc_redis_backup_config.go +++ b/tencentcloud/resource_tc_redis_backup_config.go @@ -25,7 +25,9 @@ import ( "context" "fmt" + "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) func resourceTencentCloudRedisBackupConfig() *schema.Resource { @@ -86,16 +88,25 @@ func resourceTencentCloudRedisBackupConfigRead(d *schema.ResourceData, meta inte ctx := context.WithValue(context.TODO(), "logId", logId) service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - - backupPeriods, backupTime, err := service.DescribeAutoBackupConfig(ctx, d.Id()) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + backupPeriods, backupTime, e := service.DescribeAutoBackupConfig(ctx, d.Id()) + if e != nil { + if sdkErr, ok := e.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == RedisInstanceNotFound { + d.SetId("") + return nil + } + } + return retryError(e) + } + d.Set("backup_time", backupTime) + d.Set("redis_id", d.Id()) + d.Set("backup_period", backupPeriods) + return nil + }) if err != nil { return err } - - d.Set("backup_time", backupTime) - d.Set("redis_id", d.Id()) - d.Set("backup_period", backupPeriods) - return nil } diff --git a/tencentcloud/resource_tc_redis_instance.go b/tencentcloud/resource_tc_redis_instance.go index 1802d1ff29..ff18794adc 100644 --- a/tencentcloud/resource_tc_redis_instance.go +++ b/tencentcloud/resource_tc_redis_instance.go @@ -36,6 +36,7 @@ import ( "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" ) func resourceTencentCloudRedisInstance() *schema.Resource { @@ -247,18 +248,35 @@ func resourceTencentCloudRedisInstanceRead(d *schema.ResourceData, meta interfac ctx := context.WithValue(context.TODO(), "logId", logId) service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - has, _, info, err := service.CheckRedisCreateOk(ctx, d.Id()) - if info != nil { - if *info.Status == REDIS_STATUS_ISOLATE || *info.Status == REDIS_STATUS_TODELETE { + var onlineHas bool = true + var ( + has bool + info *redis.InstanceSet + e error + ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + has, _, info, e = service.CheckRedisCreateOk(ctx, d.Id()) + if info != nil { + if *info.Status == REDIS_STATUS_ISOLATE || *info.Status == REDIS_STATUS_TODELETE { + d.SetId("") + onlineHas = false + return nil + } + } + if e != nil { + return resource.NonRetryableError(e) + } + if !has { d.SetId("") + onlineHas = false return nil } - } + return nil + }) if err != nil { - return err + return fmt.Errorf("Fail to get info from redis, reaseon %s", err.Error()) } - if !has { - d.SetId("") + if !onlineHas { return nil } diff --git a/tencentcloud/resource_tc_route_table.go b/tencentcloud/resource_tc_route_table.go index 62bfcf0059..dd2a1ea769 100644 --- a/tencentcloud/resource_tc_route_table.go +++ b/tencentcloud/resource_tc_route_table.go @@ -145,23 +145,35 @@ func resourceTencentCloudVpcRouteTableRead(d *schema.ResourceData, meta interfac id := d.Id() + var ( + info VpcRouteTableBasicInfo + has int + e error + ) service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - - info, has, err := service.DescribeRouteTable(ctx, id) + 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 } - // 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 errRet - } - routeEntryIds := make([]string, 0, len(info.entryInfos)) for _, v := range info.entryInfos { tfRouteEntryId := fmt.Sprintf("%d.%s", v.routeEntryId, id) diff --git a/tencentcloud/resource_tc_route_table_entry.go b/tencentcloud/resource_tc_route_table_entry.go index 822b32d532..28be30a39e 100644 --- a/tencentcloud/resource_tc_route_table_entry.go +++ b/tencentcloud/resource_tc_route_table_entry.go @@ -155,34 +155,38 @@ func resourceTencentCloudVpcRouteEntryRead(d *schema.ResourceData, meta interfac 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 { + info, has, e := service.DescribeRouteTable(ctx, items[1]) + if e != nil { + return retryError(e) + } - info, has, err := service.DescribeRouteTable(ctx, items[1]) - if err != nil { - return err - } + if has == 0 { + d.SetId("") + return nil + } + + if has != 1 { + e = fmt.Errorf("one routeTable id get %d routeTable infos", has) + return resource.NonRetryableError(e) + } - if has == 0 { + for _, v := range info.entryInfos { + if fmt.Sprintf("%d", v.routeEntryId) == items[0] { + d.Set("description", v.description) + d.Set("route_table_id", v.routeEntryId) + d.Set("destination_cidr_block", v.destinationCidr) + d.Set("next_type", v.nextType) + d.Set("next_hub", v.nextBub) + return nil + } + } d.SetId("") return nil - } - - if has != 1 { - err = fmt.Errorf("one routeTable id get %d routeTable infos", has) + }) + if err != nil { return err } - for _, v := range info.entryInfos { - if fmt.Sprintf("%d", v.routeEntryId) == items[0] { - d.Set("description", v.description) - d.Set("route_table_id", v.routeEntryId) - d.Set("destination_cidr_block", v.destinationCidr) - d.Set("next_type", v.nextType) - d.Set("next_hub", v.nextBub) - return nil - } - } - - d.SetId("") - return nil } diff --git a/tencentcloud/resource_tc_security_group_rule.go b/tencentcloud/resource_tc_security_group_rule.go index fc7dc39d4e..93c8471aa3 100644 --- a/tencentcloud/resource_tc_security_group_rule.go +++ b/tencentcloud/resource_tc_security_group_rule.go @@ -236,47 +236,51 @@ func resourceTencentCloudSecurityGroupRuleRead(d *schema.ResourceData, m interfa service := VpcService{client: m.(*TencentCloudClient).apiV3Conn} ruleId := d.Id() + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + sgId, policyType, policy, e := service.DescribeSecurityGroupPolicy(ctx, ruleId) + if e != nil { + return retryError(e) + } - sgId, policyType, policy, err := service.DescribeSecurityGroupPolicy(ctx, ruleId) - if err != nil { - return err - } - - if policy == nil { - d.SetId("") - return nil - } + if policy == nil { + d.SetId("") + return nil + } - d.Set("security_group_id", sgId) + d.Set("security_group_id", sgId) - d.Set("type", policyType) + d.Set("type", policyType) - if policy.CidrBlock != nil && *policy.CidrBlock != "" { - d.Set("cidr_ip", *policy.CidrBlock) - } + if policy.CidrBlock != nil && *policy.CidrBlock != "" { + d.Set("cidr_ip", *policy.CidrBlock) + } - if policy.SecurityGroupId != nil && *policy.SecurityGroupId != "" { - d.Set("source_sgid", *policy.SecurityGroupId) - } + if policy.SecurityGroupId != nil && *policy.SecurityGroupId != "" { + d.Set("source_sgid", *policy.SecurityGroupId) + } - if policy.Protocol != nil { - inputProtocol := d.Get("ip_protocol").(string) - if inputProtocol == "" { - inputProtocol = "ALL" + if policy.Protocol != nil { + inputProtocol := d.Get("ip_protocol").(string) + if inputProtocol == "" { + inputProtocol = "ALL" + } + d.Set("ip_protocol", inputProtocol) } - d.Set("ip_protocol", inputProtocol) - } - if policy.Port != nil { - d.Set("port_range", *policy.Port) - } + if policy.Port != nil { + d.Set("port_range", *policy.Port) + } - d.Set("policy", d.Get("policy").(string)) + d.Set("policy", d.Get("policy").(string)) - if policy.PolicyDescription != nil { - d.Set("description", *policy.PolicyDescription) + if policy.PolicyDescription != nil { + d.Set("description", *policy.PolicyDescription) + } + return nil + }) + if err != nil { + return err } - return nil } diff --git a/tencentcloud/resource_tc_subnet.go b/tencentcloud/resource_tc_subnet.go index 989c44969e..27ac4f78c9 100644 --- a/tencentcloud/resource_tc_subnet.go +++ b/tencentcloud/resource_tc_subnet.go @@ -216,24 +216,36 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{}) vpcService := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} region := meta.(*TencentCloudClient).apiV3Conn.Region + var ( + info VpcSubnetBasicInfo + has int + e error + ) + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e = vpcService.DescribeSubnet(ctx, id) + if e != nil { + return retryError(e) + } - info, has, err := vpcService.DescribeSubnet(ctx, id) + // 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 } - - // 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 errRet - } - tags, err := tagService.DescribeResourceTags(ctx, "vpc", "subnet", region, id) if err != nil { return err diff --git a/tencentcloud/resource_tc_vpc.go b/tencentcloud/resource_tc_vpc.go index 6b709ae250..5b3d18c30d 100644 --- a/tencentcloud/resource_tc_vpc.go +++ b/tencentcloud/resource_tc_vpc.go @@ -166,45 +166,50 @@ func resourceTencentCloudVpcInstanceRead(d *schema.ResourceData, meta interface{ service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} id := d.Id() + err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + info, has, e := service.DescribeVpc(ctx, id) + if e != nil { + return retryError(e) + } - info, has, err := service.DescribeVpc(ctx, id) - if err != nil { - return err - } + // deleted + if has == 0 { + log.Printf("[WARN]%s %s\n", logId, "vpc has been delete") + d.SetId("") + return nil + } - // deleted - if has == 0 { - log.Printf("[WARN]%s %s\n", logId, "vpc has been delete") - d.SetId("") - return nil - } + if has != 1 { + errRet := fmt.Errorf("one vpc_id read get %d vpc info", has) + log.Printf("[CRITAL]%s %s\n", logId, errRet.Error()) + return resource.NonRetryableError(errRet) + } - if has != 1 { - errRet := fmt.Errorf("one vpc_id read get %d vpc info", has) - log.Printf("[CRITAL]%s %s\n", logId, errRet.Error()) - return errRet - } + tags := make(map[string]string, len(info.tags)) + for _, tag := range info.tags { + if tag.Key == nil { + return resource.NonRetryableError(fmt.Errorf("vpc %s tag key is nil", id)) + } + if tag.Value == nil { + return resource.NonRetryableError(fmt.Errorf("vpc %s tag value is nil", id)) + } - tags := make(map[string]string, len(info.tags)) - for _, tag := range info.tags { - if tag.Key == nil { - return fmt.Errorf("vpc %s tag key is nil", id) - } - if tag.Value == nil { - return fmt.Errorf("vpc %s tag value is nil", id) + tags[*tag.Key] = *tag.Value } - tags[*tag.Key] = *tag.Value - } - - d.Set("name", info.name) - d.Set("cidr_block", info.cidr) - d.Set("dns_servers", info.dnsServers) - d.Set("is_multicast", info.isMulticast) - d.Set("create_time", info.createTime) - d.Set("is_default", info.isDefault) - d.Set("tags", tags) + d.Set("name", info.name) + d.Set("cidr_block", info.cidr) + d.Set("dns_servers", info.dnsServers) + d.Set("is_multicast", info.isMulticast) + d.Set("create_time", info.createTime) + d.Set("is_default", info.isDefault) + d.Set("tags", tags) + return nil + }) + if err != nil { + return err + } return nil } diff --git a/tencentcloud/service_tencentcloud_as.go b/tencentcloud/service_tencentcloud_as.go index 67443c5050..0d9beaa163 100644 --- a/tencentcloud/service_tencentcloud_as.go +++ b/tencentcloud/service_tencentcloud_as.go @@ -16,7 +16,7 @@ type AsService struct { client *connectivity.TencentCloudClient } -func (me *AsService) DescribeLaunchConfigurationById(ctx context.Context, configurationId string) (config *as.LaunchConfiguration, errRet error) { +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} @@ -28,13 +28,12 @@ func (me *AsService) DescribeLaunchConfigurationById(ctx context.Context, config errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if len(response.Response.LaunchConfigurationSet) < 1 { - errRet = fmt.Errorf("configuration id is not found") + has = len(response.Response.LaunchConfigurationSet) + if has < 1 { return } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) config = response.Response.LaunchConfigurationSet[0] return } @@ -106,7 +105,7 @@ func (me *AsService) DeleteLaunchConfiguration(ctx context.Context, configuratio return nil } -func (me *AsService) DescribeAutoScalingGroupById(ctx context.Context, scalingGroupId string) (scalingGroup *as.AutoScalingGroup, errRet error) { +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} @@ -118,13 +117,12 @@ func (me *AsService) DescribeAutoScalingGroupById(ctx context.Context, scalingGr errRet = err return } - log.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 { - errRet = fmt.Errorf("configuration id is not found") + has = len(response.Response.AutoScalingGroupSet) + if has < 1 { return } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) scalingGroup = response.Response.AutoScalingGroupSet[0] return } @@ -362,7 +360,7 @@ func (me *AsService) DescribeAutoScalingAttachment(ctx context.Context, scalingG return } -func (me *AsService) DescribeScalingPolicyById(ctx context.Context, scalingPolicyId string) (scalingPolicy *as.ScalingPolicy, errRet error) { +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} @@ -374,13 +372,12 @@ func (me *AsService) DescribeScalingPolicyById(ctx context.Context, scalingPolic errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if len(response.Response.ScalingPolicySet) < 1 { - errRet = fmt.Errorf("scaling policy id is not found") + has = len(response.Response.ScalingPolicySet) + if has < 1 { return } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) scalingPolicy = response.Response.ScalingPolicySet[0] return } @@ -498,7 +495,7 @@ func (me *AsService) DeleteScheduledAction(ctx context.Context, scheduledActonId return nil } -func (me *AsService) DescribeLifecycleHookById(ctx context.Context, lifecycleHookId string) (lifecycleHook *as.LifecycleHook, errRet error) { +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} @@ -510,13 +507,12 @@ func (me *AsService) DescribeLifecycleHookById(ctx context.Context, lifecycleHoo errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if len(response.Response.LifecycleHookSet) < 1 { - errRet = fmt.Errorf("lifecycle hook id is not found") + has = len(response.Response.LifecycleHookSet) + if has < 1 { return } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) lifecycleHook = response.Response.LifecycleHookSet[0] return } @@ -537,7 +533,7 @@ func (me *AsService) DeleteLifecycleHook(ctx context.Context, lifecycleHookId st return nil } -func (me *AsService) DescribeNotificationById(ctx context.Context, notificationId string) (notification *as.AutoScalingNotification, errRet error) { +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} @@ -549,13 +545,12 @@ func (me *AsService) DescribeNotificationById(ctx context.Context, notificationI errRet = err return } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if len(response.Response.AutoScalingNotificationSet) < 1 { - errRet = fmt.Errorf("notification id is not found") + has = len(response.Response.AutoScalingNotificationSet) + if has < 1 { return } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) notification = response.Response.AutoScalingNotificationSet[0] return }