ValidateTemplate - 验证将要创建资源栈的模板

通过指定模板地址或模板内容验证将要创建资源栈的模板。

接口说明

该接口不涉及用户数据,只对模板进行校验,无需进行 RAM 鉴权。

本文将提供一个示例,验证将要创建资源栈的模板,包含模板主体的文件的位置TemplateURLoss://ros/template/demo

调试

您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。

授权信息

当前API暂无授权信息透出。

请求参数

名称类型必填描述示例值
TemplateURLstring

包含模板主体的文件的位置。URL 必须指向位于 HTTP Web 服务器或阿里云 OSS 存储空间(例如:oss://ros/template/demo、oss://ros/template/demo?RegionId=cn-hangzhou)中的模板,模板最大为 524,288 个字节。

说明 如果 OSS 地域未指定,默认与接口参数 RegionId 相同。

您可以指定 TemplateBody 或 TemplateURL 参数,但不能同时指定。
URL 的最大长度为:1024 个字节。

oss://ros/template/demo
RegionIdstring

资源栈模板所属的地域 ID。您可以调用 DescribeRegions 查看最新的阿里云地域列表。

cn-hangzhou
TemplateBodystring

模板主体的结构。长度为 1~524,288 个字节。
如果长度较大,建议通过 HTTP POST+Body Param 的方式,将参数放在请求体中进行传递,避免 URL 过长而导致请求失败。
您可以指定 TemplateBody 或 TemplateURL 参数,但不能同时指定。

{"ROSTemplateFormatVersion":"2015-09-01"}
ClientTokenstring

保证请求的幂等性。该值由客户端生成,并且必须是全局唯一的。

长度不超过 64 个字符,可包含英文字母、数字、短划线(-)和下划线(_)。

更多信息,请参见如何保证幂等性

123e4567-e89b-12d3-a456-42665544****
ValidationOptionstring

是否对模板开启额外校验。取值:

  • None(默认值):不开启额外校验。

  • EnableTerraformValidation:对于 Terraform 类型模板,使用 Terraform CLI 的terraform validate命令开启额外校验。

  • EnableFastTerraformValidation:对于 Terraform 类型模板,使用一种类似于 Terraform CLI 的terraform validate命令开启额外校验。

说明 EnableFastTerraformValidation 与 EnableTerraformValidation 相比速度较快,但校验完整性稍有不足。
None
UpdateInfoOptionsarray

更新信息选项列表。列表最大长度为 2。

string

更新信息选项,用于控制资源栈更新的相关信息的生成。取值:

  • Disabled:不生成资源栈更新的相关信息。

  • ConsiderCondition:生成资源栈更新的相关信息时,考虑条件的影响。建议使用该选项。否则,条件会进行计算,计算时涉及的参数的取值为参数的默认值或 null。

  • EnableReplacement:生成资源栈更新的相关信息时,考虑替换更新的影响。

ConsiderCondition

关于公共请求参数的详情,请参见公共参数

返回参数

名称类型描述示例值
object
Descriptionstring

描述此资源栈模板的相关信息。

No description
Parametersarray<object>

输入参数列表。

object

输入参数。
输入参数中,定义了通过此模板创建资源栈时需要指定的参数,这些参数用来指定每次资源栈创建的细节,例如:用户名、密码、环境相关的 ECS 规格等。

[{"Description": "", "Label": "param_integer", "NoEcho": "false", "ParameterKey": "param_integer", "Type": "Number"},{ "Description": "", "Label": "param_float", "NoEcho": "false", "ParameterKey": "param_float", "Type": "Number"}]
RequestIdstring

请求 ID。

B288A0BE-D927-4888-B0F7-B35EF84B6E6F
Outputsarray<object>

模板输出列表。

object
OutputKeystring

模板输出名称。

instance_id
Descriptionstring

模板输出描述。

The instance ID of my ECS.
Labelstring

模板输出别名。

Instance ID
ResourceTypesobject

模板中用到的资源类型信息。

Resourcesarray

普通资源类型列表(已去重)。

string

普通资源类型。

ALIYUN::ECS::InstanceGroup
DataSourcesarray

数据源资源类型列表(已去重)。

string

数据源资源类型。

DATASOURCE::VPC::Vpcs
Resourcesarray<object>

模板中定义的普通资源列表。

说明
  • 对于 ROS 模板,资源定义中包含Count字段的资源不会展开。
  • 对于 Terraform 模板,资源定义中包含countfor_each的资源不会展开。
  • object
    ResourceTypestring

    普通资源类型。

    ALIYUN::ECS::InstanceGroup
    ResourcePathstring

    普通资源路径。通常与资源名称相同。

    server
    LogicalResourceIdPatternstring

    普通资源逻辑 ID 的字符串匹配模式。

    对于 ROS 模板,存在如下两种情况:

    • 资源定义中不包含Count字段:假定模板中定义的资源名称为server,则该字段取值为server,对应的ResourcePathserver
    • 资源定义中包含Count字段:假定模板中定义的资源名称为server,则该字段取值为server[*],对应的ResourcePathserver

    对于 Terraform 模板中的资源和模块,存在如下两种情况:

    • 定义中不包含countfor_each:假定名称为server,则该字段取值为server,对应的ResourcePathserver
    • 定义中包含countfor_each:假定名称为server,则该字段取值为server[*],对应的ResourcePathserver

    Terraform 模板示例如下:

    • 顶层模块中的资源:
      • server:未使用countfor_each,对应的ResourcePathserver
      • server[*]:使用了countfor_each,对应的ResourcePathserver
    • 子模块中的资源:
      • app.serverapp模块未使用countfor_eachserver资源未使用countfor_each,对应的ResourcePathapp.server
      • app.server[*]app模块未使用countfor_eachserver资源使用了countfor_each,对应的ResourcePathapp.server
      • app[*].serverapp模块使用了countfor_eachserver资源未使用countfor_each,对应的ResourcePathapp.server
      • app[*].server[*]app模块使用了countfor_eachserver资源使用了countfor_each,对应的ResourcePathapp.server
      • app.app_group[*].serverapp模块未使用countfor_eachapp_group模块使用了countfor_eachapp_group模块是app模块的子模块),server资源未使用countfor_each,对应的ResourcePathapp.app_group.server
    server
    UpdateInfoobject

    资源栈更新的相关信息。若 UpdateInfoOptions 包含 Disabled,则不返回。

    ParametersAllowedToBeModifiedarray

    允许修改的参数的列表。

    string

    允许修改的参数。更新资源栈时,若模板保持不变,仅修改参数取值不会引发校验错误。

    param1
    ParametersCauseInterruptionIfModifiedarray

    一定会引发资源中断的参数的列表。

    说明
  • 目前仅支持少量资源类型。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    一定会引发资源中断的参数。更新资源栈时,若模板保持不变,仅修改参数取值一定会引发资源中断。

    param1
    ParametersConditionallyAllowedToBeModifiedarray

    可能允许修改的参数的列表。

    string

    可能允许修改的参数。更新资源栈时,若模板保持不变,仅修改参数取值,修改该参数是否引发校验错误,取决于参数的取值。

    param2
    ParametersConditionallyCauseInterruptionIfModifiedarray

    可能会引发资源中断的参数的列表。

    说明
  • 目前仅支持少量资源类型。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    可能会引发资源中断的参数。更新资源栈时,若模板保持不变,仅修改参数取值可能会引发资源中断,取决于参数的取值和资源的更新行为。

    param2
    ParametersNotAllowedToBeModifiedarray

    不允许修改的参数的列表。

    string

    不允许修改的参数。更新资源栈时,若模板保持不变,仅修改参数取值一定会引发校验错误。

    param3
    ParametersUncertainlyAllowedToBeModifiedarray

    不确定是否允许修改的参数的列表。

    string

    不确定是否允许修改的参数。更新资源栈时,若模板保持不变,仅修改参数取值,运行时才能确定修改该参数是否会引发校验错误。

    param4
    ParametersUncertainlyCauseInterruptionIfModifiedarray

    不确定是否会引发资源中断的参数的列表。

    说明
  • 目前仅支持少量资源类型。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    不确定是否会引发资源中断的参数。更新资源栈时,若模板保持不变,仅修改参数取值,运行时才能确定该参数是否会引发资源中断。

    param4
    ParametersCauseReplacementIfModifiedarray

    一定会引发资源替换更新的参数的列表。

    说明
  • 仅在 UpdateInfoOptions 包含 EnableReplacement 时返回。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    一定会引发资源替换更新的参数。更新资源栈时,若模板保持不变,仅修改参数取值一定会引发资源替换更新。

    param5
    ParametersConditionallyCauseReplacementIfModifiedarray

    可能会引发资源替换更新的参数的列表。

    说明
  • 仅在 UpdateInfoOptions 包含 EnableReplacement 时返回。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    可能会引发资源替换更新的参数。更新资源栈时,若模板保持不变,仅修改参数取值可能会引发资源替换更新,取决于参数的取值。

    param6
    ParametersUncertainlyCauseReplacementIfModifiedarray

    不确定是否会引发资源替换更新的参数的列表。

    说明
  • 仅在 UpdateInfoOptions 包含 EnableReplacement 时返回。
  • 仅适用于更新 ROS 类型资源栈。
  • string

    不确定是否会引发资源替换更新的参数。更新资源栈时,若模板保持不变,仅修改参数取值,运行时才能确定该参数是否会引发资源替换更新。

    param7

    示例

    正常返回示例

    JSON格式

    {
      "Description": "No description",
      "Parameters": [
        [
          {
            "Description": "",
            "Label": "param_integer",
            "NoEcho": "false",
            "ParameterKey": "param_integer",
            "Type": "Number"
          },
          {
            "Description": "",
            "Label": "param_float",
            "NoEcho": "false",
            "ParameterKey": "param_float",
            "Type": "Number"
          }
        ]
      ],
      "RequestId": "B288A0BE-D927-4888-B0F7-B35EF84B6E6F",
      "Outputs": [
        {
          "OutputKey": "instance_id",
          "Description": "The instance ID of my ECS.",
          "Label": "Instance ID"
        }
      ],
      "ResourceTypes": {
        "Resources": [
          "ALIYUN::ECS::InstanceGroup"
        ],
        "DataSources": [
          "DATASOURCE::VPC::Vpcs"
        ]
      },
      "Resources": [
        {
          "ResourceType": "ALIYUN::ECS::InstanceGroup",
          "ResourcePath": "server",
          "LogicalResourceIdPattern": "server"
        }
      ],
      "UpdateInfo": {
        "ParametersAllowedToBeModified": [
          "param1"
        ],
        "ParametersCauseInterruptionIfModified": [
          "param1"
        ],
        "ParametersConditionallyAllowedToBeModified": [
          "param2"
        ],
        "ParametersConditionallyCauseInterruptionIfModified": [
          "param2"
        ],
        "ParametersNotAllowedToBeModified": [
          "param3"
        ],
        "ParametersUncertainlyAllowedToBeModified": [
          "param4"
        ],
        "ParametersUncertainlyCauseInterruptionIfModified": [
          "param4"
        ],
        "ParametersCauseReplacementIfModified": [
          "param5"
        ],
        "ParametersConditionallyCauseReplacementIfModified": [
          "param6"
        ],
        "ParametersUncertainlyCauseReplacementIfModified": [
          "param7"
        ]
      }
    }

    错误码

    访问错误中心查看更多错误码。

    变更历史

    变更时间变更内容概要操作
    2023-07-27OpenAPI 入参发生变更、OpenAPI 返回结构发生变更查看变更详情
    2023-03-28API 内部配置变更,不影响调用查看变更详情
    错误代码错误信息HTTP 状态码描述
    InvalidTemplate{reason}.400模板不正确,reason 为具体原因。
    IInvalidParameter{reason}.400模板参数不正确,reason 为具体原因。