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-enabled 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 文件包含五个角色,并从示例中生成以下参数:

  • ControllerCount
  • ComputeCount
  • BlockStorageCount
  • ObjectStorageCount
  • CephStorageCount

参数的呈现版本示例如下:

parameters:
  ...
  ControllerCount:
    description: Number of Controller nodes to deploy
    type: number
    default: 1
  ...

director 仅从核心 heat 模板的目录中呈现 Jinja2-enabled 模板和环境文件。以下用例演示了呈现 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

运行位于 tools 目录中的 process-templates.py 脚本,以及 -o 选项来定义自定义目录来保存静态副本:

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

这会将所有 Jinja2 模板转换为其渲染的 YAML 版本,并将结果保存到 ~/openstack-tripleo-heat-templates-rendered