Skip to content

Commit c499e7f

Browse files
committed
add
1 parent f497569 commit c499e7f

File tree

7 files changed

+2989
-1853
lines changed

7 files changed

+2989
-1853
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ require (
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.962
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967
50-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
50+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.959
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,10 +954,14 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3E
954954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
955955
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967 h1:ui73H/2pKk2aDCxaBCLAeMB3JlNgdCkn0nx1x0pqvf0=
956956
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.967/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
957+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959 h1:GZUqSDQkttkhH2hxWNj5apDo1/YhQwML0Q68wW60LSA=
958+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
957959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
958960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
959961
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
960962
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
963+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.959 h1:emP+GzlX//OAxHNobuy6IXtARWDzBwhRyZ8DcVTd3V8=
964+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.959/go.mod h1:ebfFKD4tyPNUpSkJXCawYy4XQbeILQ6WXHuCCaD4Hgs=
961965
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
962966
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
963967
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692 h1:lD44AqXCzkraZiCeMjL7dZmvuyurpyQRKwPHA6Ux5To=

tencentcloud/services/cvm/resource_tc_instance.go

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ func ResourceTencentCloudInstance() *schema.Resource {
4848
ForceNew: true,
4949
Description: "The available zone for the CVM instance.",
5050
},
51+
"dedicated_cluster_id": {
52+
Type: schema.TypeString,
53+
Optional: true,
54+
ForceNew: true,
55+
Description: "Exclusive cluster id.",
56+
},
5157
"instance_count": {
5258
Type: schema.TypeInt,
5359
Optional: true,
@@ -435,33 +441,44 @@ func ResourceTencentCloudInstance() *schema.Resource {
435441

436442
func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}) error {
437443
defer tccommon.LogElapsed("resource.tencentcloud_instance.create")()
438-
logId := tccommon.GetLogId(tccommon.ContextNil)
439-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
440-
cvmService := CvmService{
441-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
442-
}
444+
445+
var (
446+
logId = tccommon.GetLogId(tccommon.ContextNil)
447+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
448+
cvmService = CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
449+
)
443450

444451
request := cvm.NewRunInstancesRequest()
445452
request.ImageId = helper.String(d.Get("image_id").(string))
446453
request.Placement = &cvm.Placement{
447454
Zone: helper.String(d.Get("availability_zone").(string)),
448455
}
456+
457+
if v, ok := d.GetOk("dedicated_cluster_id"); ok {
458+
request.DedicatedClusterId = helper.String(v.(string))
459+
}
460+
449461
if v, ok := d.GetOk("project_id"); ok {
450462
projectId := int64(v.(int))
451463
request.Placement.ProjectId = &projectId
452464
}
465+
453466
if v, ok := d.GetOk("instance_name"); ok {
454467
request.InstanceName = helper.String(v.(string))
455468
}
469+
456470
if v, ok := d.GetOk("instance_count"); ok {
457471
request.InstanceCount = helper.Int64(int64(v.(int)))
458472
}
473+
459474
if v, ok := d.GetOk("instance_type"); ok {
460475
request.InstanceType = helper.String(v.(string))
461476
}
477+
462478
if v, ok := d.GetOk("hostname"); ok {
463479
request.HostName = helper.String(v.(string))
464480
}
481+
465482
if v, ok := d.GetOk("cam_role_name"); ok {
466483
request.CamRoleName = helper.String(v.(string))
467484
}
@@ -475,10 +492,12 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
475492
periodInt64 := int64(period.(int))
476493
request.InstanceChargePrepaid.Period = &periodInt64
477494
}
495+
478496
if renewFlag, ok := d.GetOk("instance_charge_type_prepaid_renew_flag"); ok {
479497
request.InstanceChargePrepaid.RenewFlag = helper.String(renewFlag.(string))
480498
}
481499
}
500+
482501
if instanceChargeType == CVM_CHARGE_TYPE_SPOTPAID {
483502
spotInstanceType, sitOk := d.GetOk("spot_instance_type")
484503
spotMaxPrice, smpOk := d.GetOk("spot_max_price")
@@ -487,26 +506,31 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
487506
request.InstanceMarketOptions.MarketType = helper.String(CVM_MARKET_TYPE_SPOT)
488507
request.InstanceMarketOptions.SpotOptions = &cvm.SpotMarketOptions{}
489508
}
509+
490510
if sitOk {
491511
request.InstanceMarketOptions.SpotOptions.SpotInstanceType = helper.String(strings.ToLower(spotInstanceType.(string)))
492512
}
513+
493514
if smpOk {
494515
request.InstanceMarketOptions.SpotOptions.MaxPrice = helper.String(spotMaxPrice.(string))
495516
}
496517
}
518+
497519
if instanceChargeType == CVM_CHARGE_TYPE_CDHPAID {
498520
if v, ok := d.GetOk("cdh_instance_type"); ok {
499521
request.InstanceType = helper.String(v.(string))
500522
} else {
501523
return fmt.Errorf("cdh_instance_type can not be empty when instance_charge_type is %s", instanceChargeType)
502524
}
525+
503526
if v, ok := d.GetOk("cdh_host_id"); ok {
504527
request.Placement.HostIds = append(request.Placement.HostIds, helper.String(v.(string)))
505528
} else {
506529
return fmt.Errorf("cdh_host_id can not be empty when instance_charge_type is %s", instanceChargeType)
507530
}
508531
}
509532
}
533+
510534
if v, ok := d.GetOk("placement_group_id"); ok {
511535
request.DisasterRecoverGroupIds = []*string{helper.String(v.(string))}
512536
}
@@ -516,13 +540,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
516540
if v, ok := d.GetOk("internet_charge_type"); ok {
517541
request.InternetAccessible.InternetChargeType = helper.String(v.(string))
518542
}
543+
519544
if v, ok := d.GetOk("internet_max_bandwidth_out"); ok {
520545
maxBandwidthOut := int64(v.(int))
521546
request.InternetAccessible.InternetMaxBandwidthOut = &maxBandwidthOut
522547
}
548+
523549
if v, ok := d.GetOk("bandwidth_package_id"); ok {
524550
request.InternetAccessible.BandwidthPackageId = helper.String(v.(string))
525551
}
552+
526553
if v, ok := d.GetOkExists("allocate_public_ip"); ok {
527554
allocatePublicIp := v.(bool)
528555
request.InternetAccessible.PublicIpAssigned = &allocatePublicIp
@@ -563,13 +590,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
563590
if v, ok := d.GetOk("system_disk_type"); ok {
564591
request.SystemDisk.DiskType = helper.String(v.(string))
565592
}
593+
566594
if v, ok := d.GetOk("system_disk_size"); ok {
567595
diskSize := int64(v.(int))
568596
request.SystemDisk.DiskSize = &diskSize
569597
}
598+
570599
if v, ok := d.GetOk("system_disk_id"); ok {
571600
request.SystemDisk.DiskId = helper.String(v.(string))
572601
}
602+
573603
if v, ok := d.GetOk("data_disks"); ok {
574604
dataDisks := v.([]interface{})
575605
request.DataDisks = make([]*cvm.DataDisk, 0, len(dataDisks))
@@ -583,15 +613,18 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
583613
DiskSize: &diskSize,
584614
ThroughputPerformance: &throughputPerformance,
585615
}
616+
586617
if v, ok := value["data_disk_snapshot_id"]; ok && v != nil {
587618
snapshotId := v.(string)
588619
if snapshotId != "" {
589620
dataDisk.SnapshotId = helper.String(snapshotId)
590621
}
591622
}
623+
592624
if value["data_disk_id"] != "" {
593625
dataDisk.DiskId = helper.String(value["data_disk_id"].(string))
594626
}
627+
595628
if deleteWithInstance, ok := value["delete_with_instance"]; ok {
596629
deleteWithInstanceBool := deleteWithInstance.(bool)
597630
dataDisk.DeleteWithInstance = &deleteWithInstanceBool
@@ -601,6 +634,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
601634
encryptBool := encrypt.(bool)
602635
dataDisk.Encrypt = &encryptBool
603636
}
637+
604638
request.DataDisks = append(request.DataDisks, &dataDisk)
605639
}
606640
}
@@ -613,6 +647,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
613647
Enabled: &securityService,
614648
}
615649
}
650+
616651
if v, ok := d.GetOkExists("disable_monitor_service"); ok {
617652
monitorService := !(v.(bool))
618653
request.EnhancedService.MonitorService = &cvm.RunMonitorServiceEnabled{
@@ -628,9 +663,11 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
628663
} else if v, ok := d.GetOk("key_name"); ok {
629664
request.LoginSettings.KeyIds = []*string{helper.String(v.(string))}
630665
}
666+
631667
if v, ok := d.GetOk("password"); ok {
632668
request.LoginSettings.Password = helper.String(v.(string))
633669
}
670+
634671
v := d.Get("keep_image_login").(bool)
635672
if v {
636673
request.LoginSettings.KeepImageLogin = helper.String(CVM_IMAGE_LOGIN)
@@ -641,6 +678,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
641678
if v, ok := d.GetOk("user_data"); ok {
642679
request.UserData = helper.String(v.(string))
643680
}
681+
644682
if v, ok := d.GetOk("user_data_raw"); ok {
645683
userData := base64.StdEncoding.EncodeToString([]byte(v.(string)))
646684
request.UserData = &userData
@@ -657,17 +695,19 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
657695
Key: helper.String(tagKey),
658696
Value: helper.String(tagValue),
659697
}
698+
660699
tags = append(tags, &tag)
661700
}
701+
662702
tagSpecification := cvm.TagSpecification{
663703
ResourceType: helper.String("instance"),
664704
Tags: tags,
665705
}
706+
666707
request.TagSpecification = append(request.TagSpecification, &tagSpecification)
667708
}
668709

669710
instanceId := ""
670-
671711
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
672712
ratelimit.Check("create")
673713
response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RunInstances(request)
@@ -678,38 +718,46 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
678718
if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) {
679719
return resource.RetryableError(fmt.Errorf("cvm create error: %s, retrying", e.Error()))
680720
}
721+
681722
return resource.NonRetryableError(err)
682723
}
724+
683725
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
684726
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
685727
if len(response.Response.InstanceIdSet) < 1 {
686728
err = fmt.Errorf("instance id is nil")
687729
return resource.NonRetryableError(err)
688730
}
689-
instanceId = *response.Response.InstanceIdSet[0]
690731

732+
instanceId = *response.Response.InstanceIdSet[0]
691733
return nil
692734
})
735+
693736
if err != nil {
694737
return err
695738
}
739+
696740
d.SetId(instanceId)
697741

698742
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
699743
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
700744
if errRet != nil {
701745
return tccommon.RetryError(errRet, tccommon.InternalError)
702746
}
747+
703748
if instance != nil && *instance.InstanceState == CVM_STATUS_LAUNCH_FAILED {
704749
//LatestOperationCodeMode
705750
if instance.LatestOperationErrorMsg != nil {
706751
return resource.NonRetryableError(fmt.Errorf("cvm instance %s launch failed. Error msg: %s.\n", *instance.InstanceId, *instance.LatestOperationErrorMsg))
707752
}
753+
708754
return resource.NonRetryableError(fmt.Errorf("cvm instance %s launch failed, this resource will not be stored to tfstate and will auto removed\n.", *instance.InstanceId))
709755
}
756+
710757
if instance != nil && *instance.InstanceState == CVM_STATUS_RUNNING {
711758
return nil
712759
}
760+
713761
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
714762
})
715763

@@ -726,13 +774,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
726774
if e != nil {
727775
return resource.RetryableError(e)
728776
}
777+
729778
for tagKey, tagValue := range tags {
730779
if v, ok := actualTags[tagKey]; !ok || v != tagValue {
731780
return resource.RetryableError(fmt.Errorf("tag(%s, %s) modification is not completed", tagKey, tagValue))
732781
}
733782
}
783+
734784
return nil
735785
})
786+
736787
if err != nil {
737788
return err
738789
}
@@ -750,11 +801,14 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
750801
if errRet != nil {
751802
return tccommon.RetryError(errRet, tccommon.InternalError)
752803
}
804+
753805
if instance != nil && *instance.InstanceState == CVM_STATUS_STOPPED {
754806
return nil
755807
}
808+
756809
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
757810
})
811+
758812
if err != nil {
759813
return err
760814
}

0 commit comments

Comments
 (0)