Получить результат команды как переменную в стеке соли для изменения iptables

Я пытаюсь ввести новое правило в iptables. Я хотел бы поместить правило в предпоследний номер строки (т.е. непосредственно перед оператором DENY ALL). например.

[vagrant@controller ~]$ sudo iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
5    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

тогда,

sudo iptables -I INPUT 5 -t filter -d 192.168.33.10 -m state --state NEW -j ACCEPT

было бы:

[vagrant@controller ~]$ sudo iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
5    ACCEPT     all  --  anywhere             192.168.33.10        state NEW
6    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

проблема в том, что я не могу понять, как я могу автоматизировать это с помощью соли, не зная явно, какой номер последней строки? Есть ли способ запустить команду в стеке соли и использовать результат этой команды в качестве переменной для шаблона jinja?

sudo iptables -L INPUT --line-numbers  | tail -n1 | awk '{print $1}'

person yee379    schedule 08.12.2015    source источник


Ответы (1)


Я не знаю какого-либо простого способа сделать это так, как это описано выше. Некоторые из обходных путей, которые приходят на ум:

  1. Определите последнее правило так, чтобы оно зависело от (т. е. requires) правила, которое вам нужно вставить. Соль тогда удостоверится, что они в правильном порядке.
  2. Создайте дополнительную цепочку iptables. Вставьте переход к новой цепочке где-нибудь в исходной конфигурации, затем измените правила в цепочке по мере необходимости. Это дает вам большую гибкость.
  3. Напишите сценарий оболочки, который делает то, что вы хотите, и вызовите его с помощью cmd.run. Довольно неэлегантно, но требует меньше изменений в других частях конфигурации.

Ни один из этих вариантов не идеален и может не подойти для вашего варианта использования. Тем не менее, комбинирование первых методов поможет вам довольно далеко, а также приведет к более чистой настройке.

person tarleb    schedule 08.12.2015