Шпаргалка по Ansible
Введение
Ansible — это современный инструмент управления конфигурацией, который облегчает задачу настройки и обслуживания удаленных серверов.
Это руководство по стилю шпаргалки содержит краткую справку о командах и методах, обычно используемых при работе с Ansible. Для получения общего представления об Ansible и о том, как его установить и настроить, пожалуйста, ознакомьтесь с нашим руководством по установке и настройке Ansible на Ubuntu 18.04.
Как использовать это руководство:
- Это руководство представлено в формате шпаргалки с автономными фрагментами командной строки.
- Переходите к любому разделу, который имеет отношение к задаче, которую вы пытаетесь выполнить.
- Когда вы видите
highlighted text
в этом руководстве команды, имейте в виду, что этот текст должен относиться к хостам, именам пользователей и IP-адресам из вашего собственного инвентаря.
Глоссарий
В настоящем руководстве в основном используются следующие специфические для ansible термины:
- Управляющая машина / узел: система, в которой установлен и сконфигурирован Ansible для подключения и выполнения команд на узлах.
- Узел: сервер, управляемый Ansible.
- Файл инвентаризации: файл, содержащий информацию о серверах, на которых обычно находятся элементы управления Ansible
/etc/ansible/hosts
. - Playbook: файл, содержащий ряд задач, которые должны быть выполнены на удаленном сервере.
- Роль: коллекция книг воспроизведения и других файлов, имеющих отношение к такой цели, как установка веб-сервера.
- Игра: полный пробег ansible. Пьеса может иметь несколько сборников пьес и ролей, включенных из одного сборника пьес, который действует как точка входа.
Если вы хотите практиковать команды, используемые в этом руководстве, с рабочим учебником Ansible playbook, вы можете использовать этот учебник из нашего руководства по автоматизации начальной настройки сервера с помощью Ansible на Ubuntu 18.04. Вам понадобится по крайней мере один сервер для использования в качестве узла.
Тестирование подключения к узлам
Чтобы проверить, что Ansible может подключать и запускать команды и книги воспроизведения на ваших узлах, вы можете использовать следующую команду:
ansible all -m ping
ping Модуль проверит, есть ли у вас действительные учетные данные для подключения к узлам, определенным в вашем файле инвентаризации, в дополнение к проверке того, может ли Ansible запускать скрипты Python на удаленном сервере. Ответ pong назад означает, что Ansible готов запускать команды и PlayBook на этом узле
Подключение от имени другого пользователя
По умолчанию Ansible пытается подключиться к узлам в качестве текущего системного пользователя, используя соответствующую пару клавиш SSH. Чтобы подключиться как другой пользователь, добавьте команду с
-u
флагом и именем предполагаемого пользователя:
ansible all -m ping -u sammy
То же самое справедливо и для ansible-playbook:
ansible-playbook myplaybook.yml -u sammy
Использование пользовательского ключа SSH
Если вы используете пользовательский SSH-ключ для подключения к удаленным серверам, вы можете предоставить его во время выполнения с
--private-key
помощью опции:
ansible all -m ping --private-key=~/.ssh/custom_id
Эта опция также действительна для ansible-playbook:
ansible-playbook myplaybook.yml —private-key=~/.ssh/custom_id
Использование аутентификации на основе пароля
Если вам нужно использовать аутентификацию на основе пароля для подключения к узлам, вам нужно добавить эту опцию
--ask-pass
к вашей команде Ansible.
Это позволит Ansible запрашивать пароль пользователя на удаленном сервере, к которому вы пытаетесь подключиться в качестве:
ansible all -m ping --ask-pass
Эта опция также действительна для ansible-playbook:
ansible-playbook myplaybook.yml --ask-pass
Предоставление sudo пароля
Если удаленный пользователь должен предоставить пароль для выполнения sudo команд, вы можете включить эту опцию —ask-become-pass в свою команду Ansible. Это предложит вам ввести пароль удаленного пользователя sudo:
ansible all -m ping --ask-become-pass
Эта опция также действительна дляansible-playbook
:
ansible-playbook myplaybook.yml --ask-become-pass
Использование пользовательского файла инвентаризации
Файл инвентаризации по умолчанию обычно находится по адресу/etc/ansible/hosts
, но вы также можете использовать эту -i
опцию, чтобы указать на пользовательские файлы инвентаризации при запуске команд Ansible и PlayBook. Это полезно для настройки запасов по каждому проекту, которые могут быть включены в системы контроля версий, такие как Git:
ansible all -m ping -i my_custom_inventory
Тот же вариант действителен и дляansible-playbook
:
ansible-playbook myplaybook.yml -i my_custom_inventory
Использование динамического файла инвентаризации
Ansible поддерживает сценарии инвентаризации для построения динамических файлов инвентаризации. Это полезно, если ваш инвентарь колеблется, а серверы часто создаются и уничтожаются.
Вы можете найти несколько сценариев инвентаризации с открытым исходным кодом в официальном репозитории Ansible GitHub. После загрузки нужного скрипта на вашу машину управления Ansible и настройки любой необходимой информации — например, учетных данных API — вы можете использовать исполняемый файл в качестве пользовательского инвентаря с любой командой Ansible, поддерживающей эту опцию.
Следующая команда использует сценарий инвентаризации DigitalOcean от Ansible с ping
командой для проверки подключения ко всем текущим активным серверам:
ansible all -m ping -i digital_ocean.py
Для получения более подробной информации о том, как использовать динамические файлы инвентаризации, пожалуйста, обратитесь к официальной документации Ansible.
Выполнение специальных команд
Чтобы выполнить команду на узле, используйте -a
опцию, за которой следует команда, которую вы хотите запустить, в кавычках.
Это будет выполняться uname -a
на всех узлах в вашем инвентаре:
ansible all -a "uname -a"
Кроме того, с помощью этой опции можно запускать ansible модули -m
. Следующая команда установит пакет vim
on server1
из вашего инвентаря:
ansible server1 -m apt -a "name=vim"
Прежде чем вносить изменения в узлы, вы можете провести тестовый прогон, чтобы предсказать, как ваша команда повлияет на серверы. Это можно сделать, включив --check
опцию:
ansible server1 -m apt -a «name=vim» —check
Запуск Playbook
Чтобы запустить playbook и выполнить все задачи, определенные в нем, используйте ansible-playbook
команду:
ansible-playbook myplaybook.yml
Чтобы перезаписать параметр hosts
по умолчанию в playbook и ограничить выполнение определенной группой или хостом, включите этот параметр -l
в свою команду:
ansible-playbook -l server1 myplaybook.yml
Получение информации
Эта опция --list-tasks
используется для перечисления всех задач, которые будут выполняться игрой без внесения каких-либо изменений на удаленные серверы:
ansible-playbook myplaybook.yml --list-tasks
Точно так же можно перечислить все хосты, которые будут затронуты игрой, не выполняя никаких задач на удаленных серверах:
ansible-playbook myplaybook.yml --list-hosts
Вы можете использовать теги, чтобы ограничить выполнение пьесы. Чтобы перечислить все теги, доступные в игре, используйте опцию--list-tags
:
ansible-playbook myplaybook.yml --list-tags
Контроль Выполнения Playbook
Вы можете использовать эту опцию--start-at-task
, чтобы определить новую точку входа для вашего playbook. Затем Ansible пропустит все, что предшествует указанной задаче, выполнив оставшуюся часть воспроизведения с этого момента. Этот параметр требует допустимого имени задачи в качестве аргумента:
ansible-playbook myplaybook.yml --start-at-task="Set Up Nginx"
Этот параметр можно использовать только для выполнения задач, связанных с определенными тегами --tags
. Например, если вы хотите выполнять только задачи, помеченные как nginx
или mysql
, вы можете использовать:
ansible-playbook myplaybook.yml --tags=mysql,nginx
Если вы хотите пропустить все задачи, которые находятся под определенными тегами, используйте --skip-tags
. Следующая команда будет выполненаmyplaybook.yml
, пропуская все задачи, помеченные какmysql
:
ansible-playbook myplaybook.yml --skip-tags=mysql
Использование Ansible Vault для хранения конфиденциальных данных
Если ваши Ansible playbook имеют дело с конфиденциальными данными, такими как пароли, ключи API и учетные данные, важно обеспечить безопасность этих данных с помощью механизма шифрования. Ansible обеспечивает ansible-vault
шифрование файлов и переменных.
Несмотря на то, что можно зашифровать любой файл данных Ansible, а также двоичные файлы, его чаще всего используют ansible-vault
для шифрования переменных файлов, содержащих конфиденциальные данные. После шифрования файла с помощью этого инструмента вы сможете выполнить, отредактировать или просмотреть его содержимое, только предоставив соответствующий пароль, определенный при первом шифровании файла.
Создание нового зашифрованного файла
Вы можете создать новый зашифрованный файл Ansible с помощью:
ansible-vault create credentials.yml
Эта команда будет выполнять следующие действия:
-
-
- Во-первых, он предложит вам ввести новый пароль. Вам нужно будет вводить этот пароль всякий раз, когда вы получаете доступ к содержимому файла, будь то для редактирования, просмотра или просто запуска PlayBook или команд, использующих эти значения.
- Затем он откроет редактор командной строки по умолчанию, чтобы вы могли заполнить файл нужным содержимым.
- Наконец, когда вы закончите редактирование,
ansible-vault
сохраните файл как зашифрованные данные.
-
Шифрование существующего файла Ansible
Для шифрования существующего файла Ansible можно использовать следующий синтаксис:
ansible-vault encrypt credentials.yml
Это запросит у вас пароль, который вам нужно будет вводить всякий раз, когда вы получаете доступ к файлу credentials.yml
.
Просмотр содержимого зашифрованного файла
Если вы хотите просмотреть содержимое файла, который ранее был зашифрован, ansible-vault
и вам не нужно изменять его содержимое, вы можете использовать:
ansible-vault view credentials.yml
При этом вам будет предложено ввести пароль, который вы выбрали при первом шифровании файла ansible-vault
.
Редактирование зашифрованного файла
Чтобы отредактировать содержимое файла, который ранее был зашифрован с помощью Ansible Vault, выполните команду:
ansible-vault edit credentials.yml
При этом вам будет предложено ввести пароль, который вы выбрали при первом шифровании файла credentials.yml
ansible-vault
. После проверки пароля откроется редактор командной строки по умолчанию с незашифрованным содержимым файла, что позволит вам внести необходимые изменения. Когда вы закончите, вы можете сохранить и закрыть файл, как обычно, и обновленное содержимое будет сохранено в виде зашифрованных данных.
Расшифровка Зашифрованных Файлов
Если вы хотите навсегда вернуть файл, который ранее был зашифрован, ansible-vault
в его незашифрованную версию, вы можете сделать это с помощью этого синтаксиса:
ansible-vault decrypt credentials.yml
При этом вам будет предложено ввести тот же пароль, который использовался при первом шифровании файла credentials.yml
ansible-vault
. После проверки пароля содержимое файла будет сохранено на диске в виде незашифрованных данных.
Использование Нескольких Паролей Хранилища
Ansible поддерживает несколько паролей хранилища, сгруппированных по различным идентификаторам хранилища. Это полезно, если вы хотите иметь специальные пароли хранилища для различных сред, таких как среды разработки, тестирования и производства.
Чтобы создать новый зашифрованный файл с помощью пользовательского идентификатора хранилища, включите эту --vault-id
опцию вместе с меткой и местоположением, где ansible-vault
можно найти пароль для этого хранилища. Метка может быть любым идентификатором , а расположение может быть любымprompt
, что означает, что команда должна предложить вам ввести пароль или действительный путь к файлу паролей.
ansible-vault create --vault-id dev@prompt credentials_dev.yml
Это создаст новый идентификатор хранилища с именем dev, который будет использоваться prompt
в качестве источника пароля. Комбинируя этот метод с файлами групповых переменных, вы сможете иметь отдельные хранилища ansible для каждой среды приложения:
ansible-vault create --vault-id prod@prompt credentials_prod.yml
Мы использовали dev и prod в качестве идентификаторов хранилищ, чтобы продемонстрировать, как можно создавать отдельные хранилища для каждой среды, но вы можете создать столько хранилищ, сколько захотите, и вы можете использовать любой идентификатор по вашему выбору в качестве идентификатора хранилища.
Теперь, чтобы просмотреть, отредактировать или расшифровать эти файлы, вам нужно будет предоставить тот же идентификатор хранилища и источник пароля вместе с ansible-vault
командой:
ansible-vault edit credentials_dev.yml --vault-id dev@prompt
Использование файла паролей
Если вам нужно автоматизировать процесс подготовки серверов с помощью Ansible с помощью стороннего инструмента, вам понадобится способ предоставить пароль хранилища без запроса на него. Вы можете сделать это, используя файл пароля ansible-vault
С.
Файл пароля может быть обычным текстовым файлом или исполняемым скриптом. Если файл является исполняемым скриптом, то выходные данные, созданные этим скриптом, будут использоваться в качестве пароля хранилища. В противном случае необработанное содержимое файла будет использоваться в качестве пароля хранилища.
Чтобы использовать файл паролейansible-vault
, вам необходимо указать путь к файлу паролей при выполнении любой из команд vault:
ansible-vault create --vault-id dev@path/to/passfile credentials_dev.yml
Ansible не делает различия между содержимым, которое было зашифровано с помощью prompt
файла паролей или файла паролей в качестве источника паролей, если входной пароль один и тот же. На практике это означает, что можно зашифровать файл с помощьюprompt
, а затем использовать файл пароля для хранения того же пароля, который используется с этим prompt
методом. Верно и обратное: вы можете зашифровать содержимое с помощью файла паролей, а затем использовать этот prompt
метод, предоставляя тот же пароль по запросу Ansible.
Для большей гибкости и безопасности вместо того, чтобы хранить пароль хранилища в обычном текстовом файле, вы можете использовать скрипт Python для получения пароля из других источников. Официальный репозиторий Ansible содержит несколько примеров сценариев хранилища, которые можно использовать для справки при создании пользовательского сценария, соответствующего конкретным потребностям вашего проекта.
Запуск Playbook с данными, зашифрованными через Ansible Vault
Всякий раз когда вы запускаете playbook, который использует данные, ранее зашифрованные черезansible-vault
, вам нужно будет предоставить пароль хранилища для вашей команды playbook.
Если вы использовали параметры по умолчанию и prompt
источник пароля при шифровании данных, используемых в этом сборнике воспроизведения, вы можете использовать этот параметр--ask-vault-pass
, чтобы сделать Ansible запрос пароля:
ansible-playbook myplaybook.yml --ask-vault-pass
Если вы использовали файл пароля вместо запроса пароля, то вам следует использовать эту опцию--vault-password-file
:
ansible-playbook myplaybook.yml --vault-password-file my_vault_password.py
Если вы используете данные, зашифрованные под идентификатором хранилища, вам нужно будет предоставить тот же идентификатор хранилища и источник пароля, который вы использовали при первом шифровании данных:
ansible-playbook myplaybook.yml --vault-id dev@prompt
Если вы используете файл паролей с вашим идентификатором хранилища, вы должны указать метку, а затем полный путь к файлу паролей в качестве источника паролей:
ansible-playbook myplaybook.yml --vault-id dev@vault_password.py
Если ваша игра использует несколько хранилищ, вы должны указать --vault-id
параметр для каждого из них, не в определенном порядке:
ansible-playbook myplaybook.yml --vault-id dev@vault_password.py --vault-id test@prompt --vault-id ci@prompt
Отладка
Если вы столкнулись с ошибками при выполнении команд Ansible и PlayBook, это хорошая идея, чтобы увеличить детализацию вывода, чтобы получить больше информации о проблеме. Вы можете сделать это, включив -v
опцию в команду:
ansible-playbook myplaybook.yml -v
Если вам нужно больше деталей, вы можете использовать-vvv
, и это увеличит многословность вывода. Если вы не можете подключиться к удаленным узлам через Ansible, используйте -vvvv
для получения информации об отладке соединения:
ansible-playbook myplaybook.yml -vvvv
Вывод
В этом руководстве рассматриваются некоторые наиболее распространенные команды Ansible, которые можно использовать при подготовке серверов, например, как выполнять удаленные команды на узлах и как запускать PlayBook с использованием различных пользовательских настроек.
Существуют и другие варианты команд и флаги, которые могут оказаться полезными для вашего рабочего процесса Ansible. Чтобы получить обзор всех доступных опций, можно воспользоваться командой help:
ansible --help
0