Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ require (
github.com/mozillazg/go-httpheader v0.4.0 // indirect
github.com/pkg/errors v0.9.1
github.com/stretchr/testify v1.8.2
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway v1.0.763
Expand All @@ -46,8 +46,8 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,8 @@ github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9
github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible h1:Qo2u4QpYzsrrTedOFmNyDIghJMsFSa/Dn3HfnTWtTfs=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible h1:gGfe9oRCYZAWxd/xm0k8NaLmEssVPPl7pEwO022Arb4=
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799 h1:u49r1bGFDY0CeAF46iotNnLtc5yplPf9XXa7W7zJ4fE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799/go.mod h1:JQa/Ess7Kkn/BuAugq0Tt5GJR7ZQAY47ypP9LjEn/DE=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api v1.0.285 h1:gFmukRGLtYiXVBVvg/5DP/0fM1+dKpwDjT+khtDVLmc=
Expand Down Expand Up @@ -933,12 +935,16 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1111/go.mod
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122 h1:jffjOBJ1ejT4ldClIIEI+QnfV5K2RubA+xNiz6uuFOU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126 h1:HHWE825wxwoEEZVB9CLgPpXOiFy6hZXJMcCjCAOckAU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053 h1:x193cxbzh+bXxxcq9NGzriW0jCxQHJd6mT79kcfUqSs=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053/go.mod h1:yM5i22uG9HKuUwwz+XvrDW9oBtZdb7avyDrMrS/FBIs=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126 h1:JdhKLXoTETh13Oe9d4yBXljwfubfCEa6HjX60PtpbRY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126/go.mod h1:DTeq5O98dERO/YvCPVrmr533PZd8OQhHmaucRe2pjnY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111 h1:Y7LLIZEQh8OAbnBWppUopu2PjPaQOO9Jzhp8LZO7adI=
Expand Down
15 changes: 15 additions & 0 deletions tencentcloud/connectivity/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
intlProfile "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/common/profile"
cvmintl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
mdl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/mdl/v20200326"
privatednsIntl "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/privatedns/v20201028"
antiddos "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos/v20200309"
Expand Down Expand Up @@ -131,6 +132,7 @@ type TencentCloudClient struct {
vpcConn *vpc.Client
cbsConn *cbs.Client
cvmv20170312Conn *cvmv20170312.Client
cvmIntlConn *cvmintl.Client
clbConn *clb.Client
dayuConn *dayu.Client
dcConn *dc.Client
Expand Down Expand Up @@ -587,6 +589,19 @@ func (me *TencentCloudClient) UseCvmClient(iacExtInfo ...IacExtInfo) *cvmv201703
return me.cvmv20170312Conn
}

// UseCvmIntlClient returns cvm intl client for service
func (me *TencentCloudClient) UseCvmIntlClient(iacExtInfo ...IacExtInfo) *cvmintl.Client {
if me.cvmIntlConn != nil {
return me.cvmIntlConn
}

cpf := me.NewClientIntlProfile(300)
me.cvmIntlConn, _ = cvmintl.NewClient(me.Credential, me.Region, cpf)
me.cvmIntlConn.WithHttpTransport(&LogRoundTripper{})

return me.cvmIntlConn
}

// UseCvmV20170312Client returns cvm client for service
func (me *TencentCloudClient) UseCvmV20170312Client(iacExtInfo ...IacExtInfo) *cvmv20170312.Client {
var logRoundTripper LogRoundTripper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

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

"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)
Expand Down
56 changes: 54 additions & 2 deletions tencentcloud/services/cvm/resource_tc_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -386,14 +386,14 @@ func ResourceTencentCloudInstance() *schema.Resource {
"user_data": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"user_data_raw"},
Description: "The user data to be injected into this instance. Must be base64 encoded and up to 16 KB.",
},
"user_data_raw": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Computed: true,
ConflictsWith: []string{"user_data"},
Description: "The user data to be injected into this instance, in plain text. Conflicts with `user_data`. Up to 16 KB after base64 encoded.",
},
Expand Down Expand Up @@ -1431,6 +1431,34 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{})
_ = d.Set("running_flag", true)
}

var instanceAttribute *cvm.InstanceAttribute
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
request := cvm.NewDescribeInstancesAttributesRequest()
request.InstanceIds = helper.Strings([]string{instanceId})
request.Attributes = helper.Strings([]string{"UserData"})
response, errRet := client.UseCvmClient().DescribeInstancesAttributes(request)
if errRet != nil {
return tccommon.RetryError(errRet, tccommon.InternalError)
}

if len(response.Response.InstanceSet) > 0 {
instanceAttribute = response.Response.InstanceSet[0]
}
return nil
})

if err != nil {
return err
}
if instanceAttribute != nil && instanceAttribute.Attributes != nil && instanceAttribute.Attributes.UserData != nil {
_ = d.Set("user_data", instanceAttribute.Attributes.UserData)
userDataRaw, e := base64.StdEncoding.DecodeString(*(instanceAttribute.Attributes.UserData))
if e != nil {
return e
}
_ = d.Set("user_data_raw", string(userDataRaw))
}

return nil
}

Expand Down Expand Up @@ -1938,6 +1966,30 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}
}
}

if d.HasChange("user_data") {
err := cvmService.ModifyUserData(ctx, instanceId, d.Get("user_data").(string))
if err != nil {
return err
}

err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false)
if err != nil {
return err
}
}
if d.HasChange("user_data_raw") {
userDataRaw := d.Get("user_data_raw").(string)
userData := base64.StdEncoding.EncodeToString([]byte(userDataRaw))
err := cvmService.ModifyUserData(ctx, instanceId, userData)
if err != nil {
return err
}

err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false)
if err != nil {
return err
}
}
d.Partial(false)

return resourceTencentCloudInstanceRead(d, meta)
Expand Down
2 changes: 1 addition & 1 deletion tencentcloud/services/cvm/resource_tc_reserved_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
cvm "github.com/tencentcloud/tencentcloud-sdk-go-intl-en/tencentcloud/cvm/v20170312"
)

func ResourceTencentCloudReservedInstance() *schema.Resource {
Expand Down
32 changes: 26 additions & 6 deletions tencentcloud/services/cvm/service_tencentcloud_cvm.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"

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

func (me *CvmService) ModifyUserData(ctx context.Context, instanceId, userData string) error {
logId := tccommon.GetLogId(ctx)
request := cvm.NewModifyInstancesAttributeRequest()
request.InstanceIds = []*string{&instanceId}
request.UserData = &userData

ratelimit.Check(request.GetAction())
response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request)
if err != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
logId, request.GetAction(), request.ToJsonString(), err.Error())
return err
}
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

return nil
}

func (me *CvmService) ModifySecurityGroups(ctx context.Context, instanceId string, securityGroups []*string) error {
logId := tccommon.GetLogId(ctx)
request := cvm.NewModifyInstancesAttributeRequest()
Expand Down Expand Up @@ -930,12 +950,12 @@ func (me *CvmService) CreateReservedInstance(ctx context.Context, configId strin
return
}

func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.ReservedInstances, errRet error) {
func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvmintl.ReservedInstances, errRet error) {
logId := tccommon.GetLogId(ctx)
request := cvm.NewDescribeReservedInstancesRequest()
request.Filters = make([]*cvm.Filter, 0, len(filters))
request := cvmintl.NewDescribeReservedInstancesRequest()
request.Filters = make([]*cvmintl.Filter, 0, len(filters))
for k, v := range filters {
filter := cvm.Filter{
filter := cvmintl.Filter{
Name: helper.String(k),
Values: []*string{helper.String(v)},
}
Expand All @@ -944,12 +964,12 @@ func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filt

var offset int64 = 0
var pageSize int64 = 100
instances = make([]*cvm.ReservedInstances, 0)
instances = make([]*cvmintl.ReservedInstances, 0)
for {
request.Offset = &offset
request.Limit = &pageSize
ratelimit.Check(request.GetAction())
response, err := me.client.UseCvmClient().DescribeReservedInstances(request)
response, err := me.client.UseCvmIntlClient().DescribeReservedInstances(request)
if err != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
logId, request.GetAction(), request.ToJsonString(), err.Error())
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading