ProIT: медіа для профі в IT
4 хв.

Ansible і його роль у світі автоматизації – практичні поради та секрети

author avatar Codica Team

Ansible: що воно таке є, як його використовувати й робити інтеграції та фреймворки – важливий інструмент для розгортання програмного забезпечення.

Отже, нагадаємо, що Ansible – це інструмент для автоматизації конфігурації й управління комп’ютерними системами. Він забезпечує можливість описувати задачі (playbooks) у простому для розуміння YAML-синтаксисі, що дозволяє автоматизувати налаштування серверів, застосунків, баз даних та інших системних компонентів. Код Ansible написаний мовою Python і розповсюджується під ліцензією GPLv3.

Тож що це і для чого?

Ansible може працювати з багатьма типами систем, включно з Linux, macOS і Windows. Він не потребує встановлення жодного агента на кожному вузлі (на відміну від конкурентів, як-от Chef), що спрощує його використання. Замість цього Ansible використовує SSH-з’єднання для взаємодії з системами.

Перше, що нам потрібно зробити після установки, налаштувати файл hosts. Туди повинні бути занесені всі наші хости, з якими ми будемо працювати. Хост файл може бути написаний у кількох форматах, як-от ini або yaml.

Playbook – це сценарій, у якому ви вказуєте дії, які повинен виконати Ansible на наших хостах.

В Ansible є купа модулів, які можна використовувати для роботи з установкою пакетів і закінчуючи створенням баз даних.

За допомогою Ansible можна виконувати різні завдання, включно з такими:

  • налаштування серверів і застосунків;
  • деплоймент програмного забезпечення;
  • керування конфігураціями;
  • автоматизоване тестування;
  • моніторинг систем;
  • і багато іншого.

Також Аnsible інтегрується з багатьма клаудами, наприклад AWS systems manager service має таку інтеграцію.

Загалом Ansible дозволяє зменшити витрати на управління системами та збільшити швидкість виконання задач. Як інструмент для автоматизації конфігурації, розгортання й управління інфраструктурою, що базується на моделі з описом стану системи. Вони дають змогу ефективно перевикористовувати код і ділитися ним. Ролі дають нам чітко встановлену структуру для виконання завдань.

Роль Ansible – набір завдань або обробник змінних, файлів та інших артефактів, які поширюються і підключаються як єдине ціле до плейбуку.

У міру того, як ви додаєте у плейбуки функціональність, вони стають все більш громіздкими й складними в обслуговуванні та читанні коду. Тут на допомогу приходять ролі – вони розбивають складні плейбуки на окремі дрібніші фрагменти, які можуть координуватися центральною точкою входу.

Основна ідея ролей полягає у тому, щоб дозволити повторно використовувати спільні кроки налаштування між різними типами серверів.

Стандартна структура ролі в Ansible виглядає так:

roles/

common/               # ця ієрархія показує роль

tasks/            #    <-- файли із задачами, які буде виконувати Ansible

main.yml      #

handlers/         #   <-- хендлери для Ansible* (примітка, нижче пояснюю, що це таке)

main.yml      #

templates/        #  <-- темплейти, які ролі буде деплоїти

ntp.conf.j2   #

files/            #       <-- файли, які ролі буде використовувати

bar.txt       #

foo.sh        #

vars/             #     <-- змінні, які буде використовувати роль

main.yml      #

defaults/         #   <-- також змінні, але з найнижчим пріоритетом

main.yml      #

meta/             #    <-- метадані для ролі, містять залежності ролі

main.yml      #

Хендлери – це завдання, які запускаються лише після сповіщення. Через те, що ролі мають стандартизовані структуру і формат, ділитися ними набагато простіше.

Molecule фреймворк для Ansible

Molecule – це фреймворк, тестування та відлагодження Ansible-ролей. Він дає змогу тестувати ролі Ansible у зручному середовищі, забезпечуючи тестування та валідацію ролі перед її використанням.

Molecule використовує віртуальні машини (а саме: Libvirt, Parallels, VirtualBox, VMware) для тестування ролей і дозволяє створювати різноманітні середовища, що сприяє тестуванню ролей у різних конфігураціях.

Крім того, Molecule дає змогу запускати тести на різних платформах, як-от Docker, Vagrant, OpenStack, AWS тощо.

Molecule забезпечує автоматизацію процесу тестування ролей, дозволяючи зосередитися на функціональності ролі, замість витрачання часу на налаштування тестових середовищ.

Ініціалізація ролі з молекул виконується таким чином:

molecule init role acme.role-name --driver-name docker

Після чого у вашу директорію з роллю додасться ще одна папка:

├── molecule

│   └── default

│       ├── converge.yml <-- плейбук, який буде викликати (інвокати) роль

│       ├── INSTALL.rst <-- інструкції до ролі

│       ├── molecule.yml <-- головний файл із конфігураціями

│       └── verify.yml <-- Ansible-файл для тестування

Загалом Molecule допомагає забезпечити якість ролей, зменшуючи кількість помилок і сприяючи швидкому й ефективному процесу розробки та тестування.

Тут за покликанням можна подивитися туторіал.

Ansible Vault: що це і для чого?

Ansible Vault – це механізм шифрування даних, що використовуються в Ansible. Він дозволяє захистити конфіденційні дані, як-от паролі, ключі SSH, сертифікати тощо, від несанкціонованого доступу під час їх передачі та зберігання.

За допомогою Ansible Vault можна шифрувати файли та змінні, які містять конфіденційну інформацію, зберігаючи їх у зашифрованому вигляді. Це дає змогу передавати такі файли безпосередньо через репозиторії або інші канали комунікації без ризику їх розкриття.

Ansible Vault забезпечує можливість зберігання даних у криптографічно безпечному форматі, що використовує сильний алгоритм шифрування AES (Advanced Encryption Standard).

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

Користувачі Ansible Vault можуть легко створювати та редагувати зашифровані файли та змінні, використовуючи стандартні інструменти Ansible.

Наприклад, щоб створити зашифрований файл, використовують команду ansbile-vault create <filename>. Команда ansible-vault <filename> дозволяє відкрити та редагувати файл у зашифрованому вигляді, а ansible-vault <filename> – шифрувати файл або змінну.

Приклад плейбука й ansible-vault разом:

ansible-vault create vault.yml

<промпт на пароль>

cat vault.yml

$ANSIBLE_VAULT;1.1;AES256…

ansible-vault view vault.yml

Vault password:

user: secret_user

cat playbook.yml

---

- name: "vault"

hosts: localhost

connection: local

tasks:

- name: vault

debug:

var: user

І запускаємо

ansible-playbook  -e @vault.yml playbook.yml --ask-vault-pass

Vault password:

І далі буде лог виконання, у якому Ansible використає нашу змінну.

Якщо запустимо без покликання на файл із секретом і без –ask-vault-pass, то на місці змінної буде

"user": "VARIABLE IS NOT DEFINED!"

Тож Ansible Vault є інструментом для захисту конфіденційної інформації в Ansible й дає змогу користувачам забезпечувати безпеку даних, які використовуються у процесі автоматизації інфраструктури.

Загалом Ansible – незамінний інструмент для автоматизації й управління інфраструктурою, що забезпечує ефективну роботу, підвищує безпеку і простоту управління системами.

Ця потужна платформа дає можливість спростити рутинні завдання ІТ-адміністраторів та розширити можливості вашої інфраструктури, зекономивши час і знизивши ризики помилок.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.