Anisible позволяет инфраструктуру в качестве кода. Это был ценный инструмент для моей инфраструктуры @ Home Project, помогая мне настроить программы консула и NOMAD, чтобы предоставить DNS для узлов и служб, а также конечную точку Nginx. Хотя эта инфраструктура была полностью заменена Kubernetes, Anbible — это инструмент, который остался, и обеспечивает постоянную поддержку задач технического обслуживания системы.
Работав с неизбежным в течение более длительного времени, мои сценарии теперь проживают в одном хорошо структурированном каталоге. Отсюда я могу запускать индивидуальные задачи, а также запустить полный сайт.yml Чтобы применить одно последовательное состояние конфигурации во все системы. Также полезно рассмотреть возможность удаления, которые удаляют ненужную конфигурацию или программное обеспечение. И для достижения идемпотентности вашего PlayBook, важно по-настоящему понять неиспользуемые модули, которые вы используете. Все это подробно описано в этой статье.
Эффективное каталог
Весь Anisible Code содержится в одном каталоге. На момент написания этой статьи этот каталог выглядит так:
├── ansible.cfg ├── host_vars │ ├── raspi-3-1.yml │ ├── ... ├── group_vars ├── roles │ ├── consul │ ├── docker-arch │ ├── docker-arm │ ├── nfs-client │ ├── nfs-server │ └── nomad ├── scripts │ ├── consul │ ├── nomad │ ├── configs │ ├── jobs │ ├── system │ ├── update_packages.yaml │ ├── tutorial │ └── uninstall ├── hosts └── site.yml
Каталог структурирован в соответствии с этими принципами:
- Глобальные файлы конфигурации в каталоге root: Anisible файлы конфигурации
Ansible.cfgи инвентарьхозяеваОтказ - Global Playbook: PlayBook
сайт.ymlЯвляется ли IDEMPotent Playbook, который, когда выполняется, настраивает все узлы со всеми системами инфраструктуры. Эффективно он устанавливает все роли на все узлы и исправляет узлы на новейшие пакеты ОС. - Global Vars:
group_varsСправочник содержит глобальные переменные, особенно IP-адреса для Nomad, Consul и NFS-серверов. Вhost_varsСправочник, я включаю файл для каждого узла, который определяет свою роль NOMAD/CONSUL/NFS как мастера или агента. - Разделительные роли и скрипты:
ролиСправочник содержит PlayBooks, которые устанавливают инфраструктурные системы. Это неизбежные роли, которые я объяснил в более ранних статьях. ВСкриптыявляются командами, которые регулярно выполняются, такие вещи, как обновление узлов или перезапуска процессов на узлах. Я также включаю развертывание рабочих мест NOMAD, включая Config файлы для программ, в каталоге сценариев.
Удалить
Обязательный связан с предоставлением погашения, последовательной конфигурации для систем. Но иногда вам нужно отменить эти изменения. Если это просто удаление программного обеспечения с соответствующим программным обеспечением управления пакетами, это простое задание. Но как насчет других конфигурации: пользовательские файлы сервисов, файлы конфигурации, добавленные строки конфигурации в центральные системные файлы, такие как /etc/mount или /etc/ssh/sshd_config. ?
Нет никакого удаления в неспособных, но каждое издание, которое вы делаете, можно отменить. Напишите этот деинсталлятор самостоятельно! Напишите это, как только вы закончите с установочной частью, потому что его свежим на уме, и вы можете проверить его с вашей системой.
Я структурую плейбов в Установить и Удалить блокировать. Эти блоки вызываются, передавая Удалить = True Параметр на прогон.
Вот укороченный пример для установки dnsmasq Отказ
- block:
- name: Install dnsmasq
apt:
name: dnsmasq
state: present
- name: Configure dnsmasq
lineinfile:
path: /etc/dnsmasq.d/10_consul
create: true
line: server=/consul/192.168.2.201#8600
regexp: consul
state: present
when: uninstall is not defined
- block:
- name: Uninstall
apt:
name: dnsmasq
state: absent
- file:
path: /etc/dnsmasq.d
state: absent
when: uninstall is defined and uninstall
Когда этот Playbook работает как Ansible-Playbook ... -E "{Удаление: True} , вывод выглядит следующим образом:
ansible-playbook site.yml --limit=raspi-3-1 --tags dns -e "{uninstall: true}"
PLAY [Configure DNS] ***********************************************************************************************************************
TASK [dns : Install dnsmasq] ***************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Configure dnsmasq] *************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Restart dnsmasq] ***************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Uninstall] *********************************************************************************************************************
changed: [raspi-3-1]
TASK [dns : file] **************************************************************************************************************************
changed: [raspi-3-1]
Idempotent playbooks.
Когда PlayBook выполняется для настройки системы, система всегда должна иметь одинаковое, четкое определенное состояние. Если PlayBook состоит из 10 шагов, и система отклоняется на этапе 4 из желаемого состояния, то следует применять только этот конкретный шаг.
По своей природе, одновременные задачи будут изменять только систему, если есть что-то делать. Большинство неблагоприятных модулей обеспечивают эту идентификацию. Но некоторые модули могут быть использованы таким образом, чтобы разбивать этот шаблон. Я не могу покрыть все модули, но хочу выделить эту точку одним пример: модуль Линия в файле Отказ
Давайте рассмотрим настройку монтажа объема NFS. На клиентах вам нужно добавить запись в etc/fstab Чтобы рассказать системе, где есть сервер NFS. Первая версия этого изменения это:
- name: Create fstab entry
lineinfile:
path: /etc/fstab
line: '{{ nfs_dir_server_ip }}:{{ nfs_dir_mnt_path }} {{ nfs_dir_mnt_path }} nfs defaults,soft,bg,noauto,rsize=32768,wsize=32768,noatime 0 0'
state: present
Определенный выход зависит от трех переменных. Если одно из переменных изменяется, и PlayBook выполняется снова, он создаст новую запись в /etc/fstab Отказ Крепления не будут работать!
Вы хотите только одну запись для акций NFS в этом файле. И для этого вы можете использовать дополнительные Regexp параметр. Вторая версия этого Playbook использует Regexp Параметр только для того, и когда-либо добавляют одну строку на /etc/fstab . Это простое изменение делает PlayBook IdEmpotent.
- name: Create fstab entry
lineinfile:
path: /etc/fstab
line: '{{ nfs_dir_server_ip }}:{{ nfs_dir_mnt_path }} {{ nfs_dir_mnt_path }} nfs defaults,soft,bg,noauto,rsize=32768,wsize=32768,noatime 0 0'
regex: 'nfs defaults,soft,bg,noauto'
state: present
Всякий раз, когда вы используете модуль, позаботьтесь использовать его идемпотенциально.
Вывод
Во время непрерывного использования неизбежного, моя коллекция отдельных сценариев превратилась в одну эффективную структуру каталогов. Знание того, где именно для того, где можно поставить, какие файлы Playbook, переменные или конфигурации необходимы. Также при написании PlayBook всегда добавьте удален, чтобы отменить изменение системы. Наконец, обязательно напишите IDEMPotent Playbooks, чтобы повторяющиеся исполнение игрового книги всегда приводит к одному чековым, согласованным состоянию системы.
Оригинал: «https://dev.to/admantium/ansible-idempotent-playbooks-4e67»