在 puppetlabs iptables 模块中使用事实

Using facts in puppetlabs iptables module

我想在清单中使用机器 ip 地址,但是 puppet 失败了:

Error: Failed to apply catalog: Parameter destination failed on Firewall[004 accept ssh]: host_to_ip failed for ${address}, exception no address for ${address} at /etc/puppetlabs/

firewall { '004 accept ssh':
    proto => 'tcp',
    destination => '$::ipaddress',
    dport  => '22',
    action => 'accept',
  }

这里如何自动获取IP地址?

您将变量放在字符串文字 '' 中,因此事实变量 $::ipaddress 将无法正确插入或解析。它按字面解释为 $::ipaddress。您应该将其更改为:

firewall { '004 accept ssh':
  proto => 'tcp',
  destination => $::ipaddress,
  dport  => '22',
  action => 'accept',
}

您也可以用 "" 对其进行插值,但没有真正的理由这样做。

尽管您做了正确的事情并将事实建立为向后兼容的全局变量,但如果您正在使用 Facter >= 3,您也可以通过以下方式对其进行未来验证:

firewall { '004 accept ssh':
  proto => 'tcp',
  destination => $facts['ipaddress'],
  dport  => '22',
  action => 'accept',
}

您也可以直接在 facts 网络哈希中指定它,但这可能有点矫枉过正。