Skip to content

Ansible

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

Особенности Ansible:

  • Декларативный язык: Ansible использует YAML для описания состояния системы. Вы описываете желаемое состояние системы, и Ansible приводит реальное состояние к описанному.
  • Без агентов: Ansible работает по SSH-протоколу и не требует установки агентов на удаленных системах. Это делает его более легким для развертывания.
  • Инфраструктура как код: Ansible позволяет описывать и управлять инфраструктурой как кодом. Это облегчает повторное использование и обеспечивает версионирование конфигурации.
  • Ansible условно идемпонентен. Идемпотентность - это ключевой концепт в области Infrastructure as Code (IAAC), который означает, что одно и то же действие можно выполнять несколько раз, но результат останется таким же, как если бы оно было выполнено только один раз. В контексте IAAC это означает, что применение одних и тех же конфигурационных изменений на инфраструктуре не приведет к дополнительным или нежелательным эффектам, если действие уже было выполнено ранее.
  • Легко расширяем – любой дополнительный функционал можно реализовать на bash/python

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

Основные компоненты архитектуры Ansible:

  • Управляющий узел (Control Node): Это машина, на которой установлен Ansible и с которой вы управляете всей автоматизацией. Управляющий узел содержит инвентарь (inventory) - список целевых узлов, которые вы хотите управлять, а также плейбуки и роли, которые определяют задачи и действия, которые должны быть выполнены на целевых узлах.
  • Целевые узлы (Managed Nodes): Это целевые серверы или устройства, которые вы хотите автоматизировать и управлять с помощью Ansible. На целевых узлах должен быть установлен SSH-сервер (для Linux) или агент (для Windows), чтобы Ansible мог взаимодействовать с ними.
  • Инвентарь (Inventory): Это текстовый или YAML-файл, который содержит список целевых узлов, к которым Ansible должен подключаться и выполнять задачи. Инвентарь также может содержать группы хостов и переменные для настройки выполнения задач.
  • Модули (Modules): Ansible поставляется с более чем 1000 встроенными модулями, которые представляют собой инструменты для выполнения различных задач на целевых узлах. Модули Ansible выполняют конкретные действия, такие как установка программного обеспечения, настройка сервисов, управление пользователями и группами и многое другое.
  • Плейбуки (Playbooks): Плейбуки - это файлы YAML, в которых определены задачи, которые Ansible должен выполнить на целевых узлах. Плейбуки содержат список задач, модули, параметры и условия для выполнения.
  • Роли (Roles): Роли - это структурированный способ организации плейбуков и других файлов конфигурации Ansible. Они позволяют легко повторно использовать код автоматизации и создавать более организованные и модульные конфигурации.
  • Group vars (групповые переменные) - это механизм в Ansible, который позволяет задавать переменные для групп хостов в инвентаре. Они используются для определения общих переменных, которые применяются ко всем хостам в определенной группе. Групповые переменные помогают упростить управление конфигурациями и позволяют настраивать хосты в рамках определенных групп с общими параметрами.
  • Преоритеты переменных. В Ansible существует несколько источников переменных, и они имеют определенный приоритет. Это позволяет управлять настройками на разных уровнях и переопределять их при необходимости.
  • Ansible Vault – инструмент, позволяющий зашифровать переменные (AES256), скрыв чувствительные данные от общего использования.
  • Templates – инструмент, позволяющий создать кастомизированный конфигурационный файл на основе шаблона. Для шаблонизации используется Jinja
  • Facts – сбор информации об удалённом хосте, включая сетевую информацию, информацию о системе, информацию о пользователе, и прочее.
  • Collections – способ распространения контента Ansible. Включает в себя набор roles, modules, playbooks.

Как работает Ansible?

  • Весь процесс автоматизации описывается в playbook;
  • Playbook содержит информацию о том, что и где необходимо сделать;
  • То, что необходимо сделать описывается в блоке play;
  • Где необходимо выполнять play написано в inventory;
  • Play состоит из перечислений task и role;
  • Task – атомарное действие над host из inventory;
  • Конкретные действия в тасках выполняются с помощью модулей;
  • Задачи можно группировать в block;
  • Role – набор tasks вне playbook, которые выполняются для получение одного общего результата;
  • Абсолютно все сущности кастомизируются при помощи переменных;
  • Переменные playbook лучше всего хранить в group vars. Переменные можно хранить и в других местах, существует приоритезация переменных. Переменные можно шифровать при помощи vault. Переменные можно подставлять в templates для создания конфигурационных файлов.

Что входит в пакет ansible.

  • ansible – определение и запуск playbook из одного task нанаборе hosts;
  • ansible-playbook – запуск полноценного playbook;
  • ansible-vault – шифрование хранилища методом AES256;
  • ansible-galaxy – скачивание roles и collections;
  • ansible-lint – используется для проверки синтаксиса;
  • ansible-console – консоль для запуска tasks;
  • ansible-config – просмотр и управление конфигурацией ansible;
  • ansible-doc – просмотр документации plugins;
  • ansible-inventory – просмотр информации о hosts из inventory;
  • ansible-pull – скачивание playbook и запуск на localhost;
  • ansible-test – тестирование collections.

Популярные команды Ansible.

ansible commands
ansible -m ping localhost #Сделаем ping на locahost
ansible -m ping -i inventory.yml all #Сделаем ping на всех хостах из inventory
ansible -m ping -i inventory.yml <group_name> #Сделаем ping на всех хостах группы <group_name>
ansible-playbook site.yml -i inventory/test.yml #Запуск site нахостах из test
ansible-inventory -i inventory.yml --graph <group_name> #Показать хосты группы
ansible-inventory -i inventory.yml --list #Показать все переменные всех хостов из inventory
ansible-inventory -i inventory.yml --list <hostname> #Показать все переменные хоста из inventory
ansible-doc <plugin_name> #Показать документацию по плагину
ansible-doc --type connection --list #Показать список плагинов для подключения к хостам
ansible-vault create <filename> #Создать новый зашифрованные файл
ansible-vault edit <filename> #Отредактировать зашифрованный файл
ansible-vault view <filename> #Просмотреть зашифрованный файл
ansible-vault rekey <filename> #Поменять пароль у файла
ansible-vault encrypt <filename> #Зашифровать файл
ansible-vault decrypt <filename> #Расшифровать файл
ansible-playbook playbook-name.yml -i inventory-file-name.yml --ask-vault-password #Запуск плейбука с зашифрованными переменными