向 Puppet 客户端发送多个文件

向 Puppet 客户端发送多个文件

我必须如何配置“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 确保目标是一个目录。在这种情况下,提供源文件没有任何意义 - 您无法将文件保存为目录。您需要将其设置为filepresent

回复你的评论:类似这样的事情应该有效:

    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",
    }

相关内容