文档章节

cobbler二次开发接入点说明

码上中国博客
 码上中国博客
发布于 2016/03/25 18:34
字数 1498
阅读 391
收藏 2

cobbler作为一个批量自动化装机的开源工具,具有很好的系统支持性,给机房管理人员减轻了大量繁琐枯燥的安装配置过程。本文所讲的cobbler二次开发仅仅讲述cobbler安装客户机的实时日志的转发,和cobbler监听项目发送的指令的开发切入点,本文并不涉及到任何的实际代码逻辑。

一、anaconda监控日志转发接口切入点

由于anaconda监控程序是在客户机(被安装系统的机器)上运行的,其通过xml-rpc远程调用,使用http传输协议来把客户机的系统安装过程中的日志实时的发送给cobbler所在的服务器。而cobbler所在的服务器则会有相应的模块来监听这个请求。因此,实现anaconda监控日志转发至其他服务器又两种途径:

1.在客户机部分的anaconda代码中切入:

anaconda监控程序是在客户机获取dhcp分配的IP并从cobbler加载完成安装引导程序以及下载好镜像文件以后才开始工作的,而客户机这部分的anaconda程序就是在上述过程中一起被加载、安装到客户机中。

发送到客户机中的anaconda有一个关键的代码,即实时监控并将日志信息发送到cobbler所在的服务器的过程,而这部分代码的初始程序是在客户机的cobbler中的特定位置的,发送到客户机的anaconda程序就是从cobbler中的这一部分代码复制过去的,因此,我们只需在这部分代码中添加自己想要转发的目标IP和端口即可。

这段anaconda程序在服务器上的位置为:

/var/www/cobbler/aux/

在这个目录下有两个文件

anamon.py
anamon.init

当客户机开机后,这两个文件将一并发送到客户机中运行;且这两个文件定义了xml-rpc通过http请求分发客户机安装日志的位置。

anamon.py文件中有如下一部分代码:

session = xmlrpclib.Server("http://%s:%s/cobbler_api" % (server, port))

这部分代码就初始化了请求转发的服务器ip和端口,如果我们想增加一个转发的服务器或IP,只需要在这行的下面新增一个服务器IP即可,例如:

session = xmlrpclib.Server("http://%s:%s/cobbler_api" % (server, port))
session1 = xmlrpclib.Server("http://192.168.10.23:8087/cobbler_api")

这样就初始化了两个rpc服务,然后接着查看anamon.py文件有的下面的代码片段:

def uploadWrapper(self, blocksize=262144):
        """upload a file in chunks using the uploadFile call"""
        retries = 3
        fo = file(self.fn, "r")
        totalsize = os.path.getsize(self.fn)
        ofs = 0
        while True:
            lap = time.time()
            contents = fo.read(blocksize)
            size = len(contents)
            data = base64.encodestring(contents)
            if size == 0:
                offset = -1
                sz = ofs
            else:
                offset = ofs
                sz = size
            del contents
            tries = 0
            while tries <= retries:
                debug("upload_log_data('%s', '%s', %s, %s, ...)\n" % (name, self.alias, sz, offset))
                if session.upload_log_data(name, self.alias, sz, offset, data):
                    break
                else:
                    tries = tries + 1
            if size == 0:
                break
            ofs += size
        fo.close()

这个方法就是实现客户机向cobbler服务器发送数据的方法,在这个方法中的如下代码实现了发送的实际过程:

session.upload_log_data(name, self.alias, sz, offset, data)

上面的这行代码即调用了服务器端的upload_log_data方法(这个方法在第二种实现方法中有介绍)

我们只需在此处新增部分代码,即可实现将日志信息转发至另外的服务器中,实现的代码,见我上一篇博客

注意:

 1)采用这种方法实现是有要求的,就是:客户机必须能够和你要新增的转发服务器ping通,否则,这种方法不适用。

 2)当你采用本方法时,只要有客户机安装系统,你所修改的这段代码都会被发送到客户机,这种情况下,多个客户机其实是一种并发发送请求的过程,注意在你的客户端处理并发情况。

2.在cobbler所在的服务器端进行切入

cobbler服务器所在的切入点就是cobbler服务所在的地方,这部分在下面的文件路径下:

/usr/lib/python2.6/site-packages/cobbler/

我的python是2.6的,因此为此目录,根据自己使用的版本的不同选择对应的python版本即可进入。

在上述目录下有remote.py文件,需要在本文件中有如下方法:

 def upload_log_data(self, sys_name, file, size, offset, data, token=None,**rest)

这个方法是cobbler服务器接收客户机返回的日志信息的主方法。因此,如果想要在服务器端实现日志转发,这个切入点是不错的选择。

二、web项目(JAVA)操纵cobbler服务的切入方法

在上篇文章中已经提到了JAVA向python请求数据的方法,本文将着重说明如何将这个cobbler服务器端的python进程和cobbler服务绑定到一起(随同cobbler服务同时停止和启动)。

在/etc/init.d/cobblerd脚本文件中定义了cobbler服务的开启和关闭的操作。那么,我们自己的进程同样可以绑定到这个linux脚本文件中,这样做有以下好处:

  1. cobbler脚本中进行了不同系统的兼容性逻辑,直接写入cobbler服务脚本可以减少自己写兼容性的问题;

  2. 省去了自己编写linux命令的操作,这样可以大大减少由于自己编写linux命令而造成需要通过调试解决bug的琐碎时间;

  3. 有助于快速注入多个自定义的进程。

例如,在cobblered脚本中有如下的方法:

start() {
...
}

stop(){
...
}
restart(){
...
}

我们就可以将自己的监听线程写入start()方法和stop()方法,通过这种方法,可以方便的管理自己的进程和cobbler服务进程。

© 著作权归作者所有

码上中国博客

码上中国博客

粉丝 54
博文 76
码字总数 71338
作品 1
北京
后端工程师
私信 提问
基于Cobbler实现多版本系统自动部署

基于Cobbler实现多版本系统自动部署 前言:   运维自动化在企业生产环境中越来越重要,当需要批量部署上百台甚至上千台服务器时,如果不通过自动化完成,根本不可想象;此前已经介绍过通过...

小马就是神
2016/03/14
276
0
COBBLER无人值守安装

1. Cobbler介绍 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。 Cobbler可以使用命令行方式管理,也提...

蜷缩的蜗牛
2017/09/14
0
0
RonCoo/roncoo-cmdb

roncoo-cmdb 龙果学院推出开源运维平台,目前版本实现:权限控制,CMDB,cobbler装机平台,zabbix管理平台,机柜展示,图像展示,故障申报 后期会持续推出发布平台,批量管理平台、希望跟大家...

RonCoo
2017/11/11
0
0
Cobbler批量部署CentOS

简介 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows。该工具使用python开发,小巧轻便(才15k行python代码),使用简单的命令即可完成PXE网络安装环境的配...

甩锅侠
2017/09/17
0
0
基于EasyNVR二次开发实现业务需求:用户、权限、设备管理

许多接触到EasyNVR的用户、开发者都会提出关于EasyNVR设备分组和账户设备关系映射的问题,我们参考目前大部分的视频能力输出平台的做法,EasyNVR目前只做了唯一的用户/密码(类比appkey/secr...

xiejiashu
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
12
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部