При запуске плана Puppet, который использует функцию lookup {}
для Hiera, я получаю сообщение об ошибке:
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
он работает, поэтому я не вижу, что класс действительно отсутствует.
Если я удалю определенные классы :
из computer1.domain.com.yaml
, все заработает.
Если я добавлю определенные классы :
в windows.yaml
, это сработает.
Если это имеет какое-то отношение к массивам и строкам в функции plan lookup {}
, я пробовал использовать несколько классов, хотя я верю в Yaml, XYZ: - Array1
] по-прежнему является массивом.
Я проверил, нет ли в Ямле фальшивых персонажей, которые меня расстраивают.
Конкретные данные узла работают в других областях, поэтому я полагаю, что мой hiera.yaml
в порядке.
Я пробовал закомментировать поиск ('классы'). Включить
в . \ Manifestests \ site.pp
на случай, если это мешает.
Здесь - это задокументированный пример Puppet (который использует старую функцию hiera_include
).
Что-то еще, чего я не понимаю. Когда мне следует использовать просто имя класса ( app_update_3
), а когда следует включать полное имя модуля ( profile :: app_update_3
)? Я предполагаю, что когда модуль вызывает один из своих классов, я просто использую app_update_3
, но, похоже, это не работает.
У меня кончились идеи, поэтому, если кто-нибудь может направить меня на правильный путь, я был бы очень благодарен.
TIA
(Puppet Enterprise: v2019.8.4)
Похоже, я не делал ничего плохого, и все в порядке.
В отчаянии я переписал computer1.domain .com.yaml
файл в системе Linux - который работал.
Затем я сравнил два файла и, просмотрев оригинал в Notepad ++, обнаружил следующее:
Между дефисом и «профилем» нет символа. Понятия не имею, как я не набрал ни одного символа. Никакое количество бревен не найдет персонажа.
VSCode (Windows) теперь кажется счастливым.