Ansible Collection pour OmniSwitch

J’avais écrit les modules ale_aos pour Ansible disponibles dans la Galaxy pour permettre l’interaction entre Ansible et des OmniSwitchs en AOS6 et AOS8.

Au cours du cycle de développement d’Ansible 2.10, la communauté Ansible a migré avec succès la plupart des modules et plugins vers les collections. Les collections, ainsi que les modules et plugins qu’elles contiennent, peuvent désormais être développées, mises à jour et publiées indépendamment d’Ansible lui-même. Depuis Ansible 2.10, les utilisateurs de la communauté ont deux options: continuer à installer tout avec le package de communauté Ansible, ou installer ansible-base (2.10) ou ansible-core (2.11), puis ajouter les collections sélectionnées individuellement.

Afin de suivre l’évolution d’Ansible, j’ai porté le rôle ale_aos vers une collection en apportant quelques améliorations. La collection est disponible dans la Galaxy Ansible et attend vos tests et propositions d’améliorations, le dépôt officiel des modules étant dans le GitHub public. La licence utilisée permet toutes les améliorations des Network Modules sur la branche main, mais n’autorise pas la redistributions des forks, afin d’éviter la perte d’énergie (licence Attribution-NonCommercial-NoDerivatives 4.0 International / CC BY-NC-ND 4.0).

  • gmoisio.ale.ale_aos_ping : Vérifie la connectivité en SSH à un équipement.
  • gmoisio.ale.ale_aos_command : Exécute une commande sur un équipement. Il est possible de chercher une chaîne de caractères dans le résultat de la commande.
  • gmoisio.ale.ale_aos_config : Exécute un ensemble de commandes, généralement pour effectuer une configuration. L’ensemble des commandes peut être transmis sous la forme d’une liste ou sous la forme d’un fichier texte pouvant être généré via un template Jinja2.
  • gmoisio.ale.ale_aos_facts : Module expérimental permettant de récupérer des informations (vlans, interfaces et serveurs ntp) sous la forme d’un dictionnaire de listes pour effectuer des boucles.

Pour utiliser ces modules, il convient de partir d’un environnement virtuel Python pour y installer ansible-base (version 2.10) et netmiko en version 3.4.0 minimum. L’installation de la collection et de ses dépendance s’effectue à l’aide de la commande : ansible-galaxy collection install gmoisio.ale.

[defaults]
inventory = ./hosts
host_key_checking = False
interpreter_python = python
collections_paths = collections.galaxy
vault_password_file = ~/.vault
stdout_callback = yaml
[ale]
ale_lab_3 ansible_host=192.168.1.23
---
login: admin
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          .........
config_dir: configs

vlans:
  600: test600
  700: test700
pip install ansible-base
pip install netmiko
ansible-galaxy collection install gmoisio.ale
---
- name: This is a test for ale_aos_ping module
  hosts: ale
  connection: local
  gather_facts: no
  tasks:
    - name: Test ale_aos_ping Python module
      gmoisio.ale.ale_aos_ping: 
        host: "{{ ansible_host }}"
        username: "{{ login }}"
        password: "{{ password }}"
      register: result
    - ansible.builtin.debug: var=result
---
- name: This is a test for ale_aos_command module
  hosts: ale
  connection: local
  gather_facts: no
  tasks:
    - name: Test ale_aos_command Python module
      gmoisio.ale.ale_aos_command: 
        host: "{{ ansible_host }}"
        username: "{{ login }}"
        password: "{{ password }}"
        command: show running-directory
        search: "Running Configuration    : SYNCHRONIZED"
---
- name: This is a test for ale_aos_config module
  hosts: ale
  connection: local
  gather_facts: no
  tasks:
    - name: Test ale_aos_config Python module with a list
      gmoisio.ale.ale_aos_config: 
        host: "{{ ansible_host }}"
        username: "{{ login }}"
        password: "{{ password }}"
        commands:
          - vlan 400 admin-state enable name test400
          - vlan 500 admin-state enable name test500
        backup: true
    - name: Check if configs directory exists
      ansible.builtin.file:
        path: "{{ config_dir }}"
        state: directory
        mode: '0755'
    - name: Generate config file from template
      ansible.builtin.template:
        src: aos_config.j2
        dest: "{{ config_dir }}/{{ inventory_hostname }}-commands.txt"
    - name: Test ale_aos_config Python module with a file
      gmoisio.ale.ale_aos_config: 
        host: "{{ ansible_host }}"
        username: "{{ login }}"
        password: "{{ password }}"
        file: "{{ config_dir }}/{{ inventory_hostname }}-commands.txt"
        save: true
{% for vlan_id, vlan_name in vlans.items() %}
vlan {{ vlan_id }} admin-state enable name {{ vlan_name }}
{% endfor %}
---
- name: This is a test for ale_aos_facts module
  hosts: ale
  connection: local
  gather_facts: no
  tasks:
    - name: Test ale_aos_facts Python module
      gmoisio.ale.ale_aos_facts: 
        host: "{{ ansible_host }}"
        username: "{{ login }}"
        password: "{{ password }}"
        getters:
          - vlans
          - interfaces
          - ntp

A partir de maintenant, les évolutions seront concentrées sur la collection plutôt que sur le rôle…