Table of Contents

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

Если вы впервые знакомитесь с Ansible, то в этой статье мы расскажем о нем, включая основные концепции и о том, как начать работу с ним.

Введение в Ansible

Ansible был разработан Майклом ДеХааном в 2012 году и приобретен компанией Red Hat в 2015 году. С тех пор он стал одним из самых популярных инструментов автоматизации в отрасли.

Для определения желаемого состояния инфраструктуры в Ansible используется простой декларативный язык YAML (сокращение от “YAML Ain’t Markup Language”). Это делает его легко читаемым и понятным даже для непрограммистов.

Ansible может использоваться для автоматизации широкого круга задач, включая:

  • Управление конфигурацией
  • Развертывание приложений
  • Непрерывная доставка
  • Предоставление ресурсов
  • Соблюдение требований безопасности
  • Оркестрация

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

Для начала работы с Ansible необходимо установить его на свою систему. Ansible может быть установлен на широкий спектр операционных систем, включая Linux, macOS и Windows.

Для установки Ansible на Linux, в данном случае на Ubuntu, можно воспользоваться следующими командами:

sudo apt-get update
sudo apt-get install ansible -y

В противном случае для установки ansible можно воспользоваться следующими руководствами:

После установки Ansible можно убедиться в его работоспособности, выполнив следующую команду:

ansible --version

При этом должна отобразиться версия установленного Ansible.

Ansible Inventory

Первым шагом в использовании Ansible является определение инвентаризации. Инвентаризация - это список серверов, которыми будет управлять Ansible. Инвентарь может быть задан в различных форматах, включая INI, YAML и JSON.

Ниже приведен пример файла инвентаризации в формате INI:

[webservers]
webserver1.example.com
webserver2.example.com

[databases]
dbserver1.example.com
dbserver2.example.com

В этом файле инвентаризации определены две группы серверов - “веб-серверы” и “базы данных” - и перечислены имена хостов серверов в каждой группе.

Ansible Playbooks

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

Ниже приведен пример простой книги воспроизведения:

name: Install Nginx
hosts: webservers
become: yes

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

Этот плейбук устанавливает веб-сервер Nginx на все серверы, входящие в группу “webservers”.

Адрес hosts Параметр указывает, на какой группе серверов должен быть запущен плейбук. Параметр become Параметр указывает, что задачи должны запускаться с повышенными привилегиями (с использованием sudo или su

Сайт tasks В разделе перечислены отдельные задачи, которые должен выполнить плейбук. В данном случае есть только одна задача, которая устанавливает пакет Nginx с помощью команды apt модуль.

Модули Ansible

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

Вот некоторые примеры встроенных модулей:

  • apt - Управление пакетами в системах на базе Debian
  • yum - Управление пакетами в системах на базе Red Hat
  • file - Управление файлами
  • service - Управление системными сервисами
  • user - Управление пользователями и группами
  • copy - Копирование файлов с управляющей машины на управляемые серверы

Полный список встроенных модулей можно найти в разделе Ansible documentation

Роли и структура папок Ansible

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

Ниже приведен пример простой роли Ansible для установки и настройки Nginx:

roles/
└── nginx/
    ├── tasks/
    │   ├── main.yml
    ├── handlers/
    │   ├── main.yml
    ├── templates/
    │   ├── nginx.conf.j2
    ├── files/
    ├── vars/
    ├── defaults/
    ├── meta/

В данном примере роль nginx представляет собой каталог, содержащий несколько подкаталогов, каждый из которых служит определенной цели:

  • tasks: содержит задачи, которые будут выполняться ролью.
  • handlers: содержит обработчики, которые задачи могут уведомлять.
  • templates: содержит шаблоны Jinja2, которые будут использоваться для генерации конфигурационных файлов для Nginx.
  • files: содержит любые статические файлы, необходимые роли.
  • vars: содержит переменные, специфичные для роли.
  • defaults: содержит переменные по умолчанию для роли.
  • meta: содержит метаданные о роли, например, ее зависимости.

Роли можно легко разделять и повторно использовать в нескольких игровых книгах и проектах.

Приведем пример файла main.yml в каталоге tasks:

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

- name: Enable Nginx
  systemd:
    name: nginx
    enabled: yes
    state: started

Эта задача устанавливает Nginx с помощью модуля apt, включает и запускает службу Nginx с помощью модуля systemd. Она также уведомляет обработчик restart nginx, который перезапустит Nginx, если в конфигурацию были внесены какие-либо изменения.

Использование подобной роли Ansible позволяет упростить процесс управления и настройки программного обеспечения на нескольких серверах или средах. Разделение задач, обработчиков, шаблонов и других ресурсов в единой структуре каталогов позволяет легче управлять этими компонентами и повторно использовать их в различных игровых книгах и проектах.

Лучшие практики для Ansible

Ниже перечислены лучшие практики, которым следует следовать при использовании Ansible:

1. Используйте контроль версий

Хранение плейбуков и ролей Ansible в системе контроля версий, например в Git, является оптимальной практикой, позволяющей отслеживать изменения и сотрудничать с другими пользователями. Контроль версий обеспечивает историю изменений, внесенных в кодовую базу, и позволяет при необходимости вернуться к предыдущим версиям. Он также облегчает совместную работу с другими пользователями, позволяя обмениваться кодом и разрешать конфликты.

2. Использование ролей для организации игровых книг

Роли - это мощный способ организации игровых книг и задач Ansible. Группируя связанные задачи в роли, вы можете сделать свои учебники более модульными и многократно используемыми. Роли также облегчают совместное использование кода в различных проектах.

Приведем пример игрового учебника, в котором используется роль для установки и настройки Nginx:

name: Install and configure Nginx
hosts: webservers
become: yes
roles:
  - nginx

В данном руководстве используется роль “nginx” для установки и настройки Nginx на группе хостов “webservers”.

3. Использование тегов для группировки задач

Теги можно использовать для группировки связанных задач в плейбуках Ansible. Это облегчает выполнение определенных частей сценария, особенно при работе с большими и сложными сценариями.

Ниже приведен пример использования тегов в учебнике Ansible:

name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
    tags: nginx_install

  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    tags: nginx_config

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

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

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

Ниже приведен пример использования переменных в книге воспроизведения Ansible:

name: Install and configure Nginx
hosts: webservers
become: yes

vars:
nginx_port: 80
nginx_user: www-data

tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service:
    name: nginx
    state: restarted

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

5. Тестирование игровых книг

Тестирование сценариев Ansible - это лучшая практика, которая поможет выявить ошибки и убедиться в том, что сценарии работают так, как ожидалось. Одним из популярных инструментов для тестирования сценариев Ansible является Molecule.

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

Вот пример использования Molecule для тестирования роли Ansible:

molecule init role myrole
cd myrole
molecule test

Заключение

В этой статье мы познакомились с Ansible - мощным инструментом автоматизации, который поможет вам управлять сложной ИТ-инфраструктурой. Мы рассмотрели основные понятия Ansible, включая инвентаризацию, плейбуки, модули и роли.

Мы также обсудили лучшие практики использования Ansible, включая использование контроля версий, организацию игровых книг с помощью ролей, использование тегов и переменных, а также тестирование игровых книг.

Если вы только начинаете работать с Ansible, мы рекомендуем вам начать с экспериментов с простыми учебными книгами и постепенно наращивать свои навыки и знания. С практикой вы сможете с легкостью автоматизировать даже самые сложные инфраструктурные задачи!