#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