天天看點

Cobber建構yum倉庫

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" &gt;&gt; /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