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
文件包含五个角色,并生成以下示例中的以下参数:
-
ControllerCount
-
ComputeCount
-
BlockStorageCount
-
ObjectStorageCount
-
CephStorageCount
参数渲染版本示例如下:
parameters: ... ControllerCount: description: Number of Controller nodes to deploy type: number default: 1 ...
director 只会在核心 Heat 模板的 目录中呈现 Jinja2enabled 模板和环境文件。以下用例演示了呈现 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
选项包括 rendered 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
选项包括 rendered 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
。这会导致部署失败。