The `sourceselect` parameter only affects recursive directory copies. For single files, you need multiple `file` resources, as in that case, only the first file will be copied. > Alternately, when serving directories recursively, multiple sources can be combined by setting the sourceselect attribute to all. ([Source][1]) Your second problem is that you tell Puppet to ensure that the target is a directory. In that case, giving a source file doesn't make any sense - you can't save a file as a directory. You would need to set it to `file` or `present`. [1]: https://docs.puppet.com/puppet/latest/type.html#file-attribute-source Re your comment: Something like this should work: 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", }