Шеф-повар уведомляет в том же блоке ресурсов, что и only_if или not_if

#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) .