在創建和執行模板時,使用參數(Parameters)可提高模板靈活性和可復用性。
定義參數
根據模板的需要,您可以在模板(Template)中的Parameters字段內定義參數,包括參數名、參數描述和參數類型、默認值以及校驗規則等。
參數語法
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
{
"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
}
}
}
引用參數
在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 |