我必须如何配置“init.pp”文件才能发送同一类中的多个文件?我所做的是:
class nagios {
file { ['/usr/lib64/nagios/plugins/']:
path => '/usr/lib64/nagios/plugins/',
ensure => directory,
notify => Service['nrpe'],
source => ["puppet:///modules/mymodule/check_mem.sh",
'puppet:///modules/mymodule/check_mountpoint.sh'],
sourceselect => all,
}
service { 'nrpe':
ensure => 'running',
enable => true,
}
}
我正在尝试将两个不同的文件发送到同一个远程文件夹,然后重新启动服务。
然而,当我在客户端运行 Puppet 时,出现以下错误:
[...]
Error: Could not set 'file' on ensure: Is a directory - (/usr/lib64/nagios/plugins20170306-28992-j54k6x, /usr/lib64/nagios/plugins) at 153:/etc/puppet/modules/mymodule/manifests/init.pp
[...]
Error: /Stage[main]/Nagios/File[/usr/lib64/nagios/plugins/]/ensure: change from directory to file failed: Could not set 'file' on ensure: Is a directory - (/usr/lib64/nagios/plugins20170306-28992-j54k6x, /usr/lib64/nagios/plugins) at 153:/etc/puppet/modules/mymodule/manifests/init.pp
我的错误在哪里?
谢谢。
答案1
该sourceselect
参数仅影响递归目录复制。对于单个文件,您需要多个file
资源,因为在这种情况下,只会复制第一个文件。
或者,当递归提供目录时,可以通过将 sourceselect 属性设置为 all 来组合多个源。
(来源)
您的第二个问题是您告诉 Puppet 确保目标是一个目录。在这种情况下,提供源文件没有任何意义 - 您无法将文件保存为目录。您需要将其设置为file
或present
。
回复你的评论:类似这样的事情应该有效:
file { ['/usr/lib64/nagios/plugins/check_mem.sh']:
ensure => "file",
notify => Service['nrpe'],
source => "puppet:///modules/mymodule/check_mem.sh",
}
file { ['/usr/lib64/nagios/plugins/check_mountpoint.sh']:
ensure => "file",
notify => Service['nrpe'],
source => "puppet:///modules/mymodule/check_mountpoint.sh",
}