Введение
Ansible – это современный инструмент управления конфигурацией, который облегчает задачу настройки и поддержки удаленных серверов.
Этот шпаргалка-подобный гид предоставляет быстрый справочник по командам и практикам, часто используемым при работе с Ansible. Для обзора Ansible и инструкций по установке и настройке см. наш руководство по Как установить и настроить Ansible на Ubuntu 20.04.
Как использовать этот гид:
- Этот гид выполнен в формате шпаргалки с самостоятельными фрагментами командной строки.
- Переходите к любому разделу, который актуален для задачи, которую вы пытаетесь выполнить.
- Когда вы видите
выделенный текст
в командах этого руководства, имейте в виду, что этот текст должен ссылаться на хосты, имена пользователей и IP-адреса из вашего собственного инвентаря.
Глоссарий Ansible
В этом руководстве часто используются следующие специфические термины Ansible:
- Управляющая Машина / Узел: система, где установлен и настроен Ansible для подключения и выполнения команд на узлах.
- Узел: сервер, управляемый Ansible.
- Файл инвентаря: файл, содержащий информацию о серверах, которыми управляет Ansible, обычно находится по пути
/etc/ansible/hosts
. - Плейбук: файл, содержащий серию задач для выполнения на удаленном сервере.
- Роль: набор плейбуков и других файлов, которые относятся к определенной цели, такой как установка веб-сервера.
- Игра: полный запуск Ansible. У игры может быть несколько плейбуков и ролей, включенных из одного плейбука, который выступает в качестве точки входа.
Если вам нужен пример использования этих команд на практике, ознакомьтесь с нашим руководством по Как использовать Ansible для автоматизации начальной настройки сервера на Ubuntu 20.04. Вам понадобится как минимум один удаленный сервер для использования в качестве узла.
Тестирование подключения к узлам
Чтобы проверить, что Ansible может подключаться и выполнять команды и плейбуки на ваших узлах, вы можете использовать следующую команду:
Модуль ping
проверит, имеете ли вы действительные учетные данные для подключения к узлам, определенным в вашем файле инвентаря, а также проверит, может ли Ansible выполнять сценарии на Python на удаленном сервере. Ответ pong означает, что Ansible готов к выполнению команд и плейбуков на этом узле.
Подключение в качестве другого пользователя
По умолчанию Ansible пытается подключиться к узлам от имени текущего пользователя системы, используя соответствующую пару ключей SSH. Чтобы подключиться в качестве другого пользователя, добавьте к команде флаг -u
и имя желаемого пользователя:
То же самое действительно и для ansible-playbook
:
Использование пользовательского ключа SSH
Если вы используете пользовательский ключ SSH для подключения к удаленным серверам, вы можете указать его при выполнении команды с помощью опции --private-key
:
Эта опция также действительна для ansible-playbook
:
Использование аутентификации на основе пароля
Если вам необходимо использовать аутентификацию на основе пароля для подключения к узлам, вы должны добавить опцию --ask-pass
к вашей команде Ansible.
Это заставит Ansible запросить у вас пароль пользователя на удаленном сервере, от имени которого вы пытаетесь подключиться:
Этот вариант также действителен для ansible-playbook
:
Предоставление пароля sudo
Если удаленному пользователю необходимо предоставить пароль для выполнения команд sudo
, вы можете включить опцию --ask-become-pass
в вашу команду Ansible. Это попросит вас предоставить пароль для sudo удаленного пользователя:
Этот вариант также действителен для ansible-playbook
:
Использование пользовательского файла инвентаря
Файл инвентаря по умолчанию обычно находится в /etc/ansible/hosts
, но вы также можете использовать опцию -i
для указания пользовательских файлов инвентаря при запуске команд и playbooks Ansible. Ansible также поддерживает скрипты инвентаря для создания динамических файлов инвентаря, когда ваш инвентарь изменяется, с частым созданием и уничтожением серверов. Пользовательские файлы инвентаря полезны для настройки инвентарей для каждого проекта, которые можно включить в системы контроля версий, такие как Git:
Та же опция действительна для ansible-playbook
:
Запуск временных команд
Чтобы выполнить команду на узле, используйте опцию -а
, за которой следует команда, которую вы хотите выполнить, в кавычках.
Это выполнит uname -a
на всех узлах в вашем инвентаре:
Также можно выполнять модули Ansible с опцией -м
. Следующая команда установит пакет vim
на server1
из вашего инвентаря:
Перед внесением изменений в ваши узлы вы можете провести пробный запуск, чтобы предсказать, как сервера будут затронуты вашей командой. Это можно сделать, включив опцию --проверка
:
Запуск плейбуков
Чтобы запустить плейбук и выполнить все в нем определенные задачи, используйте команду ansible-playbook
:
Чтобы перезаписать опцию hosts
по умолчанию в плейбуке и ограничить выполнение определенной группой или хостом, включите опцию -l
в вашей команде:
Получение информации о пьесе
Опция --list-tasks
используется для перечисления всех задач, которые будут выполнены в рамках пьесы без внесения изменений на удаленных серверах:
Точно так же можно перечислить все хосты, которые будут затронуты пьесой, не запуская при этом задачи на удаленных серверах:
Вы можете использовать теги, чтобы ограничить выполнение пьесы. Чтобы перечислить все доступные теги в пьесе, используйте опцию --list-tags
:
Управление выполнением плейбука
Вы можете использовать опцию --start-at-task
, чтобы определить новую точку входа для вашего плейбука. Затем Ansible пропустит все, что идет перед указанной задачей, и выполнит оставшуюся часть пьесы с этой точки:
Чтобы выполнить только задачи, связанные с определенными тегами, можно использовать опцию --tags
. Например, если вы хотите выполнить только задачи с тегами nginx
или mysql
, вы можете использовать:
Если вы хотите пропустить все задачи, которые находятся под определенными тегами, используйте --skip-tags
. Следующая команда выполнит myplaybook.yml
, пропуская все задачи, помеченные как mysql
:
Использование Ansible Vault для хранения конфиденциальных данных
Если ваши плейбуки Ansible работают с конфиденциальными данными, такими как пароли, ключи API и учетные данные, важно сохранить эти данные в безопасности, используя механизм шифрования. Ansible предоставляет ansible-vault
для шифрования файлов и переменных.
Хотя можно зашифровать любой файл данных Ansible, а также двоичные файлы, чаще всего используется ansible-vault
для шифрования файлов переменных, содержащих конфиденциальные данные. После шифрования файла с помощью этого инструмента вы сможете выполнять, редактировать или просматривать его содержимое, указав соответствующий пароль, определенный при первоначальном шифровании файла.
Создание нового зашифрованного файла
Вы можете создать новый зашифрованный файл Ansible с помощью:
Эта команда выполнит следующие действия:
- Сначала вас попросят ввести новый пароль. Вам нужно будет предоставить этот пароль всякий раз, когда вы получаете доступ к содержимому файла, будь то для редактирования, просмотра или просто выполнения playbooks или команд с использованием этих значений.
- Затем будет открыт ваш редактор командной строки по умолчанию, чтобы вы могли заполнить файл нужным содержимым.
- Наконец, когда вы закончите редактирование,
ansible-vault
сохранит файл как зашифрованные данные.
Шифрование существующего файла Ansible
Чтобы зашифровать существующий файл Ansible, вы можете использовать следующий синтаксис:
Это попросит вас ввести пароль, который вам нужно будет вводить каждый раз, когда вы получаете доступ к файлу credentials.yml
.
Просмотр содержимого зашифрованного файла
Если вы хотите просмотреть содержимое файла, который был ранее зашифрован с помощью ansible-vault
, и вам не нужно изменять его содержимое, вы можете использовать:
Это попросит вас ввести пароль, который вы выбрали при первоначальном шифровании файла с помощью ansible-vault
.
Редактирование зашифрованного файла
Для редактирования содержимого файла, который ранее был зашифрован с помощью Ansible Vault, выполните следующее:
Это позволит вам ввести пароль, который вы выбрали при первоначальном шифровании файла credentials.yml
с помощью ansible-vault
. После проверки пароля ваш редактор командной строки по умолчанию откроется с расшифрованным содержимым файла, позволяя вам вносить изменения. По завершении вы можете сохранить и закрыть файл как обычно, и обновленное содержимое будет сохранено как зашифрованные данные.
Расшифровка зашифрованных файлов
Если вы хотите окончательно вернуть файл, который ранее был зашифрован с помощью ansible-vault
, к его расшифрованной версии, вы можете сделать это с помощью этого синтаксиса:
Это позволит вам ввести тот же пароль, который использовался при первоначальном шифровании файла credentials.yml
с помощью ansible-vault
. После проверки пароля содержимое файла будет сохранено на диске как незашифрованные данные.
Использование нескольких паролей для хранилищ
Ansible поддерживает несколько паролей для хранилищ, сгруппированных по разным идентификаторам хранилищ. Это полезно, если вы хотите иметь отдельные пароли для разных сред, таких как среды разработки, тестирования и производства.
Для создания нового зашифрованного файла с использованием пользовательского идентификатора хранилища, укажите опцию --vault-id
вместе с меткой и местоположением, где ansible-vault
может найти пароль для этого хранилища. Метка может быть любым идентификатором, а местоположение может быть либо prompt
, что означает, что команда должна запросить вас ввести пароль, либо допустимым путем к файлу пароля.
Это создаст новый идентификатор хранилища с именем dev, который использует prompt
в качестве источника пароля. Комбинируя этот метод с файлами переменных группы, вы сможете иметь отдельные хранилища ansible для каждой среды приложения:
Мы использовали dev и prod в качестве идентификаторов хранилища, чтобы продемонстрировать, как можно создавать отдельные хранилища для каждой среды, но вы можете создавать столько хранилищ, сколько захотите, и использовать любой идентификатор по вашему выбору в качестве идентификатора хранилища.
Теперь для просмотра, редактирования или расшифровки этих файлов вам нужно будет предоставить тот же идентификатор хранилища и источник пароля вместе с командой ansible-vault
:
Использование файла пароля
Если вам нужно автоматизировать процесс предоставления серверов с использованием Ansible с помощью стороннего инструмента, вам потребуется способ предоставить пароль от хранилища без запроса его. Это можно сделать, используя файл пароля с помощью ansible-vault
.
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
Чтобы использовать файл пароля с ansible-vault
, вам нужно указать путь к файлу пароля при выполнении любых из команд vault:
Ansible не делает различий между содержимым, зашифрованным с использованием prompt
или файла пароля в качестве источника пароля, при условии, что введенный пароль одинаков. Практически это означает, что можно зашифровать файл, используя prompt
, а затем позже использовать файл пароля для хранения того же пароля, который использовался с методом prompt
. Обратное также верно: можно зашифровать содержимое с использованием файла пароля, а затем использовать метод prompt
, предоставив тот же пароль при запросе Ansible.
Для расширенной гибкости и безопасности вместо хранения пароля от вашего хранилища в файле обычного текста можно использовать сценарий Python для получения пароля из других источников. В официальном репозитории Ansible содержатся несколько примеров сценариев хранилища, которые можно использовать в качестве справки при создании собственного сценария, который подходит для конкретных потребностей вашего проекта.
Запуск Playbook с данными, зашифрованными с помощью Ansible Vault
Всякий раз, когда вы запускаете playbook, который использует ранее зашифрованные данные с помощью ansible-vault
, вам нужно будет предоставить пароль к хранилищу вашей команде playbook.
Если вы использовали параметры по умолчанию и источник пароля prompt
при шифровании данных, используемых в этом playbook, вы можете использовать параметр --ask-vault-pass
, чтобы Ansible запросил пароль у вас:
Если вы использовали файл пароля вместо запроса пароля, вы должны использовать параметр --vault-password-file
вместо этого:
Если вы используете данные, зашифрованные под идентификатором хранилища, вам нужно будет предоставить тот же идентификатор хранилища и источник пароля, который вы использовали при первоначальном шифровании данных:
Если вы используете файл пароля с вашим идентификатором хранилища, вы должны предоставить метку, за которой следует полный путь к файлу пароля в качестве источника пароля:
Если ваш play использует несколько хранилищ, вы должны предоставить параметр --vault-id
для каждого из них, в произвольном порядке:
Отладка
Если вы столкнулись с ошибками при выполнении команд и плейбуков Ansible, рекомендуется увеличить уровень подробности вывода, чтобы получить больше информации о проблеме. Вы можете сделать это, добавив опцию -v
к команде:
Если вам нужна более подробная информация, вы можете использовать -vvv
, это увеличит подробности вывода. Если вы не можете подключиться к удаленным узлам через Ansible, используйте -vvvv
, чтобы получить отладочную информацию о подключении:
Заключение
Это руководство охватывает некоторые из наиболее распространенных команд Ansible, которые вы можете использовать при настройке серверов, такие как выполнение удаленных команд на ваших узлах и запуск плейбуков с использованием различных пользовательских параметров.
Существуют другие варианты команд и флагов, которые вы можете найти полезными для вашего рабочего процесса Ansible. Чтобы получить обзор всех доступных опций, вы можете использовать команду help:
Если вы хотите получить более полное представление о Ansible и всех его доступных командах и функциях, обратитесь к официальной документации Ansible.
Если вы хотите увидеть еще один практический пример использования Ansible, ознакомьтесь с нашим руководством Как использовать Ansible для установки и настройки Docker на Ubuntu 20.04.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide