当您使用ROS创建资源栈管理多种资源时,通常需要打开多个控制台查找资源参数信息。此时您可以在模板的参数配置中指定AssociationProperty以获取所选地域下对应的资源,指定AssociationPropertyMetadata对不同参数添加筛选条件,以便在控制台动态选择参数配置。

参数说明

您可以根据实际需求指定AssociationPropertyMetadata参数的取值:

  • 为参数指定特定值。例如:"RegionId": "cn-hangzhou",ROS将填入特定的地域cn-hangzhou。
  • 为参数指定变量,格式为${ParemeterKey}。例如:"VpcId": "${VpcId}",ROS将动态获取当前模板中参数VpcId对应的值。
    说明
    • 如果需要将${ParemeterKey}指定为固定值,可以增加感叹号(!)。例如:${!Literal}表示取值为${Literal}
    • 如果要在Terraform模板中使用参数变量,需要在$前增加一个$。例如:"VpcId": "$${VpcId}",ROS将动态获取Terraform模板中VpcId对应的值。

ROS支持的AssociationProperty和对应的AssociationPropertyMetadata如下表所示。

AssociationProperty取值 说明 对应的AssociationPropertyMetadata
Password 密码输入。
TextArea 富文本输入。
Json 对象输入。
CommaDelimitedList 逗号分隔的数组。
Code 代码输入。
FileContent 从本地文件读取内容。 AcceptFileSuffixes:接受上传的文件类型。
Cron Cron表达式。
ChargeType 计费方式。
Auto ROS会基于Terraform原始数据结构,自动生成AssociationProperty和AssociationPropertyMetadata等字段。
说明 仅对Terraform类型模板的Json类型参数生效。
Overwrite:补充或覆盖内层嵌套参数的定义。

该参数可选,为字典类型,组成部分如下:

  • 内层嵌套参数的路径。路径规则如下:

    • 若要表示list或set中的元素,添加*
    • 若要表示object中的某一项,添加该项的名称。
    • 路径使用.分隔。
    • 开头和中间的*可以省略。结尾的一个或多个*不能省略。

    示例如下:

    // name的路径为name。
    // address的路径为address。
    variable "user_information" {
      type = object({
        name    = string
        address = string
      })
    }
    
    // region_ids中元素的路径为*。
    variable "region_ids" {
      type    = list(string)
    }
    
    // internal的路径为*.internal,可简写为internal。
    // external的路径为*.external,可简写为external。
    // protocol的路径为*.protocol,可简写为protocol。
    variable "docker_ports" {
      type = list(object({
        internal = number
        external = number
        protocol = string
      }))
    }
    
    // b的路径为 *.b,可简写为b。
    // b中元素的路径为*.b.*,可简写为b.*
    // c的路径为*.c,可简写为c。
    // d的路径为*.c.*.d,可简写为c.d。
    // d中元素的路径为*.c.*.d.*,可简写为c.d.*。
    // e的路径为*.e,可简写为e。
    // e中元素的路径为*.e.*,可简写为e.*。
    // e中元素的路径为*.e.*.*,可简写为e.*.*(必须保留两个*)。
    // f的路径为*.f,可简写为f。
    // g的路径为*.f.*.*.g,可简写为f.g。
    // g中元素的路径为*.f.*.*.g.*,可简写为f.g.*。
    variable "complex_type_demo" {
      type = list(object({
        b = list(string)
        c = list(object({
          d = list(string)
        }))
        e = list(list(string))
        f = list(list(object({
          g = list(string)
        })))
      }))
    }
  • 参数定义的补充。更多信息,请参见概览

List[Parameter] 参数列表。使用缩进排布。

仅对Json类型参数生效。

Parameter:参数定义。

更多信息,请参见概览

示例如下:

  • 示例代码

    {
      "ROSTemplateFormatVersion": "2015-09-01",
      "Parameters": {
        "RegionIds": {
          "Label": {
            "en": "ECS Region Ids",
            "zh-cn": "ECS地域列表"
          },
          "MaxLength": 100,
          "MinLength": 1,
          "Type": "Json",
          "AssociationProperty": "List[Parameter]",
          "AssociationPropertyMetadata": {
            "Parameter": {
              "Type": "String",
              "AssociationProperty": "ALIYUN::ECS::RegionId",
              "MinLength": 1,
              "MaxLength": 64
            }
          }
        }
      }
    }
  • 示例说明

    示例中指定AssociationProperty为List[Parameter]、AssociationPropertyMetadata为Parameter,来实现多个ECS地域ID在控制台缩进排布的效果。

使用缩进排布。

仅对Json类型参数生效。

  • Parameters:字典类型,可选,表示一组参数定义。
    • 键:参数名。
    • 值:参数定义。更多信息,请参见概览

    示例如下:

    • 示例代码

      {
        "ROSTemplateFormatVersion": "2015-09-01",
        "Parameters": {
          "RenameECS": {
            "Label": {
              "en": "Rename ECS",
              "zh-cn": "重命名ECS"
            },
            "MaxLength": 100,
            "MinLength": 1,
            "Type": "Json",
            "AssociationPropertyMetadata": {
              "Parameters": {
                "InstanceId": {
                  "Type": "String",
                  "Label": {
                    "en": "ECS Instance Id",
                    "zh-cn": "ECS实例ID"
                  },
                  "AssociationProperty": "ALIYUN::ECS::Instance::InstanceId",
                  "MinLength": 1,
                  "MaxLength": 64
                },
                "Name": {
                  "Type": "String",
                  "Label": {
                    "en": "New Name",
                    "zh-cn": "新名称"
                  },
                  "MinLength": 1
                }
              }
            }
          }
        }
      }
    • 示例说明

      示例中不指定AssociationProperty,仅指定AssociationPropertyMetadata为Parameters,来实单个ECS实例ID在控制台缩进排布的效果。

  • Metadata:字典类型,可选。更多信息,请参见元数据(Metadata)
说明 结合List[Parameter]可以实现嵌套结构,且对于嵌套深度没有限制。
List[Parameters] 参数组列表。使用表格排布。

仅对Json类型参数生效。

  • Parameters:字典类型,必选,表示一组参数定义。
    • 键:参数名。
    • 值:参数定义。更多信息,请参见概览
      说明 由于使用表格排布,建议使用简单类型参数,不建议进行嵌套。

    示例如下:

    • 示例代码

      {
        "ROSTemplateFormatVersion": "2015-09-01",
        "Parameters": {
          "RenameECS": {
            "Label": {
              "en": "Rename ECS",
              "zh-cn": "重命名ECS"
            },
            "MaxLength": 100,
            "MinLength": 1,
            "Type": "Json",
            "AssociationProperty": "List[Parameters]",
            "AssociationPropertyMetadata": {
              "Parameters": {
                "InstanceId": {
                  "Type": "String",
                  "Label": {
                    "en": "ECS Instance Id",
                    "zh-cn": "ECS实例ID"
                  },
                  "AssociationProperty": "ALIYUN::ECS::Instance::InstanceId",
                  "MinLength": 1,
                  "MaxLength": 64
                },
                "Name": {
                  "Type": "String",
                  "Label": {
                    "en": "New Name",
                    "zh-cn": "新名称"
                  },
                  "MinLength": 1
                }
              }
            }
          }
        }
      }
    • 示例说明

      示例中指定AssociationProperty为List[Parameters]、AssociationPropertyMetadata为Parameters,来实现多个ECS实例ID在控制台表格排布的效果。

  • ListMetadata:字典类型,可选,用于控制表格显示。
    • ShowHeader:bool类型,表示是否显示表头。默认值:true。
    • ShowRemove:bool类型,表示是否显示移除按钮。默认值:true。
    • ShowAddition:bool类型,表示是否新增按钮。默认值:true。
    • Order:字符串列表,表示表格从左到右每列对应的参数。默认所有参数按字母序排列显示。
ALIYUN::ECS::RegionId 地域ID。
ALIYUN::ECS::ZoneId 可用区ID。
  • RegionId:地域ID。
  • ShowRandom:展示随机分配选项。
ALIYUN::ECS::Instance::InstanceId ECS实例ID。 RegionId:地域ID。
ALIYUN::RDS::Instance::InstanceId RDS实例ID。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
ALIYUN::ECS::Disk::DataDiskCategory 数据盘类型。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • InstanceType:实例类型。
ALIYUN::ECS::Disk::SystemDiskCategory 系统盘类型。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • InstanceType:实例类型。
ALIYUN::ECS::Instance::ImageId 镜像ID。 RegionId:地域ID。
ALIYUN::ECS::VPC::VPCId 专有网络ID。 RegionId:地域ID。
ALIYUN::ECS::VSwitch 交换机。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • VpcId:专有网络ID。
ALIYUN::ECS::VSwitch::VSwitchId 交换机ID。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • VpcId:专有网络ID。
ALIYUN::ECS::Instance::InstanceType ECS实例规格。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • InstanceChargeType:实例付费类型。
  • SpotStrategy:按量付费实例的竞价策略。
ALIYUN::ECS::SecurityGroup::SecurityGroupId 安全组ID。
  • RegionId:地域ID。
  • VpcId:专有网络ID。
ALIYUN::ECS::KeyPair::KeyPairName 密钥对。 RegionId:地域ID。
ALIYUN::ECS::Snapshot::AutoSnapshotPolicyId 自动快照策略。 RegionId:地域ID。
ALIYUN::RDS::Instance::InstanceType RDS实例规格。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • InstanceChargeType:实例付费类型。
  • Category:实例系列。
  • Engine:数据库类型。
  • EngineVersion:数据库版本号。
  • DBInstanceClass:实例规格。
  • OrderType:订单类型。
  • DBInstanceStorageType:实例存储类型。
  • DispenseMode:分配模式。
ALIYUN::SLB::Instance::InstanceType SLB实例规格。
  • RegionId:地域ID。
  • ZoneId:可用区ID。
  • InstanceChargeType:实例付费类型。
  • SpotStrategy:按量付费实例的竞价策略。
ALIYUN::SLB::Certificate SLB证书。
ALIYUN::OOS::Template::TemplateName OOS模板。 RegionId:地域ID。
ALIYUN::OOS::Template::TemplateVersion OOS模板版本。
  • RegionId:地域ID。
  • TemplateName:模板名称。
ALIYUN::OOS::Parameter::Value OOS普通参数。 RegionId:地域ID。
ALIYUN::OOS::SecretParameter::Value OOS加密参数。 RegionId:地域ID。
ALIYUN::OOS::Package::PackageName OOS软件包。 RegionId:地域ID。
ALIYUN::OOS::Package::PackageVersion OOS软件包版本。
  • RegionId:地域ID。
  • TemplateName:模板名称。
ALIYUN::VPC::VirtualBorderRouter::RouteTableId 边界路由器(VBR)。 RegionId:地域ID。
ALIYUN::ESS::ScalingConfiguration::ScalingConfigurationId 弹性伸缩配置。 RegionId:地域ID。
ALIYUN::RAM::User RAM用户。 RegionId:地域ID。
ALIYUN::RAM::Role RAM角色。 RegionId:地域ID。

示例1:AssociationProperty示例

在参数中指定AssociationProperty取值为ALIYUN::ECS::Instance::ImageId,以获取所选地域下所有的镜像ID。

"Parameters": {
  "UserName": {
    "Label": "用户名",
    "Description": "请输入用户名",
    "Default": "anonymous",
    "Type": "String",
    "MinLength": "6",
    "MaxLength": "12",
    "AllowedValues": [
      "anonymous",
      "user-one",
      "user-two"
    ]
  },
  "PassWord": {
    "Label": "密码",
    "NoEcho": "True",
    "Description": "请输入用户密码",
    "Type": "String",
    "MinLength": "1",
    "MaxLength": "41",
    "AllowedPattern": "[a-zA-Z0-9]*"
  },
  "ImageId": {
    "Label": "镜像",
    "Type": "String",
    "Description": "请选择镜像",
    "AssociationProperty": "ALIYUN::ECS::Instance::ImageId",
    "Default": "centos_7_7_x64_20G_alibase_2020****.vhd"
  }
}

参数说明:

  • UserName:用户名。String类型,长度为6~12个字符,取值:
    • anonymous(默认值)
    • user-one
    • user-two
  • PassWord:密码。String类型,无默认值。长度为1~41个字符,支持大写英文字母、小写英文字母和数字。

    NoEcho取值为true,表示查询资源栈时将不会返回参数值。

  • ImageId:镜像ID。String类型。

    AssociationProperty取值为ALIYUN::ECS::Instance::ImageId,创建资源栈时ROS控制台将会验证参数指定的镜像ID是否可用,并以下拉框的方式列出所选地域的其他镜像ID取值。

示例2:AssociationPropertyMetadata示例

在参数中指定AssociationProperty和对应的AssociationPropertyMetadata(RegionId、VpcId和ZoneId),以便获取指定专有网络和可用区的交换机。其中,RegionId取值为固定值cn-hangzhou;VpcId和ZoneId取值为变量${VpcId}和${EcsZone},将根据ALIYUN::ECS::VPC::VPCId和ALIYUN::ECS::Instance::ZoneId选定的取值进行动态刷新,从而建立交换机与专有网络和可用区的关联关系。

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Parameters": {
    "VpcId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VPC::VPCId"
    },
    "EcsZone": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::Instance::ZoneId"
    },
    "VSwitchId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
      "AssociationPropertyMetadata": {
           "RegionId": "cn-hangzhou",
           "VpcId": "${VpcId}",
           "ZoneId": "${EcsZone}"
      }
    }
  }
}

示例3:Terraform自动转换示例

当AssociationProperty取值为Auto时,ROS会基于Terraform原始数据结构,自动生成AssociationProperty和AssociationPropertyMetadata等字段。

  • 完整模板示例代码

    variable "user_information" {
      type = object({
        name    = string
        address = string
      })
      description = <<EOT
      {
        "AssociationProperty": "Auto",
        "AssociationPropertyMetadata": {
          "Overwrite": {
            "name": {
              "Label": {
                "zh-cn": "姓名",
                "en": "Name"
              }
            }
          }
        }
      }
      EOT
    }
    
    variable "region_ids" {
      type    = list(string)
      description = <<EOT
      {
        "AssociationProperty": "Auto",
        "AssociationPropertyMetadata": {
          "Overwrite": {
            "*": {
              "AssociationProperty": "ALIYUN::ECS::RegionId"
            }
          }
        }
      }
      EOT
    }
    
    variable "docker_ports" {
      type = list(object({
        internal = number
        external = number
        protocol = string
      }))
      description = <<EOT
      {
        "AssociationProperty": "Auto",
        "AssociationPropertyMetadata": {
          "Overwrite": {
            "protocol": {
              "AllowedValues": ["TCP", "UDP", "ICMP"]
            },
            "internal": {
              "Label": {
                "zh-cn": "内部端口",
                "en": "Internal Port"
              }
            }
          }
        }
      }
      EOT
    }
    
    variable "complex_type_demo" {
      type = list(object({
        b = list(string)
        c = list(object({
          d = list(string)
        }))
        e = list(list(string))
        f = list(list(object({
          g = list(string)
        })))
      }))
      description = <<EOT
      {
        "AssociationProperty": "Auto",
        "AssociationPropertyMetadata": {
            "Overwrite": {
                "b": {
                    "MaxLength": 3,
                    "AssociationPropertyMetadata": {
                        "Something": "123"
                    },
                    "Label": {
                        "zh-cn": "B",
                        "en": "B"
                    }
                },
                "b.*": {
                    "AssociationProperty": "ALIYUN::ECS::RegionId"
                },
                "c": {
                    "Label": {
                        "zh-cn": "C",
                        "en": "C"
                    }
                },
                "c.d": {
                    "Label": {
                        "zh-cn": "C/D",
                        "en": "C/D"
                    }
                },
                "c.d.*": {
                    "AssociationProperty": "ALIYUN::ECS::RegionId"
                },
                "e": {
                    "Label": {
                        "zh-cn": "E",
                        "en": "E"
                    }
                },
                "e.*": {
                    "MaxLength": 3
                },
                "e.*.*": {
                    "AssociationProperty": "ALIYUN::ECS::RegionId"
                },
                "f.g": {
                    "Label": {
                        "zh-cn": "F/G",
                        "en": "F/G"
                    }
                },
                "f.g.*": {
                    "AssociationProperty": "ALIYUN::ECS::RegionId"
                }
            }
        }
      }
      EOT
    }
  • 参数user_information转换后模板示例代码

    {
      "AssociationPropertyMetadata":{
        "Parameters":{
          "address":{
            "Type":"String"
          },
          "name":{
            "Type":"String",
            "Label":{
              "en":"Name",
              "zh-cn":"姓名"
            }
          }
        }
      }
    }
  • 参数region_ids转换后模板示例代码

    {
      "AssociationPropertyMetadata":{
        "Parameter":{
          "AssociationProperty":"ALIYUN::ECS::RegionId",
          "Type":"String"
        }
      },
      "AssociationProperty":"List[Parameter]"
    }
  • 参数docker_ports转换后模板示例代码

    {
      "AssociationPropertyMetadata":{
        "Parameters":{
          "internal":{
            "Type":"Number",
            "Label":{
              "en":"Internal Port",
              "zh-cn":"内部端口"
            }
          },
          "protocol":{
            "Type":"String",
            "AllowedValues":[
              "TCP",
              "UDP",
              "ICMP"
            ]
          },
          "external":{
            "Type":"Number"
          }
        }
      },
      "AssociationProperty":"List[Parameters]"
    }
  • 参数complex_type_demo转换后模板示例代码

    {
      "AssociationPropertyMetadata":{
        "Parameter":{
          "AssociationPropertyMetadata":{
            "Parameters":{
              "b":{
                "AssociationPropertyMetadata":{
                  "Parameter":{
                    "AssociationProperty":"ALIYUN::ECS::RegionId",
                    "Type":"String"
                  },
                  "Something":"123"
                },
                "AssociationProperty":"List[Parameter]",
                "Type":"Json",
                "Label":{
                  "en":"B",
                  "zh-cn":"B"
                },
                "MaxLength":3
              },
              "c":{
                "AssociationPropertyMetadata":{
                  "Parameter":{
                    "AssociationPropertyMetadata":{
                      "Parameters":{
                        "d":{
                          "AssociationPropertyMetadata":{
                            "Parameter":{
                              "AssociationProperty":"ALIYUN::ECS::RegionId",
                              "Type":"String"
                            }
                          },
                          "AssociationProperty":"List[Parameter]",
                          "Type":"Json",
                          "Label":{
                            "en":"C/D",
                            "zh-cn":"C/D"
                          }
                        }
                      }
                    },
                    "Type":"Json"
                  }
                },
                "AssociationProperty":"List[Parameter]",
                "Type":"Json",
                "Label":{
                  "en":"C",
                  "zh-cn":"C"
                }
              },
              "e":{
                "AssociationPropertyMetadata":{
                  "Parameter":{
                    "AssociationPropertyMetadata":{
                      "Parameter":{
                        "AssociationProperty":"ALIYUN::ECS::RegionId",
                        "Type":"String"
                      }
                    },
                    "AssociationProperty":"List[Parameter]",
                    "Type":"Json",
                    "MaxLength":3
                  }
                },
                "AssociationProperty":"List[Parameter]",
                "Type":"Json",
                "Label":{
                  "en":"E",
                  "zh-cn":"E"
                }
              },
              "f":{
                "AssociationPropertyMetadata":{
                  "Parameter":{
                    "AssociationPropertyMetadata":{
                      "Parameter":{
                        "AssociationPropertyMetadata":{
                          "Parameters":{
                            "g":{
                              "AssociationPropertyMetadata":{
                                "Parameter":{
                                  "AssociationProperty":"ALIYUN::ECS::RegionId",
                                  "Type":"String"
                                }
                              },
                              "AssociationProperty":"List[Parameter]",
                              "Type":"Json",
                              "Label":{
                                "en":"F/G",
                                "zh-cn":"F/G"
                              }
                            }
                          }
                        },
                        "Type":"Json"
                      }
                    },
                    "AssociationProperty":"List[Parameter]",
                    "Type":"Json"
                  }
                },
                "AssociationProperty":"List[Parameter]",
                "Type":"Json"
              }
            }
          },
          "Type":"Json"
        }
      },
      "AssociationProperty":"List[Parameter]"
    }

更多示例

您也可以使用AssociationProperty和AssociationPropertyMetadata,实现以下诉求: