2017-12-10 12 views
-2

나는 Aniable playbook을 사용하여 채워지는 system.d 서비스 스크립트 템플릿을 가지고 있습니다.In Anabilities에서는 변수 값에 따라 다른 템플릿 대체를 어떻게 사용할 수 있습니까?

템플릿 experssion

플레이 북을 실행하는 동안 environment_name Ansible 위의 변수 인 본
[Service] 
Environment="JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Denvironmentname={{environment_name | default('NOT_SET') }}" 

를 포함한다.

- name: Copy systemd service script 
    template: src=systemd.service dest="{{systemd_dir}}/{{systemd_service_name}}.service" 

내가 같은 JAVA_OPTS에 메모리 관련 매개 변수를 추가 할 : 다음 JAVA_OPTS '-Xmx = 2000MB -Xms에 추가

, environment_name = DEV 경우 플레이 북은이 명령이있다 = 1000Mb ', 환경 이름 = PROD, ,'-Xmx = 20000Mb -Xms = 10000Mb '* 등 (여러 환경이 있음)을 추가하십시오.

템플릿이나 호출 스크립트에서 이러한 대체를 어떻게 인코딩 할 수 있습니까?

답변

1

Jinja 템플릿 지시문 if을 사용할 수 있습니다. 아마 뭔가 같은 :

{% if environment_name == 'DEV' %} 
{% set extra_java_opts = "-Xmx=2000Mb -Xms=1000Mb" %} 
{% elif environment_name == 'PROD' %} 
{% set extra_java_opts = "-Xmx=20000Mb -Xms=10000Mb" %} 
{% endif %} 
Environment="JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Denvironmentname={{environment_name | default('NOT_SET') }} {{ extra_java_opts }}" 

이이 문제를 다루는 유일한 방법은 아니다 (예를 들어, 당신은 Environment= 문에 if 블록 인라인을 넣을 수 있지만, 나는이 지저분하다고 생각한다).

더 많은 정보에 대한 if/ then의 신사 문서의 control structures 섹션을 통해 읽기, 약 assignments set 지침에 대한 자세한 내용을 읽어 보시기 바랍니다.

은 아마 오히려 템플릿을 삽입보다, 내 ansible 각본이 논리를 넣어 것이라고 말했다 갖는

- set_fact: 
    extra_java_opts: "-Xmx=2000Mb -Xms=1000Mb" 
    when: environment == 'DEV' 

- set_fact: 
    extra_java_opts: "-Xmx=20000Mb -Xms=10000Mb" 
    when: environment == 'PROD' 

이 훨씬 간단 템플릿을 만들고, 오히려 한 곳에서 모든 논리를 유지 플레이 북과 템플리트 사이에서 그것을 분할하는 것보다.