Назад | Перейти на главную страницу

Как вы тестируете / устраняете проблемы с Hiera в среде Puppet

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