當前位置:
首頁 > 最新 > Cobbler與Django結合

Cobbler與Django結合

現在大部分服務都提供api,方便將其與其台平台整合起來,cobbler也提供了其api,讓我們運維人員可以通過web界面來管理它.

這裡,我僅提供大概的思路和核心的代碼塊.

我們將其伺服器添至CMDB中,再通過web界面,讓其安裝。

添加主機

查看伺服器列表(因為我還沒安裝系統,所以狀態為x)

在這裡我們點擊」裝機」,便跳到」安裝系統」頁面

再點擊」安裝系統」

再查看cobbler server端

好了,我們啟動這台mac為52:54:00:67:ae:42看它能否按照指定的系統安裝了.

代碼摘錄:

安裝系統頁面install_system.html

這是一個點擊「安裝系統」連接,這裡需要提供節點uuid

```shell

ahref=""data-nodeid="{{node.uuid}}"class="btn btn-xs btn-primary"data-toggle="modal"

onClick="install_os(this)">安裝系統>

ajax代碼

script>

functioninstall_os(obj) {

var_this=$(obj);

varhostname_id=_this.attr("data-nodeid")

$.ajax({

cache:false,

type:"POST",

url:"/auto/install_node/",

dataType:"text",

data: ({

"hostname_id":hostname_id,

"csrfmiddlewaretoken":"{{csrf_token}}"

}),

async:true,

error:function(request) {//設置表單提交出錯

alert("表單提交出錯,請稍候再試");

},

success:function(msg) {

$("#salt_cmd_run").html(msg)

}

});

return false;

}

script>

```

通過這段ajax代碼便會將hostname_id以post形式發送到後端/auto/install_node的view處(這裡是在urls.py中設置,對應的函數為install_os).

```shell

views.py

fromcobbler_apiimportCobblerAPI

frommysite.settingsimportcobbler_url,cobbler_user, cobbler_pwd, cobbler_gateway, cobbler_subnet

definstall_os(request):

"""安裝系統"""

content = {}

ifrequest.method=="POST":

node_hostname = request.POST

hostname_id =node_hostname.getlist("hostname_id")

foridinhostname_id:

host_list = Host.objects.get(uuid=str(id))

try:

system = CobblerAPI(cobbler_url,cobbler_user, cobbler_pwd)

except:

content["success"] =False

content["result"] =u"請確保cobbler server服務正常及帳號密碼正確!"

returnrender_to_response("autoinstall/auto_setup_system_error.html",locals(),

context_instance=RequestContext(request))

system_name =host_list.node_name+"-"+host_list.eth1

mac = host_list.mac.replace("-",":")

ret = system.add_system(host_list.node_name,host_list.eth1, mac, host_list.system,

cobbler_gateway,

cobbler_subnet,

system_name)

ifret["result"]:

host_list.status =2

host_list.save()

content["success"] =True

content["result"] =u"等待伺服器加電安裝..."

returnrender_to_response("autoinstall/auto_setup_system_error.html",locals(),context_instance=RequestContext(request))

else:

content["success"] =False

content["result"] =u"定製安裝失敗,請確保cobbler server服務正常!"

host_list.status =

host_list.save()

returnrender_to_response("autoinstall/auto_setup_system_error.html",locals(),context_instance=RequestContext(request))

returnrender_to_response("autoinstall/install_list.html", content,context_instance=RequestContext(request))

```

這裡需要調用cobbler_api.py

```shell

importxmlrpclib

importos

classCobblerAPI(object):

def__init__(self, url, user,password):

self.remote= xmlrpclib.Server(url)

self.token=self.remote.login(user, password)

self.ret= {

"result":True,

"comment": [],

}

defadd_system(self, hostname, ip_add, mac_add, profile, gateway,subnet,system_name):

"""

Add Cobbler System Infomation

"""

system_id =self.remote.new_system(self.token)

self.remote.modify_system(system_id,"name", system_name,self.token)

self.remote.modify_system(system_id,"hostname", hostname,self.token)

self.remote.modify_system(system_id,"gateway", gateway,self.token)

self.remote.modify_system(system_id,"modify_interface", {

"macaddress-eth0": mac_add,

"ipaddress-eth0": ip_add,

"subnet-eth0": subnet,

"static-eth0":1,

"name-servers-eth0":"202.96.209.5",

},self.token)

self.remote.modify_system(system_id,"profile", profile,self.token)

self.remote.save_system(system_id,self.token)

try:

self.remote.sync(self.token)

os.system("cobbler system edit --name=%s--gateway=%s"%(hostname, gateway))

exceptExceptionase:

self.ret["result"] =False

self.ret["comment"].append(str(e))

returnself.ret

```

需要在settings.py中設置些變數

```shell

cobbler_url="http://192.168.214.50/cobbler_api"

cobbler_user ="cobbler"

cobbler_pwd ="cobbler"

cobbler_subnet ="255.255.255.0"

cobbler_gateway ="192.168.214.254"

```

將cobbler server關掉或者用戶名密碼填寫錯誤.

前端錯誤提示

後續擴展:

問題1.當提示可以安裝後,系統狀態status設置為2 ,表示在安裝中…,但沒有做到當系統真正安裝好後,如何提示系統安裝成功.

對與此問題,我們可以寫個後台程序,每隔30分鐘,去讀取status為2的ip,去嘗試telnet 22,如果通了,將其status改為1.

因為,我在models的Host status的值定義為如下:

u"""

0 未安裝系統

1 已安裝系統

2 正在安裝中

3 報廢

"""

所以,我們需要將其status值動態改變。

問題2.還有個問題,就是cobbler server上配置了system定義安裝系統信息,如果下次這台機器以pxe啟動安裝的話,還會安照定義的信息重裝.可能,這不是我想要的,我需要將其cobbler server端刪除掉,如手工刪除cobbler system remove --name=」opdevos-192.168.214.45」,當然我們也可以在前面那個後台程序再擴展下,當狀態status改為1時,再將其cobbler server端的system刪除掉,並且為了保險,可以設置每天零點,去主動刪除cobbler server上所有的system。

對與我們這邊的環境,這個動作我們是可以接受的,各位可以根據自己公司的情況來決定,如何操作.

問題3.刪除cobber server的system程序都是跑在後台的,不夠直觀,我們也可以將其通過api,獲取其cobbler server上的system,也可通過web界面,去主動刪除掉.或者用戶主動去創建定製system.這是可以做到的。

問題4.對與定製好後,都需要運維人員在機房去加電開機,也許這不是你想要的,你還可以通過ipmi命令行形式去開機(加電還是需要些運維同學幫忙的),也可通過python去調用ipmi(不管是命令,還是包)都可以。有了這個,就可以開發web界面了.

好了,有了這些,相信各位客官也能搞個平台玩玩了.


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 運維講堂 的精彩文章:

TAG:運維講堂 |