Partie IV.

Ansible Réseau

Partie Ansible Réseau.

Ces documents sont fondés sur les Workshops sous License MIT du projet “github.com/network-automation/linklight” qui ont été adaptés et traduits de manière libre.

Mais on sera aussi curieux dans la consultation de la page officielle Ansible for Network Automation.

En dernière étape, la démarche vous invite à exploiter vos livres de jeu et rôles avec Ansible Tower ou Ansible AWX.

    Prérequis Lab Ansible automation réseau

    1. Installation de GNS3 Server sur un serveur (distant) Installation de GNS3 Server sur un serveur (distant). cd /tmp curl https://raw.githubusercontent.com/GNS3/gns3-server/master/scripts/remote-install.sh \ > gns3-remote-install.sh bash gns3-remote-install.sh --with-openvpn Il sera nécessaire de redémarrer matériellement le serveur. On charge une topologie mise à disposition et on attaque la gestion directement à partir de l’hôte de virtualisation ou à partir d’un hôte dans la topologie. 2. Préparation des périphériques Les noeuds gérés, s’ils sont en Linux/Unix, doivent disposer de Python 2.

    Explorer l'environnement de lab

    Étape 1 : Dossier de travail Créer si n’est déjà fait le dossier networking-workshop et s’y rendre. mkdir networking-workshop cd networking-workshop/ Étape 2 : Vérification de la configuration Lancer la commande ansible avec l’option --version pour examiner sa configuration. ansible --versionansible 2.6.2 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.

    Écrire un premier playbook

    1. Rappel théoriques Maintenant que vous en savez assez sur le fichier d’inventaire et les variables de groupe et d’hôte, nous allons écrire notre premier livre de jeu. Définition d’un premier livre de jeu Le livre de jeu est une liste (de jeux) qui commence par trois “dash” : --- La cible d’un jeu est défini par la directive hosts qui désigne soit : un hôte ou un groupe le groupe all l’hôte implicite localhost Il est utile définir le plugin de connexion : connection : network_cli La collection de facts est générée par le module ios_facts.

    Documentation des modules, enregistrer les sorties et tags

    1. Théorie Modules Les modules sont ces pièces de code qui font le job d’Ansible, ils sont exécutés pour chaque tâche d’un livre de jeu. Il sont typiquement écrits en Python (mais pas seulement). Il sont idempotent (pas nécessairement leur usage). Les modules prennent les entrées des utilisateurs en paramètres (arguments). Modules pour l’automation du réseau Les modules Ansible pour l’automation du réseau sont désignés par le constructeur de l’OS suivi d’un nom de module :

    Mise à jour de la configuration

    1. Théorie Le module *_config Les modules *_config spécifiques aux fabricants de solutions permettent notamment de mettre à jour la configuration des périphériques du réseau. Il existe plusieurs manières d’utiliser le module *_config. Pour placer des commandes de configuration : tasks: - name: ENSURE THAT THE DESIRED SNMP STRINGS ARE PRESENT ios_config: commands: - snmp-server community ansible-public RO - snmp-server community ansible-private RW - snmp-server community ansible-test RO Pour placer un fichier de configuration :

    Sauvegarder et restaurer la configuration d'un routeur

    1. Théorie Sauvegarder la configuration d’un routeur --- - name: BACKUP ROUTER CONFIGURATIONS hosts: cisco connection: network_cli gather_facts: no tasks: - name: BACKUP THE CONFIG ios_config: backup: yes register: config_output Le paramètre backup du module ios_config déclenche la sauvegarde de la configuration et l’enregistre dans le dossier local backup/. Nettoyer la configuration sauvegardée La configuration rapratriée commencera par deux lignes qui doivent être enlevées : Building configuration... Current configuration with default configurations exposed : 393416 bytes Le module lineinfile est celui qui permet de manipuler les lignes de texte des fichiers à la manière de sed.

    Introduction aux modèles Jinja2

    1. Théorie Modèles Ansible intègre nativement le “template engine” Jinja2 (un logiciel qui met en forme des données) Les modèles de données sont transformés en configuration de périphériques Les sorties des périphériques peuvent être transformées en documentation Jinja2 permet aux utilisateurs de manipuler des variables, d’y appliquer une logique conditionnelle et répétitive et donc d’étendre la programmabilté dans l’automation du réseau. Source de l’image : TempEngGen015.svg Utiliser des modèles pour générer une configuration Un modèle de données en YAML :

    Documentation dynamique

    1. Données structurées et rôles Des données structurées à partir des commandes show A partir de cette commande show interface : rtr2#show interfaces GigabitEthernet1 is up, line protocol is up Hardware is CSR vNIC, address is 0e56.1bf5.5ee2 (bia 0e56.1bf5.5ee2) Internet address is 172.17.16.140/16 MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, loopback not set Keepalive set (10 sec) Full Duplex, 1000Mbps, link type is auto, media type is Virtual output flow-control is unsupported, input flow-control is unsupported ARP type: ARPA, ARP Timeout 04:00:00 .

    Ansible Cisco CCNA

    https://github.com/goffinet/ansible-ccna-lab/blob/master/README.md 1. Résumé On trouvera ici des livres de jeu Ansible inspirés des topologies et des sujets du Cisco CCNA (et plus) pour GNS3 (Cisco IOSv). Leur but est uniquement pédagogique visant à lier les compétences de gestion du réseau du CCNA avec un outil IaC (“Infrastructure as Code”) de gestion des configurations (“Configuration Management”) comme Ansible et un gestionnaire de source (“Source Control Management”) comme Git/Github. Il s’agit aussi d’avoir sous la main un outil souple pour créer et gérer des scénarios de labs qui demandent une préconfiguration ou des changements de configuration (afin de créer des erreurs à corriger manuellement par exemple).