通过 Hiera puppet 管理启用-禁用 nginx 站点?

通过 Hiera puppet 管理启用-禁用 nginx 站点?

我得到了一个任务,即实施 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 还很陌生。

先谢谢了。

相关内容