使用 Hiera 在 Puppet 中配置 puppetdb 模块

使用 Hiera 在 Puppet 中配置 puppetdb 模块

我正在尝试安装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的类的参数以指向 Postgres 的备用数据目录:postgresql::serverpuppetlabs-postgresql

#/etc/puppet/hieradata/foo.example.com.yaml
---
# Puppet 在应用类 postgresql::server 时会自动在此处查找参数
postgresql::服务器::数据目录:/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 => '最小'
  ...
){

  类 {'postgresql':
     ...
  }

  类‘puppetdb’:
     ...
  }

  postgresql::server::config_entry {'wal_level':
    值 => $role::postgresql_puppetdb::wal_level
  }
}

然后在 Hiera。

#/etc/puppet/hieradata/foo.example.com.yaml
---
角色::postgresql_puppetdb::wal_level: hot_standby

这显然有点不灵活,因为您还需要postgresql通过您的role::postgresql_puppetdb类公开该类提供的每个可调参数和配置设置。当然,如果您知道只需要公开几个这样的可调参数,这可能就足够了。

第二种方法的示例:

类角色::postgresql_puppetdb{

  类 {'postgresql':
     ...
  }

  类‘puppetdb’:
     ...
  }

  $postgres_config_entries = hiera_hash('postgres_configs',{})

  创建资源('postgresql::server::config_entry',$postgres_config_entries)

}

然后在 Hiera:

#/etc/puppet/hieradata/foo.example.com.yaml
---
postgres_配置:
  wal_level(沃尔级别):
    值: hot_standby
  身份验证超时:
    值:120s
  krb_server_keyfile(krb_server_keyfile):
    值:/var/lib/postgresql/postgresql.keytab

等等。这更加灵活,允许您在每个层次结构级别上设置任意 Postgres 参数。当然,在这种情况下,只有当role::postgresql_puppetdb包含该类时,才会咨询 Hiera 以获取这些配置设置,但没有什么可以阻止您将 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 的类似设置。非常有助于理解。

相关内容