Skip to content

Commit 4b0cfe3

Browse files
author
ttomzhou
committed
change log
2 parents 62bbaaa + 0d149f7 commit 4b0cfe3

File tree

5 files changed

+85
-8
lines changed

5 files changed

+85
-8
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## 1.42.2 (Unreleased)
1+
## 1.42.3 (Unreleased)
22

33
FEATURES:
44

@@ -8,6 +8,11 @@ ENHANCEMENTS:
88

99
* Resource: `tencentcloud_instance` add new argument `data_disk_snapshot_id` to support data disk with `SnapshotId`([#469](https://github.com/tencentcloudstack/terraform-provider-tencentcloud/issues/469))
1010

11+
## 1.42.2 (September 14, 2020)
12+
13+
BUG FIXES:
14+
* Resource: `tencentcloud_instance` fix `key_name` update error([#515](https://github.com/tencentcloudstack/terraform-provider-tencentcloud/issues/515)).
15+
1116
## 1.42.1 (September 10, 2020)
1217

1318
BUG FIXES:

tencentcloud/resource_tc_instance.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -759,6 +759,8 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
759759
}
760760
if len(instance.LoginSettings.KeyIds) > 0 {
761761
_ = d.Set("key_name", instance.LoginSettings.KeyIds[0])
762+
} else {
763+
_ = d.Set("key_name", "")
762764
}
763765
if *instance.InstanceState == CVM_STATUS_STOPPED {
764766
_ = d.Set("running_flag", false)
@@ -951,6 +953,51 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
951953
}
952954
}
953955

956+
if d.HasChange("key_name") {
957+
old, new := d.GetChange("key_name")
958+
oldKeyId := old.(string)
959+
keyId := new.(string)
960+
err := cvmService.UnbindKeyPair(ctx, oldKeyId, []*string{&instanceId})
961+
if err != nil {
962+
return err
963+
}
964+
err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
965+
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
966+
if errRet != nil {
967+
return retryError(errRet, InternalError)
968+
}
969+
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
970+
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
971+
}
972+
return nil
973+
})
974+
if err != nil {
975+
return err
976+
}
977+
978+
if keyId != "" {
979+
err = cvmService.BindKeyPair(ctx, keyId, instanceId)
980+
if err != nil {
981+
return err
982+
}
983+
time.Sleep(10 * time.Second)
984+
err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError {
985+
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
986+
if errRet != nil {
987+
return retryError(errRet, InternalError)
988+
}
989+
if instance != nil && *instance.LatestOperationState == CVM_LATEST_OPERATION_STATE_OPERATING {
990+
return resource.RetryableError(fmt.Errorf("cvm instance latest operetion status is %s, retry...", *instance.LatestOperationState))
991+
}
992+
return nil
993+
})
994+
if err != nil {
995+
return err
996+
}
997+
}
998+
d.SetPartial("key_name")
999+
}
1000+
9541001
if d.HasChange("vpc_id") || d.HasChange("subnet_id") || d.HasChange("private_ip") {
9551002
vpcId := d.Get("vpc_id").(string)
9561003
subnetId := d.Get("subnet_id").(string)

tencentcloud/resource_tc_instance_test.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func TestAccTencentCloudInstanceWithKeyPair(t *testing.T) {
188188
CheckDestroy: testAccCheckInstanceDestroy,
189189
Steps: []resource.TestStep{
190190
{
191-
Config: testAccTencentCloudInstanceWithKeyPair("tf_acc_test_key1"),
191+
Config: testAccTencentCloudInstanceWithKeyPair("key_pair_0"),
192192
Check: resource.ComposeTestCheckFunc(
193193
testAccCheckTencentCloudDataSourceID(id),
194194
testAccCheckTencentCloudInstanceExists(id),
@@ -197,7 +197,7 @@ func TestAccTencentCloudInstanceWithKeyPair(t *testing.T) {
197197
),
198198
},
199199
{
200-
Config: testAccTencentCloudInstanceWithKeyPair("tf_acc_test_key2"),
200+
Config: testAccTencentCloudInstanceWithKeyPair("key_pair_1"),
201201
Check: resource.ComposeTestCheckFunc(
202202
testAccCheckTencentCloudDataSourceID(id),
203203
testAccCheckTencentCloudInstanceExists(id),
@@ -618,17 +618,22 @@ resource "tencentcloud_instance" "foo" {
618618
func testAccTencentCloudInstanceWithKeyPair(keyName string) string {
619619
return fmt.Sprintf(
620620
defaultInstanceVariable+`
621-
resource "tencentcloud_key_pair" "foo" {
622-
key_name = "%s"
621+
resource "tencentcloud_key_pair" "key_pair_0" {
622+
key_name = "key_pair_0"
623623
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDjd8fTnp7Dcuj4mLaQxf9Zs/ORgUL9fQxRCNKkPgP1paTy1I513maMX126i36Lxxl3+FUB52oVbo/FgwlIfX8hyCnv8MCxqnuSDozf1CD0/wRYHcTWAtgHQHBPCC2nJtod6cVC3kB18KeV4U7zsxmwFeBIxojMOOmcOBuh7+trRw=="
624624
}
625625
626+
resource "tencentcloud_key_pair" "key_pair_1" {
627+
key_name = "key_pair_1"
628+
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzwYE6KI8uULEvSNA2k1tlsLtMDe+x1Saw6yL3V1mk9NFws0K2BshYqsnP/BlYiGZv/Nld5xmGoA9LupOcUpyyGGSHZdBrMx1Dz9ajewe7kGowRWwwMAHTlzh9+iqeg/v6P5vW6EwK4hpGWgv06vGs3a8CzfbHu1YRbZAO/ysp3ymdL+vGvw/vzC0T+YwPMisn9wFD5FTlJ+Em6s9PzxqR/41t4YssmCwUV78ZoYL8CyB0emuB8wALvcXbdUVxMxpBEHd5U6ZP5+HPxU2WFbWqiFCuErLIZRuxFw8L/Ot+JOyNnadN1XU4crYDX5cML1i/ExXKVIDoBaLtgAJOpyeP"
629+
}
630+
626631
resource "tencentcloud_instance" "foo" {
627632
instance_name = var.instance_name
628633
availability_zone = data.tencentcloud_availability_zones.default.zones.0.name
629634
image_id = data.tencentcloud_images.default.images.0.image_id
630635
instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type
631-
key_name = tencentcloud_key_pair.foo.id
636+
key_name = tencentcloud_key_pair.%s.id
632637
system_disk_type = "CLOUD_PREMIUM"
633638
}
634639
`,

tencentcloud/resource_tc_redis_instance.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,14 +538,15 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf
538538
if newMemSize < 1 {
539539
return fmt.Errorf("redis mem_size value cannot be set to less than 1")
540540
}
541-
redisId, err := redisService.UpgradeInstance(ctx, id, int64(newMemSize))
541+
_, err := redisService.UpgradeInstance(ctx, id, int64(newMemSize))
542542

543543
if err != nil {
544544
log.Printf("[CRITAL]%s redis update mem size error, reason:%s\n", logId, err.Error())
545+
return err
545546
}
546547

547548
err = resource.Retry(4*readRetryTimeout, func() *resource.RetryError {
548-
_, _, info, err := redisService.CheckRedisOnlineOk(ctx, redisId)
549+
_, _, info, err := redisService.CheckRedisOnlineOk(ctx, id)
549550

550551
if info != nil {
551552
status := REDIS_STATUS[*info.Status]

tencentcloud/service_tencentcloud_cvm.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ func (me *CvmService) UnbindKeyPair(ctx context.Context, keyId string, instanceI
478478
request := cvm.NewDisassociateInstancesKeyPairsRequest()
479479
request.KeyIds = []*string{&keyId}
480480
request.InstanceIds = instanceIds
481+
request.ForceStop = helper.Bool(true)
481482

482483
ratelimit.Check(request.GetAction())
483484
response, err := me.client.UseCvmClient().DisassociateInstancesKeyPairs(request)
@@ -492,6 +493,24 @@ func (me *CvmService) UnbindKeyPair(ctx context.Context, keyId string, instanceI
492493
return nil
493494
}
494495

496+
func (me *CvmService) BindKeyPair(ctx context.Context, keyId, instanceId string) error {
497+
logId := getLogId(ctx)
498+
request := cvm.NewAssociateInstancesKeyPairsRequest()
499+
request.KeyIds = []*string{&keyId}
500+
request.InstanceIds = []*string{&instanceId}
501+
request.ForceStop = helper.Bool(true)
502+
503+
ratelimit.Check(request.GetAction())
504+
_, err := me.client.UseCvmClient().AssociateInstancesKeyPairs(request)
505+
if err != nil {
506+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
507+
logId, request.GetAction(), request.ToJsonString(), err.Error())
508+
return err
509+
}
510+
511+
return nil
512+
}
513+
495514
func (me *CvmService) CreatePlacementGroup(ctx context.Context, placementName, placementType string) (placementId string, errRet error) {
496515
logId := getLogId(ctx)
497516
request := cvm.NewCreateDisasterRecoverGroupRequest()

0 commit comments

Comments
 (0)