首页 > 解决方案 > Puppet - 如何设置条件来检查是否安装了软件包,如果未安装,我需要跳过它?

问题描述

抱歉,我正在 puppet 中开始我的工作,我正面临着使用该工具的第一个挑战。如果在服务器上安装了软件包,我想检查 puppet,如果是,请保证它正在运行,如果未安装,则跳到下一个任务。

class profile::windows::rapid7 {
 
  $manage_rapid7  = lookup('manage_rapid7',         Optional[Boolean], 'first', true)
  $rapid7_filepath = 'C:\Program Files\Rapid7\Insight Agent\ir_agent.exe'
 
  $rapid7_service_exists = find_file($rapid7_filepath)
 
  if $facts['kernel'] == 'Windows' {
 
    if $manage_rapid7 {
      if($rapid7_service_exists){
        service { 'ir_agent':
          ensure  => 'running',
          enable  => 'true',
        }
      }
    }
  }
}

正如你在上面看到的,如果安装了 rapid7,我会确定它正在运行,但现在我有一些服务器没有这个包,因此,我得到了错误。所以我的问题是:如果未安装此 pkg,是否可以跳过此任务?

此致,

标签: conditional-statementspuppet

解决方案


如果在服务器上安装了软件包,我想检查 puppet,如果是,请保证它正在运行,如果未安装,则跳到下一个任务。

最合适的方法是让 Puppet 根据节点身份知道是否应该安装包。这是节点分类的领域,通常通过节点块、通过外部节点分类器和/或通过节点特定的外部数据来实现。使用这些工具,您将在目录构建期间通知 Puppet 是否应用管理相关服务的类,以及使用哪些类参数。在相同的基础上选择是否应用管理包本身的类是典型的。您可以在 Forge上找到许多这种方法的示例。

但是,如果您确实需要将有关节点当前状态的数据输入到目录构建过程中,则提供服务的 Puppet 机制是事实。可以编写自定义或外部事实来测试软件包是否已安装。然后,您可以编写 Puppet 条件语句,以根据该事实的值影响节点目录的内容。但是请注意,这与运行前的节点状态有关,如果您希望 Puppet 管理包的安装状态,这也是多余的。


推荐阅读