いくつかの個別のステップで、スタックを作成する最良の方法を探しています。
最初のテンプレートで、計算ノードとネットワーク構成のみを取得したいと思います。
2 番目のテンプレートでは、ストレージ ノードを作成し、既存の計算ノードに接続します。
これを行うための最良の方法は何だと思いますか?
いくつかの個別のステップで、スタックを作成する最良の方法を探しています。
最初のテンプレートで、計算ノードとネットワーク構成のみを取得したいと思います。
2 番目のテンプレートでは、ストレージ ノードを作成し、既存の計算ノードに接続します。
これを行うための最良の方法は何だと思いますか?
以下は、考えられるアプローチの 1 つです。
1) 計算ノードとネットワーク構成の最初のテンプレートを定義します。ただし、最初のテンプレートで出力を定義して、コンピューティング ノード ID を公開します。たとえば、OS::Nova::Server を mynode1 という名前で作成する場合、その ID をそのテンプレートの出力として次のように公開できます。
outputs:
mynode1_id:
description: ID of mynode1
value: {getattr: [mynode1, id]}
この最初のテンプレートを使用して、mystack1 などの Heat スタックをインスタンス化すると、次のように mynode1 の ID にアクセスできます。
heat output-show mystack1 mynode1_id
2) ステップ 1 の計算ノードの ID を入力パラメーターとして使用して、ストレージ用の 2 番目のテンプレートを作成します。例えば:
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) 次のように、2 番目のヒート スタックの作成を呼び出します。
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