Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

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 파일에는 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)를 사용합니다. director는 network-isolation.j2.yaml 파일을 network -isolation.yaml 로 렌더링합니다. openstack overcloud deploy 명령을 실행하는 경우 -e 옵션을 사용하여 렌더링된 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 옵션을 사용하여 렌더링된 network-isolation.yaml 파일의 이름을 포함합니다.

$ openstack ovecloud 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 로 렌더링 되지 않습니다. 이로 인해 배포가 실패합니다.