Ansible

Il codice relativo ad Ansible e' suddiviso in roles (una sorta di moduli, pacchetti). Un role puo' gestire la configurazione di un db, piuttosto che di un'applicazione web (come Gasista Felice). O delle funzionalita' di base di un server (es: SSH). Un role puo' avere come dipendenza un altro role, etc. Ansible Galaxy e' una sorta di gestore pacchetti dei roles e s'interfaccia con un repository dove poter scaricare dei role gia' pronti.

Roles

Premesse:

sul mio portatile o su un altro server (non master) e' gia' pronto un ambiente Ansible funzionante (vedi piu' sotto)

sul server c'e' il repository git

L'idea e' di realizzare:

un numero ristretto di role ad alta priorita' (0, 1, 2)

tutti i role per le singole app o funzionalita' (>= 3)

I role 0, 1 e 2 differiscono principalmente per:

server su cui agiscono

frequenza con cui vengono rieseguiti

0. Base

Target: master (la prima volta viene lanciato dal proprio portatile o da un altro server con Ansible, poi sempre dal master stesso)

Obiettivo: si assicura che e' installato/aggiornato un ambiente ansible operativo

Tasks:

installazione di Ansible e Cron

configurazione di Ansible (symlink a ~/.ansible.cfg o env_var ANSIBLE_CONFIG)

configurazione client SSH (symlink a ~/.ssh/config)

cronizzazione di tutti i role di Ansible, alta e bassa priorita' (compreso questo)

Cron: ogni 30 minuti?

Nota: una volta lanciato questo dal portatile non bisogna fare piu' niente, si attiva tutto da solo

1. Core

Target: all

Obiettivo: si assicura che il server SSH, i demoni e processi essenziali* e le risorse principali sul server siano OK, in caso contrario invia una mail o un messaggio su jabber

Cron: ogni 5 minuti?

*In caso di interventi manuali, sara' comunque possibile creare un file di lock per evitare il controllo di certi demoni/processi, da cancellare poi alla fine dell'operazione.

2. Test

Target: 1-2 server

Obiettivo: si assicura che tutti gli URL ritornino 200, in caso contrario invia una mail o un messaggio su jabber

Cron: 5 minuti?

Nota: non puo' essere unito a 1 perche' in 1 tutti i server vengono controllati, mentre nel 2 a partire da 1-2 server vengono fatte le richieste a tutti gli URL → quindi gli URL sono slegati dai server

3+. Tutti gli altri roles

Target: all (dipende da quali app/funzionalita' sono presenti nei vari server)

Obiettivi:

template bashrc/vimrc per tutti i server (compreso master)

backup/logrotate/rsync

git rebase master dal branch prod di 1ring

installazione/configurazione (o verifica di essi) delle app (gasista felice, etc)

app della SPES (rilettore..)

tutti gli altri task a priorita' minore

Cron: 1 volta al giorno?

Installare Ansible (>= 1.6)

Ovviamente e' disponibile la guida ufficiale per installare Ansible manualmente, ma noi abbiamo bisogno almeno della versione 1.6 di Ansible, percio' faccio un sunto per le distro che usiamo:

Arch e derivate: la versione nei repo e' costantemente aggiornata, si puo' installare da li':

# pacman -S ansible

Ubuntu (e derivate): la versione nei repository e' datata, ma e' disponibile l'apposito repository Launchpad → documentazione ufficiale

Debian testing/jessie + unstable/sid: la versione e' sufficientemente aggiornata:

# apt install ansible

Debian stable/wheezy: disponibile nei backport:

# echo 'deb http://ftp.debian.org/debian wheezy-backports main' >> /etc/apt/sources.list
# apt-get update
# apt-get -t wheezy-backports install ansible

#TODO:

configurazione

ambiente testing vagrant/docker

wiki per aggiunta server

aggiungere chiave pubblica da altro server

creare connessione e lanciare task

poi aggiungere in hosts.ini, creare host_vars/nomeserver, aggiungere .ssh/config

wiki workflow git

Note tecniche per l'implementazione

gather_facts: no dove non necessario e/o nei task ad alta priorita'