avatar FAQ Ansible давай настроим это по быстрому ( на примере Ubuntu )

Когда у вас один сервер, его можно настроить руками, это не занимает много времени, проблема начинается когда вам необходимо тиражировать данное решение, на 3-5-20 и более, систем. Вот тут приходят на помощь системы управления конфигурациями, их множество Chef, CFEngine, Puppet ну и наш герой Ansible.
C Chef, CFEngine я сталкивался только в ознакомительных целях, а вот с Puppet мне удалось поработать последние 2 года, и с ним у нас были проблемы, предыдущий мой коллега, наделал таких хитросплетений, что сейчас, трудно добавить что-то новое чтобы где-то, что-то не отвалилось, в общем на поддержку puppet уходит почти 90% рабочего времени, что не есть хорошо. Вот мы и решили свалить на более простую систему, а главное переделать, чтобы все было понятно т.к. наговонокодить можно в любой системе, работать-то оно будет но вот разобраться в этих хитросплетениях не представляется возможным.
Данную статью я решил написать с целью привлечения интереса у данной системе, тема настолько обширна что не представляется возможным описать все аспекты ее использования, на базовое освоение я потратил 2 дня, а после уже мог решить 80% всех вопросов, за ответами на оставшиеся 20% можно обратиться к документации Ansible

К преимуществам Ansible можно отнести отсутствие необходимости установки агента на управляемый сервер, вся суть его работы сводится к следующему:
1) генерация скрипта python
2) подключение к удаленному серверу по ssh
3) выполнение полученного скрипта на этом сервере

Конечно такой алгоритм несколько утрирован, а в реальности все немного сложнее, но он помогает понять суть работы Ansible.
Чтобы можно было понять как просто он работает, то в целях ознакомления с Ansible мы выполним на нашем тестовом сервере 3 простых действия
1) установим пакет или несколько пакетов
2) Создадим группу в системе
2) создадим пользователя

Все это я буду делать на примере Ubuntu, но в других системах все делается аналогичным образом.
Файлы настроек, в терминологии Ansible, называются playbook, в нем описывается то стояние к которому будет приведен удаленный хост, по сути мы можем контролировать любой аспект работы системы, Asnible может делать следующее:
— удалять или создавать файлы
— устанавливать или удалять пакеты
— создавать конфигурационные файлы ( из шаблонов )
— поддерживать состояние системных сервисов ( запущен/остановлен )
— добавлять или удалять пользователей/группы системы
— устанавливать права доступа на файлы или директории

Думаю пока вы ничего сложного не увидели…
Для начала установим последнюю версию Asible, а на момент написания это 2.1, нам понадобится как минимум одна система, чтобы все сделать максимально приближенно к боевым условиям, то можно использовать 2 системы, первая у на будет выступать в качестве сервера Ansible на нем будут лежать плейбуки и выполняться их запуск.
Вторая система нам понадобится в качестве подчиненной системы, на ней будут выполняться действия по конфигурированию, чтобы с ней можно было нормально работать, нам необходимо раздразнить вход с помощью ключа по ssh, о том, как это сделать, можно прочитать в статье Вход ssh по ключу ( Linux/Unix ), разрядность и редакция операционной системы значения не имеют, также нам понадобится разрешить выполнение sudo без запроса пароля, как это сделать можно посмотреть в статье sudo без пароля

Реализацию затеи нам необходимо начать с подключения репозитория Asible, как это сделать можно прочитать по ссылке, не вижу смысла это описывать
подключение репозитория Ansible
Обновляем список пакетов
sudo apt-get update


Установим Asnible
sudo apt-get install ansible

В репозиториях ubuntu он тоже есть, но версия старая и писать на ней кросс-платформенные, когда вам нужно конфирурировать одновременно например CentOS и Ubuntu, плейбуки намного сложнее, в версии 2.0 стало все совсем легко.

Приступим к написанию своего первого плейбука
Для начала нам необходимо добавить хост в ansible
nano /etc/ansible/hosts

Где создадим группу, назовем ее [testserver] и впишем в неё IP адрес нашего сервера чтобы выглядело
[testserver]
192.168.0.10


Вот теперь мы переходим к созданию плейбука
nano /etc/ansible/test-server.yml

В него нам необходимо добавить адрес сервера и чтобы мы могли выполнять в системе какие-то действия нам необходимо поднять привилегии, тогда запись принимает вид:
---
  - hosts: 192.168.0.10
    become: yes


Думаю, пока, ничего сложного нет, так что, двигаемся дальше.
Далее ну нас начинаются задачи по настройке системы, обозначим их, создав запись:
tasks:

После нее у нас уже пойдут записи действий.
Создадим группу, назовем ее tester

  - name: Create group tester
    group: name=tester state=present


Создаем пользователя в системе
Добавим в файл следующую запись, мы добавляем пользователя tester

  - name: Add user to system
    user: name=tester shell=/bin/bash groups=tester  append=yes


Установим пакет, на примере Nginx
Для начала мы обновим список пакетов в системе, добавляем запись в полейбук:

  - name: Update package list             
    apt: cache_valid_time=3600 update_cache=yes

Ansible будет обновлять список пакетов, если с момента их обновления прошло более 10 мин. если не указать параметр cache_valid_time=3600, то список пакетов будет обновляться при каждом запуске плейбука.

Мы установим последнюю версию nginx, фишка в том что если в репозиториях версия пакета обновилась, то Ansible его обновит до последней версии, за это отвечает ключ state=latest, если нам нужно только установить, но не обновлять, до последней версии, то указываем значение параметра state=present

  - name: Install Nginx package
    package: name=nginx state=latest


После всех наших действий, у нас должен получиться плейбук следующего содержания:
---
  - hosts: 172.16.32.191
    become: yes

    tasks:
    - name: Create group tester
      action: group name=tester state=present

    - name: Add user to system
      user: name=tester shell=/bin/bash groups=tester append=yes

    - name: Update package list
      apt: cache_valid_time=3600 update_cache=yes

    - name: Install Nginx package
      package: name=nginx state=latest


Нам остается его запустить и проверить как он работает, делается это так:
ansible-playbook /etc/ansible/test-server.yml


процесс будет выглядеть так:

PLAY [192.168.0.10] ***********************************************************

TASK [setup] *******************************************************************
ok: [192.168.0.10]

TASK [Create group tester] *****************************************************
changed: [192.168.0.10]

TASK [Add user to system] ******************************************************
changed: [192.168.0.10]

TASK [Update package list] *****************************************************
changed: [192.168.0.10]

TASK [Install Nginx package] ***************************************************
changed: [192.168.0.10]

PLAY RECAP *********************************************************************
192.168.0.10              : ok=5    changed=5    unreachable=0    failed=0


Те задачи, которые изменились в ходе работы Ansible будут подсвечены желтым, то что не изменялось, подсвечивается зеленым, а там где ошибка красным.

Вот так все просто, естественно тема намного глубже, можно создавать роли, например роли конфигурирования nginx, задавать значения в переменных, создавать окржения, по группа или по хостам и много другое.
Система легка в освоении, а попробовав раз, начинаешь пилить роли под каждую задачу, чтобы потом не настраивать руками.
С помощью Ansible, вы потратите время на написание роли один раз, зато потом, тиражирование, этого решения, занимает несколько минут.
За подробностям прошу в документацию, там не сложно
Документация Ansible
Всем удачи, в освоении!

0 комментариев

Есть что добавить? Регистрируйся и оставляй комментарии!