Ansible - расширенное выполнение

В этой главе мы узнаем, что такое расширенное выполнение с помощью Ansible.

Как ограничить выполнение задачами

Это очень важная стратегия выполнения, при которой нужно выполнять только одно выполнение, а не всю книгу воспроизведения. For example, предположим, вы хотите только остановить сервер (в случае возникновения производственной проблемы), а затем опубликовать патч, который вы хотите только запустить.

Здесь, в исходной пьесе, остановка и запуск были частью разных ролей в одной и той же пьесе, но с этим можно справиться с помощью тегов. Мы можем предоставить разные теги для разных ролей (которые, в свою очередь, будут иметь задачи), и, следовательно, на основе тегов, предоставленных исполнителем, выполняется только указанная роль / задача. Итак, для приведенного выше примера мы можем добавить следующие теги:

- {role: start-tomcat, tags: ['install']}}

Следующая команда помогает в использовании тегов -

ansible-playbook -i hosts <your yaml> --tags "install" -vvv

С помощью приведенной выше команды будет вызываться только роль start-tomcat. Предоставляемый тег чувствителен к регистру. Убедитесь, что команде передается точное совпадение.

Как ограничить выполнение хостами

Есть два способа добиться выполнения определенных шагов на определенных хостах. Для конкретной роли определяются хосты - на каких именно хостах должна выполняться эта конкретная роль.

пример

- hosts: <A> 
   environment: "{{your env}}" 
   pre_tasks: 
      - debug: msg = "Started deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
     
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed deployment. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}" 
 
- hosts: <B> 
   pre_tasks: 
      - debug: msg = "started.... 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} " 
        
   roles: 
      - {role: <your role>, tags: ['<respective tag>']} 
   post_tasks: 
      - debug: msg = "Completed the task.. 
      Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"

Согласно приведенному выше примеру, в зависимости от предоставленных хостов, будут вызываться только соответствующие роли. Теперь мои хосты A и B определены в хостах (файл инвентаризации).

Альтернативное решение

Другим решением может быть определение хостов playbook с помощью переменной, а затем передача определенного адреса хоста через --extra-vars -

# file: user.yml  (playbook) 
--- 
- hosts: '{{ target }}' 
   user: ... 
playbook contd….

Запуск Playbook

ansible-playbook user.yml --extra-vars "target = "<your host variable>"

Если {{target}} не определен, playbook ничего не делает. При необходимости также можно передать группу из файла hosts. Это не повредит, если не предусмотрены дополнительные переменные.

Пособие для одного хоста

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts