资源编排提供多个内置函数,用于管理资源栈。可在定义资源(Resources)、输出(Outputs)和映射(Mappings)时,使用内置函数。
提供的内置函数列表:
Fn::Base64Fn::FindInMapFn::GetAttFn::JoinFn::SplitFn::SelectRefFn::IfFn::EqualFn::AndFn::NotFn::Or
Fn::Base64
返回输入字符串的Base64编码结果。
- 声明
"Fn::Base64" : stringToEncode - 参数
stringToEncode:转换成Base64的字符串。
- 示例
"Fn::Base64" : "password" - 返回值
用Base64表示的原始字符串。
本例中,返回
"cGFzc3dvcmQ=",即"password"的Base64编码结果。
Fn::FindInMap
返回与
Mappings声明的双层映射中的键对应的值。- 声明
"Fn::FindInMap" : ["MapName", "TopLevelKey", "SecondLevelKey"] - 参数
MapName:Mappings 中所声明映射的 ID,包含键和值。TopLevelKey:第一级键,其值是一个键/值对列表。SecondLevelKey:第二级键,其值是一个字符串或者数字。
- 示例
"Fn::FindInMap" : ["RegionMap", "cn-shanghai", "32"] - 返回值
分配给
SecondLevelKey的值。本例中,返回
"RegionMap"中"cn-shanghai"对应的键/值对列表里,键为"32"对应的值。 - 支持的函数可在
Fn::FindInMap函数中嵌套使用以下函数:Fn::FindInMapRef
Fn::GetAtt
返回模板中的资源的属性值。
- 声明
"Fn::GetAtt": ["resourceUuid", "attributeName"] - 参数
resourceUuid:目标资源的逻辑UUID。attributeName:目标资源的属性名称。
- 示例
"Fn::GetAtt" : ["MyVMInstance", "ImageUuid"] - 返回值
属性值。
本例中,返回
resourceUuid为"MyVMInstance"的"ImageUuid"属性。
Fn::Join
将一组值连接起来,用特定分隔符隔开。
- 声明
"Fn::Join" : ["delimiter", ["string1", "string2", ...]] - 参数
delimiter:分隔符。分隔符可为空,可将所有的值直接连接起来。["string1", "string2", ...]:被连接起来的值列表示例。
- 示例
"Fn::Join" : ["-", ["a", "b", "c"]] - 返回值
被连接起来的字符串。
本例中,返回
"a-b-c" - 支持的函数可在
Fn::Join函数中嵌套使用以下函数:Fn::Base64Fn::GetAttFn::JoinFn::SelectRef
Fn::Split
通过指定分隔符对字符串进行切片,并返回所有切片组成的列表。
- 声明
"Fn::Split" : ["delimiter", "original_string"] - 参数
delimiter:分隔符,例如:,,;,\n,\t等。original_string:将要被切片的字符串。
- 示例
"Fn::Split": [";", "foo; bar; achoo"] - 返回值
切片后所有字符串组成的列表。
本例中,返回
["foo", " bar", "achoo"] - 支持的函数可在
Fn::Split函数中嵌套使用以下函数:Fn::Base64Fn::FindInMapFn::GetAttFn::JoinFn::SelectRef
Fn::Select
通过索引返回数据元列表中的单个数据元。
- 声明
- 数据元列表可为一个数组:
"Fn::Select" : ["index", ["value1", "value2", ...]] - 数据元列表可为一个映射表:
"Fn::Select" : ["index", {"key1": "value1", ...}]
- 数据元列表可为一个数组:
- 参数
index:待检索数据元的索引。- 如果数据元列表是一个数组,则索引是
0到N-1之间的某个值,其中N代表阵列中元素的数量。 - 如果数据元列表是一个映射表,则索引是映射表中的某个键。
- 如果找不到索引对应的值,则返回空字符串。
- 如果数据元列表是一个数组,则索引是
- 示例
- 示例一:数据元列表是一个数组
"Fn::Select" : ["2", ["foo", " bar", "achoo"]] - 示例二:数据元列表是一个映射表
"Fn::Select" : ["shape", {"shape": "circle", "height": "80"}] - 示例三:数据元列表是一个
CommaDelimitedList"Parameters" : { "userParam": { "Type": "CommaDelimitedList", "Default": "10.0.100.0/24, 10.0.101.0/24, 10.0.102.0/24" } }, "Resources": { "resourceUuid": { "Properties": { "CidrBlock": {"Fn::Select" : [0, {"Ref":"userParam"}]} } } }
说明:- 若
Fn::Select函数不嵌套使用函数,第一个参数为字符串,参见示例一("2")、示例二("shape"); - 若
Fn::Select函数嵌套使用函数,第一个参数为数字,参见示例三(0)。
- 示例一:数据元列表是一个数组
- 返回值选定的数据元。
- 示例一:返回
"achoo" - 示例二:返回
"circle" - 示例三:返回
"10.0.100.0/24"
- 示例一:返回
- 支持的函数
- 对于
Fn::Select索引值,可在Fn::Select函数中嵌套使用Ref函数。 - 对于对象的
Fn::Select列表,可在Fn::Select函数中嵌套使用以下函数:Fn::Base64Fn::FindInMapFn::GetAttFn::JoinFn::SelectRef
- 对于
Ref
返回指定参数或资源的值。
- 如果指定参数是
resourceUuid,则返回资源的值。 - 否则系统将认为指定参数是参数,将尝试返回参数的值。
- 声明
"Ref":"logicalName" - 参数
logicalName:要引用的资源或参数的逻辑名称。
- 示例若
diskOfferingParam被定义为:"diskOfferingParam": { "allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy", "diskSize": "21474836480", "type": "DefaultDiskOfferingType", "sorkKey": "0" }"Ref":"diskOfferingParam" - 返回值
资源的值或者参数的值。
本例中,返回diskOfferingParam的值:{ "allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy", "diskSize": "21474836480", "type": "DefaultDiskOfferingType", "sorkKey": "0" } - 支持的函数
不能在
Ref函数中嵌套使用任何函数。必须指定为资源逻辑UUID的字符串。
Fn::If
如果指定的条件计算为
true,则返回一个值;如果指定的条件计算为false,则返回另一个值。- 在模板
Resources和Outputs属性值中支持Fn::If内部函数。
- 声明
"Fn::If": ["condition_name", "value_if_true", "value_if_false"] - 参数
condition_name:Conditions中条件对应的条件名称,通过条件名称引用条件。value_if_true:当指定的条件计算为true时,返回此值。value_if_false:当指定的条件计算为false时,返回此值。
- 示例
"Fn::If": ["condition16", "vm-true", "vm-false"] - 返回值
根据指定条件计算的结果返回相应的参数值。
本例中,若
condition16的结果是true,则返回vm-true;若condition16的结果是false,则返回vm-false。 - 支持的函数可在
Fn::If函数中嵌套使用以下函数:Fn::FindInMapRefFn::EqualFn::AndFn::NotFn::Or
Fn::Equal
比较两个值是否相等。如果两个值相等,则返回
true;如果不相等,则返回false。- 声明
"Fn::Equal": [value_1, value_2] - 参数
value:要比较的任意类型的值。
- 示例
"Fn::Equal": [true, false] - 返回值
true或false。本例中,返回
false。 - 支持的函数可在
Fn::Equal函数中嵌套使用以下函数:Fn::FindInMapRefFn::EqualFn::AndFn::NotFn::Or
Fn::And
代表AND运算符,最少包含两个条件。如果所有指定条件计算为
true,则返回true;如果任意条件计算为false,则返回false。- 声明
"Fn::And": [condition, ...] - 参数
condition:计算为true或false的条件。
- 示例
"Fn::And": [true, false] - 返回值
true或false。本例中,返回
false。 - 支持的函数可在
Fn::And函数中嵌套使用以下函数:Fn::FindInMapRefFn::EqualFn::AndFn::NotFn::Or
Fn::Not
代表NOT运算符。对计算为
false的条件,返回true;对计算为true的条件,返回false。- 声明
"Fn::Not": condition - 参数
condition:计算为true或false的条件。
- 示例
"Fn::Not": true - 返回值
true或false。本例中,返回
false。 - 支持的函数可在
Fn::Not函数中嵌套使用以下函数:Fn::FindInMapRefFn::EqualFn::AndFn::NotFn::Or
Fn::Or
代表OR运算符,最少包含两个条件。如果任意一个指定条件计算为
true,则返回true;如果所有条件都计算为false,则返回false。- 声明
"Fn::Or": [condition, ...] - 参数
condition:计算为true或false的条件。
- 示例
"Fn::Or": [true, false] - 返回值
true或false。本例中,返回
true。 - 支持的函数可在
Fn::Or函数中嵌套使用以下函数:Fn::FindInMapRefFn::EqualFn::AndFn::NotFn::Or