Chef windows_service资源-配置现有服务

时间:2019-04-17 16:19:30

标签: windows-services 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停止它,然后再重新启动它吗?我认为它将能够检测到该服务的配置与所定义资源的配置不匹配,然后对其进行纠正...

谢谢

2 个答案:

答案 0 :(得分:0)

只需将: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放置在阵列上的其他位置。

答案 1 :(得分:0)

我的情况与DL3001所述相同,发现解决方案不够。

第二次应用停止启动操作可以解决问题,但这似乎很尴尬,而且不够优雅。

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