创建执行计划
功能介绍
创建执行计划(CreateExecutionPlan)
此API用于在指定的资源栈下生成一个执行计划,执行计划描述了当前资源栈中记录的资源状态和模板描述的目的资源状态之间的区别(如,资源A将以以下配置文件生成,资源B将以下参数从XXX修改成YYY)
调用此API触发创建执行计划之后,可以通过GetExecutionPlanMetadata来跟踪执行计划的状态
当执行计划状态为AVAILABLE时,可以通过GetExecutionPlan获取本次执行计划的结果
执行计划不会做过多深层的检查和校验,如用户是否有权限生成、修改资源等
注意:
-
创建执行计划时,指定的资源栈必须存在。如果指定的资源栈不存在,则返回404,用户可通过调用创建资源栈(CreateStack)API来创建资源栈。
-
如果请求中不含有template_body和template_uri,则返回400
-
如果资源栈进行了某次部署操作,则在该次部署操作前生成的执行计划将全部失效
-
执行计划只代表生成时刻的结果,如果执行计划生成后,用户手动修改资源状态,则执行计划不会自动更新
-
如果资源栈状态处于DEPLOYMENT_IN_PROGRESS、ROLLBACK_IN_PROGRESS、DELETION_IN_PROGRESS等状态时,则不允许创建执行计划,并返回403
调试
您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。
URI
POST /v1/{project_id}/stacks/{stack_name}/execution-plans
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
project_id |
是 |
String |
项目ID,可以从调用API处获取,也可以从控制台获取。 |
stack_name |
是 |
String |
资源栈的名称。此名字在domain_id+区域+project_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 |
请求参数
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
Client-Request-Id |
是 |
String |
用户指定的,对于此请求的唯一ID,用于定位某个请求,推荐使用UUID |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
stack_id |
否 |
String |
资源栈(stack)的唯一Id。 此Id由资源编排服务在生成资源栈的时候生成,为UUID。 由于资源栈名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的资源栈,删除,再重新创建一个同名资源栈。 对于团队并行开发,用户可能希望确保,当前我操作的资源栈就是我认为的那个,而不是其他队友删除后创建的同名资源栈。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同,更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致,则返回400 |
template_body |
否 |
String |
HCL模板,描述了资源的目标状态。资源编排服务将比较此模板与当前远程资源的状态之间的区别。 template_body和template_uri 必须有且只有一个存在 在CreateStack API中,template_body和template_uri可以都不给予 注意:
|
template_uri |
否 |
String |
HCL模板的OBS地址,该模板描述了资源的目标状态。资源编排服务将比较此模板与当前远程资源的状态之间的区别。 请确保OBS地址所在局点与使用RFS服务局点一致。 对应的文件应该是纯tf文件或zip压缩包 纯tf文件需要以.tf或者.tf.json结尾,并遵守HCL语法 压缩包目前只支持zip格式,文件需要以.zip结尾。解压后的文件不得包含".tfvars"文件且必须是UTF8编码(其中.tf.json不能包含BOM头),zip压缩包当前支持的子文件数量最大为100 template_body和template_uri 必须有且只有一个存在 在CreateStack API中,template_body和template_uri可以都不给予 注意:
|
execution_plan_name |
是 |
String |
执行计划的名称。此名字在domain_id+区域+project_id+stack_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 |
description |
否 |
String |
执行计划的描述。可用于客户识别自己的执行计划。 |
vars_structure |
否 |
Array of VarsStructure objects |
HCL参数结构。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。
|
vars_body |
否 |
String |
HCL参数文件的内容。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。
|
vars_uri |
否 |
String |
HCL参数文件的OBS地址。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。 请确保OBS地址所在局点与使用RFS服务局点一致。
|
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
var_key |
是 |
String |
参数的名字 |
var_value |
是 |
String |
参数的值。 注意,参数需要以字符串形式存在,如果是数字,也需要以字符串形式存在,如'10'。 如果需要支持不同类型,或者复杂结构,请使用vars_uri或vars_body |
encryption |
否 |
EncryptionStructure object |
如果用户传递的var_value是已经加密过的,可以通过声明此项以要求资源编排服务在使用前进行解密,目前暂时只支持KMS加解密 |
参数 |
是否必选 |
参数类型 |
描述 |
---|---|---|---|
kms |
是 |
KmsStructure object |
如果用户给予的var_value是经过KMS加密的,可以通过传递相关加密信息,资源编排服务在使用的时候会帮助用户进行KMS解密 更多关于KMS加密以及KMS加密的样例代码请见:KMS加密使用场景介绍 注意:
|
响应参数
状态码: 202
参数 |
参数类型 |
描述 |
---|---|---|
execution_plan_id |
String |
执行计划(execution_plan)的唯一Id。 此Id由资源编排服务在生成执行计划的时候生成,为UUID。 由于执行计划名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的执行计划,删除,再重新创建一个同名执行计划。 对于团队并行开发,用户可能希望确保,当前我操作的执行计划就是我认为的那个,而不是其他队友删除后创建的同名执行计划。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的执行计划所对应的ID都不相同,更新不会影响ID。如果给予的execution_plan_id和当前执行计划的ID不一致,则返回400 注意:
|
状态码: 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 |
权限拒绝时服务返回的详细错误信息。 |
状态码: 409
参数 |
参数类型 |
描述 |
---|---|---|
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 |
权限拒绝时服务返回的详细错误信息。 |
请求示例
-
通过模板的uri在指定资源栈下创建执行计划
POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans { "execution_plan_name" : "my_first_execution_plan", "template_uri" : "https://my_hello_world_bucket.{region}.myhuaweicloud.com/vpc.tf" }
-
通过模板内容在指定资源栈下创建执行计划
POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks/my_hello_world_stack/execution-plans { "execution_plan_name" : "my_second_execution_plan", "template_body" : "terraform {\n required_providers {\n huaweicloud = {\n source = \"huawei.com/provider/huaweicloud\"\n version = \"1.41.0\"\n }\n }\n}\nprovider \"huaweicloud\"{\n insecure = true\n cloud = \"{cloud_name}\"\n region = \"{region}\"\n endpoints = {\n iam = \"{iam_endpoint}\",\n }\n}\n\nresource \"huaweicloud_vpc\" \"vpc\" {\n cidr = \"172.16.0.0/16\"\n name = \"my_vpc\"\n}" }
响应示例
状态码: 202
请求接受,异步处理
{ "execution_plan_id" : "fb5e781e-a27d-46e2-9954-242753857a9f" }
状态码
状态码 |
描述 |
---|---|
202 |
请求接受,异步处理 |
400 |
用户请求非法 |
401 |
用户身份认证失败 |
403 |
|
409 |
创建冲突,同名的执行计划已经存在 |
429 |
请求数量过多 |
500 |
服务器内部错误 |