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


Ansible в Debian устанавливается из стандартных репозиториев дистрибутива или из репозиториев backports относящихся к следующей версии Debian.

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



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

Ansible в Debian


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



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


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

apt-get update


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

apt-get install ansible


Если в стандартном репозитории пакета нет, но можно поискать его, он может встречаться в других подключенных репозиториях. По ним можно искать командой apt-cache search 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 сервер завершена.



Базовая настройка Ansible и начало работы


Переходим в каталог с конфигурационными файлами

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. Они находятся в свободном доступе и их можно использовать. Свои плэйбуки можно также хранить на github или в закрытой собственной системе CI/CD, например Gitlab.


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

ansible-playbook -K scenario.yml


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

Сказать спасибо