涛子 - 简单就是美

成单纯魁增,永继振国兴,克复宗清政,广开家必升

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  428 随笔 :: 0 文章 :: 19 评论 :: 22万 阅读
em tm 00:00:00:00:00:12 10.180.1.12 255.255.255.0 173.45.34.25 255.255.255.225 173.45.34.1
em tm 00:00:00:00:00:21 10.180.1.21 255.255.255.0 10.180.110.21 255.255.255.0 10.180.1.11
eth tm 00:00:00:00:00:22 10.180.1.22 255.255.255.0 10.180.110.22 255.255.255.0 10.180.1.11
eth tm 00:00:00:00:00:23 10.180.1.23 255.255.255.0 10.180.110.23 255.255.255.0 10.180.1.11
eth tm 00:00:00:00:00:24 10.180.1.24 255.255.255.0 10.180.110.24 255.255.255.0 10.180.1.11
eth tm 00:00:00:00:00:25 10.180.1.25 255.255.255.0 10.180.110.25 255.255.255.0 10.180.1.11
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, crypt

def generate_pxe_file(os, mac, sitename, pxe_path):
    pxe = '''default menu.c32
prompt 0
timeout 100 
 
LABEL %s
    MENU DEFAULT
    MENU LABEL %s
    KERNEL %s/vmlinuz
    APPEND initrd=%s/initrd.img ks=http://%s/kickstart/%s ksdevice=link ramdisk_size=102400 console=ttyS1,115200
''' % (os, mac, os, os, sitename, mac)
   
    filename = pxe_path + '/01-' + '-'.join(mac.split(':'))
    with open(filename, 'w') as f:
        f.write(pxe)
        print 'generate pxe file: %s' % ('01-' + '-'.join(mac.split(':')))

def generate_kickstart_file(os, sitename, rootpw, kickstart_path, dev, prefix, mac, private_ip, private_mask, public_ip, public_mask, default_gw):
    # interface
    if dev == 'em':
        private_interface = '''cat > /etc/sysconfig/network-scripts/ifcfg-%s1 << _EOF_
DEVICE=%s1
ONBOOT=yes
BOOTPROTO=static
IPADDR=%s
NETMASK=%s
_EOF_
''' % (dev, dev, private_ip, private_mask)
        
        if public_ip != '0' and public_mask !='0':
            public_interface = '''cat > /etc/sysconfig/network-scripts/ifcfg-%s2 << _EOF_
DEVICE=%s2
ONBOOT=yes
BOOTPROTO=static
IPADDR=%s
NETMASK=%s
_EOF_
''' % (dev, dev, public_ip, public_mask)
        else:
            public_interface = ''

    if dev == 'eth':
        private_interface = '''cat > /etc/sysconfig/network-scripts/ifcfg-%s0 << _EOF_
DEVICE=%s0
ONBOOT=yes
BOOTPROTO=static
IPADDR=%s
NETMASK=%s
_EOF_
''' % (dev, dev, private_ip, private_mask)
        
        if public_ip != '0' and public_mask !='0':
            public_interface = '''cat > /etc/sysconfig/network-scripts/ifcfg-%s1 << _EOF_
DEVICE=%s1
ONBOOT=yes
BOOTPROTO=static
IPADDR=%s
NETMASK=%s
_EOF_
''' % (dev, dev, public_ip, public_mask)
        else:
            public_interface = ''

    # network
    network = '''cat > /etc/sysconfig/network << _EOF_
NETWORKING=yes
HOSTNAME=%s-%s-%s
GATEWAY=%s
_EOF_
''' % (prefix, private_ip.split('.')[2], private_ip.split('.')[3], default_gw)

    # dns
    dns = '''cat > /etc/resolv.conf << _EOF_
nameserver 8.8.8.8
nameserver 8.8.4.4
_EOF_
'''

    kickstart = '''text
keyboard us
timezone Asia/Shanghai
lang en_US.UTF-8
skipx
auth --enableshadow --passalgo=sha512
rootpw --iscrypted %s

zerombr
bootloader --location=mbr --driveorder=sda

part swap --fstype='swap' --ondisk=sda --size=8000
part / --fstype='ext4' --ondisk=sda --size=50000
part /opt --fstype='ext4' --ondisk=sda --size=1 --grow

network --bootproto=dhcp --device=%s --activate

install
url --url='http://%s/%s'
logging level=info

firewall --disabled
selinux --disabled
services --disabled=NetworkManager,ip6tables,iptables,postfix,cpuspeed
services --enabled=network
firstboot --disabled
reboot

%%packages
@base
@core
%%end

%%pre
clearpart --drives=sda --all
/usr/sbin/parted -s /dev/sda mklabel gpt
%%end

%%post
%s
%s
%s
%s
%%end
''' % (rootpw, mac, sitename, os, private_interface, public_interface, network, dns)

    filename = kickstart_path + '/' + mac
    with open(filename, 'w') as f:
        f.write(kickstart)
        print 'generate kickstart file: %s ' % mac 

# main
base_path = '/opt/opmgmt/install' 
pxe_path = os.path.join(base_path, 'pxelinux.cfg')
kickstart_path = os.path.join(base_path, 'kickstart')

sitename = 'install.localhost'
hosts = 'hosts.txt'
os = 'centos6'

password = 'password123'
rootpw = crypt.crypt(password, '$6$MySalt')

with open(hosts, 'r') as f:
    for host in f:
        dev, prefix, mac, private_ip, private_mask, public_ip, public_mask, default_gw = host.strip('\n').split(' ')
        generate_pxe_file(os, mac, sitename, pxe_path)
        generate_kickstart_file(os, sitename, rootpw, kickstart_path, dev, prefix, mac, private_ip, private_mask, public_ip, public_mask, default_gw)
posted on   北京涛子  阅读(304)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
历史上的今天:
2015-05-19 直播流服务器服务状态检测
点击右上角即可分享
微信分享提示