获取执行计划
功能介绍
获取执行计划(GetExecutionPlan)
此API用于获取指定执行计划的详细内容(即执行计划项目),用户可通过此API得知指定执行计划在执行后,资源栈中的资源会发生何种变化
如果执行计划状态为CREATION_IN_PROGRESS或CREATION_FAILED,则不返回执行计划项目列表
URI
GET /v1/{project_id}/stacks/{stack_name}/execution-plans/{execution_plan_name}
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
project_id |
是 |
String |
项目ID,可以从调用API处获取,也可以从控制台获取。 |
stack_name |
是 |
String |
资源栈的名称。此名字在domain_id+区域+project_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 |
execution_plan_name |
是 |
String |
执行计划的名称。此名字在domain_id+区域+project_id+stack_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
stack_id |
否 |
String |
资源栈(stack)的唯一Id。 此Id由资源编排服务在生成资源栈的时候生成,为UUID。 由于资源栈名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的资源栈,删除,再重新创建一个同名资源栈。 对于团队并行开发,用户可能希望确保,当前我操作的资源栈就是我认为的那个,而不是其他队友删除后创建的同名资源栈。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同,更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致,则返回400 |
execution_plan_id |
否 |
String |
执行计划(execution_plan)的唯一Id。 此Id由资源编排服务在生成执行计划的时候生成,为UUID。 由于执行计划名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的执行计划,删除,再重新创建一个同名执行计划。 对于团队并行开发,用户可能希望确保,当前我操作的执行计划就是我认为的那个,而不是其他队友删除后创建的同名执行计划。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的执行计划所对应的ID都不相同,更新不会影响ID。如果给予的execution_plan_id和当前执行计划的ID不一致,则返回400 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
Client-Request-Id |
是 |
String |
用户指定的,对于此请求的唯一ID,用于定位某个请求,推荐使用UUID |
响应参数
状态码: 200
参数 |
参数类型 |
描述 |
---|---|---|
execution_plan_items |
Array of ExecutionPlanItem objects |
执行计划项目的列表 |
参数 |
参数类型 |
描述 |
---|---|---|
resource_type |
String |
资源的类型 以HCL格式的模板为例,resource_type 为 huaweicloud_vpc resource "huaweicloud_vpc" "my_hello_world_vpc" { name = "test_vpc" } 以json格式的模板为例,resource_type 为 huaweicloud_vpc { "resource": { "huaweicloud_vpc": { "my_hello_world_vpc": { "name": "test_vpc" } } } } |
resource_name |
String |
资源的名称,默认为资源的逻辑名称 以HCL格式的模板为例,resource_name 为 my_hello_world_vpc resource "huaweicloud_vpc" "my_hello_world_vpc" { name = "test_vpc" } 以json格式的模板为例,resource_name 为 my_hello_world_vpc { "resource": { "huaweicloud_vpc": { "my_hello_world_vpc": { "name": "test_vpc" } } } } |
index |
String |
资源的索引,如果用户在模板中使用了count或for_each则会返回index。如果index出现,则resource_name + index可以作为该资源的一种标识 如果用户在模板中使用count,则index为从0开始的数字 以HCL格式的模板为例,用户在模板中可以通过huaweicloud_vpc.my_hello_world_vpc[0]和huaweicloud_vpc.my_hello_world_vpc[1]标识两个资源 resource "huaweicloud_vpc" "my_hello_world_vpc" { count = 2 name = "test_vpc" } 以json格式的模板为例,用户在模板中可以通过huaweicloud_vpc.my_hello_world_vpc[0]和huaweicloud_vpc.my_hello_world_vpc[1]标识两个资源 { "resource": { "huaweicloud_vpc": { "my_hello_world_vpc": { "name": "test_vpc", "count": 2 } } } } 如果用户在模板中使用for_each,则index为用户自定义的字符串 以HCL格式的模板为例,用户在模板中可以通过huaweicloud_vpc.my_hello_world_vpc["vpc1"]和huaweicloud_vpc.my_hello_world_vpc["vpc2"]标识两个资源 resource "huaweicloud_vpc" "my_hello_world_vpc" { for_each = { "vpc1" = "test_vpc" "vpc2" = "test_vpc" } name = each.value } 以json格式的模板为例,用户在模板中可以通过huaweicloud_vpc.my_hello_world_vpc["vpc1"]和huaweicloud_vpc.my_hello_world_vpc["vpc2"]标识两个资源 { "resource": { "huaweicloud_vpc": { "my_hello_world_vpc": { "for_each": { "vpc1": "test_vpc", "vpc2": "test_vpc" } "name": "${each.value}" } } } } |
action |
String |
资源变更的类型
|
action_reason |
String |
触发该项目变更的原因,例如用户更新模板;远端删除资源等等 |
provider_name |
String |
该项目所属的provider名称。 |
mode |
String |
资源模式
|
drifted |
Boolean |
当前资源的变更是否由偏差导致。 偏差,也叫漂移。指的是资源被资源编排服务创建以后,又经历过非资源编排服务触发的修改,如手动修改、调用SDK修改等,使得资源的配置与本服务所记录的资源的配置不一致。这种不一致便称为偏差。 当资源产生偏差以后:
资源的偏差有两种类型:
注:资源编排服务团队极力推荐,如果资源是通过本服务创建的,请一直使用本服务进行维护和更新以确保资源和模板保持一致。建议非紧急事件以外的情况不要手动调整。 |
imported |
Boolean |
当前资源的变更是否是导入的。 |
resource_id |
String |
资源的物理id,是唯一id,由为该资源提供服务的provider、云服务或其他服务提供方在资源部署的时候生成 |
attributes |
Array of ExecutionPlanDiffAttribute objects |
执行计划项目中变更的属性,当无属性变更时为空列表。 |
参数 |
参数类型 |
描述 |
---|---|---|
name |
String |
当前资源将要被修改的参数的名字。 |
previous_value |
String |
当前资源被修改的参数的原始值。 如果是资源创建的场景,则previous_value为空 如果远端资源产生了偏差,则同一个资源会返回两个ExecutionPlanItem,其中一个的drifted为true,另一个的drifted为false
如果远端资源未产生偏差,则只会返回一个drifted为false的ExecutionPlanItem
|
target_value |
String |
当前资源被修改的参数的目的值。 如果是资源删除的场景,则target_value为空 如果远端资源产生了偏差,则同一个资源会返回两个ExecutionPlanItem,其中一个的drifted为true,另一个的drifted为false
如果远端资源未产生偏差,则只会返回一个drifted为false的ExecutionPlanItem
|
状态码: 400
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
状态码: 401
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
状态码: 403
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
状态码: 404
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
状态码: 429
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
状态码: 500
参数 |
参数类型 |
描述 |
---|---|---|
error_code |
String |
响应码 |
error_msg |
String |
响应消息 |
encoded_authorization_message |
String |
包含有关未经授权请求的信息。 |
details |
Array of Detail objects |
权限拒绝时服务返回的详细错误信息。 |
请求示例
-
获取指定执行计划的详细内容(即执行计划项目)
GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan
-
获取指定执行计划的详细内容(即执行计划项目),并提供资源栈id和执行计划id以校验是否与当前资源栈和执行计划匹配
GET https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans/my_first_execution_plan?stack_id=ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2&execution_plan_id=fb5e781e-a27d-46e2-9954-242753857a9f
响应示例
状态码: 200
获取成功
{ "execution_plan_items" : [ { "resource_type" : "huaweicloud_iec_vpc_subnet", "resource_name" : "subnet", "action" : "ADD", "attributes" : [ { "name" : "cidr", "target_value" : "172.16.0.0/16" }, { "name" : "dhcp_enable", "target_value" : "true" }, { "name" : "dns_list", "target_value" : "(will be generated after apply)" }, { "name" : "gateway_ip", "target_value" : "192.168.128.1" }, { "name" : "id", "target_value" : "(will be generated after apply)" }, { "name" : "name", "target_value" : "subnet_demo" }, { "name" : "region" }, { "name" : "site_id", "target_value" : "mock_site_id" }, { "name" : "site_info", "target_value" : "(will be generated after apply)" }, { "name" : "status", "target_value" : "(will be generated after apply)" }, { "name" : "timeouts" }, { "name" : "vpc_id", "target_value" : "mock_vpc_id" } ], "mode" : "RESOURCE", "provider_name" : "huawei.com/provider/huaweicloud" }, { "resource_type" : "huaweicloud_vpc", "resource_name" : "vpc", "action" : "ADD", "attributes" : [ { "name" : "cidr", "target_value" : "172.16.0.0/16" }, { "name" : "description" }, { "name" : "enterprise_project_id", "target_value" : "(will be generated after apply)" }, { "name" : "id", "target_value" : "(will be generated after apply)" }, { "name" : "name", "target_value" : "test_name" }, { "name" : "region", "target_value" : "(will be generated after apply)" }, { "name" : "routes", "target_value" : "(will be generated after apply)" }, { "name" : "secondary_cidr" }, { "name" : "status", "target_value" : "(will be generated after apply)" }, { "name" : "tags" }, { "name" : "timeouts" } ], "mode" : "RESOURCE", "provider_name" : "huawei.com/provider/huaweicloud" } ] }
状态码
状态码 |
描述 |
---|---|
200 |
获取成功 |
400 |
用户请求非法 |
401 |
用户身份认证失败 |
403 |
用户无权限调用此API |
404 |
|
429 |
请求数量过多 |
500 |
服务器内部错误 |