Повар запускает блок bash только после другого блока bash при первом запуске - PullRequest
0 голосов
/ 29 мая 2018

Я использую chef для этого:

Я пытаюсь запустить блок bash только после запуска предыдущего, достаточно простого, я использую notify.Я также хочу, чтобы была проверка файла блокировки при первом запуске и втором (есть ли лучший способ убедиться, что он запускается только при запуске предыдущего блока bash?).

Вот мой текущий код шеф-повара:

if not File.exist? 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
  end
 file tsm_login_lock do
   mode '0644'
   content 'tableau server stareted'
 end
end

if not File.exist? tsm_init_lock
  bash 'tsm_init' do
    user tableau_user
    cwd tableau_user_home
    code <<-EOH
      tsm initialize --start-server --request-timeout 1800
    EOH
    notifies :run, "bash[tsm_2]", :immediately
  end
  file tsm_init_lock do
    mode '0644'
    content 'tableau server initialized'
  end
end

1 Ответ

0 голосов
/ 29 мая 2018

Здесь вы захотите объединить несколько методов:

  • Вы хотите убедиться, что уведомляемые ресурсы не также работают самостоятельно.Таким образом, их действия должны быть установлены на :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.Спросите себя, как бы вы проверили это, если вы вошли на сервер.Используйте эти проверки для охранников вместо блокировки файлов.В общем, вы хотите использовать охранников там, где это необходимо, чтобы убедиться, что ресурсы являются идемпотентными.Посмотрите приведенную выше ссылку на охранников для получения полной информации о том, как работают охранники.

...