内存相关代码
from repository import models
class Memory(object):
def __init__(self,server_obj,info):
self.server_obj=server_obj
self.memory_dict=info
def process(self):
# 更新内存信息
new_memory_info_dict = self.memory_dict['data']
old_memory_info_list = self.server_obj.memory.all()
new_memory_slot_set = set(new_memory_info_dict.keys())
old_memory_slot_set = {obj.slot for obj in old_memory_info_list}
add_slot_list = new_memory_slot_set.difference(old_memory_slot_set)
del_slot_list = old_memory_slot_set.difference(new_memory_slot_set)
update_slot = old_memory_slot_set.intersection(new_memory_slot_set)
# 新增内存
memory_record_list = []
for slot in add_slot_list:
value = new_memory_info_dict[slot]
value['server_obj'] = self.server_obj
record = "添加内存……"
memory_record_list.append(record)
models.Memory.objects.create(**value)
# 删除内存
models.Memory.objects.filter(server_obj=self.server_obj, slot__in=del_slot_list).delete()
# 更新内存
for slot in update_slot:
value = new_memory_info_dict[slot]
obj = models.Memory.objects.filter(server_obj=self.server_obj, slot=slot)
for k, new_v in value.items():
old_v = getattr(obj, k, )
if old_v != new_v:
setattr(obj, k, new_v)
obj.save()
网卡相关代码
网卡配置与其他的硬件不同,value里没有槽位信息,直接**value信息录入不全,我把slot当做网卡的name,新增网卡对象时一一创建每个字段
from repository import models
class Nic(object):
def __init__(self,server_obj,info):
self.server_obj=server_obj
self.nic_dict=info
def process(self):
# 更新网卡信息
new_nic_info_dict = self.nic_dict['data']
old_nic_info_list = self.server_obj.nic.all()
new_nic_slot_set = set(new_nic_info_dict.keys())
old_nic_slot_set = {obj.slot for obj in old_nic_info_list}
add_slot_list = new_nic_slot_set.difference(old_nic_slot_set)
del_slot_list = old_nic_slot_set.difference(new_nic_slot_set)
update_slot = old_nic_slot_set.intersection(new_nic_slot_set)
# 新增网卡
nic_record_list = []
for slot in add_slot_list:
value = new_nic_info_dict[slot]
# print(value)
value['server_obj'] = self.server_obj
record = "添加网卡……"
nic_record_list.append(record)
models.NIC.objects.create(
name=slot,
hwaddr=value['hwaddr'],
netmask=value['netmask'],
ipaddrs=value['ipaddrs'],
up=value['up'],
server_obj=value['server_obj']
)
# 删除网卡
models.NIC.objects.filter(server_obj=self.server_obj, slot__in=del_slot_list).delete()
# 更新网卡
for slot in update_slot:
value = new_nic_info_dict[slot]
obj = models.NIC.objects.filter(server_obj=self.server_obj, slot=slot)
for k, new_v in value.items():
old_v = getattr(obj, k, )
if old_v != new_v:
setattr(obj, k, new_v)
obj.save()