Calling multiple variables in chef code

I have the following set in my attributes file

default[:iptables][:ports] = [22,21]
default[:iptables][:ubnet] = ["192.168.0.0/24"]

I have the following in my template.erb file

-A INPUT -i lo -j ACCEPT

<%- node[:iptables][:ports].each do |port| -%>

-A INPUT -m state --state NEW -m tcp -p tcp --dport <%= port %> -j ACCEPT

<%- end -%>

<% node[:iptables][:subnet].each do |subnet| -%>

-A INPUT -m state --state NEW -s <%= subnet %> -m tcp -p tcp --dport <%= port %> -j ACCEPT

<%- end -%>

I want to end up with something like this when i run the code

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

-A INPUT -m state --state NEW -s 192.168.0.0/16 -m tcp -p tcp --dport  25 -j ACCEPT

Unfortunately when i run the code as is, i get the following error

Chef::Mixin::Template::TemplateError (undefined local variable or method 'port' for #<Chef::Mixin::Template::TemplateContext:0x00000006e7cd80>)

The first half of the code works as expected but the second block is the one giving me issues. I also do not want to hard code port 25. Can someone help me rewrite this?

Answers


In the subnet line you put --dport <%= port %> but don't indicate where the 25 is supposed to come from.

All data has to come from somewhere, either put it in the template directly, or in node attribute data and then reference it in the template.


Need Your Help

How to get rid of tiny gap between floated elements?

html css

I would like to float two divs on html page like that: http://5toneface.eu/temp/