运维自动化模式比较

一、运维自动化几种常见模式

  1、agent模式

    

      注释:该模式主要是将采集客户端数据软件安装在各个服务器上,通过相应的命令吧命令结果发送给API接口

  2、ssh模式

    

    注释:该模式主要是将采集客户端数据软件安装在中控机上,然后在中控机上发送相应的命令到各个服务器上,得到命令的结果返回给API接口,之间主要是通过ssh协议进行的数据传输

  3、saltstack工具

    

    注释:该模式主要是将采集客户端数据软件安装在中控机上,然后在中控机上安装salt-master服务,在各个服务器上安装salt-minion服务,最后在中控机上发送相应的命令到各个服务器上,得到命令的结果返回给API接口,与ssh模式相比,该模式主要是通过消息队列zeroMQ传输数据,比ssh协议传输数据快了数倍

二、 为什么开发服务器管理系统?
        背景:
            - 原来是用Excel维护服务器资产,samb服务【多个运维人员手动维护】
            - 搭建运维自动化平台【服务器管理】
        
        目标:
            - 硬件资产自动采集
            - API
        
        架构设计:
            - 采集资产【每台服务器上安装的客户端,agent,定时任务每天凌晨2点】
            - API【入库和比较创建变更日志】
            - 后台管理部分

三、设计一个服务器管理系统

  1、服务器管理系统整体框架

 ··   

  注释:图一为客户端采集数据软件框架,bin目录主要是存放启动文件,conf目录主要是存放用户配置文件,lib目录下主要是存放系统默认配置文件,其中lib目录下的config目录下的global_settings主要是存放系统默认配置文件,而__init__文件主要是先读取系统默认配置文件然后再读取用户配置文件,log目录主要是存放软件程序错误日志的,src目录下的plugins目录下的__init__文件主要是对用户配置文件进行读取然后处理对应的命令,而plugins下其余的文件主要是存放相关命令。

 四、在服务器管理系统中用到的牛逼操作

  1、os.environ命令设置和获取系统环境变量

    1、设置系统环境变量
      1、os.environ['环境变量名称']='环境变量值' #其中key和value均为string类型
      2、os.putenv('环境变量名称', '环境变量值')
    2、获取系统环境变量
      1、os.environ['环境变量名称']
      2、os.getenv('环境变量名称')

  2、Python中反射应用

    1、obj=getattr(x,y) #获取x对象内的y属性的值

    2、obj=hasattr(x,y)   #检测x对象内是否有y属性的值

    3、obj=setattr(x,y,z) #设置x对象内y属性对应的z值,就是给y赋值为z

    4、obj=delattr (x,y)   #删除x对象下的y属性的值

    getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子

  3、dir()内置函数

    1、dir(x)  #用dir()函数可以查看对像内所有属于及方法

  4、importlib.import_module()模块

    1、importlib.import_module(x) #x为一个路径字符串,可以通用传入一个字符串路径来引入一个模块

  5、字符串分割

    1、v.rsplit('.', maxsplit=1)     #v作为一个字符串,从右边开始通过"."分割,把字符串分割到第一个分隔符

  6、import subprocess模块

    1、subprocess.getoutput(cmd)  #该模块是通过Python来执行linux或者是windows命令

  7、import paramiko模块

    1、import paramiko#该模块是调用Python中的ssh方法

  8、装饰器

    1、@classmethod  #该装饰器的作用是创建类方法只能让类使用而对象不能使用(类方法)

  9、@staticmethod  静态方法

  10、NotImplemented 和 NotImplementedError 区别

    1、NotImplemented 是一个非异常对象,NotImplementedError 是一个异常对象。

    2、如果抛出 NotImplemented 会得到 TypeError,因为它不是一个异常。而抛出 NotImplementedError 会正常捕获该异常。

  11、

    

原文地址:https://www.cnblogs.com/xuanan/p/7599322.html