Как работают циклы в плейбуках Ansible

Ansible – это современный инструмент управления конфигурацией. Для связи и выполнения команд на управляемых серверах (нодах) он использует только SSH и Python – то есть вам не нужно устанавливать агентское программное обеспечение на удаленные ноды. В этой серии мануалов вы познакомитесь с основными функциями Ansible, которые можно использовать для написания сценариев автоматизации серверов. В конце серии вы найдете практический пример плейбука для автоматизации настройки удаленного веб-сервера Nginx и развертывания на нем статического HTML-сайта.

Примечание: Этот мануал является частью серии по работе с Ansible. Другие мануалы вы найдете по тегу ansible-practice. Весь код серии можно найти в этом репозитории.

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

В программировании цикл позволяет повторять инструкции; как правило, он делает это до тех пор, пока не будет выполнено определенное условие. Ansible предлагает различные методы для создания цикла, при этом ключевое слово loop является наиболее рекомендуемым вариантом (поскольку он обеспечивает долгосрочную совместимость).

В следующем примере мы создаем в папке /tmp три разных файла. Модуль file используется в задаче, которая реализует цикл при помощи трех разных значений.

Создайте новый файл playbook-06.yml в каталоге ansible-practice:

nano ~/ansible-practice/playbook-06.yml

Затем добавьте в новый плейбук следующие строки:

---
- hosts: all
  tasks:
    - name: creates users files
      file:
        path: /tmp/ansible-{{ item }}
        state: touch
      loop:
        - 8host
        - erika
        - brian

Сохраните и закройте файл.

Затем запустите ansible-playbook с теми же аргументами подключения, что вы использовали в этой серии ранее (мы, как всегда, используем инвентарь по имени inventory и пользователя 8host, но вам следует соответствующим образом изменить эти значения):

ansible-playbook -i inventory playbook-06.yml -u 8host

Вы получите следующий результат; он показывает значение каждого отдельного элемента, использованного в цикле:

...
TASK [creates users files] ******************************************************************************
changed: [203.0.113.10] => (item=8host)
changed: [203.0.113.10] => (item=erika)
changed: [203.0.113.10] => (item=brian)
...

За более подробной информацией о том, как использовать циклы при написании плейбуков Ansible, обратитесь к официальной документации.

Tags: ,

Добавить комментарий