У меня есть мастер марионеток (версия 3.8.1) с файлом hiera.yaml, который, как мне кажется, настроен правильно, например:
pete@ip-172-31-4-61:~$ cat /etc/puppet/hiera.yaml
---
:hierarchy:
- "%{::fqdn}"
:backends:
- yaml
:yaml:
:datadir: '/etc/puppet/hieradata'
Когда я запускаю следующую команду:
sudo puppet master --verbose --debug --compile ip-10-1-3-7
(ip-10-1-3-7 - один из моих узлов) Я не вижу никакой информации в каталоге, основанном на моих данных hiera. Еще больше сбивает с толку то, что я не вижу этой строки в отладке:
Debug: hiera(): Hiera YAML backend starting
Что я вижу в других кукловодах, которые работают с Хиерой.
ОБНОВИТЬ: Я отредактировал свой файл puppet.conf, чтобы включить hiera_config в соответствии с комментариями ниже и перезапустил puppetmaster, но он все еще не работает.
pete@ip-172-31-4-61:~$ cat /etc/puppet/puppet.conf
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
certname = master
dns_alt_names = puppet
hiera_config = $confdir/hiera.yaml
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
Я запускаю Ubuntu 14.04 с репозиторием пакетов из puppetlabs:
pete@ip-172-31-4-61:~$ cat /etc/issue
Ubuntu 14.04.2 LTS \n \l
pete@ip-172-31-4-61:~$ dpkg -l "puppet*"
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===========================-==================-==================-============================================================
rc puppet 3.8.1-1puppetlabs1 all Centralized configuration management - agent startup and com
ii puppet-common 3.8.1-1puppetlabs1 all Centralized configuration management
un puppet-el <none> <none> (no description available)
un puppetdb-terminus <none> <none> (no description available)
ii puppetlabs-release 1.0-11 all "Package to install Puppet Labs gpg key and apt repo"
un puppetlabs-release-devel <none> <none> (no description available)
rc puppetlabs-release-pc1 0.9.2-1trusty all Release packages for the Puppet Labs PC1 repository
ii puppetmaster 3.8.1-1puppetlabs1 all Centralized configuration management - master startup and co
ii puppetmaster-common 3.8.1-1puppetlabs1 all Puppet master common scripts
ОБНОВИТЬ: Макет hieradata dir:
pete@ip-172-31-4-61:~$ tree /etc/puppet/hieradata
/etc/puppet/hieradata
└── ip-10-1-3-7.yaml
Содержимое файла узла hiera:
pete@ip-172-31-4-61:~$ cat /etc/puppet/hieradata/ip-10-1-3-7.yaml
---
classes:
- nginx
nginx::nginx_upstreams:
'app':
ensure: present
members:
- localhost:5000
'site':
ensure: present
members:
- site.my-app.com
nginx::nginx_vhosts:
'localhost':
proxy: 'http://site'
proxy_read_timeout: '5'
nginx::nginx_locations:
app:
location: '~ "^/(members|login|logout)"'
vhost: localhost
proxy: 'http://app'
proxy_read_timeout: '20'
ssl: false
location_cfg_append:
proxy_set_header:
- 'X-Forwarded-Host $http_host'
Я достаточно уверен, что это не связано с файлами узлов hieradata, поскольку даже на другом мастере марионетки, где нет файла узла для узла, я все равно получаю Отладка: hiera (): запуск бэкэнда Hiera YAML строка отладки.
Убедитесь, что эта строка находится в вашем site.pp
:
hiera_include('classes')
Затем попробуйте выполнить эту команду:
puppet master --compile host.domain.tld --debug 2>&1 | grep hiera
Это должно дать вам следующий результат:
Debug: hiera(): Hiera YAML backend starting
[...]
Debug: hiera(): Looking up $KEY in YAML backend
Debug: hiera(): Looking for data source common
Debug: hiera(): Looking for data source node/host.domain.tld
Debug: hiera(): Found $KEY in node/host.domain.tld
Выполнение приведенной выше команды без | grep
часть тоже должна дать вам что-то подобное:
Debug: importing '/etc/puppet/environments/production/modules/xxx/manifests/init.pp' in environment production
доказывая, что классы загружаются.
Из предоставленных вами данных не ясно, любой классы назначаются клиенту, поэтому, если класс не загружен, не выполняется неявный поиск hiera.
Вот образец моего кукловода:
Info: Not using expired facts for host.corp from cache; expired at 2015-07-21 19:42:37 +0200
Info: Caching facts for host.corp
Info: Caching node for host.corp
Debug: hiera(): Hiera YAML backend starting
Debug: hiera(): Looking up classes in YAML backend
Debug: hiera(): Looking for data source kernel/Linux
Debug: hiera(): Found classes in kernel/Linux
Debug: hiera(): Looking for data source osfamily/RedHat
Debug: hiera(): Looking for data source os/CentOS
Debug: hiera(): Found classes in os/CentOS
Debug: hiera(): Looking for data source node/host.corp
Debug: hiera(): Found classes in node/host.corp
Debug: hiera(): Looking for data source common
Debug: hiera(): Found classes in common
Debug: hiera(): Looking for data source corp
Попробуйте отладить hiera
сам тоже (пример здесь - поиск строкового значения с -c
):
hiera --debug -c /etc/puppet/hiera.yaml "sample::foo" bla "::fqdn=host.corp" osfamily='RedHat' "::environment=production"
DEBUG: 2015-07-22 16:49:20 +0200: Hiera YAML backend starting
DEBUG: 2015-07-22 16:49:20 +0200: Looking up sample::foo in YAML backend
DEBUG: 2015-07-22 16:49:20 +0200: Looking for data source node/host.corp
DEBUG: 2015-07-22 16:49:20 +0200: Found sample::foo in node/host.corp
bar
Также проверьте с facter -p
если значения, предоставленные вашим узлом, верны.