Puppet 条件连接列表

Puppet 条件连接列表,puppet,Puppet,如果实际安装了Apache,我尝试只部署fail2ban Apache监狱。我有一个事实证明这是有效的 # fail2ban $jails = [ 'ssh', 'ssh-ddos', 'pam-generic' ] + if $f2b_enable_apache { ['apache-auth', 'apache-badbots', 'apache-multiport', 'apache-noscript', 'apache-overflows'] }

如果实际安装了Apache,我尝试只部署fail2ban Apache监狱。我有一个事实证明这是有效的

  # 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]
我做错了什么?为什么在这两种情况下都附加了它?有没有更好的可扩展方法来实现这一点?

我可能会为此使用:

$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]
串联的算法,但是由于伪DSL强制变量的不变性,这些算法变得很混乱。这使用一个变量、一个条件表达式,并且没有lambda迭代器函数。

一个问题是,true/false事实不是bool,而是字符串“true”或“false”。。。