Sergey
В последнем случае именно агент и следит за тем, чтобы всегда быть обработанным.
Vadim
bebebe
я просто не могу это применять, но если даже и вкорячу, то все логи будут в job runner'e - дженкинс пайплайнах или логах pod'ов
bebebe
и в таком случае AWX немного теряет смысл
Vadim
bebebe
В принципе, со мной можно на "ты" - так удобнее. Здесь всё же интернет 😊
По сути вопроса - это типичная проблема stateful vs stateless. По дизайну Ансибл - stateless. Ты вводишь некое внешнее по отношению к Ансиблу состояние хоста - "обработан/не обработан". Понятное дело, что "искаропки" в Ансибле такого нет. Как только ты решишь, где будешь хранить состояние "этот хост уже обработан", тогда же ты сам себе дашь и ответ на вопрос "как это сделать".
Кстати, при таких занятных исходных данных, возможно, что-то другое подойдёт вместо Ансибла, агентом оборудованное.
да все верно,если глобально подходить к проблеме, то это licecycle management окружения. и весь ворох вопросов который с ним связан
bebebe
иначе приходится выпиливать такое
https://github.com/jow-/hfbk-ansible/blob/master/tasks/network-discover-ipv6ll.yml
поймите мою боль
Sergey
bebebe
а чем стандарт TR-069 плох?
как раз недавно о нем читал, и все бы ничего
но как там в поговорке, у меня очень извращенные желания. я так понял что tr-069 не покроет все мои хотелки
Sergey
Vadim
bebebe
Нутк k8s_raw
я понимаю, мне эти излишние примитивы не нужны, мне надо запускать по 30-60 подов в k8s, который я просто скейлю. моя хотела натраивать AWX на k8s кластер что бы он там все плейбуки в подготовленных окружениях запускал, а не допиливать этот функционал притом, что он явно релизнится через пару релизов.
там много возни в которой я не вижу смысла если честно, даже при условии что оно все взлетит (а оно взлетит)
Vadim
bebebe
впрочем, в эту полемику я не хотел бы вступать, за что платят редхату дяди
bebebe
от лица всех западно-восточных инженеров
bebebe
тут работяги тоже удивляются почему нет:
https://github.com/ansible/awx/issues/592
https://github.com/ansible/awx/issues/159
вот тут уже теплее
https://github.com/ansible/awx/pull/938
Nklya
потому что в кубер обычно деплоят из ci/cd, при чем здесь awx?
Vadim
Asgoret
t
bebebe
потому что в кубер обычно деплоят из ci/cd, при чем здесь awx?
у меня все workflow завернуты в k8s, когда мне не хватает мощностей для обслуживания инфрастуктуры анслиблом, я просто добавляю еще ноду, две в k8s кластер, что позволяет запускает еще больше ансибл плейбук параллельно.
притом что кластеров у меня несколько, и соответственно проблемы масштабирования в этом плане нет.
bebebe
Так там же прям ямлы есть
я же писал, что это вопрос времени, если редхат это не запилит в awx, то awx будет неприменим на большом количестве юз-кейсов
Vladimir
Мне кажется им не плохо для такой задачи будет redis, https://docs.ansible.com/ansible/latest/plugins/cache.html продолжение этой темы
Vladimir
там они смогут хранить retry
Vladimir
А так же можно будет делать что то с этим состоянием, и будет стейтфулл
bebebe
bebebe
я вообще рассматривал возможность хранить факты об окружении в etcd/redis/чем-нибудь еще.
пока до конца в голове не сложилась картина, но поводных камней как мне кажется должно быть мало
Vladimir
именно
Vladimir
у них есть же плагин для этого
Vladimir
и это отлично подойдет когда у тебя единое хранилище а не отдельный файлик
Vladimir
просто надо будет понять как он хранит там свои данные и делать локал екшены если надо будет
Vladimir
Cache plugin implement a backend caching mechanism that allows Ansible to store gathered facts or inventory source data
Vladimir
Он уже сейчас это может делать, вопрос просто как мержить это, для этого надо запустить 2 параллельно и посмотреть, и можно будет мержить для него
bebebe
да, у меня собственно так на другом проекте и так и сделано
есть 8 анслибл плейбук, которые запускаясь поочередно создают в облаке vm'ки и деплоят туда k8s. каждая плейбука запускается в отдельном pod'e на миникубе.
каждая из этих плейбук после себя обновляет в redis фактах стейт и передает дальше, это очень удобно
правда я накостылил это через pre и post хуки, но картины архитектурно это не меняет.
Vladimir
хуки гита ? или у ансибла тоже есть ? о_О
bebebe
хуки гита ? или у ансибла тоже есть ? о_О
прощу прощения, не хуки, а таски
pre_tasks и post_tasks
https://www.packtpub.com/mapt/book/networking_and_servers/9781784398293/2/ch02lvl1sec22/adding-pre-tasks-and-post-tasks-to-playbooks
bebebe
немного кривовато, но на них у меня получилось сделать внешнее хранилище фактов
Vladimir
Vladimir
Делая локал экшен до и посмле плейбука и все
bebebe
а вот так я его использую:
gather_facts: false
pre_tasks:
- include: tasks/env.yml action=load
post_tasks:
- include: tasks/env.yml action=save
bebebe
в конкретно этом случае - backend redis, перед которым стоит openresty (через lua достает json из редиса и отдает по http) - такое себе
bebebe
мне приходится использовать конвенцию специальную, все переменные с префиском 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
Ну вот я же скинул хороший вариант, его просто надо разобрать и все
bebebe
Vladimir
https://docs.ansible.com/ansible/latest/plugins/cache/redis.html
Vladimir
Там разные префиксы с разных хостов можно делать а потом мержить в остальные, но тут надо подумать конечно что бы не поломать данные
Vladimir
Мне кажется это самый простой вариант
Vladimir
можно даже попробовать единый префикс но мне кажется он может что то сломать, и с таймаутами подумать
bebebe
Мне кажется это самый простой вариант
да, все верно, только хочется все таки etcd (с перламутровыми пуговицам)
я видел такое https://docs.ansible.com/ansible/2.5/plugins/lookup/etcd.html сделанное через lookup
bebebe
при этом, если я правильно понимаю, эта проблема решена в saltstack из коробки
Vladimir
может быть я не использовал пока что солт
Vladimir
ну и там агенты там такой проблемы быть не может
Vladimir
кстати
bebebe
агенты мне архитектурно не подходят
но там не обязательно агенты нужны, salt может менеджить ноду без агента, по простому ssh
Vladimir
они пулят изменения и в любом случае они будут в 1 состоянии
Vladimir
А ну может быть, я о нем очень мало знаю
bebebe
я тоже только рядом стоял
Vladimir
ну можно написать в ансибл на гитхабе но я думаю они такое начнут пилить только если клиент большой попросит
bebebe
кстати, я тут в CI добавил проверку на ansible-lint, немного ощутил боли, но мои плейбуки стали выглядеть более опрятно
советую
https://github.com/willthames/ansible-lint
в нем как раз логика есть по стетейтам
Vladimir
либо самому написать
Vladimir
я его и так использую 👍
Vladimir
он у меня для ci плейбуков
bebebe
да. полезный инструмент.
Vladimir
и ролей но он часто ругается на нужные мне вещи в ролях по этой причине я его только на плейбуки натравливаю
Vladimir
а для ролей руками
Vladimir
а так 90% проблем мне vscode решает с нужными плагинами
Nklya
Корявые, но нужные места можно оверрайдить, чтобы линтер не ругался
bebebe
bebebe
Vladimir
А я в гелакси не деплою, у меня для этого gitlab :)
Vladimir
Так что жизнь я не попорчу никому ;)
wndrfl
bebebe
как решилось дело:
добавил динамический inventory - down_hosts, который по api ходит в мониторинг и спрашивает список всех хостов которые не доступны и добавляет их в ansible group: down_hosts
ansible запускаю так:
ansible-playbook ... --limit 'all:!down_hosts' ....
bebebe
http://docs.ansible.com/ansible/latest/user_guide/intro_patterns.html