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)、network-isolation.j2.yaml ファイルを network-isolation.yaml にレンダリングします。openstack overcloud deploy コマンドの実行時には、-e オプションを使用してレンダリングした network-isolation.yaml ファイルの名前を指定します。

$ openstack overcloud 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 overcloud 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 /usr/share/openstack-tripleo-heat-templates) を使用します。しかし、選択した network-isolation.j2.yaml はカスタムコアテンプレートに存在しないので、network-isolation.yaml にはレンダリングされません。この設定ではデプロイメントに失敗します。

Jinja2 構文の静的テンプレートへの処理

process-templates.py スクリプトを使用して、openstack-tripleo-heat-templates の Jinja2 構文を静的テンプレートセットにレンダリングします。process-templates.py スクリプトで openstack-tripleo-heat-templates コレクションのコピーをレンダリングするには、openstack-tripleo-heat-templates ディレクトリーに移動します。

$ cd /usr/share/openstack-tripleo-heat-templates

静的コピーを保存するカスタムディレクトリーを定義する -o オプションを指定して、tools ディレクトリーにある process-templates.py スクリプトを実行します。

$ ./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered

これにより、すべての Jinja2 テンプレートがレンタリング済みの YAML バージョンに変換され、結果が ~/openstack-tripleo-heat-templates-rendered に保存されます。