Voici quelques exemples d'utilisation des différentes commandes disponibles avec Ansible
La première commande Ansible que nous allons utiliser est la commande ping.
La documentation Ansible en ligne
Cette commande va permettre de tester si tous les serveurs sont accessibles et disponibles.
L'option -k permet de saisir le mot de passe pour se connecter aux serveurs. Le mot de passe doit être identique à tous les serveurs. Pour éviter cette manipulation, il est possible d'utiliser une connexion via une clé ssh.
L'option -m permet d'indique la commande à utiliser (ping).
Le mot clé all permet d'indiquer que nous souhaitons exécuter la commande sur tous les hosts présents dans le fichier inventaire.
$ ansible -k -m ping all
SSH password:
SERVER5 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER4 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER6 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Si je souhaite exécuter la commande ping uniquement sur mes hosts nginx
$ ansible -k -m ping nginx
SSH password:
SERVER2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SERVER1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Rien de plus simple.
La comande setup permet d'obtenir un inventaire exhaustif des hosts de l'inventaire.
La documentation Ansible en ligne
Attention, cette commande retourne un json de plus de 1000 lignes contenant toutes les informations du ou des hosts interrogés.
Chaque clé du json peut être utilisée dans les playbooks Ansible grâce à la variable ansible_facts.
$ ansible -m setup SERVER1
SERVER1 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.50.2.253",
"172.17.0.1"
],
...
"module_setup": true
},
"changed": false
}
Il est possible de filtrer directement sur un paramètre précis.
$ ansible -m setup SERVER1 -a "filter=ansible_processor_nproc"
SERVER1 | SUCCESS => {
"ansible_facts": {
"ansible_processor_nproc": 2
},
"changed": false
}
Pour info, tout comme les hosts présents dans le fichier inventaire, le serveur Ansible lui-même peut être utilisé grâce au mot clé localhost.
$ ansible -m setup localhost -a "filter=ansible_loadavg"
localhost | SUCCESS => {
"ansible_facts": {
"ansible_loadavg": {
"15m": 0.43,
"1m": 1.9,
"5m": 0.78
}
},
"changed": false
}
La commande command permet d'exécuter une commande simple.
Voir la commande shell pour des exécutions plus complexes.
La documentation Ansible en ligne
Le commande n'étant pas exécutée par l'interpréteur de commande, l'utilisation des caractères spéciaux tels que * < > | ; & ne fonctionne pas.
Quelques exemples:
$ ansible -m command -a "uptime" SERVER1
SERVER1 | CHANGED | rc=0 >>
13:37:18 up 12 days, 3:58, 2 users, load average: 0,16, 0,11, 0,25
$ ansible -m command -a "w" SERVER2
SERVER2 | CHANGED | rc=0 >>
13:41:22 up 12 days, 4:02, 2 users, load average: 0,10, 0,09, 0,20
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 10.99.17.12 lun.10 2.00s 1.31s 0.00s w
user pts/1 10.99.17.12 09:53 34:37 0.25s 0.01s sshd: user [priv]
$ SERVER3 -m command -a "date" SERVER3
localhost | CHANGED | rc=0 >>
mer. juin 5 13:55:55 CEST 2024
La commande shell permet d'exécuter des commandes simples mais aussi complexes et également sous forme de scripts.
Documentation Ansible en ligne
Exemples:
$ ansible -m shell -a 'find /var/log/nginx/ -type f -name "access.log*" | xargs stat --printf "%-80n%-15s%-35w\n"' nginx
SERVER2 | CHANGED | rc=0 >>
/var/log/nginx/access.log-20240116 7052050 2023-11-15 17:37:33.620096531 +0100
/var/log/nginx/access.log 10191 2024-01-16 09:28:20.137458998 +0100
SERVER1 | CHANGED | rc=0 >>
/var/log/nginx/access.log-20240116 2101711 2023-11-15 16:03:11.480149331 +0100
/var/log/nginx/access.log 22278 2024-01-16 09:29:28.959290202 +0100
$ ansible -m shell -a 'cat /etc/passwd | grep root' SERVER1:SERVER2
SERVER1 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
SERVER2 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
$ ansible -m shell -a 'echo "Hello world!" > /tmp/hello_world ; ls -l /tmp/hello_world ; cat /tmp/hello_world' localhost
localhost | CHANGED | rc=0 >>
-rw-r--r-- 1 user group 13 5 juin 14:20 /tmp/hello_world
Hello world!