【问题标题】:puppet/hiera : the module class cannot be found durins a puppet applypuppet/hiera : 在 puppet 应用期间找不到模块类
【发布时间】:2019-02-26 23:20:48
【问题描述】:

在厨房聚合期间,调用 puppet 应用,我收到此错误:

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 test-kitchen hiera


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢约翰,我不能像这样改变选择的路径......这是一个被许多模块使用的横向工具,它工作......所以我要试着看看不同之处在那些和这个模块之间,这解释了为什么找不到类不在场证明
    • @Minstrel,如果你的意思是你的工具在 Puppet 的“模块”这个词的意义上“被许多模块使用”,那么你肯定会发现工作模块完全按照我的描述安排。这是作为(工作)模块的一部分。正如我所说,您的问题是您的课程不在模块中。
    • 我向您保证,所有模块的厨房发动机型号都是相同的。也许这会有所帮助:当我收敛时,厨房创建层次结构 /tmp/kitchen/moduleNamewhichWorks/etc ... 和其他依赖项,如 /tmp/kitchen/stdlib/ 使用不在场证明,它会创建这个:drwxrwxr-x. 7 kitchen kitchen 360 Feb 26 14:14 NAME OF CLASS IN INIT.PP drwxrwxr-x. 6 kitchen kitchen 360 Feb 26 14:14 stdlib 如果我们知道从哪个代码这个通用名称来了,它会有所帮助
    • 你使用的是什么版本的 Puppet,@Minstrel?如果您不愿意或无法使用 Puppet 清单的标准布局,则有一些潜在的解决方法,但哪些可用的方法取决于 Puppet 版本。
    • 一个旧版本...计划从 3.8.7 迁移到 6.x!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多