Я использую Puppet вместе с Foreman для подготовки хостов, и в настоящее время у меня есть все конфигурации Puppet в виде модулей в репозиторий. Я' Я хотел бы использовать Hiera, но мне никогда не удавалось получить даже самую простую вещь, которую можно извлечь из одного из добавленных мной файлов .yaml
. Мой главный puppet.conf
:
[main]
basemodulepath = /etc/puppetlabs/code/environments/common:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules:/usr/share/puppet/modules
codedir = /etc/puppetlabs/code
environmentpath = /etc/puppetlabs/code/environments
hiera_config = /etc/puppetlabs/code/environments/production/hiera.yaml
hostprivkey = $privatekeydir/$certname.pem { mode = 640 }
logdir = /var/log/puppetlabs/puppet
pluginfactsource = puppet:///pluginfacts
pluginsource = puppet:///plugins
privatekeydir = $ssldir/private_keys { group = service }
reports = foreman
rundir = /var/run/puppetlabs
server = foreman.domain.net
show_diff = false
ssldir = /etc/puppetlabs/puppet/ssl
vardir = /opt/puppetlabs/puppet/cache
[agent]
certname = foreman.domain.net
classfile = $statedir/classes.txt
default_schedules = false
environment = production
listen = false
localconfig = $vardir/localconfig
masterport = 8140
noop = false
pluginsync = true
report = true
runinterval = 1800
splay = false
splaylimit = 1800
usecacheonfailure = true
[master]
autosign = /etc/puppetlabs/puppet/autosign.conf { mode = 0664 }
ca = true
certname = foreman.domain.net
external_nodes = /etc/puppetlabs/puppet/node.rb
logdir = /var/log/puppetlabs/puppetserver
node_terminus = exec
parser = current
rundir = /var/run/puppetlabs/puppetserver
ssldir = /etc/puppetlabs/puppet/ssl
strict_variables = false
vardir = /opt/puppetlabs/server/data/puppetserver
содержимое /etc/puppetlabs/code/environments/production/hiera.yaml
:
---
version: 5
defaults:
datadir: hieradata
data_hash: yaml_data
hierarchy:
- name: "Per-node data"
path: "nodes/%{trusted.certname}.yaml"
- name: "Per-domain data"
path: "domains/%{facts.networking.domain}.yaml"
- name: "OS family"
path: "os/%{facts.os.family}.yaml"
- name: "Other hierarchy levels"
path: "common.yaml"
и структура hieradata
:
hieradata/
├── common.yaml
├── domains
│ └── domain.net.yaml
├── nodes
│ ├── foreman.domain.net.yaml
│ └── test.domain.net.yaml
└── os
└── Debian.yaml
и, например, содержание файла с данными для специалиста:
---
environment: production
classes:
- roles::default
наконец, версии вещей, которые кажутся актуальными:
$ puppet --version
5.5.3
$ facter --version
3.11.3 (commit 1854ababc68ec12ca40bdc143e46c3d5434b92ba)
$ hiera --version
3.4.3
Мне кажется, что я следил за различными руководствами по Интернету, но ни один из похоже, мои хосты используют настройки из файлов .yaml
. Как вы тестируете hiera
? Я ожидал, что будет какой-то разумный способ решить, какие файлы применяются к отдельному узлу, но я не могу найти команду, которая работает для этого, или даже поискать некоторые классы, которые я создал в своих средах. Я бы также подумал, что смогу использовать что-то вроде hiera -c hiera.yaml --hash profiles
, но это дает ошибку о синтаксисе v5.
Я думаю, что ответ на вопрос заключается в том, что я вставил в комментарий, который я сделал.
puppet lookup --node test.domain.net --explain classes
Выполнение этой команды на сервере показало, что она должна работать. Моя настоящая проблема заключалась в том, что в моем манифесте сайта для узла не было hiera_include ('classes')
, которое я получил из-за поиска.