运行使用针对 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)