如何仅在 Puppet 中安装服务时才启用该服务?

如何仅在 Puppet 中安装服务时才启用该服务?

据说我使用了 onlyif 参数,但服务类型似乎不存在该参数。

我该怎么做才能仅在安装后启用此服务?它是用二进制安装程序安装的,因此测试安装目录是否存在

class scom {
    service { 'scx-cimd':
        ensure => running,
        enable => true,
        hasstatus => true,
        hasrestart => true,
        onlyif => "test -f /opt/microsoft/scx"
    }
}

当前的错误消息是“无效参数 onlyif”,因为服务没有 onlyif 参数。仅当安装目录存在时,如何才能启用此服务?

答案1

服务类型(3.x,2.x) 没有 onlyif 参数,该参数是 exec 类型的一部分 (3.x,2.x

要做你想做的事,有两种方法。第一种方法是正常且首选的做事方法。第二种方法是一个也可以工作的 hack,理想情况下服务的 chkconfig 应该是一个单独的执行程序,但是即使已经以这种方式配置了服务,chkconfiging 服务也没有坏处。

选项 1. 编写事实以查看服务是否已安装,并在服务类型周围添加条件:

# service_scx_installed.rb
Factor.add('service_scx_installed') 做
  设置代码做
    文件.存在吗?('/opt/microsoft/scx')
  结尾
结尾

# scom.pp
类 scom {
  如果 $service_scx_installed {
    服务{'scx-cimd':
        确保=>运行,
        启用=>真,
        状态 => true,
        已重新启动=> true,
    }
  }
}

选项 2. 将所有逻辑放入大型执行程序中:

exec {'启动并 chkconfig scx 服务':
  命令 => 'chkconfig scx 服务打开;服务 scx 重新启动',
  onlyif => ['test -f /opt/microsoft/scx', '!服务 scx 状态'],
  提供者=>“外壳”,
}

相关内容