CMDB服务器管理系统【s5day89】:采集资产之整合资产
1、业务逻辑单独写
1、代码目录结构

2、client.py
from src.plugins import PluginManager
class BaseClient(object):
def post_server_info(self):
pass
class AgentClient(BaseClient):
def exec(self):
obj = PluginManager()
server_dict = obj.exec_plugin()
print(server_dict)
class SaltSshClient(BaseClient):
def get_host_list(self):
return ['c1.com','c2.com']
def exec(self):
host_list = self.get_host_list()
for host in host_list:
obj = PluginManager()
server_dict = obj.exec_plugin()
print(server_dict)
2、调用方式单独写
引子:
Run是不是要调用client.py这里面的类,每一个模式,每一个类不同,我不希望选择在run里面做
想让主函数非常简洁,尽量把业务业务逻辑调用写在业务插件里
1、run.py代码
import sys
import os
BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASEDIR)
os.environ['AUTO_CLIENT_SETTINGS'] = "conf.settings"
from src import script if __name__ == '__main__':
script.start()
2、script.py代码
from lib.config import settings
from .client import AgentClient
from .client import SaltSshClient def start():
if settings.MODE == 'AGENT':
obj = AgentClient()
elif settings.MODE == "SSH" or settings.MODE == 'SALT':
obj = SaltSshClient()
else:
raise Exception('模式仅支持:AGENT/SSH/SALT')
obj.exec()
3、接口抽象类概念
约束实现该接口的类中必须定义xxx方法 --------- Python没有其他语言有
interface IFoo:
def exec(self):pass class A(IFoo): # 实现IFoo,接口中的方法必须在当前类中实现 def exec(self):
pass class B(IFoo):
def exec(self):
pass def func(arg):
arg.exec() obj = A()
func(obj)
4、java实现方法
抽象类: 接口约束的特性;类继承的特性
#抽象类
AbstractClass Foo: # 抽象方法,
def abstractmethod exec():pass def bar():
pass
pass class A(Foo): # 当前类继承了抽象类,期中必须定义抽象类中的所有抽象方法 def exec(self):
pass class B(Foo):
def exec(self):
pass def func(arg):
arg.exec()
5、python实现的两种方法
第一种方法:python里的抽象方法
实例化报错:
from abc import abstractmethod,ABCMeta
class Foo(metaclass=ABCMeta):
@abstractmethod
def exec(self):pass
class A(Foo):
pass
obj = A()
截图

只要不实例化就不报错
from abc import abstractmethod,ABCMeta
class Foo(metaclass=ABCMeta):
@abstractmethod
def exec(self):pass
class A(Foo):
pass
#obj = A()
截图

第二种方法:
报错
代码
class Foo(object):
def exec(self):
raise NotImplementedError('请实现exec方法')
class A(Foo):
pass obj = A()
obj.exec()
截图:

不报错
代码如下
class Foo(object):
def exec(self):
raise NotImplementedError('请实现exec方法')
class A(Foo):
pass obj = A()
#obj.exec()

CMDB服务器管理系统【s5day89】:采集资产之整合资产的更多相关文章
- CMDB服务器管理系统【s5day90】:创建资产更新服务器硬盘信息
1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...
- CMDB服务器管理系统【s5day87】:需求讨论-设计思路
自动化运维平台愿景和服务器管理系统背景 服务器管理系统 管理后台示例 需求和设计 为什么开发服务器管理系统? 背景: 原来是用Excel维护服务器资产,samb服务[多个运维人员手动维护] 搭建运维自 ...
- CMDB服务器管理系统【s5day89】:采集资产之汇报信息
1.服务器端收到的数据和客户端的数据不一样 print(request.post) 少发了,还是少取了,说明根本没有把数据全发过来 print(request.body) 1.只把字典的key给我发过 ...
- CMDB服务器管理系统【s5day88】:采集资产之整合插件
以后导入配置文件不用去from conf而是导入from lib.config,因为在这可以导入global_settings和settings.py import sys import os imp ...
- CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解
在对获取资产信息时,简述有四种方案. 1.Agent (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...
- CMDB服务器管理系统【s5day91】:资产采集相关问题
资产采集唯一标识和允许临时修改主机名 class AgentClient(BaseClient): def exec(self): obj = PluginManager() server_dict ...
- CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路
1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...
- CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)
django中间件工作原理 整体流程: 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器. ...
- CMDB服务器管理系统【s5day88】:采集资产-文件配置(二)
上节疑问: 1.老师我们已经写到global_settings里了,为什么还要写到__init__.py setting 这的作用是为了:整合起两个的组合global_settings和setting ...
随机推荐
- OV摄像头图像采集基础知识总结
目前FPGA用于图像采集 传输 处理 显示应用越来越多,主要原因是图像处理领域的火热以及FPGA强大的并行处理能力.本文以OV7725为例,对摄像头使用方面的基础知识做个小的总结,为后续做个铺垫. 下 ...
- XML详解二XML的解析与创建
XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: <?xml version="1.0" encoding="U ...
- Hexo自定义页面的方法
原文转自:http://refined-x.com/2017/07/10/Hexo%E8%87%AA%E5%AE%9A%E4%B9%89%E9%A1%B5%E9%9D%A2%E7%9A%84%E6%9 ...
- nmap比较详细的使用方法
nmap 信息收集工具 -sP 192.168.1.0/24 区域网内存活主机扫描 -O 192.168.1.1 获取操作系统 nmap -sS -sV baidu.com -sS 使 ...
- 跨域 - 自定义 jsonp实现跨域
问题:在现代浏览器中默认是不允许跨域. 办法:通过jsonp实现跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是 ...
- 苹果绿RGB值
ESL的值为:85,123,205 RGB的值为:199,237,204 ESL和RGB只需填一个即可,另一个会自动调整~
- wangEditor的使用
wangEditor的使用 第一步,将其下载,并引入项目中. 第二步,引入js <script type="text/javascript" src="/plugi ...
- TestNG安装及使用
安装:https://www.cnblogs.com/xusweeter/p/6559196.html使用:https://www.cnblogs.com/liwu/p/5113936.html 作用 ...
- spring @CrossOrigin解决跨域问题
阅读目录: 一.跨域(CORS)支持: 二.使用方法: 1.controller配置CORS 2.全局CORS配置 3.XML命名空间 4.How does it work? 5.基于过滤器的CORS ...
- input 各种限制
test 1.限制只能输入或黏贴11位长度的数字 <input onkeyup="this.value=this.value.replace(/\D/g,'')" onaft ...