Cobbler自定義安裝系統時,我們更希望一次性預裝好我們需要的基礎環境,比如通過yum倉庫來實作基礎軟體包的安裝等。
Cobbler中,經常用到的檔案和目錄主要包含:
/var/www/cobbler : 基礎鏡像,使用的系統鏡像放置在這個目錄中。
/var/www/cobbler/repo_mirror: 倉庫鏡像路徑。
/var/lib/cobbler/ : kickstarts檔案的存儲路徑和腳本檔案的存儲路徑。
/var/lib/cobbler/loaders: 系統啟動檔案
/etc/cobbler : cobbler配置檔案路徑
建構私有yum倉庫
使用cobbler添加一個openstack的源存儲庫:
1
2
3
<code># cobbler repo add --name=openstack-newton \</code>
<code>--mirror=https:</code><code>//mirrors</code><code>.aliyun.com</code><code>/centos/7/cloud/x86_64/openstack-newton/</code> <code>\</code>
<code>--arch=x86_64 --breed=yum</code>
如果需要添加epel源,可以使用相同的指令:
<code>cobbler repo add --name=CentOS-7-x86_64-epel \ </code>
<code>--mirror=http:</code><code>//mirrors</code><code>.aliyun.com</code><code>/epel/7Server/x86_64/</code> <code>\</code>
<code>--arch=x86_64 --breed=yum</code>
同步存儲庫:
<code># cobbler reposync</code>
這樣會将阿裡雲上對應路徑的所有包下載下傳到本地,并且會自動建立repo檔案。
如何在自動安裝的鏡像上添加repo檔案呢,可以使用下面的指令,指定profile:
<code># cobbler profile edit --name=CentOS-7-x86_64 --repo="openstack-newton"</code>
修改kickstarts檔案,在/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg中加入yum的配置:
4
5
<code>%post</code>
<code>systemctl disable postfix.service</code>
<code>%yum_config_stanza </code><code># 配置yum源</code>
<code>%end</code>
添加定時任務,定期同步repo,如:
<code># echo "1 3 * * * /usr/bin/cobbler resposync --tries=3 --no-fail" >> /var/spool/root</code>
Cobbler自動化安裝系統
通過system 元件來實作IP位址和mac位址的對應關系,使主機自動識别安裝定義好的系統和配置。
如在生産環境中,一般會通過mac位址來識别主機,然後指定安裝的系統和環境配置。
例如需要定義一個主機的資訊:
IP:192.168.1.200
hostname: node2
subnet: 255.255.255.0
gateway: 192.168.1.2
DNS: 192.168.1.2
首先記錄采購的主機mac位址,如需要安裝的伺服器主機mac位址為:
00:50:56:3C:78:13
可以先通過cobbler system list 來檢視目前已有的cobbler資訊.
添加上面的主機資訊到cobbler配置,執行下面的指令:
<code>cobbler system add --name=cobbler-node2 --mac=00:50:56:3C:78:13 --profile=CentOS-7-x86_64 \</code>
<code>--ip-address=192.168.1.200 --subnet=255.255.255.0 --gateway=192.168.1.2 --interface=eth0 \</code>
<code>--static=1 --</code><code>hostname</code><code>=node2 --name-servers=</code><code>"192.168.1.2"</code> <code>\</code>
<code>--kickstart=</code><code>/var/lib/cobbler/kickstarts/CentOS-7-x86_64</code><code>.cfg</code>
執行上指令後,可以使用list指令來檢視是否已經添加了目前的資訊:
<code># cobbler system list</code>
<code> </code><code>cobbler-node2</code>
啟動mac位址為00:50:56:3C:78:13的伺服器,這樣當此mac位址的伺服器啟動時會自動安裝指定的系統。
Cobbler API的調用
可以使用python腳本來擷取cobbler的一些參數和資訊如擷取一些基本資訊等:
6
7
8
9
<code># cat cobbler_list.py </code>
<code>#!/usr/bin/python</code>
<code>import</code> <code>xmlrpclib</code>
<code>server = xmlrpclib.Server(</code><code>"http://192.168.1.10/cobbler_api"</code><code>)</code>
<code>print server.get_distros()</code>
<code>print server.get_profiles()</code>
<code>print server.get_systems()</code>
<code>print server.get_images()</code>
<code>print server.get_repos()</code>
傳回的是一個清單資訊。可以通過前端調用展示。
我們可以使用python 調用cobbler API示例:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<code>#!/usr/bin/env python </code>
<code># -*- coding: utf-8 -*-</code>
<code>import</code> <code>xmlrpclib </code>
<code>class</code> <code>CobblerAPI(</code><code>object</code><code>):</code>
<code> </code><code>def</code> <code>__init__(</code><code>self</code><code>,url,user,password):</code>
<code> </code><code>self</code><code>.cobbler_user</code><code>=</code> <code>user</code>
<code> </code><code>self</code><code>.cobbler_pass </code><code>=</code> <code>password</code>
<code> </code><code>self</code><code>.cobbler_url </code><code>=</code> <code>url</code>
<code> </code>
<code> </code><code>def</code> <code>add_system(</code><code>self</code><code>,hostname,ip_add,mac_add,profile):</code>
<code> </code><code>'''</code>
<code> </code><code>Add Cobbler System Infomation</code>
<code> </code><code>ret </code><code>=</code> <code>{</code>
<code> </code><code>"result"</code><code>: </code><code>True</code><code>,</code>
<code> </code><code>"comment"</code><code>: [],</code>
<code> </code><code>}</code>
<code> </code><code>#get token</code>
<code> </code><code>remote </code><code>=</code> <code>xmlrpclib.Server(</code><code>self</code><code>.cobbler_url) </code>
<code> </code><code>token </code><code>=</code> <code>remote.login(</code><code>self</code><code>.cobbler_user,</code><code>self</code><code>.cobbler_pass) </code>
<code>#add system</code>
<code> </code><code>system_id </code><code>=</code> <code>remote.new_system(token) </code>
<code> </code><code>remote.modify_system(system_id,</code><code>"name"</code><code>,hostname,token) </code>
<code> </code><code>remote.modify_system(system_id,</code><code>"hostname"</code><code>,hostname,token) </code>
<code> </code><code>remote.modify_system(system_id,</code><code>'modify_interface'</code><code>, { </code>
<code> </code><code>"macaddress-eth0"</code> <code>: mac_add, </code>
<code> </code><code>"ipaddress-eth0"</code> <code>: ip_add, </code>
<code> </code><code>"dnsname-eth0"</code> <code>: hostname, </code>
<code> </code><code>}, token) </code>
<code> </code><code>remote.modify_system(system_id,</code><code>"profile"</code><code>,profile,token) </code>
<code> </code><code>remote.save_system(system_id, token) </code>
<code> </code><code>try</code><code>:</code>
<code> </code><code>remote.sync(token)</code>
<code> </code><code>except</code> <code>Exception as e:</code>
<code> </code><code>ret[</code><code>'result'</code><code>] </code><code>=</code> <code>False</code>
<code> </code><code>ret[</code><code>'comment'</code><code>].append(</code><code>str</code><code>(e))</code>
<code> </code><code>return</code> <code>ret</code>
<code>def</code> <code>main():</code>
<code> </code><code>cobbler </code><code>=</code> <code>CobblerAPI(</code><code>"http://192.168.1.10/cobbler_api"</code><code>,</code><code>"cobbler"</code><code>,</code><code>"cobbler"</code><code>)</code>
<code> </code><code>ret </code><code>=</code> <code>cobbler.add_system(hostname</code><code>=</code><code>'cobbler-api-test'</code><code>,ip_add</code><code>=</code><code>'192.168.1.201'</code><code>,mac_add</code><code>=</code><code>'00:50:56:3C:78:13'</code><code>,profile</code><code>=</code><code>'CentOS-7-x86_64'</code><code>)</code>
<code> </code><code>print</code> <code>ret</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>main()</code>
修改main函數中的配置資訊,直接執行上面的腳本就可以調用cobbler的api将需要安裝的資訊自動添加到cobbler中。
<code># python cobbler_python.py </code>
<code>{</code><code>'comment'</code><code>: [], </code><code>'result'</code><code>: True} </code><code>#傳回true,說明執行成功。 </code>
<code> </code><code>cobbler-api-</code><code>test</code>
這樣當指定的伺服器加電就可以自動化安裝了。
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1878868