Я хочу использовать файл в локальной системе для заполнения правил брандмауэра UFW с помощью Chef.Рецепт firewall
(https://supermarket.chef.io/cookbooks/firewall) обладает функциональностью, позволяющей это сделать, но я получаю ошибки при попытке передать переменную в блоки.
Если я жестко кодирую IP-адреса / подсети, все работает нормальноЕсли я добавлю в файл тот же IP / подсеть, я получу ошибку Invalid IP Address.
В приведенном ниже коде будет выполняться первый блок firewall_rule
, но второй и последующие блоки с "#{subnet}"
нет. Я также попытался просто передать переменную напрямую, а не с подстановкой строки с теми же результатами.
# Try to read from the client list of IPs
if File.exist?("/secure/targs/client.lst") then
File.open("/secure/targs/client.lst", "r") do |subnets|
subnets.each_line do |subnet|
# Only allow outbound connection to in-scope targs
firewall_rule 'client-out-ether' do
interface 'eno1'
destination "10.0.0.128/25"
direction :out
command :allow
end
firewall_rule 'client-out-wifi' do
interface 'wlp58s0'
destination "#{subnet}"
direction :out
command :allow
end
# Allow inbound connections from in-scope targs
# Ideally we scope this to specific ports
# OR remove this and do it manually as needed
firewall_rule 'client-in-eth' do
dest_interface 'eno0'
source "#{subnet}"
command :allow
end
firewall_rule 'client-in-wifi' do
dest_interface 'wlp58s0'
source "#{subnet}"
command :allow
end
end
end
# Default allow all out on client interfaces if scope not defined
else
firewall_rule 'client-out-ether' do
interface 'eno1'
direction :out
command :allow
end
firewall_rule 'client-out-wifi' do
interface 'wlp58s0'
direction :out
command :allow
end
end
Я предполагаю, что это проблема синтаксиса, но это, кажется, нормальный синтаксис Ruby, который должен работатьПохоже, что рецепт читает предоставленную переменную как литерал?