Как добавить пользовательский или внешний факт для роли в Puppet?
Я использую контрольное репо для моих профилей / ролей марионеточного мастера.
Я использую Hiera, и я хотел бы добавить роль в иерархии
Мой hiera.yaml выглядит так:
:backends:
- yaml
:yaml:
:datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata"
:hierarchy:
- "nodes/%{::trusted.certname}"
- "roles/%{::role}"
- "common"
site.pp
node xx01 {
include role::cassandra
}
node xx02 {
include role::mysql
}
node xx03 {
include role::cassandra
}
Например, я должен добавить факт роли для узла xx01 и xx03. Поэтому было бы бесполезно добавлять факты для каждого нового узла в будущем. поэтому я хочу, чтобы этот факт был добавлен для каждого нового узла.
Поэтому лучший способ - добавить код для добавления факта роли в контрольном репо. не в модулях.
У марионеточного агента, по-видимому, нет факта роли, поэтому я добавил факт роли в /etc/puppetlabs/facter/facts.d
Я думаю, что бесполезно сравнивать с именем хоста, чтобы добавить факт для ролей, если имя хоста отражает роль. так что я мог бы использовать иерархию с именем хоста, а не ролью.
1 ответ
Вы можете сделать это с помощью внешнего факта или пользовательского факта. Я также должен отметить, что ваш файл hiera полностью в порядке и автоматически подберет факт вашей роли для разрешения данных, как только этот факт будет заполнен. Я также собираюсь предположить из этого файла hiera, что вы используете Puppet 4, Facter 3 и Hiera 3 (не провайдер данных Puppet с поиском данных модуля и т. Д.), Поскольку вы используете синтаксис и соглашения, согласующиеся с ними.
Допустим, у вас есть приложение ролей, БД и отчет.
Для пользовательских фактов вы хотели бы написать некоторый код, подобный следующему в lib/facter/role.rb
каталог скомпилированного модуля:
Facter.add('role') do
setcode do
case Facter.value(:hostname)
when /db/ then role = 'db'
when /app/ then role = 'app'
when /report/ then role = 'report'
else role = default
role
end
end
Это будет простой пример того, как это сделать.
Вы также можете сделать это с внешним фактом, помещенным в lib/facts.d
каталог скомпилированного модуля, например role.yaml
или же role.sh
файл. Yaml подойдет для статических данных, а сценарий оболочки будет примером того, как динамически определять роль сервера без использования ruby.
Вы можете проверить дополнительную документацию здесь: https://docs.puppet.com/facter/3.4/custom_facts.html