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   

Пожалуйста, помогите с указателями, чтобы добиться этого.

0 ответов

Другие вопросы по тегам