Настройка модуля 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. Очень полезно понять.

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