// hiera:du不能找到模块类

时间:2019-02-26 14:54:18

标签: puppet test-kitchen hiera

在厨房汇聚期间,打电话给人偶,我得到了这个错误:

Error: Evaluation Error: Error while evaluating a Function Call, Could not find class ::alibi for ... at .. entry.pp 

alibi是模块名称,并且:

/tmp/kitchen>ll
total 8
drwxrwxr-x. 4 kitchen kitchen  80 Feb 26 14:14 hiera
 -rw-rw-r--. 1 kitchen kitchen 170 Feb 26 14:14 hiera.global.yaml
drwxrwxr-x. 2 kitchen kitchen 100 Feb 26 14:35 manifests
drwxrwxr-x. 4 kitchen kitchen  80 Feb 26 14:14 modules
-rw-rw-r--. 1 kitchen kitchen 901 Feb 26 13:53 puppet.conf
/tmp/kitchen>more  manifests/entry.pp manifests/init.pp
::::::::::::::
manifests/entry.pp
::::::::::::::
  hiera_include('classes')
::::::::::::::
manifests/init.pp
::::::::::::::

class alibi () {

    $instances = hiera_hash("alibi::instances", {})
    validate_hash($instances)
    create_resources("alibi::instance", $instances)

}
/tmp/kitchen>/tmp/kitchen>more hiera.global.yaml
---
:backends:
- yaml

:yaml:
 :datadir: "/tmp/kitchen/hiera"

:hierarchy:

- tests/%{hostname}
- origin/main

# options are native, deep, deeper
:merge_behavior: deeper
/tmp/kitchen>/tmp/kitchen>more hiera/origin/main.yaml
classes:
 - alibi

命令是

 export MANIFESTDIR='/tmp/kitchen/manifests'; sudo -E env 
 http_proxy=http://proxy-internet.localnet:3128 
 https_proxy=http://proxy-internet.localnet:3128  puppet apply 
 /tmp/kitchen/manifests/entry.pp --modulepath=/tmp/kitchen/modules 
 --fileserverconfig=/tmp/kitchen/fileserver.conf 
 --hiera_config=/tmp/kitchen/hiera.global.yaml --detailed-exitcodes -v 

如果我使用init.pp而不是entry.pp也可以(但不会调用hiera_include())

1 个答案:

答案 0 :(得分:2)

您的代码应正确放置在模块中。当Puppet查找名为alibi的类时,它将检查模块路径中的每个目录(不清楚您的情况,但可能只是/tmp/kitchen/modules)以查找文件alibi/manifests/init.pp。工作目录和清单目录无关,至少在任何仍应在任何地方使用的Puppet版本中都是如此。

但是,这个特殊名称有点特殊,因为它将被解释为模块主类的名称。同一模块中的其他类和定义的类型的映射将有所不同。例如,alibi::good将映射到alibi/manifests/good.pp,而alibi::alibi将映射到alibi/manifests/alibi.pp

  

如果我使用init.pp而不是entry.pp也可以(但不会调用hiera_include())

是的,是的,不是的。 Puppet不依赖文件映射约定,当您明确告诉当前目录要评估哪个文件时,它会检查当前目录。因此,当您显式命名init.pp时,它将找到并评估该文件。但是不,仅凭该文件本身就没什么用:Puppet会解析类声明,但是该清单中没有任何内容表明要将该类应用到目标节点。