是否必须为 Puppet 提供程序实施 self.instances 和 self.prefetch 方法

Is it mandatory to implement self.instances and self.prefetch methods for a Puppet provider

我们正在为网络存储设备编写 Puppet 模块。我们正在实现自定义类型和提供者,对于其中一种类型,我们平均拥有大约 40k 个对象。 通过预取和 self.instances 获取这么多资源将非常耗费性能。是否必须为提供商实施 self.instances 和预取方法?如果我们不实施它们,我们会失去什么?

Is it mandatory to implement self.instances and pre-fetch methods for a provider?

不,不是。

What will we lose if we do not implement them?

您将无法使用 Resources 资源清除相关类型的非托管资源。但是有这么多的资源,我倾向于认为你只会积极管理一些,而不会想清除其他的。

您将无法使用 puppet resource 命令枚举您的自定义类型的所有资源。

您还需要在调用提供者的 getter 方法时按需检索单个资源属性,或者跟踪是否已检索每个单独资源的状态并让每个 getter 如果需要,首先加载状态。两者皆可。

为了比较,请考虑 File 资源,这些资源在概念上与您的想法相似。 Puppet 不会尝试预取给定系统的所有 File 资源,而且没有实际可行的方法。