Puppet 在同一模块和不同清单中调用函数
我已经创建了其他文件来分配主木偶文件上的负载。我希望这些附加文件以某种格式返回字符串,因此创建了一个函数。在具有多个函数的多个文件中,我希望从主文件调用这些函数并获得结果 util.ppPuppet 在同一模块和不同清单中调用函数,puppet,puppet-enterprise,Puppet,Puppet Enterprise,我已经创建了其他文件来分配主木偶文件上的负载。我希望这些附加文件以某种格式返回字符串,因此创建了一个函数。在具有多个函数的多个文件中,我希望从主文件调用这些函数并获得结果 util.pp functions mymodule::retrieveData() >> String { .. "${results}" } 主文件: include util.pp $items = mymodule::retrieveData() 结构 manifest - mai
functions mymodule::retrieveData() >> String {
..
"${results}"
}
主文件:
include util.pp
$items = mymodule::retrieveData()
结构
manifest
- main.pp
- util.pp
这些问题:
include util.pp
似乎没有加载该文件。错误:找不到class::util
retrieveData()
获取字符串结果以存储在$items
您有多个问题,其中包括:
function
retrieveData.pp
。因此,每个函数都必须放在自己的文件中manifests/
文件夹用于提供类定义和定义类型(仅限)的文件,提供Puppet语言函数定义的文件位于名为functions/
的目录的同级目录中include
语句用于使类包含在正在构造的目录中。这与源文件无关。如果您试图声明一个类,那么它希望您提供所需类的名称,而不是文件名。在任何情况下,include
语句在访问函数时都不起作用,您不应该尝试将其用于函数更新:
function mymodule::retrieveData() >> String {
"some data"
}
class mymodule {
$data = mymodule::retrieveData()
notify { "The data are: '${data}'": }
}
由于对上述含义似乎缺乏明确性,以下是一个具体的例子:
mymodule/functions/retrieveData.pp:
function mymodule::retrieveData() >> String {
"some data"
}
class mymodule {
$data = mymodule::retrieveData()
notify { "The data are: '${data}'": }
}
mymodule/manifests/init.pp:
function mymodule::retrieveData() >> String {
"some data"
}
class mymodule {
$data = mymodule::retrieveData()
notify { "The data are: '${data}'": }
}
注意:你问题的标题掩盖了对木偶术语的误解。“清单”或“清单文件”是包含用Puppet语言编写的代码的文件。所有清单文件名称的标准后缀为“.pp”。可能你的意思是“在同一个模块和不同的清单中调用一个函数”,尽管Puppet函数总是在它们自己的文件中定义,所以“和不同的清单”部分是无关的。这很有意义,谢谢。我将更新问题标题。我现在将
retrieveData.pp
放在functions
文件夹中,与清单
处于同一级别。函数名与文件名相同函数myModule::retrieveData()>>字符串
。我不确定如何从清单中的puppet
文件调用它folder@miqdadamirali,如我所说,只需通过其命名空间限定名调用函数。您问题中示例代码中的调用似乎具有正确的形式。只需省略include
语句。我确实省略了它,并将调用保持为$items=mymodule::retrieveData()
。我得到以下错误评估错误:未知函数:myModule::retrieveData
在您声称进行的调用和您声称收到的错误消息之间,大小写不匹配。他们不在一起。但这可能会指出问题所在:您需要在模块名称的大小写上处处保持一致(根据资源引用和类型名称中必须使用的特定大小写更改)。这听起来像是一个bug。Puppet历史上在标识符字符的大小写方面有一些奇怪的缺点,但根据文档,最新版本允许混合大小写(和区分大小写),但某些类型构造的标识符的第一个字符除外。不过,就我个人而言,我很谨慎,我的名字中任何地方都避免使用大写字母。