Padroneggiare i Comandi Ad-Hoc Essenziali per Rapidi Task Ansible
Usa i comandi ad-hoc di Ansible per controlli rapidi, correzioni una tantum, modifiche ai file e raccolta di informazioni senza scrivere un playbook.
Padroneggiare i Comandi Ad-Hoc Essenziali per Attività Rapide con Ansible
I comandi ad-hoc di Ansible ti permettono di eseguire una rapida attività su un host o su un intero gruppo. Sono utili quando devi testare l'accesso, controllare lo spazio su disco, copiare un file, riavviare un servizio o ispezionare i fatti senza prima scrivere un playbook.
Non sostituiscono i playbook. Usali per lavori immediati, poi sposta le attività ripetute o rischiose nell'automazione con controllo di versione.
Struttura Base del Comando
Un comando ad-hoc segue questa forma:
ansible <pattern> -m <module_name> -a "<module_arguments>" [options]
Il pattern host seleziona i target dell'inventario. Il modulo decide cosa fa Ansible. Gli argomenti passano valori specifici del modulo.
Le opzioni comuni includono:
-i <inventory>o--inventory <inventory>: usa un file di inventario o una fonte di inventario specifica.-u <user>o--user <user>: connettiti come utente remoto specifico.-bo--become: usa l'elevazione dei privilegi, di solito sudo.-ko--ask-pass: chiedi la password SSH.-Ko--ask-become-pass: chiedi la password sudo.--limit <subset>: restringe ulteriormente gli host selezionati.
Se non passi -i, Ansible usa il suo inventario configurato. Su molti sistemi è /etc/ansible/hosts, ma il tuo ansible.cfg può cambiarlo.
Testare l'Accesso con ping
Il modulo ping non invia pacchetti ICMP echo. Si connette attraverso il trasporto normale di Ansible, esegue un piccolo modulo sul target e si aspetta pong come risposta.
ansible all -m ping
Per un gruppo:
ansible webservers -m ping
Un risultato positivo appare così:
web01.example.com | SUCCESS => {
"changed": false,
"ping": "pong"
}
Se fallisce, correggi inventario, DNS, chiavi SSH, utente remoto, impostazioni sudo o disponibilità di Python prima di risolvere problemi di attività di livello superiore.
Eseguire Comandi Semplici con command
Il modulo command esegue un programma direttamente sull'host remoto. Non invoca una shell, quindi pipe, reindirizzamenti, espansione di glob e espansione di $VARIABLE non funzionano come farebbero nel tuo terminale.
Controlla l'uptime:
ansible webservers -m command -a "uptime"
Controlla l'uso del disco:
ansible all -m command -a "df -h"
Elenca una directory protetta con sudo:
ansible dbservers -m command -a "ls -l /var/log" --become
Usa command prima quando non hai bisogno delle funzionalità della shell. È più facile da gestire ed evita interpretazioni accidentali della shell.
Usa shell Solo Quando Servono le Funzionalità della Shell
Il modulo shell esegue il comando attraverso una shell sull'host remoto. Usalo per pipe, reindirizzamenti, espansione di variabili e condizionali della shell.
Trova le directory di log più grandi:
ansible databases -m shell -a "du -sh /var/log/* | sort -rh | head -n 5"
Controlla una variabile d'ambiente remota:
ansible all -m shell -a "printf '%s\n' \"$PATH\""
Fai attenzione con l'input dinamico. Se i valori forniti dall'utente vengono inseriti in un comando shell senza virgolette e validazione, puoi creare un bug di injection di comandi.
Per le modifiche ai file, preferisci un modulo specifico invece del reindirizzamento della shell. Ad esempio, aggiungi una riga gestita con lineinfile:
ansible webservers -m lineinfile -a "path=/etc/app/app.conf line='feature_enabled=true' create=yes" --become
Questo è più sicuro e ripetibile che aggiungere con echo ... >> file.
Copiare File con copy
Il modulo copy trasferisce file dal tuo nodo di controllo agli host gestiti.
ansible webservers -m copy -a "src=./myscript.sh dest=/tmp/myscript.sh mode=0755"
Copia un file di configurazione che richiede la proprietà di root:
ansible all -m copy -a "src=./app.conf dest=/etc/app/app.conf owner=root group=root mode=0644" --become
Se la destinazione ha già lo stesso contenuto e metadati, Ansible segnala nessuna modifica.
Gestire i Percorsi con file
Usa il modulo file per creare directory, rimuovere percorsi, impostare proprietà, impostare permessi o creare collegamenti simbolici.
Crea una directory:
ansible appservers -m file -a "path=/opt/my_app state=directory mode=0755 owner=app group=app" --become
Rimuovi un vecchio file:
ansible host1 -m file -a "path=/tmp/old_file.txt state=absent"
Crea un collegamento simbolico:
ansible appservers -m file -a "src=/opt/my_app/releases/current dest=/opt/my_app/current state=link"
Raccogliere Fatti con setup
Il modulo setup raccoglie fatti su un host, inclusi OS, rete, CPU, memoria e dettagli del dispositivo.
Raccogli tutti i fatti da un host:
ansible webserver1 -m setup
Filtra i fatti quando hai bisogno solo di una piccola parte:
ansible all -m setup -a "filter=ansible_distribution*"
L'output può essere grande, quindi il filtraggio mantiene la risoluzione dei problemi leggibile.
Scegliere tra Comandi Ad-Hoc e Playbook
Usa i comandi ad-hoc per controlli rapidi e attività una tantum:
- Testa la connettività con
ping. - Controlla lo stato con
command. - Copia un file noto con
copy. - Crea o rimuovi un percorso con
file. - Raccogli fatti durante la risoluzione dei problemi.
Usa i playbook quando l'attività è ripetuta, multi-step, revisionata dai colleghi o abbastanza rischiosa da volere controllo di versione e struttura prevedibile.
Controlli di Sicurezza Prima di Eseguire
Controlla il pattern host prima di eseguire qualsiasi cosa distruttiva:
ansible webservers --list-hosts
Usa --limit quando vuoi un raggio d'azione più piccolo:
ansible all --limit web01.example.com -m ping
Ricorda che command e shell non sono automaticamente idempotenti. Un comando come useradd deploy potrebbe fallire al secondo tentativo a meno che non lo scrivi in modo difensivo. Moduli come user, file, copy e lineinfile di solito ti danno un comportamento ripetuto più sicuro.
Conclusione
I comandi ad-hoc di Ansible sono ottimi per operazioni rapide e mirate. Inizia con ping, usa command per controlli semplici, riserva shell per la sintassi reale della shell e preferisci moduli come copy, file, lineinfile e setup quando sono adatti al lavoro.