计划查找:无法找到课程

计划查找:无法找到课程

运行使用针对 Hiera 的功能的 Puppet 计划时,lookup{}出现错误:

The target node: 'computer1.domain.com' errored with a message: Internal Server Error: org.jruby.exceptions.RuntimeError: (PreformattedError) Evaluation Error: Error while evaluating a Method call, Could not find class ::- profile::app_update_3 for computer1.domain.com (file: /opt/puppetlabs/server/data/orchestration-services/code/environments/development/site-modules/profile/plans/package_install_plan.pp, line: 18, column: 40) on node computer1.domain.com

计划类别:

plan profile::package_install_plan (
  TargetSpec $targets,
){

  $targets.apply_prep

  $apply_results = apply($targets, '_catch_errors' => true) {
    lookup('classes', Array[String], 'unique').include
    
    #include profile::app_update_3
  }

  #return $apply_results
  $apply_results.each |$result| {
    $target = $result.target.name
   
    if $result.ok
    {
      out::message("The target node: '${target}' returned a value: ${result.message}")
      out::message("Target node: '${target}'. Report: ${result.report}")
    }
    else
    {
      out::message( "The target node: '${target}' errored with a message: ${result.error.message}")
    }
  }
}

我的 Hiera 数据配置如下:

  • ./data/os/windows.yaml
  • ./data/nodes/computer1.domain.com.yaml

在 中windows.yaml,我有以下几行:

classes:
  - profile::app_update_1

computer1.domain.com.yaml有以下几行:

classes:
  - profile::app_update_3

在计划中,如果我使用include profile::app_update_3它可以工作,所以我看不到该类实际上是缺失的。

classes:如果我从中删除定义computer1.domain.com.yaml,它就可以起作用。

如果我添加定义,它就会classes:起作用windows.yaml

如果它与计划函数中的数组与字符串有关lookup{},我已经尝试了多个类,尽管我相信 YamlXYZ: - Array1仍然是一个数组。

我已经检查过 Yaml 中没有令人不安的虚假字符。

特定节点数据在其他区域起作用,所以我认为我的hiera.yaml没问题。

我已尝试进行注释,lookup('classes').include以免.\manifests\site.pp造成干扰。

这里是 Puppet 的记录示例(使用旧hiera_include功能)。

还有一件我不明白的事情。什么时候我应该只使用类名 ( app_update_3),什么时候我应该包含完整模块名 ( profile::app_update_3)?我的猜测是,当模块调用其自己的一个类时,我只使用app_update_3,但似乎不是这样。

我已经没有什么主意了,所以如果有人能给我指明正确的方向,我将不胜感激。

短暂性脑缺血发作

(Puppet 企业版:v2019.8.4)

答案1

看起来我没做错什么,上面的操作完全没问题。无奈之下,我computer1.domain.com.yaml在 Linux 系统上重写了该文件 - 成功了。

然后,我比较了这两个文件,并在 Notepad ++ 中查看原始文件,发现了以下内容: 在此处输入图片描述

连字符和“profile”之间没有字符。我怎么打不出字符,我不知道。无论我怎么查看日志,都找不到字符。

VSCode(Windows)现在看起来很开心。

相关内容