УДК 004.4'234Ansible
ББК 32.972.1
М15
М15 Запускаем Ansible / пер. с анг. Е. В. Филонова, А. Н. Киселева. – М.: ДМК
Пресс, 2018. – 382 с.: ил.
Хохштейн Л., Мозер Р.
ISBN 978-5-97060-513-4
Книга рассказывает о системе управления конфигурациями Ansible с множеством
примеров продуктивной работы. Она минималистична, не требует установки программного
обеспечения на узлах, и легка в освоении. Вы узнаете, как написать скрипт
управления конфигурациями, установить контроль над удаленными серверами,
а также задействовать мощный функционал встроенных модулей. Рассмотрено
чем Ansible отличается от других систем управления конфигурациями, приведены
примеры развертывания на различных облачных платформах.
Издание будет полезно разработчикам и системным администраторам, принимающим
решения о выборе способов автоматизации.
УДК 004.4'234Ansible
ББК 32.972.1
2nd
Copyright Authorized Russian translation of the English edition of Ansible: Up and Running,
Edition, ISBN 9781491979808 © 2017 Lorin Hochstein, Rene Moser.
This translation is published and sold by permission of O'Reilly Media, Inc., which owns or
controls all rights to publish and sell the same.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
ISBN 978-1-491-97980-8 (анг.)
ISBN 978-5-97060-513-4 (рус.) © Оформление, издание, перевод, ДМК Пресс, 2018
Copyright © 2017 O’Reilly Media, Inc.
Стр.5
Содержание
Предисловие ........................................................................................................16
Предисловие ко второму изданию ....................................................................18
Предисловие к первому изданию ......................................................................20
Глава 1. Введение.................................................................................................23
Примечание о версиях .........................................................................................24
Ansible: область применения ...............................................................................24
Как работает Ansible ............................................................................................25
Какие преимущества дает Ansible? .....................................................................26
Простота синтаксиса ........................................................................................27
Отсутствие необходимости установки на удаленных хостах ........................27
Основан на технологии принудительной настройки ....................................27
Управление небольшим числом серверов ......................................................28
Встроенные модули ..........................................................................................28
Очень тонкий слой абстракции .......................................................................29
Не слишком ли проста система Ansible? ............................................................30
Что я должен знать? ..............................................................................................31
О чем не рассказывается в этой книге ................................................................31
Установка Ansible ..................................................................................................32
Подготовка сервера для экспериментов .............................................................33
Использование Vagrant для подготовки сервера ............................................33
Передача информации о сервере в Ansible ....................................................36
Упрощение задачи с помощью файла ansible.cfg ...........................................37
Что дальше ............................................................................................................40
Глава 2. Сценарии: начало ..................................................................................41
Подготовка ............................................................................................................41
Очень простой сценарий......................................................................................42
Файл конфигурации Nginx ...............................................................................44
Создание начальной страницы .......................................................................44
Создание группы веб-серверов ......................................................................45
Запуск сценария....................................................................................................45
Сценарии пишутся на YAML ................................................................................47
Начало файла ....................................................................................................47
Комментарии ....................................................................................................47
Стр.6
6 Содержание
Строки ...............................................................................................................47
Булевы выражения ...........................................................................................47
Списки ...............................................................................................................48
Словари .............................................................................................................48
Объединение строк...........................................................................................49
Структура сценария ..............................................................................................49
Операции ..........................................................................................................50
Задачи ................................................................................................................52
Модули ...............................................................................................................53
Резюме ...............................................................................................................54
Есть изменения? Отслеживание состояния хоста ..............................................54
Становимся знатоками: поддержка TLS ............................................................55
Создание сертификата TLS ..............................................................................56
Переменные ......................................................................................................56
Создание шаблона с конфигурацией Nginx ....................................................58
Обработчики .....................................................................................................59
Запуск сценария ...............................................................................................60
Глава 3. Реестр: описание серверов ..................................................................63
Файл реестра ........................................................................................................63
Вводная часть: несколько машин Vagrant ..........................................................64
Поведенческие параметры хостов в реестре ......................................................67
ansible_connection .............................................................................................67
ansible_shell_type ...............................................................................................67
ansible_python_interpreter ................................................................................68
ansible_*_interpreter ..........................................................................................68
Переопределение поведенческих параметров по умолчанию .....................68
Группы, группы и еще раз группы .......................................................................68
Пример: развертывание приложения Django .................................................70
Псевдонимы и порты .......................................................................................72
Группировка групп ...........................................................................................72
Имена хостов с номерами (домашние питомцы и стадо) .............................72
Переменные хостов и групп: внутренняя сторона реестра ...............................73
Переменные хостов и групп: создание собственных файлов ...........................75
Динамический реестр ..........................................................................................76
Интерфейс сценария динамического реестра ....................................................77
Написание сценария динамического реестра ................................................78
Предопределенные сценарии реестра ............................................................81
Деление реестра на несколько файлов ................................................................82
Добавление элементов во время выполнения с помощью add_host
и group_by ..............................................................................................................82
add_host .............................................................................................................82
group_by .............................................................................................................83
Стр.7
Содержание 7
Глава 4. Переменные и факты ............................................................................85
Определение переменных в сценариях ..............................................................85
Вывод значений переменных ..............................................................................86
Регистрация переменных ....................................................................................86
Факты .....................................................................................................................89
Просмотр всех фактов, доступных для сервера ..............................................90
Вывод подмножества фактов ...........................................................................91
Любой модуль может возвращать факты ........................................................92
Локальные факты .............................................................................................93
Использование модуля set_fact для задания новой переменной ......................94
Встроенные переменные .....................................................................................94
hostvars ..............................................................................................................95
inventory_hostname ...........................................................................................95
groups .................................................................................................................96
Глава 5. Введение в Mezzanine: тестовое приложение ...................................99
Почему сложно развертывать приложения в промышленном окружении ......99
База данных PostgreSQL .................................................................................103
Сервер приложений Gunicorn ........................................................................103
Веб-сервер Nginx ............................................................................................104
Диспетчер процессов Supervisor ...................................................................105
Глава 6. Развертывание Mezzanine с помощью Ansible ................................106
Вывод списка задач в сценарии ........................................................................106
Организация устанавливаемых файлов ...........................................................107
Переменные и скрытые переменные................................................................108
Использование цикла (with_items) для установки большого
количества пакетов ............................................................................................109
Добавление выражения become в задачу ..........................................................111
Обновление кэша диспетчера пакетов apt .......................................................111
Извлечение проекта из репозитория Git .........................................................113
Установка Mezzanine и других пакетов в virtualenv .........................................115
Короткое отступление: составные аргументы задач .......................................117
Настройка базы данных .....................................................................................120
Создание файла local_settings.py из шаблона ...................................................121
Выполнение команд django-manage .................................................................124
Запуск своих сценариев на Python в контексте приложения ..........................125
Настройка конфигурационных файлов служб .............................................127
Установка переменных из командной строки....................................................96
Приоритет .............................................................................................................97
Активация конфигурации Nginx .......................................................................130
Установка сертификатов TLS .........................................................................130
Установка задания cron для Twitter ...................................................................131
Стр.8
8 Содержание
Сценарий целиком .............................................................................................132
Запуск сценария на машине Vagrant ................................................................136
Устранение проблем ...........................................................................................136
Не получается извлечь файлы из репозитория Git .....................................136
Недоступен хост с адресом 192.168.33.10.xip.io ...........................................137
Bad Request (400) .............................................................................................137
Установка Mezzanine на нескольких машинах .................................................137
Глава 7. Роли: масштабирование сценария ....................................................138
Базовая структура роли ......................................................................................138
Примеры ролей: database и mezzanine ..............................................................139
Использование ролей в сценариях ....................................................................139
Предварительные и заключительные задачи ...................................................140
Роль database для развертывания базы данных ...............................................141
Роль mezzanine для развертывания Mezzanine ................................................143
Создание файлов и директорий ролей с помощью ansible-galaxy ..................148
Зависимые роли ..................................................................................................148
Ansible Galaxy ......................................................................................................149
Веб-интерфейс ................................................................................................149
Интерфейс командной строки .......................................................................150
Добавление собственной роли.......................................................................151
Глава 8. Сложные сценарии ..............................................................................152
Команды changed_when и failed_when ...............................................................152
Фильтры ..............................................................................................................155
Фильтр default .................................................................................................156
Фильтры для зарегистрированных переменных .........................................156
Фильтры для путей к файлам ........................................................................156
Создание собственного фильтра ...................................................................157
Подстановки ........................................................................................................158
file ....................................................................................................................159
pipe...................................................................................................................160
env ....................................................................................................................160
password ...........................................................................................................160
template ...........................................................................................................161
csvfile ...............................................................................................................161
dnstxt ..............................................................................................................162
redis_kv .............................................................................................................163
etcd ...................................................................................................................164
Написание собственного плагина .................................................................164
Сложные циклы ..................................................................................................164
with_lines .........................................................................................................165
with_fileglob .....................................................................................................165
Стр.9
Содержание 9
with_dict ...........................................................................................................166
Циклические конструкции как плагины подстановок ................................167
Управление циклами ..........................................................................................167
Выбор имени переменной цикла ..................................................................167
Управление выводом ......................................................................................168
Подключение ......................................................................................................169
Динамическое подключение .........................................................................170
Подключение ролей ........................................................................................171
Блоки ...................................................................................................................172
Обработка ошибок с помощью блоков ..............................................................172
Шифрование конфиденциальных данных при помощи Vault .......................175
Глава 9. Управление хостами, задачами и обработчиками ..........................178
Шаблоны для выбора хостов ..............................................................................178
Ограничение обслуживаемых хостов ................................................................179
Запуск задачи на управляющей машине ..........................................................179
Запуск задачи на сторонней машине ................................................................180
Последовательное выполнение задачи на хостах по одному..........................180
Пакетная обработка хостов ................................................................................182
Однократный запуск .........................................................................................183
Стратегии выполнения ......................................................................................183
linear ................................................................................................................184
free ...................................................................................................................185
Улучшенные обработчики..................................................................................186
Обработчики в pre_tasks и post_tasks ............................................................186
Принудительный запуск обработчиков ........................................................187
Выполнение обработчиков по событиям......................................................189
Сбор фактов вручную .........................................................................................195
Получение IP-адреса хоста ................................................................................195
Глава 10. Плагины обратного вызова ..............................................................197
Плагины стандартного вывода ..........................................................................197
actionable .........................................................................................................198
debug ................................................................................................................198
dense ................................................................................................................199
json ...................................................................................................................199
minimal ............................................................................................................200
oneline .............................................................................................................200
selective ............................................................................................................200
skippy ...............................................................................................................200
Другие плагины ..................................................................................................201
foreman ............................................................................................................201
hipchat .............................................................................................................202
Стр.10
10 Содержание
jabber ................................................................................................................202
junit ..................................................................................................................202
log_plays ...........................................................................................................203
logentries .........................................................................................................203
logstash ............................................................................................................203
mail ..................................................................................................................204
osx_say .............................................................................................................204
profile_tasks .....................................................................................................204
slack..................................................................................................................205
timer .....................................................................................................................205
Глава 11. Ускорение работы Ansible ................................................................206
Мультиплексирование SSH и ControlPersist .....................................................206
Включение мультиплексирования SSH вручную .........................................207
Параметры мультиплексирования SSH в Ansible .........................................208
Конвейерный режим ..........................................................................................209
Включение конвейерного режима ................................................................210
Настройка хостов для поддержки конвейерного режима ...........................210
Кэширование фактов .........................................................................................211
Кэширование фактов в файлах JSON ............................................................213
Кэширование фактов в Redis .........................................................................213
Кэширование фактов в Memcached ...............................................................214
Параллелизм .......................................................................................................214
Асинхронное выполнение задач с помощью Async .........................................215
Глава 12. Собственные модули .........................................................................217
Пример: проверка доступности удаленного сервера .......................................217
Использование модуля script вместо написания своего модуля .....................217
Где хранить свои модули ....................................................................................218
Как Ansible вызывает модули ...........................................................................218
Генерация автономного сценария на Python с аргументами
(только модули на Python) .............................................................................219
Копирование модуля на хост .........................................................................219
Создание файла с аргументами на хосте (для модулей
не на языке Python) ........................................................................................219
Вызов модуля ..................................................................................................219
Ожидаемый вывод ..............................................................................................220
Ожидаемые выходные переменные .............................................................220
Реализация модулей на Python .........................................................................221
Анализ аргументов .........................................................................................222
Доступ к параметрам .....................................................................................223
Импортирование вспомогательного класса AnsibleModule ........................223
Свойства аргументов ......................................................................................224
Стр.11
Содержание 11
AnsibleModule: параметры метода инициализатора ...................................226
Возврат признака успешного завершения или неудачи .............................229
Вызов внешних команд ..................................................................................229
Режим проверки (пробный прогон) ..............................................................230
Документирование модуля ................................................................................231
Отладка модуля ...................................................................................................233
Создание модуля на Bash ..................................................................................234
Альтернативное местоположение интерпретатора Bash ................................235
Примеры модулей ..............................................................................................236
Глава 13. Vagrant ................................................................................................237
Полезные параметры настройки Vagrant .........................................................237
Перенаправление портов и приватные IP-адреса ......................................237
Перенаправление агента ................................................................................239
Сценарий наполнения Ansible ..........................................................................239
Когда выполняется сценарий наполнения .......................................................239
Реестр, генерируемый системой Vagrant .........................................................240
Наполнение нескольких машин одновременно ...............................................241
Определение групп .............................................................................................242
Локальные сценарии наполнения .....................................................................243
Глава 14. Amazon EC2 ........................................................................................244
Терминология .....................................................................................................246
Экземпляр .......................................................................................................246
Образ машины Amazon ..................................................................................246
Теги ..................................................................................................................246
Учетные данные пользователя ..........................................................................247
Переменные окружения .................................................................................247
Файлы конфигурации.....................................................................................248
Необходимое условие: библиотека Python Boto ...............................................248
Динамическая инвентаризация ........................................................................249
Кэширование реестра .....................................................................................251
Другие параметры настройки .......................................................................251
Автоматические группы ................................................................................251
Определение динамических групп с помощью тегов ......................................252
Присваивание тегов имеющимся ресурсам .................................................252
Создание более точных названий групп .......................................................253
EC2 Virtual Private Cloud (VPC) и EC2 Classic ....................................................254
Конфигурирование ansible.cfg для использования с ec2 .................................255
Запуск новых экземпляров ................................................................................255
Пары ключей EC2 ................................................................................................257
Создание нового ключа ..................................................................................257
Выгрузка существующего ключа ...................................................................258
Стр.12
12 Содержание
Группы безопасности .........................................................................................258
Разрешенные IP-адреса .................................................................................260
Порты групп безопасности ............................................................................260
Получение новейшего AMI ................................................................................261
Добавление нового экземпляра в группу .........................................................262
Ожидание запуска сервера.................................................................................264
Создание экземпляров идемпотентным способом .........................................265
Подведение итогов .............................................................................................265
Создание виртуального приватного облака .....................................................267
Динамическая инвентаризация и VPC .........................................................272
Создание AMI ......................................................................................................272
Использование модуля ec2_ami .....................................................................272
Использование Packer ....................................................................................273
Другие модули ....................................................................................................277
Глава 15. Docker .................................................................................................278
Объединение Docker и Ansible ...........................................................................279
Жизненный цикл приложения Docker .............................................................280
Пример применения: Ghost ...............................................................................281
Подключение к демону Docker ..........................................................................281
Запуск контейнера на локальной машине ........................................................281
Создание образа из Dockerfile ............................................................................282
Управление несколькими контейнерами на локальной машине ...................284
Отправка образа в реестр Docker .......................................................................285
Запрос информации о локальном образе .........................................................287
Развертывание приложения в контейнере Docker ...........................................288
Postgres ............................................................................................................288
Веб-сервер .......................................................................................................289
Веб-сервер: Ghost ...........................................................................................290
Веб-сервер: Nginx ...........................................................................................291
Удаление контейнеров ...................................................................................291
Прямое подключение к контейнерам ...........................................................292
Контейнеры Ansible ............................................................................................293
Контейнер Conductor ......................................................................................293
Создание образов Docker ...............................................................................294
Настройка container.yml .....................................................................................295
Запуск на локальной машине ........................................................................297
Публикация образов в реестрах ....................................................................298
Развертывание контейнеров в промышленном окружении .......................300
Глава 16. Отладка сценариев Ansible ..............................................................301
Информативные сообщения об ошибках .........................................................301
Отладка ошибок с SSH-подключением .............................................................302
Стр.13
Содержание 13
Модуль debug ......................................................................................................303
Интерактивный отладчик сценариев ................................................................304
Модуль assert .......................................................................................................305
Проверка сценария перед запуском ..................................................................307
Проверка синтаксиса ......................................................................................307
Список хостов .................................................................................................307
Список задач ...................................................................................................308
Проверка режима ............................................................................................308
Вывод изменений в файлах ...........................................................................308
Выбор задач для запуска ....................................................................................309
Пошаговое выполнение .................................................................................309
Выполнение с указанной задачи ...................................................................309
Теги ..................................................................................................................310
Глава 17. Управление хостами Windows ..........................................................311
Подключение к Windows ....................................................................................311
PowerShell ............................................................................................................312
Модули поддержки Windows..............................................................................314
Наш первый сценарий........................................................................................315
Обновление Windows .........................................................................................316
Добавление локальных пользователей .............................................................317
Итоги ...................................................................................................................320
Глава 18. Ansible для сетевых устройств ........................................................321
Статус сетевых модулей .....................................................................................322
Список поддерживаемых производителей сетевого оборудования ...............322
Подготовка сетевого устройства ........................................................................322
Настройка аутентификации через SSH .........................................................323
Как работают модули ..........................................................................................325
Наш первый сценарий........................................................................................326
Реестр и переменные для сетевых модулей .....................................................327
Локальное подключение ................................................................................328
Подключение к хосту ......................................................................................329
Переменные для аутентификации ................................................................329
Сохранение конфигурации ............................................................................330
Использование конфигураций из файлов ........................................................331
Шаблоны, шаблоны, шаблоны ...........................................................................334
Сбор фактов ........................................................................................................336
Итоги ...................................................................................................................338
Глава 19. Ansible Tower: Ansible для предприятий ........................................339
Модели подписки ...............................................................................................340
Пробная версия Ansible Tower .......................................................................340
Стр.14
14 Содержание
Какие задачи решает Ansible Tower ...................................................................341
Управление доступом .....................................................................................341
Проекты ...........................................................................................................342
Управление инвентаризацией .......................................................................342
Запуск заданий из шаблонов .........................................................................344
RESTful API ..........................................................................................................346
Интерфейс командной строки Ansible Tower ...................................................347
Установка ........................................................................................................347
Создание пользователя ..................................................................................348
Запуск задания ................................................................................................350
Послесловие ........................................................................................................351
Приложение А. SSH ............................................................................................352
«Родной» SSH ......................................................................................................352
SSH-агент.............................................................................................................352
Запуск ssh-agent ..................................................................................................353
macOS ..............................................................................................................353
Linux ................................................................................................................354
Agent Forwarding .................................................................................................354
Команда sudo и перенаправление агента .....................................................356
Ключи хоста ........................................................................................................357
Приложение В. Использование ролей IAM для учетных данных EC2 .........361
Консоль управления AWS ..................................................................................361
Командная строка ...............................................................................................362
Глоссарий ............................................................................................................365
Библиография ....................................................................................................368
Предметный указатель .....................................................................................369
Об авторах ..........................................................................................................380
Колофон ..............................................................................................................381
Стр.15