所以我有一个适用于所有通过 hiera 管理的服务器的基本修改模块。一个子模块称为“文件”,它将脚本放入每个服务器的 /usr/local/bin/。因此它会遍历文件目录并复制相应的文件。如果我添加模块,这会正常工作。
现在我想通过 $enabled = true|false 使此模块可通过 hiera 进行管理。问题是,当设置 Ensure => Absent 时,它会删除 bin 目录并打印一些错误消息,提示无法删除文件,显然是因为 bin 目录已被删除。所以我想要的只是删除文件并保留 bin 目录本身。
有任何想法吗?
我偶然发现了这个旧的错误,它似乎描述了相同的问题,而且看起来已经被修补了。
更新:重点是不要引用清单中的每个文件。这就是我要使用递归的原因。
文件/ 文件/devvm 文件/devvm/script1.sh 文件/devvm/live.sh 文件/devvm-tpl.dev 文件/devvm-tpl.dev/testscript2.pl 文件/公共 文件/common/change_hostname.sh 文件/srvDC221 文件/srvDC221/wurst
类 basemodifications::files ( $enabled =“ true”, ){ 文件 {'usrlocalbin': 确保 => $enabled ? { "true" => 当前, "false" => 缺席, }, 递归 => true, 忽略 => “*~”, 清除 => true, 所有者 => 根, 组 => 根, 路径 => “/usr/local/bin/”, #force => true, #将删除 bin 目录 源选择 => 全部, 源 => ["puppet:///modules/tebasemod/common", "puppet:///modules/tebasemod/${::tecluster}", "puppet:///modules/tebasemod/${::fqdn}",] } }
错误:/File[/usr/local/bin/wurst]/ensure:从不存在更改为文件失败:无法设置“文件确保:没有这样的文件或目录 - /usr/local/bin/wurst.puppettmp_6753
答案1
您想确保目录中存在或不存在某组文件,对吗?您不希望 Puppet 删除目录本身及其所有内容?那么您需要单独管理资源,而不是递归。类似
file { '/usr/local/bin':
ensure => directory,
owner => root,
group => root,
}
$scripts = ['/usr/local/bin/script1.sh', '/usr/local/bin/live.sh']
file { $scripts:
ensure => $enabled ? {
"true" => file,
"false" => absent,
},
owner => root,
group => root,
require => File['/usr/local/bin'],
}
由于您需要脚本在各个主机之间变化,因此您可以$scripts
在 hiera 而不是清单中进行设置。