在上篇文章中咱们说到了Cobbler API,可是因为Cobbler api在cobbler 2.2以上版本再也不建议使用(这其中的原因在cobbler API介绍那篇文章中已经说明,此处再也不赘述),而建议使用rpc来操纵cobbler。python
本文将着重讲述如何使用rpc来操纵cobbler;本文翻译的源网站为:https://fedorahosted.org/cobbler/wiki/CobblerXmlrpcapi
XMLRPC是一个用不一样语言编写的经过网络进行交互的轻量级计算机程序。详情见:http://www.xmlrpc.com/服务器
若是你想在cobbler 上实现如下目的,你应该使用XMLRPC API:网络
1.你想跟Cobbler进行交互,可是你的应用不是python的程序/脚本;函数
2.你想跟Cobbler进行交互,可是你的程序没有运行在Cobbler服务器上;网站
3.你有一个non-GPLd应用程序,而且想跟Cobbler交互,并被分发给公众或其余的客户。spa
使用Cobbler的XMLRPC API,首先你必须设置CustomizableSecurity(cobbler 2.2以上已经默认设置了),而且确保Apache和cobblerd在你的Cobbler服务中运行了。若是你使用了authn_spacewalk 模块,请在/etc/cobbler/settings文件中将redhat_management_permissive值设置为1。翻译
将会在下面给出一些使用python调用XMLEPC的例子,可是XMLRPC应该能够很容易的和其余的任何语言进行绑定(使用任何语言进行调用XMLRPC)。例如,Java和Ruby已经和XMLRPC坚实的和XMLRPC绑定了。code
使用Cobbler XMLRPC 的API进行任何操做,首先都必须链接到Cobbler,下面是一个例子:server
import xmlrpclib server = xmlrpclib.Server("http://192.168.12.14/cobbler_api")
上面的IP即Cobbler服务器的IP
若是不登陆,Cobbler的信息可能会能够被读取到,可是若是你想在Cobbler服务器上进行任何修改的操做,或启动操做,登陆的令牌是必须的。一旦获取了令牌,这个令牌就能够传递给被调用的且须要令牌做为最后一个参数的任何一个远程函数。
一个令牌每隔60分钟将被更新一次。若是令牌过时,则须要从新获取登陆令牌来取得登陆凭证。
token = server.login("username","password")
注意:这里的用户名和密码是cobbler 的用户名和密码,设置Cobbler用户名和密码的命令以下:
htdigest /etc/cobbler/users.digest "Cobbler" cobbler
上述命令将会添加一个名为cobbler的用户,能够本身决定添加什么用户名,回车后须要连续输入两次密码。
远程操做的问题/错误将会做为XMLRPC远程错误返回(远程 CobblerExceptions ? ),而不是返回一个状态代码。这就能够防止调用方法来检查繁琐的返回状态代码。
相反的,和查询相关的方法,以及调用登陆返回的数据,没有实际意义,能够被忽略。
想要查看distros, profiles, systems, images, 或者 repos ,或者远程服务器的定义。这些东西很容易就能够获取到:
#!/usr/bin/python import xmlrpclib server = xmlrpclib.Server("http://127.0.0.1/cobbler_api") print server.get_distros() print server.get_profiles() print server.get_systems() print server.get_images() print server.get_repos()
上述每种方法返回描述远程数据的嵌套哈希,而且表示每个Cobbler对象中的每一个字段的列表。
相对与检索给定类型的全部对象,它一般更容易直接搜索你想要的东西。
print server.find_distro({"name":"F*"})
上面的例子返回全部以“F”开头而且适用与全部对象类型的分发(distro).它就像在CobblerApi页面的搜索列表,任何字段的类型均可以被搜索。例如:
print server.find_system({"hostname":"*.lab.example.org"})
列表中返回的数据就和从get_distros() 、 get_systems()等方法中获取的数据类似,只是仅包含匹配的结果。
你想查看上次使用XMLRPC查询系统所修改的信息?能够采用以下方式:
print server.find_systems_since(mtime)
注意:不一样的Cobbler版本,这个函数并不同,个人版本为2.6,所以我使用的是以下方法:
print server.get_systems_since(mtime)