Пример #1
0
def save_storage(storage, dev):
    mount_points = []
    for item in storage:
        sn = item.get('sn')
        mount_point = item.get('mountpoint')
        if not sn or not mount_point:
            continue
        label = item.get('label')
        try:
            size = int(item.get('size'))
        except ValueError:
            continue
        model_name = '{} {}MiB'.format(label, size)
        model, c = ComponentModel.create(
            ComponentType.disk,
            size=size,
            family=model_name,
            priority=SAVE_PRIORITY,
        )
        stor = None
        try:
            stor = Storage.objects.get(device=dev, mount_point=mount_point)
            if stor.sn != sn:
                try:
                    stor_found_by_sn = Storage.objects.get(sn=sn)
                    if all((stor_found_by_sn.model == model,
                            stor_found_by_sn.size == size,
                            stor_found_by_sn.label == label)):
                        stor.mount_point = None
                        stor.save(priotity=SAVE_PRIORITY)
                        stor = stor_found_by_sn
                        stor.device = dev
                        stor.mount_point = mount_point
                    else:
                        stor = None
                except Storage.DoesNotExist:
                    stor.sn = sn
        except Storage.DoesNotExist:
            try:
                stor = Storage.objects.get(sn=sn)
                if all((stor.model == model, stor.size == size,
                        stor.label == label)):
                    stor.device = dev
                    stor.mount_point = mount_point
                else:
                    stor = None
            except Storage.DoesNotExist:
                stor = Storage(device=dev, mount_point=mount_point, sn=sn)
        if stor:
            stor.model = model
            stor.label = label
            stor.size = size
            stor.save(priority=SAVE_PRIORITY)
        mount_points.append(mount_point)
    dev.storage_set.exclude(mount_point__in=mount_points).update(
        mount_point=None)
Пример #2
0
 def test_disks(self):
     model = ComponentModel(
         type=ComponentType.disk,
         name="HP DG0300BALVP SAS 307200MiB, 10000RPM",
     )
     model.save()
     Storage(
         sn="abc3",
         device=self.device,
         label="ziew",
         mount_point="/dev/hda",
         model=model,
         size=307200,
     ).save()
     data = get_device_data(Device.objects.get(sn='123456789'))
     disks = data['disks']
     self.assertEqual(len(disks), 1)
     self.assertEqual(disks[0]['size'], 307200)
     self.assertEqual(disks[0]['serial_number'], "abc3")
     self.assertEqual(disks[0]['mount_point'], "/dev/hda")
Пример #3
0
def create_device(device, cpu=None, memory=None, storage=None):
    dev = Device.create(
        model=device.get('model'),
        model_name=device.get('model_name'),
        model_type=device.get('model_type'),
        sn=device.get('sn'),
        venture=device.get('venture'),
        parent=device.get('parent'),
        price=device.get('price'),
        deprecation_kind=device.get('deprecation_kind'),
        purchase_date=device.get('purchase_date'),
    )
    dev.name = device.get('name')
    dev.save()
    if cpu:
        model = create_model(device, cpu, ComponentType.processor)
        for cpu in duplicate_item(cpu):
            Processor(
                device=dev,
                model=model,
                label=cpu.get('label'),
            ).save()
    if memory:
        model = create_model(device, memory, ComponentType.memory)
        for memory in duplicate_item(memory):
            Memory(
                device=dev,
                model=model,
                speed=memory.get('speed'),
                size=memory.get('size'),
                label=memory.get('label'),
            ).save()
    if storage:
        model = create_model(device, storage, ComponentType.disk)
        for storage in duplicate_item(storage):
            Storage(
                device=dev,
                model=model,
                label=storage.get('label'),
            ).save()
    return dev