CloudFormation 兼容函数¶
有许多函数可用于帮助您编写 CloudFormation 兼容的模板。虽然大多数 CloudFormation 函数在 HOT 版本 ‘2013-05-23’ 中受支持,但自 Juno 版本以来的 ‘2014-10-16’ 版本中的 HOT 模板仅支持 Fn::Select 这一 CloudFormation 函数。
除了 Ref 之外,所有这些函数都以 Fn:: 开头。
Ref¶
返回命名参数或资源的值。
参数¶
- name字符串
资源的名称或参数。
用法¶
{Ref: my_server}
返回 nova 实例 ID。例如,d8093de0-850f-4513-b202-7979de6c0d55。
Fn::Base64¶
这是一个占位符函数,用于将输入字符串转换为 Base64。Heat 中的此函数实际上不执行任何转换。它包含在 CFN 模板中,这些模板将 UserData 转换为 Base64。Heat 仅接受纯文本格式的 UserData。
参数¶
- value字符串
要转换的字符串。
用法¶
{"Fn::Base64": "convert this string please."}
返回原始输入字符串。
Fn::FindInMap¶
返回在 Mappings 部分声明的二级映射中的键对应的数值。
参数¶
- map_name字符串
Mappings 部分中声明的包含键和值的映射的逻辑名称。
- top_level_key字符串
顶级键名称。其值为键值对列表。
- second_level_key字符串
二级键名称,设置为分配给 top_level_key 列表中的键之一。
用法¶
Mapping:
MyContacts:
jone: {phone: 337, email: a@b.com}
jim: {phone: 908, email: g@b.com}
{"Fn::FindInMap": ["MyContacts", "jim", "phone" ] }
返回 908。
Fn::GetAtt¶
返回模板中资源的属性。
参数¶
- resource字符串
资源的名称。
- attribute字符串
属性的名称。
用法¶
{Fn::GetAtt: [my_server, PublicIp]}
返回 IP 地址,例如 10.0.0.2。
Fn::GetAZs¶
返回给定区域内的可用区。
注意:Heat 中 AZ 和区域尚未完全实现。
参数¶
- region字符串
区域的名称。
用法¶
{Fn::GetAZs: ""}
返回 nova availability-zone-list 提供列表。
Fn::Join¶
类似于 python join,它使用给定的分隔符连接字符串列表。
参数¶
- delimiter字符串
用于连接列表的字符串。
- list列表
要连接的列表。
用法¶
{Fn::Join: [",", ["beer", "wine", "more beer"]]}
返回 beer, wine, more beer。
Fn::Select¶
从列表中选择一个项目。
Heat 扩展:从映射中选择一个项目
参数¶
- selector字符串或整数
列表中项目的编号或映射中的项目名称。
- collection映射或列表
从中选择项目的集合。
用法¶
对于列表查找
{ "Fn::Select" : [ "2", [ "apples", "grapes", "mangoes" ] ] }
返回 mangoes。
对于映射查找
{ "Fn::Select" : [ "red", {"red": "a", "flu": "b"} ] }
返回 a。
Fn::Split¶
这是 Join 的反向操作。基于分隔符将字符串转换为列表。
参数¶
- delimiter字符串
要拆分的匹配字符串。
- string字符串
要拆分的字符串。
用法¶
{ "Fn::Split" : [ ",", "str1,str2,str3,str4"]}
返回 {["str1", "str2", "str3", "str4"]}。
Fn::Replace¶
查找并替换一个字符串为另一个字符串。
参数¶
- substitutions映射
一个替换映射。
- string: 字符串
要在其中进行替换的字符串。
用法¶
{"Fn::Replace": [
{'$var1': 'foo', '%var2%': 'bar'},
'$var1 is %var2%'
]}
返回 "foo is bar"。
Fn::ResourceFacade¶
- 在编写模板资源时
用户编写一个模板,该模板将为资源(该资源是 facade)填充内容。
当他们编写模板时,他们需要访问 facade 的元数据。
参数¶
- attribute_name字符串
是
Metadata、DeletionPolicy或UpdatePolicy中的一个。
用法¶
{'Fn::ResourceFacade': 'Metadata'}
{'Fn::ResourceFacade': 'DeletionPolicy'}
{'Fn::ResourceFacade': 'UpdatePolicy'}
示例¶
这是一个顶级模板 top.yaml
resources:
my_server:
type: OS::Nova::Server
metadata:
key: value
some: more stuff
这是一个资源模板 my_actual_server.yaml
resources:
_actual_server_:
type: OS::Nova::Server
metadata: {'Fn::ResourceFacade': Metadata}
环境变量文件 env.yaml
resource_registry:
resources:
my_server:
"OS::Nova::Server": my_actual_server.yaml
使用方法
$ openstack stack create -t top.yaml -e env.yaml mystack
发生的情况是 top.yaml 中的元数据(键:值,更多内容:更多内容)通过 Fn::ResourceFacade 函数传递到资源模板中。
Fn::MemberListToMap¶
将 AWS 风格的成员列表转换为映射。
参数¶
- 键名称:字符串
键的名称(通常为“Name”或“Key”)。
- 值名称:字符串
值的名称(通常为“Value”)。
- 列表:字符串列表
要转换的字符串。
用法¶
{'Fn::MemberListToMap': ['Name', 'Value', ['.member.0.Name=key',
'.member.0.Value=door',
'.member.1.Name=colour',
'.member.1.Value=green']]}
返回 {'key': 'door', 'colour': 'green'}。
Fn::Equals¶
比较两个值是否相等。如果两个值相等则返回 true,否则返回 false。
参数¶
- value1
要比较的任何类型的数值。
- value2
要比较的任何类型的数值。
用法¶
{'Fn::Equals': [{'Ref': 'env_type'}, 'prod']}
如果参数 ‘env_type’ 等于 ‘prod’,则返回 true,否则返回 false。
Fn::If¶
如果指定的条件评估为 true,则返回一个值;如果指定的条件评估为 false,则返回另一个值。
参数¶
- condition_name
对
Conditions部分中的条件的引用。- value_if_true
如果指定的条件评估为 true,则返回的值。
- value_if_false
如果指定的条件评估为 false,则返回的值。
用法¶
{'Fn::If': ['create_prod', 'value_true', 'value_false']}
如果条件 ‘create_prod’ 评估为 true,则返回 ‘value_true’,否则返回 ‘value_false’。
Fn::Not¶
充当 NOT 运算符。
Fn::Not 函数的语法是
{'Fn::Not': [condition]}
如果条件评估为 false,则返回 true,或者如果条件评估为 true,则返回 false。
参数¶
- condition
可以定义在此函数中的条件,例如
Fn::Equals,该条件评估为 true 或 false,我们也可以将布尔值设置为条件。
用法¶
{'Fn::Not': [{'Fn::Equals': [{'Ref': env_type'}, 'prod']}]}
如果参数 ‘env_type’ 等于 ‘prod’,则返回 false,否则返回 true。
Fn::And¶
充当 AND 运算符以评估所有指定的条件。如果所有指定的条件评估为 true,则返回 true;如果任何一个条件评估为 false,则返回 false。
参数¶
- condition
例如 Fn::Equals 的条件,评估为 true 或 false。
用法¶
{'Fn::And': [{'Fn::Equals': [{'Ref': env_type}, 'prod']},
{'Fn::Not': [{'Fn::Equals': [{'Ref': zone}, 'beijing']}]}]
如果参数 ‘env_type’ 等于 ‘prod’ 并且参数 ‘zone’ 不等于 ‘beijing’,则返回 true,否则返回 false。
Fn::Or¶
充当 OR 运算符以评估所有指定的条件。如果任何一个指定的条件评估为 true,则返回 true;如果所有条件都评估为 false,则返回 false。
参数¶
- condition
例如 Fn::Equals 的条件,评估为 true 或 false。
用法¶
{'Fn::Or': [{'Fn::Equals': [{'Ref': zone}, 'shanghai']},
{'Fn::Equals': [{'Ref': zone}, 'beijing']}]}
如果参数 ‘zone’ 等于 ‘shanghai’ 或 ‘beijing’,则返回 true,否则返回 false。