В настоящее время я использую 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