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

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 стало все совсем легко.
Приступим к написанию своего первого плейбука
Для начала нам необходимо добавить хост в ansiblenano /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 комментариев