【问题标题】:Can a custom Ruby function defined in one Puppet module be called from a .pp file in another module?可以从另一个模块中的 .pp 文件调用在一个 Puppet 模块中定义的自定义 Ruby 函数吗?
【发布时间】:2015-02-27 15:54:58
【问题描述】:

我有一个自定义函数,我需要从至少两个不同的 puppet 模块调用(服务器端)。这些调用将在 Puppet DSL 定义的类型中进行,而不是基于 Ruby 的自定义类型和提供程序。

我知道,如果我将定义放在“lib\puppet\parser\functions”目录中的 .rb 文件中,则可以在该模块中访问它。是否可以从其他模块调用该函数,也许在它之前有一些模块限定符?还是我需要使用其他方法?该函数接受两个字符串参数并返回一个哈希值。

我对自定义函数的了解很少见这里:

https://docs.puppetlabs.com/guides/custom_functions.html

https://docs.puppetlabs.com/guides/plugins_in_modules.html

以下博客文章似乎暗示所有模块的所有功能都可以从任何模块访问,但我可能会误解它:

http://www.masterzen.fr/2011/10/29/puppet-extension-points-part-1/

【问题讨论】:

  • 只要启用了pluginsync,您的函数就应该可用于任何其他清单。
  • 谢谢。如果您将此作为答案并包含指向 Puppet Labs 文档的链接以澄清这一点,我将接受它作为答案。
  • @ptierno pluginsync 仅与代理相关。它与解析器函数无关。它将它们同步到代理,但无论如何都可以编译清单,即使pluginsync 被禁用(但不要这样做)。
  • @FelixFrank 谢谢。在这种情况下,我也将主节点视为代理节点。 docs.puppetlabs.com/guides/plugins_in_modules.html 几乎声明 pluginsync 应该将自定义函数添加到 master 上正确的 $libdir。可能应该更具体。
  • 是的,原来是从 2010 年初开始,从 Puppet 版本 2.6.0 之前开始。我会尝试将其删除,这是不正确且具有误导性的。

标签: ruby puppet


【解决方案1】:

模块中的插件始终可供编译器使用,在任何清单中,包含所有模块。对于类型和解析器函数都是如此。

例如,stdlib 模块包括 file_line 类型,它明确用于模块外部。

【讨论】:

  • 感谢您将答案扩展到包括类型。
【解决方案2】:

如果您启用了pluginsync,puppet 将提供您所有的自定义factstypesfunctions 等。

puppet.conf 中设置pluginsync=true

参考

Plugins in modules

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多