Шпаргалка по Ansible

Автор Itworkroom

Введение

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. Следующая команда установит пакет vimon 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.ymlansible-vault. После проверки пароля откроется редактор командной строки по умолчанию с незашифрованным содержимым файла, что позволит вам внести необходимые изменения. Когда вы закончите, вы можете сохранить и закрыть файл, как обычно, и обновленное содержимое будет сохранено в виде зашифрованных данных.

Расшифровка Зашифрованных Файлов

Если вы хотите навсегда вернуть файл, который ранее был зашифрован, ansible-vaultв его незашифрованную версию, вы можете сделать это с помощью этого синтаксиса:

   ansible-vault decrypt credentials.yml

При этом вам будет предложено ввести тот же пароль, который использовался при первом шифровании файла credentials.ymlansible-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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *