Ansible: panoramica e utilizzo
Cosa è'ansible ? Come usarlo? Quali concorrenti? Un piccolo trucco per indirizzare un nuovo prodotto che da tempo sta facendo un'ottima impressione.
ansible è apparso nel 2012. Nell'ottobre 2015, Red Hat ha annunciato l'acquisizione di Ansible, che è poi diventato un prodotto di punta nel suo stack. Questo si adatta perfettamente alle soluzioni di Red Hat e rafforza le argomentazioni sulla facilità di gestione di una server farm.
ansible è una soluzione per eseguire distribuzioni, esecuzione di attività e gestione della configurazione su più macchine contemporaneamente. Lui è agente di meno e usare SSH per attuare le azioni da compiere, esse stesse scritte in Yamla.
In ansible, ci sono molti prodotti che possono disturbare all'inizio. Potresti sentirne parlare Playbook Ansible, Volta Ansible et Galassia Ansible.
Ansible e i moduli
Due cose da sapere:
- Quando usi ansible, usi i moduli. C'è un elenco di moduli già scritti, ma puoi anche scriverne uno tuo. Dovrai scriverlo in Python.
- È necessario fornire un gruppo di dominio/IP o un gruppo in cui utilizzare l'azione.
Esempio:
Controlleremo che la nostra macchina sia buona up con il modulo ping.
1
2
3
4
5
|
$ ansible localhost -m ping
host locale | SUCCESSO => {
"cambiato": falso,
"ping": "ping"
}
|
Usare qualcosa di diverso da localhost, ad esempio un insieme di domini, è necessario completare il file /etc/ansible/host.
1
2
3
|
[baptiste-donaux.fr]
www.baptiste-donaux.fr
me.baptiste-donaux.fr
|
1
2
3
4
5
6
7
8
9
10
|
$ ansible -m ping baptiste-donaux.fr
me.baptiste-donaux.fr | successo >> {
"cambiato": falso,
"ping": "ping"
}
www.baptiste-donaux.fr | successo >> {
"cambiato": falso,
"ping": "ping"
}
|
Ed è così che verifichiamo che a pool di server in buono stato up . Ecco l'elenco dei moduli base presenti.
Una volta capito come funziona un modulo, puoi utilizzare tutti gli altri moduli allo stesso modo. Quando si utilizza un modulo, è possibile fornire argomenti (argument -a).
Ad esempio, come eseguire un comando su molti.
1
2
3
4
5
6
|
$ ansible -m shell -a “docker –versione” baptiste-donaux.fr
me.baptiste-donaux.fr | successo | re=0 >>
Docker versione 1.12.1, build 23cf638
www.baptiste-donaux.fr | successo | re=0 >>
Docker versione 1.12.1, build 23cf638
|
Ma assicurati anche che sia installato un pacchetto.
1
2
3
4
|
$ ansible -m apt -a "nome=vim stato=presente" www.baptiste-donaux.fr
www.baptiste-donaux.fr | successo >> {
"cambiato": falso
}
|
O semplicemente aggiornare uno o più server.
1
2
3
4
5
6
7
8
9
10
11
12
|
$ ansible -m apt -a "update_cache=sì" www.baptiste-donaux.fr
www.baptiste-donaux.fr | successo >> {
"cambiato": falso
}
$ ansible -m apt -a “aggiorna=dist” www.baptiste-donaux.fr
www.baptiste-donaux.fr | successo >> {
"cambiato": falso,
"messaggio": "Lettura degli elenchi dei pacchetti... nCreazione dell'albero delle dipendenze... nLettura delle informazioni sullo stato... n0 aggiornati, 0 appena installati, 0 da rimuovere e 0 non aggiornati.n",
“stderr”: "",
"stout": "Lettura degli elenchi dei pacchetti... nCreazione dell'albero delle dipendenze... nLettura delle informazioni sullo stato... n0 aggiornati, 0 appena installati, 0 da rimuovere e 0 non aggiornati.n"
}
|
Ansible e Playbooks (benvenuto nel mondo reale)
Gestire un parco macchine con ordini va già bene, ed è soprattutto la base diansible. Nonostante ciò, è difficile immaginare di riprodurre uno scenario eseguendo i comandi uno dopo l'altro. Fortunatamente per noi, ansible-playbook è qui per questo!
Gli scenari sono scritti in YAML. Ecco un piccolo esempio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
– host: baptiste-donaux.fr
compiti:
- nome: Aggiungi la chiave APT per il repository Docker
chiave_apt:
server delle chiavi: "hkp://p80.pool.sks-keyservers.net:80"
id: 58118E89F3A912897C070ADBF76221572C52609D
- nome: Aggiungi il repository Docker APT
repository_apt: repository='deb https://apt.dockerproject.org/repo debian-jessie main' stato=presente
- nome: Aggiorna la cache APT con il nuovo repository
adatto: update_cache=sì
- nome: Installa il pacchetto docker-engine in caso contrarionon esiste
apt: name=docker-engine state=presente
– nome: Abilita e avvia il servizio Docker
systemd: enabled=yes state=started name=docker
– nome: InstallPython
apt: nome=python stato=presente
– nome: Installa PIP
apt: nome=python-pip stato=presente
– nome: dipendenza docker-py
pip: nome=docker-py
– nome: Tira l'immagine Nginx
docker_image: nome=nginx pull=sì
– nome: crea un contenitore Nginx
contenitore_docker:
nome: delegato
immagine: nginx
porte_pubblicate:
– “80:80”
stato: presente
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
$ ansible my_playbook.yml
GIOCA [baptiste-donaux.fr] ***************************************** * ***********
ATTIVITÀ [configurazione] ********************************************** ********************
ok: [baptiste-donaux.fr]
COMPITO [Aggiungi chiave APT per Repository Docker] ****************************************
ok: [baptiste-donaux.fr]
ATTIVITÀ [Aggiungi repository Docker APT] ******************************************* ****
ok: [baptiste-donaux.fr]
ATTIVITÀ [Aggiorna cache APT con nuovo repository] ************************************
ok: [baptiste-donaux.fr]
COMPITO [Installa il pacchetto docker-engine if non lo fanon esiste] ***********************
ok: [baptiste-donaux.fr]
COMPITO [Installa Python] ********************************************* *************
ok: [baptiste-donaux.fr]
ATTIVITÀ [Installa PIP] ********************************************* ****************
ok: [baptiste-donaux.fr]
COMPITO [dipendenza docker-py] ******************************************* ********
ok: [baptiste-donaux.fr]
COMPITO [Nginx Image Pull] ******************************************** ****************
ok: [baptiste-donaux.fr]
ATTIVITÀ [Crea un contenitore Nginx] ******************************************* *****
ok: [baptiste-donaux.fr]
RIEPILOGO GIOCO************************************************ **********************
baptiste-donaux.fr: ok=10 modificato=0 irraggiungibile=0 fallito=0
|
E non è niente di più semplice. Oltre a eseguire uno scenario completo su un set di server, se uno di essi viene trovato in errore, un file .riprova verrà creato e riavviando il comando lo scenario riprenderà da dove era stato interrotto.
Ansible Galaxy e Vault
Galaxy e dove archiviare le tue mod
Ansible-Galaxy è un hub per condividere i tuoi moduli. Funziona un po' come Hub Docker per le immagini Docker.
Vault e come proteggere le informazioni sensibili
In alcuni casi, dovrai archiviare informazioni sensibili nei tuoi scenari (password, ecc.). Invece di memorizzare queste informazioni in testo semplice, puoi codificare/decodificare i suoi file.
Un piccolo esempio non guasta.
1
2
3
4
|
# my_playbook.yml
– host: localhost
compiti:
- conchiglia: sshpass -p "foo" scp -r /bar baz@localhost:/qux
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# Codifica il tuo file con Vault
$ansible-vault crittografa my_playbook.yml
Nuova password del Vault:
Conferma nuova password Vault:
Crittografia riuscita
# Visualizza il playbook codificato
$ gatto my_playbook.yml
$ANSIBLE_VAULT;1.1;AES256
34396264333338636331323838386331393664623065383463663661373436643764336536326662
6238626432373334356436613935306630376461633136650a316561316531323937633963643032
64643239616561653864346132356537656536313030656532373733316262663536396438383262
3463373265636232640a626364306666373665303633663630353132383764323530646438383737
31336163633631373162356339633739356461656130353533306137613436663333383137376366
62383533393262376362393565386133306432323266393034616331333932663266613739653538
36663666333938323961343231366266323430376234376363353662386366373061636434613763
35653139316465613562613834373434636238643661633434326661303438666233313732653338
3264
# Usa il playbook codificato senza prima decodificarlo
$ ansible-playbook my_playbook.yml –ask-vault-pass
Password della cassaforte:
...
|
Conclusione
Questo articolo si propone di presentare ansible e mostra come può semplificare le tue attività. Sentiti libero di fornire feedback, migliorare e/o correggere questo post.