Le livre de jeu intérieur. Fonctionnalités réseau dans le nouveau moteur Ansible 2.9


La prochaine version de Red Hat Ansible Engine 2.9 vous attend avec des amĂ©liorations impressionnantes, dont certaines sont dĂ©crites dans cet article. Comme d'habitude, nous avons ouvertement dĂ©veloppĂ© les amĂ©liorations du rĂ©seau Ansible, avec le soutien de la communautĂ©. Rejoignez - Jetez un Ɠil au tableau des tĂąches sur GitHub et Ă©tudiez le plan de dĂ©veloppement pour la sortie de Red Hat Ansible Engine 2.9 sur la page wiki d' Ansible Network .


Comme nous l'avons récemment annoncé, Red Hat Ansible Automation Platform inclut désormais Ansible Tower, Ansible Engine et tout le contenu du réseau Ansible. Désormais, la plupart des plateformes réseau les plus populaires sont implémentées via des modules Ansible. Par exemple:


  • Arista eos
  • Cisco IOS
  • Cisco IOS XR
  • Cisco NX-OS
  • Juniper Junos
  • Vyos

Une liste complĂšte des plates-formes entiĂšrement prises en charge par Red Hat via Ansible Automation est disponible ici .


Qu'avons-nous appris


Au cours des quatre derniÚres années, nous avons beaucoup appris sur le développement d'une plateforme d'automatisation de réseau. Nous avons également appris comment les utilisateurs finaux jouent des artefacts de plate-forme dans les livres de jeu et les rÎles Ansible. Et voici ce que nous avons découvert:


  • Les organisations automatisent les appareils non seulement un, mais de nombreux fournisseurs.
  • L'automatisation n'est pas seulement un phĂ©nomĂšne technique, mais aussi culturel.
  • L'automatisation Ă  grande Ă©chelle des rĂ©seaux est plus compliquĂ©e qu'il n'y paraĂźt, en raison des principes architecturaux fondamentaux de la conception d'automatisation.

Lorsque nous avons discuté de nos plans de développement à long terme il y a plus d'un an, nos entreprises clientes ont demandé ce qui suit:


  • La collecte des faits doit ĂȘtre mieux standardisĂ©e et alignĂ©e avec le flux de travail d'automatisation pour n'importe quel appareil.
  • La mise Ă  jour des configurations sur l'appareil doit Ă©galement ĂȘtre standardisĂ©e et harmonisĂ©e afin que les modules Ansible traitent la seconde moitiĂ© du cycle aprĂšs avoir collectĂ© les faits.
  • Nous avons besoin de mĂ©thodes rigoureuses et prises en charge pour convertir la configuration des appareils en donnĂ©es structurĂ©es. Sur cette base, la source de vĂ©ritĂ© peut ĂȘtre dĂ©placĂ©e d'un pĂ©riphĂ©rique rĂ©seau.

Améliorations des faits


La collecte de faits Ă  partir de pĂ©riphĂ©riques rĂ©seau Ă  l'aide d'Ansible est souvent alĂ©atoire. Les plates-formes rĂ©seau sont Ă©quipĂ©es Ă  des degrĂ©s divers de la capacitĂ© de collecter des faits, mais elles n'ont presque pas - ou mĂȘme pas du tout - de fonctions pour analyser et standardiser la prĂ©sentation des donnĂ©es dans des paires clĂ©-valeur. Lisez le post de Ken Celenza sur la difficultĂ© et la douleur d'analyser et de normaliser les donnĂ©es factuelles.


Vous avez peut-ĂȘtre remarquĂ© comment nous avons travaillĂ© sur le rĂŽle Ansible Network Engine. Naturellement, 24 000 tĂ©lĂ©chargements plus tard, le rĂŽle Network Engine est rapidement devenu l'un des rĂŽles les plus populaires d'Ansible dans Ansible Galaxy pour les scĂ©narios d'automatisation de rĂ©seau. Avant de migrer une grande partie de cela vers Ansible 2.8 pour prĂ©parer ce dont Ansible 2.9 avait besoin, ce rĂŽle Ansible fournissait le premier ensemble d'outils pour aider Ă  l'analyse des commandes, Ă  la gestion des commandes et Ă  la collecte de donnĂ©es pour les pĂ©riphĂ©riques rĂ©seau.


Si vous ĂȘtes douĂ© pour utiliser Network Engine, il s'agit d'un moyen trĂšs efficace de collecter, d'analyser et de normaliser les donnĂ©es de fait Ă  utiliser avec Ansible. L'inconvĂ©nient de ce rĂŽle est que vous devez crĂ©er tout un tas d'analyseurs pour chaque plate-forme et pour toutes les activitĂ©s du rĂ©seau. Pour comprendre Ă  quel point il est difficile de crĂ©er, d'expĂ©dier et de maintenir des analyseurs, regardez les 1200+ analyseurs des gars de Cisco.


En un mot, pour l'automatisation à grande échelle, il est trÚs important de recevoir les faits des appareils et de les normaliser en paires clé-valeur, mais cela est difficile à réaliser lorsque vous avez de nombreux fournisseurs et plates-formes réseau.


Chaque module de faits de réseau dans Ansible 2.9 peut désormais analyser la configuration d'un périphérique réseau et renvoyer des données structurées - sans bibliothÚques supplémentaires, rÎles Ansible ou analyseurs personnalisés.


À partir d'Ansible 2.9, Ă  chaque version du module rĂ©seau mis Ă  jour, le module fact est amĂ©liorĂ© pour fournir des informations sur cette section de configuration. Autrement dit, le dĂ©veloppement des faits et des modules se dĂ©roule dĂ©sormais au mĂȘme rythme, et ils auront toujours une structure de donnĂ©es commune.


La configuration des ressources sur un pĂ©riphĂ©rique rĂ©seau peut ĂȘtre extraite et convertie en donnĂ©es structurĂ©es de deux maniĂšres. Dans les deux cas, vous pouvez compiler et convertir une liste spĂ©cifique de ressources Ă  l'aide du nouveau gather_network_resources . Les noms de ressources correspondent aux noms de modules, ce qui est trĂšs pratique.


Au moment de la collecte des faits:


À l'aide du gather_facts vous pouvez extraire la configuration actuelle de l'appareil au dĂ©but du playbook, puis l'utiliser dans tout le playbook. SpĂ©cifiez les ressources individuelles Ă  rĂ©cupĂ©rer Ă  partir du pĂ©riphĂ©rique.


 - hosts: arista module_defaults: eos_facts: gather_subset: min gather_network_resources: - interfaces gather_facts: True 

Vous remarquerez peut-ĂȘtre quelque chose de nouveau dans ces exemples, Ă  savoir gather_facts: true dĂ©sormais disponible pour la recherche de faits native pour les pĂ©riphĂ©riques rĂ©seau.


Utilisation directe du module de faits sur le réseau:


 - name: collect interface configuration facts eos_facts: gather_subset: min gather_network_resources: - interfaces 

Le playbook renvoie 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: Ethernet1 

Remarquez comment Ansible récupÚre la configuration native de l'appareil Arista et la convertit en données structurées à utiliser comme paires clé-valeur standard pour les tùches et opérations suivantes.


Les faits d'interface peuvent ĂȘtre ajoutĂ©s aux variables stockĂ©es Ansible et utilisĂ©s immĂ©diatement ou ultĂ©rieurement comme entrĂ©e dans le eos_interfaces ressources eos_interfaces sans traitement ni conversion supplĂ©mentaires.


Modules de ressources


Nous avons donc extrait les faits, normalisĂ© les donnĂ©es, les avons entrĂ©es dans un schĂ©ma interne normalisĂ© de la structure des donnĂ©es et obtenu une source de vĂ©ritĂ© toute prĂȘte. Hourra! Bien sĂ»r, c'est gĂ©nial, mais nous devons toujours reconvertir les paires clĂ©-valeur en une configuration spĂ©cifique attendue par une plate-forme de pĂ©riphĂ©rique spĂ©cifique. Nous avons maintenant besoin de modules pour des plates-formes spĂ©cifiques pour satisfaire ces nouvelles exigences de collecte de faits et de normalisation.


Qu'est-ce qu'un module de ressources? Les sections de configuration de l'appareil peuvent ĂȘtre considĂ©rĂ©es comme les ressources fournies par cet appareil. Les modules de ressources rĂ©seau sont intentionnellement limitĂ©s Ă  une seule ressource, et ils peuvent ĂȘtre empilĂ©s comme des briques pour configurer des services rĂ©seau complexes. En consĂ©quence, les exigences et les spĂ©cifications du module de ressources sont naturellement simplifiĂ©es, car le module de ressources peut lire et configurer un service rĂ©seau spĂ©cifique sur un pĂ©riphĂ©rique rĂ©seau.


Pour expliquer ce que fait le module de ressources, regardons un exemple de playbook qui montre une opération idempoent utilisant de nouveaux faits à partir d'une ressource réseau et le module eos_l3_interface .


 - name: example of facts being pushed right back to device. hosts: arista gather_facts: false tasks: - name: grab arista eos facts eos_facts: gather_subset: min gather_network_resources: l3_interfaces - name: ensure that the IP address information is accurate eos_l3_interfaces: config: "{{ ansible_network_resources['l3_interfaces'] }}" register: result - name: ensure config did not change assert: that: not result.changed 

Comme vous pouvez le voir, les données collectées de l'appareil sont transférées directement vers le module de ressources correspondant sans conversion. Au démarrage, le playbook récupÚre les valeurs de l'appareil et les compare avec celles attendues. Dans cet exemple, les valeurs obtenues correspondent aux valeurs attendues (c'est-à-dire que les écarts de configuration sont vérifiés) et un message s'affiche si la configuration a changé.


Un moyen idéal pour détecter les écarts de configuration consiste à stocker les faits dans des variables stockées Ansible et à les utiliser périodiquement avec le module de ressources en mode vérification. Il s'agit d'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.


En quoi les nouveaux modules de ressources sont-ils différents des précédents?


Pour un ingénieur en automatisation de réseau, il existe 3 différences principales entre les modules de ressources dans Ansible 2.9 des versions précédentes.


1) Pour une ressource rĂ©seau spĂ©cifique (qui peut Ă©galement ĂȘtre considĂ©rĂ©e comme une section de configuration), les modules et les faits se dĂ©velopperont dans tous les systĂšmes d'exploitation rĂ©seau pris en charge en mĂȘme temps. Nous pensons que si Ansible prend en charge la configuration des ressources sur une seule plate-forme rĂ©seau, nous devons la prendre en charge partout. Cela simplifie l'utilisation des modules de ressources, car un ingĂ©nieur en automatisation rĂ©seau peut dĂ©sormais configurer une ressource (par exemple, LLDP) dans 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.


  • merged : la configuration est fusionnĂ©e avec la configuration fournie (par dĂ©faut);
  • replaced : la configuration des ressources sera remplacĂ©e par la configuration fournie;
  • overridden : la configuration des ressources sera remplacĂ©e par la configuration fournie; les instances de ressources en excĂšs seront supprimĂ©es;
  • deleted : la configuration des ressources sera supprimĂ©e / restaurĂ©e par dĂ©faut.


3) Les modules de ressources incluent dĂ©sormais des valeurs de retour stables. Lorsque le module de ressources rĂ©seau a apportĂ© (ou suggĂ©rĂ©) les modifications nĂ©cessaires au pĂ©riphĂ©rique rĂ©seau, il renvoie les mĂȘmes paires clĂ©-valeur au playbook.


  • before : configuration sur l'appareil sous forme de donnĂ©es structurĂ©es avant la tĂąche;
  • after : si l'appareil a changĂ© (ou peut changer si le mode de vĂ©rification est utilisĂ©), la configuration rĂ©sultante sera retournĂ©e sous forme de donnĂ©es structurĂ©es;
  • commands : toutes les commandes de configuration s'exĂ©cutant sur l'appareil pour l'amener Ă  l'Ă©tat souhaitĂ©.



Qu'est-ce que tout cela signifie? Pourquoi est-ce important?


Cet article dĂ©crit de nombreux concepts complexes, mais nous espĂ©rons qu'Ă  la fin vous comprendrez mieux que les entreprises clientes demandent des faits, une normalisation des donnĂ©es et une configuration de boucle pour la plate-forme d'automatisation. Mais pourquoi ont-ils besoin de ces amĂ©liorations? De nombreuses organisations sont dĂ©sormais engagĂ©es dans la transformation numĂ©rique pour rendre leurs environnements informatiques plus flexibles et compĂ©titifs. Pour le meilleur ou pour le pire, de nombreux ingĂ©nieurs rĂ©seau deviennent des dĂ©veloppeurs de rĂ©seaux, soit par leur propre intĂ©rĂȘt, soit Ă  la demande des gestionnaires.


Les organisations comprennent que l'automatisation de modÚles de réseau individuels ne résout pas le problÚme de fragmentation et n'augmente l'efficacité que dans une certaine limite. La plate-forme d'automatisation Red Hat Ansible fournit des modÚles de données de ressources rigoureux et normatifs pour gérer par programme les données sous-jacentes sur un périphérique réseau. Autrement dit, les utilisateurs abandonnent progressivement les méthodes de configuration individuelles au profit de méthodes plus modernes en mettant l'accent sur les technologies (par exemple, les adresses IP, les VLAN, LLDP, etc.), et non sur une implémentation de fournisseur spécifique.


Est-ce à dire que les jours de configuration et de modules de commande fiables et éprouvés sont comptés? Pas question. Les modules de ressources réseau attendus ne seront pas applicables dans tous les cas et pas pour chaque fournisseur, de sorte que les ingénieurs réseau auront toujours besoin de modules de commande et de configuration pour certaines implémentations. Le but des modules de ressources est de simplifier les grands modÚles Jinja et de normaliser les configurations de périphériques non structurées dans un format JSON structuré. Avec les modules de ressources, il sera plus facile pour les réseaux existants de transformer leur configuration en paires clé-valeur structurées qui seront une source de vérité facile à lire. Si vous utilisez des paires clé-valeur structurées, vous pouvez passer des configurations en cours d'exécution sur chaque périphérique à l'utilisation de données structurées indépendantes et mettre les réseaux au premier plan avec l'approche «infrastructure en tant que code».


Quels modules de ressources apparaĂźtront dans Ansible Engine 2.9?


Avant de dire en détail ce qui se passera dans Ansible 2.9, rappelons comment nous avons divisé la totalité du travail.


Nous avons identifié 7 catégories et chacune a attribué des ressources réseau spécifiques:



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



Les modules suivants sont développés par la communauté Ansible:


  • exos_lldp_global - de Extreme Networks.
  • nxos_bfd_interfaces - de Cisco
  • nxos_telemetry - de Cisco

Comme vous pouvez le voir, le concept de modules de ressources s'intĂšgre dans notre stratĂ©gie d'orientation de plateforme. Autrement dit, nous incluons les capacitĂ©s et fonctions nĂ©cessaires dans Ansible lui-mĂȘme, afin de prendre en charge la normalisation dans le dĂ©veloppement des modules rĂ©seau, ainsi que de simplifier le travail des utilisateurs au niveau du rĂŽle et du playbook Ansible. Pour Ă©tendre le dĂ©veloppement des modules de ressources, l'Ă©quipe Ansible a publiĂ© l'outil Module Builder.


Plans pour Ansible 2.10 partir


AprĂšs la sortie d'Ansible 2.9, nous traiterons l'ensemble suivant de modules de ressources pour Ansible 2.10, qui peuvent ĂȘtre utilisĂ©s pour configurer davantage la topologie et la stratĂ©gie rĂ©seau, par exemple, ACL, OSPF et BGP . Le plan de dĂ©veloppement peut encore ĂȘtre ajustĂ©, donc si vous avez des commentaires, signalez-le Ă  la communautĂ© Ansible Network .


Ressources et mise en route


Communiqué de presse de la plate-forme Ansible Automation
Blog de la plate-forme d'automatisation Ansible
L'avenir de la livraison de contenu chez Ansible
RĂ©flexions sur la modification de la structure du projet Ansible

Source: https://habr.com/ru/post/fr471896/


All Articles