Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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
Example #5
0
 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)
Example #6
0
 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
Example #7
0
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
Example #8
0
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
Example #9
0
    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
Example #10
0
 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
Example #11
0
    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
Example #12
0
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
Example #14
0
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
Example #15
0
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