@pro_ansible

Страница 461 из 625
bebebe
08.05.2018
13:07:13
Он уже сейчас это может делать, вопрос просто как мержить это, для этого надо запустить 2 параллельно и посмотреть, и можно будет мержить для него
если вокрлоайды изменяющие стейт никак между собой не пересекаются, например каждый изменяет только свой кусок namespace в etcd, то этой проблемы нет. да и в целом etcd переварит мержи, есть несколько стратегий помойму.

хуки гита ? или у ансибла тоже есть ? о_О
прощу прощения, не хуки, а таски pre_tasks и post_tasks https://www.packtpub.com/mapt/book/networking_and_servers/9781784398293/2/ch02lvl1sec22/adding-pre-tasks-and-post-tasks-to-playbooks

немного кривовато, но на них у меня получилось сделать внешнее хранилище фактов

Vladimir
08.05.2018
13:09:23
если вокрлоайды изменяющие стейт никак между собой не пересекаются, например каждый изменяет только свой кусок namespace в etcd, то этой проблемы нет. да и в целом etcd переварит мержи, есть несколько стратегий помойму.
Проблема в одном что у них нет поддержки для кеша etcd, и вопрос как они хранят это в ансиблем, я думаю так спец ключи и это можно мержить будет скриптами между друг другом

Google
Vladimir
08.05.2018
13:09:35
Делая локал экшен до и посмле плейбука и все

bebebe
08.05.2018
13:11:30
Делая локал экшен до и посмле плейбука и все
да, примерно так у меня и работает кривовато конечно https://hastebin.com/adozawocoq.cs вот мой tasks/env.yml

а вот так я его использую: gather_facts: false pre_tasks: - include: tasks/env.yml action=load post_tasks: - include: tasks/env.yml action=save

в конкретно этом случае - backend redis, перед которым стоит openresty (через lua достает json из редиса и отдает по http) - такое себе

мне приходится использовать конвенцию специальную, все переменные с префиском redisfact_ складываются в json и заливаются в хранилище. это не очень удобно таким образом, делая посреди плейбуки set_fact: redisfact_k8s_endpoint: blahblabhlbh добавляю в post_tasks его в redis {% set redisfact = {} %} {% for key in vars %} {% if key | match('^redisfact_') %} {% set _unused=redisfact.__setitem__(key, vars[key]) %} {% endif %} {% endfor %} {{ redisfact | to_json }}

Vladimir
08.05.2018
13:15:56
Ну вот я же скинул хороший вариант, его просто надо разобрать и все

Vladimir
08.05.2018
13:16:23
https://docs.ansible.com/ansible/latest/plugins/cache/redis.html

Там разные префиксы с разных хостов можно делать а потом мержить в остальные, но тут надо подумать конечно что бы не поломать данные

Мне кажется это самый простой вариант

можно даже попробовать единый префикс но мне кажется он может что то сломать, и с таймаутами подумать

bebebe
08.05.2018
13:18:52
Мне кажется это самый простой вариант
да, все верно, только хочется все таки etcd (с перламутровыми пуговицам) я видел такое https://docs.ansible.com/ansible/2.5/plugins/lookup/etcd.html сделанное через lookup

при этом, если я правильно понимаю, эта проблема решена в saltstack из коробки

Google
Vladimir
08.05.2018
13:22:35
может быть я не использовал пока что солт

ну и там агенты там такой проблемы быть не может

кстати

bebebe
08.05.2018
13:23:42
агенты мне архитектурно не подходят но там не обязательно агенты нужны, salt может менеджить ноду без агента, по простому ssh

Vladimir
08.05.2018
13:23:51
они пулят изменения и в любом случае они будут в 1 состоянии

А ну может быть, я о нем очень мало знаю

bebebe
08.05.2018
13:24:47
я тоже только рядом стоял

Vladimir
08.05.2018
13:26:34
ну можно написать в ансибл на гитхабе но я думаю они такое начнут пилить только если клиент большой попросит

bebebe
08.05.2018
13:26:48
кстати, я тут в CI добавил проверку на ansible-lint, немного ощутил боли, но мои плейбуки стали выглядеть более опрятно советую https://github.com/willthames/ansible-lint в нем как раз логика есть по стетейтам

Vladimir
08.05.2018
13:26:54
либо самому написать

я его и так использую ?

он у меня для ci плейбуков

bebebe
08.05.2018
13:27:47
да. полезный инструмент.

Vladimir
08.05.2018
13:28:30
и ролей но он часто ругается на нужные мне вещи в ролях по этой причине я его только на плейбуки натравливаю

а для ролей руками

а так 90% проблем мне vscode решает с нужными плагинами

Nklya
08.05.2018
13:30:42
Корявые, но нужные места можно оверрайдить, чтобы линтер не ругался

bebebe
08.05.2018
13:31:25
и ролей но он часто ругается на нужные мне вещи в ролях по этой причине я его только на плейбуки натравливаю
к сожалению, надо что бы ansible-galaxy при приеме нового релиза роли прогоняло по роли ansible-lint ;-)

Vladimir
08.05.2018
13:35:24
А я в гелакси не деплою, у меня для этого gitlab :)

Google
Vladimir
08.05.2018
13:35:52
Так что жизнь я не попорчу никому ;)

bebebe
09.05.2018
07:15:33
как решилось дело: добавил динамический inventory - down_hosts, который по api ходит в мониторинг и спрашивает список всех хостов которые не доступны и добавляет их в ansible group: down_hosts ansible запускаю так: ansible-playbook ... --limit 'all:!down_hosts' ....

http://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html

притом что dynamic inventory для хостов в оффлайне - это онлайнер. curl -sG -X GET -vvvv 'observer0:9080/gw/livestatus' --data-urlencode "q=GET hosts\nColumns: name\nFilter: stat e != 0" | jq '{"down_hosts": { "hosts": [ .[][0] ] }}'

Alexander
09.05.2018
11:41:44
Ansible Tower сейчас ставится на 18.04?

(чистая установка с нуля, не обновление)

bebebe
09.05.2018
11:42:42
Ansible Tower сейчас ставится на 18.04?
а какая разница, если у него есть возможность ставиться в виде docker контейнеров?

Alexander
09.05.2018
11:43:05
я, видимо, пропустил

а давно такая возможность появилась?

bebebe
09.05.2018
11:44:16
а давно такая возможность появилась?
Помойму спустя месяц или два после первого из релиза. Документация в репозитории

Nklya
09.05.2018
11:44:24
awx или тавер?

Vadim
09.05.2018
11:44:44
вряд ли именно тауэр поддерживается на убутне, но awx - это пожалуйста

Alexander
09.05.2018
11:45:06
вы меня смущаете) а в чём разница между ними?

bebebe
09.05.2018
11:45:14
О, прошу прощения. Я про awx толкую

Nklya
09.05.2018
11:45:20
бабло

Alexander
09.05.2018
11:45:29
http://docs.ansible.com/ansible-tower/latest/html/installandreference/release_notes.html#ansible-tower-version-3-2-4

я про вот это

bebebe
09.05.2018
11:46:06
я про вот это
Про tower ничего не могу сказать

Vadim
09.05.2018
11:46:12
Valery
09.05.2018
12:06:42
Насколько я знаю, тауер поддерживается только на 16.04

Google
Valery
09.05.2018
12:06:42
(убунту)

Проверял недавно , с 1.5-2 мес. назад

Alexander
09.05.2018
12:15:21
то есть awx и Tower это как Fedora и RHEL?

Vadim
09.05.2018
12:15:47
yep

Alexander
09.05.2018
12:16:19
а Tower это некая версия awx + какие-то патчи сверху? или это просто awx просто переименованная?

Vadim
09.05.2018
12:16:51
патчи

bebebe
09.05.2018
12:43:38
в 2.5.0 сломан consul, grafana
Понял. Не аффектит

Алексей
09.05.2018
12:44:20
в ансибле у меня уже привычка таскать с собой рабчие модули. но ядерные не особо потаскаешь

bebebe
09.05.2018
12:48:19
в ансибле у меня уже привычка таскать с собой рабчие модули. но ядерные не особо потаскаешь
я это победил так, делаю контейнер base image с ansible нужной версии от него наследую ansible-envname куда запиихивается inventory и все прочее необходимое далее каждая плейбука наследуется от ansible-envname:latest очень удобно в плане деливери. но если я изменяю первый base image с ansible, мне приходится в CI пересобирать все что от него наследуется и все что наследуется от наследуемого и т.д.

Sergey
09.05.2018
12:49:16
однако..........

ты, видимо, какие-то хитрые модули пользуешь?

bebebe
09.05.2018
12:50:51
однако..........
хм, вполне обычная практика

bebebe
09.05.2018
13:03:24
а можно пример докерфайла для плейбуки? выглядит достаточно интересно
да, все достаточно прозрачно: Базовый image: https://hastebin.com/fihezaboro.nginx От него наследуется image для определенного окружения: https://hastebin.com/zilotahiba.bash И от него наследуется уже docker image с нужной мне плейбукой: https://hastebin.com/ojowomekup.sql завернуто в CI который билдит первый image так: docker build -t ansible:2.5.0.0 .второй image с данными об окружении: docker build --build-arg BASE_IMAGE=ansible:2.5.0.0 -t ansible-env:latest .и третий с плейбукой docker build --build-arg BASE_IMAGE=ansible-env:latest -t foobar-playbook:latest

если у вас внедрен и работает CI/CD процесс, то оно пересобирается само, если например поменять первый image

Vadim
09.05.2018
13:04:23
но не проще ли подсовывать inventory вольюмом?

bebebe
09.05.2018
13:06:14
но не проще ли подсовывать inventory вольюмом?
инвентори для окружений (в том числе и динамические) я храню в докер образах (и в гите соответственно), для фиксации окружения для плейбуков которые запускаются поверх я подозреваю что это место можно улучшить, но CI решает за меня часть проблем и мне пока норм.

Google
Vadim
09.05.2018
13:07:35
статические инвентори я бы скорее подсовывал при запуске контейнера (но опять же, я сильно пристрастился к AWX)

bebebe
09.05.2018
13:08:14
а, ну разве что если там чистая динамика - тогда имеет смысл, да
Да. Всего 5 инвентори, один yml и четыре динамики

а, ну разве что если там чистая динамика - тогда имеет смысл, да
У меня ещё богатые group/host vars. И запихивая их в контейнер с плейбуками я гарантирую совместимость между переменными и самими тасками

Vadim
09.05.2018
13:59:28
У меня ещё богатые group/host vars. И запихивая их в контейнер с плейбуками я гарантирую совместимость между переменными и самими тасками
справедливо, но раз они не зависят от версии энсибла их логичнее было бы версионировать по-другому

bebebe
09.05.2018
14:01:46
справедливо, но раз они не зависят от версии энсибла их логичнее было бы версионировать по-другому
Все правильно, версия ансибла у меня в базовом контейнере, когда я делаю изменение происходит CI который делает check syntax, оно конечно все не покрывает, но пару раз, в том числе и сегодня с 2.5.2.0 спасало

bebebe
09.05.2018
14:07:34
хмм, интересная идея
Время на внесение изменений увеличивается, но компенсируется довольно большим процентом успешных деплойментов окружения. Все плюсы и минусы CI/CD

+ довольно хорошо вырисовывается workflow для ваших окружений и пресловутый life cycle management Впрочем это уже наверное здесь оффтопик

kevit
09.05.2018
14:14:45
Я думаю интересно для любого кто думал про business continuity

Тут бывает что даже через год восстановить рабочее окружение тяжело. То pip ушатают, то ориджины протухнут

А вендрить докером или галакси уже религиозный вопрос. Докером оно удобнее)

bebebe
09.05.2018
14:42:42
А вендрить докером или галакси уже религиозный вопрос. Докером оно удобнее)
в общем случае, стандартом де фатко, деливерить нужно workload'ы, а не артефакты в виде ansible ролей с нужным pin коммитом или других исходников. Кастомеру требуется экспретиза как их правильно применять на своих окружениях.

Страница 461 из 625