Я пытаюсь понять, как я могу перейти от того, что я делаю в моем большом файле site.pp, к структуре, которую я могу использовать в hiera. Мне неясно, читая марионеточные документы, как именно оцениваются данные hiera и когда они вписываются в картинку. Я недавно обновил марионетку 2.7.x до 3.3.x. Это включает hiera как часть стандартного пакета, поэтому я хотел наконец взглянуть на его использование, поскольку оно должно упростить мою установку для чтения / понимания.
Я использую для поддержки систем нескольких сторонних организаций. Это включает настройку систем, уникальных для каждой организации. В верхней части моего site.pp у меня есть структура, как показано ниже. Который я использую для установки фактов для каждой организации на основе регулярного выражения, которое соответствует факту clientcert, который настроен и выпущен таким образом, чтобы они надежно идентифицировали каждую организацию.
# match organization
case $::clientcert {
/.*example1.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 1'
... }
/.*example2.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 2'
... }
/.*example3.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 3'
... }
/.*example4.org/ :
{ $snmp_ro_community='...'
$snmp_location='Example Org 4'
... }
}
Я просматриваю примеры и не вижу никакого способа выполнить какое-либо сопоставление с образцом в моем файле hiera.yaml. Хотя я подозреваю, что упускаю что-то очевидное.
Я не хочу полагаться в этом на индивидуальный факт. Я предпочитаю придерживаться клиентского сертификата, поскольку я уверен, что он правильно идентифицирует организацию и систему и был подтвержден с использованием надежной криптографии. Я не хочу передавать ценности одной организации другой организации.
Я искал то же самое по той же причине. и обнаружили, что hiera backedn в github полезно jjulien / hiera-regex . В качестве примера из файла readme самого проекта: вам нужно настроить новый бэкэнд, который имеет дело с группировкой, как в:
/etc/puppet/hiera.yaml:
:backends:
- regex
- yaml
:yaml:
:datadir: /var/lib/hiera
:regex:
:datadir: /var/lib/hiera
:hierarchy:
- "fqdn/%{::fqdn}"
- common
/var/lib/hiera/fqdn/fqdn.regex:
---
- '^mailin-trusted.example.org$':
postfix::smtp_relay: 'mailout-dmz.example.org'
- '^mailout.*':
postfix::smtp_relay: 'smtp.mailgun.org'
- '^mailin.*':
postfix::smtp_relay: 'localhost'
однако я вижу, что несколько сообщений о марионеточных пользователях и видео о марионеточных лабораториях предупреждают о недопустимости использования hiera для классификации, особенно сейчас, с выпуском PE 3.7 с диспетчером узлов.
Для этого вы можете настроить иерархию файлов YAML. Давайте начнем с hiera.yaml
:
---
:hierarchy:
- "host/%{fqdn}"
- "domain/%{domain}"
- "env/%{::environment}"
- "ops/%{operatingsystem}"
- "os/%{osfamily}"
- common
:backends:
- yaml
:yaml:
:datadir: /etc/puppet/data
Для структуры папок вы можете использовать любой факт, который вы видите в выводе facter -y
. например у вас могут быть файлы конфигурации hiera для каждой архитектуры процессора. Затем вы должны добавить строку
- "arch/%{::architecture}"
И Хиера заглянула, скажем так, в arch/amd64.yaml
Для отладки hiera вы можете сбросить свои текущие факты:
$ facter -y > myhost.yaml
И ищите какую-нибудь переменную:
$ hiera -y myhost.yml snmp_location --debug
Хиера выполнит все правила и попытается найти переменную:
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Hiera YAML backend starting
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking up snmp_location in YAML backend
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking for data source host/myhost.example.com
...
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Looking for data source ops/Ubuntu
DEBUG: Mon Nov 11 11:00:23 +0100 2013: Cannot find datafile /etc/puppet/data/ops/Ubuntu.yaml, skipping
Для сопоставления $::clientcert
было бы неплохо выделить верхний домен в отдельный факт, а затем просто иметь файлы yaml для cert/example1.org.yaml
который будет содержать что-то вроде этого:
---
snmp_location: 'Example Org 1'
Полезно знать, что даже если у вас есть модуль, который вообще не содержит вызова функции hiera, вы можете легко настроить значения параметров:
class snmp (
$location = 'foo',
) {
# ...
}
некоторая конфигурация hiera:
---
snmp::location: 'Example Org 1'