
bebebe
08.05.2018
13:07:13
хуки гита ? или у ансибла тоже есть ? о_О
прощу прощения, не хуки, а таски
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

Google

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

bebebe
08.05.2018
13:11:30
а вот так я его использую:
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
Ну вот я же скинул хороший вариант, его просто надо разобрать и все

bebebe
08.05.2018
13:16:13

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

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

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

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:38:28

Алексей
09.05.2018
12:38:59

bebebe
09.05.2018
12:43:38

Алексей
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

kevit
09.05.2018
12:58:53


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 решает за меня часть проблем и мне пока норм.

Vadim
09.05.2018
13:07:03

Google

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

bebebe
09.05.2018
13:08:14

Vadim
09.05.2018
13:59:28

bebebe
09.05.2018
14:01:46

Vadim
09.05.2018
14:02:24

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