Ansible — програмне забезпечення, що надає засоби для управління конфігурацією централізованої установки застосунків і паралельного виконання типових завдань на групі систем. Сирцевий код Ansible написаний мовою Python і розповсюджується під ліцензією GPLv3.
Ansible виконує сценарій певної роботи на віддаленому сервері, працює через SSH. На віддалений системі потрібно поставити Python, на момент написання цих рядків з версією 3.x не працював, прийшлось інсталювати 2.7
1 2 3 |
sudo add-apt-repository ppa:fkrull/deadsnakes sudo apt-get update sudo apt-get install python2.7 |
Взагалі потрібно інсталювати наступне на віддаленому сервері
1 |
sudo apt-get install python-yaml python-jinja2 python-paramiko python-crypto |
Джерела
Інсталюємо пакет Ansible на сервер, з якого буде виконуватися централізоване керування
1 2 3 4 5 |
sudo apt-get update sudo apt-get install python-software-properties sudo add-apt-repository ppa:rquillo/ansible sudo apt-get update sudo apt-get install ansible |
Файл хостів /etc/ansible/hosts
задається у форматі
1 2 |
[group_name] alias ansible_ssh_host=server_ip_address |
Приклад
1 2 3 4 |
[servers] host1 ansible_ssh_host=192.0.2.1 host2 ansible_ssh_host=192.0.2.2 host3 ansible_ssh_host=192.0.2.3 |
Файли конфігурацій в YAML форматі
/etc/ansible/group_vars/server – для групи хостів
/etc/ansible/group_vars/all – для кожного серверу(будь яка група)
/etc/ansible/host_vars – каталог з індивідуальними налаштуваннями для конкретного хосту
Наприклад для host1 створимо файл /etc/ansible/host_vars/host1 та вкажимо ssh login при підключені
1 2 |
--- ansible_ssh_user: root |
Прості команди
Перевірка можливості взаємодії з уміса хостами (виконується спроба підключитися по ssh)
1 |
ansible -m ping all |
аналогічно для конкретного хосту або групи
1 |
ansible -m ping servers |
Для декілька хостів – розділяємо двокрапкою
1 |
ansible -m ping host1:host2 |
Модуль shell виконує команду на віддаленому хості та повертає результат, наприклад
1 |
ansible -m shell -a 'free -m' host1 |
Приклад: копіювання файлу
1 |
ansible -m copy -a "src=/usr/local/etc/dhcpd/dhcpd_bridge5.pool dest=/usr/local/etc/dhcpd/dhcpd_bridge5.pool" nas2 |
Плейбук (playbooks) Ansible – це сценарії, за допомогою яких на віддалені сервери відправляються набори команд. Замість того щоб запускати кожну команду Ansible окремо, ви можете створити цілий комплекс команд і помістити його в плейбук.
1 2 3 4 5 6 7 8 9 10 |
--- - hosts: droplets tasks: - name: Installs nginx web server apt: pkg=nginx state=installed update_cache=true notify: - start nginx handlers: - name: start nginx service: name=nginx state=started |
Ключ apt – це посилання на модуль Ansible; вона працює приблизно як запуск команди ansible або такої команди:
1 |
ansible -m apt -a 'whatever' all |
Цей модуль дозволяє вказати пакет і стан, в якому потрібно його підтримувати (наприклад, installed).
Рядок update-cache = true оновлює кеш пакетів віддаленої машини (apt-get update) перед установкою нового пакета.
Елемент notify містить список, що складається з одного елемента – start nginx. Це не внутрішня команда Ansible, а посилання на оброблювач, який при виклику всередині завдання може виконувати певні функції.
Розділ handlers знаходиться на тому ж рівні, що hosts і tasks. Обробники теж є свого роду завданнями, але вони можуть запускатися тільки всередині завдання на клієнтській машині.
Наприклад, в даному файлі є обробник, який запускає сервіс Nginx після установки пакета. Оброблювач не викликається, якщо завдання «Installs nginx web server» не вносить змін в систему (тобто якщо в системі вже встановлено такий веб-сервер).
Запуск плейбук Ansible
1 |
ansible-playbook playbook.yml |
якщо вам потрібно відфільтрувати список хостів і запустити плейбук тільки на одному хості зі списку, додайте прапор, щоб вказати підмножину хостів у файлі:
1 |
ansible-playbook -l host_subset playbook.yml |