Vladislav 👻
а разве так можно?
Vladislav 👻
https://github.com/ansible/ansible/issues/11175
Vladislav 👻
вижу вот это только, но все равно какая-то странная фича
Vadik
Я вот и спрашиваю просто как бы получил задание дать програмистам путь к playbook они говорять как нам указать путь к ним , я говорю максимум что могу это роли посоздавать а путь ... )
Я просто все из папки с плейбуками выполняю
Anton
Путь к плейбуку - обязательный параметр команды ansible-playbook. Если нужна переменная - пусть будет переменная PLAYBOOK_PATH, и вызывать просто ansible-playbook $PLAYBOOK_PATH
Asgoret
Добрый день, коллеги
Кейс:
Есть вставляемый конфиг, который имеет собственный стиль (пустые строки, проблемы). Когда делаю include, то правило касательно пробелов соблюдается только для первой строки. Все остальные вставляются от 0 позиции (те вначале)
Что ожидаю:
data:
conf: |
# General
some data
Что получаю:
data:
conf: |
# General
some data
Что было испробовано: |/|+/|-/""/''/[]
Есть идеи?
Vadim
Артем
conf: |2
Asgoret
conf: |2
не сработало, последующий текст все равно стартует от начала строки
Артем
смотри, вот тестовый плейбук:
`---
- name: 'Ololo tasks'
hosts: all
connection: local
gather_facts: no
vars:
ololo: |2
ololo1
ololo2
tasks:
- debug: msg="{{ ololo }}"
`
Артем
ох, кривости, извиняюсь)
Артем
короче, для some data добавь пробелы ещё
Alex
Асинхронночка в ансибл огонь)
Asgoret
Alex
Неделю юзаю код асинхронный.
Bogdan (SirEdvin)
Эм, асинхронность в ансибл?)
Bogdan (SirEdvin)
Bogdan (SirEdvin)
А в доку можно ткнуть?)
Alex
Я в метро гугли async ansible
Bogdan (SirEdvin)
Забавно)
Alex
У меня с полпинка завелось, никаких сложностей не возникло.
Timur
Alex
Timur
unarchive например не поддерживает
Alex
- name: Stop wildfly
service:
name: wildfly
state: stopped
register: stop_wildfly
async: 120
poll: 0
- name: Waiting until wildfly stopped
async_status:
jid: "{{ stop_wildfly.ansible_job_id }}"
register: job_result
until: job_result.finished
retries: 15
delay: 15
Вот кусок из плейбука для примера.
Alex
Если нужно остановить десяток другой вайлдфлаев, так он отработает быстрее.
Alex
archive и unarchive имеют баг с экслюдами, поэтому я через шелл написал таск. А мы же понимаем что ждать пока он выполниться нам не обязательно, поэтому выполняем асинхронно, и пока создаётся архив делаем другие таски.
- name: Create archive liferay from source zone
shell: "tar {% for ex_path in exclude_paths[side_name[:3]] %}--exclude={{ ex_path }} {% endfor %}-c -z -f /tmp/liferay.{{ side_name[:3] }}.{{ ansible_date_time.date }}.tgz liferay"
args:
chdir: /opt
warn: false
register: src_archive
async: 1800
poll: 0
Alex
дампы бд туда же, старт сервисов, нотификейшены, чистка временных кусочков после работы, установка пакетов. Это уже не маленький список который можно распараллелить и ускорить время выполнения.
Vladislav 👻
Господа, что делать, когда одна роль использует питон2, а другая питон3?
Vladislav 👻
как в одном плейбуке это увязать нормально?
Alex
Vladislav 👻
эммм?
Vladislav 👻
и где определять интерпретатор, в роли?
Alex
- name: Unlock remote access to hosts
hosts: "all"
gather_facts: false
vars:
python: или как его там
tasks:
- some_tasks
- name: Unlock remote access to hosts
hosts: "all"
gather_facts: false
vars:
python: или как его там
tasks:
- some_tasks
Vladislav 👻
Кажется понял, ща протестирую
Vladislav 👻
при dependencies не работает, сейчас попробую без
Vladislav 👻
все, разобрался, спасибо за наводку 👍
Alexander
Как мне для роли тег пропустить в плейбуке?
Andrey
Alexander
Куда это?
Andrey
ansible-playbook --skip-tags=SKIP_TAGS ...
Alexander
Я хочу в плейбуке
Andrey
Я хочу в плейбуке
Я бы на вашем месте роль разбил на несколько частей в этом случае...
Alexander
Ну тогда ладно
ℭ𝔞𝔯𝔯𝔬𝔩
Я тут хочу странного.... есть кучка var files с частями словаря, как бы их в плейбуке в один лист словарей собрать? Пример:
app1.yml
app:
- name: app1
path: foo
app2.yml
app:
- name: app2
path: bar
ℭ𝔞𝔯𝔯𝔬𝔩
А собрать бы такое:
apps:
- name: app1
path: foo
- name: app2
path: bar
Sergey
Timur
ℭ𝔞𝔯𝔯𝔬𝔩
ℭ𝔞𝔯𝔯𝔬𝔩
В итоговом списке словарей этого ключа верхнего уровня вовсе быть не должно
Sergey
ℭ𝔞𝔯𝔯𝔬𝔩
Очень важен. Если его правильно выбрать, то без приседаний можно список итоговый собрать.
Итак, входные данные:
var/app1.yml
app:
- name: app1
path: foo
var/app2.yml
app:
- name: app2
path: bar
И переменная с выбором apps_list: [ app1, app2]
я решил свой вопрос вот таким образом:
- name: apps | Combine list of apps
block:
- name: apps | Combine list of apps | Select apps from var files
include_vars:
name: "{{ item }}"
dir: "vars"
files_matching: "{{ item }}"
extensions:
- yml
- yaml
with_items:
- "{{ apps_list }}"
when:
- apps_list is defined
- name: apps | Combine list of apps | Create default 'apps'
set_fact:
apps: []
- name: apps | Combine list of apps | Add selected to list 'apps'
set_fact:
apps: "{{ apps }} + {{ vars[ item ].app }}"
with_items:
- "{{ apps_list }}"
when:
- apps_list is defined
- debug:
var: apps
ℭ𝔞𝔯𝔯𝔬𝔩
на выходе в дальнейший плей получаю:
apps:
- name: app1
path: foo
- name: app2
path: bar
как и задумывал.
PS: может пригодится кому
Alex
Словари мержить по хешам же можно, сыкотно, но для тестов годится
ℭ𝔞𝔯𝔯𝔬𝔩
Alex
Sergey
мне нжен был не мерж словаря, а объединение списка словарей 🤔
Ну да, ты точно написал, что странного хочешь, вот лучше и не сказать. Вместо декларативности кодишь на ямле. Что ж, твоё право. Я бы так делать не стал - особенно с учётом того количества вспомогательных сущностей, которое такой подход плодит.
ℭ𝔞𝔯𝔯𝔬𝔩
Sergey
У роли есть конкретные места для переменных - так же, как и у инвентори.
include_vars - это то, что стоило бы обос.... в общем, облить чем-нить и сжечь.
Sergey
Показанный подход лично меня спровоцировал бы на ошибку: словари одинаково называются, плюс имеют одинаковые ключи.
Sergey
А это ой.
Sergey
Чтобы от таких ошибок уберечься, я обычно делаю параметризированные роли, которые вот это вот всё ожидают извне, либо имеют минимально разумные дефолтные значения.
Да, сложно.
Да, будут повторяться вызовы роли с разными параметрами.
Но зато декларативность.
Тогда к чему именно относятся эти переменные, если они вообще хоть сколько нибудь переменные?
Если перестать себе врать и начать назвать их не переменными, а просто списками в рамках роли, то окрываются интересные перспективы 😉
p.s. в ansible есть include_vars и from_json (jinja), да и логику там совершенно отбитую можно запилить, вопрос в другом - а насколько трудоёмкость поддержки это всё окупит?
ℭ𝔞𝔯𝔯𝔬𝔩
Чтобы от таких ошибок уберечься, я обычно делаю параметризированные роли, которые вот это вот всё ожидают извне, либо имеют минимально разумные дефолтные значения.
Да, сложно.
Да, будут повторяться вызовы роли с разными параметрами.
Но зато декларативность.
Тогда к чему именно относятся эти переменные, если они вообще хоть сколько нибудь переменные?
Если перестать себе врать и начать назвать их не переменными, а просто списками в рамках роли, то окрываются интересные перспективы 😉
p.s. в ansible есть include_vars и from_json (jinja), да и логику там совершенно отбитую можно запилить, вопрос в другом - а насколько трудоёмкость поддержки это всё окупит?
👍
Timur
Я согласен с Арамисом (c)
Timur
Плодить такую наркоманию ради ввода параметров роли явно избыточно
A
Кто это юзал? Поделитесь впечатлением.. https://github.com/vstconsulting/polemarch
Alex
Alex
Тогда пробуй
Yury
комрады, как в ансибле указать мерж переменных с разных уровней?
например в дефолтс один список, на уровне хоста другой. По дефоту тот что с уровня хоста перепишет дефолтс а не смержится
Yury
нашел, похоже мне нужен DEFAULT_HASH_BEHAVIOUR
Sergey
Timur