Очень простая система управления конфигурациями

в 5:34, , рубрики: Ansible, puppet, ит-инфраструктура, системное администрирование, метки: ,

Для тех кто используетненавидит и в целом измученн puppet'ом, ansible покажется глотком освежающего нарзана, Эдакий фремворк систем управления конфигураций.
Структура работы с системой такова: вносим хосты в список => пишем плейбук под группу хостов => начинаем использовать.

Описываем сеть.

[hardware]
server_1
server_2

Файл hosts очень прост — мы, словно заправские хипстеры добавляющие второй миллион уникальных фотографий в винтажный коллаж только что создали группу [hardware] и внесли в нее два сервера — server_1 и server_2. Таких групп может быть бесконечное количество. И в бесконечном количестве групп может находится бесконечное количество серверов. Попробуйте себе представить эту картину — стройными, узкими рядами группы выстраиваются в колонны и чеканя шаг маршруют мимо благосклонно взирающего на них сисадмина. Рядом с родителями тоже чеканя шаг смешно перебирают маленькими ножками их дети… Стоп! Дети?

[hardware:children]
hypervisors

[hypervisors]
proxmox_1
proxmox_2
proxmox_3

Одна группа может быть подчиненна другой группе — таким образом если мы назначаем копать от забора и до обеда группе [hardware], они, как и любые другие родители, отправляют «на картошку» и своих детей [hypervisors]. А вот [hypervisors] заставлять стареньких маму и папу в лице [hardware] не будет, да и не может: авторитет не тот.
Кстати, как люди передают друг другу в наследство фамильные замки, длинные носы и сервизы, так родитель [hardware] передаст группе [hypervisors] значение своих переменных.
И да, вы не умерли и не попали в рай — переменные могут отлично назначатся группе, отдельному хосту, детям, взрослым, перезаписываться в зависимости от контекста и подгружаться из файлов.

[webservers_fail:vars]
nginx_conf=/usr/local/etc/nginx/var/www/conf/nginx/nginx43/not_delete/vavilon/project15/nginx.conf

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

Стоит обратить внимание на забавный факт — ansible старается минимум действий оставлять коммандной строке. И если мы хотим сделать что-то нестандартное — надо править файлы.
Таким образом если сервера сидят на нестандартном порту надо это указать в явном виде в конфигурационном файле hosts либо в описание самого хоста, либо в группе.

[webservers]
webserver_super_security ansible_ssh_port=80
no_dns_host ansible_ssh_host=192.168.0.2
webserver_2
webserver_3
[webservers:vars]
ansible_ssh_port=222

Группировку по хостам удобно использовать для определения групп хостов (Хором: «Спасибо, Капитан!»). Таким образом в зависимости от группы мы, используя один единственный плэйбук можем как конфигурить полет на луну, так и исправить внесенные минутой раньше ошибочные конфиги самого важного продакшн сервера.

Плэйбуки: поиграй со мной

Если вы создали плейбук — запустить его можно командой ansible-playbook

— hosts webservers
tasks:
— name: FOO
shell: /bin/foo
tags: foo
— name: install zsh
apt: name=zsh state=latest
tags: install

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

— name: Installing smartctl
apt: name=smartmontools state=latest
tags: check_mk
when_set: $install_smartctl

— name: Adding smartctl
template: src=../roles/common/templates/smartctl dest=/usr/lib/check_mk_agent/plugins/smart mode=0755
tags: check_mk
when_set: $install_smartctl

Таким образом описанные выше команды исполнятся только в том случае если переменная Install_smartctl задана.

Кстати о дзене. Любому простофиле известно что дзен не терпит хаоса и повторений, но при этом сам является хаосом и повторением. И детище американского программиста учит нас и этому: мы можем вкладывать плейбуки в плейбуки, в плейбуки вкладывать задачи и списки переменных.
Таким образом написав однажды плейбук который создает юзеров, устанавливает программы, настраивает общие конфиги типа .zshrc и варит кофе мы сможем использовать его снова и снова в любом другом плейбуке верхнего уровня делая обыкновенный include:

— include: firststep.yml
vars_files:
— «softlist.yml»

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

— hosts: debian
var_files:
— «softlist.yml»
task:
— name: MainSoft Debian
apt: name=$mainsoft state=latest
— hosts: CentOS
var_files:
— «softlist.yml»
task:
— name: MainSoft CentOS
yum: name=$mainsoft state=latest

А файл softlist.yml у нас будет таким:

mainsoft:
— zsh
— htop
— sudo
— less
— iftop
— tcpdump
— mc
— screen
— wget
— vim

Теперь просто добавляя строчки в список мы сможем манипулировать сразу всеми хостами не правя 100500 разных конфигураций.
А как выйти из мертвой петли читайте в следующем номере. Все там — роли и запуск команд.
Естественно мои жалкие попытки вкратце расказать о ansible не смогут отразить всех замыслов великого комбинатора, но, надеюсь, заинтересуют вас достаточно для того что бы вы с ужсом и нетерпением ожидали моих дальнейших потуг на столь актуальном поприще описания самой удобной из систем управления конфигураций.

Автор: ctrlok

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js