在 puppet 中,如何确定计算机使用的是 systemd 还是 sysvinit?

In puppet, how to I determine if computer is using systemd or sysvinit?

我有一个自定义人偶模块,它安装了一个 daemon/service:一个小的 ruby Webrick。我有一个 start/stop 守护进程的 systemd 脚本。我现在也有一个 Sysvinit 脚本。我想为其中任何一个安装适当的脚本。

我理想的人偶流程是:

这可能吗?

我们是运行人偶4.4.2.

通常的处理方式是使用事实和条件,例如(来自 Elasticsearch Approved 模块):

params.pp:

case $::operatingsystem {
  'RedHat', 'CentOS', 'Fedora', 'Scientific', 'OracleLinux', 'SLC': {
    $service_name       = 'elasticsearch'
    $service_hasrestart = true
    $service_hasstatus  = true
    $service_pattern    = $service_name
    $defaults_location  = '/etc/sysconfig'
    $pid_dir            = '/var/run/elasticsearch'

    if versioncmp($::operatingsystemmajrelease, '7') >= 0 {
      $init_template        = 'elasticsearch.systemd.erb'
      $service_providers    = 'systemd'
      $systemd_service_path = '/lib/systemd/system'
    } else {
      $init_template        = 'elasticsearch.RedHat.erb'
      $service_providers    = 'init'
      $systemd_service_path = undef
    }

  }

请注意,这是 Puppet 3 兼容代码;如果您想要 Puppet 4 最佳实践并且不需要支持 Puppet 3,请查看关于 facter facts 和 $facts Hash 的当前最佳实践。

如果您不喜欢根据 OS 版本假设 Systemd 的可用性,您也可以创建一个自定义事实来报告 Systemd 的可用性。