Типи змінних Ansible: як використовувати змінні в Ansible?
Змінні Ansible корисні для управління варіаціями між системами. Ця платформа дозволяє виконувати плейбуки та завдання одночасно в декількох системах за допомогою однієї команди. Варіації між системами можна виразити, визначивши змінні за допомогою синтаксису YAML, включаючи списки та словники.
Ці змінні можна встановлювати в різних місцях, таких як командні рядки, файли або ролі, що можна використовувати повторно, інвентар або плейбуки. Крім того, під час виконання плейбуків можна генерувати нові змінні, призначаючи значення повернення завдань як змінні.
У цьому гайді ми розглянемо поняття змінних Ansible, детально вивчивши їх використання, типи та функціональність.
Яке значення мають змінні Ansible?
Ansible — це популярний інструмент управління конфігурацією, який широко використовується для ефективного управління декількома серверами. Він спрощує такі завдання, як налаштування сервера та встановлення додатків, автоматизуючи процеси.
За допомогою Ansible ви можете легко обробляти велику кількість віддалених серверів і послідовно виконувати завдання з центрального вузла. Це спрощує завдання управління, підвищує продуктивність і забезпечує узгодженість у всій вашій інфраструктурі.
Змінні в Ansible служать потужними інструментами для спрощення управління динамічними значеннями протягом усього проекту, зменшуючи ймовірність людських помилок. Вони пропонують зручний засіб для обробки варіацій і розбіжностей у різних середовищах і системах.
Завдяки змінним ми отримуємо гнучкість у їх визначенні в різних місцях, кожне з яких має різні рівні пріоритету, адаптовані до наших конкретних потреб. Крім того, Ansible дозволяє нам реєструвати нові змінні безпосередньо в наших плейбуках, фіксуючи результати завдань, що ще більше розширює можливості налаштування.
Одним із помітних типів змінних в Ansible є Ansible facts, які надають цінну інформацію, отриману від віддалених хостів. Ці факти, доступні через змінну ansible_facts, дають уявлення про різні аспекти цільових систем.
Наприклад, ми можемо отримати детальну інформацію про дистрибутив операційної системи (ansible_distribution) і (ansible_version), інформацію про хост-пристрої, версію Python, яку використовує Ansible (ansible_python_version), архітектуру системи тощо. Використання Ansible facts збагачує наші проекти, дозволяючи приймати обґрунтовані рішення та ефективно автоматизувати робочі процеси.
Правила іменування змінних 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: «Hello, welcome to Ansible variables understanding!»
tasks:
- name: Display Greeting
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: Описує назву плейбука, яка є «Виконати команду на локальному хості».
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 на локальному хості та результат, який є поточною датою та часом.
Змінні реєстру 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