Краткое пособие по Ansible

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

  • Работает без агентов (нет ПО или агента, который связывает с сервером)
  • Идемпотентность (результат не зависит от количества запросов на операцию)
  • Простота и расширяемость (программа написана на Python, а для команд использует YAML).

Ниже приводим краткий Ansible tutorial, который поможет разобраться с основными понятиями и настройками программы. Более подробную информацию можно найти в Ansible documentation

Ansible установка

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

Как устанавливаем и запускаем Ansible на Ubuntu и Mac OS? Через следующие команды:

# ubuntu: sudo apt-get install ansible
#mac-OS: brew install ansible
При установке ПО и выборе управляющей машины, учтите, что запускать Ansible лучше в непосредственной близости от объектов управления. Например, если запускаете программу в облаке, выберите машину внутри этого облака. Чтобы работать с SSH протоколом, необходим SSH-ключ пользователя или пароль. Модуль Ansible authorized_key помогает добавлять или удалять авторизованные ключи учетных записей на удаленных устройствах.

Ansible настройка

Настройки можно менять с помощью конфигурационного Ansible file (ansible.cfg), но это касается не всех настроек. Стандартной конфигурации достаточно в большинстве случаев. Как получить последнюю версию программы? В момент установки найдите ini-файл ansible.cfg – он может находиться в /etc/ansible (в виде .rpmnew или другого Ansible file). 

Настройки конфигурации включают Ansible скрипты автоматизации, настройки командной строки, Ansible переменные среды, playbook, Ansible роли и др. Для интеллектуального анализа данных можно настроить Ansible cron jobs на разных серверах. В настройках по умолчанию программа подключается к удаленным устройствам от имени пользователя на главной (управляющей) машине. Чтобы добавить нового пользователя (Ansible add user), можно установить подключение пользователя в плейбук:


- name: update webservers
hosts: webservers

remote_user: admin

tasks:

- name: thing to do first in this playbook

Также есть возможность сделать это через переменные Ansible variables (в Ansible inventory):

other1.example.com ansible_connection=ssh ansible_user=myuser
other2.example.com ansible_connection=ssh ansible_user=myotheruser

или группу переменных (также в Ansible inventory):

cloud:

hosts:

cloud1: my_backup.cloud.com

cloud2: my_backup2.cloud.com

vars:

ansible_user: admin

Ansible Modules

Чтобы добавить в программу локальную функцию можно использовать Ansible Modules. Это автономные скрипты, которые могут использоваться Ansible API, командой ansible и через ansible-playbook. Например, модули Ansible AWS для работы с Amazon Web Services. Модули Ansible принимают аргументы, а информацию возвращают в Ansible через строку JSON (stdout перед выходом). Модули представляют собой определенный интерфейс и выполняются в отдельных процессах целевой системы.

Модуль Ansible Debug

Опция Ansible debug module облегчает управление задачами в программе.

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

Доступ к функциям Ansible debugger есть в контексте задачи. Можно изменить значения Ansible variables, обновить аргументы и запустить задачу с новыми данными. Debugger устраняет ошибку в реальном времени без остановки выполнения playbook.

Параметр Ansible register

В типовых сценариях Ansible пригодится набор модулей Ansible command, с помощью которых программа запускает команды на оборудовании внутри инфраструктуры. Работает Ansible command так, как будто пользователь выводит команды на консоли. Для вывода команд используются разные параметры, например, Ansible register. Это ключевое слово дает возможность создавать Ansible variables на выходе задачи. Позже, в других задачах, можно использовать уже зарегистрированные переменные (например, output).

Модуль Ansible Debug

Опция Ansible debug module облегчает управление задачами в программе. Это удобный инструмент для устранения ошибок в процессе работы. Опция позволяет редактировать playbook и отлаживать задачи в режиме реального времени. Не нужно вносить изменения в playbook и делать перезапуск, чтобы изменения сохранились. Доступ к функциям Ansible debugger есть в контексте задачи. Можно изменить значения Ansible variables, обновить аргументы и запустить задачу с новыми данными. Debugger устраняет ошибку в реальном времени без остановки выполнения playbook.

Ansible Create Directory

Действие Ansible Create Directory понадобиться для создания директорий или папок на многих этапах процессов DevOps. Хоть директории можно создавать через оболочку или командный модуль, в Ansible используется более надежный и простой способ –  file module. Чтобы создать директорию с помощью этого модуля, нужно настроить два параметра: Path и State. Path – это путь директории, а State – и есть директория (значение по умолчанию – файл). Можно настраивать доступы, но файлы внутри папки будут иметь параметры по умолчанию. Есть возможность менять доступы к директории и, соответственно, файлам внутри.

zone3000_article-DevOps Ansible-04

Совместимость Ansible Docker, Jenkins, Terraform, PostgreSQL

Программное обеспечение Ansible рассчитано на работу в паре Ansible Docker, а также с Jenkins, Terraform и PostgreSQL. Для управления контейнерами в Docker предусмотрены следующие модули:

  • docker_compose (управление контейнерами на одном докер-демоне или на Swarm)
  • docker_container (управление жизненным циклом контейнеров)
  • docker_image (работа с образами)
  • docker_image_info (анализ образов для передачи информации в playbook)
  • docker_login (аутентификация с Docker Hub или Docker registry, обновление файла Docker Engine config)
  • docker (dynamic inventory) (динамическое создание директории из доступных контейнеров)

С помощью ansible-bender можно билдить образы из Ansible playbooks. Ansible Operator запускает docker-compose file в OpenShift. 

В связке Ansible и Jenkins, с помощью Playbook, можно настроить конфигурацию Jenkins. Для этого нужно создать inventory file, который определяет список хостов и настройки аутентификации для каждого сервера. Файл может быть в одном из множества форматов, в зависимости от плагинов. Для реализации ansible-playbook в Jenkins используются два способа: shell/bash script и плагин Ansible.

С помощью Terraform и Ansible можно строить повторяющуюся инфраструктуру, что очень помогает в подходе Infrastructure as a Code. В Ansible нет плагина для Terraform, но настроить рабочую пару Terraform Ansible можно с помощью встроенных провайдеров local-exec and remote-exec. В данном случае Terraform отвечает за создание, управление и манипуляцию ресурсами инфраструктуры. Ansible – за деплой и тестирование приложения на инстансах.

Доступна поддержка Ansible PostgreSQL, которая помогает работать с базой в окружении с высокой нагрузкой. Ansible дает возможность отслеживать этапы работы с помощью все тех же Playbooks. 

Управление конфигурацией Ansible на Windows

Встроенная поддержка Windows в Ansible использует PowerShell для управления Windows непосредственно как Windows. Этот принцип напоминает базовую характеристику Ansible – работу без агентов. Встроенная поддержка Ansible Windows позволяет:

  • Собирать данные с хостов Windows 
  • Устанавливать и деинсталлировать MSI
  • Активировать и деактивировать характеристики
  • Управлять службами Windows
  • Создавать и управлять локальными пользователями и группами
  • Управлять обновлениями
  • Выполнять любые сценарии PowerShell 

Благодаря масштабируемости Ansible есть возможность писать собственные модули в PowerShell, расширяя возможности программы.

Чтобы запустить Ansible, установите программное обеспечение на главной (управляющей) машине. Объекты управления должны быть расположены вблизи центрального устройства, например, внутри облака. Для Ubuntu и Mac OS необходимо выполнить определенные команды: 

# ubuntu

sudo apt-get install ansible
#mac-OS

brew install ansible

На Windows работа выполняется через PowerShell. Для запуска откройте PowerShell в роли админа и выполните команду:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

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

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

Первоочередная задача DevOps – автоматизация процессов доставки кода, развертывания ПО и настройки серверов. Ansible используется в DevOps для автоматизации управления конфигурацией. Программа известна своей простотой и удобством работы. Работает с разными системами – Linux, MacOS, Windows, Win и другими. Поддерживает совместимость с облачными сервисами (AWS, Digital Ocean, Azure и др.). Ansible идеально подходит для реализации подхода DevOps, упрощая управление несколькими узлами с одной машины. Большая часть функций представлена в виде модулей, что упрощает написание кода и достижение целей DevOps.

Использовать Ansible однозначно стоит. Система используется для автоматизации конфигурации и развертывания приложений. В основном работает с узлами на Linux, но вполне подходит для других операционных систем. В Ansible применен декларативный язык разметки для описания конфигурации. Важное отличие Ansible от аналогов система поддерживает связь с удаленными устройствами через SSH-протокол. Почему еще стоит использовать Ansible? Работа системы построена через систему модулей для выполнения задач. Модули лежат в основе масштабирования Ansible и расширения функционала. Благодаря этому программа является популярной системой оркестрации.

Ansible – относительно новый игрок в инструментарии DevOps, который успел завоевать расположение как системных администраторов, так и разработчиков. В сообществе систему ценят за простоту, легкость в изучении и широкие возможности. Изучать Ansible точно стоит, тем более, это довольно просто. Говорят, что разобраться с Ansible и запустить первый playbook можно за один день. Все это займет несколько несложных шагов (доступная документация Ansible вам в помощь), и вот вы уже запускаете первый мини-сервер. А еще Ansible написан на Python, что в разы облегчает его изучение.

Запустить Ansible локально можно с помощью функции playbook. Вот как можно запустить Ansible на локальном хосте:

# playbook.yml:

---

- name: "Ansible playbook example"

  hosts: 127.0.0.1

  connection: local

  tasks:

    - name: "Check out a Git repository on the Ansible host"

      git:

        repo: git://github.com/path/to/repo.git

        dest: /local/path

Вот как запускать программу из command line:


$ ansible-playbook --connection=local 127.0.0.1, playbook.yml

Обратите внимание на запятую после 127.0.0.1 – она нужна, чтобы адрес не воспринимался как file name, что вызовет ошибку.

Playbook в Ansible используется для выполнения действий, адресованных к другим устройствам. Команда ansible-playbook запускает sample-playbook. yml файл. Необязательный аргумент -i нужен для того, чтобы показать путь к inventory file. Если опция -i не используется и не указана папка ansible.cfg, система автоматически использует /etc/ansible/hosts. Также в документации Ansible указан следующий способ запуска playbook:

ansible-playbook -i vyos.example.net, -u ansible -k -e ansible_network_os=vyos first_playbook.yml.

Чтобы провести тестирование подключения и узнать, запущен ли Ansible, можно использовать команду ansible all -m ping. Это поможет проверить возможность запуска команд и playbooks на узлах. Ping-модуль проверяет, существуют ли учетные записи пользователей, которые могут подключаться к узлам. Эти данные определены в inventory file. Также команда поможет проверить, готов ли Python запускать сценарии на удаленном сервере. Если получаете ответ pong, значит, система готова работать в нормальном режиме и выполнять команды.

error: Контент защищен.