Hoe kan Ansible mensen helpen bij het bouwen van simulaties met Cisco Modeling Labs (CML)?
Gelijkwaardig aan TerraformAnsible is een veelgebruikte, open-source automatiseringstool die vaak wordt gebruikt in DevOps-methodologieën voor proceed integratie/proceed implementatie (CI/CD). Ze zijn beide een kind Infrastructure as Code (IaC) of Infrastructure as Knowledge waarmee u uw infrastructuur als tekstbestanden kunt weergeven en deze kunt beheren met instruments zoals Git. Het voordeel is reproduceerbaarheid, consistentie, snelheid en de wetenschap dat, wanneer u de code wijzigt, mensen het goedkeuren en dat deze wordt getest voordat deze naar uw productienetwerk wordt verzonden. Dit paradigma stelt ondernemingen in staat hun netwerkinfrastructuur op dezelfde manier te beheren als waarop zij hun software- en cloudpraktijken uitvoeren. De infrastructuur is er tenslotte om de apps te ondersteunen, dus waarom zou je ze anders beheren?
Hoewel er overlap bestaat in de mogelijkheden van Terraform en Ansible, zijn ze zeer complementair. Terwijl Terraform beter is in de initiële implementatie en zorgt voor voortdurende consistentie van de onderliggende infrastructuur, is Ansible beter in de initiële configuratie en het voortdurende beheer van de dingen die in die infrastructuur leven, zoals systemen, netwerkapparaten, enzovoort.
In een algemene workflow waarin een operator een wijziging in het netwerk wil aanbrengen, bijvoorbeeld door een nieuw netwerk toe te voegen dat by way of BGP moet worden geadverteerd, zou een netwerkingenieur die wijziging in de code specificeren, of waarschijnlijker als configuratiegegevens in YAML of JSON. In een typische CI-workflow zou die verandering bijvoorbeeld door anderen moeten worden goedgekeurd op juistheid of naleving van bedrijfs- en veiligheidsoverwegingen. Naast de oogboltests valideert een reeks geautomatiseerde exams de gegevens en implementeert vervolgens de voorgestelde wijziging in een testnetwerk. Deze exams kunnen worden uitgevoerd in een fysiek testnetwerk, een virtueel testnetwerk of een combinatie van beide. Die stroom kan er als volgt uitzien:
Het voordeel van het gebruik van virtuele testnetwerken is groot. De kosten zijn aanzienlijk lager en de mogelijkheid om testen te automatiseren is aanzienlijk toegenomen. Een netwerkingenieur kan bijvoorbeeld meerdere keren een nieuwe, complexe topologie opstarten en configureren zonder dat de kans groot is dat oude exams de nauwkeurigheid van de huidige exams in de battle brengen. Cisco Modeling Labs is een geweldig hulpmiddel voor dit soort exams.
Hier komt de Ansible CML Assortment om de hoek kijken. Vergelijkbaar met de CML Terraform-integratie die wordt behandeld in a vorige weblog, kan de Ansible CML Assortment de implementatie van topologieën in CML voor testen automatiseren. De Ansible CML Assortment heeft modules voor het maken, starten en stoppen van een topologie en de hosts daarin, maar wat nog belangrijker is, het heeft een dynamische inventarisplug-in voor het verkrijgen van informatie over de topologie. Dit is belangrijk voor automatisering omdat topologieën kunnen veranderen. Het is ook mogelijk dat er meerdere topologieën bestaan, afhankelijk van de exams die worden uitgevoerd. Als uw topologie gebruikmaakt van het dynamische hostconfiguratieprotocol (DHCP) en/of de PATty-functionaliteit van CML, moet de informatie over hoe Ansible met de knooppunten communiceert naar het playbook worden gecommuniceerd.
Laten we enkele functies van de dynamische inventarisplug-in van Ansible CML Assortment bekijken.
Eerst moeten we de verzameling installeren:
ansible-galaxy assortment set up cisco.cml
Vervolgens maken we een cml.yml in de inventaris met de volgende inhoud om Ansible te vertellen de De dynamische inventarisplug-in van Ansible CML Assortment:
plugin: cisco.cml.cml_inventory group_tags: community, ios, nxos, router
In aanvulling naar door de naam van de plug-in op te geven, kunnen we ook tags definiëren die, Wanneer u het apparaat in de topologie aantreft, voegt u dat apparaat toe aan een Ansible-groep om later in het playbook te gebruiken:
In aanvulling naar door de naam van de plug-in op te geven, kunnen we ook tags definiëren die, Wanneer u het apparaat in de topologie aantreft, voegt u dat apparaat toe aan een Ansible-groep om later in het playbook te gebruiken:
- CML_USERNAME: Gebruikersnaam voor de CML-gebruiker
- CML_PASSWORD: Wachtwoord voor de CML-gebruiker
- CML_HOST: De CML-host
- CML_LAB: De naam van het laboratorium
Zodra de plug-in weet hoe hij moet communiceren met de CML-server en welke lab te gebruiken, dat kan retourneer informatie over de knooppunten in het lab:
okay: (hq-rtr1) => { "cml_facts": { "config": "hostname hq-rtr1nvrf definition Mgmt-intfn!naddress-family ipv4nexit-address-familyn!naddress-family ipv6nexit-address-familyn!nusername admin privilege 15 secret 0 adminncdp runnno aaa new-modelnip domain-name mdd.cisco.comn!ninterface GigabitEthernet1nvrf forwarding Mgmt-intfnip deal with dhcpnnegotiation autonno cdp enablenno shutdownn!ninterface GigabitEthernet2ncdp enablen!ninterface GigabitEthernet3ncdp enablen!ninterface GigabitEthernet4ncdp enablen!nip http servernip http secure-servernip http max-connections 2n!nip ssh time-out 60nip ssh model 2nip ssh server algorithm encryption aes128-ctr aes192-ctr aes256-ctrnip ssh shopper algorithm encryption aes128-ctr aes192-ctr aes256-ctrn!nline vty 0 4nexec-timeout 30 0nabsolute-timeout 60nsession-limit 16nlogin localntransport enter sshn!nend", "cpus": 1, "data_volume": null, "image_definition": null, "interfaces": ( { "ipv4_addresses": null, "ipv6_addresses": null, "mac_address": null, "identify": "Loopback0", "state": "STARTED" }, { "ipv4_addresses": ( "192.168.255.199" ), "ipv6_addresses": (), "mac_address": "52:54:00:13:51:66", "identify": "GigabitEthernet1", "state": "STARTED" } ), "node_definition": "csr1000v", "ram": 3072, "state": "BOOTED" } }
Het eerste gevonden IPv4-adres (in volgorde van de interfaces) wordt gebruikt als `ansible_host` om ervoor te zorgen dat het speelboek verbinding kan maken met het apparaat. Wij kunnen gebruik maken van de cisco.cml.inventaris speelboek opgenomen in de collectie om de inventaris te tonen. In dit geval specificeren we alleen dat we apparaten willen die zich in de ‘router’-groep bevinden die door de inventarisplug-in is gemaakt, zoals geïnformeerd door de tags op de apparaten:
mdd % ansible-playbook cisco.cml.stock --limit=router okay: (hq-rtr1) => { "msg": "Node: hq-rtr1(csr1000v), State: BOOTED, Tackle: 192.168.255.199:22" } okay: (hq-rtr2) => { "msg": "Node: hq-rtr2(csr1000v), State: BOOTED, Tackle: 192.168.255.53:22" } okay: (site1-rtr1) => { "msg": "Node: site1-rtr1(csr1000v), State: BOOTED, Tackle: 192.168.255.63:22" } okay: (site2-rtr1) => { "msg": "Node: site2-rtr1(csr1000v), State: BOOTED, Tackle: 192.168.255.7:22" }
Naast groepstags parseert de CML-plug-in voor dynamische inventaris ook tags om informatie door te geven Pasteitje en om generieke inventarisfeiten te creëren:
Als een CML-tag is opgegeven die overeenkomt met `^pat:(?:tcp|udp)?:?(d+):(d+)`, zal het CML-serveradres (in tegenstelling tot het eerste gevonden IPv4-adres) worden gebruikt voor `ansible_host`. Om `ansible_port` te wijzigen zodat het naar de vertaalde SSH-poort verwijst, kan de tag `ansible:ansible_port=2020` worden ingesteld. Deze twee tags vertellen het Ansible-playbook om verbinding te maken met poort 2020 van de CML-server om de opgegeven host in de topologie te automatiseren. De tag `ansible:` kan ook worden gebruikt om andere hostfeiten te specificeren. De tag `ansible:nso_api_port=2021` kan bijvoorbeeld worden gebruikt om het playbook te vertellen welke poort moet worden gebruikt om de Cisco NSO API te bereiken. Elk willekeurig feit kan op deze manier worden vastgesteld.
Aan de slag
Het uitproberen van de CML Ansible Assortment is eenvoudig. U kunt de draaiboeken in de verzameling gebruiken om een topologie op uw CML-server te laden en te starten. Definieer om te beginnen de omgevingsvariabele die de verzameling vertelt hoe toegang te krijgen tot uw CML-server:
% export CML_HOST=my-cml-server.my-domain.com % export CML_USERNAME=my-cml-username % export CML_PASSWORD=my-cml-password
De volgende stap is het definiëren van uw topologiebestand. Dit is A standaard topologiebestand Jij kan exporteren vanuit CML. Er zijn twee manieren definiëren ee topologiebestand. Eerst, jij kan gebruik een omgevingsvariabele:
% export CML_LAB=my-cml-labfile
Als alternatief kunt u dat ook doen geef het topologiebestand op wanneer u het draaiboek als additional uitvoert–var. Om bijvoorbeeld een topologie op te starten met behulp van de ingebouwde cisco.cml.bouwen Speelboek:
% ansible-playbook cisco.cml.construct -e wait="sure" -e
Met deze opdracht wordt de topologie geladen en gestart; Vervolgens wacht het tot alle knooppunten actief zijn voordat het voltooid is. Als -e startup=’host’ is opgegeven, begin het playbook elke host afzonderlijk, in plaats van ze allemaal tegelijk te starten. Hierdoor kan de configuratie worden gegenereerd en bij het opstarten in de host worden ingevoerd. Wanneer cml_config_bestand is gedefinieerd in de inventaris van de host, wordt het geparseerd als een Jinja-bestand en bij het opstarten als configuratie in die host ingevoerd. Hierdoor is just-in-time configuratie mogelijk.
Zodra het speelboek is voltooid, kunt u een ander ingebouwd speelboek gebruiken, cisco.cml.inventaris, om de inventaris voor de topologie op te halen. Om het te gebruiken, moet u eerst een cml.yml in de inventarismap, zoals hierboven weergegeven, en voer vervolgens het playbook als volgt uit:
% ansible-playbook cisco.cml.stock PLAY (cml_hosts) ********************************************************************** TASK (debug) ********************************************************************** okay: (WAN-rtr1) => { "msg": "Node: WAN-rtr1(csr1000v), State: BOOTED, Tackle: 192.168.255.53:22" } okay: (nso1) => { "msg": "Node: nso1(ubuntu), State: BOOTED, Tackle: my-cml-server.my-domain.com:2010" } okay: (site1-host1) => { "msg": "Node: site1-host1(ubuntu), State: BOOTED, Tackle: site1-host1:22" }
In deze ingekorte uitvoer worden drie verschillende situation’s weergegeven. Eerst, WAN-rtr1 krijgt het DHCP-adres toegewezen dat het daarvoor heeft ontvangen ansible_host waarde, en weerbare poort is 22. Als de host waarop het draaiboek draait een IP-connectiviteit heeft (hetzij in de topologie, hetzij in een netwerk dat by way of een externe connector met de topologie is verbonden), kan deze die host bereiken.
Het tweede situation toont een voorbeeld van de PATty-functionaliteit met de host nso1 waarin de dynamische inventarisplug-in deze tags leest om te bepalen dat de host beschikbaar is by way of de interface van de CML-server (dwz ansible_host ingesteld op mijn-cml-server.mijn-domein.com). Het weet ook dat ansible_port moet worden ingesteld op de poort die in de tags is opgegeven (dwz 2010). Nadat deze waarden zijn ingesteld, kan het ansible-playbook de host in de topologie bereiken met behulp van de PATty-functionaliteit in CML.
Het laatste voorbeeld, site1-host1, toont het situation waarin het CML-script voor dynamische inventarisatie een door DHCP toegewezen adres of tags kan vinden om op te geven waarvoor ansible_host moet worden ingesteld, dus wordt de knooppuntnaam gebruikt. Om het draaiboek deze hosts te laten bereiken, moet het een IP-connectiviteit hebben en de knooppuntnaam kunnen omzetten in een IP-adres.
Deze ingebouwde playbooks laten voorbeelden zien van hoe u de functionaliteit in de CML Ansible Assortment kunt gebruiken om uw eigen playbooks te bouwen, maar u kunt ze ook rechtstreeks gebruiken als onderdeel van uw pipeline. Sterker nog, we gebruiken ze vaak direct in de leidingen die we voor klanten aanleggen.
Als je meer wilt weten over de CML Ansible Assortment, kun je deze vinden in Ansible Galaxy evenals op Github.
U kunt hier ook een volledige IaC CI/CD-pijplijn vinden met behulp van deze modules.
Sluit je aan bij deCisco Leernetwerkvandaag free of charge.
Volg Cisco Studying & Certifications
Twitteren|Fb|LinkedIn|Instagram|YouTube
Gebruik#CiscoCertom deel te nemen aan het gesprek.
Deel: