2.7. 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 にはレンダリング されません。この設定ではデプロイメントに失敗します。