Sergey
в общем, на вот тебе к новому году: [ssh_connection] ssh_args="-F {{lookup('env','HOME',allow_unsafe=True) | first }}/.ssh/config.core_htr_remote_stage"
Sergey
работает, проверено
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
ну или на константе проверить. может переменная не подставляется
Sergei
hosttype=myhost
Nik
hosttype=myhost
не понял
Sergei
укажи конкретный существующий у тебя хост
Nik
а просто вывести содержание переменной можно? (я в ansible пробую первые 3 часа, тупые вопросы еще бывают)
Nik
сделал перед hosts debug - ansible говорит так нельзя
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
--- - 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
Салют! в ансайбл хочу снаружи передать тип хоста из инветнори, и че то не летит. Делаю --extra-vars "hosttype=${CI_ENVIRONMENT_URL}"
То, что ты просишь, делается через -l "<hosttype>". Только ты опять же не тип хоста передаёшь, а название группы хостов.
Sergey
ключ -l = limit to group of hosts
Sergey
ну и как правильно записывать выражения с подстановками - http://docs.ansible.com/ansible/latest/playbooks_variables.html#hey-wait-a-yaml-gotcha
Ievgen
Салют, хочется странного делать весь play с serial 0 а хендлеры с serial допсутим 1, есть нормальный метод? Или только двигать рестарты/релоады из хендлеров в playbook и там шаманить?
Ievgen
и таки зочем ви спrашиваете ))? решаю задачу разлить то что нужно/можно на хосты в параллели, потом выполнить то что нужно one-by-one
Ievgen
в случае ошибки - прекратить
Ievgen
а я евrей
Ievgen
мне можно
Womchik
ви таки не в израиле, чтобы было можно
Ievgen
я таки в Израиле )
Ievgen
так что мимо )
Womchik
ты в чатике.
Womchik
ну и вообще ушли в офф
Ievgen
ну короче как всегда, вместо конструктива нац вопрос
Ievgen
короче сам спросил сам ответил: https://github.com/ansible/ansible/issues/12170 так походу и не запилили
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
не помогает
Navern
и таки зочем ви спrашиваете ))? решаю задачу разлить то что нужно/можно на хосты в параллели, потом выполнить то что нужно one-by-one
ты не обязан юзать ansible-playbook. Ты можешь написать свой ран скриптик, в нем инициализировать нужные классы и допихивать сериал туда, куда тебе нужно
Ievgen
хм интересно, спасибо
Navern
хм интересно, спасибо
https://github.com/ansible/ansible/blob/devel/lib/ansible/cli/playbook.py
Navern
тебе все плейбуки парсятся в структурку
Sergey
ну тоесть там да не написано что нельзя, но все примеры только per play
Сама модель исполнения ансибла - "у нас есть хосты, к ним применяются плеи из плейбуков" - не подразумевает наличия стейта у хостов. Вернее, она ориентирована на то, чтобы хост приходил в описанный стейт из (почти) любого другого. Другое дело, что часть ПО не рассчитана на такую модель настройки - это факт. Как с этим жить? На данный момент прям крутых рекомендаций нет, но, скорее всего, требуется как раз организовать какое-то внешнее хранилище стейта хостов, и обращаться к нему по мере выполения плейбука.