Как читать IP-адреса / подсети из файла и использовать в рецепте брандмауэра Chef - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу использовать файл в локальной системе для заполнения правил брандмауэра 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, который должен работатьПохоже, что рецепт читает предоставленную переменную как литерал?

1 Ответ

0 голосов
/ 01 февраля 2019

В файл вводятся пробельные или управляющие символы.Выполнение subnet.strip решило проблему.

...