如果实际安装了fail2ban,我会尝试只部署Apache jails。我有一个事实证明这是可行的。
# fail2ban
$jails = [
'ssh', 'ssh-ddos',
'pam-generic'
] + if $f2b_enable_apache { ['apache-auth', 'apache-badbots', 'apache-multiport', 'apache-noscript', 'apache-overflows'] }
notify{"Enable apache jails: ${f2b_enable_apache}":}
notify{"Jails: ${jails}":}
class { 'fail2ban':
package_ensure => 'latest',
jails => $jails
}当我运行它的时候,我得到了下面的输出
没有apache:
Puppet : Enable apache jails: false
Puppet : Jails: [ssh, ssh-ddos, pam-generic, apache-auth, apache-badbots, apache-multiport, apache-noscript, apache-overflows]使用apache:
Puppet : Enable apache jails: true
Puppet : Jails: [ssh, ssh-ddos, pam-generic, apache-auth, apache-badbots, apache-multiport, apache-noscript, apache-overflows]我做错了什么?为什么在这两种情况下都附加了它?有没有更好的方法来实现这一点,而且是可扩展的?
发布于 2021-01-23 05:22:33
为此,我可能会使用selector expression:
$jails = $f2b_enable_apache ? {
true => ['ssh', 'ssh-ddos', 'pam-generic', 'apache-auth', 'apache-badbots', 'apache-multiport', 'apache-noscript', 'apache-overflows'],
false => ['ssh', 'ssh-ddos', 'pam-generic'],
}这里确实有使用Array[String]连接的算法,但由于Puppet DSL强制变量的不变性,它们变得混乱。它使用一个变量,一个条件表达式,没有lambda迭代器函数。
https://stackoverflow.com/questions/65852199
复制相似问题