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

В: Как определить модули Apache через Puppet и Hiera?

В настоящее время я использую Puppet с Foreman 1.17 и puppetlabs / apache версии 3.1.0. Все виртуальные хосты определяются с помощью файла .yaml:

apache::vhost:
  vm12345_ssl:
    servername: my.example.com
    docroot: /home/my.example.com/web
    logroot: /home/my.example.com/log
    (... more configuration)

Теперь я хотел бы указать также необходимые модули Apache через файл Hiera / yaml. Но я не смог найти ни документации, ни примера, как это сделать. Один веб-сайт рекомендует apache::mod::proxy: true; Я пробовал это, а также его варианты, но не смог заставить его работать.

Чего я хочу достичь: я использую шаблон ролей и профилей Puppet, и каждый из моих файлов профиля webapp содержит следующие строки:

class profile::webapp::my_webapp_01 (
    ... some parameters
  ) {

  include profile::java
  include apache
  apache::mod { 'proxy': }
  apache::mod { 'proxy_ajp': }
  apache::mod { 'proxy_http': }
  ... more webapp-specific configuration

И мой узел выглядит так:

node 'vm12345' {
  ...
  include profile::webapp::my_webapp_01
  include profile::webapp::my_webapp_02
  include profile::webapp::my_webapp_03
}

Когда я включаю только одно веб-приложение на виртуальную машину, все в порядке, но как только я включаю несколько веб-приложений в виртуальную машину, я получаю ошибку «Повторяющееся объявление». Я думаю, что правильный способ решить эту проблему - использовать Hiera для указания модулей Apache, вместо того, чтобы явно определять их в профиле.

Посоветуйте, пожалуйста, как указать модули Apache через Hiera и файл yaml, или, если, возможно, весь подход нарушен, посоветуйте, пожалуйста, как написать объявления профиля для модулей Apache, чтобы их можно было включать несколько раз.

Теперь я использую приведенный ниже код в файле своего профиля:

class profile::webapp::my_webapp_01 (
    ... some parameters
  ) {

  include profile::java
  include apache
  include apache::mod::proxy
  include apache::mod::proxy_ajp
  include apache::mod::proxy_http

  ... more webapp-specific configuration

Это позволяет включать несколько объектов без ошибки «Повторяющееся объявление».

Однако мне не удалось понять, как использовать файлы Hiera / yaml для этого. Возможно, потребуется дополнительный код для чтения параметров из файла yaml, например hiera () и create_resource ().

Используя структуру ролей и профилей:

Профиль Apache:

class profile::apache {
  include ::apache
  apache::mod { 'proxy': }
  apache::mod { 'proxy_ajp': }
  apache::mod { 'proxy_http': }
}

Роль Webapp:

class role::webapp::my_webapp_01 {
  include profile::java
  include profile::apache
}

Узел веб-сервера:

node 'vm12345' {
  include role::webapp::my_webapp_01
}

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

class profile::apache (
  Array $mods = [],
) {
  include ::apache
  apache::mod { $mods: }
}

Следует отметить, что вы также можете использовать модули Apache. default_mods параметр, либо через код Puppet, либо через Hiera:

Кукольный

class { '::apache':
  default_mods' => ['proxy','proxy_ajp','proxy_http'],
}

Hiera

---
apache::default_mods:
  - proxy
  - proxy_ajp
  - proxy_http