(大规模)非托管文件的{Puppet计算哈希

时间:2017-12-14 08:31:08

标签: 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看到该文件确实被完全阅读由木偶)。花了大约20分钟,完整的木偶运行,理论上应该在不到一分钟的时间内完成。删除文件使得木偶再次快速运行,证实了我的猜测。

为什么puppet计算非托管文件的哈希值,如何通过将这样的(合法)文件放在托管目录中来防止破坏木偶?

1 个答案:

答案 0 :(得分:2)

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