为了方便控制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地址、主机名称也应该随之发生变化。 在调整完所有的对象后,重新生成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来获取所有的功能。
|