支持条件函数

包含您的 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,则将创建资源/输出,否则将忽略资源/输出。

备选方案

无。

实现

负责人

主要负责人

huangtianhua@huawei.com

里程碑

mitaka-3

工作项

  1. 实现条件内置函数。

  2. 为 cfn/hot 模板添加 Conditions/conditions 映射定义。

  3. 实现使用条件有条件地创建资源。

  4. 实现使用条件有条件地给出输出。

  5. 添加相关的测试。

依赖项