Spec-Zone.ru › Ansible 2.4

Блоки

В версии 2.0 мы добавили функцию блоков для логической группировки задач и даже обработки ошибок в процессе выполнения. Большинство настроек, которые можно применить к отдельной задаче, применимы и на уровне блока, что значительно упрощает настройку данных или директив, общих для задач. Это не означает, что директива влияет на сам блок, а наследуется задачами, заключёнными в блоке. Например, when будет применено к задачам, а не к самому блоку.

Пример блока
   tasks:
     - name: Install Apache
       block:
         - yum: name={{ item }} state=installed
           with_items:
             - httpd
             - memcached
         - template: src=templates/src.j2 dest=/etc/foo.conf
         - service: name=bar state=started enabled=True
       when: ansible_distribution == 'CentOS'
       become: true
       become_user: root

В примере выше каждая из 3 задач будет выполнена после добавления условия when из блока и его оценки в контексте задачи. Также они унаследуют директивы повышения привилегий, позволяющие выполнять «become root» для всех заключённых задач.

Введено в версии 2.3: Ключевое слово name: для blocks: было добавлено в Ansible 2.3.

Обработка ошибок

Блоки также позволяют обрабатывать ошибки подобно исключениям в большинстве языков программирования.

Пример обработки ошибок блока
  tasks:
   - name: Attempt and gracefull roll back demo
     block:
       - debug: msg='I execute normally'
       - command: /bin/false
       - debug: msg='I never execute, due to the above task failing'
     rescue:
       - debug: msg='I caught an error'
       - command: /bin/false
       - debug: msg='I also never execute :-('
     always:
       - debug: msg="this always executes"

Задачи в block будут выполняться нормально, но если произойдёт ошибка, то выполнится раздел rescue, в котором можно выполнить действия для восстановления после предыдущей ошибки. Раздел always выполняется независимо от того, произошла ошибка в разделах block и rescue или нет.

Ещё один пример — как запускать обработчики после возникновения ошибки:

Запуск обработчиков блока при ошибках
 tasks:
   - name: Attempt and gracefull roll back demo
     block:
       - debug: msg='I execute normally'
         notify: run me even after an error
       - command: /bin/false
     rescue:
       - name: make sure all handlers run
         meta: flush_handlers
  handlers:
    - name: run me even after an error
      debug: msg='this handler runs even on error'

См. также

Сценарии
Введение в сценарии
Роли
Организация сценариев с помощью ролей
Пользовательская рассылка
Есть вопрос? Задайте его в группе!
irc.freenode.net
Канал IRC-чата #ansible

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/playbooks_blocks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API