我正在尝试安装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::server
puppetlabs-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 的类似设置。非常有助于理解。