Ansible
Ansible automates the management of remote systems and controls their desired state.
Документация и другие ссылки
- docs.ansible
- Ansible для начинающих: подборка полезных материалов
- Все полезные материалы по Ansible в одном месте
- Система управления Ansible
Ansible - инструмент управления и контрол я состояния системы. Удаленной системы, что важно так как используется аnsible для упралвения серверами, раскатки приложений и т.п.
"контроля состояния" - это тоже немаловажно, так как у нас есть возможность в декларативном стиле задать желаемое состояние системы, а аnsible сам выполнит действия, которые требуются для достижения этого состояния.
Решаемые задача
Ansible широко используется в devops практиках для описания состояния инфраструктуры и раскатки приложений.
Использование
# подробно тут:
# https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
# для ubuntu
sudo add-apt-repository -y ppa:rquillo/ansible
sudo apt-get update
sudo apt-get install ansible -y
# выполним пинг для всех серверов из списка в inventory
ansible -m ping all -u ansible -k
Описание состояния инфраструктуры
Для работы ansible потребуется перечень хостов с которыми мы будем работать, для которых хотим задать состояние:
myhosts:
hosts:
my_host_01:
ansible_host: 10.0.0.1
my_host_02:
ansible_host: 10.0.0.2
my_host_03:
ansible_host: 10.0.0.3
Playbook - A list of plays that define the order in which Ansible performs operations, from top to bottom, to achieve an overall goal.
Play - An ordered list of tasks that maps to managed nodes in an inventory.
Task - A reference to a single module that defines the operations that Ansible performs.
Module - A unit of code or binary that Ansible runs on managed nodes. Ansible modules are grouped in collections with a Fully Qualified Collection Name (FQCN) for each module.
У нас есть список серверов, теперь можем определить что бы мы хотели иметь на серверах:
---
- hosts: myhosts
tasks:
- name: Install Nginx Web Server on RedHat Family
yum:
name=nginx
state=latest
when:
ansible_os_family == "RedHat"
notify:
- nginx systemd
- name: Install Nginx Web Server on Debian Family
apt:
name=nginx
state=latest
when:
ansible_os_family == "Debian"
notify:
- nginx systemd
handlers:
- name: nginx systemd
systemd:
name: nginx
enabled: yes
state: started
В этом playbook описана установка nginx для двух семейств ОС: "RedHat Family" и "Debian Family".
Условие применения для каждого описания выражается в секции when:
.
Для запуска (применения) инструкция используем команду:
ansible-playbook -i inventory.ini playbook.yaml
Переменные и шаблоны
Для гибкости описаний мы можем использовать переменные.
Переменные можно использовать в шаблонах конфигураций, например в nginx.conf
для нашего Nginx:
user {{ nginx_user }};
worker_processes {{ worker_processes }};
worker_priority -1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections {{ worker_connections }};
}
...
здесь nginx_user
, worker_processes
и worker_connections
- это переменные, которые будут описаны так:
nginx_user: nginx
worker_processes: auto
worker_connections: 2048
Для того, чтобы обработать и скопировать файл конфигурации на сервер добавляем:
---
- hosts: myhosts
tasks:
...
- name: Replace nginx.conf
template:
src=templates/nginx.conf
dest=/etc/nginx/nginx.conf
Развернуть это все можно командой:
# указание переменных в командной строке
ansible-playbook -i inventory.ini playbook.yaml --extra-vars "nginx_user=nginx worker_processes=auto worker_connections=2048"
# или с указанием файла переменных
ansible-playbook -i inventory.ini playbook.yaml --extra-vars "@vars.yaml"
Также, переменные могут быть объявлены в самом playbook, inventory, etc... Больше в документации: Using Variables
Управление
ansible-inventory -i inventory.ini --list
Роли и правильное использование Ansible
Роль - это типовая конфигурация, которую можно назначить серверу. В playbook она назначается так:
---
- name: load-balancer
hosts: all
roles:
- lb
Сами же роли, переменные, шаблоны и прочее раскладываются в проекте в определенную структуру. Подробнее в доках "Working with playbooks / Roles" и на хабре "Основы автоматизации в Ansible: роли и сценарии"
Ansible Galaxy
Ansible Galaxy - репозиторий готовых плейбуков и ролей.
Например, для установки Apache Kafka можно попробовать рассмотреть saiello.kafka:
ansible-galaxy collection install saiello.kafka