51Testing软件测试论坛

标题: Cobbler API 介绍 [打印本页]

作者: 悠悠小仙仙    时间: 2019-3-13 14:48
标题: 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中有用的公共方法。

  1. pydoc cobbler.api
  2. pydoc cobbler.item_distro
  3. pydoc cobbler.item_profile
  4. pydoc cobbler.item_system
  5. pydoc cobbler.item_image
  6. pydoc cobbler.item_repo
复制代码

基本:

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

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

  3. handle = capi.BootAPI()
复制代码

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


运行对象

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

  1. #!/usr/bin/python
  2. import cobbler.api as capi
  3. handle = capi.BootAPI()
  4. for x in handle.distros():
  5.    print x.name
复制代码

修改对象

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

  1. #!/usr/bin/python

  2. import cobbler.api as capi

  3. handle = capi.BootAPI()
  4. systems = handle.find_system(name="*",return_list=True)
  5. for s in systems:
  6.    print "assigning system for reinstallation: %s" % s.name
  7.    s.netboot_enabled = True
  8.    handle.add_system(s)
复制代码

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


继续修改一个对象

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

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

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


同步

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

  1. handle.sync()
复制代码

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


搜索

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

很容易做到:

  1. #!/usr/bin/python
  2. import cobbler.api as capi
  3. handle = capi.BootAPI()
  4. for x in handle.find_system(hostname="*.example.org",return_list=True):
  5.    print x.name
复制代码

支持来自fnmatch的通配符。


移除对象

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

  1. #!/usr/bin/python
  2. import cobbler.api as capi
  3. handle = capi.BootAPI()
  4. handle.remove_system("foo")
复制代码

同步库

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

  1. handle.reposync(name="F10-updates-i386", tries=1)
  2. handle.reposync(tries=3)
复制代码

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


导入新的安装树

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

  1. handle.import_tree("/mnt/dvd/image","RHEL-5",arch="i386")
复制代码

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

  1. import clogger
  2. logger = clogger.Logger("/var/log/cobbler/cobbler.log")
  3. handle.import_tree("/mnt/dvd/image","RHEL-5",arch="i386",logger=logger)
复制代码

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

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


从其他的Cobbler服务中拷贝

在ReplicateMaster有描述,示例如下:

  1. handle.replicate(cobbler_master="centralcobbler.example.org",sync_all=True)
复制代码

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


电源管理

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

  1. sys = handle.find_system(name="foo")
  2. handle.power_on(sys)
  3. # OR
  4. handle.power_off(sys)
  5. # OR
  6. handle.reboot(sys)
复制代码

开始一个新的部署

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

  1. sys1 = handle.find_system(name="myhost")
  2. sys2 = handle.find_system(name="myguest")
  3. handle.manage_deployment(sys2, virt_host=sys1, method="func", operation="install")
  4. # OR
  5. handle.manage_deployment(sys2, virt_host=sys1, method="ssh", operation="install")
复制代码

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

  1. handle.manage_deployment(sys2, method="ssh", operation="start")
  2. handle.manage_deployment(sys2, method="ssh", operation="restart")
  3. handle.manage_deployment(sys2, method="ssh", operation="shutdown")
  4. handle.manage_deployment(sys2, method="ssh", operation="unplug")  # a less friendly shutdown
  5. handle.manage_deployment(sys2, method="ssh", operation="uninstall")
复制代码

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


其它操作

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







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2