我正在尝试设置一个状态,以便我可以在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 验证器运行了它,并且都说它是干净的,所以我很困惑。
答案1
firewalld-formula
我假设你正在使用官方存储库?
请注意,“SaltStack Formula”是“使用 pillars 配置的即用型状态”。因此,您的 YAML 声明必须不是不是国家宣言,而是支柱宣言。
让我举例说明一下:
我假设您有您的状态文件/srv/salt
和您的支柱文件/srv/pillar
。
要使用firewalld-formula
,您需要创建一个“pillar”文件。使用提供的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>
注意:通过命名pillar文件<target-host>.sls
,我们可以轻松地为不同的主机制作不同的pillar。
firewalld-formula
然后,我们通过引用from (或使用该指令/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
然后你就完成了。
或者,您可以使用通用状态,让 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 -%}