我在模块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 Functions
功能会自动加载并提供给其他模块,除非这些模块指定依赖项。一旦函数被编写并可用(在自动加载器可以找到的模块中),您就可以在任何Puppet清单中调用该函数,该清单还将包含该模块的模块作为依赖项,也可以从您的主清单中调用。
答案 0 :(得分:2)
这是由于here中所述的Puppet编码中引入了一个相对较新的要求。具体来说:
请注意,如果模块在其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的完整文档。