Как переменной присвоить результат команды
- name: capture output of whoami command command: whoami regisrer: login
- debug: var=login
так можно вывести значение переменной, оно будет в графе stdout
Дальнейшее использование этой переменной
- name: capture putput of id command command: id -un register: login - debug: msg="Logged in as user {{ login.stdout }}"
или
{{ login['stdout'] }}
Чтобы игнорировать ошибки при выполнении модуля
ignore_errors: True
Факты, стандартные переменные, которые не надо объявлять
Вывести все факты хоста
ansible server1 -m setup
Можно фильтровать вывод
ansible web -m setup -a "filter=andible_eth*"
Факты можно определять во время сценария:
- name: capture putput of id command command: id -un register: login - set_fact: login={{ login.stdout }} - debug: msg="Logged in as user {{ login }}"
Можно извлекать факты другого хоста, для использования в текущем, например IP адрес базы данных, для сервера apache, так мы получим значение факта ansible_eth1.ipv4.address связанного с хостом db.example.com
{{ hostvars['db.example.com'].ansible_eth1.ipv4.address }}
inventory_hostname — факт, который содержит имя хоста или псевдоним
Так можно получить все переменные хоста
- debug: var=hostvars[inventory_hostname]
groups — переменные для группы хостов, например нам надо плучить все адреса серверов из группы web для балансировщика
backend web-backend {% for host in group.web %} server {{ hostvars[host].inventory_hostname }} \ {{ hostvars[host].ansible_default_ipv4.address }}:80 {% endfor %}
результат будет такой:
backend web-backend server georgia.example.com 2.2.2.2:80 server test.example.com 3.3.3.3:80
Так можно передать переменную с наивысшим приоритетом (она заменит переменную, если она уже определена)
ansible-playbook example.yml -e token=12345 ansible-playbook greet.yml -e @greetvars.yml
В шаблоне можно использовать условия:
{% if tls_enabled %} ... {% endif %}
А так можно взять список из переменных и перечислить значения через запятую
server_name {{ domains|join(", ") }};
0 Comment