Skip to content

Commit ccd9efb

Browse files
committed
add
1 parent 882eb6c commit ccd9efb

File tree

8 files changed

+2992
-1856
lines changed

8 files changed

+2992
-1856
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.860
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.952
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955
50-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959
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
@@ -942,10 +942,14 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.952 h1:fqO7
942942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.952/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
943943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955 h1:kr5Kx0zMcPkO9f/ao0xhk0f6V8TxziFGo+AGa5BW5QY=
944944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.955/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
945+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959 h1:GZUqSDQkttkhH2hxWNj5apDo1/YhQwML0Q68wW60LSA=
946+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.959/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
945947
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
946948
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
947949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
948950
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
951+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.959 h1:emP+GzlX//OAxHNobuy6IXtARWDzBwhRyZ8DcVTd3V8=
952+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.959/go.mod h1:ebfFKD4tyPNUpSkJXCawYy4XQbeILQ6WXHuCCaD4Hgs=
949953
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
950954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
951955
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,
@@ -430,33 +436,44 @@ func ResourceTencentCloudInstance() *schema.Resource {
430436

431437
func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}) error {
432438
defer tccommon.LogElapsed("resource.tencentcloud_instance.create")()
433-
logId := tccommon.GetLogId(tccommon.ContextNil)
434-
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
435-
cvmService := CvmService{
436-
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
437-
}
439+
440+
var (
441+
logId = tccommon.GetLogId(tccommon.ContextNil)
442+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
443+
cvmService = CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
444+
)
438445

439446
request := cvm.NewRunInstancesRequest()
440447
request.ImageId = helper.String(d.Get("image_id").(string))
441448
request.Placement = &cvm.Placement{
442449
Zone: helper.String(d.Get("availability_zone").(string)),
443450
}
451+
452+
if v, ok := d.GetOk("dedicated_cluster_id"); ok {
453+
request.DedicatedClusterId = helper.String(v.(string))
454+
}
455+
444456
if v, ok := d.GetOk("project_id"); ok {
445457
projectId := int64(v.(int))
446458
request.Placement.ProjectId = &projectId
447459
}
460+
448461
if v, ok := d.GetOk("instance_name"); ok {
449462
request.InstanceName = helper.String(v.(string))
450463
}
464+
451465
if v, ok := d.GetOk("instance_count"); ok {
452466
request.InstanceCount = helper.Int64(int64(v.(int)))
453467
}
468+
454469
if v, ok := d.GetOk("instance_type"); ok {
455470
request.InstanceType = helper.String(v.(string))
456471
}
472+
457473
if v, ok := d.GetOk("hostname"); ok {
458474
request.HostName = helper.String(v.(string))
459475
}
476+
460477
if v, ok := d.GetOk("cam_role_name"); ok {
461478
request.CamRoleName = helper.String(v.(string))
462479
}
@@ -470,10 +487,12 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
470487
periodInt64 := int64(period.(int))
471488
request.InstanceChargePrepaid.Period = &periodInt64
472489
}
490+
473491
if renewFlag, ok := d.GetOk("instance_charge_type_prepaid_renew_flag"); ok {
474492
request.InstanceChargePrepaid.RenewFlag = helper.String(renewFlag.(string))
475493
}
476494
}
495+
477496
if instanceChargeType == CVM_CHARGE_TYPE_SPOTPAID {
478497
spotInstanceType, sitOk := d.GetOk("spot_instance_type")
479498
spotMaxPrice, smpOk := d.GetOk("spot_max_price")
@@ -482,26 +501,31 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
482501
request.InstanceMarketOptions.MarketType = helper.String(CVM_MARKET_TYPE_SPOT)
483502
request.InstanceMarketOptions.SpotOptions = &cvm.SpotMarketOptions{}
484503
}
504+
485505
if sitOk {
486506
request.InstanceMarketOptions.SpotOptions.SpotInstanceType = helper.String(strings.ToLower(spotInstanceType.(string)))
487507
}
508+
488509
if smpOk {
489510
request.InstanceMarketOptions.SpotOptions.MaxPrice = helper.String(spotMaxPrice.(string))
490511
}
491512
}
513+
492514
if instanceChargeType == CVM_CHARGE_TYPE_CDHPAID {
493515
if v, ok := d.GetOk("cdh_instance_type"); ok {
494516
request.InstanceType = helper.String(v.(string))
495517
} else {
496518
return fmt.Errorf("cdh_instance_type can not be empty when instance_charge_type is %s", instanceChargeType)
497519
}
520+
498521
if v, ok := d.GetOk("cdh_host_id"); ok {
499522
request.Placement.HostIds = append(request.Placement.HostIds, helper.String(v.(string)))
500523
} else {
501524
return fmt.Errorf("cdh_host_id can not be empty when instance_charge_type is %s", instanceChargeType)
502525
}
503526
}
504527
}
528+
505529
if v, ok := d.GetOk("placement_group_id"); ok {
506530
request.DisasterRecoverGroupIds = []*string{helper.String(v.(string))}
507531
}
@@ -511,13 +535,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
511535
if v, ok := d.GetOk("internet_charge_type"); ok {
512536
request.InternetAccessible.InternetChargeType = helper.String(v.(string))
513537
}
538+
514539
if v, ok := d.GetOk("internet_max_bandwidth_out"); ok {
515540
maxBandwidthOut := int64(v.(int))
516541
request.InternetAccessible.InternetMaxBandwidthOut = &maxBandwidthOut
517542
}
543+
518544
if v, ok := d.GetOk("bandwidth_package_id"); ok {
519545
request.InternetAccessible.BandwidthPackageId = helper.String(v.(string))
520546
}
547+
521548
if v, ok := d.GetOkExists("allocate_public_ip"); ok {
522549
allocatePublicIp := v.(bool)
523550
request.InternetAccessible.PublicIpAssigned = &allocatePublicIp
@@ -558,13 +585,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
558585
if v, ok := d.GetOk("system_disk_type"); ok {
559586
request.SystemDisk.DiskType = helper.String(v.(string))
560587
}
588+
561589
if v, ok := d.GetOk("system_disk_size"); ok {
562590
diskSize := int64(v.(int))
563591
request.SystemDisk.DiskSize = &diskSize
564592
}
593+
565594
if v, ok := d.GetOk("system_disk_id"); ok {
566595
request.SystemDisk.DiskId = helper.String(v.(string))
567596
}
597+
568598
if v, ok := d.GetOk("data_disks"); ok {
569599
dataDisks := v.([]interface{})
570600
request.DataDisks = make([]*cvm.DataDisk, 0, len(dataDisks))
@@ -578,15 +608,18 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
578608
DiskSize: &diskSize,
579609
ThroughputPerformance: &throughputPerformance,
580610
}
611+
581612
if v, ok := value["data_disk_snapshot_id"]; ok && v != nil {
582613
snapshotId := v.(string)
583614
if snapshotId != "" {
584615
dataDisk.SnapshotId = helper.String(snapshotId)
585616
}
586617
}
618+
587619
if value["data_disk_id"] != "" {
588620
dataDisk.DiskId = helper.String(value["data_disk_id"].(string))
589621
}
622+
590623
if deleteWithInstance, ok := value["delete_with_instance"]; ok {
591624
deleteWithInstanceBool := deleteWithInstance.(bool)
592625
dataDisk.DeleteWithInstance = &deleteWithInstanceBool
@@ -596,6 +629,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
596629
encryptBool := encrypt.(bool)
597630
dataDisk.Encrypt = &encryptBool
598631
}
632+
599633
request.DataDisks = append(request.DataDisks, &dataDisk)
600634
}
601635
}
@@ -608,6 +642,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
608642
Enabled: &securityService,
609643
}
610644
}
645+
611646
if v, ok := d.GetOkExists("disable_monitor_service"); ok {
612647
monitorService := !(v.(bool))
613648
request.EnhancedService.MonitorService = &cvm.RunMonitorServiceEnabled{
@@ -623,9 +658,11 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
623658
} else if v, ok := d.GetOk("key_name"); ok {
624659
request.LoginSettings.KeyIds = []*string{helper.String(v.(string))}
625660
}
661+
626662
if v, ok := d.GetOk("password"); ok {
627663
request.LoginSettings.Password = helper.String(v.(string))
628664
}
665+
629666
v := d.Get("keep_image_login").(bool)
630667
if v {
631668
request.LoginSettings.KeepImageLogin = helper.String(CVM_IMAGE_LOGIN)
@@ -636,6 +673,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
636673
if v, ok := d.GetOk("user_data"); ok {
637674
request.UserData = helper.String(v.(string))
638675
}
676+
639677
if v, ok := d.GetOk("user_data_raw"); ok {
640678
userData := base64.StdEncoding.EncodeToString([]byte(v.(string)))
641679
request.UserData = &userData
@@ -652,17 +690,19 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
652690
Key: helper.String(tagKey),
653691
Value: helper.String(tagValue),
654692
}
693+
655694
tags = append(tags, &tag)
656695
}
696+
657697
tagSpecification := cvm.TagSpecification{
658698
ResourceType: helper.String("instance"),
659699
Tags: tags,
660700
}
701+
661702
request.TagSpecification = append(request.TagSpecification, &tagSpecification)
662703
}
663704

664705
instanceId := ""
665-
666706
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
667707
ratelimit.Check("create")
668708
response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RunInstances(request)
@@ -673,38 +713,46 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
673713
if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) {
674714
return resource.RetryableError(fmt.Errorf("cvm create error: %s, retrying", e.Error()))
675715
}
716+
676717
return resource.NonRetryableError(err)
677718
}
719+
678720
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
679721
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
680722
if len(response.Response.InstanceIdSet) < 1 {
681723
err = fmt.Errorf("instance id is nil")
682724
return resource.NonRetryableError(err)
683725
}
684-
instanceId = *response.Response.InstanceIdSet[0]
685726

727+
instanceId = *response.Response.InstanceIdSet[0]
686728
return nil
687729
})
730+
688731
if err != nil {
689732
return err
690733
}
734+
691735
d.SetId(instanceId)
692736

693737
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
694738
instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId)
695739
if errRet != nil {
696740
return tccommon.RetryError(errRet, tccommon.InternalError)
697741
}
742+
698743
if instance != nil && *instance.InstanceState == CVM_STATUS_LAUNCH_FAILED {
699744
//LatestOperationCodeMode
700745
if instance.LatestOperationErrorMsg != nil {
701746
return resource.NonRetryableError(fmt.Errorf("cvm instance %s launch failed. Error msg: %s.\n", *instance.InstanceId, *instance.LatestOperationErrorMsg))
702747
}
748+
703749
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))
704750
}
751+
705752
if instance != nil && *instance.InstanceState == CVM_STATUS_RUNNING {
706753
return nil
707754
}
755+
708756
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
709757
})
710758

@@ -721,13 +769,16 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
721769
if e != nil {
722770
return resource.RetryableError(e)
723771
}
772+
724773
for tagKey, tagValue := range tags {
725774
if v, ok := actualTags[tagKey]; !ok || v != tagValue {
726775
return resource.RetryableError(fmt.Errorf("tag(%s, %s) modification is not completed", tagKey, tagValue))
727776
}
728777
}
778+
729779
return nil
730780
})
781+
731782
if err != nil {
732783
return err
733784
}
@@ -745,11 +796,14 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}
745796
if errRet != nil {
746797
return tccommon.RetryError(errRet, tccommon.InternalError)
747798
}
799+
748800
if instance != nil && *instance.InstanceState == CVM_STATUS_STOPPED {
749801
return nil
750802
}
803+
751804
return resource.RetryableError(fmt.Errorf("cvm instance status is %s, retry...", *instance.InstanceState))
752805
})
806+
753807
if err != nil {
754808
return err
755809
}

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)