我刚刚设置了 puppet 来生成 nagios 配置文件,这很棒:) 我将服务放入名为的文件中,$nagios_puppet_service_file
这里是 nagios 服务类的一部分:
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,
}
我的一项服务定义如下:
$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,
}
因此,服务文件已正确生成,但 nagios 服务未重新启动,尽管subscribe
上述服务部分中有子句。(好吧,有时它会在文件权限更新时重新启动,但这并不总是在 puppet 运行时发生,有时会在 puppet 运行过程中发生,因此只有一些更改会被加载,尽管它们都在服务文件中。)
知道为什么 subscribe 子句没有按预期工作吗?我可以通过某种方式订阅所有 nagios_service 实例吗?nagios_service 位中的通知会更好吗?
答案1
文件的内容不受file
带有 的语句的控制notify
。您应该notify
加上nagios_service
。
虽然没有办法service
订阅所有内容nagios_service
,但您可以反过来做,如下所示:
Nagios_service <<||>> { notify => Service['nagios'] }
但我认为没有理由notify
不在导出的实例上定义这个属性nagios_service
。