Spec-Zone.ru › Ansible

Пример конфигурации Ansible

Вы узнали о playbook, инвентаризации, ролях и переменных. Этот раздел объединяет все эти элементы и описывает пример настройки для автоматизации веб-сервиса.

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

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

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

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

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 and optional Galaxy info
        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/               # ""

Примечание

По умолчанию Ansible предполагает, что ваши playbook хранятся в одном каталоге, а роли — в подкаталоге, называемом roles/. При большем количестве задач для автоматизации вы можете переместить свои playbook в подкаталог, называемый playbooks/. В этом случае вам необходимо настроить путь к каталогу roles/ с помощью настройки roles_path в файле ansible.cfg.

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

Вы также можете поместить каждый файл инвентаризации со своим 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

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

---
# 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 автоматически.

Примечание

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

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

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

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

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

---
# 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
  ansible.builtin.service:
    name: ntpd
    state: started
    enabled: true
  tags: ntp

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

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

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

Что позволяет пример настройки

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

ansible-playbook -i production site.yml

Для переконфигурации NTP для всего:

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

Для переконфигурации только webservers:

ansible-playbook -i production webservers.yml

Для переконфигурации только webservers в Бостоне:

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

Для переконфигурации только первых 10 webservers в Бостоне, а затем следующих 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

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

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

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

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

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

См. также

Синтаксис YAML

Изучите синтаксис YAML

Работа с playbook

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

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

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

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

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

Паттерны: нацеливание на хосты и группы

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

Общение

У вас есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство по общению Ansible

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

Spec-Zone.ru

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