2
0
mirror of https://github.com/xcat2/confluent.git synced 2025-01-16 12:47:50 +00:00

Avoid linking obviously bad UUIDs

If UUID is obviously bad, do more to ignore it when linking data
This commit is contained in:
Jarrod Johnson 2017-08-26 23:20:45 -04:00
parent cb00c5d35d
commit 8774ae0305

View File

@ -151,7 +151,7 @@ def enrich_pxe_info(info):
sn = None
mn = None
uuid = info.get('uuid', '')
if not uuid:
if not uuid_is_valid(uuid):
return info
for mac in known_uuids.get(uuid, {}):
if not sn and 'serialnumber' in known_uuids[uuid][mac]:
@ -160,6 +160,12 @@ def enrich_pxe_info(info):
info['modelnumber'] = known_uuids[uuid][mac]['modelnumber']
def uuid_is_valid(uuid):
if not uuid:
return False
return uuid.lower() not in ('00000000-0000-0000-0000-000000000000', 'ffffffff-ffff-ffff-ffff-ffffffffffff')
def send_discovery_datum(info):
addresses = info.get('addresses', [])
yield msg.KeyValueData({'nodename': info.get('nodename', '')})
@ -551,7 +557,7 @@ def detected(info):
handler = handler.NodeHandler(info, cfg)
handler.scan()
uuid = info.get('uuid', None)
if uuid:
if uuid_is_valid(uuid):
known_uuids[uuid][info['hwaddr']] = info
if handler.https_supported and not handler.https_cert:
if handler.cert_fail_reason == 'unreachable':
@ -803,7 +809,8 @@ def do_pxe_discovery(cfg, handler, info, manual, nodename, policies):
cfg.set_node_attributes({nodename: attribs})
if info['uuid'] in known_pxe_uuids:
return True
known_pxe_uuids[info['uuid']] = nodename
if uuid_is_valid(info['uuid']):
known_pxe_uuids[info['uuid']] = nodename
log.log({'info': 'Detected {0} ({1} with mac {2})'.format(
nodename, handler.devname, info['hwaddr'])})
return True
@ -909,6 +916,8 @@ def _map_unique_ids(nodes=None):
uuid_by_nodes = {}
fprint_by_nodes = {}
for uuid in nodes_by_uuid:
if not uuid_is_valid():
continue
node = nodes_by_uuid[uuid]
if node in bigmap:
uuid_by_nodes[node] = uuid
@ -922,14 +931,14 @@ def _map_unique_ids(nodes=None):
if node in fprint_by_nodes:
del nodes_by_fprint[fprint_by_nodes[node]]
uuid = bigmap[node].get('id.uuid', {}).get('value', None)
if uuid:
if uuid_is_valid(uuid):
nodes_by_uuid[uuid] = node
fprint = bigmap[node].get(
'pubkeys.tls_hardwaremanager', {}).get('value', None)
if fprint:
nodes_by_fprint[fprint] = node
for uuid in known_pxe_uuids:
if uuid not in nodes_by_uuid:
if uuid_is_valid(uuid) and uuid not in nodes_by_uuid:
nodes_by_uuid[uuid] = known_pxe_uuids[uuid]