使用 Xmlrpc 來控制cobbler api

    在上篇文章中咱們說到了Cobbler API,可是因爲Cobbler api在cobbler 2.2以上版本再也不建議使用(這其中的原因在cobbler API介紹那篇文章中已經說明,此處再也不贅述),而建議使用rpc來操縱cobbler。python

    本文將着重講述如何使用rpc來操縱cobbler;本文翻譯的源網站爲:https://fedorahosted.org/cobbler/wiki/CobblerXmlrpcapi


關於XMLRPC

    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

    使用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的用戶,能夠本身決定添加什麼用戶名,回車後須要連續輸入兩次密碼。

注意遠程方法的Exception捕獲和錯誤操做

    遠程操做的問題/錯誤將會做爲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)
相關文章
相關標籤/搜索