比较人偶模板中的两个字符串变量

Comparing two string variables in puppet template

我正在尝试编写一个 if 语句来比较 puppet erb 模板中的两个变量:

<% @array_of_ip_addresses.each_with_index do |ip, idx| -%>
  <% if @ip == @ipaddress_eth0 -%>
    <%= "doing something with #{idx}" -%>
  <% end -%>
<% end -%>

我不明白为什么,但我的 if 语句的条件一直返回 false(不用说我确认应该匹配)。

我错过了什么蠢事?

ip 是块作用域变量,而不是从调用代码(在本例中为 Puppet 的 template 函数)实例化的变量,因此您不应将其指定为 class 带有 @ 的实例变量。当您删除它并将其指定为块范围变量 ip 时,模板将如下所示:

<% @array_of_ip_addresses.each_with_index do |ip, idx| -%>
  <% if ip == @ipaddress_eth0 -%>
    <%= "doing something with #{idx}" -%>
  <% end -%>
<% end -%>

使用 class 实例变量 @ip 可能会导致 nil 的解析,除非 Facter 无法解析,否则几乎总是错误的 nil != @ipaddress_eth0你的 eth0 ipaddress 的值,这很少见(但仍然可能)。