在同一模块和不同清单中调用函数

时间:2018-06-19 16:06:17

标签: puppet puppet-enterprise

我创建了其他文件来划分主要人偶文件上的负载。我希望这些其他文件以某种格式返回字符串,因此创建了一个函数。在具有多个功能的多个文件中,我想从主文件中调用这些功能并获取结果。

util.pp

functions mymodule::retrieveData() >> String {
   ..   
  "${results}" 
}

主文件:

include util.pp
$items = mymodule::retrieveData()

结构

manifest
  - main.pp
  - util.pp

问题:

  1. 访问人偶文件中的功能。 include util.pp似乎没有加载文件。错误:Could not find class ::util
  2. 调用retrieveData()以将String结果存储在$items

1 个答案:

答案 0 :(得分:1)

您有多个问题,其中:

  1. (平凡的)您在函数定义中拼错了关键字function
  2. (平凡的)您声称清单是在名为“清单”的目录中。如果这是真的,那是不正确的;用于定义类和定义类型的清单的文件夹应命名为“清单”。 (另请参见下文。)
  3. 您对包含函数定义的文件命名不正确。文件名应对应于函数名:retrieveData.pp。因此,每个函数必须放在自己的文件中。
  4. 您将包含函数定义的文件放置在错误的位置。模块中的manifests/文件夹用于提供类和定义的类型(仅)定义的文件。 Per the documentation中提供Puppet语言功能定义的文件位于该目录的同级functions/中。
  5. include语句用于将包含在正在构建的目录中 。它与源文件无关。如果您试图声明一个类,那么它将期望您提供所需类的名称,而不是文件名。无论如何,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}'": }
}