Я использую 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')
, который я получил из-за поиска.