修改服务器资产信息,CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息...

1、创建硬件资产信息

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:

2、更新服务器信息

#更新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))

3、更新硬盘信息

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值