handler-ы оправданы, а когда register?
Общие соображения такие (дальше - полотенце, сори):
- handler-ы шарятся между ролями, значит, что в случае конфликта имен, сделав nofity в одной роли, можно случайно дернуть handler другой роли, который делает не то, что мы ожидали
- по-умолчанию, в случае нескольких сработавших handler-ов, если какой-то один падает, то все остальные не срабатывают
- по-умолчанию, без force_handlers, если в одном таске вызвался notify на срабатывание handler-а, а следующий task свалился, то handler не сработает и это может привести к неконсистентному состоянию - при следующем проигрывании изменений не будет -и handler-ы уже не сработают
- порядок вызова handler-ов гарантировать нельзя - по сути порядок определяется их порядком следования в файле, где они объявлены, а не порядком вызовов notify
- если в play-е, при подключении ролей, одни роли опираются на другие роли и подключаются в определенном порядке, то роли, которые играются позже могут сфейлиться, т.к. таски от notify еще не сработали (они срабатывают в конце play-я) и получается,
нужно знать какие handler-ы и в каких ролях живут (инкапсуляция страдает), чтоб разнести такие роли по разным play-ям.
- meta: flush_handlers позволяет дернуть все handler-ы, но тогда вопрос, почему одна роль влияет на то, как работают другие роли? пользовалю, который проигрывает плейбук хочется детерминированного поведения и когда он видит, что вроде бы играется одна роль, а потом из-за flush_handlers начинают работать таски других ролей, которых в текущей проигрываемой роли никак быть не могло, то это введет в заблуждение.
- в ansible можно играть плейбук пошагово начиная с какого-то таска - с тасками последовательность шагов будет такой, как объявлено в плейбуке и ролях, а в случае handler-ов - не понятно, какой будет порядок выполнения
- на handler-ы не распространяется serial
—-
итого - кажется, что register + отдельный таск постабильнее и понадежнее будут
Все становиться проще когда в 1 роль не впихивают все что только в голову пришло. Раздроби все по ролям, сделай их независимыми друг от друга
Обсуждают сегодня