2017-08-15 56 views
0

我想开发一个简单的公式Saltstack将刷新所有的iptables规则,并应用更新后的规则的另一个公式,因为我需要切换INPUT政策ACCEPT和然后刷新规则。我试图以验证方式如下:模块的功能输出到变量在saltstack状态[解决]

{% set policy = salt['pillar.get']('iptables.get_policy','') %} 
{% if policy == "ACCEPT" %} 
flush rules: 
    iptables.flush: 
    require: 
     - default to accept 
{% endif %} 
我SLS的

全部代码如下所示:

include: 
    - iptables 

default to accept: 
    iptables.set_policy: 
    - chain: INPUT 
    - policy: ACCEPT 


{% set policy = salt['iptables.get_policy'] %} 
{% if policy == "ACCEPT" %} 
flush rules: 
    iptables.flush: 
    require: 
     - default to accept 
{% endif %} 

iptables reapply: 
    require: 
    - sls: iptables 

显然是不行的,任何人都可以建议我在做什么错了,如果这是可能的呢?

更新

在情况下,如果有人需要类似的公式,这里是它的工作对我来说公式:我没有测试过这

include: 
    - iptables 

default to accept: 
    iptables.set_policy: 
    - chain: INPUT 
    - policy: ACCEPT 
    - order: 1 

iptables.flush: 
    module.run: 
    - name: iptables.flush 
    - order: 2 

回答

1

,但我认为你需要实际调用功能。

{% set policy = salt['iptables.get_policy']() %} 

确保添加()实际调用该函数

+0

不,不工作:( – Sebastjanas

0

看起来像下面的语法在我的情况下工作:

{{ salt.iptables.flush() }} 

公式的其他部分都没有工作,但主这个问题的问题解决了。

+0

如果我使用'测试= TRUE'?执行你的公式是它仍然刷新规则?我想是的。 –

+0

@ ChristopheDrevet-Droguet,它不会与'test = True'齐平,您可以安全地使用'test = True'运行它 – Sebastjanas

0

依靠Salt本身有1个缺点。

如果Salt master和Salt minion之间的连接由于某种原因(例如应用了错误的规则)通过iptables被阻止,那么这不起作用。

所以我认为最好是运行系统命令来做到这一点,我的解决方案是通过在测试模式等运行的cron完成。

iptables_flush_testing_mode: 
    module.run: 
    - name: at.at 
    - args: 
     - "now +1 min" 
     - | 
     # IPv4 
     iptables -P INPUT ACCEPT; 
     iptables -P OUTPUT ACCEPT; 
     iptables -P FORWARD ACCEPT; 
     iptables -F INPUT; 
     iptables -F OUTPUT; 
     iptables -F FORWARD; 
     # IPv6 
     ip6tables -P INPUT ACCEPT; 
     ip6tables -P OUTPUT ACCEPT; 
     ip6tables -P FORWARD ACCEPT; 
     ip6tables -F INPUT; 
     ip6tables -F OUTPUT; 
     ip6tables -F FORWARD; 

的满员状态是在flush.sls