comment récupérer une certaine information d’un fichier de configuration (routeur IOS de Cisco par exemple) et la mettre dans un fichier Excel en vue d’un traitement plus avancé
ce traitement peut être simplement de comparer cette information de plusieurs sources (du routeur et du pare-feu, par exemple)
à titre d’exemple nous souhaitons vérifier que les sous-réseaux IP configurés au niveau du routeur correspondent bel et bien à des objets réseaux configurés au niveau du pare-feu
une première méthode
une première méthode est 1) de copier le bloc ip de chaque interface dans le fichier de configuration initialement sous cette forme :
- interface [name]
- description [desctiption]
- vrf forwarding [vrf name]
- ip address [subnet] [mask]
2) de le coller dans un nouveau fichier texte et le formater sous ce nouveau format (CSV) :
- interface,description,vrf forwarding,ip address
- [name],[description], [vrf],[ip] [mask]
- [name2],[description2], [vrf2],[ip2] [mask2]
- …
3) et le charger dans Excel en allant à l’onglet “Données”, puis “obtenir des données”, puis “à partir d’un fichier txt/CSV”, le résultat est le suivant :
si nous devons ajouter une nouvelle variable, par exemple :
- hostname [site]
il suffit dans 2) d’ajouter le mot clé à liste existante, l’automatisation de 3) permet de générer automatiquement le nouveau tableau
mais une action manuelle est nécessaire à l’étape 1) (extraire le bloc d’information d’intérêt) et 2) (le formatage de ce bloc). Si nous devons traiter 100 interfaces, alors il nous faudrait 2*100 réitérations des étapes 1) et 2)
une 2ème méthode
comment automatiser l’étape 2) de notre traitement précédent?
nous proposons 2b) d’utiliser le convertisseur de données d’Excel pour ce faire et le résultat (sans traitement au préalable de notre liste précédente) ressemble à celui-là:
ce qui ne correspond pas exactement au résultat en deux colonnes (séparées par un espace) que nous pourrions transformer en ligne et ensuite, 2c) concaténer pour obtenir le format CSV…
il nous faut pour ce faire, 2a) modifier le mot clé “vrf forwarding” en “vrf_forwarding”, la valeur “[subnet] [mask]” en “[subnet][mask]”, sans espace, par exemple, par simple recherche & remplacer (all) dans le fichier texte de travail
et ajouter un autre séparateur, la virgule, par exemple, à ces nouveaux mots clés au cas où les champs de valeur contiennent des espaces…
dans notre exemple, nous nous pouvons pas supprimer “forwarding” du mot clé “vrf forwarding” parce que cela prêterait à confusion en cherchant la ligne dans le fichier de configuration, première source de l’information dans notre fichier de travail
la concaténation fait le reste pour transformer les colonnes en lignes au format CSV que nous copions dans le fichier texte de travail de l’étape 3) :
dans notre exemple nous avons placé la formule de concaténation dans la ligne 7 de chaque colonne (il suffit de le faire pour la colonne A et tirer vers les autres colonnes, Excel incrémente automatiquement l’indice de la colonne),
2d) nous copions ensuite la valeur (et non la formule) de la ligne 7 dans la ligne 9 et dans la ligne 11, 2e) nous collons en transposant (pour transformer la ligne 9 en autant de lignes à partir de la 11, nous permettant de regrouper toutes les lignes au format CSV dans le fichier texte de travail de l’étape 3).
dans cette méthode, nous concaténons automatiquement et moyennant une simple opération de : copie collée spécial (de valeurs uniquement) de la ligne 7 dans la ligne 9, et transposition de cette dernière à partir de la ligne 11, nous obtenons notre liste.
3ème méthode
comment ajouter automatiquement les interfaces (le bloc d’information correspondant)? ça veut dire : aller chercher dans le fichier texte de configuration d’origine : le hostname, les interfaces IP de l’étape 1), et les renseigner dans les colonnes correspondantes pour générer le listing d’entrée CSV, résultat de l’étape 2), automatiquement, en limitant davantage toute intervention manuelle.
il peut être question de plusieurs fichiers de config (TXT), dans ce cas, Excel permet d’obtenir les données de tous le dossier de ces fichiers en les intégrant et en distinguant dans le tableau qu’il génère, l’origine de chaque ligne :
dans la colonne 2 (par exemple) du tableau généré nous effectuer une recherche du texte “interface Vlan” à l’aide de la fonction =CHERCHE() et filtrons sur la valeur 1 (qui indique un match), nous copions ce résultat qui correspond à la liste de nos interface ip…
si nous devons extraire le nom de l’interface et sa configuration vrf correspondante, nous pourrions procéder comme suit : dans la colonne 3 effectuer la recherche sur le texte “ip vrf forwarding”, dans la colonne 4 effectuer un teste logique (OU) sur le résultat des colonnes 2 et 3 : =OU(ESTNUM([@Column2]);ESTNUM([@Column3]))
après avoir filtré sur la valeur VRAI, nous obtenons le résultat souhaité de toutes les interfaces ip et leur appartenance éventuelle à une vrf donnée:
nous procédons ensuite à notre concaténation CONCAT() et arrangeant les cellules à l’aide de la fonction INDEX() pour obtenir le résultat suivant :
nous n’avons plus besoin de l’opération de transposition de la méthode précédente.
dans cette nouvelle méthode, ce que nous avons effectué manuellement pour récupérer notre liste CSV :
- l’exportation de tous les fichiers de configuration sous format TXT dans Excel
- la copie collée du résultat de filtrage (après recherche des mot clés) sur les valeurs VRAI dans la deuxième feuille de travail de ré indexage
4ème méthode : macro… ou la plus élégante!
quelques prérequis à cette étape :
- un fichier Excel en mode support de macro
- l’activation du mode développeur
- et un peu de patience
tout d’abord nous disposons des données de travail en dû format dans la Feuil2 (donnée de travail) et nous dédions la Feuil1 (commandes) aux commandes et le descrip
tif de notre programme
il y a moyen de récupérer les données d’un seul fichier ou d’un dossier contenant les fichier(s). c’est plus élégant que de copier coller directement le contenu des fichiers TXT dans l’Excel
avec la fonction Dir() nous listons les fichiers à importer ou plutôt copions : 1) nous les ouvrons (Open()) dans Excel, 2) copions dans la Feuil2 de notre Workbook de travail
à ce stade il y a deux possibilité d’import :
- un seul fichier qu’on aurait créer et qui agrège l’information de tous les fichiers au préalable dans le dossier d’input
- tous les fichiers dans Excel et c’est le programme qui les copie l’un après l’autre dans la Feuil2
dans le cas de la première option : la CMD suivante est d’une grande utilité :
le fichier générer merged.txt est le seul importé par le programme dans le dossier d’entrée (ou d’import spécifié)
à partir de là, dans une 2ème étape que nous lui affectant le nom de fonction suivant : trim(), il s’agit de résoudre tous les problèmes de formes liés à cette importation :
- détection et suppression de champ inutiles : détection de chaînes de caractère qui commencent par un espace, suppression de certains espaces, suppressions de certains caractères spéciaux, etc.
- réécriture de certains champs
- optimisations du nombre de ligne (pour rester dans la capacité de traitement du programme) : actuellement le programme ne supporte en entrée (au niveau de la Feuil2) que 25000 entrée!
dans une dernière étape, que nous lui affectons le nom de fonction suivant : lkup(), nous effectuons notre recherche des variables d’intérêt et les disposons dans le format souhaité en lignes et colonnes
l’architecture d’un telle programme peut être décrite de la façon suivante :
Options plus avancées de traitement
notre programme évolue et la nouvelle architecture est la suivante :
avant d’importer les fichiers TXT de configuration, nous les rassemblons dans le même fichier TXT et supprimons les lignes qui ne sont pas utilise à l’aide du .bat qui appelle la fonction findstr() (dans la commande type()) des manières suivantes :
- findstr /v /C:” name”>
- findstr /v /C:”exemple de ligne à chercher” | findstr /v “name1 name2”>
- findstr /v /C:”exemple de ligne à chercher” | findstr /v /C:” name”> C:\Conf\cleaned.txt
l’avantage de ce travail préparatoire est de permettre de réduire la charge de calcul nécessaire au VBA
pour mieux présenter encore le TXT final de travail, Notepad++ est d’une grande utilité (rien à avoir avec la version de base de bloc-note sur WIN11) pour la suppression des lignes vides ou ayant un blanc qui traînent par exemple :
aussi le Notepad++ permet de rafraîchir les fichiers ouverts au fur et à mesure des modification. dans d’autres éditeurs il faudrait sauvegarder le fichier, le fermer, le traiter avant de pouvoir le ré ouvrir pour checker le résultat du traitement… (je parle du bloc-note par exemple ;))