厨师:我如何检查是否安装了服务?

CPS*_*CPS 6 windows chef-infra chef-recipe

在一个配方中,我想检查是否安装了服务,以及是否通知了安装它所需的3个资源.我尝试了服务资源,它在安装时正确识别服务,但如果未安装服务则抛出异常.

我不确定在这里使用什么动作.:没有什么只是跳过资源以便它被执行,但是当他们试图对不存在的服务进行操作时,任何其他操作都会出错.

如何检测服务是否已安装并根据该信息执行操作?

我在Windows上运行,如果那是相关的.

Gad*_*lin 9

看看如何定义Windows服务

https://github.com/opscode/chef/blob/master/lib/chef/provider/service/windows.rb

AFAIU非常直观地为您的食谱添加导入:

require 'win32/service'
Run Code Online (Sandbox Code Playgroud)

然后你可以检查服务是否存在

Win32::Service.exists?(@new_resource.service_name)
Run Code Online (Sandbox Code Playgroud)

瞧 - 你可以把库存(http://docs.opscode.com/essentials_cookbook_libraries.html)用于不污染食谱代码并使用简单的方法service_exists?

  • 这让我走上正轨.我在没有require语句的情况下工作了.根据此邮件列表条目:http://lists.opscode.com/sympa/arc/chef/2013-03/msg00223.html语句`if!:: Win32 :: Service.exists?("test_service_name")`正确检测服务是否存在.前导::告诉它不要查看Chef命名空间. (4认同)