Saltstack

防火牆鹽棧

  • August 3, 2016

我正在嘗試設置狀態,以便我可以添加在 firewalld 中打開的相關埠。

嘗試了我能找到的每一個例子,但都失敗了。

這是我目前的:

firewalld:
 service.running:
   - enable: True
 default_zone:
   - public
 services:
   snmpd:
     - short:
       - snmp
     - ports:
       - udp:
         - 161
       - tcp:
         - 161
   ssh:
     - short:
       - ssh
     - ports:
       - tcp:
         - 22
 zones:
   public:
     - short:
       - Public
     - services:
       - ssh
       - snmpd

這會導致以下人員的錯誤:

SLS ‘firewalld.firewalld’ 中的狀態 ‘firewalld’ 未形成為列表

我已經通過三個不同的 YAML 驗證器執行了這個,都說它很乾淨,所以我很困惑。

我假設您使用的是firewalld-formula來自官方儲存庫的?

請注意,“SaltStack 公式”是“您使用支柱配置的即用型狀態”。因此,您的 YAML 聲明不能是狀態聲明,而是支柱聲明

讓我舉例說明:

我假設你有你的狀態文件/srv/salt和你的支柱文件/srv/pillar

要使用firewalld-formula,您需要創建一個“支柱”文件。使用提供的pillar.example文件並將其另存為/srv/pillar/firewalld/<target-host>.sls,並從 中引用它/srv/pillar/top.sls。例如:

# /srv/pillar/top.sls
base:
 # ... other references we skip ...
 'target-host':
   - firewalld.<target-host>

注意:通過命名支柱文件<target-host>.sls,我們可以很容易地為不同的主機製作不同的支柱。

然後,我們通過引用firewalld-formulafrom (或使用指令/srv/salt/top.sls下的其他狀態文件)來“啟動”公式。/srv/salt/``include:

我假設您firewalld-formula以這種方式複製了 repo:

cd /srv/salt
git clone https://github.com/saltstack-formulas/firewalld-formula.git
ln -s firewalld-formula/firewalld firewalld

注意:符號連結允許我們將狀態稱為firewalld而不是firewalld-formula.firewalld.

現在,編輯/srv/salt/top.sls文件以呼叫firewalld狀態:

# /srv/salt/top.sls
base:
 # ... other references ...
 'target-host':
   - firewalld

Aaand,你完成了。

或者,您可以改用通用狀態,讓 Jinja 渲染器和 Pillar 系統處理“定位”細節。假設您的top.sls文件具有以下內容:

# /srv/salt/top.sls
base:
 '*':
   # ...other states...
   - hardening
   # ...more states...

編輯hardening狀態文件,如下所示:

# /srv/salt/hardening/init.sls

# ...various states we skip

include:
 # ... possible other includes ...
{% if pillar.get('firewalld', false) -%}
 # The following will be included *only* if pillar for the minion has the 'firewalld' key defined
 - firewalld
{% endif -%}

引用自:https://serverfault.com/questions/791057