[PYTHON] Ich habe versucht, den Unterschied zwischen Config vor und nach der Arbeit mit pyATS / Genie selbst erstelltem Skript zu berücksichtigen

Kürzlich dreht sich in meinem Artikel alles um pyATS

Was ist pyATS?

Eine von Cisco entwickelte Python-Bibliothek zur Überprüfung. Bitte brechen Sie die Details ... Für Details ↓ Offizielles Dokument Mein Einführungsartikel In jüngster Zeit wurde über Qiita gesprochen, insbesondere im Bereich Automatisierung (glaube ich).

Was ich geschaffen habe

Was ich erstellt habe ist, dass die vorbereitete Konfiguration korrekt in das Zielgerät eingegeben wird. Das Eingabeergebnis wird als Unterschied in show running-config angezeigt, und die von genie learn erfasste strukturierte Ausgabe ist Diffed, um den Unterschied auf leicht verständliche Weise anzuzeigen. Dieses Mal soll es vor dem Start zur Konfiguration zurückkehren.

├── check_acl.py ← Skriptkörper
├── testbed
│   └── devnet_always.yml ← Testbed
└── vars
    ├── csr1000v-1.yml ← Vars of Node im Testbed beschrieben
    ├── iosxr1.yml
    └── sbx-n9kv-ao.yml

testbed Eine Datei, die Informationen zum Verbindungsziel enthält. Bereiten Sie diesmal Folgendes vor Diese Erklärung ist übrigens vorheriger Artikel. Lassen Sie sie daher bitte weg.

devnet_always.yml


---
testbed:
  name: SandBox

devices:
  sbx-n9kv-ao:
    alias: uut
    credentials:
      default:
        username: admin
        password: Admin_1234!
    connections:
      vty:
        protocol: ssh
        ip: sbx-nxos-mgmt.cisco.com
        port: 8181
    os: nxos
    type: nxos

  iosxr1:
    alias: rt
    credentials:
      default:
        username: admin
        password: C1sco12345
    connections:
      vty:
        protocol: ssh
        ip: sbx-iosxr-mgmt.cisco.com
        port: 8181
    os: iosxr
    type: iosxr

  csr1000v-1:
      alias: xe1
      credentials:
        default:
          username: developer
          password: C1sco12345
      connections:
        vty:
          protocol: ssh
          ip: ios-xe-mgmt-latest.cisco.com
          port: 8181
      os: iosxe
      type: iosxe

  csr1000v:
      alias: xe0
      credentials:
        default:
          username: developer
          password: C1sco12345
      connections:
        vty:
          protocol: ssh
          ip: ios-xe-mgmt.cisco.com
          port: 8181
      os: iosxe
      type: iosxe

Vars-Datei (für jedes Gerät vorbereitet)

Um den Inhalt zu erläutern, ist "Befehl" die Konfiguration, die zur Eingabe der Einstellungen erforderlich ist, und "Löschen" die Konfiguration, die zum Wiederherstellen der Einstellungen erforderlich ist.

StaticRoute und ACL zu csr1000v-1 von IOSXE hinzugefügt

csr1000v-1.yml


---
command: |
  ip route 8.8.8.8 255.255.255.255 GigabitEthernet1 10.10.20.254
  ip access-list extended TEST
  permit ip any 8.8.8.8 0.0.0.0 log
  remark ****TEST****

clear: |
  no ip route 8.8.8.8 255.255.255.255 GigabitEthernet1 10.10.20.254
  no ip access-list extended TEST

IOSXR iosxr1 bereitet nur Dateien vor und der Inhalt ist leer.

iosxr1.yml


---
command: |

clear: |

Vars von csr1000v im Testbed sind nicht vorbereitet. Als nächstes werde ich mein eigenes Skript vorstellen. Es ist in Python geschrieben. Hässlich, cool! Bitte lassen Sie mich wissen, wenn Sie das spüren, da ich es nicht für geschäftliche Zwecke, sondern zur Überprüfung verwende Für knusprige Programmierer mag es wie ein beschissener Code erscheinen, aber bitte verzeihen Sie mir. Script

check_acl.py



import logging
import yaml

#Genie-Modul importieren
from genie.conf import Genie
from genie.utils.diff import Diff

class setupDevices(object):
  def __init__(self):
    #Zum Speichern des Geräts
    self.listDevice = list()

    #running-Zum Speichern der Konfiguration
    self.beforeConfig = list()
    self.afterConfig = list()

    #Speichert nur Geräte mit VAR-Dateien
    self.targetDevice = list()
    self.config = dict()

    #Zum Routing von Speicher
    self.beforeRouting = list()
    self.afterRouting = list()

    #Zur Aufbewahrung von acl
    self.beforeAcl = list()
    self.afterAcl = list()
  #Prüfstand initialisieren
    try:
      self.testbed = Genie.init('testbed/devnet_always.yml')
      if self.testbed :
        logging.info('testbed init:OK')
      for keys in self.testbed.devices:
          self.listDevice.append(keys)
    except TypeError:
      logging.warning("Testbed-Datei ist falsch")

  #Überprüfen Sie, ob eine Var-Datei vorhanden ist
    for device in self.listDevice:
      try:
        with open('vars/{}.yml'.format(device), 'r') as yml:
          device_config = { device + "_config" :yaml.safe_load(yml)}
          self.config.update(device_config)
          self.targetDevice.append(device)
      except FileNotFoundError:
        logging.warning("{}Datei nicht".format(device))
        continue

    #Geben Sie den Anmeldevorgang ein
    self.login()

  #Einloggen
  def login(self):
    logging.info("*"*32 + "Einloggen" + "*"*32)

    for device in self.targetDevice:
      self.testbed.devices[device].connect(log_stdout=False)
      if self.testbed.devices[device].is_connected():
        logging.info("{}: connected".format(device))
      else:
        logging.info("{}: disconnected".format(device))

  #Pre-Log-Erfassung
  def getBeforeAcl(self):
    logging.info("*"*32 + "Bestätigung vor der ACL" + "*"*32)
    for device in self.targetDevice:
      self.beforeAcl.append(self.testbed.devices[device].learn('acl'))
      logging.info("{}: beforeAcl get".format(device))
  def getBeforeConfig(self):
    logging.info("*"*32 + "Pre-Log-Erfassung"+ "*"*32)
    for device in self.targetDevice:
      self.beforeConfig.append(self.testbed.devices[device].learn('config'))
      logging.info("{}: beforeConfig get".format(device))
  def getBeforeRoute(self):
    logging.info("*"*32 + "Vorherige Bestätigung der Routing-Tabelle" + "*"*32)
    for device in self.targetDevice:
      self.beforeRouting.append(self.testbed.devices[device].learn('routing'))
      logging.info("{}: beforeRouting get".format(device))

  #Konfigurationseingabe
  def inputConfig(self):
    logging.info("*"*32 + "Konfigurationseingabe" + "*"*32)
    for device in self.targetDevice:
      self.testbed.devices[device].configure(self.config[device+"_config"]['command'])
      logging.info("{}: input_config".format(device))
      
  #Löschen Sie die Eingabe Config
  def claerConfig(self):
    logging.info("*"*32 + "Zurück konfigurieren" + "*"*32)
    for device in self.targetDevice:
      self.testbed.devices[device].configure(self.config[device+"_config"]['clear'])
      logging.info("{}: clear_config".format(device))

  #Post-Log-Erfassung
  def getAfterConfig(self):
    logging.info("*"*32 + "Post-Log-Erfassung" + "*"*32)
    for device in self.targetDevice:
      self.afterConfig.append(self.testbed.devices[device].learn('config'))
      logging.info("{}: afterConfig get".format(device))
  def getAfterAcl(self):
    logging.info("*"*32 + "Bestätigung nach der ACL" + "*"*32)
    for device in self.targetDevice:
      self.afterAcl.append(self.testbed.devices[device].learn('acl'))
      logging.info("{}: afterAcl get".format(device))
  def getAfterRoute(self):
    logging.info("*"*32 + "Nachfolgende Bestätigung der Routing-Tabelle" + "*"*32)
    for device in self.targetDevice:
      self.afterRouting.append(self.testbed.devices[device].learn('routing'))
      logging.info("{}: afterRouting get".format(device))

  #Ausloggen
  def logout(self):
    logging.info("*"*32 + "Ausloggen" + "*"*32)
    for device in self.targetDevice:
      self.testbed.devices[device].disconnect()
      if self.testbed.devices[device].is_connected():
        logging.info("{}: connected".format(device))
      else:
        logging.info("{}: disconnected".format(device))

  #Diff Config
  def diffConfig(self):
    logging.info("*"*32 + "Diff" + "*"*32)
    if self.beforeConfig and self.afterConfig:
      for config_b,config_a,device in zip(self.beforeConfig,self.afterConfig,self.self.targetDevice):
        config_diff = Diff(config_b,config_a)
        config_diff.findDiff()
        print("\n====={}_ConfigDiff=====".format(device))
        print(config_diff)
    if self.beforeRouting and self.afterRouting:
      for config_b,config_a,device in zip(self.beforeRouting,self.afterRouting,self.self.targetDevice):
        config_diff = Diff(config_b,config_a)
        config_diff.findDiff()
        print("\n====={}_RouteDiff=====".format(device))
        print(config_diff)
    if self.beforeAcl and self.afterAcl:
      for config_b,config_a,device in zip(self.beforeAcl,self.afterAcl,self.self.targetDevice):
        config_diff = Diff(config_b,config_a)
        config_diff.findDiff()
        print("\n====={}_AclDiff=====".format(device))
        print(config_diff)

if __name__ == "__main__":
  #Ändern Sie die Protokollebene in "Info"
  logging.basicConfig(level=logging.INFO)
  logging.info("*"*32 + "Starten Sie die Verarbeitung" + "*"*32)
  devnet = setupDevices()
  devnet.getBeforeConfig()
  devnet.getBeforeRoute()
  devnet.getBeforeAcl()
  devnet.inputConfig()
  devnet.getAfterConfig()
  devnet.getAfterRoute()
  devnet.getAfterAcl()
  devnet.claerConfig()
  devnet.logout()
  devnet.diffConfig()
  logging.info("*"*32 + "Ende" + "*"*32)

Erklärung des Ausführungsergebnisses

Wenn Sie alles auf einmal einfügen, wird das Protokoll langweilig, daher erkläre ich es in kleinen Stücken. Führen Sie das Skript mit python check_acl.py aus.

Die Testbed-Datei wird beim Start als Prozess gelesen. Lesen Sie als Nächstes die Datei Gerätename + _config.yml im Testbed. Wenn zu diesem Zeitpunkt die Ziel-Yaml-Datei nicht vorhanden ist, wird die Meldung "Es gibt keine XX-Datei" angezeigt.

(nw_automate) 00:26:33 my Script $python check_acl.py
INFO : ********************************Starten Sie die Verarbeitung********************************
INFO : testbed init:OK
WARNING : sbx-n9kv-keine ao Datei
WARNING :Keine csr1000v-Datei

Als nächstes folgt der Anmeldevorgang. Melden Sie sich mit Geräte [Gerät] .connect (log_stdout = False) an. Zu diesem Zeitpunkt wird das Protokoll bei der Anmeldung nicht angezeigt, da "log_stdout = False" angegeben ist.

INFO : ********************************Einloggen********************************
INFO : iosxr1: connected
INFO : csr1000v-1: connected

Nach dem Anmelden erhalten Sie verschiedene Vorprotokolle. Nach der Erfassung werden verschiedene Vorzustände in der Liste gespeichert.

Elemente, die Sie überprüfen möchten Ops, die erhalten werden können
RunningConfig device['Gerätename'].learn('config')
ACL device['Gerätename'].learn('acl')
Routing device['Gerätename'].learn('routing')
INFO : ********************************Pre-Log-Erfassung********************************
INFO : iosxr1: beforeConfig get
INFO : csr1000v-1: beforeConfig get
INFO : ********************************Vorherige Bestätigung der Routing-Tabelle********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>                                                                                                           'genie.libs.parser.iosxr.show_routing.ShowRouteIpDistributor'>                                                                       'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>                                                                     
INFO : iosxr1: beforeRouting get
INFO : Could not learn <class 'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>
'genie.libs.parser.iosxe.show_routing.ShowIpRouteDistributor'>                                                                       'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>                                                                     
INFO : csr1000v-1: beforeRouting get
INFO : ********************************Bestätigung vor der ACL********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>
Parser Output is empty
INFO : Could not learn <class'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>
INFO : | Commands for learning feature 'Acl'                                                                                                               
INFO : | - Commands with empty output                                                                                                                       
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>  
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>                                                                          
INFO : iosxr1: beforeAcl get
INFO : | Commands for learning feature 'Acl'                                                                                                               
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_acl.ShowAccessLists'>                                                                                  
INFO : csr1000v-1: beforeAcl get

Senden Sie als Nächstes die in [Befehl] der Vars-Datei beschriebene Konfiguration. Nach der Eingabe entspricht das Nachprotokoll dem zuvor erstellten Protokoll. (Kürzung···)

INFO : ********************************Konfigurationseingabe********************************
INFO : iosxr1: input_config
INFO : csr1000v-1: input_config
INFO : ********************************Post-Log-Erfassung********************************
INFO : iosxr1: afterConfig get
INFO : csr1000v-1: afterConfig get
INFO : ********************************Nachfolgende Bestätigung der Routing-Tabelle********************************

Nach dem Abrufen des Nachprotokolls wird auch die Konfiguration wiederhergestellt. Kehren Sie mit dem in clear der vars-Datei beschriebenen Inhalt zurück.

Danach melden Sie sich ab. Nach dem Abmelden wird der aktuelle Verbindungsstatus überprüft und der Status angezeigt.

INFO : ********************************Zurück konfigurieren********************************
INFO : iosxr1: clear_config
INFO : csr1000v-1: clear_config
INFO : ********************************Ausloggen********************************
INFO : iosxr1: disconnected
INFO : csr1000v-1: disconnected

Schließlich Diff die erhaltenen Pre-Confgi und Post-Config. Am Anfang des Satzes steht ein + oder-Zeichen.

Zum Beispiel zeigt configDiff in iosxr1 die Hierarchie gut an. Ist das nicht viel einfacher zu verstehen als nur Texte zu vergleichen?

INFO : ********************************Diff********************************

=====iosxr1_ConfigDiff=====
+Wed Dec 18 16:57:14.949 UTC:
-Wed Dec 18 16:56:58.216 UTC:
router static:
 address-family ipv4 unicast:
+  8.8.8.8/32 10.10.20.254:

=====csr1000v-1_ConfigDiff=====
+Current configuration : 7620 bytes:
+ip route 8.8.8.8 255.255.255.255 GigabitEthernet1 10.10.20.254:
-Current configuration : 7557 bytes:

=====iosxr1_RouteDiff=====
info:
 vrf:
  default:
   address_family:
    ipv4:
     routes:
+      8.8.8.8/32:
+       active: True
+       metric: 0
+       next_hop:
+        next_hop_list:
+         1:
+          index: 1
+          next_hop: 10.10.20.254
+          updated: 00:00:08
+       route: 8.8.8.8/32
+       route_preference: 1
+       source_protocol: static
+       source_protocol_codes: S

=====csr1000v-1_RouteDiff=====
info:
 vrf:
  default:
   address_family:
    ipv4:
     routes:
+      8.8.8.8/32:
+       active: True
+       metric: 0
+       next_hop:
+        next_hop_list:
+         1:
+          index: 1
+          next_hop: 10.10.20.254
+          outgoing_interface: GigabitEthernet1
+       route: 8.8.8.8/32
+       route_preference: 1
+       source_protocol: static
+       source_protocol_codes: S

=====iosxr1_AclDiff=====


=====csr1000v-1_AclDiff=====

INFO : ********************************Ende********************************

Zusammenfassung

Es tut mir leid, dass der Artikel schwer zu lesen war, da es sich nur um Code handelte. Wie Sie jedoch aus den Diff-Ergebnissen ersehen können, war die Bestätigung einfach.

Ich habe Python sehr hart geschrieben, aber tatsächlich kann ich das Gleiche tun, ohne Code zu schreiben. Ich werde eine Referenz-URL posten. PyATS | Erstellen eines Hochgeschwindigkeits-Automatisierungstests mit Genies verstecktem Spezialzug Blitz [Überprüfen Sie problemlos Netzwerke von mehreren Anbietern mit pyATS / Genie und Robot Framework] (https://qiita.com/tahigash/items/ceb0809a4a9464c521b3)

Ich habe diesen Code nicht von Grund auf neu geschrieben, aber es ist mir gelungen, die Informationen im Internet zu sammeln und in Form zu bringen. Auf Github gibt es viele hilfreiche Codes namens CiscoTestAutomation.

Bonus

Alle Protokolle dieses Mal ausgeführt

(nw_automate) 00:26:33 my Script $python check_acl.py
INFO : ********************************Starten Sie die Verarbeitung********************************
INFO : testbed init:OK
WARNING : sbx-n9kv-keine ao Datei
WARNING :Keine csr1000v-Datei
INFO : ********************************Einloggen********************************
INFO : iosxr1: connected
INFO : csr1000v-1: connected
INFO : ********************************Pre-Log-Erfassung********************************
INFO : iosxr1: beforeConfig get
INFO : csr1000v-1: beforeConfig get
INFO : ********************************Vorherige Bestätigung der Routing-Tabelle********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Routing'                                                                                                            |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpDistributor'>                                                                       |
INFO : |====================================================================================================================================================|
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>                                                                     |
INFO : |====================================================================================================================================================|
INFO : iosxr1: beforeRouting get
INFO : Could not learn <class 'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Routing'                                                                                                            |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_routing.ShowIpRouteDistributor'>                                                                       |
INFO : |====================================================================================================================================================|
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>                                                                     |
INFO : |====================================================================================================================================================|
INFO : csr1000v-1: beforeRouting get
INFO : ********************************Bestätigung vor der ACL********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>
Parser Output is empty
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Acl'                                                                                                                |
INFO : +====================================================================================================================================================+
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>                                                                                    |
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>                                                                          |
INFO : |====================================================================================================================================================|
INFO : iosxr1: beforeAcl get
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Acl'                                                                                                                |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_acl.ShowAccessLists'>                                                                                  |
INFO : |====================================================================================================================================================|
INFO : csr1000v-1: beforeAcl get
INFO : ********************************Konfigurationseingabe********************************
INFO : iosxr1: input_config
INFO : csr1000v-1: input_config
INFO : ********************************Post-Log-Erfassung********************************
INFO : iosxr1: afterConfig get
INFO : csr1000v-1: afterConfig get
INFO : ********************************Nachfolgende Bestätigung der Routing-Tabelle********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Routing'                                                                                                            |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpDistributor'>                                                                       |
INFO : |====================================================================================================================================================|
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_routing.ShowRouteIpv6Distributor'>                                                                     |
INFO : |====================================================================================================================================================|
INFO : iosxr1: afterRouting get
INFO : Could not learn <class 'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Routing'                                                                                                            |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_routing.ShowIpRouteDistributor'>                                                                       |
INFO : |====================================================================================================================================================|
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_routing.ShowIpv6RouteDistributor'>                                                                     |
INFO : |====================================================================================================================================================|
INFO : csr1000v-1: afterRouting get
INFO : ********************************Bestätigung nach der ACL********************************
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>
Parser Output is empty
INFO : Could not learn <class 'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>
Parser Output is empty
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Acl'                                                                                                                |
INFO : +====================================================================================================================================================+
INFO : | - Commands with empty output                                                                                                                       |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclAfiAll'>                                                                                    |
INFO : |   cmd: <class 'genie.libs.parser.iosxr.show_acl.ShowAclEthernetServices'>                                                                          |
INFO : |====================================================================================================================================================|
INFO : iosxr1: afterAcl get
INFO : +====================================================================================================================================================+
INFO : | Commands for learning feature 'Acl'                                                                                                                |
INFO : +====================================================================================================================================================+
INFO : | - Parsed commands                                                                                                                                  |
INFO : |----------------------------------------------------------------------------------------------------------------------------------------------------|
INFO : |   cmd: <class 'genie.libs.parser.iosxe.show_acl.ShowAccessLists'>                                                                                  |
INFO : |====================================================================================================================================================|
INFO : csr1000v-1: afterAcl get
INFO : ********************************Zurück konfigurieren********************************
INFO : iosxr1: clear_config
INFO : csr1000v-1: clear_config
INFO : ********************************Ausloggen********************************
INFO : iosxr1: disconnected
INFO : csr1000v-1: disconnected
INFO : ********************************Diff********************************

=====iosxr1_ConfigDiff=====
+Wed Dec 18 16:57:14.949 UTC:
-Wed Dec 18 16:56:58.216 UTC:
router static:
 address-family ipv4 unicast:
+  8.8.8.8/32 10.10.20.254:

=====csr1000v-1_ConfigDiff=====
+Current configuration : 7620 bytes:
+ip route 8.8.8.8 255.255.255.255 GigabitEthernet1 10.10.20.254:
-Current configuration : 7557 bytes:

=====iosxr1_RouteDiff=====
info:
 vrf:
  default:
   address_family:
    ipv4:
     routes:
+      8.8.8.8/32:
+       active: True
+       metric: 0
+       next_hop:
+        next_hop_list:
+         1:
+          index: 1
+          next_hop: 10.10.20.254
+          updated: 00:00:08
+       route: 8.8.8.8/32
+       route_preference: 1
+       source_protocol: static
+       source_protocol_codes: S

=====csr1000v-1_RouteDiff=====
info:
 vrf:
  default:
   address_family:
    ipv4:
     routes:
+      8.8.8.8/32:
+       active: True
+       metric: 0
+       next_hop:
+        next_hop_list:
+         1:
+          index: 1
+          next_hop: 10.10.20.254
+          outgoing_interface: GigabitEthernet1
+       route: 8.8.8.8/32
+       route_preference: 1
+       source_protocol: static
+       source_protocol_codes: S

=====iosxr1_AclDiff=====


=====csr1000v-1_AclDiff=====

INFO : ********************************Ende********************************
(nw_automate) 00:28:00 my Script $

Recommended Posts

Ich habe versucht, den Unterschied zwischen Config vor und nach der Arbeit mit pyATS / Genie selbst erstelltem Skript zu berücksichtigen
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, die statistischen Daten der neuen Corona mit Python abzurufen und zu analysieren: Daten der Johns Hopkins University
Ich habe versucht, die Genauigkeit der japanischen BERT- und der japanischen Distil-BERT-Satzklassifizierung mit PyTorch & Einführung der BERT-Technik zur Verbesserung der Genauigkeit zu vergleichen
Ich habe versucht, das Update von "Hameln" mit "Beautiful Soup" und "IFTTT" zu benachrichtigen.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Skript zum Twittern mit Vielfachen von 3 und Zahlen mit 3 !!
[Einführung in AWS] Ich habe versucht, eine Konversations-App zu portieren und mit text2speech @ AWS playing zu spielen
Ich habe versucht, die Gesichtsverdeckungsarbeit des Koordinationsbildes für das Tragen zu automatisieren
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python ④ optimiert werden kann
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
Ich habe versucht herauszufinden, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Ich habe versucht, die Eigenschaften der neuen Informationen über mit dem Corona-Virus infizierte Personen mit Wordcloud zu visualisieren
Ich habe versucht, die Laufdaten des Rennspiels (Assetto Corsa) mit Plotly zu visualisieren
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ich habe untersucht, wie der Arbeitsablauf mit Excel x Python optimiert werden kann
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen