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