#!/usr/bin/env pythonimport os,sys,time,re,shutilimport socketimport fcntlimport structimport tracebackimport commands#Get interface nameinterface_path = '/etc/sysconfig/network-scripts/'def LOG(info):    """ Log files ...."""    logfile = '/root/pxe_install.log'    files = open(logfile,'a')    try:        files.write('%s : %s \n'%(time.ctime(),info))    except IOError:        files.close()    files.close()def get_interface ():    os.chdir(interface_path)    eth  = em = list()    for inter in os.listdir(interface_path):        if inter[0:-1] == 'ifcfg-em':            if inter == 'ifcfg-em1' or inter == 'ifcfg-em2':                em.append(inter)        elif inter[0:-1] == 'ifcfg-eth':            if inter == 'ifcfg-eth0' or inter == 'ifcfg-eth1':                eth.append(inter)    if eth:        LOG("Getting interface file name %s is Ok" %eth)        return eth    else:        LOG("Getting interface file name %s is Ok" %em)        return em def main():    net_name = get_interface()    ipaddr = str()    for inter in net_name:        try:            shutil.move(inter,'/opt/' + inter+'.bak')            _interface_config(inter)            new_interface = inter.split('-')[-1]            if _configure_bond(new_interface):                _configure_bond(new_interface)            LOG("bond script init is Ok")        except Exception,e:            LOG(traceback.format_exc())    if _interface_modprobe():        _interface_modprobe()        if _rester_network():        _rester_network() # Set interface eth* or em*def _interface_config(interface):    """        DEVICE=eth0        BOOTPROTO=static        NOBOOT=yes        NM_CONTROLLED=no        MASTER=bond0        SLAVE=yes    """    fp = open(interface,'w')    new_interface = interface.split('-')[-1]    if interface == 'ifcfg-em1':        fp.write('DEVICE=%s \n'%new_interface)        fp.write('BOOTPROTO=static \n')        fp.write('ONBOOT=yes \n')        fp.write('NM_CONTROLLED=no \n')        fp.write('MASTER=bond0 \n')        fp.write('SLAVE=yes \n')    elif interface == 'ifcfg-em2':        fp.write('DEVICE=%s \n'%new_interface)        fp.write('BOOTPROTO=static \n')        fp.write('ONBOOT=yes \n')        fp.write('NM_CONTROLLED=no \n')        fp.write('MASTER=bond0 \n')        fp.write('SLAVE=yes \n')    elif interface == 'ifcfg-eth0':        fp.write('DEVICE=%s \n'%new_interface)        fp.write('BOOTPROTO=static \n')        fp.write('ONBOOT=yes \n')        fp.write('NM_CONTROLLED=no \n')        fp.write('MASTER=bond0 \n')        fp.write('SLAVE=yes \n')    elif interface == 'ifcfg-eth1':        fp.write('DEVICE=%s \n'%new_interface)        fp.write('BOOTPROTO=static \n')        fp.write('ONBOOT=yes \n')        fp.write('NM_CONTROLLED=no \n')        fp.write('MASTER=bond0 \n')        fp.write('SLAVE=yes \n')    fp.close()def _configure_bond(inter):    """    DEVICE=bond0    BOOTPROTO=static    ONBOOT=yes    IPADDR=192.168.0.100    NETMASK=255.255.255.0    NETWORK=192.168.0.0    BROADCAST=192.168.0.255    """    #bond name message    if inter == 'eth0':        bond_name = 'ifcfg-bond0'    elif inter == 'em1':        bond_name =  'ifcfg-bond0'    elif inter == 'eth1':        bond_name = 'ifcfg-bond0'    elif inter == 'em2':        bond_name = 'ifcfg-bond0'    # ip address message    if _interface_get_ip(inter):        ipaddr  = _interface_get_ip(inter)    else:        ipaddr = '0.0.0.0'    # ip net mask info    try:        net_mk  = os.popen('ip a |grep %s|grep inet' %inter).readlines()[0]        res = net_mk.split()[1]        net_masklen = res.split('/')[-1]    except:        net_masklen = 18    net_mask = _interface_sum_master(net_masklen)    # default gateway is ....    try:        net_gate = os.popen('ip route |grep default').readlines()[0]        net_gateway = net_gate = net_gate.split(' ')[2]    except:        net_gateway = '0.0.0.0'       try:        if ipaddr == '0.0.0.0':            return ''        fp = open(bond_name,'w')        bond = bond_name.split('-')[-1]        fp.write("DEVICE=%s \n" %bond)        fp.write("BOOTPROTO=static \n")        fp.write("ONBOOT=yes \n")        fp.write("IPADDR=%s \n" %ipaddr)        fp.write("NETMASK=%s \n" % net_mask)        if bond == 'bond0':            fp.write("GATEWAY=%s \n" % net_gateway)            fp.write("DNS1=202.106.0.20 \n")            fp.write("DNS2=8.8.8.8 \n")        LOG("ifcfg-bond* configure is Ok")        return True    except Exception,e:        return False def _interface_get_ip(inter):    try:        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)        IP = socket.inet_ntoa(fcntl.ioctl(            s.fileno(),            0x8915,  # SIOCGIFADDR            struct.pack('24s',inter))[20:24])        return  IP    except Exception,e:        pass        return # Add modprobe bonding modeldef _interface_modprobe():    try:        fp = open('/etc/modprobe.d/bonding.conf','w')        fp.write("#Module options and blacklists written by bonding \n")        fp.write("alias bond0 bonding \n")        fp.write("options bond0 miimon=100 mode=1 \n")        fp.close()        x,y  = commands.getstatusoutput('modprobe bonding')        if x != 0:            LOG("modprobe bonding is failed")        return True    except:        LOG(traceback.format_exc())        return # Restart Networkdef _rester_network():    x,y  = commands.getstatusoutput('service network restart')    if x == 0:        LOG("restart netowrk is Ok ")        return True    else:        LOG("restart netowrk is Faild ")        return # According to the CIDR calculation.net masterdef _interface_sum_master(net_master):    mask =  (2** 8) - 2 ** (24 - int(net_master))    return '255.255.%s.0' % mask if __name__  == "__main__":    sc = main()