创建资源栈
功能介绍
CreateStack用于生成一个资源栈
- 当请求中不含有模板(template)、参数(vars)等信息,将生成一个无任何资源的空资源栈,返回资源栈ID(stack_id)
 - 当请求中携带了模板(template)、参数(vars)等信息,则会同时创建并部署资源栈,返回资源栈ID(stack_id)和部署ID(deployment_id)
 
URI
POST /v1/{project_id}/stacks
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        project_id  | 
      
        是  | 
      
        String  | 
      
        项目ID,可以从调用API处获取,也可以从控制台获取。 最小长度:3 最大长度:64  | 
     
请求参数
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        Client-Request-Id  | 
      
        是  | 
      
        String  | 
      
        用户指定的,对于此请求的唯一ID,用于定位某个请求,推荐使用UUID 最小长度:36 最大长度:128  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        stack_name  | 
      
        是  | 
      
        String  | 
      
        资源栈的名称。此名字在domain_id+区域+project_id下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。 最小长度:1 最大长度:128  | 
     
| 
        agencies  | 
      
        否  | 
      
        Array of Agency objects  | 
      
        委托授权的信息。 RFS仅在创建资源栈(触发部署)、创建执行计划、部署资源栈、删除资源栈等涉及资源操作的请求中使用委托,且该委托仅作用于与之绑定的Provider对资源的操作中。如果委托中提供的权限不足,有可能导致相关资源操作失败。 数组长度:0 - 10  | 
     
| 
        description  | 
      
        否  | 
      
        String  | 
      
        资源栈的描述。可用于客户识别自己的资源栈。 最小长度:0 最大长度:1024  | 
     
| 
        enable_deletion_protection  | 
      
        否  | 
      
        Boolean  | 
      
        删除保护的标识位,如果不传默认为false,即默认不开启资源栈删除保护(删除保护开启后资源栈不允许被删除) 在UpdateStack API中,如果该参数未在RequestBody中给予,则不会对资源栈的删除保护属性进行更新  | 
     
| 
        enable_auto_rollback  | 
      
        否  | 
      
        Boolean  | 
      
        自动回滚的标识位,如果不传默认为false,即默认不开启资源栈自动回滚(自动回滚开启后,如果部署失败,则会自动回滚,并返回上一个稳定状态) 在UpdateStack API中,如果该参数未在RequestBody中给予,则不会对资源栈的自动回滚属性进行更新 该属性与使用模板导入资源功能互斥,如果堆栈的自动回滚设置为true,则不允许部署包含导入资源的模板  | 
     
| 
        template_body  | 
      
        否  | 
      
        String  | 
      
        HCL模板,描述了资源的目标状态。资源编排服务将比较此模板与当前远程资源的状态之间的区别。 template_body和template_uri 必须有且只有一个存在 在CreateStack API中,template_body和template_uri可以都不给予 注意: 
 最小长度:0 最大长度:51200  | 
     
| 
        template_uri  | 
      
        否  | 
      
        String  | 
      
        HCL模板的OBS地址,该模板描述了资源的目标状态。资源编排服务将比较此模板与当前远程资源的状态之间的区别。 OBS地址支持同类型Region之间进行互相访问(Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region) 对应的文件应该是纯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可以都不给予 注意: 
 最小长度:0 最大长度:2048  | 
     
| 
        vars_body  | 
      
        否  | 
      
        String  | 
      
        HCL参数文件的内容。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。 
 最小长度:0 最大长度:51200  | 
     
| 
        vars_structure  | 
      
        否  | 
      
        Array of VarsStructure objects  | 
      
        HCL参数结构。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。 
 数组长度:0 - 100  | 
     
| 
        vars_uri  | 
      
        否  | 
      
        String  | 
      
        HCL参数文件的OBS地址。HCL模板支持参数传入,即,同一个模板可以给予不同的参数而达到不同的效果。 OBS地址支持同类型Region之间进行互相访问(Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region) 
 最小长度:0 最大长度:2048  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        provider_name  | 
      
        是  | 
      
        String  | 
      
        用户使用的provider的名字。如果用户给予的provider_name含有重复的值,则返回400 最小长度:1 最大长度:128  | 
     
| 
        agency_name  | 
      
        否  | 
      
        String  | 
      
        对应provider所使用的IAM委托名称,资源编排服务会使用此委托的权限去访问、创建对应provider的资源。agency_name和agency_urn必须有且只有一个存在 最小长度:1 最大长度:64  | 
     
| 
        agency_urn  | 
      
        否  | 
      
        String  | 
      
        委托URN 当用户定义Agency时,agency_name和agency_urn 必须有且只有一个存在。 推荐用户在使用信任委托时给予agency_urn,agency_name只支持接收普通委托名称,如果给予了信任委托名称,则会在部署模板时失败。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        var_key  | 
      
        是  | 
      
        String  | 
      
        参数的名字 最小长度:1 最大长度:32  | 
     
| 
        var_value  | 
      
        是  | 
      
        String  | 
      
        参数的值。 注意,参数需要以字符串形式存在,如果是数字,也需要以字符串形式存在,如'10'。 如果需要支持不同类型,或者复杂结构,请使用vars_uri或vars_body 最小长度:0 最大长度:2048  | 
     
| 
        encryption  | 
      
        否  | 
      
        EncryptionStructure object  | 
      
        如果用户传递的var_value是已经加密过的,可以通过声名此项以要求资源编排服务在使用前进行解密,目前暂时只支持KMS加解密  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        kms  | 
      
        是  | 
      
        KmsStructure object  | 
      
        如果用户给予的var_value是经过KMS加密的,可以通过传递相关加密信息,资源编排服务在使用的时候会帮助用户进行KMS解密 更多关于KMS加密以及KMS加密的样例代码请见:KMS加密使用场景介绍 注意: 
  | 
     
响应参数
状态码: 201
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        stack_id  | 
      
        String  | 
      
        资源栈(stack)的唯一Id。 此Id由资源编排服务在生成资源栈的时候生成,为UUID。 由于资源栈名仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的资源栈,删除,再重新创建一个同名资源栈。 对于团队并行开发,用户可能希望确保,当前我操作的资源栈就是我认为的那个,而不是其他队友删除后创建的同名资源栈。因此,使用ID就可以做到强匹配。 资源编排服务保证每次创建的资源栈所对应的ID都不相同,更新不会影响ID。如果给予的stack_id和当前资源栈的ID不一致,则返回400 最小长度:36 最大长度:36  | 
     
| 
        deployment_id  | 
      
        String  | 
      
        部署ID 接受请求,进行异步处理。可以调用GetStackMetadata来获取异步请求的部署状态 注意: 
  | 
     
状态码: 400
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
状态码: 401
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
状态码: 403
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
状态码: 409
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
状态码: 429
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
状态码: 500
| 
        参数  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|
| 
        error_code  | 
      
        String  | 
      
        响应码 最小长度:11 最大长度:11  | 
     
| 
        error_msg  | 
      
        String  | 
      
        响应消息  | 
     
| 
        encoded_authorization_message  | 
      
        String  | 
      
        包含有关未经授权请求的信息。  | 
     
请求示例
- 创建资源栈
    
POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks { "stack_name" : "my_first_stack", "description" : "my first stack" } - 使用委托创建资源栈
    
POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks { "stack_name" : "my_second_stack", "description" : "my second stack", "agencies" : [ { "provider_name" : "huaweicloud", "agency_name" : "my_agency" } ] } - 使用模板的uri创建并部署资源栈
    
POST https://{endpoint}/v1/ba2b9930c977f71edaeaa3a5e96a8ff1/stacks { "stack_name" : "my_third_stack", "template_uri" : "https://my_hello_world_bucket.{region}.myhuaweicloud.com/my-hello-world-template.tf", "description" : "my third stack" } - 使用模板内容创建并部署资源栈
    
{ "stack_name" : "my_fourth_stack", "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}", "description" : "my fourth stack" } 
响应示例
状态码: 201
创建成功
{
  "stack_id" : "ea6a4f0e-ee8a-494e-b12a-8be4a1e65af2"
}
 状态码
| 
        状态码  | 
      
        描述  | 
     
|---|---|
| 
        201  | 
      
        创建成功  | 
     
| 
        400  | 
      
        用户请求非法  | 
     
| 
        401  | 
      
        用户身份认证失败  | 
     
| 
        403  | 
      
       
  | 
     
| 
        409  | 
      
        创建冲突,同名的资源栈已经存在  | 
     
| 
        429  | 
      
        请求数量过多  | 
     
| 
        500  | 
      
        服务器内部错误  |