Я могу использовать переменные в шаблоне jinja2, но я хочу использовать переменные в шаблоне jinja2 для хостов цикла.
Пример:
У меня есть переменная env
.
мой шаблон:
{% for i in groups.tag_ansible_group_{{ env }}_riak %}
test{{ loop.index }}
{% endfor %}
Пробег:
ansible-playbook -i inventory test.yml --extra-vars="env=prod"
Но я получаю эту ошибку
TASK [copy] **********************************************************************************************************
fatal: [testlab-lan]: FAILED! => {"changed": false, "msg": "AnsibleError: template error while templating string: expected token 'end of statement block', got '{'. String: {% for i in groups.tag_ansible_group_{{ env }}_riak %}\n test{{ loop.index }}\n{% endfor %}"}
to retry, use: --limit @/home/akhil/Projects/ansible-tendant/tests/test.retry
Как использовать переменную env
в спецификации хостов?
Возможно ли это?
Если нет, то как развернуть мой проект в разных средах без изменения шаблонов каждый раз?
а также , если это невозможно, тогда какой смысл использовать переменные в хостах в playbook?
Проблема
playbook.yml
- name: configure redis slaves
hosts: tag_ansible_group_{{ env }}_redis_slave
vars:
- redis_slaveof: "{% for host in groups.keys()|select('match', 'tag_ansible_group_' + env + '_redis_master')|list %} {{ hostvars[host]['ansible_default_ipv4']['address'] }} 6379 {% endfor %}"
- redis_version: 3.2.8
roles:
- redis
пробег:
ansible-playbook -i dynamic_inventories/test site.yml --extra-vars "env=test"
выход:
TASK [redis : create redis config file] ******************************************************************************
fatal: [3.17.183.147]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: u\"hostvars['tag_ansible_group_test_redis_master']\" is undefined"}
fatal: [18.223.172.101]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: u\"hostvars['tag_ansible_group_test_redis_master']\" is undefined"}