为什么要使用 "resource collectors"?
Why would one use "resource collectors"?
我正在查看 Puppet Forge 上的 OpenStack 模块。这些模块使用 "resource collectors" 所以我在这里阅读 "resource collectors":https://docs.puppet.com/puppet/latest/reference/lang_collectors.html
我还是不明白为什么需要使用资源收集器?
下面是 OpenStack/puppet-keystone 模块使用资源收集器的示例:
if !is_service_default($memcache_servers) or !is_service_default($cache_memcache_servers) {
Service<| title == 'memcached' |> -> Anchor['keystone::service::begin']
}
我猜这会进行资源排序;导致 memcached 服务资源在 keystone::service::begin 锚点之前执行。我真的不知道Anchor是什么。我猜它用于资源排序?
资源收集器有多种用途:
- 他们实现虚拟资源,或者他们收集出口的,取决于收集者的形式。虚拟资源的
realize()
功能也在这个space中发挥,但是除了收集器之外没有办法收集导出的资源。另见下文。
- 它们可以用在链式表达式中,如您的示例所示,以设置排序约束。
- 它们可用于覆盖资源参数。
在这些用途中的每一种中,收藏家都具有有时使它们特别方便的特性,其中包括:
- 收集器对目录中的所有匹配资源进行操作,包括在计算收集器表达式时尚未声明的任何资源,无论声明的位置或范围如何。
- 收集器支持过滤谓词(例如
title == 'memcached'
),这有助于微调收集哪些资源。这在与标签结合使用时特别有用。
- 收集器可以收集零资源,没关系。
最后一个似乎是您提供的具体示例的要点:因为最多可以有一个 Service
具有 title == 'memcached'
,所以整体表达式导致该服务在 [= 之前同步14=] 如果它包含在目录中,但如果没有声明此类服务,它就没有效果,与清单解析顺序无关。我认为没有其他 parse-order-independent 方法可以做到这一点。
我正在查看 Puppet Forge 上的 OpenStack 模块。这些模块使用 "resource collectors" 所以我在这里阅读 "resource collectors":https://docs.puppet.com/puppet/latest/reference/lang_collectors.html
我还是不明白为什么需要使用资源收集器?
下面是 OpenStack/puppet-keystone 模块使用资源收集器的示例:
if !is_service_default($memcache_servers) or !is_service_default($cache_memcache_servers) {
Service<| title == 'memcached' |> -> Anchor['keystone::service::begin']
}
我猜这会进行资源排序;导致 memcached 服务资源在 keystone::service::begin 锚点之前执行。我真的不知道Anchor是什么。我猜它用于资源排序?
资源收集器有多种用途:
- 他们实现虚拟资源,或者他们收集出口的,取决于收集者的形式。虚拟资源的
realize()
功能也在这个space中发挥,但是除了收集器之外没有办法收集导出的资源。另见下文。 - 它们可以用在链式表达式中,如您的示例所示,以设置排序约束。
- 它们可用于覆盖资源参数。
在这些用途中的每一种中,收藏家都具有有时使它们特别方便的特性,其中包括:
- 收集器对目录中的所有匹配资源进行操作,包括在计算收集器表达式时尚未声明的任何资源,无论声明的位置或范围如何。
- 收集器支持过滤谓词(例如
title == 'memcached'
),这有助于微调收集哪些资源。这在与标签结合使用时特别有用。 - 收集器可以收集零资源,没关系。
最后一个似乎是您提供的具体示例的要点:因为最多可以有一个 Service
具有 title == 'memcached'
,所以整体表达式导致该服务在 [= 之前同步14=] 如果它包含在目录中,但如果没有声明此类服务,它就没有效果,与清单解析顺序无关。我认为没有其他 parse-order-independent 方法可以做到这一点。