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…