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

比较puppet模板中的两个字符串变量,puppet,erb,Puppet,Erb,我试图编写一个if语句,比较puppet erb模板中的两个变量: <% @array_of_ip_addresses.each_with_index do |ip, idx| -%> <% if @ip == @ipaddress_eth0 -%> <%= "doing something with #{idx}" -%> <% end -%> <% end -%> 我不知道为什么,但我的if语句的条件一直返回f

我试图编写一个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的
模板
函数),因此不应使用
@
将其指定为类实例变量。当您删除它并将其指定为块范围变量
ip
时,模板将如下所示:

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


使用类实例变量
@ip
可能会导致解析为
nil
,这几乎总是错误的,因为
nil!=@ipaddress_eth0
除非Facter无法解析您的eth0 ipaddress的值,这是非常罕见的(但仍然可能)。

伙计,你太棒了!