我正在寻找通过多个单独步骤创建堆栈的最佳方法。
我想在第一个模板中,只建立计算节点和网络配置。
在第二个模板中,我想创建存储节点并将它们附加到已经存在的计算节点。
您认为最好的方法是什么?
我正在寻找通过多个单独步骤创建堆栈的最佳方法。
我想在第一个模板中,只建立计算节点和网络配置。
在第二个模板中,我想创建存储节点并将它们附加到已经存在的计算节点。
您认为最好的方法是什么?
以下是一种可能的方法。
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) 创建第二个存储模板,使用 step1 中的计算节点 ID 作为输入参数。例如:
parameters:
mynode1_id:
type: string
description: ID for mynode1
然后您可以在“资源:”部分中使用它,如下所示:
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