收集资产代码流程
1.起初我们些的代码是面条式的一堆的逻辑判断。
后来通过了不断的优化升级实现了一个3种方案都支持的CMDB系统,我们用哪种方案只需要在配置文件里修改一下设置就行了。
同时我们借鉴了django的中间件设置还实现了可插拔式的功能,这个可插拔式针对的是我们要收集的某些硬件信息,只需要注释一下,就可以达到不用搜集了。
2.流程: 1.settings: MODE----->确定哪种方案(【3个方案py文件】)
确定哪种脚本(【agent脚本,ssh(paramiko),saltstack】)本质功能调命令行
可插拔配置---->(需要收集的硬件信息【每个硬件1个py文件】)
MODE='agent' #方案一 'agent', 方案二 'ssh',方案三 'salt' DEBUG=True #可插拔配置 PLUGINS_DICT={ 'basic':'src.data.basic.Basic', 'board':'src.data.board.Board', 'cpu':'src.data.cpu.Cpu', 'disk':'src.data.disk.Disk', 'memory':'src.data.memory.Memory', # 'nic':'src.data.nic.Nic', }
2.for循环硬件配置,传入方法:执行相应硬件的linux命令 拿到我们需要收集的信息
{'basic': {'status': 10000, 'data': {'os_platform': 'linux', 'os_version': 'CentOS release 6.6 (Final) Kernel on an \m', 'hostname': 'c2.com'}}}
#注意:ssh(hostme 密钥或服务器用户名密码 ),salt方式只需要hostname
#我写了一个类方法来for循环配置文件,一个方法拿到脚本方法 ,init定义了hostname,root,pwd等
API的一个认证
token认证:
过滤2部分:1.无关的请求 2.用户请求
token格式 asadasdasd|1321151.21312
通过格式过滤
通过time时间设置token的有效时间
通过随机字符串认证token
通过了 存入redis(无限存?)只允许登陆1次设置过期时间
AES数据加密
1.pip3 install pycrypto 2.pip3 install wheel 3.https://github.com/sfbahr/PyCrypto-Wheels 下载pycrypto-2.6.1-cp35-none-win32 4.cd 到下载目录 pip3 install pycrypto 安装
from Crypto.Cipher import AES def encrypt(message): key = b'dfdsdfsasdfdsdfs' cipher = AES.new(key, AES.MODE_CBC, key) ba_data = bytearray(message,encoding='utf-8') v1 = len(ba_data) v2 = v1 % 16 if v2 == 0: v3 = 16 else: v3 = 16 - v2 for i in range(v3): ba_data.append(v3) final_data = ba_data msg = cipher.encrypt(final_data) # 要加密的字符串,必须是16个字节或16个字节的倍数 return msg def decrypt(msg): key = b'dfdsdfsasdfdsdfs' cipher = AES.new (key, AES.MODE_CBC, key) result = cipher.decrypt ( msg) # result = b'xe8xa6x81xe5x8axa0xe5xafx86xe5x8axa0xe5xafx86xe5x8axa0sdfsd ' data = result[0:-result[-1]] return str (data, encoding='utf-8')
数据库表设计