puppet - 为什么要使用 "resource collectors"?

标签 puppet

我正在查看 Puppet Forge 上的 OpenStack 模块。这些模块使用“资源收集器”,所以我在这里阅读“资源收集器”: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 之前执行。我真的不知道Anchor是什么。我猜它用于资源排序?

最佳答案

资源收集器有多种用途:

  • 他们实现虚拟资源,或者他们收集导出的资源,这取决于收集器的形式。虚拟资源的realize()函数也在这个空间发挥作用,但是除了收集器之外别无他法来收集导出的资源。另见下文。
  • 它们可以用在链式表达式中,如您的示例所示,以设置排序约束。
  • 它们可用于覆盖资源参数。

在这些用途中的每一种中,收集器都具有有时使它们特别方便的属性,其中包括:

  • 收集器对目录中的所有匹配资源进行操作,包括在评估收集器表达式时尚未声明的任何资源,无论声明的位置或范围如何。
  • 收集器支持过滤谓词(例如 title == 'memcached'),有助于微调收集哪些资源。这在与标签结合使用时特别有用。
  • 收集器可以收集零资源,没关系。

最后一个似乎是您提供的具体示例的要点:因为最多可以有一个 Service 具有 title == 'memcached',所以整体表达式如果该服务包含在目录中,则会导致该服务在 Anchor['keystone::service::begin'] 之前同步,但如果没有声明此类服务,则它没有任何效果,独立于 list 解析命令。我认为没有任何其他独立于解析顺序的方法可以实现这一点。

关于puppet - 为什么要使用 "resource collectors"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275496/

相关文章:

Vagrant 远程盒设置

linux - 为puppet中的用户设置默认密码管理

puppet - 为什么 puppet 找不到我的类(class)?

puppet - puppet 家族核心事实是如何确定的?

docker - 如何停止和删除使用总是重启选项启动的 docker 容器?

windows - 在命令行上将变量传递给 puppet

hadoop - 如何 ?使用 ambari 自动安装 hdp 以进行夜间构建 (CI)

centos - 带有 Jenkins CI 安装的 Puppet Learning VM

windows - 通过 puppet 模块导入注册表文件的静默方式

linux - 无法使用 Puppet Enterprise 从 Puppet 运行命令来更新 Puppet Agent 的服务器