2017-08-15 97 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