2016-05-25 13 views
0

Я пытаюсь установить агент check_mk со стандартным конфигурационным файлом check_mk xinetd через куклу на сервере Debian 7.puppet notify xinetd не перезагружает службу xinetd

Check_mk устанавливает без проблем, но у меня проблема с конфигурацией xinetd.

Когда я меняю порт в исходном конфигурационном файле на кукольном мастере и запускаю puppet agent -t на хосте клиента, новая конфигурация развертывается правильно, но кукольный не перезагружает службу xinetd, потому что система не может распознать состояние служба xinetd.

марионеточного манифеста выглядит следующим образом:

class basic::check-mk { 
case $operatingsystem { 
    debian: { 
     package {'check-mk-agent': 
       ensure => present, 
       } 

     file { '/etc/xinetd.d/check_mk': 
       notify => Service['xinetd'], 
       ensure => file, 
       source => 'puppet:///modules/basic/etc--xinetd--checkmk', 
       mode => '0644', 
       } 

     service { 'xinetd': 
       ensure => running, 
       enable => true, 
       restart => '/etc/init.d/xinetd reload', 
       } 
      } 
} 
} 

отладочной выглядит следующим образом:

info: Applying configuration version '1464186485' 
debug: /Stage[main]/Ntp::Config/notify: subscribes to Class[Ntp::Service] 
debug: /Stage[main]/Ntp/Anchor[ntp::begin]/before: requires Class[Ntp::Install] 
debug: /Stage[main]/basic::Check-mk/Service[xinetd]/subscribe: subscribes to File[/etc/xinetd.d/check_mk] 
debug: /Stage[main]/Ntp::Install/before: requires Class[Ntp::Config] 
debug: /Stage[main]/Ntp::Service/before: requires Anchor[ntp::end] 
debug: /Schedule[daily]: Skipping device resources because running on a host 
debug: /Schedule[monthly]: Skipping device resources because running on a host 
debug: /Schedule[hourly]: Skipping device resources because running on a host 
debug: Prefetching apt resources for package 
debug: Executing '/usr/bin/dpkg-query -W --showformat '${Status} ${Package} ${Version}\n'' 
debug: Puppet::Type::Package::ProviderApt: Executing '/usr/bin/dpkg-query -W --showformat '${Status} ${Package} ${Version}\n'' 
debug: /Schedule[never]: Skipping device resources because running on a host 
debug: file_metadata supports formats: b64_zlib_yaml pson raw yaml; using pson 
debug: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]/content: Executing 'diff -u /etc/xinetd.d/check_mk /tmp/puppet-file20160525-10084-1vrr8zf-0' 
notice: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]/content: 
--- /etc/xinetd.d/check_mk  2016-05-25 14:57:26.220873468 +0200 
+++ /tmp/puppet-file20160525-10084-1vrr8zf-0 2016-05-25 16:28:06.393363702 +0200 
@@ -25,7 +25,7 @@ 
service check_mk 
{ 
     type   = UNLISTED 
-  port   = 6556 
+  port   = 6554 
     socket_type = stream 
     protocol  = tcp 
     wait   = no 

debug: Finishing transaction 70294357735140 
info: FileBucket got a duplicate file {md5}cb0264ad1863ee2b3749bd3621cdbdd0 
info: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]: Filebucketed /etc/xinetd.d/check_mk to puppet with sum cb0264ad1863ee2b3749bd3621cdbdd0 
notice: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]/content: content changed '{md5}cb0264ad1863ee2b3749bd3621cdbdd0' to '{md5}56ac5c1a50c298de4999649b27ef6277' 
debug: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]: The container Class[basic::Check-mk] will propagate my refresh event 
info: /Stage[main]/basic::Check-mk/File[/etc/xinetd.d/check_mk]: Scheduling refresh of Service[xinetd] 
debug: Service[ntp](provider=debian): Executing '/etc/init.d/ntp status' 
debug: Service[xinetd](provider=debian): Executing '/etc/init.d/xinetd status' 
debug: Service[xinetd](provider=debian): Executing '/etc/init.d/xinetd start' 
notice: /Stage[main]/basic::Check-mk/Service[xinetd]/ensure: ensure changed 'stopped' to 'running' 
debug: /Stage[main]/basic::Check-mk/Service[xinetd]: The container Class[basic::Check-mk] will propagate my refresh event 
debug: Service[xinetd](provider=debian): Executing '/etc/init.d/xinetd status' 
debug: /Stage[main]/basic::Check-mk/Service[xinetd]: Skipping restart; service is not running 
notice: /Stage[main]/basic::Check-mk/Service[xinetd]: Triggered 'refresh' from 1 events 
debug: /Stage[main]/basic::Check-mk/Service[xinetd]: The container Class[basic::Check-mk] will propagate my refresh event 
debug: Class[basic::Check-mk]: The container Stage[main] will propagate my refresh event 
debug: /Schedule[weekly]: Skipping device resources because running on a host 
debug: /Schedule[puppet]: Skipping device resources because running on a host 
debug: Finishing transaction 70294346109840 
debug: Storing state 
debug: Stored state in 0.01 seconds 
notice: Finished catalog run in 1.43 seconds 
debug: Executing '/etc/puppet/etckeeper-commit-post' 
debug: report supports formats: b64_zlib_yaml pson raw yaml; using pson 

Следующая строка кажется мне подозрительным:

debug: /Stage[main]/basic::Check-mk/Service[xinetd]: Skipping restart; service is not running 

И service --status-all говорит [ ? ] xinetd , Почему система не распознает состояние службы?

+0

Вы пытались сменить 'уведомление 'из ресурса' file' на 'subscribe' из ресурса' service'? Не нужно ничего менять, но может. Здесь также может быть неисправна команда 'restart'. Кукольник обычно ожидает полную команду, а не сокращенную (например, '/ bin/sh script.sh', а не только' script.sh') –

+1

Пожалуйста, покажите журналы отладки из вашего агента Puppet/apply run. –

+0

Я изменил манифест с 'notify' на' subscribe'. Я также удалил строку 'restart'. Бит ничего не изменил. – elcaos

ответ

1

Ваш журнал отладки и вывод вашего руководства service предполагают, что у вашего xinetd нет рабочей команды status. В результате, Puppet не знает, как (или нет) управлять своим состоянием запуска.

Вы можете рассмотреть возможность фиксации initscript для распознавания подкоманды status и выполнить ответ, совместимый с LSB (или, по крайней мере, выйти с кодом 0, если служба запущена и что-то еще в противном случае). Кроме того, вы можете добавить status attribute в ресурс Service, указав альтернативную команду, которую Puppet может использовать для определения состояния запуска службы. (Я связан с текущей документацией, но я уверен, что Service была этот атрибут задолго до Puppet 2.7.)

+0

Скорее всего, это правильный путь вперед. Кроме того, журнал отладки показывает, что 'notify' работает правильно, поэтому вопрос нужно отредактировать, чтобы отразить, что здесь представляет настоящая проблема. –

+0

Это, кажется, решение. Я попробую это завтра и ответим. Огромное спасибо. – elcaos

+0

@ Джона Боллинджера, это был правильный ответ. В моем скрипте xinetd init.d отсутствовал прохождение статуса. Я добавил его, и марионетка перезагружает службу, как она должна делать. Могу ли я добавить конфигурацию скрипта в свой вопрос или как ответ, чтобы другие могли его использовать? – elcaos

0

РЕШИТЬ: Чтобы решить эту проблему, я должен был добавить раздел состояния к инициализации .d скрипт xinetd. Впоследствии service xinetd status и марионетка смогли узнать статус службы. Добавлен раздел выглядит следующим образом:

status) 
    if pidof xinetd > /dev/null 
    then 
     echo "xinetd is running." 
     exit 0 
    else 
     echo "xinetd is NOT running." 
     exit 1 
    fi 
;; 

Additionaly Я добавил опцию состояния в строке Usage:

*) 
    echo "Usage: /etc/init.d/xinetd {start|stop|reload|force-reload|restart|status}" 
    exit 1 
    ;; 

Это решило проблему.