【问题标题】:Puppet Evaluation Error: Error while evaluating a Resource Statement, Could not find declared classPuppet 评估错误:评估资源语句时出错,找不到声明的类
【发布时间】:2017-11-13 23:34:48
【问题描述】:

我正在尝试使用发布在 github 上的说明通过 Puppet 部署一个名为 Bag-Of-Holding 的应用程序 - https://github.com/ribeiroit/boh-puppet

我运行命令:sudo puppet apply /etc/puppet/manifests/site.pp 我收到以下错误:

错误:评估错误:评估资源语句时出错,在节点 lab1-hp-elitebook-8570p 上的 /etc/puppet/manifests/site.pp:2:2 找不到声明的类 boh

木偶似乎很难找到已经在清单文件夹中的类boh

这是我的目录树:

/etc/puppet
├── code
├── manifests
└── modules
    └── boh-puppet
        ├── manifests
        └── templates

我的site.pp 文件位于/etc/puppet/manifests 它看起来像这样:

node 'lab1-hp-elitebook-8570p' {
  class { 'boh':
    python_version   => 3,
    environment      => 'dev',
    language         => 'en',
    debug            => 'True',
    create_superuser => 'true',
    pkg_checksum     => '86b0164f7fd6c5e4aa43c8f056f08cea'
  }
}

init.pp 文件有 class {boh },它位于: /etc/puppet/modules/boh-puppet/manifests

任何想法如何解决这个问题?

【问题讨论】:

    标签: puppet


    【解决方案1】:

    自动加载时,Puppet 需要某些命名空间限制和模块目录结构和类名约定。在这种情况下,您的问题可以通过将boh-puppet 的模块目录重命名为简单的boh 来最简单和干净地解决以遵循正常约定。这将解决您的问题。

    请参阅此处的文档以获取更多信息:https://puppet.com/docs/puppet/4.10/lang_namespaces.html

    由于您将puppet apply 与绝对路径一起使用,您还需要通过将命令修改为:sudo puppet apply --modulepath=/etc/puppet/modules /etc/puppet/manifests/site.pp 来提供模块的路径。

    【讨论】:

    • Matt,根据您的建议,我继续将 boh-puppet 重命名为 boh,但在应用 site.pp 文件时仍然出现错误消息。这是我的目录树的样子:
    • Matt,根据您的建议,我继续将 boh-puppet 重命名为 boh,但在应用 site.pp 文件时仍然出现错误消息。这是我的目录树的样子: /etc/puppet ├── code ├── manifests -----site.pp └── modules └── boh ├── manifests --init.pp 包含定义的类{boh} 在 site.pp 调用 └── 模板错误:..在节点 lab1-hp-elitebook-8570p 上的 /etc/puppet/manifests/site.pp:2:2 找不到声明的类 boh
    • @AdizaBaakoe 尝试将命令更改为sudo puppet apply --modulepath=/etc/puppet/modules /etc/puppet/manifests/site.pp
    • 好吧,你的输入让我领先一步(这是个好消息),我想我会告诉你,即使我现在遇到新的错误消息(发布在下面),我会今天下午花一些时间在 init.pp 中挖掘一行
    • 错误 ---- lab1@lab1-HP-EliteBook-8570p:/etc/puppet/modules$ sudo puppet apply --modulepath=/etc/puppet/modules /etc/puppet/manifests/ site.pp 警告:/etc/puppet/hiera.yaml:不推荐使用“hiera.yaml”版本 3。它应该转换为版本 5(在 /etc/puppet/hiera.yaml 中)错误:评估错误:找不到资源类型:CentOS at /etc/puppet/modules/boh/manifests/init.pp:37:9 on node lab1-hp-elitebook-8570p
    【解决方案2】:

    您没有正确调用模块名称。这应该有效:

    node 'lab1-hp-elitebook-8570p' {
            class { 'boh-puppet':
            python_version => 3,
            environment => 'dev',
            language => 'en',
            debug => 'True',
            create_superuser => 'true',
            pkg_checksum => '86b0164f7fd6c5e4aa43c8f056f08cea'
            }
    }
    

    或者 fqn 这个:

    node 'lab1-hp-elitebook-8570p' {
            class { '::boh-puppet':
            python_version => 3,
            environment => 'dev',
            language => 'en',
            debug => 'True',
            create_superuser => 'true',
            pkg_checksum => '86b0164f7fd6c5e4aa43c8f056f08cea'
            }
    }
    

    【讨论】:

    • 根据您的建议,我将 site.pp 文件从 class { 'boh': 修改为 class { 'boh-puppet': 以及 class { '::boh-puppet': ,无似乎可以解决问题。收到的错误消息与之前相同:“错误:评估错误:评估资源语句时出错,无法在节点 lab1-hp 上的 /etc/puppet/manifests/site.pp:2:2 找到声明的类 boh-puppet -elitebook-8570p"
    • 仅供参考,定义类 { boh 位于 /etc/puppet/modules/boh-puppet/manifests/init.pp 的 init.pp 文件中,而 site.pp 文件位于全局清单文件 /etc/puppet/manifests/site.pp。如何准确指向site.pp文件中的init.pp文件?我相信我的问题,但我无法弄清楚。当我启动 puppet apply 命令时,似乎没有看到定义的类( Class {'boh' : )。任何意见,将不胜感激。我正在运行一个没有主人的木偶。
    • 类的名称在其定义中给出,与包含该定义的清单所在的目录无关。然而,为了让 Puppet 能够找到它,您通常需要命名目录以匹配类的模块。问题确实在那里不匹配,但正确的解决方案更有可能是更改目录名称,而不是用不同的名称引用类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多