我得到了一个任务,即实施 hiera puppet 脚本来管理 nginx 的 sites_enabled。
这是我的木偶脚本:
通用.yaml
---
classes:
- nginx
nginx:
enabled:
abc.com
xyz.com
disabled:
test.com
test2.com
初始化文件
class nginx{
create_resources("site_enabled", hiera("nginx"), {})
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
但是我在 Puppet 执行时收到错误:
错误:无法从远程服务器检索目录:服务器上出现错误 400:无法在节点 XX 上的 /etc/puppet/modules/nginx/manifests/init.pp:7 处将字符串转换为整数
当我尝试通过命令行查询 hiera 时:
$ hiera nginx
{“enabled”=>[“abc.com”、“xyz.com”]}
我知道我有些地方错了。请纠正我。我不太明白 hiera 如何查询和处理数组数据。如果可能的话,请给我一些有用的文档。
非常感谢。
答案1
您的问题与为 create_resources 创建 Hiera 哈希时出现问题,其中有答案。我将在这里提供一份回顾。
根据create_resources 的文档,哈希必须采用以下格式{title => {parameters} }
。您应该编辑 hiera 数据来设置参数。由于没有,我认为它可能看起来像这样:
通用.yaml
---
classes:
- nginx
nginx::enabled:
abc.com: {}
xyz.com: {}
nginx::disabled:
test.com: {}
test2.com: {}
接下来,您需要从 hiera 中实际加载正确的数据。您需要加载nginx::enabled
,而不是全部nginx
初始化文件
class nginx{
create_resources("site_enabled", hiera("nginx::enabled"))
}
define site_enabled($name){
file { '/etc/nginx/sites_enabled/${name}':
ensure => 'link',
target => '/etc/nginx/site_available/${name}',
}
}
答案2
感谢 Sciunus 的快速回复。
我可以问这个问题吗?我想让我的 yaml 数据遵循这种格式:
nginx的:
enabled: abc.com xyz.com disabled: test.com test2.com
我不想制作这样的格式:
nginx ::已启用:
abc.com: {} xyz.com: {}
nginx ::已禁用:
test.com: {} test2.com: {}
我怎样才能让我的 puppet 脚本按预期工作。我也读过 Hiera 文档,据我所知,它还支持三种查找数据:hiera、hiera_hash 和 hiera_array。但是我无法按照上面的 yaml 文件格式让它按我的预期工作
抱歉,我对 hiera 还很陌生。
先谢谢了。