Ansible ALE Galaxy

Dernière modification le 28 mars 2020

Depuis plusieurs années, il y a une absence de module réseau pour Alcatel-Lucent Enterprise dans Ansible. Lorsque j’avais travaillé sur le module alcatel_aos pour Netmiko, l’idée était de permettre de faire de l’automatisation en utilisant le langage Python. L’adjonction du framework Nornir offrait une structuration du code qui reprenait certaines logiques d’Ansible. Trois ans plus tard, force est de constater qu’une grande majorité de personnes partent plus facilement sur le chemin du « Human-driven Automation » avec un outil comme Ansible et son pseudo langage en YAML qu’avec un langage direct comme Python qui reste réservé aux personnes plus expérimentées dans le développement.

C’est pour combler ce manque que j’ai écrit les modules ale_aos pour Ansible, en restant le plus générique possible afin de laisser plus de souplesse dans l’utilisation de ces modules. Ils sont disponibles dans la Galaxy Ansible, et attendent vos tests et propositions d’amélioration, le dépôt officiel des modules de la Galaxy étant dans un Github public. La licence utilisée permet toutes les améliorations sur la branche master des Network Modules, 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).

  • ale_aos_ping : Vérifie la connectivité en SSH à un équipement.
  • 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.
  • 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 contenant une commande par ligne.

Pour utiliser ces modules, il convient de partir d’un environnement virtuel Python pour y installer ansible en version 2.9.2 minimum et netmiko en version 2.4.2 minimum. Il est fort probable que tout fonctionne avec des versions antérieures mais ce sont mes versions de développement…

[defaults]
inventory = ./hosts
host_key_checking = False
roles_path = roles.galaxy:roles
stdout_callback = yaml
[ale]
192.168.1.23
192.168.1.24

[ale:vars]
login=admin
password=switch
pip install ansible
pip install netmiko
ansible-galaxy install gmoisio.ale_aos
---
- name: This is a test for ale_aos_ping module
  hosts: ale
  connection: local
  gather_facts: no
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_ping Python module
      ale_aos_ping: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
---
- name: This is a test for ale_aos_command module
  hosts: ale
  connection: local
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_command Python module
      ale_aos_command: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
        command: show running-directory
        search: "Running Configuration    : SYNCHRONIZED"
---
- name: This is a test for ale_aos_command module
  hosts: ale
  connection: local
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_command Python module
      ale_aos_command: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
        command: show system
      register: uptime
    - name: Print uptime
      debug:
        msg: "{{ uptime.output | regex_search('Up Time:(.+?)seconds') }}"
---
- name: This is a test for ale_aos_command module
  hosts: ale
  connection: local
  gather_facts: no
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_command to get full configuration from switch
      ale_aos_command: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
        timing: True
        command: show configuration snapshot all
      register: configuration
    - name: Print configuration
      debug:
        msg: "{{ configuration.output }}"
    - name: Save configuration to file
      copy:
        content: "{{ configuration.output }}"
        dest: "{{ inventory_hostname }}_{{ '%Y-%m-%d_%H:%M:%S' | strftime }}.conf"
      when: configuration.output
---
- name: This is a test for ale_aos_config module
  hosts: ale
  connection: local
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_config Python module
      ale_aos_config: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
        file: commands.txt
vlan 100 enable name test1
vlan 200 enable name test2
---
- name: This is a test for ale_aos_config module
  hosts: ale
  connection: local
  roles:
    - gmoisio.ale_aos
  vars:
    ansible_python_interpreter: "python"
  tasks:
    - name: Test ale_aos_config Python module
      ale_aos_config: 
        host: "{{ inventory_hostname }}"
        username: "{{ login }}"
        password: "{{ password }}"
        commands:
          - vlan 100 enable name test1
          - vlan 200 enable name test2
Alcatel-Lucent Enterprise Ansible Galaxy
Alcatel-Lucent Enterprise Ansible Galaxy – ALE Web Site