понедельник, 25 декабря 2017 г.

Автоматизация администрирования Linux/UNIX серверов (часть 3)

Рассмотрим автоматизацию настройки веб-сервера 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