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】:采集资产之整合资产的更多相关文章

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

    1.创建硬件资产信息 import json from django.shortcuts import render,HttpResponse from django.views.decorators ...

  2. CMDB服务器管理系统【s5day87】:需求讨论-设计思路

    自动化运维平台愿景和服务器管理系统背景 服务器管理系统 管理后台示例 需求和设计 为什么开发服务器管理系统? 背景: 原来是用Excel维护服务器资产,samb服务[多个运维人员手动维护] 搭建运维自 ...

  3. CMDB服务器管理系统【s5day89】:采集资产之汇报信息

    1.服务器端收到的数据和客户端的数据不一样 print(request.post) 少发了,还是少取了,说明根本没有把数据全发过来 print(request.body) 1.只把字典的key给我发过 ...

  4. CMDB服务器管理系统【s5day88】:采集资产之整合插件

    以后导入配置文件不用去from conf而是导入from lib.config,因为在这可以导入global_settings和settings.py import sys import os imp ...

  5. CMDB服务器管理系统【s5day88】:采集资产之Agent、SSH和Salt模式讲解

    在对获取资产信息时,简述有四种方案. 1.Agent  (基于shell命令实现) 原理图 Agent方式,可以将服务器上面的Agent程序作定时任务,定时将资产信息提交到指定API录入数据库 优点: ...

  6. CMDB服务器管理系统【s5day91】:资产采集相关问题

    资产采集唯一标识和允许临时修改主机名 class AgentClient(BaseClient): def exec(self): obj = PluginManager() server_dict ...

  7. CMDB服务器管理系统【s5day89】:部分数据表结构-资产入库思路

    1.用django的app作为统一调用库的好处 1.创建repository app截图如下: 2.好处如下: 1.app的本质就是一个文件夹 2.以后所有的app调用数据就只去repository调 ...

  8. CMDB服务器管理系统【s5day88】:采集资产-文件配置(一)

    django中间件工作原理 整体流程: 在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器. ...

  9. CMDB服务器管理系统【s5day88】:采集资产-文件配置(二)

    上节疑问: 1.老师我们已经写到global_settings里了,为什么还要写到__init__.py setting 这的作用是为了:整合起两个的组合global_settings和setting ...

随机推荐

  1. centosFTP服务搭建及权限配置

    引用一个其他大佬对vsftpd的描述: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点. vsftpd 是一个 UNIX 类操作系统上运行的服务器的 ...

  2. Python总结(一)

    从大学开始,就对python有了兴趣,毕业设计就是用python做的一个新闻爬取和关键字提取的程序.然而,毕业之后由于一直没有从事python相关的开发,所以就一直没有再使用,一直停留在偶尔看一些资料 ...

  3. PHP奇淫技巧

    https://www.jb51.net/list/list_67_1.htm PHP技巧:https://www.jb51.net/list/list_67_13.htm mysql三范式 1NF: ...

  4. JS正则四个反斜杠的含义

    我们首先来看如下代码,在浏览器中输出的是什么? // 在浏览器中输出的 console.log('\\'); // 输出 \ console.log('\\\\'); // 输出 \\ 一:js正则直 ...

  5. Codeforces Round 1152 (div. 2)

    奇差.ABC三题,排名400. 首先是策略问题. 由于第一眼看到D的时候感觉不太会做,于是去看E. 一看到E这不欧拉回路吗,可做可做, 于是--我不会欧拉回路! 手推.推了半天啥也没弄出来, 于是大概 ...

  6. Linux下时钟框架实践---一款芯片的时钟树配置

    关键词:时钟.PLL.Mux.Divider.Gate.clk_summary等. 时钟和电源是各种设备的基础设施,整个时钟框架可以抽象为几种基本的元器件:负责提供晶振 Linux内核提供了良好的CC ...

  7. 美团--Quake全链路压测平台

    原文:连接: https://tech.meituan.com/2018/09/27/quake-introduction.html 开源分布式监控Cat: https://github.com/di ...

  8. Java面试准备之探究源码

    摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...

  9. 多项目管理中PMO的作用

    随着现代企业规模的不断扩大,多项目同时运行成为了现代企业的常态,以及企业项目化进程的不断深入,大部分企业不再仅仅只运行一个项目,而且数量之大已经超出了人们的想象,如惠普公司每年有3000个左右的项目, ...

  10. alert执行时机和js线性模型 事件循环

    <div class="test">测试内容</div> <script> $('.test').text('内容改变') alert($('. ...