在自定义Puppet ruby函数中,是否可以在每次目录运行时存储持久数据?

在自定义Puppet ruby函数中,是否可以在每次目录运行时存储持久数据?,ruby,puppet,Ruby,Puppet,使用Puppet,在自定义ruby函数中是否可以缓存单个目录运行的值 我有这个功能: Puppet::Functions.create_function(:myFunction) do def myFunction( *arguments ) data = call_function( 'lookup', [ 'myHieraKey', nil, nil, {} ] ) data.length() end end 该函数被多次调用,如果每次调

使用Puppet,在自定义ruby函数中是否可以缓存单个目录运行的值

我有这个功能:

Puppet::Functions.create_function(:myFunction) do

    def myFunction( *arguments )
        data = call_function( 'lookup', [ 'myHieraKey', nil, nil, {} ] )
        data.length()
    end

end
该函数被多次调用,如果每次调用都不查询hiera,则该函数将更为优化

我似乎找不到任何关于如何做到这一点的提示。一种快速而肮脏的方法可能是定义一个唯一的类变量,但是这会污染其中一个Puppet类

@@mymodule_myfunction_myvariable={}


是否有“适当”的方法?

实际上,类变量类似于低级语言中的静态变量,但也确实会“污染”代码。但是,您的代码还意味着Hiera查找在每个函数调用期间都是相同的,因此为什么不将
查找重构为传递到函数中的参数呢?然后,
查找
只会在每次目录编译时发生一次。谢谢@MattSchuchard-虽然可能,我必须用一个可以访问puppet类变量的puppet define来包装这个ruby函数。我希望有更“整洁”的东西。在插件级别没有每个目录(编译/运行)的范围。如果这是您所需要的范围,那么它必须从Puppet DSL级别驱动,其中这种范围是隐式的,至少对于类和节点是这样。