After provisioning a new Cisco CSR1000V-Router this script
- waits until the router is fully deployed
- got it’s Management-IP-Address assigned via DHCP.
and returns this Management IP-Address.
- Prepare
- needed to check, if the management-IP of the CDP-Neighbor is in the correct IP-Subnet
- the „wait-for-CDP“-Script
- hostname „CSR-A“
- an IP-Address within the network „192.168.56.0 /24“
- VirtualBox Host-Only-Network
- Provision a new CSR1000V Router named „CSR-A“
- Run the „wait-for-CDP-Neighbor“-Script
- Or store the returned IP-Address in an Shell-Variable „ROUTER-IP“/li>
C:\RH>for /f %I in ('python wait-for-cdpneighbor.py 2^> nul') do @(set ROUTER-IP=%I)
- and pass it to putty – using public-key authentication
First, install „netaddr“-package.
C:\RH>pip install netaddr Collecting netaddr Downloading https://files.pythonhosted.org/packages/ba/97/ce14451a9fd7bdb5a397abf99b24a1a6bb7a1a440b019bebd2e9a0dbec74/netaddr-0.7.19-py2.py3-none-any.whl (1.6MB) 100% |████████████████████████████████| 1.6MB 4.0MB/s Installing collected packages: netaddr Successfully installed netaddr-0.7.19
Obviously far to much hard-coded stuff, just as an example 😉 waiting for a CDP-Neighbor to appear with the following properties:
at the interface
#! /usr/bin/env python from scapy.all import * load_contrib("cdp") from netaddr import IPNetwork, IPAddress # run it for max. 99 Packets ip = "0.0.0.0" wait_for_hostname = "CSR-A" wait_for_host_in_network = "192.168.56.0/24" interface="VirtualBox Host-Only Ethernet Adapter" capturefilter="ether dst 01:00:0c:cc:cc:cc" while not(IPAddress(ip) in IPNetwork(wait_for_host_in_network)): p=sniff(iface=interface, count=1, filter=capturefilter) pkt=p[0] #print("Packet received",pkt.show()) #is this a CDP-Packet containing a hostname? if (CDPMsgDeviceID in pkt): #is this the CDP-Neighbor we're looking for? device=pkt["CDPMsgDeviceID"].val.decode() hostname=device.split(".")[0] #print("Hostname:",hostname) if (hostname == wait_for_hostname): #is this a CDP-Packet containing a management-IP-Address? if (CDPAddrRecordIPv4 in pkt): ip=pkt["CDPAddrRecordIPv4"].addr #print("IP-Address found:",ip) #return the IP-Address to the calling application or the CLI print(ip)
C:\RH>CSR1000v-Virtual-Box.cmd Enter CSR1000v Hostname:CSR-A Virtual machine 'CSR-A' is created and registered. UUID: 8a9c969e-3895-4a7c-9cbc-5f5551bf1b7b Settings file: 'c:\RH\LAB\VM\CSR-A\CSR-A.vbox' Creating ISO image at c:\RH\LAB\VM\CSR-A\config.iso, 1 Files, Size: 8,00 KB 100% 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 55ea8df5-7e3c-4485-8e08-9302cb61a09d Waiting for VM "CSR-A" to power on... VM "CSR-A" has been successfully started.
In a second CMD-Box, and… Be patient, of course.
C:\RH>python wait-for-cdpneighbor.py 192.168.56.101
The Public-Key for user „labuser“ is part of my baseline-config used to provision the virtual-router.
C:\RH>putty -ssh -i C:\RH\work\putty-rsa-key\labuser.ppk labuser@%ROUTER-IP%
Works, this is a nice preparation for an automated virtual ansible-lab, too!