Dernière modification le 23 mars 2020
En 2016 j’ai écrit le module alcatel_aos pour Netmiko. Depuis, ce module Python fonctionne pour AOS6 et AOS8 et il est maintenu par Kirk Byers lorsque des changements majeurs sont effectués sur la librairie Netmiko.
Lorsqu’il s’agit de faire appel à Netmiko pour réaliser de l’automatisation sur OmniSwitch ALE, j’y adjoins le framework d’automatisation Nornir écrit en Python.
Fichier de configuration Nornir :
--- core: num_workers: 100 inventory: plugin: nornir.plugins.inventory.simple.SimpleInventory options: host_file: 'inventory/hosts.yaml' group_file: 'inventory/groups.yaml' defaults_file: 'inventory/defaults.yaml'
Fichiers inventory/ :
--- ale_lab_1: hostname: 192.168.1.24 port: 22 groups: - lab ale_lab_2: hostname: 192.168.1.23 port: 22 groups: - lab
--- lab: platform: 'alcatel_aos' data: radius: - name: rad1 ip: 192.168.1.100 - name: rad2 ip: 192.168.1.110
--- username: 'admin' password: 'switch'
Fichier templates/ :
{% for rad in host['radius'] %} aaa radius-server "{{ rad.name }}" host {{ rad.ip }} key radiuskey retransmit 3 timeout 2 auth-port 1812 acct-port 1813 {% endfor %}
Fichiers scripts :
#!/usr/bin/env python3 import nornir import nornir.plugins.tasks.networking as nptn import nornir.plugins.functions.text as npft import sys # Limit traceback details sys.tracebacklimit = 0 def get_facts(): nr = nornir.InitNornir(config_file='config.yaml') npft.print_title('Playbook to display running-directory status') result = nr.run( task=nptn.netmiko_send_command, command_string="show running-directory" ) npft.print_result(result) if __name__ == "__main__": get_facts()
#!/usr/bin/env python3 import nornir import nornir.plugins.tasks.networking as nptn import nornir.plugins.tasks.text as nptt import nornir.plugins.functions.text as npft import sys # Limit traceback details sys.tracebacklimit = 0 def radius_configuration(task): # Transform inventory data to configuration via a template file r = task.run(task=nptt.template_file, name='Radius Configuration', template='radius.j2', path=f'templates/') # Save the compiled configuration into a host variable task.host['config'] = r.result # Deploy that configuration to the device using Netmiko task.run(task=nptn.netmiko_send_config, name='Loading Radius Configuration on the device', config_commands=task.host['config']) def config_radius(): nr = nornir.InitNornir(config_file='config.yaml') npft.print_title('Playbook to configure the Radius IPs') result = nr.run(task=radius_configuration) npft.print_result(result) if __name__ == "__main__": config_radius()
#!/usr/bin/env python3 import nornir import nornir.plugins.tasks.networking as nptn import nornir.plugins.functions.text as npft import sys # Limit traceback details sys.tracebacklimit = 0 def config_save(): nr = nornir.InitNornir(config_file='config.yaml') # Save running configuration using Netmiko npft.print_title('Playbook to save running configuration') result = nr.run(task=nptn.netmiko_save_config) npft.print_result(result) if __name__ == "__main__": config_save()