Spec-Zone.ru › Ansible 2.10

Советы и рекомендации

Эти советы и рекомендации помогли нам оптимизировать использование Ansible, и мы предлагаем их здесь в качестве предложений. Мы надеемся, что они помогут вам организовать контент, писать playbook'ы, поддерживать инвентаризацию и выполнять Ansible. Однако в конечном счете вы должны использовать Ansible таким образом, который наиболее подходит вашей организации и вашим целям.

  • Общие рекомендации

    • Делайте все просто
    • Используйте систему управления версиями
  • Рекомендации по playbook'ам

    • Используйте пробелы
    • Всегда присваивайте имена задачам
    • Всегда указывайте состояние
    • Используйте комментарии
  • Рекомендации по инвентаризации

    • Используйте динамическую инвентаризацию с облаками
    • Группируйте инвентаризацию по функциям
    • Разделяйте инвентаризацию для производства и этапа подготовки
    • Храните зашифрованные переменные в безопасном доступе
  • Рекомендации по выполнению

    • Сначала протестируйте в среде подготовки
    • Обновляйте по частям
    • Обработка различий в операционных системах и дистрибутивах

Общие рекомендации

Эти концепции относятся ко всем операциям и артефактам Ansible.

Делайте все просто

Всякий раз, когда это возможно, делайте все просто. Используйте расширенные функции только в необходимых случаях и выбирайте функцию, которая лучше всего соответствует вашему случаю использования. Например, вам, вероятно, не понадобятся vars, vars_files, vars_prompt и --extra-vars одновременно, используя также внешний файл инвентаризации. Если что-то кажется сложным, скорее всего, так оно и есть. Потратьте время на поиск более простого решения.

Используйте систему управления версиями

Храните файлы playbook'ов, ролей, инвентаризации и переменных в git или другой системе управления версиями и делайте коммиты в репозиторий при внесении изменений. Система управления версиями обеспечивает историю изменений, описывая, когда и почему вы изменяли правила, автоматизирующие вашу инфраструктуру.

Рекомендации по playbook'ам

Эти рекомендации помогают сделать playbook'ы и роли более читабельными, поддерживаемыми и отлаживаемыми.

Используйте пробелы

Широкое использование пробелов, например, пустая строка перед каждым блоком или задачей, упрощает сканирование playbook'а.

Всегда присваивайте имена задачам

Имена задач необязательны, но очень полезны. В своем выводе Ansible отображает имя каждой выполняемой задачи. Выбирайте имена, описывающие, что делает каждая задача и почему.

Всегда указывайте состояние

Для многих модулей параметр «state» необязателен. Разные модули имеют разные значения по умолчанию для «state», а некоторые модули поддерживают несколько значений «state». Явное указание «state=present» или «state=absent» делает playbook'ы и роли более понятными.

Используйте комментарии

Даже с именами задач и явным состоянием, иногда часть playbook'а или роли (или файла инвентаризации/переменных) требует дополнительного объяснения. Добавление комментария (любая строка, начинающаяся с «#»), помогает другим (и, возможно, вам в будущем) понять, что делает, как делает и почему делает тот или иной play, задача (или настройка переменной).

Рекомендации по инвентаризации

Эти рекомендации помогут сохранить вашу инвентаризацию хорошо организованной.

Используйте динамическую инвентаризацию с облаками

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

Группируйте инвентаризацию по функциям

Система может входить в несколько групп. Смотрите Как создать свою инвентаризацию и Шаблоны: нацеливание на узлы и группы. Если вы создаете группы, названные по функциям узлов в группе, например, webservers или dbservers, ваши playbook'ы могут нацеливаться на машины в зависимости от функции. Вы можете назначать переменные, специфичные для функции, используя систему переменных группы, и разрабатывать роли Ansible для обработки случаев использования, специфичных для функции. Смотрите Роли.

Разделяйте инвентаризацию для производства и этапа подготовки

Вы можете сохранить вашу производственную среду отдельно от сред разработки, тестирования и подготовки, используя отдельные файлы или каталоги инвентаризации для каждой среды. Таким образом вы выбираете, на что вы нацеливаетесь, используя -i. Сохранение всех сред в одном файле может привести к неожиданностям!

Храните зашифрованные переменные в безопасном доступе

Вы должны шифровать чувствительные или секретные переменные с помощью Ansible Vault. Однако шифрование имен переменных, а также значений переменных затрудняет поиск источника значений. Вы можете сохранить доступ к именам ваших переменных (например, с помощью grep) без раскрытия секретов, добавив уровень косвенности:

  1. Создайте подкаталог group_vars/ с именем группы.
  2. Внутри этого подкаталога создайте два файла с именами vars и vault.
  3. В файле vars определите все необходимые переменные, включая любые секретные.
  4. Скопируйте все секретные переменные в файл vault и добавьте этим переменным префикс vault_.
  5. Измените переменные в файле vars для указания на соответствующие переменные vault_ с использованием синтаксиса jinja2: db_password: {{ vault_db_password }}.
  6. Зашифруйте файл vault для защиты его содержимого.
  7. Используйте имя переменной из файла vars в своих playbook'ах.

При выполнении playbook'а Ansible находит переменные в незашифрованном файле, который извлекает значения секретных переменных из зашифрованного файла. Количество файлов переменных и файлов vault'а, а также их имена не ограничены.

Рекомендации по выполнению

Эти рекомендации применяются к использованию Ansible, а не к артефактам Ansible.

Сначала протестируйте в среде подготовки

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

Обновляйте по частям

Используйте ключевое слово «serial», чтобы контролировать, сколько машин обновляется одновременно в пачке. См. Управление местом выполнения задач: делегирование и локальные действия.

Обработка различий в операционных системах и дистрибутивах

Файлы групповых переменных и модуль group_by работают вместе, чтобы помочь Ansible выполнять задачи в широком диапазоне операционных систем и дистрибутивов, которые требуют различных настроек, пакетов и инструментов. Модуль group_by создает динамическую группу узлов, соответствующую определенным критериям. Эта группа не должна быть определена в файле инвентаризации. Этот подход позволяет выполнять разные задачи на разных операционных системах или дистрибутивах. Например:

---

 - name: talk to all hosts just so we can learn about them
   hosts: all
   tasks:
     - name: Classify hosts depending on their OS distribution
       group_by:
         key: os_{{ ansible_facts['distribution'] }}

 # now just on the CentOS hosts...

 - hosts: os_CentOS
   gather_facts: False
   tasks:
     - # tasks that only happen on CentOS go in this play

Первый play классифицирует все системы в динамические группы на основе имени операционной системы. Позже play'ы могут использовать эти группы в качестве шаблонов в строке hosts. Вы также можете добавить настройки, специфичные для группы, в файлах group vars. Все три имени должны совпадать: имя, созданное задачей group_by, имя шаблона в последующих play'ах и имя файла group vars. Например:

---
# file: group_vars/all
asdf: 10

---
# file: group_vars/os_CentOS.yml
asdf: 42

В этом примере машины CentOS получают значение «42» для asdf, но другие машины получают «10». Это можно использовать не только для установки переменных, но и для применения определенных ролей только к определенным системам.

Вы можете использовать ту же установку с include_vars, когда вам нужны только переменные, специфичные для ОС, а не задачи:

- hosts: all
  tasks:
    - name: Set OS distribution dependent variables
      include_vars: "os_{{ ansible_facts['distribution'] }}.yml"
    - debug:
        var: asdf

Это подключает переменные из файла group_vars/os_CentOS.yml.

См. также

YAML-синтаксис

Узнайте о синтаксисе YAML

Работа с playbook'ами

Пересмотрите основные функции playbook'а

Индекс коллекций

Просмотрите существующие коллекции, модули и плагины

Стоит ли вам разрабатывать модуль?

Узнайте, как расширить Ansible, написав собственные модули

Шаблоны: нацеливание на узлы и группы

Узнайте, как выбрать узлы

Директория примеров GitHub

Полные файлы playbook'ов из исходного кода проекта github

Список рассылки

Вопросы? Помощь? Идеи? Загляните на список на Google Groups

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

Spec-Zone.ru

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