在自定义Puppet ruby函数中,是否可以在每次目录运行时存储持久数据?
使用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::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级别驱动,其中这种范围是隐式的,至少对于类和节点是这样。