我正在使用 puppet 管理用户,并将 managehome
设置为 true
。然后,这个主目录会填充一些文件(在我的例子中是 2 个点文件)。
user { 'guillaume':
ensure => present,
managehome => true,
}
file {'/home/guillaume':
ensure => present,
purge => false,
recurse => true,
source => "puppet:///modules/${module_name}/home/${title}",
}
一切都很好,但我最终在我的主目录中放入了一个 25GB 的文件,该文件正在计算哈希值(至少这是我的理解。我可以从 strace 看到该文件确实已完全读取)由 puppet )。完整的 puppet 运行大约需要 20 分钟,理论上应该不到一分钟就能完成。删除文件使 puppet 再次快速运行,证实了我的猜测。
为什么 puppet 会计算非托管文件的哈希值,以及如何通过将这样的(合法)文件放入托管目录来防止破坏 puppet?
最佳答案
Puppet 计算主目录中文件的校验和的原因是因为您正在递归地管理整个目录的内容,并且该文件是目录内容的一部分。有几种方法可以改进您的 Puppet 资源以避免计算此校验和。
第一种是直接管理两个隐藏文件:
user { 'guillaume':
ensure => present,
managehome => true,
}
file {'/home/guillaume/.file_one':
ensure => file,
source => "puppet:///modules/${module_name}/home/.file_one",
require => User['guillaume'],
}
file {'/home/guillaume/.file_two':
ensure => file,
source => "puppet:///modules/${module_name}/home/.file_two",
require => User['guillaume'],
}
请注意,上面我还修复了未指定的 ensure
file
上的值资源和 file
缺少的依赖元参数user
上的资源资源。
第二种解决方案是不递归地管理目录的内容,因此忽略目录内容中未使用 source
管理的文件。属性。您可以通过设置 recurse
来实现此目的属性为remote
:
user { 'guillaume':
ensure => present,
managehome => true,
}
file {'/home/guillaume':
ensure => directory,
recurse => remote,
source => "puppet:///modules/${module_name}/home/guillaume",
require => User['guillaume'],
}
请注意,这与上述解决方案进行了相同的修复。
一些有用的文档:
https://puppet.com/docs/puppet/5.3/types/file.html
https://puppet.com/docs/puppet/5.3/metaparameter.html#require
关于 puppet 计算(大量)非托管文件的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808951/