概览
在创建和执行模板时,使用参数(Parameters)可提高模板灵活性和可复用性。
定义参数
根据模板的需要,您可以在模板(Template)中的Parameters字段内定义参数,包括参数名、参数描述和参数类型、默认值以及校验规则等。
参数语法
YAML格式
Parameters:
parameter-name-1: # 参数名,有效字符为[a-zA-Z0-9\_-],不允许有空格。建议采用首字母小写的骆驼式风格,如instanceId。
Type: String # 可选,类型,支持List, Number, String, Boolean, Json。默认: String
Description: description # 可选,描述,描述参数的用途
AssociationProperty: DateTime # 可选,此处可以指定某些类型参数的属性,效果是会更便于您创建执行时设置参数。一旦对参数指定了某属性, 当创建执行设置参数时,控制台中该参数输入框将不再是一个简单的参数框,而会变为更易于输入参数的展示形式,比如变为一个下拉框,下拉框中包含参数的可选项,或者变为可选择时间的tab或者代码编辑框等。假如该参数目的是想获得一个InstanceType,则可以指定属性为ALIYUN::ECS::Instance::InstanceType,那么设置参数parameter-name-1时,输入该参数的位置则会展示一个下拉框,下拉框包含所有可选择的InstanceType;如果该参数目的是想获得几行的shell,那么一个小小的参数输入框可能不太便于您输入shell,此时则可以指定属性为Code,当设置参数时,该参数的位置将是一个代码编辑框。当前支持的属性包括ALIYUN::ECS::Instance::InstanceType、ALIYUN::ECS::SecurityGroup::SecurityGroupId、ALIYUN::VPC::VSwitch::VSwitchId、ALIYUN::ECS::Image::ImageId、Targets、RateControl、Code、DateTime、Cron、TimeZone ;当然如果您指定属性同时想细粒度定义属性也是可以的,通过如下AssociationPropertyMetadata关键字既可实现,比如属性指定为DateTime,那么您可通过在AssociationPropertyMetadata关键字中定义时间日期格式,来确定您最终设置该参数的展示形式。
AssociationPropertyMetadata:
Format: 'YYYY-MM-DDThh:mm:ssZ' # 对AssociationProperty展示属性的形式进行具体定义,定义该关键字后,参数parameter-name-1的展示形式将是经筛选后符合AssociationPropertyMetadata定义的形式,比如经Format: 'YYYY-MM-DDThh:mm:ssZ'进一步定义后,时间tab将是可选日期+时间的形式进行展示;若本关键字值为Format: hh:mm:ssZ,那么时间tab则将只是可选时间的形式展示。
Default: default-value # 可选,默认值,参数的默认值
AllowedValues: # 可选,包含参数允许值的列表。
- value1
- value2
AllowedPattern: regular-expression # 可选,参数的值必须匹配的正则表达式,适用于String
MinLength: 1 # 可选,参数值的最小长度(即参数值长度 = MinLength),适用于String
MaxLength: 10 # 可选,参数值的最大长度(即参数值长度 = MaxLength),适用于String
JSON格式(请参考YAML注释说明)
{
"Parameters": {
"parameter-name-1": {
"Type": "String",
"Description": "description",
"AssociationProperty": "DateTime",
"AssociationPropertyMetadata": {
"Format": "YYYY-MM-DDThh:mm:ssZ"
},
"Default": "default-value",
"AllowedValues": [
"value1",
"value2"
],
"AllowedPattern": "regular-expression",
"MinLength": 1,
"MaxLength": 10
}
}
}
AssociationProperty属性支持情况:
可联想的属性类型 | 表达式 | 兼容的参数Type | AssociationPropertyMetadata的定义 | 备注 |
ECS实例规格 | ALIYUN::ECS::Instance::InstanceType | String | 无 | 参数值如ecs.g5.large |
安全组ID | ALIYUN::ECS::SecurityGroup::SecurityGroupId | String | 无 | 参数值如sg-bp123457asa**** |
交换机ID | ALIYUN::VPC::VSwitch::VSwitchId | String | { "Filters": [ { "SecurityGroupId": "securityGroupId" }]}表示筛选出该安全组ID所属VPC下的交换机ID,默认不筛选,范围是创建执行所在region所有交换机ID。 | 参数值如vsw-abc213454124**** |
镜像 | ALIYUN::ECS::Image::ImageId | String | 无 | 参数值如m-bp123546z****或centos_7_04_64_20G_alibase_201701015.vhd |
目标资源 | Targets | Json | { "ResourceType": "ALIYUN::ECS::Instance", "RegionId": "regionId" }其中regionid是与本参数同级别定义在Parameters内的参数名。{ "ResourceType": "ALIYUN::ECS::Instance" }本种形式未定义RegionId,RegionId默认为创建执行所在的地域。默认定义为{ "ResourceType": "ALIYUN::ECS::Instance" } | 若手动选择实例则参数值如{"Type":"ResourceIds","ResourceIds":["i-bpzxvbb****","i-bpzx1234****"]}。若指定实例的标签则参数值如{"Type":"Tags","Tags":[{"Key":"oos","Value":"debug"}]} |
并发率及最大错误数 | RateControl | Json | 无 | 参数值如{"Mode":"Concurrency","MaxErrors":0,"Concurrency":10} |
代码 | Code | String | {"language": "Shell"},默认为{"language": "Shell"} | 当定义{"language": "Shell"}时参数值如df -h |
日期时间 | DateTime | String | {"Format": "hh:mm:ssZ"} {"Format":"YYYY-MM-DDThh:mm:ssZ"}默认为 {"Format":"YYYY-MM-DDThh:mm:ssZ"} | 当定义{"Format":"YYYY-MM-DDThh:mm:ssZ"}时参数值如"2020-02-07T10:05:50Z",当定义{"Format": "hh:mm:ssZ"} 时参数值如"10:13:36Z" |
Cron计划任务 | Cron | String | 无 | 参数值如"0 * * 10 * ?" |
时区 | TimeZone | String | 无 | 参数值如Asia/Shanghai |
RAM子用户名称 | ALIYUN::RAM::User | String、List | 无 | 参数值如xiaoli |
地域 | RegionId | String | 无 | 参数值如cn-hangzhou |
ECS实例可用区 | ALIYUN::ECS::Instance::ZoneId | String | 无 | 创建执行地域下的ECS实例的可用区,参数值如cn-hangzhou-i |
标签 | Tags | Json | 无 | 参数值如[{"Key":"oos","Value":"debug"},{"Key":"oos","Value":"test"}] |
模板名称 | TemplateName | String | 无 | 当选择我的模板时参数值如TestCreatemplate,当选择公共模板时参数值如ACS-ECS-UpdateImage |
模板参数 | TemplateParameter | Json | {"TemplateName": "$templateName"}其中templateName是与本参数同级别定义Parameters内的参数名,表示我的模板或者公共模板名称 | 假设模板名称为ACS-ECS-BulkyStartInstances时,则参数值如{ "regionId": "cn-hangzhou", "rateControl": { "MaxErrors": 0, "Concurrency": 10, "Mode": "Concurrency" }, "targets": { "Type": "Tags", "Tags": [ { "Value": "debug", "Key": "oos" } ] } } |
引用参数
在Tasks字段的属性内您可以引用上述定义的参数。引用的语法如下:
"some text {{ parameter_name }} some text {{parameter_name_2}} ..."
举例如下:
注意,因为YAML的语法特点,引用参数时,需要在英文半角的双引内进行。
"{{ parameter-name }}" # 直接引用
"this is the {{ parameter-name }}" # 在一个固定的字符串中引用
"hello {{ parameter-last-name }} {{ parameter-first-name }}" # 在一个固定的字符串中引用多个参数
伪参数
为了方便获取执行中的执行环境等信息,OOS提供了伪参数,这些参数您无需定义即可直接使用。目前支持的伪参数如下,如您需要更多的伪参数,请开工单联系我们并提供您的使用场景,我们将尽快反馈和支持。
名称 | 类型 | 用途 | 示例 |
ACS::TemplateName | String | 执行使用的模板名称 | test |
ACS::ExecutionId | String | 执行ID | exec-2123445567 |
ACS::RegionId | String | 执行所在地域 | cn-hangzhou |
ACS::AccountId | String | 执行所在的账号 | 1234567890**** |
ACS::TaskLoopItem | String | 代表Loop的items中被迭代的元素 | i-bpzxcvb1234**** |
ACS::OOSUtilVersion | String | OOS代理版本 | 1.01 |
ACS::CurrentDate | String | 当前UTC日期 | 2020-12-29T |
ACS::CurrentUTCTime | String | 当前UTC时间 | 2020-12-29T10:00:30Z |
ACS::ExecuteUser | String | 触发执行的RAM用户名称 | zhangsan |
ACS::ExecuteUserType | String | 触发执行的RAM类型 | RamRole或RamUser或AlibabaCloudAccount |