puppet 计算(大量)非托管文件的哈希值

标签 puppet

我正在使用 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/

相关文章:

ruby-on-rails - Puppet 意外删除了 etckeeper-commit-pre 和 etckeeper-commit-post 有没有办法重新生成这些文件?

ubuntu - 使用 Puppet 时如何等待主目录出现?

deployment - 使用 Puppet 和 Hiera 保护 SSL key (用于生产 Web 应用程序)

random - Puppet:在同一节点上随机化多个 cronjobs

docker - 如何使用 puppet 重新启动 docker 服务...?

ssl - 如何将 Puppet Master 设置为节点

ruby - erb sudoers 迭代数组的哈希值

virtualbox - Packer's Puppet 供应摊位

puppet - puppet 参数的内联 if 语句

postgresql - 使用 puppet 通过 VM 中的设置脚本初始化 postgresql 数据库