mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-14 17:01:02 +02:00
92 lines
3.3 KiB
Python
Executable File
92 lines
3.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
import sys
|
|
import os
|
|
import json
|
|
|
|
# TODO: if none given, use OCI
|
|
try:
|
|
onosIp = sys.argv[1]
|
|
print "Reading hosts view from ONOS node " + onosIp + ":"
|
|
except Exception as e:
|
|
print "Error reading ONOS IP arguement"
|
|
print e
|
|
# Grab the json objects from ONOS
|
|
output = os.popen("onos " + onosIp + " \"hosts -j\"" )
|
|
hosts = json.loads( output.read() )
|
|
#hosts = json.loads( output.split( 'Logging in as karaf\n' )[1] )
|
|
|
|
hostAttachment = True
|
|
# FIXME: topo-HA/obelisk specific mappings:
|
|
# key is mac and value is dpid
|
|
mappings = {}
|
|
for i in range( 1, 29 ): # hosts 1 through 28
|
|
# set up correct variables:
|
|
macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
|
|
if i == 1:
|
|
deviceId = "1000".zfill(16)
|
|
elif i == 2:
|
|
deviceId = "2000".zfill(16)
|
|
elif i == 3:
|
|
deviceId = "3000".zfill(16)
|
|
elif i == 4:
|
|
deviceId = "3004".zfill(16)
|
|
elif i == 5:
|
|
deviceId = "5000".zfill(16)
|
|
elif i == 6:
|
|
deviceId = "6000".zfill(16)
|
|
elif i == 7:
|
|
deviceId = "6007".zfill(16)
|
|
elif i >= 8 and i <= 17:
|
|
dpid = '3' + str( i ).zfill( 3 )
|
|
deviceId = dpid.zfill(16)
|
|
elif i >= 18 and i <= 27:
|
|
dpid = '6' + str( i ).zfill( 3 )
|
|
deviceId = dpid.zfill(16)
|
|
elif i == 28:
|
|
deviceId = "2800".zfill(16)
|
|
mappings[ macId ] = deviceId
|
|
|
|
if hosts or "Error" not in hosts:
|
|
if hosts == []:
|
|
print "WARNING: There are no hosts discovered"
|
|
else:
|
|
for host in hosts:
|
|
mac = None
|
|
location = None
|
|
device = None
|
|
port = None
|
|
try:
|
|
mac = host.get( 'mac' )
|
|
assert mac, "mac field could not be found for this host object"
|
|
|
|
location = host.get( 'locations' )[ 0 ] # Only looking for first interface
|
|
assert location, "location field could not be found for this host object"
|
|
|
|
# Trim the protocol identifier off deviceId
|
|
device = str( location.get( 'elementId' ) ).split(':')[1]
|
|
assert device, "elementId field could not be found for this host location object"
|
|
|
|
port = location.get( 'port' )
|
|
assert port, "port field could not be found for this host location object"
|
|
|
|
# Now check if this matches where they should be
|
|
if mac and device and port:
|
|
if device != mappings[ str( mac ) ]:
|
|
print "The attachment device is incorrect for host " + str( mac ) +\
|
|
". Expected: " + mappings[ str( mac ) ] + "; Actual: " + device
|
|
hostAttachment = False
|
|
if str( port ) != "1":
|
|
print "The attachment port is incorrect for host " + str( mac ) +\
|
|
". Expected: 1; Actual: " + str( port)
|
|
hostAttachment = False
|
|
else:
|
|
hostAttachment = False
|
|
except AssertionError as e:
|
|
print "ERROR: Json object not as expected:"
|
|
print e
|
|
print "host object: " + repr( host )
|
|
hostAttachment = False
|
|
else:
|
|
print "No hosts json output or \"Error\" in output. hosts = " + repr( hosts )
|