Типы переменных 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