2016-09-01 1 views
0

я следующий набор в моих атрибутов файлВызывающие несколько переменных в коде повара

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

У меня есть следующие в моем файле template.erb

-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 -%> 

Я хочу, чтобы в конечном итоге с чем-то вроде это когда я запускаю код

-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 

к сожалению, когда я запускаю код, как есть, я получаю следующее сообщение об ошибке

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

Первая половина кода работает так, как ожидалось, но второй блок дает мне вопросы. Я также не хочу жесткий порт кода 25. Может ли кто-нибудь помочь мне переписать это?

+0

Показать декларацию ресурса 'template' в вашем рецепте! – StephenKing

ответ

1

В линии подсети вы помещаете --dport <%= port %>, но не указываете, откуда должен прибыть 25.

Все данные должны быть получены из любого места, либо поместить его непосредственно в шаблон, либо в данные атрибута узла, а затем ссылаться на него в шаблоне.

Смежные вопросы