def cisco_component(dev, inv): extra = '' # '\n'.join('%s: %s' % i for i in inv.iteritems()) comp_type = cisco_type(inv['pid']) model, created = ComponentModel.concurrent_get_or_create( type=comp_type.id, size=0, speed=0, cores=0, family=inv['pid'], extra_hash=hashlib.md5(extra).hexdigest(), extra=extra) name = inv['descr'] if not name.lower().startswith('cisco'): name = 'Cisco %s' % name if created: model.name = name[:50] model.save() elif model.name != name[:50]: model.name = name[:50] model.save() comp, created = GenericComponent.concurrent_get_or_create(sn=inv['sn'], device=dev) comp.model = model comp.label = inv['name'][:255] comp.save() return comp
def cisco_component(dev, inv): comp_type = cisco_type(inv['pid']) name = inv['descr'] if not name.lower().startswith('cisco'): name = 'Cisco %s' % name model, created = ComponentModel.create( comp_type, family=inv['pid'], name=name, priority=0, # FIXME: why 0? ) comp, created = GenericComponent.concurrent_get_or_create( sn=inv['sn'], defaults={ 'device': dev, }, ) if comp.device == dev: comp.model = model comp.label = inv['name'][:255] comp.save() else: DiscoveryWarning( message="GenericComponent(id={}) belongs to Device(id={})".format( comp.id, comp.device.id, ), plugin=__name__, device=dev, ).save() comp = None return comp
def cisco_component(dev, inv, ip_address=None): comp_type = cisco_type(inv['pid']) name = inv['descr'] if not name.lower().startswith('cisco'): name = 'Cisco %s' % name model, created = ComponentModel.create( comp_type, family=inv['pid'], name=name, priority=0, # FIXME: why 0? ) comp, created = GenericComponent.concurrent_get_or_create( sn=inv['sn'], defaults={ 'device': dev, }, ) if comp.device == dev: comp.model = model comp.label = inv['name'][:255] comp.save() elif ip_address: DiscoveryWarning( message="GenericComponent(id={}) belongs to Device(id={})".format( comp.id, comp.device.id, ), plugin=__name__, device=dev, ip=ip_address, ).save() comp = None else: comp = None return comp
def _component(model_type, pairs, parent, raw): model_type = ComponentType.unknown if "Mach type/model" in pairs: model_name = "%s (%s)" % (pairs["Mach type/model"], pairs["Part no."]) elif "Part no." in pairs: model_name = pairs["Part no."] else: raise DeviceError("No model/part no.") if not model_name.startswith("IBM"): model_name = "IBM " + model_name sn = pairs.get("Mach serial number") if sn in SERIAL_BLACKLIST: sn = None if not sn: sn = pairs["FRU serial no."] if sn in SERIAL_BLACKLIST: sn = None if not sn: raise DeviceError("No serial no.") name = pairs.get("Name") or pairs.get("Product Name") or model_name extra = model_name if "Management" in model_name: model_type = ComponentType.management elif "Fibre Channel" in model_name: model_type = ComponentType.fibre return None # FIXME: merge GenericComponent(model__type=fibre) and FibreChannel elif "Power" in model_name: model_type = ComponentType.power elif "Media" in model_name: model_type = ComponentType.media elif "Cooling" in model_name: model_type = ComponentType.cooling elif "Fan" in model_name: model_type = ComponentType.cooling model, mcreated = ComponentModel.concurrent_get_or_create( type=model_type.id, extra_hash=hashlib.md5(extra).hexdigest(), extra=extra ) model.name = model_name model.save(priority=SAVE_PRIORITY) component, created = GenericComponent.concurrent_get_or_create(device=parent, sn=sn) component.model = model component.label = name firmware = pairs.get("AMM firmware") or pairs.get("FW/BIOS") or pairs.get("Main Application 2") if firmware: component.hard_firmware = "%s %s rev %s" % (firmware["Build ID"], firmware["Rel date"], firmware["Rev"]) else: firmware = pairs.get("Power Module Cooling Device firmware rev.") if firmware: component.hard_firmware = "rev %s" % firmware firmware = pairs.get("Boot ROM") or pairs.get("Main Application 1") or pairs.get("Blade Sys Mgmt Processor") if firmware: component.boot_firmware = "%s %s rev %s" % (firmware["Build ID"], firmware["Rel date"], firmware["Rev"]) firmware = pairs.get("Blade Sys Mgmt Processor") if firmware: component.mgmt_firmware = "%s %s rev %s" % (firmware["Build ID"], firmware["Rel date"], firmware["Rev"]) firmware = pairs.get("Diagnostics") if firmware: component.diag_firmware = "%s %s rev %s" % (firmware["Build ID"], firmware["Rel date"], firmware["Rev"]) component.save(update_last_seen=True, priority=SAVE_PRIORITY) return component
def test_parts(self): model = ComponentModel( type=ComponentType.management, name="weapons of mass destruction", ) model.save() GenericComponent( label='ziew', device=self.device, model=model, ).save() data = get_device_data(Device.objects.get(sn='123456789')) parts = data['parts'] self.assertEqual(parts[0]['type'], "management") self.assertEqual(parts[0]['model_name'], "weapons of mass destruction") self.assertEqual(len(parts), 1)
def make_component(name, symbol, key, multiplier, unit): if key not in tenant: return model, created = ComponentModel.concurrent_get_or_create( type=ComponentType.unknown.id, speed=0, cores=0, size=0, family=symbol, extra_hash='' ) if created: model.name = name model.save() res, created = GenericComponent.concurrent_get_or_create( model=model, device=dev, sn='%s-%s' % (symbol, tenant['tenant_id'])) if created: res.label = unit res.save() if model.group and model.group.price: value = tenant[key] / multiplier cost = value * model.group.price / (model.group.size_modifier or 1) total_daily_cost[0] += cost
def cisco_component(dev, inv): extra = '' # '\n'.join('%s: %s' % i for i in inv.iteritems()) comp_type = cisco_type(inv['pid']) model, created = ComponentModel.concurrent_get_or_create( type=comp_type.id, size=0, speed=0, cores=0, family=inv['pid'], extra_hash=hashlib.md5(extra).hexdigest(), extra=extra) name = inv['descr'] if not name.lower().startswith('cisco'): name = 'Cisco %s' % name if created: model.name = name[:50] model.save() elif model.name != name[:50]: model.name = name[:50] model.save() comp, created = GenericComponent.concurrent_get_or_create( sn=inv['sn'], device=dev) comp.model = model comp.label = inv['name'][:255] comp.save() return comp
def cisco_component(dev, inv, ip_address=None): comp_type = cisco_type(inv['pid']) name = inv['descr'] if not name.lower().startswith('cisco'): name = 'Cisco %s' % name model, created = ComponentModel.create( comp_type, family=inv['pid'], name=name, priority=0, # FIXME: why 0? ) comp, created = GenericComponent.concurrent_get_or_create( sn=inv['sn'], defaults={ 'device': dev, }, ) if comp.device == dev: comp.model = model comp.label = inv['name'][:255] comp.save() else: comp = None return comp
def make_component(name, symbol, key, multiplier, unit): if key not in tenant: return model, created = ComponentModel.create( ComponentType.unknown, family=symbol, name=name, priority=0, ) res, created = GenericComponent.concurrent_get_or_create( sn='%s-%s' % (symbol, tenant['tenant_id']), defaults=dict( model=model, device=dev, ), ) if created: res.label = unit res.save() if model.group and model.group.price: value = tenant[key] / multiplier cost = value * model.group.price / (model.group.size_modifier or 1) total_daily_cost[0] += cost
def make_component(name, symbol, key, multiplier, unit): if key not in tenant: return model, created = ComponentModel.concurrent_get_or_create( type=ComponentType.unknown.id, speed=0, cores=0, size=0, family=symbol, extra_hash='') if created: model.name = name model.save() res, created = GenericComponent.concurrent_get_or_create( model=model, device=dev, sn='%s-%s' % (symbol, tenant['tenant_id'])) if created: res.label = unit res.save() if model.group and model.group.price: value = tenant[key] / multiplier cost = value * model.group.price / (model.group.size_modifier or 1) total_daily_cost[0] += cost
def make_component(name, symbol, key, multiplier, unit): if key not in tenant: return model, created = ComponentModel.create( ComponentType.unknown, family=symbol, name=name, priority=0, ) res, created = GenericComponent.concurrent_get_or_create( sn='%s-%s-%s' % (symbol, tenant['tenant_id'], region), defaults=dict( model=model, device=dev, ), ) if created: res.label = unit res.save() if model.group and model.group.price: value = tenant[key] / multiplier cost = value * model.group.price / (model.group.size_modifier or 1) total_daily_cost[0] += cost
def _add_hp_oa_devices(devices, device_type, parent=None): if devices and not isinstance(devices, list): devices = [devices] for i, device in enumerate(devices): bay = device['BAY']['CONNECTION2']['BLADESYMBOLICNUMBER'] or str(device['BAY']['CONNECTION']) name = device['PN'].strip() or device['SPN'].strip() if not name.startswith('HP'): name = 'HP ' + name firmware = str(device.get('FWRI', '')) sn = device['SN'].strip() if sn in SERIAL_BLACKLIST: sn = None if not sn: sn = device['BSN'].strip() if sn in SERIAL_BLACKLIST: sn = None try: ip = network.validate_ip(device['MGMTIPADDR']) except ValueError: continue ip_address, created = IPAddress.concurrent_get_or_create(address=str(ip)) if created: ip_address.hostname = network.hostname(ip_address.address) ip_address.snmp_name = name ip_address.save(update_last_seen=True) # no priorities for IP addresses if device_type == DeviceType.management: ip_address.is_management = True if parent and not parent.management: parent.management = ip_address parent.save(priority=SAVE_PRIORITY) extra = name model, mcreated = ComponentModel.concurrent_get_or_create( type=ComponentType.management.id, extra_hash=hashlib.md5(extra).hexdigest(), extra=extra) model.name = name model.save(priority=SAVE_PRIORITY) component, created = GenericComponent.concurrent_get_or_create( device=parent, sn=sn) component.model = model component.label = name component.save(priority=SAVE_PRIORITY) if ip: ip_address.is_management = True ip_address.device = parent ip_address.save() # no priorities for IP addresses continue if device_type == DeviceType.switch and 'SAN' in name: device_type = DeviceType.fibre_channel_switch ethernets = list(_get_ethernets(device)) if not (ip and name and (sn or ethernets)): continue dev = None if ip and device_type in (DeviceType.switch, DeviceType.fibre_channel_switch): ip_addr, ip_created = IPAddress.concurrent_get_or_create(address=ip) if ip_addr.device: dev = ip_addr.device dev.parent = parent if dev is None: dev = Device.create(sn=sn, model_name=name, model_type=device_type, ethernets=ethernets, parent=parent, priority=SAVE_PRIORITY) if firmware: dev.hard_firmware = firmware if bay: name = '%s [%s]' % (name, bay) if bay: if 'A' in bay or 'B' in bay: dev.chassis_position = int(bay[:-1]) if bay[-1] == 'A': dev.chassis_position += 1000 elif bay[-1] == 'B': dev.chassis_position += 2000 else: dev.chassis_position = int(bay) dev.position = bay else: dev.chassis_position = i + 1 dev.save(update_last_seen=True, priority=SAVE_PRIORITY) ip_address.device = dev ip_address.save(update_last_seen=True) # no priorities for IP addresses
def _component(model_type, pairs, parent, raw): model_type = ComponentType.unknown if 'Mach type/model' in pairs: model_name = '%s (%s)' % (pairs['Mach type/model'], pairs['Part no.']) elif 'Part no.' in pairs: model_name = pairs['Part no.'] else: raise DeviceError('No model/part no.') if not model_name.startswith('IBM'): model_name = 'IBM ' + model_name sn = pairs.get('Mach serial number') if sn in SERIAL_BLACKLIST: sn = None if not sn: sn = pairs['FRU serial no.'] if sn in SERIAL_BLACKLIST: sn = None if not sn: raise DeviceError('No serial no.') name = pairs.get('Name') or pairs.get('Product Name') or model_name if 'Management' in model_name: model_type = ComponentType.management elif 'Fibre Channel' in model_name: # FIXME: merge GenericComponent(model__type=fibre) and FibreChannel model_type = ComponentType.fibre return None elif 'Power' in model_name: model_type = ComponentType.power elif 'Media' in model_name: model_type = ComponentType.media elif 'Cooling' in model_name: model_type = ComponentType.cooling elif 'Fan' in model_name: model_type = ComponentType.cooling model, mcreated = ComponentModel.create( model_type, family=model_name, name=model_name, priority=SAVE_PRIORITY, ) component, created = GenericComponent.concurrent_get_or_create( sn=sn, defaults=dict( device=parent, ), ) component.model = model component.label = name firmware = (pairs.get('AMM firmware') or pairs.get('FW/BIOS') or pairs.get('Main Application 2')) if firmware: component.hard_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) else: firmware = pairs.get('Power Module Cooling Device firmware rev.') if firmware: component.hard_firmware = 'rev %s' % firmware firmware = (pairs.get('Boot ROM') or pairs.get('Main Application 1') or pairs.get('Blade Sys Mgmt Processor')) if firmware: component.boot_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) firmware = (pairs.get('Blade Sys Mgmt Processor')) if firmware: component.mgmt_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) firmware = (pairs.get('Diagnostics')) if firmware: component.diag_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) component.save(update_last_seen=True, priority=SAVE_PRIORITY) return component
def _component(model_type, pairs, parent, raw): model_type = ComponentType.unknown if 'Mach type/model' in pairs: model_name = '%s (%s)' % (pairs['Mach type/model'], pairs['Part no.']) elif 'Part no.' in pairs: model_name = pairs['Part no.'] else: raise DeviceError('No model/part no.') if not model_name.startswith('IBM'): model_name = 'IBM ' + model_name sn = pairs.get('Mach serial number') if sn in SERIAL_BLACKLIST: sn = None if not sn: sn = pairs['FRU serial no.'] if sn in SERIAL_BLACKLIST: sn = None if not sn: raise DeviceError('No serial no.') name = pairs.get('Name') or pairs.get('Product Name') or model_name if 'Management' in model_name: model_type = ComponentType.management elif 'Fibre Channel' in model_name: # FIXME: merge GenericComponent(model__type=fibre) and FibreChannel model_type = ComponentType.fibre return None elif 'Power' in model_name: model_type = ComponentType.power elif 'Media' in model_name: model_type = ComponentType.media elif 'Cooling' in model_name: model_type = ComponentType.cooling elif 'Fan' in model_name: model_type = ComponentType.cooling model, mcreated = ComponentModel.create( model_type, family=model_name, name=model_name, priority=SAVE_PRIORITY, ) component, created = GenericComponent.concurrent_get_or_create( sn=sn, defaults=dict(device=parent, ), ) component.model = model component.label = name firmware = (pairs.get('AMM firmware') or pairs.get('FW/BIOS') or pairs.get('Main Application 2')) if firmware: component.hard_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) else: firmware = pairs.get('Power Module Cooling Device firmware rev.') if firmware: component.hard_firmware = 'rev %s' % firmware firmware = (pairs.get('Boot ROM') or pairs.get('Main Application 1') or pairs.get('Blade Sys Mgmt Processor')) if firmware: component.boot_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) firmware = (pairs.get('Blade Sys Mgmt Processor')) if firmware: component.mgmt_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) firmware = (pairs.get('Diagnostics')) if firmware: component.diag_firmware = '%s %s rev %s' % ( firmware['Build ID'], firmware['Rel date'], firmware['Rev'], ) component.save(update_last_seen=True, priority=SAVE_PRIORITY) return component