Puppet 一个人为什么要用“一个”;资源收集器“;?

Puppet 一个人为什么要用“一个”;资源收集器“;?,puppet,Puppet,我在看Puppet Forge上的OpenStack模块。这些模块使用“资源收集器”,因此我在这里阅读了“资源收集器”: 我仍然无法理解为什么需要使用资源收集器 以下是OpenStack/puppet keystone模块使用资源收集器的示例: if !is_service_default($memcache_servers) or !is_service_default($cache_memcache_servers) { Service<| title == 'memcache

我在看Puppet Forge上的OpenStack模块。这些模块使用“资源收集器”,因此我在这里阅读了“资源收集器”:

我仍然无法理解为什么需要使用资源收集器

以下是OpenStack/puppet keystone模块使用资源收集器的示例:

if !is_service_default($memcache_servers) or !is_service_default($cache_memcache_servers) {
    Service<| title == 'memcached' |> -> Anchor['keystone::service::begin']
} 
if!是默认的($memcache\u服务器)还是!是默认的($cache\u memcache\u服务器){
服务->锚['keystone::Service::begin']
} 

我猜这会做资源排序;导致memcached服务资源在keystone::service::begin锚之前执行。我真的不知道什么是锚。我猜它用于资源排序?

资源收集器有几种用途:

  • 它们实现虚拟资源,或者根据收集器的形式收集导出的资源。虚拟资源的
    realize()
    函数也在这个空间中发挥作用,但是除了收集器之外,没有其他方法可以收集导出的资源。另见下文
  • 它们可以在链表达式中使用,如示例所示,以设置排序约束
  • 它们可用于覆盖资源参数
在每一种用途中,收集器都具有一些特性,有时使其特别方便,其中包括:

  • 收集器操作目录中的所有匹配资源,包括在计算收集器表达式时尚未声明的任何资源,而不管声明的位置或范围如何
  • 收集器支持过滤器谓词(例如,
    title==“memcached”
    ),有助于微调收集的资源。这在与标记结合使用时特别有用
  • 收集器可以收集零资源,这没关系

最后一个似乎是您介绍的特定示例的要点:由于最多可以有一个
服务
具有
标题=='memcached'
,因此如果该服务包含在目录中,则整个表达式会导致该服务在
锚['keystone::Service::begin']
之前同步,但是,如果不声明这样的服务,它就没有效果,这与清单解析顺序无关。我不认为有任何其他独立于解析顺序的方法可以实现这一点。

我所知道的实现这些的场景都是公司的棕色地带,有很多令人困惑的遗留基础设施需要转换。哦,是的:类似的,anchor是用于资源排序的。为什么不使用更干净、更高效的元参数?与上述相同的棕地原因,尤其是如果以前的基础设施是脚本。