2019-09-23 15:04:52 +00:00
|
|
|
#!/usr/bin/python2
|
2018-05-17 19:35:52 +00:00
|
|
|
|
|
|
|
# This is a sample python script for going through all observed mac addresses
|
|
|
|
# and assuming they are BMC related and printing nodeattrib commands
|
|
|
|
# for each node to access the bmc using the interface specified on the command
|
|
|
|
# line
|
|
|
|
|
|
|
|
# Not necessarily as useful if there may be mistakes in the
|
|
|
|
# net.switch/net.switchport attributes, but a handy utility in a pinch when
|
|
|
|
# you really know
|
|
|
|
|
|
|
|
|
|
|
|
import confluent.client as cl
|
|
|
|
import socket
|
|
|
|
import struct
|
|
|
|
c = cl.Command()
|
|
|
|
macs = []
|
|
|
|
interface = sys.argv[1]
|
|
|
|
for mac in c.read('/networking/macs/by-mac/'):
|
|
|
|
macs.append(mac['item']['href'])
|
|
|
|
for mac in macs:
|
|
|
|
macinfo = list(c.read('/networking/macs/by-mac/{0}'.format(mac)))[0]
|
|
|
|
if 'possiblenode' in macinfo and macinfo['possiblenode']:
|
|
|
|
if macinfo['macsonport'] > 1:
|
2018-05-17 19:40:20 +00:00
|
|
|
print('#Ambiguous set of macs on port for ' + macinfo[
|
2018-05-17 19:35:52 +00:00
|
|
|
'possiblenode'])
|
|
|
|
prefix = int(mac.replace('-', '')[:6], 16) ^ 0b100000000000000000
|
|
|
|
prefix = prefix << 8
|
|
|
|
prefix |= 0xff
|
|
|
|
suffix = int(mac.replace('-', '')[6:], 16)
|
|
|
|
suffix |= 0xfe000000
|
|
|
|
rawn = struct.pack('!QLL', 0xfe80000000000000, prefix, suffix)
|
|
|
|
bmc = socket.inet_ntop(socket.AF_INET6, rawn)
|
|
|
|
print('nodeattrib {0} bmc={1}%{2}'.format(macinfo['possiblenode'],
|
|
|
|
bmc, interface))
|