Здесь вы захотите объединить несколько методов:
- Вы хотите убедиться, что уведомляемые ресурсы не также работают самостоятельно.Таким образом, их действия должны быть установлены на
:nothing
.Таким образом, они не запускаются самостоятельно, а затем получают уведомление об их повторном запуске.Действие, которое вы определяете как часть вашей подписки , - это действие, которое оно будет выполнять при получении уведомления. - Вы также хотите быть уверены, что файлы блокировки создаются только в том случае, если ресурс, который они блокируют, фактически являетсязапустить.Таким образом, они также должны иметь нулевое значение и получать уведомление с помощью действия
:create
. - Используйте Chef Guards , чтобы проверить наличие файлов блокировки.Таким образом, вы все равно увидите конкретный вывод о том, что ресурс был пропущен (из-за охраны), а не проигнорирован все вместе.
Пример использования вашего кода:
Использование защиты not_ifпоэтому ресурс не запустится, если существует файл, определенный переменной tsm_login_lock.Дополнительно уведомите файл блокировки, который будет создан.
bash 'login_tsm' do
user tableau_user
cwd tableau_user_home
code <<-EOH
source /etc/profile.d/tableau_server.sh
tsm login -u #{tableau_user} -p #{password}
tsm settings import -f /home/analytics/setting_file.json
tsm pending-changes apply
tsm licenses activate -k #{key}
tsm register --file #{registration}
tsm pending-changes apply
EOH
notifies :run, "bash[tsm_init]", :immediately
notifies :create, "file[#{tsm_login_lock}]", :immediately
not_if { ::File.exist?(tsm_login_lock) }
end
Этот ресурс сам по себе ничего не делает, если только он не уведомлен ресурсом о его блокировке
file tsm_login_lock do
mode '0644'
content 'tableau server stareted'
action :nothing
end
Аналогично, этот ресурс должен иметь not_ifСтраж для файла блокировки инициализации.Кроме того, он должен иметь действие по умолчанию ничего, так как он получает уведомление от ресурса входа в систему.Наконец, уведомите, что его файл блокировки будет создан.
bash 'tsm_init' do
user tableau_user
cwd tableau_user_home
code <<-EOH
tsm initialize --start-server --request-timeout 1800
EOH
action :nothing
not_if { ::File.exist?(tsm_init_lock) }
notifies :run, "bash[tsm_2]", :immediately
notifies :create, "file[#{tsm_init_lock}]", :immediately
end
Этот ресурс файла блокировки инициализации ничего не делает сам по себе, должен уведомляться только тем ресурсом, который он блокирует
file tsm_init_lock do
mode '0644'
content 'tableau server initialized'
action :nothing
end
Наконец , я очень рекомендую выяснить, что вы считаете успешным входом в Tableau и init.Спросите себя, как бы вы проверили это, если вы вошли на сервер.Используйте эти проверки для охранников вместо блокировки файлов.В общем, вы хотите использовать охранников там, где это необходимо, чтобы убедиться, что ресурсы являются идемпотентными.Посмотрите приведенную выше ссылку на охранников для получения полной информации о том, как работают охранники.