Logo - Formelin

Mailův blog

Provisioning - Ansible

Mailo Světel 26.02.2014

V tomto postu popisuji co to takhle z kraje je provisioning, co je to Ansible a co se s ním dá dělat. Nebudu popisovat instalaci, ani nastavení Ansible jako takového.


Problematika

Provisioning je proces přípravy stroje na jemu určenou činnost. Pokud budeme chtít stroj na webové aplikace, budeme potřebovat nainstalovat nějaký webový server, aplikační server, databázový server. Až se nainstalují příslušné balíky, tak ještě dané servery potřebujeme nastavit, aby vyhovovovaly potřebám dané aplikace. V jistém bodě dojdeme u aplikace k tomu, že potřebujeme další instanci databáze, či potřebujeme na jiném stroji schématicky stejnou databázi. To se dá udělat od píky jako tomu bylo u prvního stroje. To je ale zdlouhavé a velice pravděpodobně při tom dojde k chybám.

Ansible

Ansible je nástroj na nastavování strojů dle předem daných aspektů. Je to vlastně sada modulů, kterým můžete říct že v téhle cestě má být předem daný konfigurační soubor, že má běžet tato služba, atp. Do většího povědomí se v poslední době tyto nástroje dostávají, protože se mezi vývojáři rozšiřuje trend nemít vše nainstalováno přímo na svém počítači, ale mít služby ve virtuálním stroji, který můžu v případě potřeby zahodit a začít od znova. Znovu takový stroj nastavovat by bylo celkem pracné a časově náročné. Používají se tedy orchestrační nástroje jako jsou Puppet, Ansible, Chef, Salt, atp, které mají při reinicializaci stroje naprosto minimální časové požadavky na interakci s člověkem (nástroj toho udělá maximum sám).

Členění

Když v Ansible vytváříte nový provisioningový projekt, tak je potřeba vytvořit tři věci.

  • inventory - seznam strojů nad kterými bude možné (nutně se vždy nemusí pracovat na všemi stroji) provádět operace
  • site - popis jak mají stroje vypadat
  • roles – popis jak má na stroji vypadat například MySQL, nebo Node server

Nad tím vším se pak pustí příkaz který uvede popsané, ve skutečnost.

Příkladem

Proberu zde pár příkladů z mého projektu na provisioning mnou používaných Maců. Celý projekt je dostupný na githubu – roolo/provision-ansible

V rootu projektu mám inventory.yml. Jelikož nastavuji vždy pouze lokální stroj tak obsahuje akorát localhost ansible_connection=local.

Dále v kořeni projektu najdeme krasimir.yml a workhamir.yml. Jedná se o můj domácí a pracovní počítač. V těchto souborech je vidět, že každý stroj toho má sobě trochu jinak. Například v práci nemám některé aplikace protože je tam nepotřebuji a ze stejného důvodu nemám doma třeba tolik databázových rolí.

Samotné role jsou v adresáři roles. Ze všech se podívejme alespoň na zsh-terminal. První a hlavní soubor v roli je tasks/main.yml ten obsahuje ůkony které je potřeba na stroji udělat. Je tu nainstalovaní Oh-my-zsh a naplnění initicializačních skriptů zsh. V jednotlivých rolích je možné si definovat proměnné, závislosti mezi rolemi samotnými a další věci (viz dokumentace). Nejbohatší je na příklad z odkazovaného projektu role git-client. Obsahuje základ (tasks), závislosti (meta), notifikované tasky (handlers, soubory pro cílový stroj (files) a proměnné (defaults).

Závěrem

Ansible první provisioningový nástroj, který jsem opravdu použil. Zvolil jsem ho protože je jednoduchý a z dříve zmiňovaných jsem u něj byl schopen nejdříve najít jak se dělá to co jsem potřeboval.

Pokud vás Ansible zaujal, tak doporučuji navštívit Getting started jako odrazový můstek a pokud budete Ansible používat, tak bude jistě často navštěvovanou stránkou Modules Index kde je seznam všech modulů, které Ansible v základu obsahuje.


Clip to Evernote