Post

Ansible Cheatsheet

Un aide-mémoire Ansible sur la structure des répertoires, l’inventaire, les playbooks, les variables, les filtres et les modules courants.

Ansible Cheatsheet

Informations sur Ansible

Structure des répertoires :

  • ansible.cfg : fichier de configuration général
  • playbook.yml : fichier de playbook
  • group_vars : répertoire contenant les fichiers YAML des variables de groupe
  • host_vars : répertoire contenant les fichiers YAML des variables d’hôte
  • inventory.yml : fichier d’inventaire des hôtes (YAML)
  • templates : répertoire des modèles Jinja2

Dépannage :

  • Tester la connexion aux hôtes d’un groupe de l’inventaire : command: ansible routers -m ping -i inventory.yml
  • Lister les modules d’une collection : command: ansible-doc -l | grep cisco.ios
  • Afficher la documentation d’un module : command: ansible-doc ios_bgp

Inventaire :

1
2
3
4
5
6
7
8
9
10
  - group_A:
      children:
        subgroup_A:
          hosts:
            host_1:
              ansible_host: 192.168.1.2
            host_2:
              ansible_host: 192.168.1.3
            host_3:
              ansible_host: 192.168.1.4

Représentation graphique de l’inventaire :

command: ansible-inventory –graph -i inventory.yml

Liste complète des hôtes de l’inventaire et de leurs variables :

command: ansible-inventory –list -i inventory.yml

Afficher les détails d’un hôte :

command: ansible-inventory –host R1

Playbook :

  • Exécuter un playbook : command: ansible-playbook playbook.yml
  • Options de lancement : -i : choisir le fichier d’inventaire -C : effectuer une vérification (aucune modification) -M : spécifier le module -c : spécifier le type de connexion -u : spécifier l’utilisateur -k : spécifier le mot de passe -e : fournir un fichier de variables –list-hosts : afficher les hôtes ciblés (aucune modification) –ask-vault-password : demander le mot de passe du coffre

Variables :

Connexion :

1
2
3
4
5
ansible_connection: local or network_cli
ansible_network_os: platform (Cisco -> ios)
ansible_user: SSH username
ansible_ssh_pass: SSH password
ansible_ssh_private_key_file: SSH key file

Exécution :

1
2
3
ansible_command_timeout: execution timeout in seconds
ansible_become: privilege escalation (yes or no)
ansible_become_method: enable

Filtres :

  • Convertir des données compatibles en JSON ou YAML : example: “{{ output | to_json }}” “{{ output | to_yaml }}”
  • Analyser la sortie d’une commande avec un modèle textfsm : example: “{{ output | ansible.netcommon.parse_cli_textfsm(‘template’) }}”
  • Rechercher une correspondance avec un motif regex : example: “{{ output | regex_search(‘[\d\w]{4}.[\d\D]{4}.[\d\D]{4}’) }}”
  • Lister toutes les occurrences correspondant à un motif regex : example: “{{ output | regex_findall(‘GigabitEthernet0\/0\/[0-9]{1,2}’) }}”

Motifs regex courants :

1
2
3
4
5
6
7
8
9
10
11
.: match any single character
^: match beginning of string
$: match end of string
|: equivalent to OR
[]: match any character in set
[^ ]: match any character not in set
(): capture group
{n}: match exactly n occurrences
\s: match whitespace
\d: match digit
\w: match word character

Modules :

#### ios_config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    - name: top level configuration
      ios_config:
        lines: hostname my_device

    - name: configure interface 
      ios_config:
        lines:
          - description LAN
          - ip address 192.168.1.254 255.255.255.0
        parents: interface GigabitEthernet0/0

    - name: save running to startup when modified
      ios_config:
        save_when: modified

#### ios_command:

1
2
3
4
5
    - name: run commands
      ios_command:
        commands:
          - show version
          - show vlans

#### li_parse:

1
2
3
4
5
6
    - name: run command and parse with ntc_templates
      ansible.utils.cli_parse:
        command: "show version"
        parser:
          name: ansible.netcommon.ntc_templates
      register: output

#### debug:

1
2
3
4
    - name: display result
      debug:
        msg: "{{ output }}

Cet article est sous licence CC BY 4.0 par l'auteur.