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

Как использовать Hiera для назначения модулей узлам в Puppet?

Я решил переключиться с одного файла по умолчанию nodes.pp на серверную часть Hiera, чтобы управлять узлами в Puppet и назначать модули узлам.

Мы используем имена хостов как таковые:

nyc-apache-prod-01
was-mysql-tst-01

Это наша структура каталогов hiera.yaml и hierdata:

# cat hiera.yaml 
:backends:
    - yaml

:hierarchy:
    - environment/tst/%{::hostname}
    - environment/tst
    - %{::osfamily}
    - common

:logger: console

:yaml:
    :datadir: '/etc/puppet/hieradata'

# find hieradata
hieradata
hieradata/RedHat.yaml
hieradata/OracleRAC.yaml
hieradata/common.yaml
hieradata/environment
hieradata/environment/dev
hieradata/environment/tst.yaml
hieradata/environment/acc
hieradata/environment/dev.yaml
hieradata/environment/acc.yaml
hieradata/environment/tst
hieradata/environment/tst/nyc-ks-tst-02.yaml
hieradata/environment/tst/nyc-ks-tst-01.yaml
hieradata/environment/prd
hieradata/environment/prd.yaml

Проблема в том, что среды должны быть установлены как environment = tst в /etc/puppet/puppet.conf на каждом отдельном узле. Я мог бы написать модуль для этого на основе имени хоста сервера, но я не уверен, что это лучший способ организовать серверы в отдельных средах.

Чего я хочу избежать, так это добавления списка классов в список классов для каждого отдельного сервера. Именно по этой причине мы в первую очередь перешли с single node.pp на серверную часть Hiera.

Возможно, вы захотите назначить роль серверам и использовать ее для предоставления им пакетов.

Например; в /etc/facter/facts.d вы помещаете файл, который устанавливает факт роли. Вы можете использовать это как уровень иерархии Hiera для назначения модулей серверам.

Сам никогда не пробовал, но думаю, может сработать .. :)