#!/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( 'location' ) 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 )