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.py 스크립트를 사용합니다. process-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에 저장합니다.