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


13

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

 $ 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。


为什么不只是/etc/default/npcdfile资源重写?在file依赖于packageservice依赖于file。我总是对通过sedaugeas如果可以避免的方式编辑文件持怀疑态度。
larsk

Answers:


12

唯一的方法是更新该文件,然后重新启动服务。您可以推送一个新文件,然后使该服务成为必需;这样,当内容更新时,服务将正确启动。

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

除非在/ etc / default中启用了该软件包,否则Debian及其衍生版本中的一些服务不会在安装软件包后自动启动。有点烦人。

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


1
有趣。我有想法要提交错误。如果将“ enable”设置为“ true”,则只有在启用脚本的情况下才有意义(除了运行级别的各种符号链接之外)。
马特·西蒙斯

我认为Puppet绝不容易知道服务是否需要更新“默认”文件,因此他们没有将其更新。在发行版中提交错误可能更容易。我怀疑您会不会有任何牵引力:-)
路加福音

使用定义的类型,例如“ defaulted_service”,该类型具有服务资源,还具有exec资源,该资源可以根据需要使用sed来更新文件,也可以使用使用augeas的文件资源来决定。
Sirex

@MattSimmons制作这些程序包的人应该使用符号链接并update-rc.d启用/禁用服务,而不是/etc/default-这不是管理服务的标准方法,因此这不受p的控制。
Shane Madden

8

对于它的地狱,我检查了我的12.04机器上的一些标准守护程序。您必须管理文件,目前无法解决。

mp

# 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

mdadm

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

hapoxy

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

6

我认为可行的方法之一是使用带有偶的Augeas工具,例如

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

详情请参阅手册


0

我使用sed修改文件。奥古斯似乎过分杀伤力

sed -i /etc/default/puppet -e 's/START=no/START=yes/'

从这里取的想法:

http://www.codelord.net/2010/12/19/using-puppet-to-automatically-configure-new-ec2-instances/

所以,在你的情况下

sed -i /etc/default/npcd -e 's/RUN="no"/RUN="yes"/'

1
如果您认为Augeas是一种过度杀伤力,那么木偶也是一种过度杀伤力吗?:)您的解决方案也可以,但是您假设您已经有了文件并需要在其中添加行,那么如果文件不存在该怎么办?它只会失败而不告诉你任何事情。我相信Augeas非常健壮,方便且用途广泛,如果您使用木偶,则值得安装
DukeLion

我的示例来自通过cloud-init引导木偶。我看了看augeas,并立即决定尽可能避免使用它。到目前为止,我不需要Augeas,也不需要引导除了Puppet之外的其他服务来启动= yes。
dmourati

我真的很好奇您的观点。我可以理解您的观点,但是Augeas和Puppet是否使用相同的思想,即为统一管理提供抽象的顶层界面?因此,如果您不喜欢Augeas,您怎么会喜欢木偶?那为什么不烦呢?
2013年

我认为更好的方法是编辑存根或片段配置文件,例如在apache conf.d,sysctl.d,sudoers.d等中。尝试通过其他配置文件来完成工作对我来说并不有吸引力。在最简单的情况下,如果不存在带有.d目录的分散配置文件,请使用sed / perl / whatever。因此,不需要预言。
dmourati

0

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。它还将自动管理报价和评论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.