Как добавить пользовательский или внешний факт для роли в 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

Другие вопросы по тегам