Кто-нибудь тут с Ansible работает? Может кто что посоветует?
У каждой страны и каждого государства (что далеко не одно и то же) свой исторический путь. Но каждый народ уверен, что его собственный путь - лучший из возможных.
(С)
У Афрания всегда свой путь. И, что характерно, он уверен, что выбрал единственно правильный и самый лучший из возможных путей.
:-D
Но мой вопрос был как раз о том, как заменить ансибл докером. С ходу я что то никак не соображу... Или туплю или не понял, что Психо имел ввиду.
Дойдёт очередь и до докера, благо LXC и CBSD уже пройденный этап.
Пока меня интересует такой вариант:
Десяток виртуалок, одна половина из которых выполняет роль А, а другая или роль Б или Б и В вместе. При этом роли А, Б, В должны корректно откатываться в начальное состояние виртуалки плейбуками. Развёртывание веб-серверов - одна из простых ролей, так что почему бы и нет? Другой ролью может быть развёртывание серверов DNS - или bind, или nsd+unbound
Дебиан может и проще, но у нас на работе в основном Ред Хат и Центось. Поэтому я не хочу изучить только один вариант, а затем ловить грабли, если на работе принято иначе. Лучше плановый онанизм в тестовой среде, чем неожиданный секс в продакшене.
А на всяких мудаков я в последнее время стараюсь не рефлексировать. Они специально стараются сказать гадость, провоцируя сралки - так зачем вестись на их провокации?
Изучаю для себя, железо есть, к покупке BareMetal не готов.
Я просто придумал задачу, которую можно решить плейбуками ансибла.
И теперь... У меня получается, но правильно ли я делаю?
Других-то плейбуков я вовсе не видел. Может так не принято?
Посему и вопрос конкретный - как вообще принято решать такие задачи?
Читая мануалы, становишься записным теоретиком, потому и хочется знать мнение практиков.
Вариант 1 - всё описать в плейбуке.
Вариант 2 - написать скрипт, плейбуком залить на пациента и выполнить.
Преимущество во втором случае: на разные платформы можно заливать разные скрипты.
А если использовать первый вариант, плейбуки придётся переписывать для перевода на другую платформу.
Пока как я понимаю, везде предпочитают первый вариант.
Но тогда у меня вопрос по правильному включению служб для разных ролей.
Если надо включить две роли сразу, а службы пишутся в строку вида
pkg_scripts="mysqld nginx"
В плейбуке при установке роли тогда надо проверять, установлена другая роль или нет.
По разным платформам: ансибл в самом начале собирает ″факты″ об узле. В том числе и установленную ОС он знает. Исходя из этого в описании роли можно это использовать: в зависимости от ОС, например, использовать разные пакетные менеджеры(apt, yum, dnf и т.д.), использовать разные пакеты(apache/httpd)
Так же, в свежих версиях, например, есть унифицированный модуль package(https://docs.ansible.com/ansible/latest/collections/ansible/builtin/package_module.html) для установки пакетов, который не зависит(на сколько я знаю) от дистрибутива.
А вот про службы не понял, что ты имеешь ввиду.
На вскидку для установки nginx + php-fpm + mysql я бы сделал так:
Это сама роль.
- name: soft install
yum:
name:
- nginx
- mysql-server
- php-fpm
state: latest
- name: Add NGINX cofig
template: src=node.conf dest=/etc/nginx/conf.d/{{ inventory_hostname }}.conf owner=nginx group=nginx
- name: Create root for nginx
file: path={{ root }}/{{ inventory_hostname }} mode=775 state=directory owner=nginx group=nginx
- name: copy test page
copy: src=index.php dest={{ root }}/{{ inventory_hostname }} owner=nginx group=nginx
- name: service start
service:
name: ″{{ item }}″
state: started
enabled: true
loop:
- mysqld
- nginx
- php-fpm
Протестил - все накатывается и включается. Ну и плюс еще нужно настроить mysql. Скрипты mysql_secure_installation можно или запустить прямо через модуль script или использовать готовые модули для mysql, которыми накинуть нужные права, удалить тестовую базу, и т.д.
PS: Сильно не пинай, сам только начинаю изучать :)
Первые практические примеры плейбука.
Да ещё и с пояснениями.
Собственно говоря, именно поэтому я первых двоих и проигнорил.
Ничего полезного. А Вы первый, кто дал ответ на мои вопросы.
Теперь я понял, куда и как двигаться дальше.
В Линуксе задать какие службы запускаются при запуске можно командой /sbin/chkconfig
В Опёнке список запускаемых служб пишется в строковую переменную в файл /etc/rc.conf
Соответственно, придётся не только знать платформу, но и запоминать уже установленные на хостах роли. Чтобы при накатывании новой роли и переписывания этой самой переменной старую роль не поломать.
Ну допустим, настроен на хосте DNS-сервер bind - так вот, чтобы при накатывании роли веб-сервера из этой строковой переменной bind не исчез. Получается, просто переписать файл или строку - мало.
В связи с чем такой вопрос: может ли плейбук проверять условия или запрашивать данные из БД на предмет уже установленных конфигураций? Допустим, накатили на хост роль вебсервера - отметили это в БД, при повторном запуске плейбука конфа уже не поломается.
Дальше вопросы будут ещё сложнее - допустим, если две роли зависят от одной и той же службы. Допустим, той же mysqld - и для вебсервера надо, и для PowerDNS. При установке роли не ломать, если служба уже установлена. При удалении роли конкретную службу - не удалять. То есть ещё проверка на зависимости добавляется.
Афраний писал(а)
В Линуксе задать какие службы запускаются при запуске можно командой /sbin/chkconfig
у тебя ооочень старые сведенья...
ансибл хорошь как раз тем, что правильно составленный сценарий можно прогонять 100500 раз и о ничего не поломает... у пакетов, например, соcтояние latest и у сервисов started как раз и говорит о результате, а не о процессе... а вот когда начинаются "костыли" типа я проще напишу свой скрипт, чем разберусь в том, что есть - вот тогда и получается, что кто-то должен понимать, а выполнился ли твой скрипт уже или его надо выполнять?
с рандомными конфигами чуть сложнее, если они не поддерживаются конкретными модулями конфигурации... тогда можно или искать кем-то написанную роль и использвать её или использовать модули типа blockinfile/lineinfile/etc...
А можешь подсказать, как "откатить роль"? Как я понимаю, никакого механизма на этот счет у ансибла нет? По крайней мере у меня что то не нагуглилось ничего и сам с такой задачей не встречался. Но интересно.
По сути, что бы откатить роль, нужно написать аналогичную роль, но с действиями наоборот: остановить службы, удалить службы, почистить конфиги?
что такое "откатить роль"? если уж разбираться... роль - это не более чем последовательность действий, объединённая для удобства чтения сценария... рель может как ставить что-то, так удалять и менять... установка пакета в каком-то смысле тоже роль, так как она описана достаточно подробно разработчиками ансибла - то её можно "отменить", то есть удалить пакет... если вы свою роль сможете разработать так же скурпулёзно, что бы не было конфликтов ни с кем, то сможете сделать команду что бы эту роль "отменить"
Warwar писал(а)Есть и более новые, не суть. Суть в том, что этими командами легко прописывается автостарт служб. А вот если службы прописываются в строковой переменной, то её автоматическое редактирование сопряжено с некоторыми трудностями.
у тебя ооочень старые сведенья...
В моём контексте "роль" не как в Ансибле, а как в виндовом сервере - настройка и запуск связанного набора из нескольких служб, причём для нескольких ролей службы могут пересекаться.
Тогда некорректное удаление одной роли может поломать другую.