【问题标题】:Chef: How do I check to see if a service is installed?厨师:我如何检查是否安装了服务?
【发布时间】:2013-12-06 13:25:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: windows chef-infra chef-recipe


    【解决方案1】:

    看看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 吗?

    【讨论】:

    • 这让我走上了正轨。我在没有 require 语句的情况下让它工作。根据此邮件列表条目:lists.opscode.com/sympa/arc/chef/2013-03/msg00223.html 语句 if !::Win32::Service.exists?("test_service_name") 正确检测服务是否存在。前导 :: 告诉它不要查看 Chef 命名空间。
    • @Gadolin 能否请您添加 CPS 评论中的语法?
    • 前面的 :: 为我赢得了它 - 这为我节省了很多时间。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2021-03-19
    相关资源
    最近更新 更多