Ansible #1: Установка и базовый функционал
| Подробности урока | |
|---|---|
| Уровень сложности | Лёгкий |
| Права root | Требуются |
| Требования | Терминал Linux |
| Категория | Установка ПО |
| Совместимость с ОС | Debian, Ubuntu |
| Примерное время чтения | 20 мин |
Введение
Ansible - инструмент для автоматизации управления серверами. С его помощью можно устанавливать пакеты, изменять конфигурационные файлы, управлять службами, создавать пользователей и выполнять команды сразу на одном или нескольких серверах. Он не требует установки агента на управляемых серверах. Для подключения к Linux-системам обычно используется SSH.
В этой статье рассмотрим установку Ansible, настройку подключения к серверу, создание Inventory, выполнение команд и создание первого Playbook.
Инструкция
Установка Ansible
Установим Ansible на управляющий сервер.
Обновим список пакетов:
apt update
Установим Ansible:
apt install ansible -y
Проверим установленную версию:
ansible --version
В результате будет выведена информация о версии Ansible и используемой версии Python.
Настройка SSH
Для подключения к удалённому серверу Ansible использует SSH.
Сначала убедимся, что обычное SSH-подключение работает:
ssh root@192.168.88.10
Вместо 192.168.88.10 укажите адрес управляемого сервера.
Для автоматизации рекомендуется использовать SSH-ключи.
Создадим ключ:
ssh-keygen -t ed25519
После выполнения команды можно несколько раз нажать Enter, чтобы использовать значения по умолчанию.
Передадим открытый ключ на удалённый сервер:
ssh-copy-id root@192.168.88.10
После этого проверим подключение:
ssh root@192.168.88.10
Если всё настроено правильно, подключение будет выполняться без запроса пароля.
Создание Inventory
Ansible использует Inventory для хранения списка управляемых серверов.
Создадим отдельный каталог:
mkdir -p /opt/ansible
cd /opt/ansible
Создадим файл inventory:
nano inventory
Добавим в него:
Здесь:
-
servers- группа серверов; -
server1- имя сервера в Ansible; -
ansible_host- IP-адрес сервера.
Проверить содержимое Inventory можно командой:
ansible-inventory -i inventory --graph
Результат:
Проверка подключения
Проверим подключение к серверу с помощью модуля ping:
ansible -i inventory servers -m ping
При успешном подключении получим:
Модуль ping не выполняет обычный сетевой ICMP-запрос. Он проверяет, может ли Ansible подключиться к серверу и выполнить свою задачу.
При первом подключении Ansible может вывести предупреждение об автоматически обнаруженном интерпретаторе Python. Это не является ошибкой и не мешает работе. Ansible самостоятельно определил доступный Python на удалённом сервере.
Если хочется убрать предупреждение и зафиксировать Python явно, то можно добавить параметр в Inventory:
[servers]
server1 ansible_host=192.168.88.10 ansible_python_interpreter=/usr/bin/python3.13
Выполнение команд
Ansible позволяет выполнять команды на серверах из Inventory.
Например, посмотрим имя сервера:
ansible -i inventory servers -m command -a "hostname"
Посмотрим версию ядра:
ansible -i inventory servers -m command -a "uname -r"
Проверим свободное место:
ansible -i inventory servers -m command -a "df -h"
В качестве цели можно указать не только всю группу servers, но и конкретный сервер:
ansible -i inventory server1 -m command -a "hostname"
Модули Ansible
Для выполнения различных задач Ansible использует модули.
Некоторые часто используемые модули:
| Модуль | Назначение |
|---|---|
ping |
Проверка подключения |
command |
Выполнение команд |
shell |
Выполнение команд через shell |
apt |
Управление пакетами Debian и Ubuntu |
copy |
Копирование файлов |
file |
Управление файлами и каталогами |
user |
Управление пользователями |
service |
Управление службами |
systemd |
Управление службами systemd |
Например, установим пакет htop:
ansible -i inventory servers -m apt -a "name=htop state=present" -b
Ключ -b используется для выполнения операции с повышением привилегий.
Если для sudo требуется пароль, можно добавить:
--ask-become-pass
Полная команда:
ansible -i inventory servers -m apt -a "name=htop state=present" -b --ask-become-pass
Первый Playbook
Отдельные команды удобно использовать для простых операций. Если необходимо выполнить несколько действий, лучше создать Playbook.
Создадим файл:
nano first.yml
Добавим:
---
- name: Первый Ansible Playbook
hosts: servers
become: true
tasks:
- name: Установка htop
apt:
name: htop
state: present
update_cache: true
- name: Создание тестового каталога
file:
path: /opt/ansible-test
state: directory
mode: '0755'
Разбор параметров
Основные параметры используемого Playbook:
-
name- название Play или задачи. Используется для отображения понятного описания при запуске. -
hosts- определяет серверы или группы серверов, на которых выполняются задачи. -
become- включает повышение привилегий черезsudo. При подключении непосредственно подrootне требуется. -
tasks- список задач, которые необходимо выполнить. -
apt- модуль для управления пакетами в Debian и Ubuntu. -
nameвнутриapt- имя устанавливаемого пакета. -
state: present- указывает, что пакет должен быть установлен. -
update_cache: true- перед выполнением задачи обновляет информацию о доступных пакетах. -
file- модуль для управления файлами и каталогами. -
path- путь к файлу или каталогу. -
state: directory- указывает, что объект должен быть каталогом. -
mode: '0755'- задаёт права доступа к каталогу.
Обратите внимание, что name может использоваться на разных уровнях. Например, name задачи задаёт её название, а name внутри apt указывает имя пакета.
Запустим Playbook:
ansible-playbook -i inventory first.yml
Ansible установит htop и создаст каталог /opt/ansible-test.
При повторном запуске:
ansible-playbook -i inventory first.yml
Ansible не будет выполнять уже выполненные изменения повторно.
В результате в выводе можно увидеть:
Параметр changed=0 означает, что при повторном запуске никаких изменений не потребовалось.
Именно такой подход является одной из основных особенностей Ansible: мы описываем требуемое состояние системы, а Ansible самостоятельно определяет, какие действия необходимо выполнить для его достижения.
Структура каталога
На данном этапе каталог проекта выглядит следующим образом:
/opt/ansible/
├── inventory
└── first.yml
inventory содержит информацию об управляемых серверах, а first.yml описывает выполняемые задачи.
Заключение
В этой статье мы установили Ansible, настроили SSH-подключение и создали первый Inventory. Также рассмотрели выполнение команд с помощью модулей и создали простой Playbook.
Этого уже достаточно для базового управления удалённым сервером. В следующей статье подробнее рассмотрим Inventory: несколько серверов, группы, переменные и различные параметры подключения.











