Поиск по сайту:

Специальные команды Ansible

Что такое специальные команды и как использовать специальные команды в Ansible

В нашей предыдущей статье мы обсудили, что такое файл инвентаризации и конфигурации ansible, который закладывает основу для изучения Ansible. В этой статье мы обсудим специальные команды ansible на некоторых примерах.

Введение

Специальные команды Ansible отлично подходят, если вы хотите запускать быстрые задачи и задачи, которые не повторяются часто. Обычно эти специальные команды представляют собой однострочные команды, которые можно запускать непосредственно из терминала или из сценария оболочки.

Прежде чем узнать, как работать со специальными командами, вам следует узнать, что такое идемпотент. Ansible является идемпотентным по своей природе, то есть независимо от того, сколько раз вы запускаете одну и ту же задачу, если состояние объекта уже изменено, тогда ansible не будет пытаться снова внести те же изменения в этот объект.

Специальные команды передаются через программу /usr/bin/ansible. Вы можете запустить следующую команду, чтобы получить список поддерживаемых параметров для команды ansible.

ansible --help

Если у вас нет лаборатории Ansible для практики, вы можете взглянуть на наше руководство о том, как настроить Ansible вручную, а также с помощью Vagrant и Virtualbox.

  • Установка и настройка Ansible в Linux
  • Автоматическая установка Ansible Lab с Vagrant и Virtualbox в Linux

Познакомьтесь с целью

Прежде чем работать со специальными командами или писать сборники сценариев, вы должны иметь четкое представление о бизнес-требованиях и целевой среде, с которой вы собираетесь работать.

Целевой средой может быть что угодно, например серверы, сетевые устройства, контейнеры, облачные решения и т. д., которые поддерживает Ansible. Здесь я использую два управляемых узла под управлением Ubuntu 20.04.

Вы можете запустить следующую команду, чтобы проверить список хостов, которые будут использоваться при запуске специальной команды или книги воспроизведения.

#SYNTAX
ansible --list-hosts

Имя группы может быть по умолчанию(все, разгруппировано) или группы, определяемые пользователем.

Если вы хотите узнать больше о группах, перейдите по следующей ссылке.

  • Файлы инвентаризации и конфигурации Ansible

Получите список хостов для всех групп.

ansible all --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Получите список хостов для определяемой пользователем группы. Здесь имя моей группы — ubuntu.

ansible ubuntu --list-hosts
hosts (2):
  managed1.anslab.com
  managed2.anslab.com

Файл инвентаря

Файл инвентаризации содержит список управляемых узлов. Расположение файла инвентаризации будет настроено в файле ansible.cfg. Вы можете переопределить местоположение файла инвентаризации, используя флаг -i или --inventory при запуске специальных команд.

У меня есть два файла инвентаризации, и файл по умолчанию называется hosts. Чтобы использовать файл host2, мне нужно использовать флаг -i и передать файл в качестве аргумента.

ansible all -i host2 --list-hosts
hosts (1):
  managed2.anslab.com

Внимание! Если файл инвентаризации находится в другом месте, вам необходимо указать абсолютный путь. Вы можете перейти по следующей ссылке, чтобы узнать порядок приоритета файла инвентаризации.

  • Файлы инвентаризации и конфигурации Ansible

Анзибль-модули

Ansible — это инструмент с батарейным питанием, что означает, что с ним поставляется множество модулей. Модули — это программы, написанные на Python, которые используются ansible для запуска на управляемых узлах для выполнения задачи. Ansible следует подходу Plug and Play, что означает, что вы можете написать свой собственный модуль и запускать его через ansible.

Ansible поддерживает множество пакетов, созданных сообществом разработчиков программного обеспечения с открытым исходным кодом и различными поставщиками продуктов. Чтобы получить список всех модулей, установленных на вашем компьютере, выполните следующую команду.

ansible-doc -l                    # LIST ALL MODULES AVAILABLE
ansible-doc -l | grep -i -w ^apt  # GREP PARTICULAR MODULE(APT) MODULE

Чтобы просмотреть документацию для модуля, вы можете запустить следующую команду. Здесь я просматриваю документацию по модулю apt, который является модулем менеджера пакетов для дистрибутивов на основе Debian/Ubuntu.

ansible-doc apt

На изображении ниже показана документация для модуля ansible apt.

Модуль Ansible-Doc Apt

Синтаксис специальных команд

При запуске специальной команды вам необходимо предоставить несколько входных данных.

  • Вам необходимо указать цели (управляемые узлы). Либо вы можете использовать группы по умолчанию «все/разгруппированные» или определяемые пользователем группы.
  • Вам необходимо передать имя модуля в качестве аргумента флага -m.
  • Каждый модуль принимает набор опций. Эти параметры следует передавать в качестве аргументов флагу -a. Если вариантов несколько, их следует заключить в кавычки.
ansible [group] -m [module] -a [module arguments]

Вы можете объединить другие аргументы, которые мы видели в предыдущих разделах, в специальные команды.

Проверьте подключение с помощью модуля Ping

Первый модуль, который вы запускаете после настройки ansible, — это модуль "ping". Модуль ping используется для проверки наличия соединения с контроллером и управляемыми узлами. Если соединение установлено успешно, вы получите ответ в виде "ping : pong".

ansible all -m ping

Выход модуля Ping

Вы также можете сжать вывод, используя флаг -o.

ansible all -m ping -o

Сжатый вывод

Выполнение команд через модуль оболочки

Модуль оболочки используется для выполнения любой команды, которую вы можете запустить через терминал. Это похоже на запуск команд через терминал Linux.

Вам следует использовать флаг -a и передавать команды в качестве аргументов модулю оболочки.

ansible all -m shell -a "arguments"

Ниже приведены некоторые команды, которые я выполнил через модуль оболочки ansible.

ansible all -m shell -a "echo $USER"
ansible all -m shell -a "uptime"
ansible all -m shell -a "cat /etc/os-release | grep -i PRETTY_NAME"
ansible all -m shell -a "touch /tmp/abc.txt"
ansible all -m shell -a "ls -l /tmp/abc.txt"

Выход модуля оболочки

Альтернативой модулю оболочки вы также можете использовать командный модуль, который является модулем по умолчанию в ansible. Вы можете напрямую использовать флаг -a и передавать команды в качестве аргумента, поскольку командный модуль является модулем по умолчанию.

ansible all -m command -a "uptime"       # EXCLUSIVELY PASSING COMMAND MODULE
ansible all -a "uptime"                  # NOT USING -m TO PASS MODULE

Выход командного модуля

Разница между оболочкой и командным модулем заключается в том, что с помощью командного модуля вы можете получить доступ к некоторым специальным переменным и не можете использовать каналы, перенаправления и логические операторы И.

Запустите следующую команду, и вы получите сообщение об ошибке.

ansible all -m command -a "test -f /etc/hosts && echo 'hosts file present'"

Вы можете запустить ту же команду через модуль оболочки, и она будет работать нормально.

ansible all -m shell -a "test -f /etc/hosts && echo 'hosts file present'"

Оболочка и вывод команды

Выполнение сценариев через модуль сценариев

Если вы хотите выполнить какой-либо сценарий (python, оболочку и т. д.), вы можете использовать модуль сценария, который скопирует сценарий с вашего компьютера-контроллера на все управляемые узлы, а затем выполнит сценарий.

У меня есть следующий код Python в моем каталоге /tmp.

import sys,os

print("CURRENT PYTHON VERSION = ", sys.version_info)
print("HOSTNAME               = ", os.uname()[1])
print("CURRENT DIRECTORY      = ", os.getcwd())

Выполните следующую команду, чтобы использовать модуль сценария для запуска сценария. Модуль сценария поддерживает дополнительные аргументы в зависимости от того, как вы запускаете сценарий. В моем случае я запускаю скрипт Python, поэтому пытаюсь передать дополнительный аргумент "executable=python3" вместе с путем к скрипту.

ansible all -m script -a "/tmp/get_host_details.py executable=python3"

Вывод модуля сценария

Модули управления пакетами

Существуют модули для работы с менеджерами пакетов ОС, такие как dnf, apt, pacman и т. д. Здесь я использую apt поскольку я использую Ubuntu. Но синтаксис будет одинаковым для всех менеджеров пакетов с различиями в параметрах. Чтобы узнать больше об этом, вам следует просмотреть соответствующую документацию.

Чтобы установить пакеты, вы можете запустить следующую команду и установить состояние "присутствует". Вам следует выбрать флаг -b или -become, чтобы запустить модуль с привилегией sudo на управляемых узлах. Если вы установили пароль для пользователя sudo, вам следует передать -K вместе с флагом -b, который запросит become пароль.

ansible all -m apt -a "name=cowsay,vim,cmatrix state=present" -b -K

Установите пакеты с помощью модуля Apt

Чтобы узнать, как работает повышение привилегий, прочтите нашу статью по ссылке ниже.

  • Аутентификация Ansible SSH и повышение привилегий

Чтобы удалить пакеты, вы можете запустить следующую команду и установить состояние "отсутствует".

ansible all -m apt -a "name=cowsay,vim,cmatrix state=absent" -b -K

Удаление пакетов с помощью модуля Apt

До сих пор я показывал, как использовать разные модули для разных задач. Возможно, это дало вам хорошее понимание того, как все работает при выполнении специальных команд.

Существует множество других модулей, и этой статьи будет недостаточно, чтобы просмотреть все. Поэтому я предлагаю вам выбрать модуль в соответствии с вашим вариантом использования и начать практиковаться со специальными командами.

Выходные цвета

Когда вы выполняете специальные команды, вы должны увидеть результат в трех разных цветах. Каждый цвет имеет свое значение.

RED    - Failure
YELLOW - Success With Changes happened
GREEN  - Success but no changes happened

КРАСНЫЙ — отказ

Если ваша задача не выполнена, то она будет напечатана красным цветом.

Сбой — вывод красного цвета

ЖЕЛТЫЙ — успех с изменениями

Когда состояние настроено на изменение, вывод будет иметь желтый цвет.

Изменение состояния — желтый цвет

ЗЕЛЕНЫЙ — успех, но никаких изменений.

Если состояние объекта не изменено, вывод будет зеленого цвета.

Без изменения состояния — зеленый цвет

Заключение

В этой статье мы обсудили, что такое специальные команды и как использовать специальные команды в Ansible. Как новичку, специальные команды дадут вам хорошее представление о том, как ansible использует модули для достижения задачи. На следующем уровне вы начнете писать книги в формате YAML, которые будут подробно рассмотрены в отдельной статье.

  • Работа с Ansible Playbooks
  • https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
  • https://www.redhat.com/sysadmin/ansible-ad-hoc-commands

Статьи по данной тематике