Sergey
в общем, на вот тебе к новому году:
[ssh_connection]
ssh_args="-F {{lookup('env','HOME',allow_unsafe=True) | first }}/.ssh/config.core_htr_remote_stage"
Sergey
работает, проверено
Andrey
Andrey
пробую
Sergey
Andrey
Sergey
всегда пожалуйста 😊
Nik
Салют! в ансайбл хочу снаружи передать тип хоста из инветнори, и че то не летит. Делаю
--extra-vars "hosttype=${CI_ENVIRONMENT_URL}"
Nik
Потом
- hosts: '{{ hosttype }}'
become: yes
tasks:
- name: print
shell: echo {{ item }}
with_items:
- "{{ groups[{{ hosttype }}] }}"
Sergei
у нас такое работает. попробуй кавычки вокруг hosttype=${CI_ENVIRONMENT_URL} убрать
Nik
ща
Sergei
ну или на константе проверить. может переменная не подставляется
Nik
Sergei
hosttype=myhost
Nik
Sergei
укажи конкретный существующий у тебя хост
Nik
а просто вывести содержание переменной можно? (я в ansible пробую первые 3 часа, тупые вопросы еще бывают)
Nik
сделал перед hosts debug - ansible говорит так нельзя
Viktor
Nik
https://docs.ansible.com/ansible/latest/debug_module.html
и ни слова куда его вставить (в какой блок.)
---
- hosts: '{{ hosttype }}'
become: yes
tasks:
- name: print
shell: echo {{ item }}
with_items:
- "{{ groups[{{ hosttype }}] }}"
- debug:
msg: "System {{ hosttype }}"
Nik
если вставляю на уровень с hosts - тоже не летит
Sergei
на уровень "- name"
Nik
Nik
Или ниже?
Nik
Ща попробую
Nik
---
- hosts: '{{ hosttype }}'
become: yes
tasks:
- name: print
shell: echo {{ item }}
with_items:
- "{{ groups[{{ hosttype }}] }}"
debug:
msg: "System {{ hosttype }}"
Nik
The offending line appears to be:
tasks:
- name: print
^ here
Nik
Пойду перечитывать доку и экзамплы. Как то сложна
O
что-то мне подсказывает что hosts: это ограничение для хостов которые берутся из инвентори файла. Даже если ты указываешь его него екстра варс. Эти хосты должны существовать и быть описаны. То есть нужен в любом случае инвентори файл либо уже динамик инвентори
Sergey
Sergey
ключ -l = limit to group of hosts
Sergey
ну и как правильно записывать выражения с подстановками - http://docs.ansible.com/ansible/latest/playbooks_variables.html#hey-wait-a-yaml-gotcha
Nik
Ievgen
Салют, хочется странного делать весь play с serial 0 а хендлеры с serial допсутим 1, есть нормальный метод? Или только двигать рестарты/релоады из хендлеров в playbook и там шаманить?
Navern
Ievgen
и таки зочем ви спrашиваете ))? решаю задачу разлить то что нужно/можно на хосты в параллели, потом выполнить то что нужно one-by-one
Ievgen
в случае ошибки - прекратить
Ievgen
а я евrей
Ievgen
мне можно
Womchik
ви таки не в израиле, чтобы было можно
Ievgen
я таки в Израиле )
Ievgen
так что мимо )
Womchik
ты в чатике.
Womchik
ну и вообще ушли в офф
Ievgen
ну короче как всегда, вместо конструктива нац вопрос
Ievgen
короче сам спросил сам ответил: https://github.com/ansible/ansible/issues/12170 так походу и не запилили
Sergey
Ievgen
Видимо, надо будет покурить эту тему
Ievgen
Ну или уйти от хендлеров
citius
serial: "{{ serial }}"
не варик?
Ну и в рантайме менять
Ievgen
не, для плея в целом я могу определить сериал
Ievgen
это не проблема
Ievgen
внутри плея дергаются роли у которых свои хендлеры, которые как и положенно хендлерам отрабатывают в самом конце, если не сказанно обратное
Ievgen
хочется сделать роли или часть в паралель, а потом хендлеры последовательно
Ievgen
например рестартнуть пачку вебов
Ievgen
ну тоесть я могу из хендлеров сделать обычные таски, вынсти в отдельный плей, наебошить переменных типа register: что-то и по результатам в конце сделать/инклюднутъ нужные таски, но тааак не хочется...
Ievgen
тут как Сергей сказал - или свою стратегию или или
Ievgen
ну тоесть да, у меня на группу хостов выливается один грубо говоря пробег типа:
hosts: что то
roles:
- тра ля ля
Ievgen
ну там, еще serial: 1 и strategy: all errors fatal, но это не суть (serial там как раз переменная которую wrapper передает)
Ievgen
с хендлерами как все знают удобно то, что все роли в рамках депендов получают эти хендлеры, с инклюдами так просто не взлетит
Ievgen
правда я тут видел пробегало что депенды не комильфо, я правда так и не понял почему
Ievgen
удобно же
citius
ну можно сделать и вынести в конфиг эту часть
- name: handler_task
blabla
serial: "{{ serial_handler }}"
- name: common_task
blabla
serial: "{{ serial_common }}"
Ievgen
тоесть я таки могу serial per таск определять?
Ievgen
здается мне что нет
Ievgen
или ты точно знаешь что да?
citius
мгм, я только что прочитал раздел доки, и не увидел там ограничения. но я возможно просто его проебал.
щас еще раз почитаю.
Ievgen
я вижу только это: http://docs.ansible.com/ansible/latest/playbooks_delegation.html#rolling-update-batch-size
Ievgen
ну тоесть там да не написано что нельзя, но все примеры только per play
Ievgen
можно конечно потыкать палочкой
Ievgen
может завезли и не сказали
Womchik
ppl, до версии 2.4 у меня в конфиге было:
[defaults]
inventory = ./ho
и прекрасно работало.
после обновления он не хочет брать инвентори в текущей директории. куда его пнуть?
ps. что не надо было обновляться - сам знаю :)
Nklya
А если убрать точку со слешом?
Womchik
не помогает
Ievgen
хм интересно, спасибо
Navern
тебе все плейбуки парсятся в структурку
Sergey
ну тоесть там да не написано что нельзя, но все примеры только per play
Сама модель исполнения ансибла - "у нас есть хосты, к ним применяются плеи из плейбуков" - не подразумевает наличия стейта у хостов. Вернее, она ориентирована на то, чтобы хост приходил в описанный стейт из (почти) любого другого. Другое дело, что часть ПО не рассчитана на такую модель настройки - это факт. Как с этим жить? На данный момент прям крутых рекомендаций нет, но, скорее всего, требуется как раз организовать какое-то внешнее хранилище стейта хостов, и обращаться к нему по мере выполения плейбука.
Александр