bebebe
притом что 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
Ansible Tower сейчас ставится на 18.04?
Alexander
(чистая установка с нуля, не обновление)
bebebe
Ansible Tower сейчас ставится на 18.04?
а какая разница, если у него есть возможность ставиться в виде docker контейнеров?
Alexander
я, видимо, пропустил
Alexander
а давно такая возможность появилась?
bebebe
а давно такая возможность появилась?
Помойму спустя месяц или два после первого из релиза. Документация в репозитории
Nklya
awx или тавер?
Vadim
вряд ли именно тауэр поддерживается на убутне, но awx - это пожалуйста
Tadeusz
Alexander
вы меня смущаете) а в чём разница между ними?
bebebe
О, прошу прощения. Я про awx толкую
Nklya
бабло
Alexander
http://docs.ansible.com/ansible-tower/latest/html/installandreference/release_notes.html#ansible-tower-version-3-2-4
Alexander
я про вот это
bebebe
я про вот это
Про tower ничего не могу сказать
TimeSpaceEnergy
Насколько я знаю, тауер поддерживается только на 16.04
TimeSpaceEnergy
(убунту)
TimeSpaceEnergy
Проверял недавно , с 1.5-2 мес. назад
Alexander
то есть awx и Tower это как Fedora и RHEL?
Vadim
yep
Alexander
а Tower это некая версия awx + какие-то патчи сверху? или это просто awx просто переименованная?
Vadim
патчи
bebebe
в 2.5.0 сломан consul, grafana
Понял. Не аффектит
Aleksey
в ансибле у меня уже привычка таскать с собой рабчие модули. но ядерные не особо потаскаешь
bebebe
в ансибле у меня уже привычка таскать с собой рабчие модули. но ядерные не особо потаскаешь
я это победил так, делаю контейнер base image с ansible нужной версии от него наследую ansible-envname куда запиихивается inventory и все прочее необходимое далее каждая плейбука наследуется от ansible-envname:latest очень удобно в плане деливери. но если я изменяю первый base image с ansible, мне приходится в CI пересобирать все что от него наследуется и все что наследуется от наследуемого и т.д.
Sergey
однако..........
Sergey
ты, видимо, какие-то хитрые модули пользуешь?
bebebe
однако..........
хм, вполне обычная практика
bebebe
а можно пример докерфайла для плейбуки? выглядит достаточно интересно
да, все достаточно прозрачно: Базовый 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
bebebe
если у вас внедрен и работает CI/CD процесс, то оно пересобирается само, если например поменять первый image
Vadim
но не проще ли подсовывать inventory вольюмом?
bebebe
но не проще ли подсовывать inventory вольюмом?
инвентори для окружений (в том числе и динамические) я храню в докер образах (и в гите соответственно), для фиксации окружения для плейбуков которые запускаются поверх я подозреваю что это место можно улучшить, но CI решает за меня часть проблем и мне пока норм.
Vadim
статические инвентори я бы скорее подсовывал при запуске контейнера (но опять же, я сильно пристрастился к AWX)
bebebe
а, ну разве что если там чистая динамика - тогда имеет смысл, да
Да. Всего 5 инвентори, один yml и четыре динамики
bebebe
а, ну разве что если там чистая динамика - тогда имеет смысл, да
У меня ещё богатые group/host vars. И запихивая их в контейнер с плейбуками я гарантирую совместимость между переменными и самими тасками
Vadim
У меня ещё богатые group/host vars. И запихивая их в контейнер с плейбуками я гарантирую совместимость между переменными и самими тасками
справедливо, но раз они не зависят от версии энсибла их логичнее было бы версионировать по-другому
bebebe
справедливо, но раз они не зависят от версии энсибла их логичнее было бы версионировать по-другому
Все правильно, версия ансибла у меня в базовом контейнере, когда я делаю изменение происходит CI который делает check syntax, оно конечно все не покрывает, но пару раз, в том числе и сегодня с 2.5.2.0 спасало
bebebe
хмм, интересная идея
Время на внесение изменений увеличивается, но компенсируется довольно большим процентом успешных деплойментов окружения. Все плюсы и минусы CI/CD
bebebe
+ довольно хорошо вырисовывается workflow для ваших окружений и пресловутый life cycle management Впрочем это уже наверное здесь оффтопик
kevit
Я думаю интересно для любого кто думал про business continuity
kevit
Тут бывает что даже через год восстановить рабочее окружение тяжело. То pip ушатают, то ориджины протухнут
kevit
А вендрить докером или галакси уже религиозный вопрос. Докером оно удобнее)
bebebe
А вендрить докером или галакси уже религиозный вопрос. Докером оно удобнее)
в общем случае, стандартом де фатко, деливерить нужно workload'ы, а не артефакты в виде ansible ролей с нужным pin коммитом или других исходников. Кастомеру требуется экспретиза как их правильно применять на своих окружениях.
bebebe
я столкнулся с такой болью: ansible (2.5.0 в том числе) не умеет параллельно запускать dynamic inventory (в моем случае максимум 6), притом ишуев по этому поводу на гитхабе я не видел на динамик инвентори уходит сейчас около 20 секунд и если нужно что-то затестить по быстрому, то приходится их выключать. пушо ansible постоянно их дергает.
bebebe
можно написать собственную оркестрацию, сделав один динамик инвентори и запуская в паралеллии другие - но я пока берегу себя от этой мысли
Nikita
Всем привет, подскажте, а можно ли в модуле copy сделать так, чтобы при копировании файла создавалась директория куда он копируется?
matt
нельзя
matt
и в template нельзя
matt
одной таской создаёшь директорию, другой копируешь файл
Asten
зато дерриктории создаются по всему пути
Nikita
Ок, сенкс
Nikita
А ещё вопрос, можно ли в ansible when: x is search() сделать отрицание? То есть если ли подстрока не найдена, тогда выполнить
Nikita
is not более подробно http://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html
То есть вот такая конструкия должна работать?
Nikita
when: (ansible_default_ipv4.address is not("192.168."))
bebebe
when: (ansible_default_ipv4.address is not("192.168."))
не знаю, зачем круглые скобоки вокруг 192.168?
Nikita
Чтобы or перечислять
Nikita
Не, валится с ошибкой
bebebe
Не, валится с ошибкой
when: element not in array
Nikita
А он разве не элемент целиком будет искать?
bebebe
в этом случае целиком
bebebe
вам нужен match если вы хотите более богато искать
Nikita
Не, мне нужен search чтобы искать подстроку
Nikita
Если я правильно доку прочитал
bebebe
есть несколько способов array | select('match', '192.168') или array | join | match('192.168')
Nikita
Эм…для меня, как для человека плохо знакомым с питоном, чет сложновато. Но я ща попробую.
Nikita
То есть должно быть такое - debug: msg: "OK" when: ansible_default_ipv4 array | join | match('192.168') ?
bebebe
Издалека похоже на правду
Nikita
no filter named 'array'.