LINUX.ORG.RU
ФорумTalks

Давайте поговорим про provisioning

 , , , ,


0

3

Первое, что хотелось бы обсудить — это дистрибуция дотфайлов и конфигов. Тема довольно избитая и заезженная, много было копий сломано и вариантов перепробовано, пока не подошёл вплотную к идеальному варианту: ansible. Он делает это удобно, просто и достаточно прозрачно, есть возможность собирать конфиги из темплейтов, что для меня есть большой плюс, так как использую я разные платформы(десктоп — macOS, виртуалки для личных проектов — Debian, виртуалки для рабочих проектов — CentOS). Однако, использование ansible вызывает ряд проблем, жить с которыми довольно неприятно, а именно:

  • Его нужно устанавливать. Для каждой из операционных систем приходится писать свой магический костыль, поскольку pip не всегда есть из коробки, а то, что в системном репозитории, скорее всего уже протухло и завоняло. Плюс ко всему, возможный переход на python3 тоже не прибавляет радости. В итоге имеем необходимость держать в репозитории bootstrap-скрипт и поддерживать его в актуальном состоянии.
  • Фатальных несовместимостей между 2.0 и 2.2 больше, чем между 2.0 и 1.8. И это не какие-нибудь deprecated или experimental модули, которые чаще всего можно переписать на той же логике ansible, благо есть возможность дёргать шелл, а ошибки парсинга плейбуков. К примеру, with_dict в 2.2 и 2.0 имеет совершенно разный синтаксис и это никак не исправить.

Идеальным вариантом для меня было бы что-то похожее на ansible, но только написанное на Go. Чтобы получился отдельный готовый статически слинкованный бинарник, который без лишних телодвижений можно скачать, натравить на конфиг и получить результат. Совместимость с ansible вовсе не обязательна, важна лишь похожая логика. Я когда-то писал свой стрёмный велосипед для таких дел, но мне стало стыдно, возможно зря. Не появилось ли на горизонте чего-нибудь подобного?

Второй момент: provisioning на мобильных устройствах, а конкретно на Android. Насколько я знаю, с MDM у него всё очень плохо, а точнее никак. Полностью и безоговорочно доверяться гуглу тоже как-то не хочется, он однажды утащил к себе без спроса все мои телефонные номера и после этого пользоваться его услугами больше не захотелось, всё-таки хочется больше контроля и предсказуемости(на абсолютные значения не претендую, если что). Не то что бы я часто менял или перепрошивал телефоны, но иметь возможность быстро и не очень затратно развернуться в привычное окружение(а при желании и мультиплицировать его на другие семейные устройства) было бы неплохо. Знаю про titanium backup, но не знаю имеет ли он возможность развернуть один и тот же бэкап на разные устройства, а также предоставлять возможность централизованно обновлять парк устройств(по аналогии с плейбуками ansible: применил роль «установить такое-то приложение с таким-то набором данных», и оно раскатилось на все девайсы). Что-нибудь посоветуете?

ansible на go с конфигами на nodejs и регэкспами на rust

Заверните этому в батмод и гироскутер пару аккумуляторов от sosung deathnote s7. За мой счет.

svr4 ()

Про мобильные устройства ничего не скажу, но есть опыт с ansible.

Его нужно устанавливать.

На самом деле нет. Достаточно подтянуть в PATH пути до ансибловых «запускалок», и дальше все работает как по маслу. Конечно, если нужно использовать какие-то необычные модули то потребуются дополнительные либы, но их ставить тоже не обязательно - можно собрать себе дистрибутивчик со всем необходимым и просто таскать в виде тарбола или чего-то вроде того. Единственная проблема возникнет если требуется что-то типа libssl (или как оно там), но тут уже никакой pip не нужен, все ставится средствами ОС.

Фатальных несовместимостей между 2.0 и 2.2 больше, чем между 2.0 и 1.8.

Более того, каких-то киллерфич во второй ветке нет, по-этому я сижу до сих пор на 1.9. Я уже несколько раз напарывался на то, что при очередном обновлении все ломается, больше пока они там все не устаканят я экспериментировать не хочу. И вообще единственное, что я жду - что запилят нормальные логи при работе со списком item'ов, что там сейчас постоянно ковыряют и зачем я понять не могу.

alozovskoy ★★★★★ ()

В итоге имеем необходимость держать в репозитории bootstrap-скрипт и поддерживать его в актуальном состоянии.

Первый раз вижу эту претензию обращенную к ansible. У меня bootstrap-скрипт для salt-мастера - это ansible-playbook, как раз из-за того что его не надо бутстрапить вовсе.

Может быть не надо использовать для работы с configuration management дистрибутивы/оси, в которых всё протухло и/или нет pip. А то так ещё и ssh можно начать на go переписывать.

alpha ★★★★★ ()

Сейчас модно писать «Давайте поговорим за provisioning».

te111011010 ()

Надо просто все на го переписать тебе и проблем не станет. pip же сильно сложно дергать.

slaykovsky ★★★ ()

подошёл вплотную к идеальному варианту: ansible

% ansible --version|head -1
ansible 2.1.1.0
% grep 'time.sleep(0' /usr/lib/python2.7/dist-packages/ansible/ -r
/usr/lib/python2.7/dist-packages/ansible/plugins/strategy/__init__.py:                    time.sleep(0.0001)
/usr/lib/python2.7/dist-packages/ansible/plugins/strategy/__init__.py:                time.sleep(0.0001)
/usr/lib/python2.7/dist-packages/ansible/plugins/strategy/__init__.py:            time.sleep(0.005)
/usr/lib/python2.7/dist-packages/ansible/plugins/strategy/free.py:            time.sleep(0.001)
/usr/lib/python2.7/dist-packages/ansible/plugins/connection/accelerate.py:                    time.sleep(0.1)
/usr/lib/python2.7/dist-packages/ansible/executor/process/result.py:                    time.sleep(0.0001)
/usr/lib/python2.7/dist-packages/ansible/modules/core/utilities/helper/accelerate.py:                        time.sleep(0.1)
/usr/lib/python2.7/dist-packages/ansible/modules/core/utilities/helper/accelerate.py:            time.sleep(0.2)
/usr/lib/python2.7/dist-packages/ansible/modules/core/cloud/amazon/ec2_group.py:                    time.sleep(0.1)
/usr/lib/python2.7/dist-packages/ansible/modules/core/cloud/amazon/ec2_vpc.py:                            time.sleep(0.1)
/usr/lib/python2.7/dist-packages/ansible/modules/extras/cloud/amazon/ec2_vpc_subnet.py:            time.sleep(0.1)

Идеально! Программа моей мечты

disarmer ★★★ ()
Ответ на: комментарий от disarmer

time.sleep(0 в коде Ansible

Глянул сейчас в коде из ветки devel — почти всё это поубирали, а в скриптах для amazon там прокомментировано, почему нужны задержки.

LeNiN ()
Ответ на: time.sleep(0 в коде Ansible от LeNiN

Насколько я помню, не всё поубирали, а перенесли в переменные.

Тут архитектура виновата, а её так быстро не поправишь. В итоге ansible 2.1 выжирает до 2 ядер xeon и при этом тормозит (выполняется процентов на 50 дольше, чем те же плейбуки на 1.7.4), и это не сильно зависит от плейбуков (даже простой плейбук с sleep пожирает CPU)

disarmer ★★★ ()

мда. Ansible на каждый шаг дергает ssh? Фтопку. В результате простейший сервер из 2 ролей Апач и Мускл, проверяет состояние 30 секунд. Пинг минимальный, сервер в Виртуалбокс.

Bers666 ★★★★★ ()
Ответ на: комментарий от Bers666

..Плохо, что норм модулей нет. Крайности - или «модуль» под 1 дистр, 1 релиз. Либо не включает нужное мне. Либо тянет за собой кучу зависимостей (например семейство debops). В общем приходится писать свои велосипедные модули.
А так конечно выглядит круто. По сравнению с puppet проще и нагляднее, но иногда эта простота вылазит боком, переменную объявить - целое приключение.

Bers666 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.