CMDB服務器管理系統【s5day90】:建立資產更新服務器硬盤信息

一、建立硬件資產信息

import json
from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from repository import models
from .plugins import PluginManger

@csrf_exempt
def server(request):
    # 客戶端提交的最新資產數據
    server_dict = json.loads(request.body.decode('utf-8'))

    # 檢查server表中是否有當前資產信息【主機名是惟一標識】
    if not server_dict['basic']['status']:
        return HttpResponse('臣妾作不到')
		
hostname = server_dict['basic']['data']['hostname']
server_obj = models.Server.objects.filter(hostname=hostname).first()

	if not server_obj:
		#建立服務器信息
		tmp = {}
		tmp.update(server_dict['basic']['data'])
		tmp.update(server_dict['board']['data'])
		server_dict = models.Server.object.create(**tmp)
		#網卡、內存、硬盤...
		
		#硬盤
		disk_info_dict = server_dict['disk']['data']
		for item in disk_info_dict.values():
			item['server_obj'] = server_obj
			#item['server_obj'] = server_obj
			models.Disk.object.create(**item)
			
		#內存	
		mem_info_dict = server_dict['memory']['data']
		for item in mem_info_dict.values():
			item['server_obj']= server_obj
			models.Memory.object.create(**item)
		 
		#網卡	
		nic_info_dict = server_dict['nic']['data']
		for k,v in nic_info_dict.values():
			v['server_obj'] = server_obj
			v['name'] = k
			models.NIC.object.create(**v)	
		else:	

二、更新服務器信息

#更新server表	
		tmp = {}	
		tmp.update(server_dict['basic']['data'])	
		tmp.update(server_dict['board']['data'])	
			
		#服務器數據更新	
		tmp.pop('hostname')	
		record_list = []	
		for k,new_val in tmp.item():	
			old_val != new_val:	
			if old_val!= new_val:	
				record = "[%s]的[%s]由[%s]變動爲[%s]" % (hostname,k,old_val.new_val)	
				record_list.append(record)	
				setattr(server_obj,k,new_val)	
		server_obj.save()	
		if record_list:	
			models.ServerRecord.object.create(server_obj=server_obj,content=';'.join(record_list))
			

三、更新硬盤信息

class Disk(object):
    def __init__(self,server_obj,info):
        self.server_obj = server_obj
        self.disk_dict = info

    def process(self):
        # 硬盤、網卡和內存
        new_disk_info_dict = self.disk_dict['data']
        """
        {
            '0': {'slot': '0', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5NV'},
            '1': {'slot': '1', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5AH'},
            '2': {'slot': '2', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1SZNSAFA01085L     Samsung SSD 850 PRO 512GB               EXM01B6Q'},
            '3': {'slot': '3', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAF912433K     Samsung SSD 840 PRO Series              DXM06B0Q'},
            '4': {'slot': '4', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAF303909M     Samsung SSD 840 PRO Series              DXM05B0Q'},
            '5': {'slot': '5', 'pd_type': 'SATA', 'capacity': '476.939', 'model': 'S1AXNSAFB00549A     Samsung SSD 840 PRO Series
        }"""
        new_disk_info_list = self.server_obj.disk.all()
        """
        [
            obj,
            obj,
            obj,
        ]
        """
        new_disk_slot_set = set(new_disk_info_dict.keys())
        old_disk_slot_set = {obj.slot for obj in new_disk_info_list}

        # add_slot_list = new_disk_slot_set - old_disk_slot_set
        add_slot_list = new_disk_slot_set.difference(old_disk_slot_set)
        del_slot_list = old_disk_slot_set.difference(new_disk_slot_set)
        update_slot_list = old_disk_slot_set.intersection(new_disk_slot_set)

        add_record_list = []
        # 增長 [2,5]
        for slot in add_slot_list:
            value = new_disk_info_dict[slot]
            tmp = "添加硬盤..."
            add_record_list.append(tmp)
            value['server_obj'] = self.server_obj
            models.Disk.objects.create(**value)
        # 刪除 [4,6]
        models.Disk.objects.filter(server_obj=self.server_obj, slot__in=del_slot_list).delete()

        # 更新 [7,8]
        for slot in update_slot_list:
            value = new_disk_info_dict[
                slot]  # {'slot': '0', 'pd_type': 'SAS', 'capacity': '279.396', 'model': 'SEAGATE ST300MM0006     LS08S0K2B5NV'}
            obj = models.Disk.objects.filter(server_obj=self.server_obj, slot=slot).first()
            for k, new_val in value.items():
                old_val = getattr(obj, k)
                if old_val != new_val:
                    setattr(obj, k, new_val)
            obj.save()

    def add_disk(self):
        pass

    def del_disk(self):
        pass

    def update_disk(self):
        pass
相關文章
相關標籤/搜索