global.yaml puppet/hiera с управлением средой

На самом деле я использую puppet 3.7.2 и hiera 1.3.4 на своем Debian Jessie.

Моя конфигурация марионетки:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#prerun_command=/etc/puppet/etckeeper-commit-pre
#postrun_command=/etc/puppet/etckeeper-commit-post
server = puppetmaster01.prd.lord-y.net
certname = master.localdomain
environment = prod
condir = /etc/puppet
report = false
show_diff = true
trace = true
runinterval=60
usecacheonfailure = false
ignorecache = true
environmentpath=$confdir/environments

[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
certname = master.localdomain
#modulepath=$confdir/environments/$environment/modules:$confdir/modules

[agent]
report        = true
show_diff     = true

Моя конфигурация hiera:

---
:backends:
  - yaml
:yaml:
  :datadir: "/etc/puppet/environments/%{::environment}/hieradata"
:hierarchy:
  - "%{::fqdn}"
  - global
:logger: console

и моя кукольная среда:

/etc/puppet/environments/{prod,uat,dev} ==> environment.conf hieradata манифестирует модули

В моем окружении.conf:

manifest = /etc/puppet/environments/{prod,uat,dev}/manifests/site.pp
modulepath = /etc/puppet/environments/{prod,uat,dev}/modules

В /etc/puppet/environments/{prod,uat,dev}/hieradata у меня есть определения хостов и файл global.yaml для каждой среды.

Моя проблема заключается в том, что когда мастер выполняет поиск Hiera во время построения каталога, кажется, что он не получает данные из global.yaml в тех случаях, когда он должен это делать.

Например, если я выполняю эту команду на своем мастер-компьютере Puppet, она правильно возвращается к global.yaml, чтобы обеспечить правильный результат...

hiera varnish::dev::settings::site::backend_name ::environment=prod

... но при поиске того же ключа в ходе обслуживания запроса каталога значение не найдено.


person Lord-Y    schedule 24.03.2016    source источник
comment
Вы меня запутали своим утверждением, что при его выполнении на клиенте не берется нужный конфиг. Я бы не ожидал, что представленная вами команда hiera или что-то подобное вообще будет выполняться на клиенте. При настройке мастер/агент именно мастер выполняет все создание каталога, включая извлечение данных из Hiera, где это необходимо.   -  person John Bollinger    schedule 24.03.2016
comment
Да, вы правы, это мастер, который компилирует каталог, и на самом деле, если в конфигурации клиента hiera нет такой переменной, как лак::dev::settings::site::backend_name, то arnish::dev::settings:: Переменная site::backend_name должна быть взята в файле global.yaml. Это не так, и я не могу понять, почему: S.   -  person Lord-Y    schedule 26.03.2016


Ответы (1)


Если поиски Hiera с помощью инструмента командной строки дают результаты, отличные от эквивалентных поисков, выполняемых мастером в ходе построения каталога, то единственные вероятные объяснения лежат в сфере идентичности и среды. Поскольку Hiera не имеет документально подтвержденной зависимости от переменных среды, наиболее вероятным выводом будет то, что ваши файлы global.yaml недоступны для чтения мастер-процессу puppet, который работает с непривилегированным UID и GID, которые, вероятно, отличаются от тех, которые вы используете в своем интерактивном ракушка. Проверьте права доступа к этим файлам и/или запустите команду под учетными данными мастера.

person John Bollinger    schedule 25.03.2016
comment
Я понял, что происходит. Это было плохо. Я неправильно определил переменную hiera в файле global.yaml. При правильном значении классы марионеток работают отлично. - person Lord-Y; 29.03.2016