Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 179 minIntermédiaire

Aide-mémoire : les commandes Ansible

Par Josselyn C., prof de BTS SIO. Mis à jour le .

À la fin de ce chapitre, tu sauras

  • retrouver vite une commande ou une option ;
  • choisir le module d'une tâche courante ;
  • comprendre les messages d'erreur fréquents.

Cet aide-mémoire rassemble les commandes, les options, les modules, les variables et les messages d'erreur d'Ansible les plus utiles, pour ansible-core 2.22. Il sert de référence rapide pendant un TP ou avant un oral ; chaque notion est expliquée dans le chapitre indiqué.

Installer et vérifier

CommandeEffet
pipx install ansible-coreInstaller ansible-core (chapitre 2)
pipx inject ansible-core pywinrmAjouter une bibliothèque à l'environnement d'Ansible
pipx upgrade ansible-coreMettre à jour
ansible --versionVersion, fichier de configuration lu, chemins
ansible-config dump --only-changedRéglages modifiés et leur origine
ansible-galaxy collection install -r requirements.yml -p collectionsInstaller les collections du projet
ansible-galaxy collection listCollections installées
ansible-galaxy role init roles/<nom>Créer le squelette d'un rôle

Inventaire et commandes ad hoc

CommandeEffet
ansible-inventory --graphArbre des groupes et des hôtes (chapitre 3)
ansible-inventory --host <hôte>Variables d'un hôte après fusion
ansible <motif> --list-hostsHôtes visés par un motif
ansible <motif> -m ansible.builtin.pingTester la connexion (chapitre 4)
ansible <motif> -a "<commande>"Lancer une commande (module command)
ansible <motif> -b -m <module> -a "<arguments>"Lancer un module avec élévation de privilèges
ansible <motif> -m ansible.builtin.setup -a "filter=ansible_distribution*"Lire des facts
ansible-doc <module>, ansible-doc -s <module>Documentation, squelette de tâche
ansible-doc -l <collection>Modules d'une collection

Motifs : all, groupe, hôte, a:b (union), a:!b (exclusion), a:&b (intersection), srv-* (joker), ~regex (expression régulière).

ansible-playbook

OptionEffet
--syntax-checkVérifier la syntaxe sans rien exécuter
--list-hosts, --list-tasks, --list-tagsAfficher hôtes, tâches, tags
-C, --checkSimuler (chapitre 5)
-D, --diffMontrer les différences dans les fichiers
-l <motif>, --limitRestreindre aux hôtes du motif
-t <tags>, --skip-tags <tags>Filtrer par tags
--start-at-task "<nom>"Commencer à une tâche
--stepConfirmer chaque tâche
-e "<var>=<valeur>", -e @fichier.ymlVariables supplémentaires (priorité maximale)
-b, -KÉlévation de privilèges, mot de passe d'élévation
-u <compte>, -kCompte SSH, mot de passe SSH
--ask-vault-pass, --vault-password-file <fichier>, --vault-id <id>@<source>Mot de passe du coffre (chapitre 9)
-f <n>Nombre d'hôtes en parallèle
--force-handlersExécuter les handlers notifiés même après un échec
-v à -vvvvNiveau de détail

Codes de retour : 0 succès, 2 au moins un hôte en échec, 4 au moins un hôte injoignable.

Les commandes d'Ansible Vault

CommandeEffet
ansible-vault create <fichier>Créer un fichier chiffré
ansible-vault encrypt <fichier>, decrypt <fichier>Chiffrer, déchiffrer
ansible-vault view <fichier>, edit <fichier>Lire, modifier
ansible-vault rekey <fichier>Changer le mot de passe
ansible-vault encrypt_string --stdin-name <variable>Chiffrer une valeur saisie au clavier

Structure d'un playbook

yaml
---
- name: Nom du play
  hosts: groupe
  become: true
  gather_facts: true
  vars:
    variable: valeur
  vars_files:
    - vars/fichier.yml

  pre_tasks: []          # avant les rôles
  roles:
    - nom_du_role
  tasks:
    - name: Nom de la tâche
      espace.collection.module:
        option: valeur
      register: resultat
      when: condition
      loop: "{{ liste }}"
      notify: Nom du handler
      tags: [etiquette]
  post_tasks: []         # après les tâches

  handlers:
    - name: Nom du handler
      espace.collection.module:
        option: valeur

Ordre d'exécution d'un play : collecte des facts, pre_tasks, rôles, tasks, post_tasks ; les handlers notifiés s'exécutent après les pre_tasks, après l'ensemble rôles et tasks, puis après les post_tasks.

Les modules les plus utilisés

LinuxWindowsRéseau et virtualisation
ansible.builtin.apt, dnf, packageansible.windows.win_featurecisco.ios.ios_facts
ansible.builtin.service, systemd_serviceansible.windows.win_servicecisco.ios.ios_vlans
ansible.builtin.copy, templateansible.windows.win_copy, win_templatecisco.ios.ios_l2_interfaces
ansible.builtin.fileansible.windows.win_filecisco.ios.ios_config
ansible.builtin.lineinfile, blockinfileansible.windows.win_lineinfilecisco.ios.ios_command
ansible.builtin.user, groupansible.windows.win_user, win_groupcommunity.proxmox.proxmox_kvm
ansible.posix.authorized_keymicrosoft.ad.user, group, oucommunity.proxmox.proxmox_disk
ansible.builtin.cronansible.windows.win_scheduled_taskpfsensible.core.pfsense_alias, pfsense_rule
community.general.ufw, ansible.posix.firewalldansible.windows.win_firewall_rule
ansible.builtin.rebootansible.windows.win_reboot, win_updates
ansible.builtin.command, shellansible.windows.win_powershell, win_command, win_shell
ansible.builtin.debug, set_fact, stat, wait_for, uriansible.windows.win_ping, win_stat

Variables de connexion

VariableLinuxWindows (WinRM)Cisco
ansible_connectionssh (par défaut)winrmansible.netcommon.network_cli
ansible_hostAdresse ou nomNom complet pour KerberosAdresse de gestion
ansible_port225986 (HTTPS)22
ansible_useransiblesvc-ansible@AD.SORBIER.EXAMPLEansible
ansible_password(clé SSH)"{{ vault_… }}""{{ vault_… }}"
Autresansible_become: trueansible_winrm_transport: kerberosansible_network_os: cisco.ios.ios

Priorité des variables (de la plus faible à la plus forte)

defaults d'un rôle → group_vars/all → group_vars/<groupe> → host_vars/<hôte> → facts → vars du play → vars_files → vars d'un rôle → variables de bloc et de tâche → set_fact et register → -e (chapitre 6).

Structure d'un rôle

text
roles/<nom>/
├── defaults/main.yml    variables réglables (priorité minimale)
├── vars/main.yml        variables internes (priorité élevée)
├── tasks/main.yml       tâches (point d'entrée)
├── handlers/main.yml    handlers
├── templates/           modèles Jinja2 (.j2)
├── files/               fichiers copiés tels quels
├── meta/main.yml        métadonnées et dépendances
└── README.md            documentation

Jinja2 en bref

ÉcritureSens
{{ variable }}Afficher une valeur
{% for x in liste %} … {% endfor %}Boucle (dans un template)
{% if condition %} … {% else %} … {% endif %}Condition (dans un template)
{{ v | default('x') }}Valeur de secours
{{ liste | join(', ') }}Joindre une liste
{{ v | bool }}, {{ v | int }}Convertir
{{ dict | dict2items }}Dictionnaire en liste de paires key, value
{{ liste | map(attribute='x') | list }}Extraire un champ
{{ v | quote }}Protéger pour le shell
{{ omit }}Retirer l'option de la tâche

Les messages d'erreur fréquents

Message (extrait)CauseCorrection
UNREACHABLE! … Permission denied (publickey)Clé SSH refuséeClé chargée, authorized_keys, compte
Host key verification failedEmpreinte inconnue ou changéePremière connexion à la main ; enquêter si elle a changé
Missing sudo passwordPas de NOPASSWD-K, ou corriger sudoers.d
couldn't resolve module/actionCollection absente, faute de nomansible-galaxy collection install -r requirements.yml
Unsupported parameters for (…) moduleOption mal nomméeansible-doc du module
mapping values are not allowed in this contextIndentation, : non protégéAligner, mettre entre guillemets
found character that cannot start any tokenTabulationEspaces uniquement
The task includes an option with an undefined variableVariable inconnueansible-inventory --host, orthographe
Conditionals must have a boolean resultCondition sur une chaîne (2.19 et suivantes)Booléen YAML ou | bool
Attempting to decrypt but no vault secrets foundMot de passe du coffre non fourni--ask-vault-pass ou --vault-password-file
winrm or requests is not installedpywinrm absentpipx inject ansible-core pywinrm
Server not found in Kerberos databaseConnexion Windows par adresse IPNom complet dans ansible_host
paramiko is not installedBibliothèque SSH réseau absentepipx inject ansible-core ansible-pylibssh

Chapitre terminé !

Tu as lu ce chapitre jusqu'au bout. Passe au suivant tant que c'est frais.

chapitres
–
de série
–
du cours
–
Cours suivant : SupervisionRevoir le sommaire du cours