Ansible на Debian, установка и основы работы

Ansible — система управления конфигурацией, позволяющая очень просто настраивать множество серверов, включенных в систему — команды управления при этом отдаются с центральной ноды, на которой установлен сам пакет и на которой существует вся конфигурация.

Ansible на Debian может работать также успешно как и на Centos, клиентами могут быть машины с любыми ОС.

Ansible на Debian

Управление конфигурацией серверов осуществляется при помощи так называемых  playbooks, которые являются файлами в формате yml. Инструкции довольно просты, чтобы освоить синтаксис достаточно прочитать соответствующий раздел документации к пакету.

 

Рассмотрим установку и настройку пакета Ansible на Debian 7 Wheezy

Обновляем список репозиториев

apt-get update

 

Пробуем установить пакет из репозитория

apt-get install ansible

 

В стандартном репозитории пакета нет, но можно поискать его, он может встречаться в других подключенных репозиториях

apt-cache search ansible

 

Установка Ansible на Debian 7 из бэкпортов

Подключаем репозитоирй с бэкпортами для wheezy

echo 'deb http://http.debian.net/debian wheezy-backports main' > /etc/apt/sources.list.d/backports.list

 

Далее вновь обновляем информацию и устанавливаем пакет из бэкпортов

apt-get update

 

apt-get -t wheezy-backports install «ansible»

 

Затем проверяем версию, если никаких ошибок при установке не возникло отобразится примерно такая информация:

ansible —version

ansible 2.4.0
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/usr/share/ansible']
ansible python module location = /usr/local/lib/python2.7/dist-packages/ansible-2.4.0-py2.7.egg/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.3 (default, Jun 20 2016, 16:18:47) [GCC 4.7.2]

 

Установка Ansible на Debian сервер завершена, переходим в каталог с конфигурационными файлами

cd /etc/ansible/

 

Просматриваем основной конфиг

less ansible.cfg

 

В нем задаются все параметры работы пакета, самым важным является hostfile       = /etc/ansible/hosts, определяющим из какого файла будет браться список хостов на который распространяется конфигурация

Ansible получает доступ к серверам по ssh, в конфиге среди прочего задается таймаут соединения (по умолчанию это 10 секунд)

 

Открываем файл /etc/ansible/hosts на редактирование и добавляем в него доменные имена или IP адреса нод, которыми будем управлять при помощи Ansible, в файле добавляется имя секции хостов — например [servers], которой потом будем обращаться

mcedit /etc/ansible/hosts

 

После этого генерируем ключи и отправляем публичный ключ на все сервера, которые были добавлены в hosts на предыдущем шаге

ssh-keygen

ssh-copy-id 123.123.123.123

ssh-copy-id 123.123.123.124

ssh-copy-id 123.123.123.125

Если возникают ошибки может потребоваться установить некоторые дополнительные пакеты

apt-get install libffi-dev g++ libssl-dev

pip install pyopenssl pyasn1 ndg-httpsclient cryptography cryptography

 

 

Попробуем вывести в консоль hostname всех серверов из hosts

ansible -m shell -a 'hostname' all

 

Также мы можем отправить какой-то исполняемый файл на все сервера указав его расположение на текущем сервере и расположение на серверах, куда он отправляется

ansible web -m copy -a «src=/etc/ansible/test.php dest=/home»

 

Также можно написать простейший .yml файл, в котором указать, что необходимо установить некоторые пакеты — например, установить стандартный LAMP стэк

 

Содержимое scenario.yml:

# This playbook deploys the whole application stack in this site.

— name: apply common configuration to all nodes
hosts: all
remote_user: root

roles:
— common

— name: configure and deploy the webservers and application code
hosts: webservers
remote_user: root

roles:
— web

— name: deploy MySQL and configure the databases
hosts: dbservers
remote_user: root

roles:
— db

 

Это один из стандартных сценариев из репозитория Ansible на github. Они находятся в свободном доступе и их можно использовать.

 

Конфигурация применится ко всем серверам при выполнении следующей команды:

ansible-playbook -K scenario.yml

 

При этом не имеет значения какая ОС установлена на целевой машине — это может Debian, CentOS или что-то иное. Пакеты будут установлены независимо от ОС.