Ansible: Автоматизация IT-администрирования

Лень – двигатель прогресса. Изобретение лифта, пульта дистанционного управления – яркие тому примеры. Стремление к автоматизации рутинных задач привело к появлению Ansible – инструмента, упрощающего жизнь IT-специалистам.

Проблема рутинных задач в администрировании серверов

Множество серверов требуют одновременного выполнения различных действий: обновление конфигураций, создание пользователей, резервное копирование, перезапуск сервисов. Все это необходимо делать регулярно. Подключение по SSH к каждому серверу и ввод одних и тех же команд – утомительное и подверженное ошибкам занятие.

Ansible: решение для автоматизации

Ansible – опенсорсный инструмент для автоматизации IT-задач. Он позволяет запускать рутинные операции из одного места, без необходимости подключения к каждому серверу. Все действия описываются в YAML-файле (Yet Another Markup Language). Это избавляет от длинных, склеенных команд и подверженных ошибкам shell-скриптов. Ansible выполняет задачи независимо от их количества.

Начало работы

Для начала работы установите Ansible на компьютер, с которого будет осуществляться управление серверами (например, ноутбук). Необходим SSH-доступ (или WinRM для Windows-серверов) к управляемым серверам. Главное преимущество Ansible – отсутствие агентов, в отличие от Chef или Puppet. Агент – приложение, устанавливаемое на каждый сервер. В Ansible эта необходимость отсутствует.

Модули Ansible

Ansible использует модули – небольшие программы, выполняющие определенные задачи. Модули отправляются на серверы, выполняют свою работу и удаляются. Существует множество модулей: создание файлов, копирование, установка Nginx, запуск контейнеров Docker и многое другое. Ansible предоставляет модули для работы с базами данных, облачными провайдерами и CI/CD инструментами. Сетевые инженеры могут использовать Ansible для настройки маршрутизации и списков доступа на оборудовании Cisco, Juniper, MikroTik и других производителей. При необходимости можно написать собственный модуль.

Playbook и декларативный подход

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

Примеры:

Создание Docker-образа:

- name: Create Docker image
  docker_image:
    name: my-image
    path: ./my-image

Запуск Docker-контейнера:

- name: Run Docker container
  docker_container:
    name: my-container
    image: my-image

Работа с PostgreSQL:

- name: Manage PostgreSQL tables
  postgresql_db:
    dbname: mydb
    state: present # or absent
    user: myuser
    password: mypassword
    tables:
      - name: mytable
        owner: myuser

Tasks

Для выполнения нескольких действий в определенной последовательности модули объединяются в задачи (Tasks). Каждой задаче присваивается имя, указывается модуль и его аргументы:

- name: Create directory
  file:
    path: /my/dir
    state: directory

- name: Install Nginx
  apt:
    name: nginx
    state: present

- name: Start Nginx
  service:
    name: nginx
    state: started

Hosts и Inventory File

Для указания серверов используется директива hosts. Список серверов указывается в файле инвентаризации (Inventory File):

[webservers]
192.168.1.100
192.168.1.101

В Playbook серверы указываются по имени группы:

- hosts: webservers
  remote_user: myuser
  tasks:
    # ... tasks ...

Переменные объявляются в блоке vars:

- hosts: webservers
  vars:
    my_variable: "some value"
  tasks:
    - debug:
        msg: "My variable: {{ my_variable }}"

Блок, содержащий информацию о том, кто и что должен выполнить, называется Play. В одном Playbook может быть несколько Play для разных групп серверов.

Ansible – мощный инструмент для автоматизации IT-задач, упрощающий администрирование серверов и повышающий эффективность работы. Использование декларативного подхода, модулей и Playbook делает процесс автоматизации удобным и понятным.

Что будем искать? Например,программа