Я пытаюсь настроить состояние, чтобы добавить связанные порты, открытые в 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
И это приводит к ошибке на миньоне:
Состояние firewalld в SLS 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-formula
из /srv/salt/top.sls
(или другие файлы состояния в /srv/salt/
используя include:
директива).
Я предполагаю, что вы клонировали firewalld-formula
репо таким образом:
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 -%}