При выполнении Playbook мы можем засылать данные, которые будут иметь наивысший статус при выполнении. Для чего это нужно читаем дальше.
Поправим наш файл hosts:
[PROD] debi ansible_host=192.168.0.10 owner=ServerProd_N133 [STAGING] debi2 ansible_host=192.168.0.20 owner=ServerProd_N07
Правим файл install_apache.yml, который мы создали на прошлом уроке:
Ansible: изучаем и создаем Роли (Roles). Lesson 8
--- - name: Install Apache hosts: all become: yes roles: - install_apache2
В этом файле стоит параметр "hosts: all" - все сервера. А если нам нужен конкретный? Допустим [PROD], тогда нам надо его указать:
--- - name: Install Apache hosts: PROD become: yes roles: - install_apache2
Хорошо, указали. А если у нас несколько серверов и мы хотим часть из них указать в этом файле. Надо будет каждый раз менять сервер, или менять данные в файле hosts. Есть еще один вариант, использовать внешнюю переменную. Приводим файл к такому виду:
--- - name: Install Apache # создаем переменную ONEHOST или как вы её сами назовёте hosts: "{{ ONEHOST }}" become: yes roles: - install_apache2
Для запуска будем использовать extra-vars:
ansible-playbook install_apache.yml --extra-var "ONEHOST=debi_servers" [WARNING]: Could not match supplied host pattern, ignoring: debi_servers PLAY [Install Apache] *********************************************************** skipping: no hosts matched PLAY RECAP **********************************************************************
Как мы видим, произошел отказ. Все верно, так как в переменную мы направили не существующий сервер. Разберем подробнее:
"ansible-playbook install_apache.yml" - запустить наш Playbook
"--extra-var" - команда для работы с нашими переменными
"ONEHOST= " - шаблон указанный в install_apache.yml, строка hosts: "{{ ONEHOST }}"
"debi_servers" - сервер из файла hosts, которого там нет
А теперь укажем в переменной наш сервер (три варианта команды):
ansible-playbook install_apache.yml --extra-var "ONEHOSTS=PROD" # ansible-playbook install_apache.yml --extra-vars "ONEHOSTS=PROD" # ansible-playbook install_apache.yml -e "ONEHOSTS=PROD"
В результате получим:
PLAY [Install Apache] *********************************************************** TASK [Gathering Facts] ********************************************************** ... PLAY RECAP ********************************************************************** debi : ok=5 changed=0 unreachable=0 failed=0
Таким образом, мы можем направлять запуск Playbook на конкретный сервер через extra-vars.
Теперь направим вторую переменную для выполнения Playbook, принудительно указав иное значение, отличное от указанного в файле hosts:
ansible-playbook install_apache.yml --extra-var "ONEHOSTS=PROD owner=ServerNEW"
Что произойдет? Он возьмет переменную не из файла hosts со значением "ServerProd_N133", а направит переменную "ServerNEW". Тем самым, переменная указанная в extra-vars имеет наивысший приоритет. Это можно использовать, если хотите принудительно изменить переменную, указанную в вашем playbook.
Надеюсь все понятно. Спасибо.
Источник: http://linuxsql.ru