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, щоб не пропустити жодну публікацію!