如何从与其定义的模块不同的模块调用puppet函数

问题描述 投票:2回答:1

我在模块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清单中调用该函数,该清单将包含模块列为依赖项,也可以从主清单中调用。

function module puppet manifest
1个回答
2
投票

这是因为在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的完整文档。

© www.soinside.com 2019 - 2024. All rights reserved.