Настройка модуля puppetdb в Puppet с помощью Hiera
Я пытаюсь установить модуль PuppetDB. Часть этого включает в себя модуль для установки некоторых необходимых экземпляров Postgres, которые я также использую.
Мы в основном используем heira для настройки ролей и установки различных свойств.
У меня есть конфигурация достаточно долго, что если я добавлю
roles:
- role::postgresql_puppetdb
В файл hiera yaml имени хоста он будет поднят и получен базовый экземпляр postgres.
Я застрял на получении конкретных переменных postgresql.conf. Например я пробовал
roles:
- role::postgresql_puppetdb
- wal_level: hot_standby
Тем не менее, это подталкивается при последующем запуске агента.
Я надеюсь, что кто-то мог попытаться смоделировать конфигурации PuppetDB таким образом и указать, что я делаю неправильно.
1 ответ
Чтобы Puppet мог искать параметры класса в Hiera (что он делает по умолчанию с 3.0.0), эти параметры должны быть указаны как простые пары ключ-значение, а не как сложные типы данных.
Вот как бы вы указали datadir
параметр класса postgresql::server
в puppetlabs-postgresql
модуль, указывающий на альтернативный каталог данных для Postgres:
# /etc/puppet/hieradata/foo.example.com.yaml --- # Puppet автоматически ищет здесь параметры при применении класса postgresql::server postgresql::server::datadir: /srv/postgres/main
Тем не менее, я не думаю, что это то, что вам нужно в вашем случае. Вы хотите указать параметры конфигурации Postgres, для которых вам нужно использовать postgresql::server::config_entry
определенный тип. В настоящее время в Hiera нет способа поиска параметров типа, который работает только для параметров класса.
Так что либо вы параметризуете свой role::postgresql_puppetdb
класс, так что вы можете передать ему параметры класса, которые в свою очередь получают в postgresql::server::config_entry
декларации, или вы используете create_resources()
функционировать вместе с hiera_array()
или же hiera_hash()
чтобы найти параметры конфигурации Postgres, которые вы хотите применить.
Пример для первого подхода:
роль класса::postgresql_puppetdb ( wal_level => 'минимальный'...) { class {'postgresql':... } class {'puppetdb':... } postgresql:: server:: config_entry {'wal_level': значение => $role::postgresql_puppetdb::wal_level } }
А потом в Хиере.
# /etc/puppet/hieradata/foo.example.com.yaml --- роль::postgresql_puppetdb::wal_level: hot_standby
Это, очевидно, немного негибко, так как вам нужно выставить каждый настраиваемый параметр и настройку конфигурации postgresql
класс обеспечивает через ваш role::postgresql_puppetdb
класс также. Конечно, этого может быть достаточно для вас, если вы знаете, что вам нужно всего лишь выставить несколько таких параметров.
Пример для второго подхода:
роль класса:: postgresql_puppetdb { class {'postgresql':... } class {'puppetdb':... } $ postgres_config_entries = hiera_hash ('postgres_configs', {}) create_resources ('postgresql:: server:: config_entry', $ postgres_config_entries) }
Тогда в Хиере:
# /etc/puppet/hieradata/foo.example.com.yaml --- postgres_configs: wal_level: значение: hot_standby authentication_timeout: значение: 120 с krb_server_keyfile: Значение: /var/lib/postgresql/postgresql.keytab
И так далее. Это более гибко и позволяет вам устанавливать произвольные параметры Postgres на любом уровне иерархии. В этом случае, конечно, Hiera будет консультироваться только для этих параметров конфигурации, когда role::postgresql_puppetdb
класс включен, но ничто не мешает вам поместить эту комбинацию hiera_hash-create_resources в другие роли, возможно, role::postgresql
,
Я надеюсь, что это было понятно и достаточно последовательно, чтобы следовать. Вышеприведенное, конечно, непроверено, как и опубликовано, но мы используем эту стратегию (create_resources, hiera_hash) для управления локальными и системными учетными записями, репозиториями, правилами sudoers, экземплярами Tomcat и другими. Вернусь к вопросу завтра, когда я буду менее уставшим.
Но взгляните на этот замечательный вопрос на Puppet-Ask: https://ask.puppetlabs.com/question/1655/an-end-to-end-roleprofile-example-using-hiera/
Он проходит через аналогичные настройки на основе HAproxy. Очень полезно понять.