2.8. Jinja2 構文のレンダリング
/usr/share/openstack-tripleo-heat-templates
のコア Heat テンプレートには、j2.yaml
の拡張子が付いた多数のファイルが含まれています。これらのファイルには Jinja2 テンプレート構文が含まれ、director はこれらのファイルを .yaml
で終わる等価な静的 Heat テンプレートにレンダリングします。たとえば、メインの overcloud.j2.yaml
ファイルは overcloud.yaml
にレンダリングされます。director はレンダリングされた overcloud.yaml
ファイルを使用します。
Jinja2 タイプの Heat テンプレートでは、Jinja2 構文を使用して反復値のパラメーターおよびリソースを作成します。たとえば、overcloud.j2.yaml
ファイルには以下のスニペットが含まれます。
parameters: ... {% for role in roles %} ... {{role.name}}Count: description: Number of {{role.name}} nodes to deploy type: number default: {{role.CountDefault|default(0)}} ... {% endfor %}
director が Jinja2 構文をレンダリングする場合、director は roles_data.yaml
ファイルで定義されるロールを繰り返し処理し、{{role.name}}Count
パラメーターにロール名を代入します。デフォルトの roles_data.yaml
ファイルには 5 つのロールが含まれ、ここでの例からは以下のパラメーターが作成されます。
-
ControllerCount
-
ComputeCount
-
BlockStorageCount
-
ObjectStorageCount
-
CephStorageCount
レンダリング済みバージョンのパラメーターの例を以下に示します。
parameters: ... ControllerCount: description: Number of Controller nodes to deploy type: number default: 1 ...
director がレンダリングするのは、コア Heat テンプレートディレククトリー内の Jinja2 タイプのテンプレートおよび環境ファイルだけです。Jinja2 テンプレートをレンダリングする際の正しい設定方法を、以下のユースケースで説明します。
ユースケース 1: デフォルトのコアテンプレート
テンプレートのディレクトリー: /usr/share/openstack-tripleo-heat-templates/
環境ファイル: /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.j2.yaml
director はデフォルトのコアテンプレートの場所を使用します (--templates
)。director は network-isolation.j2.yaml
ファイルを network-isolation.yaml
にレンダリングします。openstack overcloud deploy
コマンドの実行時には、-e
オプションを使用してレンダリングした network-isolation.yaml
ファイルの名前を指定します。
$ openstack ovecloud deploy --templates \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml ...
ユースケース 2: カスタムコアテンプレート
テンプレートのディレクトリー: /home/stack/tripleo-heat-templates
環境ファイル: /home/stack/tripleo-heat-templates/environments/network-isolation.j2.yaml
director はカスタムコアテンプレートの場所を使用します (--templates /home/stack/tripleo-heat-templates
)。director はカスタムコアテンプレートの network-isolation.j2.yaml
ファイルを network-isolation.yaml
にレンダリングします。openstack overcloud deploy
コマンドの実行時には、-e
オプションを使用してレンダリングした network-isolation.yaml
ファイルの名前を指定します。
$ openstack ovecloud deploy --templates /home/stack/tripleo-heat-templates \ -e /home/stack/tripleo-heat-templates/environments/network-isolation.yaml ...
ユースケース 3: 誤った設定
テンプレートのディレクトリー: /usr/share/openstack-tripleo-heat-templates/
環境ファイル: /home/stack/tripleo-heat-templates/environments/network-isolation.j2.yaml
この場合、director はカスタムコアテンプレートの場所を使用します (--templates /home/stack/tripleo-heat-templates
)。しかし、選択した network-isolation.j2.yaml
はカスタムコアテンプレートに存在しないので、network-isolation.yaml
にはレンダリング されません。この設定ではデプロイメントに失敗します。