木偶应用自定义功能

puppet apply custom function

如何在具有 puppet apply 的任何节点上快速 运行 自定义函数?

假设我有这个文件 (test.pp)

file { "/root/files/f":
   content => test('test'),
}

而这个 ruby 文件 (test.rb) 只记录和 return 第一个参数。

require 'logger'
module Puppet::Parser::Functions
  newfunction(:test, :type => :rvalue
  ) do |args|

    log = Logger.new(STDOUT)
    log.level = Logger::INFO
    log.info(args[0])
    args[0]
  end
end

如何用 puppet apply test.pp 调用 ruby 函数 test

我的问题是 运行 我的整个 puppet agent -t 需要 5 分钟,我需要向 puppet 添加一个功能,所以我想快速测试它而不是每次都等待 5 分钟。

刚知道

您需要做的就是将 test.rb 文件直接添加到 /var/lib/puppet/lib/puppet/parser/functions/test.rb 中,puppet apply 将 "see" 函数。

这当然可以,但很难维护。

一种更易于维护的方法是将您的函数添加到一个模块,然后将该模块安装到您的主服务器上。

例如,使用您的模块名称创建一个新的(例如 test_function):

mkdir -p test_function/lib/puppet/parser/functions

您的 test_function 模块中应该有以下树

├── lib
│   └── puppet
│       ├── parser
│       │   └── functions
│       │       ├── test.rb

将您的 test.rb 代码添加到 test.rb 文件

将这个模块复制到你master的模块路径(这可能是/etc/puppet/modules,具体取决于你的Puppet版本,使用puppet module list查找)

之后,puppet master 将读取其模块列表并动态添加它找到的所有功能。

这里有更多关于它的文档:

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

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