问:如何通过 Puppet 和 Hiera 定义 Apache 模块?

问:如何通过 Puppet 和 Hiera 定义 Apache 模块?

我目前正在使用 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)

现在我想通过 Hiera / yaml 文件指定所需的 Apache 模块。但我找不到任何文档或示例来说明如何执行此操作。一个网站推荐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
}

当我在每个虚拟机中只包含一个 webapp 时,一切都很好,但是一旦我在虚拟机中包含多个 webapp,就会出现“重复声明”错误。我认为解决这个问题的正确方法是使用 Hiera 指定 Apache 模块,而不是将它们明确定义到配置文件中。

请告知如何通过 Hiera 和 yaml 文件指定 Apache 模块,或者如果整个方法可能被破坏,请告知如何为 Apache 模块编写配置文件声明,以便可以多次包含它们。

答案1

使用角色和配置文件结构:

Apache 简介:

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

Web 应用程序角色:

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

Web 服务器节点:

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

您还可以修改 Apache Role,以便为 mods 创建参数:

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

值得注意的是,您还可以default_mods通过 Puppet 代码或通过 Hiera 使用 Apache 模块的参数:

木偶

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

希拉

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

答案2

我现在在我的配置文件中使用下面的代码:

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()。

相关内容