Fire
Fire
Все плейбуки в одном репозитории.
Fire
Ибо они тривиальны и просто проигрывают роли.
Дмитрий
George
Я очень советую посмотреть git-vendor. Он немного необычный, но очень разумный.
checkdiff
А собирать их вместе руками?
Мы через galaxy собираем.
Плейбук и инвентарь в отдельном репозитории отвечает за одно окружение. Внутри может быть много плейбуков с плеями.
Vladimir
Используем gilt https://gilt.readthedocs.io/en/latest/
Пока довольны)
Fire
Sergey
Alex
А что не так с сабмодулями?
Alex
Fire
Fire
Вы не умеете работать с сабмодулями?
fs
привет всем, кто может вкратце сказать что такое play в ansible, ато чет документация мне не доходит...
fs
ок спс
Гайрат
George
Вы не умеете работать с сабмодулями?
Я не умею. Как submodule работает знаю, а как сделать так, чтобы можно было комфортно работать, а не заниматься defensive programming, не знаю.
k
Отделение Bereke Bank
Отделение Bereke Bank
Ну и всякие варнинги когда гений разработчик нахуярил зависимостей в свою роль, а ты хочешь одну из этих зависимостей другой версии
George
А можно уточнить про недостатки galaxy?
Что неудобно, какие кейсы не решает.
ansible-galaxy collection update:
ansible-galaxy collection: error: argument COLLECTION_ACTION: invalid choice: 'update' (choose from 'init', 'build', 'publish', 'install')Единственный метод что-то обновить - стереть и скачать заново. При этом процесс "стёр/скачал" полностью ручной и никаким образом не менеджится. Если со старой копии файл пролезет, об это никто не узнает. Аудита нет, reinstall нет, update нет, управления установленными коллекциями нет, lock-файла нет.
Gleb
так если оно в ci делается смысл вообще стейт хранить?
Gleb
даже стирать не надо
k
А, понял
Я в контейнере ансибл запускаю, там изначально пусто и force не нужен
Каждый раз качаются роли фиксированных версий и это кешируется до изменения requirements-файла
Ну а локально типа make roles_refresh хватает когда разрабатываю
k
Спасибо
Anonymous
Кто-нибудь знает, почему task:
- name: Accept 1234 port connections iptables: chain=INPUT protocol=tcp match=tcp destination_port=1234 match=state ctstate=NEW jump=ACCEPT
делает из правила:
-A INPUT -p tcp -m tcp --dport 1234 -m state --state NEW -j ACCEPT
вот такую кашу:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT
?
Full
Вероятно, потому, что всем плевать на порядок аргументов, кроме тебя.
В смысле, это архитектурно так. ЕМНИП тут недавно один amarao упоминал, что ансибл предпринимает отдельные усилия, чтоб порядок выдержать, но это относилось не к аргументам а к спискам значений.
Vladislav 👻
Народ, подскажите, что-то запутался и кажется начинаю лепить горбатого. Есть центос и оракл и базовая роль по установке пакетов. Надо разный список пакетов ставить, в зависимости от ОС. И тут я завис, где и как ставить условие
Lamobot
inqfen
inqfen
И передавать нужный в зависимости от os
Vladislav 👻
Это я понимаю, не могу понять, где правильнее сделать проверку? Наверно просто сделать два таска и в одном проверка на одну ОС, а в другом - другую?
Vladislav 👻
Или инклуд файла таски в зависимости от семейства ОС?
Lamobot
Lamobot
Ну или тасок, если что-то более сложное нужно
Vladislav 👻
А переменных, это через vars папку в роли?
inqfen
- name: install packages
yum:
name: "{{ list1 if os1 else list2 }}"
state: latest
Попробуй что-то типа того
inqfen
Если у тебя разница только в 1 таске
inqfen
по итогу вычисления jinja выражения у тебя останется 1 конкретный лист
inqfen
Кстати да, include_vars будет более явно
inqfen
И менее магически
Vladislav 👻
inqfen
Konstantin
Alex
Так и не услышал ни одного недостатка сабмодулей
Balagur
а как под awx обновить сабмодули?
fs
и так, я так понял по этой статье что play все что идет после - hosts ?
fs
ато как то все размыто
Rostislav (aka RosT)
Доброго,
vars:
ports:
- 80
- 443
ips:
- 10.0.0.1
- 10.0.0.2
- 10.0.0.3
Как списки скомбинировать так, чтобы в итоге получилось
...
with_items:
- { ip: 10.0.0.1, port: 80}
- { ip: 10.0.0.1, port: 443}
- { ip: 10.0.0.2, port: 80}
- { ip: 10.0.0.2, port: 443}
- { ip: 10.0.0.3, port: 80}
- { ip: 10.0.0.3, port: 443}
Lamobot
George
Gleb
George
Если у тебя при этом каждый раз install для зависимостей, ты снижаешь производительность. Если чёрти-что, то и на выходе чёрти-что.
Gleb
Gleb
один вообще можешь любую дичь делать
Alex
Владимир
Rostislav (aka RosT)
Я и твой кот
Тут loop & lookup не любят? :)
Sergey
Sergey
George
Дичь. Оркестратор на Ансибле.
Catesian - это ещё вполне уровень ansible'а. Сделать matrix из пары массивов это вполне себе адекватный код.
Rostislav (aka RosT)
Какую задачу решаешь?
Ну я не думаю, что это в рамках конфы.. Но если кратко, то есть кластера k8s по разным подсетям их ноды, + отдельные подсети порты сторонних сервисов. Всё жестко зарезано СБ по сети.
Собственно надо уметь оперативно проверять, что сетевая связность не исчезла
George
- name: Check if node can reach other nodes over public net
hosts: osds,mons,mgrs
gather_facts: true
gather_subset: network
tasks:
- name: check if public network is ok
assert:
that:
- public_network is defined
- ansible_all_ipv4_addresses|ipaddr(public_network)|length > 0
- name: Ping neighbor
command: ping -c 1 {{ neighbor_ip }} -w 1
changed_when: false
vars:
neighbor_ip: '{{ (hostvars[item].ansible_all_ipv4_addresses|ipaddr(public_network))[0] }}'
with_items: '{{ groups.osds + groups.mons + groups.mgrs }}'
kevit
Не понимаю чего вы взъелись, аудит ансиблом отличная тема
George
Не аудит, а "тесты". Главная проблема тестов в ансибле - они очень мало говорят о том, что именно сломалось. Плюс, они не дают все сообщения, а ломаются на первом попавшемся.
kevit
Ассерты?
Отделение Bereke Bank
George
Тесты пишут на языках программирования, а ансибл плох для языков программирования. Да, иногда проще на Ансибле, но testinfra лучше.
kevit