Могут ли какие-нибудь эксперты по Puppet и Hiera помочь мне в этой неприятной ситуации, которую я вижу?
Hiera отлично работает для всего в common.yaml
:
cat common.yaml
---
resolv_conf::nameserver:
- x.x.x.x
- x.x.x.x
profile::ntp::servers:
- x.x.x.x
- x.x.x.x
Затем протестировал следующие работы:
hiera resolv_conf::nameservers environment=production
["x.x.x.x", "x.x.x.x"]
Итак, все вышесказанное работает, как ожидалось. Однако, если я использую каталог nodes
внутри hieradata
и добавляю тестовые данные в:
cat nodes/fqdn.yaml
---
profile::ntp::servers:
-1.1.1.1
-2.2.2.2
Затем я соответствующим образом корректирую свой hiera.yaml
файл:
cat hiera.yaml
---
:backends: yaml
:yaml:
:datadir: "/etc/puppetlabs/code/environments/%{environment}/hieradata"
:hierarchy:
-"nodes/%{::fqdn}"
- "common"
:logger: console
:merge_behavior: native
:deep_merge_options: {}
А также добавьте правильную строку в глобальный hiera.yaml
(оба файла теперь выглядят одинаково для тестирования).
При тестировании я получаю следующую ошибку:
hiera profile::ntp::servers environment=production -d
DEBUG: xxxxxxxxx: запуск бэкэнда Hiera YAML
DEBUG: xxxxxxxxx: поиск профиля :: ntp :: серверов в бэкэнде YAML
DEBUG: xxxxxxxxx: игнорирование неверного определения в: иерархии: 'узлы /'
DEBUG: xxxxxxxxx: Ищем общий источник данных
DEBUG: xxxxxxxxx: Найден профиль :: ntp :: общие серверы
["xxxx", "xxxx"]
Таким образом, он находит значения в common
, но не любит каталог nodes
.
Я перепробовал множество различных вариантов строки hierarchy
в hiera.yaml
, и много разных вариантов везде, где я могу себе представить!
В приведенном выше могут быть опечатки, так как мне пришлось вводить все вручную, так как у меня нет копирования и вставки, но я снова и снова проверял живые файлы на наличие опечаток и синтаксических ошибок.
Любые идеи?
Некоторые обновления теперь я дома и могу скопировать / вставить:
Это свежая установка марионеточного предприятия с использованием диспетчера кода и gitlab.
[root@client-01 nodes]# pwd
/root/control-repo/hieradata/nodes
[root@client-01 nodes]# ll
total 8
-rw-r--r--. 1 root root 34 Jul 13 19:04 puppet.example.com.yaml
-rw-r--r--. 1 root root 18 Jul 13 18:58 test.yaml
[root@client-01 nodes]# cat puppet.example.com.yaml
---
message:
- "This is in nodes"
Это на машине разработчика, затем было отправлено репо, которое инициировало перехватчик для развертывания кода, я проверил, что те же данные доступны в / etc / puppetlabs / code / environment / production и т. Д. На мастере марионетки. Итак, Code Manager работает.
Следующие тесты на марионеточном сервере:
[root@puppet ~]# hostname -f
puppet.example.com
[root@puppet ~]# hiera message environment=production
nil
[root@puppet ~]# hiera message environment=production
fqdn=puppet.example.com
nil
[root@puppet ~]# hiera message environment=production fqdn=puppet.example.com -d
DEBUG: 2017-07-13 19:28:15 +0100: Hiera YAML backend starting
DEBUG: 2017-07-13 19:28:15 +0100: Looking up message in YAML backend
DEBUG: 2017-07-13 19:28:15 +0100: Ignoring bad definition in :hierarchy: 'nodes/'
DEBUG: 2017-07-13 19:28:15 +0100: Looking for data source common
nil
[root@puppet ~]#
И так выглядит точно такая же проблема:
My hiera.yaml
:
[root@puppet ~]# cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::fqdn}"
- 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: "/etc/puppetlabs/code/environments/%{environment}/hieradata"
Это несколько обнадеживает, поскольку означает, что, возможно, с другим марионеточным сервером нет ничего серьезного и, скорее всего, что-то я делаю неправильно?
ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ:
Так что вчера вечером у меня не было слишком много времени, чтобы что-то протестировать, но я нашел вот что:
Похоже, проблема связана с переменными фактора, т.е. ""% {:: fqdn} "
Если я сделаю в корне hieradata следующее:
[root@client-01 hieradata]# pwd ; ll ; cat test.yaml
/root/control-repo/hieradata
total 12
-rw-r--r--. 1 root root 4 Jul 13 19:25 common.yaml
drwxr-xr-x. 2 root root 52 Jul 13 19:04 nodes
-rw-r--r--. 1 root root 19 Jul 13 21:47 puppet.example.com.yaml
-rw-r--r--. 1 root root 18 Jul 13 21:43 test.yaml
---
name:
- "jon"
Затем проверьте с hiera name environment=production
, все работает нормально.
Если я сделаю в корне hieradata следующее:
[root@client-01 hieradata]# pwd ; ll ; cat puppet.example.com.yaml
/root/control-repo/hieradata
total 12
-rw-r--r--. 1 root root 4 Jul 13 19:25 common.yaml
drwxr-xr-x. 2 root root 52 Jul 13 19:04 nodes
-rw-r--r--. 1 root root 19 Jul 13 21:47 puppet.example.com.yaml
-rw-r--r--. 1 root root 18 Jul 13 21:43 test.yaml
---
test:
- "pass"
Затем я тестирую следующими способами:
[root@puppet ~]# hostname -f ; hiera test environment=production -d
puppet.example.com
DEBUG: 2017-07-13 21:53:44 +0100: Hiera YAML backend starting
DEBUG: 2017-07-13 21:53:44 +0100: Looking up test in YAML backend
DEBUG: 2017-07-13 21:53:44 +0100: Ignoring bad definition in :hierarchy:
'nodes/'
DEBUG: 2017-07-13 21:53:44 +0100: Ignoring bad definition in :hierarchy: ''
DEBUG: 2017-07-13 21:53:44 +0100: Looking for data source test
DEBUG: 2017-07-13 21:53:44 +0100: Looking for data source common
nil
[root@puppet ~]# hostname -f ; hiera test environment=production
fqdn=puppet.example.com -d
puppet.example.com
DEBUG: 2017-07-13 21:53:57 +0100: Hiera YAML backend starting
DEBUG: 2017-07-13 21:53:57 +0100: Looking up test in YAML backend
DEBUG: 2017-07-13 21:53:57 +0100: Ignoring bad definition in :hierarchy:
'nodes/'
DEBUG: 2017-07-13 21:53:57 +0100: Ignoring bad definition in :hierarchy: ''
DEBUG: 2017-07-13 21:53:57 +0100: Looking for data source test
DEBUG: 2017-07-13 21:53:57 +0100: Looking for data source common
nil
Таким образом, полное игнорирование подпапки узлов и тестирование в корне hieradata показывает, что файлы yaml с фиксированным именем работают, но при использовании facter для поиска по узлам ... вот где происходит сбой.
[root@puppet ~]# facter fqdn
puppet.example.com
[root@puppet ~]# hostname -f
puppet.example.com
Однако, похоже, фактер работает нормально.
Любая помощь будет принята с благодарностью, спасибо. Джон