puppet/hiera : 在 puppet 应用期间找不到模块 class
puppet/hiera : the module class cannot be found durins a puppet apply
在厨房聚会期间,调用木偶应用程序,我收到此错误:
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())
您的代码应正确放置在模块中。当 Puppet 查找名为 alibi
的 class 时,它会检查模块路径中的每个目录(不清楚你的情况,但可能只是 /tmp/kitchen/modules
)文件 alibi/manifests/init.pp
.工作目录和清单目录是无关紧要的,至少在应该仍在任何地方使用的任何版本的 Puppet 中是这样。
但是,这个特定名称有点特殊,因为它将被解释为模块的主要名称 class。同一模块中的其他 classes 和已定义类型的映射会略有不同。例如,alibi::good
将映射到 alibi/manifests/good.pp
,而 alibi::alibi
将映射到 alibi/manifests/alibi.pp
。
Its ok if I use init.pp instead of entry.pp (but hiera_include() is not called)
好吧,是的,也不是。 Puppet 不依赖于文件映射约定,当您明确告诉它要评估哪个文件时,它会检查当前目录。因此,当您明确地将 init.pp
命名为它时,它会查找并评估该文件。但是不,单独评估该文件没有什么用处:Puppet 将解析 class 声明,但清单中没有任何内容表明 apply class到目标节点。
在厨房聚会期间,调用木偶应用程序,我收到此错误:
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())
您的代码应正确放置在模块中。当 Puppet 查找名为 alibi
的 class 时,它会检查模块路径中的每个目录(不清楚你的情况,但可能只是 /tmp/kitchen/modules
)文件 alibi/manifests/init.pp
.工作目录和清单目录是无关紧要的,至少在应该仍在任何地方使用的任何版本的 Puppet 中是这样。
但是,这个特定名称有点特殊,因为它将被解释为模块的主要名称 class。同一模块中的其他 classes 和已定义类型的映射会略有不同。例如,alibi::good
将映射到 alibi/manifests/good.pp
,而 alibi::alibi
将映射到 alibi/manifests/alibi.pp
。
Its ok if I use init.pp instead of entry.pp (but hiera_include() is not called)
好吧,是的,也不是。 Puppet 不依赖于文件映射约定,当您明确告诉它要评估哪个文件时,它会检查当前目录。因此,当您明确地将 init.pp
命名为它时,它会查找并评估该文件。但是不,单独评估该文件没有什么用处:Puppet 将解析 class 声明,但清单中没有任何内容表明 apply class到目标节点。