所以我有一个基本的修改模块,适用于所有通过hierapipe理的服务器。 一个子模块被称为“文件”,并将脚本放到每个服务器的/ usr / local / bin /中。 所以它遍历文件目录并复制相应的文件。 这工作正常,如果我添加模块。
现在我想通过$ enabled = true | false使这个模块可以在hiera上pipe理。 问题是,在设置ensure =>缺席时,会删除bin目录,并输出一些错误信息,表明它不能删除这些文件,显然是因为bin目录已经被删除了。 所以我想要的只是删除文件,离开斌目录本身。
有任何想法吗?
我偶然发现了这个似乎描述了相同的问题,看起来已经被修补的旧bug。
更新:重点是不引用清单中的每个文件。 这就是为什么我要使用recursion。
文件/
文件/ devvm
文件/ devvm / script1.sh
文件/ devvm / live.sh
文件/ devvm-tpl.dev
文件/ devvm-tpl.dev / testscript2.pl
文件/共同
文件/普通/ change_hostname.sh
文件/ srvDC221
文件/ srvDC221 /香肠
class basicmodifications :: files(
$ enabled =“true”,
){
文件{'usrlocalbin':
确保=> $启用? {
“真”=>现在,
“假”=>缺席,
},
recurse => true,
忽略=>“*〜”,
purge => true,
所有者=> root,
group => root,
path =>“/ usr / local / bin /”,
#force => true,#将删除bin目录
sourceselect =>全部,
source => [“puppet:/// modules / tebasemod / common”,“puppet:/// modules / tebasemod / $ {:: tecluster}”,“puppet:/// modules / tebasemod / $ {:: fqdn }”]
}
}
err:/ file [/ usr / local / bin / wurst] /确保:从缺席到文件更改失败:无法设置文件确保:没有这样的文件或目录 - /usr/local/bin/wurst.puppettmp_6753
你想确保目录中存在或不存在一组特定的文件,对吧? 你不希望木偶永远删除目录本身及其内容? 那么你需要单独pipe理资源,而不是recursion。 Somethign like
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'], }
由于您需要不同主机之间的脚本,因此可以在hiera中设置$scripts而不是在manifest中。