在同一模块和不同清单中调用函数
Calling a function in the same module and different manifest
我已经创建了额外的文件来分担主人偶文件的负载。我希望这些附加文件 return 某种格式的字符串,因此创建了一个函数。在具有多个函数的多个文件中,我想从主文件中调用这些函数并获取结果。
util.pp
functions mymodule::retrieveData() >> String {
..
"${results}"
}
主文件:
include util.pp
$items = mymodule::retrieveData()
结构
manifest
- main.pp
- util.pp
问题:
- 正在访问主 puppet 文件中的函数。
include util.pp
似乎没有加载文件。错误:Could not find class ::util
- 正在调用
retrieveData()
获取要存储在 $items
中的字符串结果
您有多个问题,其中:
- (微不足道)您在函数定义中拼错了关键字
function
。
- (琐碎)您声称您的清单位于名为 "manifest" 的目录中。如果这是真的,那将是不正确的;用于定义 classes 和已定义类型的清单的文件夹应命名为 "manifests"。 (另见下文。)
- 您错误地命名了包含函数定义的文件。文件名应对应函数名:
retrieveData.pp
。因此每个函数都必须放在自己的文件中。
- 您将包含函数定义的文件放在了错误的位置。模块中的
manifests/
文件夹用于提供 classes 和定义类型(仅)定义的文件。 Per the documentation,提供 Puppet 语言函数定义的文件位于名为 functions/
. 的同级目录中
include
语句是为了使classes包含在正在构建的目录中。它与源文件无关。如果您尝试声明一个 class,那么它希望您提供所需 class 的名称,而不是文件名。在任何情况下,include
语句在访问函数中没有任何作用,您不应该尝试将它与它们一起使用。
总体而言,在正确的命名空间中声明您的函数(显然已完成),相应地命名其文件,将文件放在该命名空间中函数的正确位置,并在您使用时通过正确的名称和命名空间引用该函数叫它。
更新:
由于上面的意思似乎有些不清楚,这里有一个具体的例子:
mymodule/functions/retrieveData.pp:
function mymodule::retrieveData() >> String {
"some data"
}
mymodule/manifests/init.pp:
class mymodule {
$data = mymodule::retrieveData()
notify { "The data are: '${data}'": }
}
我已经创建了额外的文件来分担主人偶文件的负载。我希望这些附加文件 return 某种格式的字符串,因此创建了一个函数。在具有多个函数的多个文件中,我想从主文件中调用这些函数并获取结果。
util.pp
functions mymodule::retrieveData() >> String {
..
"${results}"
}
主文件:
include util.pp
$items = mymodule::retrieveData()
结构
manifest
- main.pp
- util.pp
问题:
- 正在访问主 puppet 文件中的函数。
include util.pp
似乎没有加载文件。错误:Could not find class ::util
- 正在调用
retrieveData()
获取要存储在$items
中的字符串结果
您有多个问题,其中:
- (微不足道)您在函数定义中拼错了关键字
function
。 - (琐碎)您声称您的清单位于名为 "manifest" 的目录中。如果这是真的,那将是不正确的;用于定义 classes 和已定义类型的清单的文件夹应命名为 "manifests"。 (另见下文。)
- 您错误地命名了包含函数定义的文件。文件名应对应函数名:
retrieveData.pp
。因此每个函数都必须放在自己的文件中。 - 您将包含函数定义的文件放在了错误的位置。模块中的
manifests/
文件夹用于提供 classes 和定义类型(仅)定义的文件。 Per the documentation,提供 Puppet 语言函数定义的文件位于名为functions/
. 的同级目录中
include
语句是为了使classes包含在正在构建的目录中。它与源文件无关。如果您尝试声明一个 class,那么它希望您提供所需 class 的名称,而不是文件名。在任何情况下,include
语句在访问函数中没有任何作用,您不应该尝试将它与它们一起使用。
总体而言,在正确的命名空间中声明您的函数(显然已完成),相应地命名其文件,将文件放在该命名空间中函数的正确位置,并在您使用时通过正确的名称和命名空间引用该函数叫它。
更新:
由于上面的意思似乎有些不清楚,这里有一个具体的例子:
mymodule/functions/retrieveData.pp:
function mymodule::retrieveData() >> String {
"some data"
}
mymodule/manifests/init.pp:
class mymodule {
$data = mymodule::retrieveData()
notify { "The data are: '${data}'": }
}