You are here

Ansible переменные extra-vars. Lesson 9

Linux: 

При выполнении Playbook мы можем засылать данные, которые будут иметь наивысший статус при выполнении. Для чего это нужно читаем дальше.

Ansible переменные extra-vars. Lesson 9

Поправим наш файл hosts:

  1. [PROD]
  2. debi ansible_host=192.168.0.10 owner=ServerProd_N133
  3.  
  4. [STAGING]
  5. debi2 ansible_host=192.168.0.20 owner=ServerProd_N07

Правим файл install_apache.yml, который мы создали на прошлом уроке:
Ansible: изучаем и создаем Роли (Roles). Lesson 8

  1. ---
  2. - name: Install Apache
  3. hosts: all
  4. become: yes
  5.  
  6. roles:
  7. - install_apache2

В этом файле стоит параметр "hosts: all" - все сервера. А если нам нужен конкретный? Допустим [PROD], тогда нам надо его указать:

  1. ---
  2. - name: Install Apache
  3. hosts: PROD
  4. become: yes
  5.  
  6. roles:
  7. - install_apache2

Хорошо, указали. А если у нас несколько серверов и мы хотим часть из них указать в этом файле. Надо будет каждый раз менять сервер, или менять данные в файле hosts. Есть еще один вариант, использовать внешнюю переменную. Приводим файл к такому виду:

  1. ---
  2. - name: Install Apache
  3. # создаем переменную ONEHOST или как вы её сами назовёте
  4. hosts: "{{ ONEHOST }}"
  5. become: yes
  6.  
  7. roles:
  8. - install_apache2

Для запуска будем использовать extra-vars:

  1. ansible-playbook install_apache.yml --extra-var "ONEHOST=debi_servers"
  2. [WARNING]: Could not match supplied host pattern, ignoring: debi_servers
  3.  
  4. PLAY [Install Apache] ***********************************************************
  5. skipping: no hosts matched
  6.  
  7. PLAY RECAP **********************************************************************

Как мы видим, произошел отказ. Все верно, так как в переменную мы направили не существующий сервер. Разберем подробнее:
"ansible-playbook install_apache.yml" - запустить наш Playbook
"--extra-var" - команда для работы с нашими переменными
"ONEHOST= " - шаблон указанный в install_apache.yml, строка hosts: "{{ ONEHOST }}"
"debi_servers" - сервер из файла hosts, которого там нет

А теперь укажем в переменной наш сервер (три варианта команды):

  1. ansible-playbook install_apache.yml --extra-var "ONEHOSTS=PROD"
  2. # ansible-playbook install_apache.yml --extra-vars "ONEHOSTS=PROD"
  3. # ansible-playbook install_apache.yml -e "ONEHOSTS=PROD"

В результате получим:

  1. PLAY [Install Apache] ***********************************************************
  2.  
  3. TASK [Gathering Facts] **********************************************************
  4. ...
  5. PLAY RECAP **********************************************************************
  6. debi : ok=5 changed=0 unreachable=0 failed=0

Таким образом, мы можем направлять запуск Playbook на конкретный сервер через extra-vars.

Теперь направим вторую переменную для выполнения Playbook, принудительно указав иное значение, отличное от указанного в файле hosts:

  1. ansible-playbook install_apache.yml --extra-var "ONEHOSTS=PROD owner=ServerNEW"

Что произойдет? Он возьмет переменную не из файла hosts со значением "ServerProd_N133", а направит переменную "ServerNEW". Тем самым, переменная указанная в extra-vars имеет наивысший приоритет. Это можно использовать, если хотите принудительно изменить переменную, указанную в вашем playbook.

Надеюсь все понятно. Спасибо.

Источник: http://linuxsql.ru