puppet:启用/禁用recursion目录

所以我有一个基本的修改模块,适用于所有通过hierapipe理的服务器。 一个子模块被称为“文件”,并将脚本放到每个服务器的/ usr / local / bin /中。 所以它遍历文件目录并复制相应的文件。 这工作正常,如果我添加模块。

现在我想通过$ enabled = true | false使这个模块可以在hiera上pipe理。 问题是,在设置ensure =>缺席时,会删除bin目录,并输出一些错误信息,表明它不能删除这些文件,显然是因为bin目录已经被删除了。 所以我想要的只是删除文件,离开斌目录本身。

有任何想法吗?

我偶然发现了这个似乎描述了相同的问题,看起来已经被修补的旧bug。

  • https://projects.puppetlabs.com/issues/3180
  • https://projects.puppetlabs.com/issues/3835

更新:重点是不引用清单中的每个文件。 这就是为什么我要使用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中。