2013-11-21 73 views
6

在配方中,我想检查一下服务是否已安装,以及是否未通知安装它所需的3个资源。我尝试了服务资源,它在安装时正确识别服务,但如果服务未安装,则会引发异常。厨师:我如何检查服务是否安装?

我不确定在这里使用什么动作。 :没有任何东西只是跳过资源以便执行,但其他任何操作都会在尝试操作不存在的服务时出错。

如何检测服务是否已安装并根据该信息采取行动?

我在Windows上运行,如果这是相关的。

回答

8

就以如何为Windows服务被定义

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

AFAIU它相当简单明了添加导入到你的食谱一起来看看:

require 'win32/service' 

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

Win32::Service.exists?(@new_resource.service_name) 

瞧 - 你(http://docs.opscode.com/essentials_cookbook_libraries.html)只是不污染配方代码, 有简单的方法service_exists ?.

+3

这让我走上了正轨。我没有要求声明就可以工作。通过此邮件列表条目:http://lists.opscode.com/sympa/arc/chef/2013-03/msg00223.html 陈述 'if!:: Win32 :: Service.exists?(“test_service_name”) “ 正确检测服务是否存在。领先::告诉它不要在厨师名字空间看。 – CPS

+0

@Gadolin您可以添加CPS评论的语法吗? –

相关问题