Ресурс Chef windows_service — настройка существующей службы

#windows-services #chef-infra

#windows-службы #chef-инфра

Вопрос:

У меня возникли некоторые проблемы с обеспечением правильной настройки ресурса службы Windows после его создания. Я нахожусь в ситуации, когда создание службы обрабатывается отдельным установщиком (.exe).

Мне нужно настроить эту службу впоследствии, чтобы использовать другого пользователя.

Вот мое определение ресурса:

 windows_service 'Service' do
  action [:configure_startup, :start]
  service_name 'service'
  startup_type :automatic
  run_as_user agent_credentials['user']
  run_as_password agent_credentials['password']
  only_if { ::Win32::Service.exists?('myservice') }
end
 

Я извлекаю учетные данные из зашифрованного пакета данных.

Проблема, с которой я сталкиваюсь, заключается в том, что учетная запись, с которой работает служба, никогда не обновляется. При запуске моего клиента он не видит необходимости применять действия с ресурсами после установки .exe:

   * windows_service[Service] action configure_startup (up to date)
  * windows_service[Service] action start (up to date)
 

Я могу заставить свой ресурс применяться только в том случае, если сначала служба остановлена, чего сразу после установки нет. Должен ли я использовать Chef, чтобы сначала остановить его, а затем запустить снова? Я думал, что он сможет обнаружить, что конфигурация службы не соответствует конфигурации определенного ресурса, а затем исправить ее…

Спасибо

Ответ №1:

просто добавьте :stop в action массив, например

 windows_service 'Service' do
  action [:configure_startup, :stop, :start]
  service_name 'service'
  startup_type :automatic
  run_as_user agent_credentials['user']
  run_as_password agent_credentials['password']
  only_if { ::Win32::Service.exists?('myservice') }
end
 

если служба не завершается сбоем при остановке, даже когда служба остановлена, это должно облегчить вашу боль. обратите внимание, что вам может потребоваться поместить :stop в другое место в массиве, в зависимости от поведения службы.

Ответ №2:

У меня такая же ситуация, как описано в DL3001, и я нашел представленное решение недостаточным.

Однако применение действия stop start во второй раз помогло, но это кажется неудобным и не таким элегантным, как могло бы быть.

 windows_service 'Configure_service' do
  service_name 'service'
  run_as_user app_vault['username']
  run_as_password app_vault['password']
  startup_type :automatic
  action [:configure_startup, :stop, :start]
end

windows_service 'Restart_service' do
  service_name 'service'
  action [:stop, :start]
end