Openstack Heat - 单独的模板

Openstack Heat - separate templates

我正在寻找通过多个独立步骤创建堆栈的最佳方法。

我想在第一个模板中只启动计算节点和网络配置。

在第二个模板中,我想创建存储节点并将它们附加到已经存在的计算节点上。

您认为最好的方法是什么?

以下是一种可能的方法。

1) 为您的计算节点和网络配置定义第一个模板。但是在您的第一个模板中定义输出以公开您的计算节点 ID。例如,如果您创建一个名为 mynode1 的 OS::Nova::Server,您可以将其 ID 公开为该模板的输出,如下所示:

outputs:
  mynode1_id:
    description: ID of mynode1
    value: {getattr: [mynode1, id]}

一旦你使用第一个模板实例化了一个热堆栈,比如 mystack1,你就可以按如下方式访问 mynode1 的 ID:

heat output-show mystack1 mynode1_id

2) 使用步骤 1 中计算节点的 ID 作为输入参数创建第二个存储模板。例如:

parameters:
  mynode1_id:
    type: string
    description: ID for mynode1

然后您可以在 "resources:" 部分中使用它,如下所示:

resources:
  ...
  ...
  my_volume_attach:
    type: OS::Cinder::VolumeAttachment
    properties:
      instance_uuid: {get_param: mynode1_id}
      ...

3) 按如下方式调用您的第二个热堆栈创建:

heat stack-create -f second-template.yaml -P mynode1_id=`heat output-show mystack1 mynode1_id` mystack2

您可能还想使用 depends_on 属性在资源之间定义 依赖关系。 从您的描述来看,使用多个模板似乎不是正确的解决方案。

例如 - 如果您希望在对象 1,2 之后创建对象 3,4,您可以按如下方式定义模板:

heat_template_version: '2015-10-15'
parameters:
   param1:
        type: string
        description: just an example of parameter
resources:
 object1:
  type: OS::Neutron::XXX
  properties:
     property: XXX
  description: object1
 object2:
  type: OS::Neutron::XXX
  properties:
     property: XXX
  description: object2
 object3:
  type: OS::Nova::XXX
  properties:
     property: XXX
  description: object3
  depends_on: object1
 object4:
  type: OS::Nova::XXX
  properties:
     property: XXX
  description: object4
  depends_on: object1