|
|||||||
Создание плейбука Ansible
Время создания: 27.11.2019 10:30
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1574839834ai3jzpr7io/text.html на raw.github.com
|
|||||||
|
|||||||
Данное руководство поможет подготовить автоматизированную оркестровку сервера с помощью инструмента конфигурационного управления Ansible. Вы ознакомитесь с основными терминами, синтаксисом и функциями Ansible. В результате вы получите полностью автоматизированное простое развёртывание, которое состоит из таких этапов:
Примечание: Данное руководство сосредоточено на создании плейбуков – сценариев Ansible для автоматизации настройки. Больше о терминологии Ansible можно прочитать здесь . Внимение! Все примеры конфигураций в этой статье имеют нарушенную структуру отступов. При воспроизведении примеров нужно учитывать синтаксис YAML. Начало работыПрежде чем приступить к разработке плейбука, нужно ознакомиться с основными терминами Ansible. Терминология Ansible
Оркестровка Ansible пишется на простом языке сериализации данных YAML. ЗадачиКаждая задача определяет один шаг оркестровки. Как правило, в задачах используются модули или простые команды. Задача выглядит так: - name: This is a task apt: pkg=vim state=latest Элемент name опционален, но его рекомендуется использовать, так как он отображает в выводе имя задачи, которая была выполнена. Элемент apt – это встроенный модуль Ansible, который управляет пакетами в Debian-подобных дистрибутивах. Эта задача задаёт пакету vim состояние latest, что заставит менеджер пакетов установить этот пакет в случае, если он еще не установлен. Формат плейбуковПлейбуки – точка входа для оркестровки Ansible. Они содержат данные о системах, в которых будет происходить оркестровка, а также все директивы и команды, которые нужно выполнить. Ниже можно найти пример простого плейбука, который обновляет индекс пакетов и устанавливает vim: --- - hosts: all become: true tasks: - name: Update apt-cache apt: update_cache=yes - name: Install Vim apt: name=vim state=latest YAML сериализует структуры данных, потому очень важно проследить, чтобы все пробелы и абзацы были на месте. Написание плейбукаПеременныеAnsible задаёт переменные несколькими способами. Самый простой из них – использование раздела vars самого плейбука. Ниже показано, как определить переменную package внутри задачи: --- - hosts: all become: true vars: package: vim tasks: - name: Install Package apt: name={{ package }} state=latest Переменная package доступна из любой точки оркестровки (даже в добавленных файлах и шаблонах). Использование цикловЦиклы, как правило, используются для повторения задачи с помощью различных входных значений. То есть, вместо того чтобы создавать 10 задач для установки 10 различных пакетов, вы можете создать одну задачу и использовать цикл, чтобы повторить задачу для установки любых пакетов, которые нужно установить. Чтобы создать цикл в задаче, добавьте опцию with_items и массив значений. Доступ к контенту можно получить с помощью переменной item. Например: - name: Install Packages apt: name={{ item }} state=latest with_items: - vim - git - curl Также можно использовать массив переменных, чтобы определить компоненты: --- - hosts: all sudo: true vars: packages: [ 'vim', 'git', 'curl' ]
tasks: - name: Install Package apt: name={{ item }} state=latest with_items: packages Использование условных выраженийУсловные выражения можно использовать для динамической настройки (например, когда на основе переменной или вывода команды нужно решить, следует ли выполнять задачу). Ниже показан пример задачи, которая будет выполнена только в системах на основе Debian. - name: Shutdown Debian Based Systems command: /sbin/shutdown -t now when: ansible_os_family == "Debian" Условное выражение when принимает в качестве аргумента выражение, которое нужно оценить. Задача будет выполнена только в том случае, если выражение истинно (true). Условные выражения часто используются в IT-автоматизации, если выполнение задачи зависит от вывода команды. В Ansible условные выражения внедряются путем добавления переменной для хранения результатов выполненной команды и проверки этой переменной в следующей задаче. Вы можете проверить состояние выхода команды (успешно она выполнена или нет) и наличие в нем конкретного фрагмента (хотя для этого может потребоваться использование регулярных выражений). В приведённом ниже примере показаны две условные задачи, чьё выполнение зависит от вывода команды php –v. Данный код проверяет состояние вывода команды, поскольку она не будет выполнена в случае, если PHP не установлен на этот сервер. Раздел задачи ignore_errors позволяет продолжить оркестровку, даже если команду выполнить не удалось. - name: Check if PHP is installed register: php_installed command: php -v ignore_errors: true - name: This task is only executed if PHP is installed debug: var=php_install when: php_installed|success - name: This task is only executed if PHP is NOT installed debug: msg='PHP is NOT installed' when: php_installed|failed Модуль debug позволяет просмотреть содержимое переменных или отладочные сообщения. Он может вывести строку (при использовании аргумента msg) или содержимое переменной (с помощью аргумента var). Использование шаблоновШаблоны обычно используются в конфигурационных файлах и позволяют добавлять переменные и другие функции, которые делают эти файлы более универсальными и обеспечивают их повторное выполнение. Ansible использует механизм шаблонов Jinja2 . Ниже приведен пример шаблона для создания виртуального хоста Apache, в котором используется переменная для создания корневого каталога этого хоста: <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot {{ doc_root }} <Directory {{ doc_root }}> AllowOverride All Require all granted </Directory> </VirtualHost> Встроенный модуль template позволяет применить шаблон задачи. Если назвать файл шаблона в примере vhost.tpl и поместить его в один каталог с плейбуком, такой шаблон заменит виртуальный хост Apache по умолчанию: - name: Change default Apache virtual host template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf Определение обработчиковОбработчики изменяют состояние сервиса (например, останавливают или перезапускают его). Обработчики очень похожи на задачи, которые выполняются один раз и в том же порядке, в каком они определены; однако они выполняются только в том случае, если ранее в задаче срабатывает директива notify. Обработчики обычно определяются как массив в разделе плейбука handlers. Рассмотрим предыдущий пример шаблона, который предназначен для создания виртуального хоста Apache. Чтобы обеспечить перезагрузку Apache после изменения виртуального хоста, нужно создать обработчик для этого сервиса. Это делается так: handlers: - name: restart apache service: name=apache2 state=restarted - name: other handler service: name=other state=restarted Директива name является уникальным идентификатором обработчика. Чтобы извлечь обработчик из задачи, используйте опцию notify. - name: Change default Apache virtual host template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf notify: restart apache Пример плейбукаТеперь можно собрать весь код данного руководства в один плейбук, который будет автоматизировать установку Apache в Ubuntu 14.04. Примечание: Дополненный вариант плейбука можно найти на Github . Также эта папка содержит файл Vagrant, который позволяет протестировать плейбук на упрощённой установке с помощью виртуальной машины Vagrant . --- - hosts: all become: true vars: doc_root: /var/www/example tasks: - name: Update apt apt: update_cache=yes - name: Install Apache apt: name=apache2 state=latest - name: Create custom document root file: path={{ doc_root }} state=directory owner=www-data group=www-data - name: Set up HTML file copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644 - name: Set up Apache virtual host file template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf notify: restart apache handlers: - name: restart apache service: name=apache2 state=restarted
ЗаключениеAnsible – это инструмент IT-автоматизации, который использует для оркестровки сценарии YAML. Он предоставляет огромное количество встроенных модулей, которые могут самостоятельно выполнять некоторые задачи (устанавливать пакеты, обрабатывать шаблоны и т.д.). Он упрощает работу с инфраструктурой, поскольку сам использует очень простой язык. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|