Ansible: les commandes ...

Voici quelques exemples d'utilisation des différentes commandes disponibles avec Ansible

Etiquettes: 

Ansible: la commande ping

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.

Etiquettes: 

Ansible: la commande setup

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
}

Etiquettes: 

Ansible: la commande "command"

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

 

Etiquettes: 

Ansible: la commande shell

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!

Etiquettes: