悠悠小仙仙 发表于 2019-3-13 14:48:19

Cobbler API 介绍

为了方便控制cobbler 应用程序,Cobbler提供了一个基于Python 语言的API接口。注意,Cobbler是GPL(通用语言),如果你的应用不是GPL,并且想把它分发到公司、家等等的外面,建议你最好使用CobblerXmlrpc接口来替代它。在2.0版本中,不推荐使用BootAPI接口来连接Cobbler,因为它采用一个可能不太安全的方式来直接修改配置存储文件,并且这个修改可能对cobbler服务不起作用。至少到了2.2的版本中CobblerXmlrpm才会被被使用。
公共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 的ManageDhcp或ManageDns已经作用了,那么根据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)
开始一个新的部署部署功能可以通过触发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来获取所有的功能。
页: [1]
查看完整版本: Cobbler API 介绍