Spec-Zone.ru › Ansible 2.11

Пример настройки Ansible

Вы узнали о плейбуках, инвентаре, ролях и переменных. В этом разделе все эти элементы объединяются, описывая пример настройки для автоматизации веб-службы. Вы можете найти больше примеров плейбуков, иллюстрирующих эти шаблоны, в нашем репозитории ansible-examples. (ПРИМЕЧАНИЕ: они могут не использовать все функции последней версии, но по-прежнему являются отличной справочной информацией!).

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

  • Пример структуры каталогов
  • Альтернативная структура каталогов
  • Пример переменных групп и хостов
  • Примеры плейбуков, организованных по функциям
  • Примеры файлов задач и обработчиков в роли, основанной на функциях
  • Возможности примерной настройки
  • Организация для развертывания или конфигурации
  • Использование локальных модулей Ansible

Пример структуры каталогов

Эта структура организует большинство задач в ролях, с одним файлом инвентаря для каждой среды и несколькими плейбуками в каталоге верхнего уровня:

production                # inventory file for production servers
staging                   # inventory file for staging environment

group_vars/
   group1.yml             # here we assign variables to particular groups
   group2.yml
host_vars/
   hostname1.yml          # here we assign variables to particular systems
   hostname2.yml

library/                  # if any custom modules, put them here (optional)
module_utils/             # if any custom module_utils to support modules, put them here (optional)
filter_plugins/           # if any custom filter plugins, put them here (optional)

site.yml                  # main playbook
webservers.yml            # playbook for webserver tier
dbservers.yml             # playbook for dbserver tier
tasks/                    # task files included from playbooks
    webservers-extra.yml  # <-- avoids confusing playbook with task files

roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies
        library/          # roles can also include custom modules
        module_utils/     # roles can also include custom module_utils
        lookup_plugins/   # or other types of plugins, like lookup in this case

    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/               # ""

Альтернативная структура каталогов

В качестве альтернативы вы можете поместить каждый файл инвентаря с его group_vars/host_vars в отдельный каталог. Это особенно полезно, если ваши group_vars/host_vars не имеют много общего в разных средах. Структура может выглядеть примерно так:

inventories/
   production/
      hosts               # inventory file for production servers
      group_vars/
         group1.yml       # here we assign variables to particular groups
         group2.yml
      host_vars/
         hostname1.yml    # here we assign variables to particular systems
         hostname2.yml

   staging/
      hosts               # inventory file for staging environment
      group_vars/
         group1.yml       # here we assign variables to particular groups
         group2.yml
      host_vars/
         stagehost1.yml   # here we assign variables to particular systems
         stagehost2.yml

library/
module_utils/
filter_plugins/

site.yml
webservers.yml
dbservers.yml

roles/
    common/
    webtier/
    monitoring/
    fooapp/

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

Пример переменных групп и хостов

В этих примерах файлов переменных групп и хостов записываются значения переменных, применимые к каждой машине или группе машин. Например, в дата-центре Атланты есть свои NTP-серверы, поэтому при настройке ntp.conf мы должны использовать их:

---
# file: group_vars/atlanta
ntp: ntp-atlanta.example.com
backup: backup-atlanta.example.com

Аналогично, веб-серверы имеют некоторые настройки, которые не применяются к серверам базы данных:

---
# file: group_vars/webservers
apacheMaxRequestsPerChild: 3000
apacheMaxClients: 900

Значения по умолчанию или значения, которые являются универсально истинными, должны находиться в файле group_vars/all:

---
# file: group_vars/all
ntp: ntp-boston.example.com
backup: backup-boston.example.com

При необходимости вы можете определить специфические различия оборудования в системах в файле host_vars:

---
# file: host_vars/db-bos-1.example.com
foo_agent_port: 86
bar_agent_port: 99

Опять же, если вы используете динамический инвентарь, Ansible автоматически создаёт много динамических групп. Таким образом, тег «class:webserver» автоматически загрузит переменные из файла «group_vars/ec2_tag_class_webserver».

Примеры плейбуков, организованных по функциям

С этой настройкой один плейбук может определить всю инфраструктуру. Плейбук site.yml импортирует два других плейбука, один для веб-серверов и один для серверов базы данных:

---
# file: site.yml
- import_playbook: webservers.yml
- import_playbook: dbservers.yml

Файл webservers.yml, также на верхнем уровне, сопоставляет конфигурацию группы веб-серверов с ролями, относящимися к группе веб-серверов:

---
# file: webservers.yml
- hosts: webservers
  roles:
    - common
    - webtier

С этой настройкой вы можете настроить всю инфраструктуру, «запустив» site.yml, или запустить подмножество, запустив webservers.yml. Это аналогично параметру Ansible «–limit», но немного более явное:

ansible-playbook site.yml --limit webservers
ansible-playbook webservers.yml

Примеры файлов задач и обработчиков в роли, основанной на функциях

Ansible загружает любой файл, называемый main.yml в подкаталоге роли. Пример файла tasks/main.yml прост - он настраивает NTP, но может делать больше, если мы захотим:

---
# file: roles/common/tasks/main.yml

- name: be sure ntp is installed
  yum:
    name: ntp
    state: present
  tags: ntp

- name: be sure ntp is configured
  template:
    src: ntp.conf.j2
    dest: /etc/ntp.conf
  notify:
    - restart ntpd
  tags: ntp

- name: be sure ntpd is running and enabled
  service:
    name: ntpd
    state: started
    enabled: yes
  tags: ntp

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

---
# file: roles/common/handlers/main.yml
- name: restart ntpd
  service:
    name: ntpd
    state: restarted

См. Роли для получения дополнительной информации.

Возможности примерной настройки

Описанная выше базовая структура организации позволяет использовать множество различных вариантов автоматизации. Чтобы перенастроить всю инфраструктуру:

ansible-playbook -i production site.yml

Чтобы перенастроить NTP для всех устройств:

ansible-playbook -i production site.yml --tags ntp

Чтобы перенастроить только веб-серверы:

ansible-playbook -i production webservers.yml

Чтобы перенастроить только веб-серверы в Бостоне:

ansible-playbook -i production webservers.yml --limit boston

Чтобы перенастроить только первые 10 веб-серверов в Бостоне, а затем следующие 10:

ansible-playbook -i production webservers.yml --limit boston[0:9]
ansible-playbook -i production webservers.yml --limit boston[10:19]

Примерная настройка также поддерживает базовые ад-хок команды:

ansible boston -i production -m ping
ansible boston -i production -m command -a '/sbin/reboot'

Чтобы определить, какие задачи будут выполняться или какие имена хостов будут затронуты определенной командой Ansible:

# confirm what task names would be run if I ran this command and said "just ntp tasks"
ansible-playbook -i production webservers.yml --tags ntp --list-tasks

# confirm what hostnames might be communicated with if I said "limit to boston"
ansible-playbook -i production webservers.yml --limit boston --list-hosts

Организация для развертывания или конфигурации

Примерная настройка моделирует типичную топологию конфигурации. При выполнении многоуровневых развертываний появятся дополнительные плейбуки, которые будут переходить между уровнями для выпуска приложения. В этом случае «site.yml» может быть дополнен плейбуками, такими как «deploy_exampledotcom.yml», но общие концепции остаются в силе. Ansible позволяет развертывать и настраивать с помощью одного и того же инструмента, поэтому вы, скорее всего, будете повторно использовать группы и сохранять конфигурацию ОС в отдельных плейбуках или ролях от развертывания приложения.

Рассматривайте «плейбуки» как спортивную метафору — вы можете использовать один набор игровых действий против всей вашей инфраструктуры, а ситуационные игровые действия, которые вы используете в разное время и для разных целей.

Использование локальных модулей Ansible

Если плейбук имеет каталог ./library относительно его файла YAML, этот каталог может быть использован для добавления модулей Ansible, которые автоматически будут находиться в пути модулей Ansible. Это отличный способ сохранения модулей, идущих вместе с плейбуком. Это показано в примере структуры каталога в начале этого раздела.

См. также

Синтаксис YAML

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

Работа с плейбуками

Обзор основных функций плейбуков

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

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

Нужно ли разрабатывать модуль?

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

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

Узнайте о том, как выбирать хосты

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

Полные файлы плейбуков из исходного кода проекта GitHub

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

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

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

Spec-Zone.ru

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