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
|
# cobbler repo add --name=openstack-newton \
--mirror=https:
//mirrors
.aliyun.com
/centos/7/cloud/x86_64/openstack-newton/
\
--arch=x86_64 --breed=yum
|
如果需要添加epel源,可以使用相同的命令:
1
2
3
|
cobbler repo add --name=CentOS-7-x86_64-epel \
--mirror=http:
//mirrors
.aliyun.com
/epel/7Server/x86_64/
\
--arch=x86_64 --breed=yum
|
同步存储库:
1
|
# cobbler reposync
|
这样会将阿里云上对应路径的所有包下载到本地,并且会自动创建repo文件。
如何在自动安装的镜像上添加repo文件呢,可以使用下面的命令,指定profile:
1
|
# cobbler profile edit --name=CentOS-7-x86_64 --repo="openstack-newton"
|
修改kickstarts文件,在/var/lib/cobbler/kickstarts/CentOS-7-x86_64.cfg中加入yum的配置:
1
2
3
4
5
|
%post
systemctl disable postfix.service
%yum_config_stanza
# 配置yum源
%end
|
添加定时任务,定期同步repo,如:
1
|
# echo "1 3 * * * /usr/bin/cobbler resposync --tries=3 --no-fail" >> /var/spool/root
|
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配置,执行下面的命令:
1
2
3
4
|
cobbler system add --name=cobbler-node2 --mac=00:50:56:3C:78:13 --profile=CentOS-7-x86_64 \
--ip-address=192.168.1.200 --subnet=255.255.255.0 --gateway=192.168.1.2 --interface=eth0 \
--static=1 --
hostname
=node2 --name-servers=
"192.168.1.2"
\
--kickstart=
/var/lib/cobbler/kickstarts/CentOS-7-x86_64
.cfg
|
执行上命令后,可以使用list命令来查看是否已经添加了当前的信息:
1
2
|
# cobbler system list
cobbler-node2
|
启动mac地址为00:50:56:3C:78:13的服务器,这样当此mac地址的服务器启动时会自动安装指定的系统。
Cobbler API的调用
可以使用python脚本来获取cobbler的一些参数和信息如获取一些基本信息等:
1
2
3
4
5
6
7
8
9
|
# cat cobbler_list.py
#!/usr/bin/python
import
xmlrpclib
server = xmlrpclib.Server(
"http://192.168.1.10/cobbler_api"
)
print server.get_distros()
print server.get_profiles()
print server.get_systems()
print server.get_images()
print server.get_repos()
|
返回的是一个列表信息。可以通过前端调用展示。
我们可以使用python 调用cobbler API示例:
1
2
3
4
5
6
7
8
9
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
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
xmlrpclib
class
CobblerAPI(
object
):
def
__init__(
self
,url,user,password):
self
.cobbler_user
=
user
self
.cobbler_pass
=
password
self
.cobbler_url
=
url
def
add_system(
self
,hostname,ip_add,mac_add,profile):
'''
Add Cobbler System Infomation
'''
ret
=
{
"result"
:
True
,
"comment"
: [],
}
#get token
remote
=
xmlrpclib.Server(
self
.cobbler_url)
token
=
remote.login(
self
.cobbler_user,
self
.cobbler_pass)
#add system
system_id
=
remote.new_system(token)
remote.modify_system(system_id,
"name"
,hostname,token)
remote.modify_system(system_id,
"hostname"
,hostname,token)
remote.modify_system(system_id,
'modify_interface'
, {
"macaddress-eth0"
: mac_add,
"ipaddress-eth0"
: ip_add,
"dnsname-eth0"
: hostname,
}, token)
remote.modify_system(system_id,
"profile"
,profile,token)
remote.save_system(system_id, token)
try
:
remote.sync(token)
except
Exception as e:
ret[
'result'
]
=
False
ret[
'comment'
].append(
str
(e))
return
ret
def
main():
cobbler
=
CobblerAPI(
"http://192.168.1.10/cobbler_api"
,
"cobbler"
,
"cobbler"
)
ret
=
cobbler.add_system(hostname
=
'cobbler-api-test'
,ip_add
=
'192.168.1.201'
,mac_add
=
'00:50:56:3C:78:13'
,profile
=
'CentOS-7-x86_64'
)
print
ret
if
__name__
=
=
'__main__'
:
main()
|
修改main函数中的配置信息,直接执行上面的脚本就可以调用cobbler的api将需要安装的信息自动添加到cobbler中。
1
2
3
4
5
6
7
|
# python cobbler_python.py
{
'comment'
: [],
'result'
: True}
#返回true,说明执行成功。
# cobbler system list
cobbler-node2
cobbler-api-
test
|
这样当指定的服务器加电就可以自动化安装了。
Cobbler文档: https://www.ibm.com/developerworks/cn/linux/l-cobbler/
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1878868