#chef-infra
#шеф-повар-инфра
Вопрос:
Если у меня есть уведомления в том же блоке, что и only_if , будет ли only_if (если он принимает значение false) предотвращать уведомление? Похоже, в любом случае не удается найти никаких примеров.
При отладке кажется, что уведомление происходит в любом случае, и единственный способ получить желаемое поведение — поместить другой only_if в блок, который получает уведомление.
Примером может быть копирование файла rc.local и запуск его только для определенных серверов, но сохраняя общий блок выполнения, чтобы его можно было вызвать для любого сервера:
cookbook_file '/etc/rc.d/rc.local' do
source 'rc.local.servername'
owner 'root'
group 'root'
mode '0744'
action :create
only_if { node.name =~ /servername/ }
notifies :run, 'execute[run_rc_local]'
end
execute 'run_rc_local' do
command '/etc/rc.local'
user 'root'
group 'root'
action :nothing
end
В этом случае кажется, что блок выполнения получает уведомление, даже если only_if принимает значение false . Просто не могу найти никакой документации, в которой это указано явно.
Вот как выглядит результат… В середине выполнения мы видим это:
* cookbook_file[/etc/rc.d/rc.local] action create (skipped due to only_if)
* execute[run_rc_local] action nothing (skipped due to action :nothing)
Но затем внизу, где выполняются отложенные действия, есть это:
* execute[run_rc_local] action run
И да, мы просмотрели все кулинарные книги и убедились, что блок выполнения не уведомлен ничем другим.
Комментарии:
1. Можете ли вы показать вывод (обновить вопрос)
chef-client
run, который показывает, чтоexecute
блок получил уведомление?2. Выходные данные добавлены к исходному вопросу. Мы провели еще несколько тестов и уверены, что это работает именно так — уведомление срабатывает, даже если блок не выполняется из-за инструкции only_if. Если бы было просто приятно видеть, что это прописано в документах шеф-повара.
3. Это странно, потому
notifies
что применяется только при «изменении состояния». Я используюchef-client 16.2.73
, и я не вижу такого поведения. «Уведомленный» ресурс не запускается , когда (i)node.name
не соответствует (ii) файлу(up to date)
.