Типы переменных Ansible: как использовать переменные в Ansible?

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

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

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

В чем заключается значимость переменных Ansible?

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

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

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

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

Одним из примечательных типов переменных в Ansible являются факты Ansible, которые предоставляют ценную информацию, полученную с удаленных хостов. Эти факты, доступные через переменную ansible_facts, дают представление о различных аспектах целевых систем.

Например, мы можем получить подробную информацию о дистрибутиве операционной системы (ansible_distribution) и версии (ansible_version), информацию об устройствах хоста, версии Python, используемой Ansible (ansible_python_version), и архитектуре системы, среди прочего. Использование фактов Ansible обогащает наши проекты, позволяя принимать обоснованные решения и эффективно автоматизировать рабочие процессы.

Правила именования переменных Ansible

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

  • В Ansible имя переменной должно начинаться с заглавной или строчной буквы. Например, username, Saleprice и т. д.
  • Переменные в Ansible содержат буквы (заглавные или строчные, или их комбинацию), подчеркивания и цифры, например, username, sale_price, foo23 и т. д.
  • Некоторые строки или ключевые слова зарезервированы для специальных функций и не могут использоваться в качестве допустимых имен переменных. К ним относятся ключевые слова Playbook и ключевые слова Python.

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

Типы переменных Ansible

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

  • Простые переменные;
  • Специальные переменные (переменные соединения, магические переменные, факты Ansible);
  • Переменные регистра.

Простые переменные Ansible ()

Наиболее базовое использование простых переменных — это определение переменной с помощью одного значения в файле YAML плейбука.

Рассмотрим простой пример плейбука, который выводит сообщение.

---

- name: Пример плейбука с переменными

hosts: all

gather_facts: false

vars:

greeting_message: «Здравствуйте, добро пожаловать в мир переменных Ansible!»

tasks:

- name: Отобразить приветствие

debug:

msg: «{ greeting_message }»

В приведенном выше плейбуке мы продемонстрировали использование простых переменных Ansible:

name: Идентифицирует плейбук и предоставляет описание.

hosts: Указывает целевые хосты, на которых будут выполняться задачи. В данном случае мы установили значение all.

tasks: Содержит список задач, которые должны быть выполнены на указанных хостах.

name: Описывает задачу.

greeting_message — переменная, содержащая сообщение «Здравствуйте, добро пожаловать в раздел «Понимание переменных Ansible»!».

debug: Указывает модуль, который будет выводить сообщения для отладки. Задача debug отображает значение переменной greeting_message.

msg: Определяет сообщение, которое будет выведено.

Запустите плейбук, и значение geeting_message будет отображено внутри msg.

Ansible Установка переменных в задаче

Переменные Ansible — это пользовательские переменные, которые можно определять и присваивать значения в плейбуках или ролях. Эти переменные обычно используются для хранения информации, которая может изменяться в зависимости от вашей среды или требований. Вы можете устанавливать переменные на разных уровнях, например, глобально, в плейбуке или в конкретной задаче. Рассмотрим пример:

---

- name: Установить переменные

hosts: localhost

tasks:

- name: Установить переменные роли пользователя

set_fact:

user_name: «supervisor»

user_permissions: „rwx“

- name: Отобразить переменные пользователя

debug:

msg: «Пользователь „{ user_name }“ имеет права „{ user_permissions }“»

Переменные Ansible с массивами и циклами

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

Рассмотрим пример плейбука Ansible, в котором используются переменные, содержащие массивы/списки, и демонстрируется, как выполнять цикл по ним:

---

- name: Пример плейбука с переменными массивами и циклами

hosts: all

gather_facts: false

vars:

fruits:

- apple

- banana

- orange

tasks:

- name: Отображение фруктов

debug:

msg: «Фрукт — { item }»

loop: «{ fruits }»

В приведенном выше плейбуке «fruits» — это переменная, содержащая массив/список фруктов. Директива loop используется для итерации по массиву fruits. Внутри цикла задача debug отображает каждый фрукт с помощью переменной item.

Специальные переменные Ansible

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

Факты Ansible

Факты Ansible — это подробные сведения, собираемые о хостах во время выполнения плейбука. Этот процесс, называемый сбором фактов, включает в себя получение информации, такой как IP-адрес системы, текущая дата и время, спецификации BIOS, разделы диска и другие соответствующие сведения об оборудовании.

В этом примере:

Мы устанавливаем gather_facts в true, что указывает Ansible собирать информацию о целевых хостах.

Затем мы используем модуль debug для отображения некоторых из собранных фактов, таких как имя хоста (ansible_hostname), дистрибутив (ansible_distribution) и его версия (ansible_distribution_version), а также общий объем памяти (ansible_memtotal_mb).

При запуске этого плейбука с помощью ansible-playbook Ansible соберет факты со всех хостов, указанных в вашем файле инвентаризации, и отобразит соответствующую информацию для каждого хоста. Здесь мы собираем информацию только для «localhost».

Чтобы просмотреть факты Ansible, связанные с вашей локальной системой, выполните следующую команду:

$ sudo ansible -m setup localhost

Магические переменные Ansible

Магические переменные Ansible — это предопределенные переменные, которые предоставляют информацию о среде выполнения, текущем хосте или других контекстных деталях. Магические переменные в Ansible генерируются инструментом автоматически и являются неизменяемыми, что означает, что пользователи не могут изменять их значения. Эти переменные всегда представляют внутреннее состояние Ansible и не могут быть изменены пользователями. Поэтому они могут использоваться только в предопределенной форме и не могут быть настроены.

Вот пример использования магических переменных Ansible в плейбуке:

---

- hosts: all

tasks:

- debug:

var: ansible_version

Переменные подключения Ansible

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

Рассмотрим пример, в котором мы запускаем команду date на localhost.

---

- name: Запустить команду на Localhost

hosts: localhost

connection: local

gather_facts: no

vars:

command_to_run: «date»

tasks:

- name: Выполнить команду

ansible.builtin.shell: «{ command_to_run }»

register: command_output

- name: Отобразить вывод команды

ansible.builtin.debug:

msg: «Вывод команды: { command_output.stdout }»

В приведенном выше примере:

name: Описывает название плейбука, которое в данном случае является «Run Command on Localhost».

hosts: Указывает целевые хосты для плейбука. Здесь он установлен на localhost, что означает, что плейбук будет запускаться только на локальном компьютере.

connection: Указывает, как Ansible подключается к целевым хостам. Установка на local означает, что Ansible выполняет задачи непосредственно на узле управления, который является локальным компьютером.

gather_facts: Управляет тем, должен ли Ansible собирать факты о целевых хостах. Установлено значение no, что означает, что Ansible не будет собирать никаких фактов.

vars: Определяет переменные, специфичные для этого плейбука. Устанавливает переменную с именем command_to_run со значением «date», представляющую команду оболочки для получения текущей даты.

tasks: Содержит список задач, которые Ansible будет выполнять.

name: Описывает цель задачи, которая заключается в выполнении команды и отображении ее результатов.

ansible.builtin.shell: Этот модуль задачи выполняет команды оболочки на целевых хостах. Здесь он запускает команду, указанную в переменной command_to_run.

register: Записывает результаты команды оболочки для дальнейшего использования. Результаты хранятся в command_output.

ansible.builtin.debug: этот модуль задачи используется для вывода отладочных сообщений. Здесь он отображает вывод команды, сохраненный в command_output.stdout.

После запуска этого плейбука Ansible вы увидите выполнение команды date на localhost и отображение вывода, который представляет собой текущую дату и время.

Переменные реестра Ansible

Модуль реестра Ansible служит для хранения вывода задачи в переменной. Обычно это включает в себя выполнение задачи на удаленном хосте с использованием модулей, таких как shell или command. После того, как модуль register захватывает вывод задачи, на него можно ссылаться в различных контекстах, таких как условные операторы или вывод результатов.

Давайте рассмотрим, как register применяется для захвата вывода задачи. В предоставленном плейбуке команда free выполняется на локальном хосте. Модуль register захватывает вывод команды, а затем он отображается в стандартном выводе (stdout).

---

- name: Пример переменной Ansible Register

hosts: localhost

tasks:

- name: Получить информацию об использовании памяти

shell: «free»

register: memory_usage

- debug:

var: memory_usage.stdout

В этом примере:

Модуль shell используется для выполнения команды free, которая отображает информацию об использовании памяти. Результат выполнения команды free фиксируется модулем register и сохраняется в переменной memory_usage.

Затем модуль debug отображает зафиксированный результат выполнения команды free, используя атрибут stdout переменной memory_usage.

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

Заключение

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

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

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

Blog