如何从人偶清单中调用人偶提供者方法?

How to call a puppet provider method from puppet manifest?

我正在使用来自 puppet forge 的 ibm_installation_manager 模块,它有点基础,因为 IBM 在幂等性做得很多的时候编写了 Installation Manager。 参考:https://forge.puppet.com/puppetlabs/ibm_installation_manager

因此它不能很好地满足升级的需要 - 因此模块不会检测是否需要升级、停止现有进程、进行升级然后再次启动进程。它只会检测是否需要升级并尝试安装所需的版本,如果这构成了很好的升级,但它可能会因 运行 个实例而失败。

所以我需要实现一些 "stop processes" 预升级功能。

此时我需要说明一下,我是 ruby 的新手,也是 puppet 的新手。

模块使用的提供程序 (imcl.rb) 有一个 exists 方法。 我检测是否会发生升级(如果是则停止实例)的理想方法是让我的人偶清单能够以某种方式调用 exists 方法。这可能吗?

或者你会如何解决这个问题? 像 imcl.exists(ibm_pkg["my_imcl_pkg_resource"])

The ideal way for me to detect if an upgrade is going to happen (and stop the instances if it is) would be for my puppet manifest to be able to somehow call the exists method. Is this possible?

不,这是不可能的,至少不是以任何有用的方式。您的清单描述了如何构建描述机器目标状态的 资源目录 。在主/代理设置中,这发生在主服务器上。然后将目录用作单独步骤的输入,在该步骤中它被传输到目标机器并在那里 applied。供应商参与的正是第二步。

如果您希望目录的内容受到目标机器当前状态的影响,Puppet 机制会以 事实。添加您自己的事实相对简单。事实上,至少有 two distinct, non-exclusive mechanisms,名字是 "external facts" 和 "custom facts"。