Cobbler API 介绍

大憨熊 提交于 2019-11-30 10:58:20

本文英文源网站为:https://fedorahosted.org/cobbler/wiki/CobblerApi


为了方便控制cobbler 应用程序,Cobbler提供了一个基于Python 语言的API接口

注意,Cobbler是GPL(通用语言),如果你的应用不是GPL,并且想把它分发到公司、家等等的外面,建议你最好使用CobblerXmlrpc接口来替代它。

在2.0版本中,不推荐使用BootAPI接口来连接Cobbler,因为它采用一个可能不太安全的方式来直接修改配置存储文件,并且这个修改可能对cobbler服务不起作用。至少到了2.2的版本中CobblerXmlrpm才会被被使用。

引用:http://marc.info/?l=cobbler-devel&m=127428454504458&w=2

API的状态是不可改变的,可以通过查看https://fedorahosted.org/pipermail/cobbler/2011-November/006863.html来获取为什么不可改变的原因和详细情况。

公共API的构成

在检出的Cobbler源码中,"api.py" 中的方法是公共的API方法,除非他们方法名称以下划线开头,按照Python公约,凡是以下划线开头的均为私有方法。

如果你想在cobbler中让"iterm object"的功能工作,你也可以根据详细的对象类型在"item_*.py"调用方法。

你不应该在除了这两种情况以外再调用方法/函数。

Pydoc(python文档)

pydoc是一个有用的读取文档的工具。你可以运行下面的类来查看Python API中有用的公共方法。

pydoc cobbler.api
pydoc cobbler.item_distro
pydoc cobbler.item_profile
pydoc cobbler.item_system
pydoc cobbler.item_image
pydoc cobbler.item_repo

基本:

每个Cobbler AP脚本都需要一个API来操控启动,所以总是这样做:

#!/usr/bin/python
import cobbler.api as capi

handle = capi.BootAPI()

这个boot API被我们称作“单例模式”,那就意味着在你自己的线程中任何时候都可以调用它,而不需要把它传过来。实现上述功能只需要一些小成本(这取决于你的cobbler配置的大小),你只需要在第一次使用它的时候加载。

运行对象

这是一个贯穿所有的cobbler分发的例子。其他的对象类型(包括发行版/distros,配置/profiles,系统/systems,repos,images,网络等)的工作方式完全相同。

#!/usr/bin/python
import cobbler.api as capi
handle = capi.BootAPI()
for x in handle.distros():
   print x.name

修改对象

下面的例子将在"example.org"下根据系统名称获取所有的机器,将它们分配给一个新的安装文件,并触发PXE网络引导标识,当它们的电源下次启动时将重新自动安装(或者升级,这种情况依赖于ks文件的配置情况)。

#!/usr/bin/python

import cobbler.api as capi

handle = capi.BootAPI()
systems = handle.find_system(name="*",return_list=True)
for s in systems:
   print "assigning system for reinstallation: %s" % s.name 
   s.netboot_enabled = True
   handle.add_system(s)


请注意,如果我们最后不调用“add_system”方法,这些更改将不会被应用。

继续修改一个对象

当改变对象的值,确保你调用一个以“set_”开头的方法,来确保你的输入是有效的并且接下来的操作是正确的。

不像更冗长的语言(java),我们不使用“get_”方法(译者注:俺就是java码农[\哭])。

例如,改变内核选项,我们将使用“obj.set_kernel_options(value)”,但从一个对象得到选项来处理它只是“obj.kernel_options”。

同步

如果cobbler 的ManageDhcpManageDns已经作用了,那么根据MAC改变的任何信息,系统的IP地址、主机名称也应该随之发生变化。

handle.sync()

在调整完所有的对象后,重新生成DHCP/DNS配置文件并重启服务。

搜索

如果我们要查找符合特定标准的对象,例如主机名称包含确定后缀的系统。

很容易做到:

#!/usr/bin/python
import cobbler.api as capi
handle = capi.BootAPI()
for x in handle.find_system(hostname="*.example.org",return_list=True):
   print x.name

支持来自fnmatch的通配符。

移除对象

这里有个如何删除名称为"foo"的系统对象的例子:

#!/usr/bin/python
import cobbler.api as capi
handle = capi.BootAPI()
handle.remove_system("foo")

同步库

无论是具体的同步某一个库还是同步所有的库,通过API同步(即下载镜像或更新)是合理的。

handle.reposync(name="F10-updates-i386", tries=1)
handle.reposync(tries=3)

这个变量会重试 关闭/开启 mirrors.

导入新的安装树

也可以从API中通过CLL命令来执行cobbler 的导入。例如

handle.import_tree("/mnt/dvd/image","RHEL-5",arch="i386")

注意:官方文档在此处并没有传入cobbler的loggler对象,经过实践发现,如果不传入cobbler的logger对象,执行这个导入镜像的方法会在日志中打印出错误,并且不能导入成功,该方法正确的传参为:

import clogger
logger = clogger.Logger("/var/log/cobbler/cobbler.log")
handle.import_tree("/mnt/dvd/image","RHEL-5",arch="i386",logger=logger)

此方法导入完成后,需要调用cobbler的sync方法来同步。

在api.py 文件中记录了更多的标签

从其他的Cobbler服务中拷贝

在ReplicateMaster有描述,示例如下:

handle.replicate(cobbler_master="centralcobbler.example.org",sync_all=True)

虽然是一个完整的复制,但是在api.py中还是记录了其他的标签。

电源管理

如果你在一个cobbler 系统记录中有一个电源管理的详细信息,你可以按照如下操作电源状态:

sys = handle.find_system(name="foo")
handle.power_on(sys)
# OR
handle.power_off(sys)
# OR
handle.reboot(sys)

查看电源管理的详细信息:https://fedorahosted.org/cobbler/wiki/PowerManagement

开始一个新的部署

部署功能可以通过触发API接口来使用koan请求安装一个新的虚拟机。

sys1 = handle.find_system(name="myhost")
sys2 = handle.find_system(name="myguest")
handle.manage_deployment(sys2, virt_host=sys1, method="func", operation="install")
# OR
handle.manage_deployment(sys2, virt_host=sys1, method="ssh", operation="install")

注意,我们也可以使用这个API接口来控制远程设备的状态!

handle.manage_deployment(sys2, method="ssh", operation="start")
handle.manage_deployment(sys2, method="ssh", operation="restart")
handle.manage_deployment(sys2, method="ssh", operation="shutdown")
handle.manage_deployment(sys2, method="ssh", operation="unplug")  # a less friendly shutdown
handle.manage_deployment(sys2, method="ssh", operation="uninstall")

注意,一旦我们仅仅通过客户机安装了VM,我们就可以不用知道哪个主机在跑,以后cobbler会帮我们持续跟踪。

其它操作

可能在这里没有列出Cobbler的所有功能,但是可以通过Python API来获取所有的功能。

查看针对Cobbler的文档(pydoc)来获取什么是合理的,还可以通过(如果你喜欢的话)Cobbler源码来感受它,这很容易就可以获取到,如果没有获取到,请咨询我们。

pydoc cobbler.api

返回值

总的来说,Cobbler API不返回对象则不反回有意义的返回值,比如整数。相反,CobblerExceptions 是提示错误信息的,这样就可以防止在操作上进行繁琐的错误检查,在哪里很容易就会忘记减产返回值得状态。

下篇,将翻译https://fedorahosted.org/cobbler/wiki/CobblerXmlrpc

以及:https://fedorahosted.org/cobbler/wiki/CobblerTriggers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!