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 ...
随机推荐
- 文件比较命令(comp)
comp命令: // 描述: 逐字节比较两个文件或文件集的内容. 如果在没有参数的情况下使用,comp会提示你输入要比较的文件. // 语法: comp [<Data1>] [<Da ...
- 做为一个Python程序员的基本素养
今天在学习的过程中,明白了一些不是Python标准所必须要做的事情,二是做为一个合格的Python程序员应该所遵从的一些规范 分享给大家,有不足的地方请大家指正,此下是我学习的一点心得: 1.在给变量 ...
- Python中的一些小技巧
1.Boolean值可以当做一个数值 a = [5,6,7,8,9] print(a[True]) #prints 6 print(a[False]) #prints 5 2.两种方法实现 a = 1 ...
- Spark SQL中列转行(UNPIVOT)的两种方法
行列之间的互相转换是ETL中的常见需求,在Spark SQL中,行转列有内建的PIVOT函数可用,没什么特别之处.而列转行要稍微麻烦点.本文整理了2种可行的列转行方法,供参考. 本文链接:https: ...
- springboot中配置过滤器以及可能出现的问题
在springboot添加过滤器有两种方式: 1.通过创建FilterRegistrationBean的方式(建议使用此种方式,统一管理,且通过注解的方式若不是本地调试,如果在filter中需要增加c ...
- js 获取输入框中光标的索引位置
<html> <head></head> <body> <script> function getTxt1CursorPosition(){ ...
- Java 通过地址获取经纬度 - 高德地图
一.添加依赖 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-v ...
- 初学Kafka工作原理流程介绍
Apache kafka 工作原理介绍 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需 ...
- 《jmeter:菜鸟入门到进阶》系列
jmeter是我从事软件测试工作以来接触的第一个性能测试工具,也是耗费时间精力最多的一个工具,当然,学习jmeter过程中,由于知识储备不够,也顺带学习了很多其他相关的一些知识. 一直有个想法,就是把 ...
- 基于 HTML5 结合互联网+的电力接线图
前言 “互联网+”思维让数据的搜集和获取更加便捷,并且随着大数据的深度开发和应用,数据分析预测对于提升用户体验有非常重要的价值,同时也为不同行业.不同领域的合作提供了更广阔的空间.传统的发电企业是一个 ...