支持条件函数¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/heat/+spec/support-conditions-function
此蓝图将提供按条件创建资源的能力。
问题描述¶
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html
AWS CloudFormation 支持条件函数,它根据条件的计算结果决定创建哪些资源。条件函数非常适合模板的重用,通过条件,用户可以使用相同的模板在不同的上下文(例如测试环境与生产环境)中创建不同的资源集。
目前 Heat 还不具备此功能,用户需要许多模板才能满足他们的需求,这使得模板管理变得更加复杂。
提议的变更¶
考虑到用户习惯和与 AWS CloudFormation 的兼容性,此提案将使用与 CloudFormation 相同的风格来实现条件函数。以下是一个使用热模板的条件函数的示例
heat_template_version: 2016-04-08
parameters:
env_type:
type: string
default: 'test'
allowed_values: ['prod', 'test']
conditions: {
'for_prod': {equals: [{get_param: env_type}, 'prod']}
}
resources:
server:
type: OS::Nova::Server
properties:
image: cirros-0.3.0-x86_64-disk
flavor: m1.small
floating_ip:
type: OS::Nova::FloatingIP
condition: 'for_prod'
properties:
pool: public
floating_ip_attachment:
type: OS::Nova::FloatingIPAssociation
condition: 'for_prod'
properties:
server_id: {get_resource: server}
floating_ip: {get_resource: floating_ip}
outputs:
floating_ip:
value: {get_resource: floating_ip}
condition: 'for_prod'
如上所示的模板,只有在 ‘prod’ 环境下,我们才会创建一个浮动 IP 并将其关联到服务器,并输出浮动 IP。在 ‘test’ 环境下,我们只创建服务器。通过传递参数 ‘env_type’,我们可以有条件地为不同的上下文创建资源。
1. 为 cfn/hot 模板添加可选的 Conditions/conditions 部分。 在此部分中,我们定义条件映射,如下所示:
conditions: {
condition_name1: {Intrinsic function},
condition_name2: {Intrinsic function},
condition_name3: {Intrinsic function}
}
2. 实现相关的条件内置函数,例如 equals/not/and/or/if
equals: [value1, value2] not: [{condition}] and: [{condition1}, {condition2}, {…}] or: [{condition1}, {condition2}, {…}] if: [condition_name, value_if_true, value_if_false]
注意:详细信息请参见 aws 文档: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html
3. 为 cfn/hot 模板的 resource/outputs 部分添加可选的 Condition/condition 部分。 Condition/condition 的值应该是 ‘conditions’ 映射中定义的 condition_name。如果条件结果为 True,则将创建资源/输出,否则将忽略资源/输出。
备选方案¶
无。
实现¶
负责人¶
里程碑¶
mitaka-3
工作项¶
实现条件内置函数。
为 cfn/hot 模板添加 Conditions/conditions 映射定义。
实现使用条件有条件地创建资源。
实现使用条件有条件地给出输出。
添加相关的测试。
依赖项¶
无