Sergey
В последнем случае именно агент и следит за тем, чтобы всегда быть обработанным.
Vadim
вместо AWX уж лучше взять jenkins и настроить там ansible-plugin и k8s-pipeline (в моем случае) и радоваться
Ну если нравиться крутить свой рест-интерфейч, то пуркуа бы и не па?
bebebe
Ну если нравиться крутить свой рест-интерфейч, то пуркуа бы и не па?
вы меня немного не поняли, я удивлен почему при таком хорошом подходе и реализации rest api, они так не понятно обошлись с окружениями в которых запускается ansible
bebebe
я просто не могу это применять, но если даже и вкорячу, то все логи будут в job runner'e - дженкинс пайплайнах или логах pod'ов
bebebe
и в таком случае AWX немного теряет смысл
bebebe
А что не так с воркерами? Запускай где надо, добавляй в имадж что надо и сортируй лейблами
мне нужно добавлять в AWX плейбуки оркестрацию что бы эти плейбуки запускали pod'ы например или дергали CI/CD которые запускают поды. мне это очень не нравится, если бы AWX можно было бы подружить с k8s как worker env окружение, это было бы просто замечательно. я не понимаю почему такого еще не сделано. например тот же gitlab/jenkins/etc
bebebe
В последнем случае именно агент и следит за тем, чтобы всегда быть обработанным.
все приобретает немного другие краски, около 300 хостов у меня на openwrt и на слааабеньком железе я гуглил openwrt(lua) connection драйверы для ansible https://github.com/lefant/ansible-openwrt начинание хорошее, но видимо запущенное самому это допиливать у меня нет ресурсов к сожалению
bebebe
иначе приходится выпиливать такое https://github.com/jow-/hfbk-ansible/blob/master/tasks/network-discover-ipv6ll.yml поймите мою боль
bebebe
а чем стандарт TR-069 плох?
как раз недавно о нем читал, и все бы ничего но как там в поговорке, у меня очень извращенные желания. я так понял что tr-069 не покроет все мои хотелки
bebebe
тогда делать своё годное что-то.
видимо да, но нет ресурсов к сожалению, поэтому решаю на чем есть. хотя идея и вправду ок с tr069
bebebe
Нутк k8s_raw
я понимаю, мне эти излишние примитивы не нужны, мне надо запускать по 30-60 подов в k8s, который я просто скейлю. моя хотела натраивать AWX на k8s кластер что бы он там все плейбуки в подготовленных окружениях запускал, а не допиливать этот функционал притом, что он явно релизнится через пару релизов. там много возни в которой я не вижу смысла если честно, даже при условии что оно все взлетит (а оно взлетит)
bebebe
Эмм, ну за такое граждане платят неплохие деньги редхату. А вообще, там сильно много деталей чтобы это было "изкоробки"
не знаю, не совсем уверен что именно за это платят. в интересах самого AWX что бы он мог интегрироваться с k8s для запуска ворклоадов, в этом то так сказать много смысла. сейчас это чуть ли не каждая собака делает
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?
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
я вообще рассматривал возможность хранить факты об окружении в 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
Он уже сейчас это может делать, вопрос просто как мержить это, для этого надо запустить 2 параллельно и посмотреть, и можно будет мержить для него
если вокрлоайды изменяющие стейт никак между собой не пересекаются, например каждый изменяет только свой кусок namespace в etcd, то этой проблемы нет. да и в целом etcd переварит мержи, есть несколько стратегий помойму.
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
если вокрлоайды изменяющие стейт никак между собой не пересекаются, например каждый изменяет только свой кусок namespace в etcd, то этой проблемы нет. да и в целом etcd переварит мержи, есть несколько стратегий помойму.
Проблема в одном что у них нет поддержки для кеша etcd, и вопрос как они хранят это в ансиблем, я думаю так спец ключи и это можно мержить будет скриптами между друг другом
Vladimir
Делая локал экшен до и посмле плейбука и все
bebebe
Делая локал экшен до и посмле плейбука и все
да, примерно так у меня и работает кривовато конечно https://hastebin.com/adozawocoq.cs вот мой tasks/env.yml
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
Ну вот я же скинул хороший вариант, его просто надо разобрать и все
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
и ролей но он часто ругается на нужные мне вещи в ролях по этой причине я его только на плейбуки натравливаю
к сожалению, надо что бы ansible-galaxy при приеме нового релиза роли прогоняло по роли ansible-lint ;-)
Vladimir
А я в гелакси не деплою, у меня для этого gitlab :)
Vladimir
Так что жизнь я не попорчу никому ;)
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