puppet:启用/禁用递归目录

puppet:启用/禁用递归目录

所以我有一个适用于所有通过 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 而不是清单中进行设置。

相关内容