直到最近,我们一直在以一种非常基本的方式使用puppet。为了管理iptables,我们创建了一个iptables-save文件并加载它。我想修改iptables管理,并使用puppetlabs/防火墙模块。
最佳实践建议我使用.yaml文件来处理这个问题,但是我在使用hiera()和yaml文件时遇到了很多问题。
我希望common.yaml有一个与某个组关联的范围列表:
firewall_group:
localdomain:
- 10.0.0.3/32
- 10.10.0.0/26
anotherdomain:
- 172.0.1.0/26我希望在其他一些{$certname}.yaml中包含一个端口列表,主机将接受来自某个组列表的访问:
ports:
ssh:
number: 22
groups:
- localdomain
http:
number: 80
groups:
- localdomain
- anotherdomain使用puppetlabs/firewall创建这些防火墙规则的最佳方式是什么?(假设hiera.yaml正确地查找这些.yaml文件)我将.pp文件放在init.pp包含的custom_fw/manifests/core.pp中。
我尝试过使用$ports.each方法和create_resources ()方法搜索“嵌套的yaml loop puppet”,但我确信我犯了一些错误,导致puppet应用失败。
提前感谢您的任何见解!
发布于 2016-04-12 10:05:17
我在这个特定的问题上花了一些时间,并提出了以下解决方案。
首先,获取我的模块alexharvey/firewall_multi。在撰写本文时,您还需要最新的puppetlabs/防火墙模块(v1.8.0),尽管我愿意为需要与早期版本的Puppet Labs防火墙兼容的任何人修补我的模块。
firewall_multi模块为Puppet Labs防火墙模块提供了一个多路复用器前端,允许我们指定源和目标的阵列。
其次,您需要Hiera version3,它具有alias lookup function,它允许您为Hiera数组定义一个别名,该别名可以在Hiera中的其他地方使用。
您现在可以执行以下操作:
---
mylocaldomain:
- 10.0.0.3/32
- 10.10.0.0/26
myotherdomain:
- 172.0.1.0/26
myclass::firewall_multis:
'00099 accept tcp port 22 for ssh':
dport: '22'
action: 'accept'
proto: 'tcp'
source: "%{alias('mylocaldomain')}"
myotherclass::firewall_multis:
'00200 accept tcp port 80 for http':
dport: '80'
action: 'accept'
proto: 'tcp'
source: "%{alias('myotherdomain')}"和:
class myclass (
$firewall_multis,
) {
validate_hash($firewall_multis)
create_resources(firewall_multi, $firewall_multis)
...
}
class myotherclass (
$firewall_multis,
) {
validate_hash($firewall_multis)
create_resources(firewall_multi, $firewall_multis)
...
}https://stackoverflow.com/questions/36561572
复制相似问题