Исправить службы, которые были отключены в / etc / default / с помощью puppet?

13

Я использую 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.

Мэтт Симмонс
источник
Почему бы просто не переписать /etc/default/npcdс fileресурсом? fileЗависит от package, и serviceзависит от file. Я всегда опасаюсь редактировать файлы с помощью sedили, augeasесли я могу избежать этого.
Жаворонки

Ответы:

12

Обновление этого файла и перезапуск службы - единственный способ. Вы можете нажать новый файл, а затем сделать сервис Требовать это; таким образом, при обновлении содержимого служба будет запущена правильно.

Если вы не хотите полностью заменять файл, вы можете использовать инструмент Puppet augeas, чтобы просто изменить одну строку в файле значений по умолчанию.

В Debian и его производных есть несколько сервисов, которые не запускаются автоматически после установки пакета, если он не включен в / etc / default. Вид раздражает.

Редактировать: FYI скрипт инициализации на самом деле читает значения из этого файла (просто получая его обычно).

Люк
источник
1
Интересный. У меня есть разум, чтобы сообщить об ошибке. Если вы установите для «enable» значение «true», то имеет смысл только включить сценарий (в дополнение к любым символическим ссылкам для запуска уровней).
Мэтт Симмонс
Я думаю, что у Puppet нет простого способа узнать, нужно ли службе обновлять файл «по умолчанию», чтобы они не запекали его; может быть проще подать ошибку с дистрибутивом. Я сомневаюсь, что вы получите какую-либо тягу, хотя :-)
Лука
используйте определенный тип, называемый чем-то вроде «defaults_service», который имеет ресурс службы, а также ресурс exec, который обновляет файл на месте с помощью sed, если это необходимо, или ресурс файла, который использует augeas, до вас.
Сирекс
@MattSimmons Люди, делающие эти пакеты, должны использовать символические ссылки и update-rc.dдля включения / отключения службы, а не/etc/default - это не стандартный способ управления службами, поэтому он находится вне контроля марионетки.
Шейн Мэдден
8

Черт возьми, я проверил несколько стандартных демонов на моих машинах 12.04. Вы должны управлять файлом, но никак не обойти его в данный момент.

SNMPD

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

collectd

# 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

HAProxy

# Set ENABLED to 1 if you want the init script to start haproxy.
ENABLED=1
Кашани
источник
6

Я думаю, что один из возможных способов сделать это - использовать Augeas Tool с Puppet, например

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

обратитесь к руководству для деталей

DukeLion
источник
0

Я использую sed, чтобы изменить файл. Augeas кажется излишним.

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"/'
dmourati
источник
1
если вы думаете, что augeas - это избыточное убийство, разве марионетка тоже не слишком? :) С вашим решением тоже все в порядке, но вы предполагаете, что у вас есть файл, и вам нужно его вставить, так что, если его там нет? он просто потерпит неудачу, ничего вам не сказав. Я считаю, что augeas настолько надежен, удобен и практичен, что его стоит установить, если вы используете марионетку
DukeLion
Мой пример был из начальной загрузки кукол через cloud-init. Я посмотрел на augeas и сразу решил, если это вообще возможно, избежать. До сих пор я не нуждался в augeas, и мне не нужно было загружать другой сервис, кроме puppet для запуска = да.
dmourati
Мне очень любопытно о вашей точке зрения. Я понимаю вашу точку зрения, но разве боже и кукольный не используют одну и ту же идеологию предоставления абстрактного интерфейса верхнего уровня для унифицированного управления? Так что, если вы не любите augeas, почему вы как марионетка? Почему тогда не отвечаешь?
DukeLion
Я думаю, что лучшим подходом является редактирование конфигурационных файлов-заглушек или фрагментов, таких как apache conf.d, sysctl.d, sudoers.d и т. Д. Попытка пробиться через другие конфигурационные файлы просто привлекает меня. В простейшем случае, когда фрагментированные файлы конфигурации с каталогами .d не существуют, используйте sed / perl / what Таким образом, нет необходимости в augeas.
dmourati
0

Делать это с augeas типом в Puppet можно только одним способом (как предлагает @DukeLion).

Другой способ - использовать augeasprovidersмодуль вместе с shellvarпровайдером:

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

Это лучше, потому что Augeas будет чисто использоваться поставщиком Ruby. Он также будет управлять цитированием и комментариями автоматически.

ℝaphink
источник