Ansible — определение переменных на основе условий с помощью if elif else
У меня есть несколько ролей: haproxy, java, nginx, tomcat.
├── ansible-test-host.yml
├── hapoxy
├── java
├── myplaybook.yml
├── nginx
└── tomcat
Базовая книга игр:myplaybook.yml
и выглядит, как показано ниже:
---
- hosts: test-local
connection: local
vars:
java_version: "1.8.0"
roles:
- java
Итак, мое требование зависит от указанных ролей java/tomcat/nginx и т. д. У меня есть файл шаблона для заполнения. Скажем, моя логика заключается в следующем:
if
role == java then in template.j2 I have to set `JAVA_TOOL_OPTIONS= -Xmx10g -Xms5g`
elif
role == tomcat then in template.j2 I have to set `JAVA_OPTS= -Xmx10g -Xms5g`
else
NOTHING
endif
Мне нужно разобраться и с другими базовыми сценариями, но если я получу основу, я смогу это сделать.
То, что я пробовал в Java-роли main.yml, находится здесь.
---
# tasks file for java
- name: output the 'ansible_' magic variables
debug:
msg: [
"ansible_role_names = {{ ansible_role_names | default({}) }}",
"ansible_dependent_role_names = {{ ansible_dependent_role_names }}",
"ansible_play_role_names = {{ ansible_play_role_names | default([]) | join(',') }}"
]
- name: set facts
set_fact:
DEFAULT_VAR: >
{% if "{{ ansible_play_role_names | default([]) | join(',') }}" == "java" %}
JAVA_TOOL_OPTIONS
{% elif "{{ ansible_play_role_names | default([]) | join(',') }}" == 'tomcat' %}
CATALINA_OPTS
{% else %}
NOTHING
{% endif %}
- name: output my custom var- try1
debug:
msg: >
{% if "{{ ansible_play_role_names | default([]) | join(',') }}" == "java" %}
JAVA_TOOL_OPTIONS
{% else %}
NOTHING
{% endif %}
- name: output my custom var - echo
debug:
msg: "{{ DEFAULT_VAR }}"
Мой результат такой:
TASK [java : output the 'ansible_' magic variables] ****************************************************
ok: [127.0.0.1] => {
"msg": [
"ansible_role_names = ['java']",
"ansible_dependent_role_names = []",
"ansible_play_role_names = java"
]
}
TASK [java : set facts] ********************************************************************************
ok: [127.0.0.1]
TASK [java : output my custom var- try1] ***************************************************************
ok: [127.0.0.1] => {
"msg": " NOTHING \n"
}
TASK [java : output my custom var - echo] **************************************************************
ok: [127.0.0.1] => {
"msg": " NOTHING \n"
}
PLAY RECAP *********************************************************************************************
127.0.0.1 : ok=5 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Пожалуйста, помогите с указателями, чтобы добиться этого.