Я пытаюсь настроить новый узел с помощью марионетки, но это не удается из-за ошибки, которая заставляет меня полагать, что hiera не находит правильный источник данных:
Server Error: Evaluation Error: Error while evaluating a Function Call, undefined method `empty?' for nil:NilClass at ${line 4 in some selfwritten class}
У меня тоже была эта ошибка, но я не помню, что я изменил (если что-то), что привело к ней:
Server Error: Evaluation Error: Error while evaluating a Function Call, Unknown alias: 3B4007E7596ADF847ECA510D57069DBF2B3DB006 at ${line 4 in the same selfwritten class}
Строка в классе, на которую жалуется марионетка, выглядит так:
$network = hiera("network")
Это первая строчка в классе. Этот же поиск работает на другом узле.
Мой /etc/puppetlabs/puppet/hiera.yaml выглядит так
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::trusted.certname}"
- "customer/%{customer}"
- "preview/%{preview}"
- "test/%{test}"
- common
:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata on Windows
# When specifying a datadir, make sure the directory exists.
:datadir:
В манифесте этого нового узла
$customer='foo'
Пока рабочий узел
$customer='bar'
У меня есть файл yaml для каждого, и yamllint показывает ошибки neiter или предупреждения для hiera.yaml или двух ниже.
ls /etc/puppetlabs/code/environments/production/hieradata/customer/
foo.yaml bar.yaml
Первая строка в соответствующем файле yaml определяет строку для этой сети значений:
network: "172.28.11"
Я пробовал использовать марионеточный поиск для отладки этой проблемы, но пока безуспешно
puppet lookup --environment production --debug --explain --node foo-app1.domain.tld --compile network
<snip lots of unrelated stuff>
Debug: hiera(): Looking for data source customer/foo
Error: Could not run: Evaluation Error: Error while evaluating a Function Call, Unknown alias: 3B4007E7596ADF847ECA510D57069DBF2B3DB006 at {same class and line}
Если я запустил эту команду без --compile, она завершится без ошибок, но также без поиска источника данных клиента
Итак: почему этот узел не выполняет поиск по иерархии? Как мне это исправить? Как правильно использовать марионеточный поиск, чтобы получить это значение из рабочего узла? (для помощи в отладке)