使用 puppet 修复在 /etc/default/ 中被禁用的服务?

使用 puppet 修复在 /etc/default/ 中被禁用的服务?

我正在使用 puppet(理论上)让 npcd 在安装时启动,但是在 Ubuntu 上,该服务在 /etc/default/npcd 中安装时默认设置为 RUN="no":

 $ cat /etc/default/npcd 
 # Default settings for the NPCD init script.

 # Should NPCD be started? ("yes" to enable)
 RUN="no"

 # Additional options that are passed to the daemon.
 DAEMON_OPTS="-d -f /etc/pnp4nagios/npcd.cfg"

我认为这块傀儡配置可以处理以下事情:

    service { "npcd":
       enable   => true,
       ensure   => "running",
       require  => Package["pnp4nagios"],
    }   

但遗憾的是,它没有,除了实际重写 /etc/default 中的文件外,我不知道该怎么做。有没有一种直接的方法来启用我没有看到的服务?

为了记录,我正在使用 Ubuntu 12.04.2 和 puppet 版本 3.1.0。

答案1

更新该文件然后重新启动服务是唯一的方法。您可以推送一个新文件,然后让服务要求该文件;这样,当内容更新时,服务将正常启动。

如果您不想完全替换文件,您可以使用 Puppet augeas 工具仅修改默认文件中的单行。

Debian 及其衍生产品中的一些服务在软件包安装后不会自动启动,除非在 /etc/default 中启用它们。有点烦人。

编辑:仅供参考,初始化脚本实际上正在从该文件中读取值(通常只是从中获取值)。

答案2

为了好玩,我检查了我的 12.04 机器上的几个标准守护进程。你必须管理这个文件,目前没有办法绕过它。

snmpd

# snmpd control (yes means start daemon).
SNMPDRUN=yes

收集

# 0: start collectd on boot, 1: do not start collectd on boot
# default: 0
DISABLE=0

木偶

# Start puppet on boot?
START=yes

管理

# START_DAEMON:
#   should mdadm start the MD monitoring daemon during boot?
START_DAEMON=true

哈普罗西

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1

答案3

我认为可行的方法之一是使用 augeas 工具和 puppet,例如

augeas { "npcd_default":
  changes => [
    "set /files/etc/default/npcd/Run yes",
  ],
}

请参阅手动的了解详情

答案4

使用augeasPuppet 中的类型执行此操作是一种方法(如@DukeLion 所建议的)。

另一种方法是使用augeasproviders模块,与shellvar提供商:

shellvar { 'npcd_default':
  ensure   => present,
  target   => '/etc/default/npcd',
  variable => 'RUN',
  value    => 'yes',
  comment  => 'We want npcd to run',
}

这样更好,因为 Ruby 提供程序会干净利落地使用 Augeas。它还将自动管理引用和注释。

相关内容