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: 기본 코어 템플릿
template 디렉터리: /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
)를 사용하고 사용자 지정 코어 템플릿 내에서 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: 사용 올바르지 않음
template 디렉터리: /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
로 렌더링되지 않습니다. 이로 인해 배포가 실패합니다.
Jinja2 구문을 정적 템플릿으로 처리
openstack-tripleo
스크립트를 사용합니다. -heat-templates의 Jinja2 구문을 정적 템플릿 세트로 렌더링하려면 process-templates
.pyprocess-templates.py 스크립트를 사용하여
컬렉션 사본을 렌더링하려면 openstack-tripleo-heat-templates
openstack-tripleo-heat-templates
디렉터리로 변경합니다.
$ cd /usr/share/openstack-tripleo-heat-templates
tool 디렉터리에
있는 process-templates.py
스크립트를 -o
옵션과 함께 실행하여 정적 복사본을 저장하는 사용자 지정 디렉터리를 정의합니다.
$ ./tools/process-templates.py -o ~/openstack-tripleo-heat-templates-rendered
이렇게 하면 모든 Jinja2 템플릿을 렌더링된 YAML 버전으로 변환하고 결과를 ~/openstack-tripleo-heat-templates-rendered에
저장합니다.