本文英文源网站为: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 的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)
查看电源管理的详细信息: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
来源:oschina
链接:https://my.oschina.net/u/2303434/blog/633037