我在模块check_value
中定义了一个木偶函数test_one
test_one
|- functions
|- check_value.pp
和函数声明:
test_one::check_value(String $check) >> String {
...
}
我在同一个模块中声明了一个类test_functions
。
test_one
|- functions
|- check_value.pp
|- manifests
|- test_functions.pp
一切似乎都很完美,我可以在同一个模块中从类check_value
调用这个函数test_functions
,并且可以获取返回值。
但是,如果我从另一个模块调用此函数,我会得到Evaluation Error: Unknown function: ...
test_two
|- manifests
|- test_external_function.pp
在班级test_external_function
,我尝试了几种方法来调用check_value
,但没有运气:
1. $x = test_one::check_value("t")
2. include test_one
$x = check_value("t")
3. include test_one
$x = test_one::check_value("t")
所有试验都失败了。是否可以从另一个模块调用和使用这些puppet(非ruby)函数?我似乎找不到办法。到目前为止谷歌没有任何帮助!
根据傀儡文件,有可能:Puppet Functions
函数是自动加载的,并且可供其他模块使用,除非这些模块指定依赖项。一旦函数被编写并可用(在自动加载器可以找到它的模块中),您可以在任何Puppet清单中调用该函数,该清单将包含模块列为依赖项,也可以从主清单中调用。
这是因为在Puppet编码中引入了一个相对较新的要求,记录了here。特别:
请注意,如果模块的metadata.json文件中包含依赖项列表,则它仅从这些特定依赖项加载自定义函数。
通常,通过PDK或puppet module generate
生成模块将创建一个占位符metadata.json
,其中puppetlabs/stdlib
作为依赖项。这在实践中通常很好,但它会破坏自动加载自定义功能与其他模块。
在这种情况下(我猜你通常也会说每个最佳实践),你可能希望指定其他模块,这些模块使用自定义函数作为模块的metadata.json
中的依赖项。例如,在test_two/metadata.json
中,你可能会有类似的东西:
"dependencies": [
{ "name": "org_name/test_one", "version_requirement": ">= 1.0.0 < 2.0.0" },
]
有关指定依赖项here的完整文档。