Ansible переменные

Как переменной присвоить результат команды

- 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(", ") }};

 

Ansible

Related Articles

0 Comment

Leave a Comment

Ваш адрес email не будет опубликован.