You can call this operation to correct a template to eliminate stack drift.

Before you call this operation, you must perform a successful drift detection operation on the stack, and the stack must be in the DRIFTED state. We recommend that you set the DryRun parameter to true to preview the corrected template. If the template content meets expectations, set the DryRun parameter to false to execute the correction.

Debugging

OpenAPI Explorer automatically calculates the signature value. For your convenience, we recommend that you call this operation in OpenAPI Explorer. OpenAPI Explorer dynamically generates the sample code of the operation for different SDKs.

Request parameters

Parameter Type Required Example Description
Action String Yes UpdateStackTemplateByResources

The operation that you want to perform. Set the value to UpdateStackTemplateByResources.

RegionId String Yes cn-hangzhou

The region ID of the stack. You can call the DescribeRegions operation to query the most recent region list.

StackId String Yes 4a6c9851-3b0f-4f5f-b4ca-a14bf691****

The ID of the stack.

DryRun Boolean No false

Specifies whether to only preview the corrected template in this request. Valid values:

  • true: returns the content of the corrected template without correcting the template. After comparing the corrected template with the original template, Resource Orchestration Service (ROS) determines whether to execute the correction.
  • false: corrects the template to eliminate drift. This is the default value.
ClientToken String No 123e4567-e89b-12d3-a456-42665544****

The client token that is used to ensure the idempotence of the request. You can use the client to generate the value, but you must ensure that it is unique among different requests.

The token can be up to 64 characters in length and can contain letters, digits, hyphens (-) and underscores (_).

For more information, see How to ensure idempotence.

TemplateFormat String No JSON

The format of the returned template. Default value: JSON. Valid values:

  • JSON
  • YAML
LogicalResourceId.N RepeatList No Vpc

The logical ID of resource N, which is used to filter resources. Template correction takes effect only for resources in the list. By default, all resources that have drifted are corrected.

If the list of corrected resources contains resources in the DELETED state, ROS may adjust the resources that are not in the list but reference the deleted resources in the list to ensure the correctness of the new template.

Response parameters

Parameter Type Example Description
NewTemplateBody String See sample success responses

The template content after correction.

OldTemplateBody String See sample success responses

The template content before correction.

RequestId String B288A0BE-D927-4888-B0F7-B35EF84B6E6F

The ID of the request.

Examples

Sample requests

http(s)://ros.aliyuncs.com/? Action=UpdateStackTemplateByResources
&RegionId=cn-hangzhou
&StackId=4a6c9851-3b0f-4f5f-b4ca-a14bf691****
&<Common request parameters>

Sample success responses

XML format

<UpdateStackTemplateByResourcesResponse>
      <RequestId>B288A0BE-D927-4888-B0F7-B35EF84B6E6F</RequestId>
      <NewTemplateBody>{"ROSTemplateFormatVersion": "2015-09-01", "Resources": {"Vpc": {"Type": "ALIYUN::ECS::VPC", "Properties": {"VpcName": "test", "CidrBlock": "192.168.0.0/16", "Description": "test2"}}}, "Outputs": {"VpcId": {"Value": {"Fn::GetAtt": ["Vpc", "VpcId"]}}}}</NewTemplateBody>
      <OldTemplateBody>{"ROSTemplateFormatVersion": "2015-09-01", "Resources": {"Vpc": {"Type": "ALIYUN::ECS::VPC", "Properties": {"VpcName": "test", "CidrBlock": "192.168.0.0/16", "Description": "test1"}}}, "Outputs": {"VpcId": {"Value": {"Fn::GetAtt": ["Vpc", "VpcId"]}}}}</OldTemplateBody>
</UpdateStackTemplateByResourcesResponse>

JSON format

{
    "RequestId": "B288A0BE-D927-4888-B0F7-B35EF84B6E6F",
    "NewTemplateBody": "{\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"192.168.0.0/16\", \"Description\": \"test2\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}",
    "OldTemplateBody": "{\"ROSTemplateFormatVersion\": \"2015-09-01\", \"Resources\": {\"Vpc\": {\"Type\": \"ALIYUN::ECS::VPC\", \"Properties\": {\"VpcName\": \"test\", \"CidrBlock\": \"192.168.0.0/16\", \"Description\": \"test1\"}}}, \"Outputs\": {\"VpcId\": {\"Value\": {\"Fn::GetAtt\": [\"Vpc\", \"VpcId\"]}}}}"
}

Error codes

For a list of error codes, visit the API Error Center.

HTTP

Error code

Error message

Description

400

StackDriftDetectionNotAvailable

There is no complete drift detection for stack ({ID}).

The error message returned because no drift detection has been completed on the stack. ID indicates the stack ID.

400

StackAlreadyInSync

This is not need to correct stack drifts, stack ({ID}) is already in sync.

The error message returned because no drift exists and the template correction is not needed. ID indicates the stack ID.

400

CorrectStackDriftsFailure

{reason}

The error message returned because the stack cannot be corrected. reason indicates the specific reason.

404

StackNotFound

The Stack ({name}) could not be found.

The error message returned because the specified stack does not exist. name indicates the name or ID of the stack.

404

ResourceNotFound

The Resource ({name}) could not be found in Stack {stack}.

The error message returned because the specified resource does not exist in the specified stack. name indicates the resource name, and stack indicates the stack name or ID.