Ansible в Debian устанавливается из стандартных репозиториев дистрибутива или из репозиториев backports относящихся к следующей версии Debian.
Ansible — система управления конфигурацией, позволяющая очень просто настраивать множество серверов, включенных в систему. Команды управления при этом отдаются с центральной ноды, на которой установлен сам пакет и на которой существует вся конфигурация.
Ansible в Debian может работать также успешно как и на Centos. Клиентами могут быть машины с любыми ОС.
Управление конфигурацией серверов осуществляется при помощи так называемых 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 или что-то иное. Пакеты будут установлены независимо от ОС.