def handle_lshw_fibre_cards(dev, lshw, is_virtual=False, priority=0): buses = [] for bus in jpath.get_all('..bus', lshw): if not bus: continue if isinstance(bus, list): buses.extend(bus) else: buses.append(bus) buses = filter(lambda item: item['id'].startswith('fiber'), buses) buses.sort(key=lambda item: item['handle']) handled_buses = set() detected_fc_cards = set() for bus in buses: handle = unicode(bus['handle']) m = re.search(r"([1-9][0-9]*)", handle) if not m: continue physid = m.group(1) if physid in handled_buses: continue fib, created = FibreChannel.concurrent_get_or_create( device=dev, physical_id=physid) fib.label = "{} {}".format(bus['vendor'], bus['product']) fib.model, c = ComponentModel.create( ComponentType.fibre, family=bus['vendor'], name=bus['product'], priority=priority, ) fib.save(priority=priority) handled_buses.add(physid) detected_fc_cards.add(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def handle_lshw_fibre_cards(dev, lshw, is_virtual=False, priority=0): buses = [] for bus in jpath.get_all('..bus', lshw): if not bus: continue if isinstance(bus, list): buses.extend(bus) else: buses.append(bus) buses = filter(lambda item: item['id'].startswith('fiber'), buses) buses.sort(key=lambda item: item['handle']) handled_buses = set() detected_fc_cards = set() for bus in buses: handle = unicode(bus['handle']) m = re.search(r"([1-9][0-9]*)", handle) if not m: continue physid = m.group(1) if physid in handled_buses: continue fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=physid) fib.label = "{} {}".format(bus['vendor'], bus['product']) extra = fib.label fib.model, c = ComponentModel.concurrent_get_or_create( type=ComponentType.fibre.id, family=bus['vendor'], extra_hash=hashlib.md5(extra).hexdigest()) fib.model.extra = extra fib.model.name = bus['product'] fib.model.save(priority=priority) fib.save(priority=priority) handled_buses.add(physid) detected_fc_cards.add(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def handle_lshw_fibre_cards(dev, lshw, is_virtual=False, priority=0): buses = [] for bus in jpath.get_all('..bus', lshw): if not bus: continue if isinstance(bus, list): buses.extend(bus) else: buses.append(bus) buses = filter(lambda item: item['id'].startswith('fiber'), buses) buses.sort(key=lambda item: item['physid']) handled_buses = set() for bus in buses: physid = unicode(bus['physid']) for handled in handled_buses: if physid.startswith(handled): break else: fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=physid) fib.label = "{} {}".format(bus['vendor'], bus['product']) extra = fib.label fib.model, c = ComponentModel.concurrent_get_or_create( type=ComponentType.fibre.id, family=bus['vendor'], extra_hash=hashlib.md5(extra).hexdigest(), extra=extra) fib.model.name = bus['product'] fib.model.save(priority=priority) fib.save(priority=priority) handled_buses.add(physid)
def handle_lshw_fibre_cards(dev, lshw, is_virtual=False, priority=0): buses = [] for bus in jpath.get_all("..bus", lshw): if not bus: continue if isinstance(bus, list): buses.extend(bus) else: buses.append(bus) buses = filter(lambda item: item["id"].startswith("fiber"), buses) buses.sort(key=lambda item: item["handle"]) handled_buses = set() detected_fc_cards = set() for bus in buses: handle = unicode(bus["handle"]) m = re.search(r"([1-9][0-9]*)", handle) if not m: continue physid = m.group(1) if physid in handled_buses: continue fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=physid) fib.label = "{} {}".format(bus["vendor"], bus["product"]) fib.model, c = ComponentModel.create( ComponentType.fibre, family=bus["vendor"], name=bus["product"], priority=priority ) fib.save(priority=priority) handled_buses.add(physid) detected_fc_cards.add(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def save_fibre_channel(fcs, dev): detected_fc_cards = [] for f in fcs: pid = f.get("physicalid") model = f.get("model") manufacturer = f.get("manufacturer") fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=pid) fib.label = f.get("label") fib.model, c = ComponentModel.create( ComponentType.fibre, family=manufacturer or fib.label, name=model or fib.label, priority=SAVE_PRIORITY ) fib.save(priority=SAVE_PRIORITY) detected_fc_cards.append(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def _save_fc_cards(dev, data): detected_fc_cards = [] for card in data: model, _ = ComponentModel.create( ComponentType.fibre, family=card['label'], name=card['label'], priority=SAVE_PRIORITY, ) fc, _ = FibreChannel.concurrent_get_or_create( device=dev, physical_id=card['physical_id']) fc.model = model fc.label = card['label'] fc.save(priority=SAVE_PRIORITY) detected_fc_cards.append(fc.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def test_fc(self): model = ComponentModel( type=ComponentType.fibre, name="FC-336", ) model.save() FibreChannel( physical_id='deadbeefcafe', label='ziew', device=self.device, model=model, ).save() data = get_device_data(Device.objects.get(sn='123456789')) fc = data['fibrechannel_cards'] self.assertEqual(len(fc), 1) self.assertEqual(fc[0]['physical_id'], 'deadbeefcafe') self.assertEqual(fc[0]['model_name'], 'FC-336')
def _save_fc_cards(dev, data): detected_fc_cards = [] for card in data: model, _ = ComponentModel.create( ComponentType.fibre, family=card['label'], name=card['label'], priority=SAVE_PRIORITY, ) fc, _ = FibreChannel.concurrent_get_or_create( device=dev, physical_id=card['physical_id'] ) fc.model = model fc.label = card['label'] fc.save(priority=SAVE_PRIORITY) detected_fc_cards.append(fc.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def save_fibre_channel(fcs, dev): detected_fc_cards = [] for f in fcs: pid = f.get('physicalid') model = f.get('model') manufacturer = f.get('manufacturer') fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=pid) fib.label = f.get('label') fib.model, c = ComponentModel.create( ComponentType.fibre, family=manufacturer or fib.label, name=model or fib.label, priority=SAVE_PRIORITY, ) fib.save(priority=SAVE_PRIORITY) detected_fc_cards.append(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()
def save_fibre_channel(fcs, dev): detected_fc_cards = [] for f in fcs: pid = f.get('physicalid') model = f.get('model') manufacturer = f.get('manufacturer') fib, created = FibreChannel.concurrent_get_or_create(device=dev, physical_id=pid) fib.label = f.get('label') extra = '%s %s %s %s' % (fib.label, pid, manufacturer, model) fib.model, c = ComponentModel.concurrent_get_or_create( type=ComponentType.fibre.id, family=fib.label, extra_hash=hashlib.md5(extra.encode('utf-8')).hexdigest()) fib.model.extra = extra fib.model.name = model if model else fib.label fib.model.save(priority=SAVE_PRIORITY) fib.save(priority=SAVE_PRIORITY) detected_fc_cards.append(fib.pk) dev.fibrechannel_set.exclude(pk__in=detected_fc_cards).delete()