Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Условия в vars у Ansible task

- roles - consul - vars/main.yml
В main.yml использую:
consul_is_server: {{ true if consul_server is defined else false }}
playbook:
- hosts: consul-server roles: - consul vars: consul_server: true
Ошибка:
consul_is_server: {{ "true" if consul_server is defined else "false" }} ^ We could be wrong, but this one looks like it might be an issue with missing quotes. Always quote template expression brackets when they start a value. For instance:
with_items: - {{ foo }}
Should be written as:
with_items: - "{{ foo }}"
Сделал так:
consul_is_server: > {{ true if consul_server is defined and consul_server==true else false }}
Но тогда consul_is_server будет строкой: "False" или "True". И тогда в шаблонах приходится кастить в bool
"server": {{ "true" if consul_is_server |bool else "false" }}
Можно как-то в vars написать так проверку условий, чтоб потом в шаблоне кастить не пришлось?


Ответ

Используйте ternary
Документация: http://docs.ansible.com/playbooks_filters.html
Пример:
--- # https://ru.stackoverflow.com/questions/470202/
- name: https://ru.stackoverflow.com/questions/470202/ hosts: test vars: str1: "asdf1" str2: "asdf2" cond1: True cond2: False result1: "{{ cond1 | ternary(str1, str2) }}" result2: "{{ cond2 | ternary(str1, str2) }}" tasks: - name: debug result1 debug: msg="{{ result1 }}" connection: local - name: debug result2 debug: msg="{{ result2 }}" connection: local
Вывод:
$ ansible-playbook -i hosts_debug sample_ru_470202.yml
PLAY [collect info] ************************************************************
TASK [setup] ******************************************************************* ok: [myserver1]
TASK [debug result1] *********************************************************** ok: [myserver1] => { "msg": "asdf1" }
TASK [debug result2] *********************************************************** ok: [myserver1] => { "msg": "asdf2" }
PLAY RECAP ********************************************************************* myserver1 : ok=3 changed=0 unreachable=0 failed=0
PS Более сложный пример вот тут сам спросил сегодня: Составная переменная в ternary j2-шаблона ansible

Комментариев нет:

Отправить комментарий