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
CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息的更多相关文章
- 第十二章——SQLServer统计信息(1)——创建和更新统计信息
原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索 ...
- CMDB服务器管理系统【s5day87】:需求讨论-设计思路
自动化运维平台愿景和服务器管理系统背景 服务器管理系统 管理后台示例 需求和设计 为什么开发服务器管理系统? 背景: 原来是用Excel维护服务器资产,samb服务[多个运维人员手动维护] 搭建运维自 ...
- Day10-微信小程序实战-交友小程序-添加好友功能之创建并更新message信息
1.首先要在 添加好友 这个按钮上添加一个事件,也就是在detail.wxml的添加好友这个按钮的哪里,添加一个点击事件 handleAddFriend 并且添加好友还要考虑,现在是已登陆状态还是未登 ...
- CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解
在对获取资产信息时,简述有四种方案. 1.Agent (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...
- CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路
1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...
- CMDB服务器管理系统【s5day90】:API构造可插拔式插件逻辑
1.服务器端目录结构: 1.__init__.py from django.conf import settings from repository import models import impo ...
- CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)
django中间件工作原理 整体流程: 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器. ...
- CMDB服务器管理系统【s5day90】:获取今日未采集主机列表
1.目录结构 1.服务器端 2.客户端 2.具体代码如下 1.数据库增加两个字段 class Server(models.Model): """ 服务器信息 " ...
- CMDB服务器管理系统【s5day91】:资产采集相关问题
资产采集唯一标识和允许临时修改主机名 class AgentClient(BaseClient): def exec(self): obj = PluginManager() server_dict ...
随机推荐
- swift修改UITextfield的Placeholder字体大小和颜色
第一种方法: self.userNumber.setValue(UIColor.lightGray, forKey: "_placeholderLabel.textColor") ...
- 【记录】IntelliJ IDEA—IDEA2018-2019激活
摘要 最智能的java ide [有能力请支持正版] 1.将 0.0.0.0 account.jetbrains.com 和 0.0.0.0 www.jetbrains.com添加到 host ...
- Spring Boot使用注解实现AOP
第一步: 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- c# 小数四舍五入,向上取整,向下取整,见角进元保留多个小数位数
/// <summary> /// 实现数据的四舍五入法 /// </summary> /// <param name="v">要进行处理的数据 ...
- MyCP(课下作业,必做)
MyCP(课下作业,必做) 要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2 的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...
- JDK1.8源码(九)——java.util.LinkedHashMap 类
前面我们介绍了 Map 集合的一种典型实现 HashMap ,关于 HashMap 的特性,我们再来复习一遍: ①.基于JDK1.8的HashMap是由数组+链表+红黑树组成,相对于早期版本的 JDK ...
- 线性回归和Logistic回归
目录 线性回归 用线性回归模型拟合非线性关系 梯度下降法 最小二乘法 线性回归用于分类(logistic regression,LR) 目标函数 如何求解\(\theta\) LR处理多分类问题 线性 ...
- AWT的应用
AWT(Abstract Window TookIT)是java用于创建用户界面和绘制图形的所有类 AWT组件和容器 AWT包含了很多类和接口,用于java Application的GUI(图形用户界 ...
- JS中的块级作用域,var、let、const三者的区别
1. 块作用域{ } <script type="text/javascript"> { var a = 1; console.log(a); // 1 } conso ...
- Linux operating system basic knowleadge
1.Linux目录系统结构 It makes sense to explore the Linux filesystem from a terminal window. In fact, that ...