blob: 988e2e575ed54c43e3a7587625ec814dc56a6304 [file] [log] [blame]
Jon Halldb371252015-06-08 15:40:26 -07001#!/usr/bin/python
2
3import sys
4import os
5import json
6
7# TODO: if none given, use OCI
8try:
9 onosIp = sys.argv[1]
10 print "Reading hosts view from ONOS node " + onosIp + ":"
11except Exception as e:
12 print "Error reading ONOS IP arguement"
13 print e
14# Grab the json objects from ONOS
15output = os.popen("onos " + onosIp + " \"hosts -j\"" )
16hosts = json.loads( output.read() )
17#hosts = json.loads( output.split( 'Logging in as karaf\n' )[1] )
18
19hostAttachment = True
20# FIXME: topo-HA/obelisk specific mappings:
21# key is mac and value is dpid
22mappings = {}
23for i in range( 1, 29 ): # hosts 1 through 28
24 # set up correct variables:
25 macId = "00:" * 5 + hex( i ).split( "0x" )[1].upper().zfill(2)
26 if i == 1:
27 deviceId = "1000".zfill(16)
28 elif i == 2:
29 deviceId = "2000".zfill(16)
30 elif i == 3:
31 deviceId = "3000".zfill(16)
32 elif i == 4:
33 deviceId = "3004".zfill(16)
34 elif i == 5:
35 deviceId = "5000".zfill(16)
36 elif i == 6:
37 deviceId = "6000".zfill(16)
38 elif i == 7:
39 deviceId = "6007".zfill(16)
40 elif i >= 8 and i <= 17:
41 dpid = '3' + str( i ).zfill( 3 )
42 deviceId = dpid.zfill(16)
43 elif i >= 18 and i <= 27:
44 dpid = '6' + str( i ).zfill( 3 )
45 deviceId = dpid.zfill(16)
46 elif i == 28:
47 deviceId = "2800".zfill(16)
48 mappings[ macId ] = deviceId
49
50if hosts or "Error" not in hosts:
51 if hosts == []:
52 print "WARNING: There are no hosts discovered"
53 else:
54 for host in hosts:
55 mac = None
56 location = None
57 device = None
58 port = None
59 try:
60 mac = host.get( 'mac' )
61 assert mac, "mac field could not be found for this host object"
62
Jeremy Ronquillo6e920c82017-07-10 16:44:09 -070063 location = host.get( 'locations' )[ 0 ] # Only looking for first interface
Jon Halldb371252015-06-08 15:40:26 -070064 assert location, "location field could not be found for this host object"
65
66 # Trim the protocol identifier off deviceId
67 device = str( location.get( 'elementId' ) ).split(':')[1]
68 assert device, "elementId field could not be found for this host location object"
69
70 port = location.get( 'port' )
71 assert port, "port field could not be found for this host location object"
72
73 # Now check if this matches where they should be
74 if mac and device and port:
75 if device != mappings[ str( mac ) ]:
76 print "The attachment device is incorrect for host " + str( mac ) +\
77 ". Expected: " + mappings[ str( mac ) ] + "; Actual: " + device
78 hostAttachment = False
79 if str( port ) != "1":
80 print "The attachment port is incorrect for host " + str( mac ) +\
81 ". Expected: 1; Actual: " + str( port)
82 hostAttachment = False
83 else:
84 hostAttachment = False
85 except AssertionError as e:
86 print "ERROR: Json object not as expected:"
87 print e
88 print "host object: " + repr( host )
89 hostAttachment = False
90else:
91 print "No hosts json output or \"Error\" in output. hosts = " + repr( hosts )