
La prochaine version de Red Hat Ansible Engine 2.9 vous apportera des amĂ©liorations impressionnantes, dont certaines sont dĂ©crites dans cet article. Comme d'habitude, nous avons dĂ©veloppĂ© les amĂ©liorations d'Ansible Network de maniĂšre ouverte, avec le soutien de la communautĂ©. Rejoignez-nous â jetez un Ćil Ă et explorez le plan de dĂ©veloppement pour sur la page wiki pour .
Comme nous l'avons rĂ©cemment annoncĂ©, comprend dĂ©sormais Ansible Tower, Ansible Engine et tout le contenu d'Ansible Network. Actuellement, la plupart des principales plateformes rĂ©seau sont mises en Ćuvre via des modules Ansible. Par exemple :
- Arista EOS
- Cisco IOS
- Cisco IOS XR
- Cisco NX-OS
- Juniper Junos
- VyOS
La liste complÚte des plateformes entiÚrement supportées par Red Hat via un abonnement à Ansible Automation .
Ce que nous avons appris
Au cours des quatre derniÚres années, nous avons beaucoup appris sur le développement d'une plateforme d'automatisation réseau. Nous avons également appris que comment les artefacts de la plateforme sont utilisés dans des playbooks et des rÎles Ansible du point de vue des utilisateurs finaux. Voici ce que nous avons découvert :
- Les organisations automatisent les appareils de plusieurs fournisseurs, et non d'un seul.
- L'automatisation n'est pas uniquement un phénomÚne technique, mais aussi culturel.
- L'automatisation à grande échelle des réseaux est plus complexe qu'il n'y paraßt, en raison des principes architecturaux fondamentaux de la conception de l'automatisation.
Lorsque nous avons discuté de nos plans de développement à long terme il y a plus d'un an, nos clients corporate ont demandé ce qui suit :
- La collecte de faits doit ĂȘtre mieux standardisĂ©e et alignĂ©e sur le flux de travail d'automatisation pour tous les dispositifs.
- La mise Ă jour des configurations sur l'appareil doit Ă©galement ĂȘtre standardisĂ©e et alignĂ©e, afin que les modules Ansible traitent la deuxiĂšme partie du cycle aprĂšs la collecte des faits.
- Des mĂ©thodes strictes et maintenues sont nĂ©cessaires pour transformer la configuration de l'appareil en donnĂ©es structurĂ©es. Sur cette base, la source de vĂ©ritĂ© pourra ĂȘtre dĂ©placĂ©e depuis l'appareil rĂ©seau.
Améliorations des faits
La collecte des faits Ă partir des appareils rĂ©seau avec Ansible se fait souvent de maniĂšre alĂ©atoire. Les plateformes rĂ©seau sont Ă©quipĂ©es de capacitĂ©s de collecte de faits Ă des degrĂ©s divers, mais elles ont trĂšs peu â voire pas du tout â de fonctionnalitĂ©s pour analyser et normaliser la prĂ©sentation des donnĂ©es sous forme de paires clĂ©-valeur. Lisez Ken Celenza parle de la difficultĂ© et de la douleur d'analyser et de standardiser les donnĂ©es des faits.
Vous avez peut-ĂȘtre remarquĂ© comment nous avons travaillĂ© sur le rĂŽle Ansible Network Engine. Naturellement, aprĂšs 24 000 tĂ©lĂ©chargements, le rĂŽle Network Engine est rapidement devenu l'un des rĂŽles les plus populaires d'Ansible dans Ansible Galaxy pour les scripts d'automatisation rĂ©seau. Avant de transfĂ©rer beaucoup de cela dans Ansible 2.8, pour nous prĂ©parer Ă ce dont nous aurons besoin dans Ansible 2.9, ce rĂŽle Ansible a fourni le premier ensemble d'outils pour aider Ă parser les commandes, gĂ©rer les Ă©quipes et collecter des donnĂ©es pour les appareils rĂ©seau.
Si vous utilisez le Network Engine, c'est un moyen trĂšs efficace de collecter, analyser et standardiser les donnĂ©es des faits pour utilisation dans Ansible. Le point nĂ©gatif de ce rĂŽle est quâil faut crĂ©er un grand nombre de parseurs pour chaque plateforme et pour toute l'activitĂ© rĂ©seau. Pour comprendre Ă quel point il est difficile de crĂ©er, distribuer et maintenir des parseurs, jetez un Ćil Ă des gars de Cisco.
En résumé, pour une automatisation à grande échelle, il est trÚs important d'obtenir des faits des appareils et de les normaliser en paires clé-valeur, mais cela devient compliqué quand on a de nombreux fournisseurs et plateformes réseau.
Chaque module de faits rĂ©seau dans Ansible 2.9 peut dĂ©sormais analyser la configuration d'un appareil rĂ©seau et renvoyer des donnĂ©es structurĂ©es â sans bibliothĂšques supplĂ©mentaires, rĂŽles Ansible ou parseurs personnalisĂ©s.
à partir d'Ansible 2.9, à chaque mise à jour d'un module réseau, le module de faits est amélioré pour fournir des données sur cette section de la configuration. Cela signifie que le développement des faits et des modules se fait à un rythme commun, et qu'ils auront toujours une structure de données partagée.
La configuration des ressources sur un appareil rĂ©seau peut ĂȘtre extraite et transformĂ©e en donnĂ©es structurĂ©es de deux maniĂšres. Les deux mĂ©thodes permettent de collecter et de transformer une liste spĂ©cifique de ressources Ă l'aide du nouveau mot-clĂ© gather_network_resources. Les noms des ressources correspondent aux noms des modules, ce qui est trĂšs pratique.
Lors de la collecte des faits :
à l'aide du mot-clé gather_facts vous pouvez extraire la configuration actuelle de l'appareil au début du playbook, puis l'utiliser tout au long de celui-ci. Indiquez les ressources spécifiques à extraire de l'appareil.
- hĂŽtes : arista
module_defaults:
eos_facts:
gather_subset : min
gather_network_resources :
- interfaces
gather_facts : TrueVous avez peut-ĂȘtre remarquĂ© quelque chose de nouveau dans ces exemples, Ă savoir â gather_facts : true maintenant disponible pour la collecte native de faits pour les dispositifs rĂ©seau.
Utilisation directe du module des faits réseau :
- nom : collecter les faits de configuration des interfaces
eos_facts:
gather_subset : min
gather_network_resources :
- interfacesLe playbook retourne les faits suivants sur l'interface :
ansible_facts:
ansible_network_resources:
interfaces:
- enabled : true
name : Ethernet1
mtu : '1476'
- enabled : true
name : Loopback0
- enabled : true
name : Loopback1
- enabled : true
mtu : '1476'
name : Tunnel0
- enabled : true
name : Ethernet1
- enabled : true
name : Tunnel1
- enabled : true
name : Ethernet1Notez comment Ansible extrait la configuration native de l'appareil Arista et la transforme en données structurées à utiliser sous forme de paires clé-valeur standard pour les tùches et opérations ultérieures.
Les faits d'interface peuvent ĂȘtre ajoutĂ©s aux variables stockĂ©es d'Ansible et utilisĂ©es immĂ©diatement ou plus tard comme entrĂ©e pour le module de ressource eos_interfaces sans traitement ni transformation supplĂ©mentaires.
Modules de ressources
Ainsi, nous avons extrait des faits, normalisĂ© les donnĂ©es, les avons intĂ©grĂ©es dans un schĂ©ma de structure de donnĂ©es interne standardisĂ© et disposons maintenant d'une source de vĂ©ritĂ© prĂȘte Ă l'emploi. Hourra ! C'est bien sĂ»r formidable, mais nous devons toujours transformer les paires clĂ©-valeur en une configuration spĂ©cifique que la plateforme de l'appareil attend. Nous avons maintenant besoin de modules pour des plateformes spĂ©cifiques afin de rĂ©pondre Ă ces nouvelles exigences de collecte de faits et de normalisation.
Qu'est-ce qu'un module de ressource ? Les sections de configuration d'un appareil peuvent ĂȘtre considĂ©rĂ©es comme des ressources fournies par cet appareil. Les modules de ressources rĂ©seau sont dĂ©libĂ©rĂ©ment limitĂ©s Ă une seule ressource et peuvent ĂȘtre empilĂ©s comme des briques pour configurer des services rĂ©seau complexes. En consĂ©quence, les exigences et la spĂ©cification pour un module de ressource sont naturellement simplifiĂ©es, car le module de ressource peut lire et configurer un service rĂ©seau spĂ©cifique sur un appareil rĂ©seau.
Pour expliquer ce que fait un module de ressource, examinons un exemple de playbook qui montre une opération idempotente utilisant les nouveaux faits du ressource réseau et le module eos_l3_interface.
- nom : exemple de faits renvoyés directement à l'appareil.
hĂŽtes : arista
collecter_faits : faux
tĂąches :
- nom : récupérer les faits eos d'arista
eos_facts :
gather_subset : min
gather_network_resources : l3_interfaces
- nom : s'assurer que les informations d'adresse IP sont exactes
eos_l3_interfaces :
config : "{{ ansible_network_resources['l3_interfaces'] }}"
register : result
- nom : s'assurer que la configuration n'a pas changé
assert :
that : not result.changedComme vous pouvez le voir, les données recueillies depuis l'appareil sont transmises directement au module de ressources concerné sans transformation. Lors de l'exécution du playbook, les valeurs sont extraites de l'appareil et comparées aux valeurs attendues. Dans cet exemple, les valeurs récupérées correspondent à celles attendues (c'est-à -dire que la vérification des écarts de configuration est effectuée) et un message est affiché indiquant si la configuration a changé.
La meilleure façon de détecter un écart de configuration est de stocker les faits dans des variables Ansible et de les utiliser périodiquement avec le module de ressources en mode de vérification. C'est une méthode simple pour voir si quelqu'un a modifié les valeurs manuellement. Dans la plupart des cas, les organisations autorisent les modifications et la configuration manuelles, bien que de nombreuses opérations soient effectuées via Ansible Automation.
Qu'est-ce qui différencie les nouveaux modules de ressources des précédents ?
Pour un ingénieur en automatisation des réseaux, il y a 3 principales différences entre les modules de ressources dans Ansible 2.9 et les versions précédentes.
1) Pour une ressource rĂ©seau spĂ©cifique (qui peut aussi ĂȘtre considĂ©rĂ©e comme une section de configuration), les modules et les faits se dĂ©velopperont sur tous les systĂšmes d'exploitation rĂ©seau pris en charge simultanĂ©ment. Nous croyons que si Ansible prend en charge la configuration de la ressource sur une plateforme rĂ©seau, nous devons le prendre en charge partout. Cela facilite l'utilisation des modules de ressources, car l'ingĂ©nieur en automatisation des rĂ©seaux peut maintenant configurer une ressource (comme LLDP) sur tous les systĂšmes d'exploitation rĂ©seau avec des modules natifs et pris en charge.
2) Les modules de ressources incluent désormais une valeur d'état.
fusionné: la configuration est fusionnée avec la configuration fournie (par défaut);remplacé: la configuration de la ressource sera remplacée par la configuration fournie;remplacé: la configuration de la ressource sera remplacée par la configuration fournie ; les instances de ressources superflues seront supprimées ;supprimé: la configuration de la ressource sera supprimée/restaurée par défaut.

3) Les modules de ressource incluent dĂ©sormais des valeurs de retour stables. Lorsqu'un module de ressource rĂ©seau effectue (ou propose) les modifications nĂ©cessaires sur un appareil rĂ©seau, il renvoie les mĂȘmes paires clĂ©-valeur dans le playbook.
before: la configuration sur l'appareil sous forme de données structurées avant la tùche ;aprÚs: si l'appareil a changé (ou peut changer, si le mode de vérification est utilisé), la configuration résultante sera renvoyée sous forme de données structurées ;commandes: toutes les commandes de configuration exécutées sur l'appareil pour le mettre dans l'état souhaité.


Que signifie tout cela ? Pourquoi est-ce important ?
Cet article dĂ©crit de nombreux concepts complexes, mais nous espĂ©rons qu'Ă la fin, vous comprendrez mieux ce que les clients d'entreprise demandent en termes de collecte de faits, de normalisation des donnĂ©es et de configuration de boucle pour une plateforme d'automatisation. Mais pourquoi ont-ils besoin de ces amĂ©liorations ? De nombreuses organisations s'engagent actuellement dans une transformation numĂ©rique pour rendre leurs environnements IT plus flexibles et compĂ©titifs. Que ce soit bon ou mauvais, de nombreux ingĂ©nieurs rĂ©seaux deviennent dĂ©veloppeurs rĂ©seaux - par intĂ©rĂȘt personnel ou sur ordre de leurs dirigeants.
Les organisations comprennent que l'automatisation de modÚles de réseau individuels ne résout pas le problÚme de la fragmentation et n'améliore l'efficacité que jusqu'à un certain point. La plateforme Red Hat Ansible Automation Platform fournit des modÚles de données de ressources stricts et normalisés pour gérer programmatique les données de base sur un appareil réseau. Cela signifie que les utilisateurs abandonnent progressivement les méthodes de configuration individuelles au profit de méthodes plus modernes axées sur la technologie (par exemple, adresses IP, VLAN, LLDP, etc.), plutÎt que sur une implémentation spécifique du fournisseur.
Cela signifie-t-il que les jours des modules de commande et de configuration fiables et éprouvés sont comptés ? Pas du tout. Les modules de ressources attendus ne seront pas applicables dans tous les cas et pour chaque fournisseur, donc les modules de commande et de configuration seront encore nécessaires pour certaines réalisations. L'objectif des modules de ressource est de simplifier des modÚles Jinja volumineux et de normaliser des configurations d'appareil non structurées en un format JSON structuré. Avec les modules de ressources, les réseaux existants pourront plus facilement convertir leur configuration en paires clé-valeur structurées, qui constitueront une source de vérité lisible. En utilisant des paires clé-valeur structurées, il sera possible de passer d'exécuter des configurations sur chaque appareil à travailler avec des données structurées indépendantes et de mettre les réseaux au premier plan dans une approche « infrastructure en tant que code ».
Quels modules de ressources apparaĂźtront dans Ansible Engine 2.9 ?
Avant de détailler ce qu'il y aura dans Ansible 2.9, rappelons-nous comment nous avons divisé l'ensemble du travail.
Nous avons identifié 7 catégories et attribué des ressources réseau spécifiques à chacune :

Remarque : les ressources mises en gras ont Ă©tĂ© planifiĂ©es et mises en Ćuvre dans Ansible 2.9.
Sur la base des retours d'expérience des clients d'entreprise et de la communauté, il était logique de s'attaquer d'abord à ces modules liés aux protocoles de topologie réseau, à la virtualisation et aux interfaces.
Les modules de ressources suivants ont été développés par l'équipe Ansible Network et correspondent aux plateformes prises en charge par Red Hat :

Les modules suivants ont été développés par la communauté Ansible :
exos_lldp_globalâ d'Extreme Networks.nxos_bfd_interfacesâ de Cisconxos_telemetryâ de Cisco
Comme vous pouvez le voir, le concept des modules de ressources s'inscrit dans notre stratégie d'orientation vers les plateformes. En d'autres termes, nous incluons les capacités et les fonctions nécessaires directement dans Ansible, afin de soutenir la normalisation lors du développement des modules réseau, tout en simplifiant le travail des utilisateurs au niveau des rÎles et des playbooks Ansible. Pour étendre le développement des modules de ressources, l'équipe Ansible a publié l'outil Module Builder.
Plans pour Ansible 2.10 et au-delĂ
AprĂšs le lancement d'Ansible 2.9, nous travaillerons sur le prochain ensemble de modules de ressources pour Ansible 2.10, qui pourront ĂȘtre utilisĂ©s pour une configuration supplĂ©mentaire de la topologie et des politiques rĂ©seau, par exemple Le plan de dĂ©veloppement peut encore ĂȘtre ajustĂ©, donc si vous avez des commentaires, faites-le nous savoir dans .
Ressources et démarrage
Source : habr.com
