Рассмотрим автоматизацию настройки веб-сервера Nginx при помощи SaltStack.
Для начала создадим каталог mkdir /srv/salt/base/nginx в которой будут размещаться states и другие файлы для конфигурирования удаленных веб-серверов nginx через minion. После создания каталога нам нужно будет создать в нем init.sls файл (states в Salt имеют расширение .sls).
По умолчанию Salt для файлов states (.sls) использует один из самых простых и доступных форматов сериализации - YAML. Но есть поддержка также таких форматов как:
Jinja + YAML, Mako + YAML, Wempy + YAML, Jinja + json, Mako + json и Wempy + json.
Мы в наших примерах будем использовать формат YAML.
Создадим файл:
master:/srv/salt/base/nginx# vim init.sls
И добавим в него строки:
nginx:
pkg:
- installed
service:
- running
- watch:
- pkg: nginx
- file: /etc/logrotate.d/nginx
- file: /etc/nginx/nginx.conf
/etc/nginx/nginx.conf:
file:
- managed
- source: salt://nginx/nginx.conf
- user: root
- group: root
- mode: 644
/etc/logrotate.d/nginx:
file.managed:
- source: salt://nginx/logrotate.nginx
- mode: 644
Итого у нас в папке такие файлы: master:/srv/salt/base/nginx# ls
init.sls logrotate.nginx nginx.conf
Запустим теперь созданный state на веб-сервер web1: master:/srv/salt/base/nginx# salt -v web1 state.sls nginx
Executing job with jid 20151226185841988594
-------------------------------------------
web1:
----------
ID: nginx
Function: pkg.installed
Result: True
Comment: The following packages were installed/updated: nginx
Started: 18:58:42.351829
Duration: 8520.115 ms
----------
ID: /etc/logrotate.d/nginx
Function: file.managed
Result: True
Comment: File /etc/logrotate.d/nginx updated
Started: 18:58:50.937424
Duration: 61.313 ms
----------
ID: /etc/nginx/nginx.conf
Function: file.managed
Result: True
Comment: File /etc/nginx/nginx.conf updated
Started: 18:58:50.998879
Duration: 5.475 ms
----------
ID: nginx
Function: service.running
Result: True
Comment: Service restarted
Started: 18:58:51.050241
Duration: 1072.89 ms
Changes:
----------
nginx:
True
Summary
------------
Succeeded: 4 (changed=4)
Failed: 0
------------
Total states run: 4
Теперь создадим файл top.sls, с которого SaltStack начнет считывать состояния. Создав в корне папки /srv/salt/base/ файл top.sls:
master:/srv/salt/base # vim top.sls
base:
'roles:web':
- match: grain
- nginx
Мы сможем применить нашу конфигурацию ко всем узлам у которых grains в файле /etc/salt/minion прописаны настройки роли web:
grains:
roles:
- web
Например, командой:master:/srv/salt/base # salt -G 'roles:web' state.highstate