我编写将定义新类型的模块。在newproperty定义里面我想使用自定义函数(也在这个模块中提供),它将使munge传递值:
功能
#lib/puppet/parser/functions/my_custom_function.rb
module Puppet::Parser::Functions
newfunction(:my_custom_function, :type => :rvalue) do |args|
...
end
end
类型
#lib/puppet/type/new_type.rb
Puppet::Type.newtype(:new_type) do
newparam(:name) do
munge do |value|
my_custom_function(value)
end
end
end
但是当我尝试在上面的类型中使用函数时,我得到undefined local variable or method
。
我也无法访问自定义类型中的stdlib函数,但这些函数在清单文件中可用。
有人可以提供如何在类型定义中执行自定义函数的示例,尤其是在munge块中吗?
答案 0 :(得分:1)
自定义函数是解析器函数,仅用于清单。
类型代码仅由代理使用,在初始化资源时不会加载解析器函数。
您必须复制您的代码。如果这不可行,您可能必须在自定义Ruby库中实现它,并在自定义函数和类型中使用它。在这种情况下,需要在主服务器和代理程序上安装库。
答案 1 :(得分:0)
您需要将自定义函数中的代码提取到一个单独的位置,然后从自定义函数和类型/提供程序中调用该共享代码。您不需要将代码拉入单独的gem来执行此操作,将代码本地保存到模块中相当容易。
将您自己的Ruby类放在模块的lib/puppet/util/
目录中。然后,您应该能够从自定义函数和类型/提供程序require 'puppet/util/my_class'
{{1}}。您可以在我的模块jboss-puppet_admin中看到我如何完成此操作的示例。