Planetahost VPS
Перейти к основному контенту

Ansible #1: Установка и базовый функционал

intro-Installing-Ansible-and-Basic-Functionality-planetahost.png

Подробности урока
Уровень сложности Лёгкий
Права root Требуются
Требования Терминал Linux
Категория Установка ПО
Совместимость с ОС Debian, Ubuntu
Примерное время чтения  20 мин

Введение

Ansible - инструмент для автоматизации управления серверами. С его помощью можно устанавливать пакеты, изменять конфигурационные файлы, управлять службами, создавать пользователей и выполнять команды сразу на одном или нескольких серверах. Он не требует установки агента на управляемых серверах. Для подключения к Linux-системам обычно используется SSH.

В этой статье рассмотрим установку Ansible, настройку подключения к серверу, создание Inventory, выполнение команд и создание первого Playbook.

Инструкция 

Установка Ansible

Установим Ansible на управляющий сервер.

Обновим список пакетов:

apt update

Установим Ansible:

apt install ansible -y

Проверим установленную версию:

ansible --version

изображение.png

В результате будет выведена информация о версии Ansible и используемой версии Python.

Настройка SSH

Для подключения к удалённому серверу Ansible использует SSH.

Сначала убедимся, что обычное SSH-подключение работает:

ssh root@192.168.88.10

Вместо 192.168.88.10 укажите адрес управляемого сервера.

Для автоматизации рекомендуется использовать SSH-ключи.

Создадим ключ:

ssh-keygen -t ed25519

После выполнения команды можно несколько раз нажать Enter, чтобы использовать значения по умолчанию.

изображение.png

Передадим открытый ключ на удалённый сервер:

ssh-copy-id root@192.168.88.10

изображение.png

После этого проверим подключение:

ssh root@192.168.88.10

Если всё настроено правильно, подключение будет выполняться без запроса пароля.

Практика Ansible
Нужен сервер для обучения?
Для изучения Ansible удобно использовать отдельный сервер, на котором можно свободно экспериментировать с Linux, конфигурацией и автоматизацией. Недорогой VDS с root-доступом отлично подойдёт для учебной лаборатории и практики примеров из этой серии.
Посмотреть VDS KVM →

Создание Inventory

Ansible использует Inventory для хранения списка управляемых серверов.

Создадим отдельный каталог:

mkdir -p /opt/ansible
cd /opt/ansible

Создадим файл inventory:

nano inventory

Добавим в него:

изображение.png

Здесь:

  • servers - группа серверов;

  • server1 - имя сервера в Ansible;

  • ansible_host - IP-адрес сервера.

Проверить содержимое Inventory можно командой:

ansible-inventory -i inventory --graph

Результат:

изображение.png

Проверка подключения

Проверим подключение к серверу с помощью модуля ping:

ansible -i inventory servers -m ping

При успешном подключении получим:

изображение.png

Модуль 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"

изображение.png

Посмотрим версию ядра:

ansible -i inventory servers -m command -a "uname -r"

изображение.png

Проверим свободное место:

ansible -i inventory servers -m command -a "df -h"

изображение.png

В качестве цели можно указать не только всю группу 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

изображение.png

Первый 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 не будет выполнять уже выполненные изменения повторно.

В результате в выводе можно увидеть:

изображение.png

Параметр changed=0 означает, что при повторном запуске никаких изменений не потребовалось.

Именно такой подход является одной из основных особенностей Ansible: мы описываем требуемое состояние системы, а Ansible самостоятельно определяет, какие действия необходимо выполнить для его достижения.

Структура каталога

На данном этапе каталог проекта выглядит следующим образом:

/opt/ansible/
├── inventory
└── first.yml

inventory содержит информацию об управляемых серверах, а first.yml описывает выполняемые задачи.

Заключение

В этой статье мы установили Ansible, настроили SSH-подключение и создали первый Inventory. Также рассмотрели выполнение команд с помощью модулей и создали простой Playbook.

Этого уже достаточно для базового управления удалённым сервером. В следующей статье подробнее рассмотрим Inventory: несколько серверов, группы, переменные и различные параметры подключения.

Полезные ссылки