Ansible – Automation for everyone

In acest articol imi propun sa prezint Ansible, un tool pentru automatizari infrastructuri multi-vendor si multi-OS tot mai folosit. Acesta face parte din cursul "Python for Network Engineers" pe care il organizam.

Ansible este un "configuration management system" sau "orchestration engine" pentru retele formate din multe dispozitive, asemanator cu Puppet si Chef, dar fara complexitatea acestora*.

*Ansibile foloseste "agentless arhitecture" pe cand alte sisteme concurente folosesc "agent-based arhitecture", ceea ce presupune ca pe fiecare node sa ruleze un agent, un daemon, care sa comunice cu "controlling machine".

 

Caracteristici Ansible:
– Este OpenSource sofware sub licenta GPL

– Simplica configurarea serverelor sau a echipamentelor dedicate de retea si se foloseste pentru automatizarea configurarii acestora

– Foloseste ssh pentru a obtine informatii sau pentru a executa comenzi. Nu necesita componente software suplimentare, nu ruleaza ca daemon. Cand nu configureaza echipamente, nu consuma resurse deoarece niciun proces nu releaza

– Orice echipament care se poate configura cu ssh, se poate configura si cu Ansible

– Exista module care pot fi scrise in orice limbaj de scripting. Acestea sunt "units of work" in Ansible si realizeaza instalarea de software, copiere de fisiere, folosire de template-uri etc

– Fisierele de configurare sunt in format YAML

– Ansible interactioneaza cu clientii prin comenzi sau prin scripturi de configurare numite Playbooks

– Controlling machine trebuie sa fie Unix-like, iar nodurile trebuie sa aiba Python instalat daca sunt Unix-based. In cazul Windows se foloseste native PowerShell remote support in loc de ssh

 

Instalare si configurare Ansibile (pe Ubuntu based distro)

1. Instalare

sudo apt-add-repository ppa:ansible/ansible

sudo apt-get update

sudo apt-get install ansible


2. Configurare ansibile hosts (inventory of work)


Ansible tine evidenta serverelor care stau sub managementul sau in fisierul /etc/ansibile/hosts

#[nume] – oganizational tag

#alias is just a name to refer to that server

[mylab]

mint18 ansible_ssh_host=192.168.0.55

server16 ansible_ssh_host=192.168.0.16


3. Setare user ssh cu care ansibile se va autentifica la clienti

mkdir /etc/ansible/group_vars
#numele fisierului este numele tagului din /etc/ansible/hosts care grupeaza
#serverele
vim /etc/ansible/group_vars/servers

Configuratia este de tip YAML si deci incepe cu

Exemplu:
---
ansible_ssh_user: youradmin

Daca dorim specificarea optiunilor de configurare pentru fiecare server fara legatura cu grupul din care face parte atunci editam /etc/ansible/group_vars/all

Hosturi individuale se configureaza in /etc/ansible/host_vars

4. Modificare port ssh la care se conecteaza ansibile

In /etc/ansible/ansible.cfg: remote_port = 2299

Ansible face by default host key strict checking. Daca apar erori se poate dezactiva din /etc/ansibile/ansibile.cfg host_key_checking = False

5. Executare comenzi simple cu Ansible

Foloseste modulul ping pentru a verifica conectivitatea ansibile cu toate hosturile definite.

#ansible -m ping all
mint18 | SUCCESS => {
"changed": false,
"ping": "pong"
}

server16 | SUCCESS => {
"changed": false,
"ping": "pong"
}

Ansible poate fi folosit si pentru managementul hostului local.

local este inventory din hosts, iar connection=local seteaza Ansible sa nu foloseasca ssh
#ansible -m ping –connection=local local
127.0.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}

Executare comanda intr-un shell pe remote host
#ansible -m shell -a 'free -m' mylab
server16 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 2936 206 2167 4 562 2560
Swap: 2996 0 2996

mint18 | SUCCESS | rc=0 >>
total used free shared buff/cache available
Mem: 2305 276 1542 5 487 1840
Swap: 0 0 0

Daca executam comenzi care necesita drepturi de root, acestea se vor executa cu sudo, iar userul care se conecteaza trebuie sa aiba NOPASSWD in /etc/sudoers. Altfel se obtine eroare.

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) NOPASSWD:ALL

#ansible -m shell -b –become-user=root -m apt -a 'name=nginx state=installed update_cache=true' mylab

server16 | SUCCESS => {
"cache_update_time": 1525343659,
"cache_updated": true,
"changed": true,
"stderr": "",
"stderr_lines": [],
"stdout": "Reading package lists…\nBuilding dependency tree…\nReading state information…\nThe following packages were automatically installed and are no longer required:\n linu

 

Ar mai fi multe de spus, aceasta fiind doar o scurta introducere.

Ansible, impreuna cu alte tooluri pentru automatizari infrastructuri, se prezinta detaliat la cursul Python for Network Engineers organizat de Crystal Mind.