Skip to content

Commit 2da5235

Browse files
author
mikatong
committed
support update user_data
1 parent 7ebf15d commit 2da5235

File tree

22 files changed

+17702
-448
lines changed

22 files changed

+17702
-448
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ require (
2525
github.com/mozillazg/go-httpheader v0.4.0 // indirect
2626
github.com/pkg/errors v0.9.1
2727
github.com/stretchr/testify v1.8.2
28-
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible
28+
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible
2929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.763
@@ -46,8 +46,8 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122
50-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126
50+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,8 @@ github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9
818818
github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
819819
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible h1:Qo2u4QpYzsrrTedOFmNyDIghJMsFSa/Dn3HfnTWtTfs=
820820
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
821+
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible h1:gGfe9oRCYZAWxd/xm0k8NaLmEssVPPl7pEwO022Arb4=
822+
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
821823
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799 h1:u49r1bGFDY0CeAF46iotNnLtc5yplPf9XXa7W7zJ4fE=
822824
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799/go.mod h1:JQa/Ess7Kkn/BuAugq0Tt5GJR7ZQAY47ypP9LjEn/DE=
823825
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285 h1:gFmukRGLtYiXVBVvg/5DP/0fM1+dKpwDjT+khtDVLmc=
@@ -933,12 +935,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1111/go.mod
933935
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
934936
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122 h1:jffjOBJ1ejT4ldClIIEI+QnfV5K2RubA+xNiz6uuFOU=
935937
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
938+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126 h1:HHWE825wxwoEEZVB9CLgPpXOiFy6hZXJMcCjCAOckAU=
939+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
936940
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
937941
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
938942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
939943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
940944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053 h1:x193cxbzh+bXxxcq9NGzriW0jCxQHJd6mT79kcfUqSs=
941945
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053/go.mod h1:yM5i22uG9HKuUwwz+XvrDW9oBtZdb7avyDrMrS/FBIs=
946+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126 h1:JdhKLXoTETh13Oe9d4yBXljwfubfCEa6HjX60PtpbRY=
947+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126/go.mod h1:DTeq5O98dERO/YvCPVrmr533PZd8OQhHmaucRe2pjnY=
942948
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
943949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
944950
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111 h1:Y7LLIZEQh8OAbnBWppUopu2PjPaQOO9Jzhp8LZO7adI=

tencentcloud/connectivity/client.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/aws/aws-sdk-go/aws/session"
1616
"github.com/aws/aws-sdk-go/service/s3"
1717
intlProfile "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/profile"
18+
cvmintl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
1819
mdl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/mdl/v20200326"
1920
privatednsIntl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/privatedns/v20201028"
2021
antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309"
@@ -131,6 +132,7 @@ type TencentCloudClient struct {
131132
vpcConn *vpc.Client
132133
cbsConn *cbs.Client
133134
cvmv20170312Conn *cvmv20170312.Client
135+
cvmIntlConn *cvmintl.Client
134136
clbConn *clb.Client
135137
dayuConn *dayu.Client
136138
dcConn *dc.Client
@@ -587,6 +589,19 @@ func (me *TencentCloudClient) UseCvmClient(iacExtInfo ...IacExtInfo) *cvmv201703
587589
return me.cvmv20170312Conn
588590
}
589591

592+
// UseCvmIntlClient returns cvm intl client for service
593+
func (me *TencentCloudClient) UseCvmIntlClient(iacExtInfo ...IacExtInfo) *cvmintl.Client {
594+
if me.cvmIntlConn != nil {
595+
return me.cvmIntlConn
596+
}
597+
598+
cpf := me.NewClientIntlProfile(300)
599+
me.cvmIntlConn, _ = cvmintl.NewClient(me.Credential, me.Region, cpf)
600+
me.cvmIntlConn.WithHttpTransport(&LogRoundTripper{})
601+
602+
return me.cvmIntlConn
603+
}
604+
590605
// UseCvmV20170312Client returns cvm client for service
591606
func (me *TencentCloudClient) UseCvmV20170312Client(iacExtInfo ...IacExtInfo) *cvmv20170312.Client {
592607
var logRoundTripper LogRoundTripper

tencentcloud/services/cvm/data_source_tc_reserved_instances.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11-
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
11+
cvm "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
1212

1313
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1414
)

tencentcloud/services/cvm/resource_tc_instance.go

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,14 +386,14 @@ func ResourceTencentCloudInstance() *schema.Resource {
386386
"user_data": {
387387
Type: schema.TypeString,
388388
Optional: true,
389-
ForceNew: true,
389+
Computed: true,
390390
ConflictsWith: []string{"user_data_raw"},
391391
Description: "The user data to be injected into this instance. Must be base64 encoded and up to 16 KB.",
392392
},
393393
"user_data_raw": {
394394
Type: schema.TypeString,
395395
Optional: true,
396-
ForceNew: true,
396+
Computed: true,
397397
ConflictsWith: []string{"user_data"},
398398
Description: "The user data to be injected into this instance, in plain text. Conflicts with `user_data`. Up to 16 KB after base64 encoded.",
399399
},
@@ -1431,6 +1431,32 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
14311431
_ = d.Set("running_flag", true)
14321432
}
14331433

1434+
var instanceAttribute *cvm.InstanceAttribute
1435+
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
1436+
request := cvm.NewDescribeInstancesAttributesRequest()
1437+
response, errRet := client.UseCvmClient().DescribeInstancesAttributes(request)
1438+
if errRet != nil {
1439+
return tccommon.RetryError(errRet, tccommon.InternalError)
1440+
}
1441+
1442+
if len(response.Response.InstanceSet) > 0 {
1443+
instanceAttribute = response.Response.InstanceSet[0]
1444+
}
1445+
return nil
1446+
})
1447+
1448+
if err != nil {
1449+
return err
1450+
}
1451+
if instanceAttribute != nil && instanceAttribute.Attributes != nil && instanceAttribute.Attributes.UserData != nil {
1452+
_ = d.Set("user_data", instanceAttribute.Attributes.UserData)
1453+
userDataRaw, e := base64.StdEncoding.DecodeString(*(instanceAttribute.Attributes.UserData))
1454+
if e != nil {
1455+
return e
1456+
}
1457+
_ = d.Set("user_data_raw", string(userDataRaw))
1458+
}
1459+
14341460
return nil
14351461
}
14361462

@@ -1938,6 +1964,30 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
19381964
}
19391965
}
19401966

1967+
if d.HasChange("user_data") {
1968+
err := cvmService.ModifyUserData(ctx, instanceId, d.Get("user_data").(string))
1969+
if err != nil {
1970+
return err
1971+
}
1972+
1973+
err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false)
1974+
if err != nil {
1975+
return err
1976+
}
1977+
}
1978+
if d.HasChange("user_data_raw") {
1979+
userDataRaw := d.Get("user_data_raw").(string)
1980+
userData := base64.StdEncoding.EncodeToString([]byte(userDataRaw))
1981+
err := cvmService.ModifyUserData(ctx, instanceId, userData)
1982+
if err != nil {
1983+
return err
1984+
}
1985+
1986+
err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false)
1987+
if err != nil {
1988+
return err
1989+
}
1990+
}
19411991
d.Partial(false)
19421992

19431993
return resourceTencentCloudInstanceRead(d, meta)

tencentcloud/services/cvm/resource_tc_reserved_instance.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11-
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
11+
cvm "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
1212
)
1313

1414
func ResourceTencentCloudReservedInstance() *schema.Resource {

tencentcloud/services/cvm/service_tencentcloud_cvm.go

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
1313

1414
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
15+
cvmintl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
1516
sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1617
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1718
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
@@ -236,6 +237,25 @@ func (me *CvmService) ModifyInstanceName(ctx context.Context, instanceId, instan
236237
return nil
237238
}
238239

240+
func (me *CvmService) ModifyUserData(ctx context.Context, instanceId, userData string) error {
241+
logId := tccommon.GetLogId(ctx)
242+
request := cvm.NewModifyInstancesAttributeRequest()
243+
request.InstanceIds = []*string{&instanceId}
244+
request.UserData = &userData
245+
246+
ratelimit.Check(request.GetAction())
247+
response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request)
248+
if err != nil {
249+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
250+
logId, request.GetAction(), request.ToJsonString(), err.Error())
251+
return err
252+
}
253+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
254+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
255+
256+
return nil
257+
}
258+
239259
func (me *CvmService) ModifySecurityGroups(ctx context.Context, instanceId string, securityGroups []*string) error {
240260
logId := tccommon.GetLogId(ctx)
241261
request := cvm.NewModifyInstancesAttributeRequest()
@@ -930,12 +950,12 @@ func (me *CvmService) CreateReservedInstance(ctx context.Context, configId strin
930950
return
931951
}
932952

933-
func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.ReservedInstances, errRet error) {
953+
func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvmintl.ReservedInstances, errRet error) {
934954
logId := tccommon.GetLogId(ctx)
935-
request := cvm.NewDescribeReservedInstancesRequest()
936-
request.Filters = make([]*cvm.Filter, 0, len(filters))
955+
request := cvmintl.NewDescribeReservedInstancesRequest()
956+
request.Filters = make([]*cvmintl.Filter, 0, len(filters))
937957
for k, v := range filters {
938-
filter := cvm.Filter{
958+
filter := cvmintl.Filter{
939959
Name: helper.String(k),
940960
Values: []*string{helper.String(v)},
941961
}
@@ -944,12 +964,12 @@ func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filt
944964

945965
var offset int64 = 0
946966
var pageSize int64 = 100
947-
instances = make([]*cvm.ReservedInstances, 0)
967+
instances = make([]*cvmintl.ReservedInstances, 0)
948968
for {
949969
request.Offset = &offset
950970
request.Limit = &pageSize
951971
ratelimit.Check(request.GetAction())
952-
response, err := me.client.UseCvmClient().DescribeReservedInstances(request)
972+
response, err := me.client.UseCvmIntlClient().DescribeReservedInstances(request)
953973
if err != nil {
954974
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
955975
logId, request.GetAction(), request.ToJsonString(), err.Error())

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/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.

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/http/response.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/json/encode.go

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

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/netretry.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/ratelimitretry.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/rewindable_body.go

Lines changed: 67 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)