Server Fault is a question and answer site for system and network administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I've just set up puppet to generate nagios config files, which is great :) I have the services being put into a file named as $nagios_puppet_service_file and here is part of the nagios service class:

  file { $nagios_puppet_service_file:
    ensure => file,
    owner  => nagios, group => admins, mode => '0664',
    notify => Service['nagios'],

  Nagios_host <<||>>
  Nagios_hostextinfo <<||>>
  Nagios_service <<||>>

  service { 'nagios':
    ensure     => running,
    enable     => true,
    subscribe  => [ File[$nagios_puppet_host_file], File[$nagios_puppet_hostextinfo_file],
                    File[$nagios_puppet_service_file], ],
    hasrestart => true,
    hasstatus  => true,

While one of my service definitions looks like:

$real_nagios_http_port = $nagios_http_port ? { '' => '80',  default => $nagios_http_port }
$real_nagios_http_url  = $nagios_http_url  ? { '' => '/',   default => $nagios_http_url  }
$real_nagios_http_addr = $nagios_http_addr ? { '' => $fqdn, default => $nagios_http_addr }

@@nagios_service { "check_http_port_${hostname}":
  use                 => 'generic-service',
  check_command       => "check_http_port!$real_nagios_http_addr!$real_nagios_http_port!$real_nagios_http_url",  
  service_description => 'HTTP service',
  host_name           => $hostname,
  target              => $nagios_puppet_service_file,

So the service file is generated correctly, but the nagios service is not restarted, despite the subscribe clause in the service part above. (Well, sometimes it is restarted when the permissions on the file are updated, but that doesn't always happen on a puppet run, and sometimes happens part way through a puppet run, so only some changes get loaded, despite them all being in the services file.)

Any ideas why the subscribe clause isn't working as expected? Can I subscribe to all nagios_service instances some how? Would a notify in the nagios_service bit work any better?

share|improve this question
up vote 2 down vote accepted

The contents of the file are not being controlled by the file statement, which is the one with the notify. You should put notify on nagios_service.

And while there isn't a way to make service subscribe to all nagios_service, you can do it the other way around like this:

Nagios_service <<||>> { notify => Service['nagios'] }

But I see no reason for this notify attribute not to be defined on the exported instances of nagios_service to begin with.

share|improve this answer
Nice :) Thank you. – Hamish Downer May 10 '11 at 11:40

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.