alv.pub环境介绍

自动化配置系统信息

每台服务器创建完成之后执行一下下面这个脚本,并可根据网卡mac地址来设置网络信息和主机名。

脚本网络地址: https://raw.githubusercontent.com/AlvinWanCN/poppy/master/code/alv.pub/set_hostinfo_by_nic.py

执行方式:

curl -s https://raw.githubusercontent.com/AlvinWanCN/poppy/master/code/alv.pub/set_hostinfo_by_nic.py|python

脚本内容:

  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
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#coding:utf-8
#本脚本用于通过mac地址来设置ip地址

import subprocess
import re
hostname_domain='.alv.pub'

hostname={}
hostname['2']='ipa' #ipa 服务。包括ldap,dns服务。
hostname['3']='internal' #物理机 所有虚拟机都是安装在这里
hostname['4']='zabbix' #zabbix监控
hostname['5']='jenkins' #自动化流程
hostname['6']='git' #代码服务器
hostname['9']='meta'  #其他虚拟机要创建的得时候,拷贝meta的盘。然后修改系统配置导入为新的虚拟机
hostname['10']='mysql_' #mysql前端
hostname['11']='mysql1'
hostname['12']='mysql2'
hostname['13']='mysql3'
hostname['20']='redis' #redis前端
hostname['21']='redis1'
hostname['22']='redis2'
hostname['23']='redis3'
hostname['30']='mongodb' #mongodb 前端
hostname['31']='mongodb1'
hostname['32']='mongodb2'
hostname['33']='mongodb3'
hostname['41']='test1'
hostname['42']='test2'
hostname['43']='test3'
hostname['44']='test4'
hostname['45']='test5'
hostname['46']='test6'
hostname['47']='test7'
hostname['48']='test8'
hostname['49']='test9'
hostname['50']='w7'
hostname['51']='w10'
hostname['52']='kali'
hostname['60']='mysql'
hostname['61']='redis'
hostname['68']='centos6u8'
hostname['74']='centos7u4'
hostname['73']='centos7u3'
hostname['81']='k8s1'
hostname['82']='k8s2'
hostname['83']='k8s3'
hostname['84']='k8s4'
hostname['90']='vpnserver'
hostname['91']='ubuntu14u4'
hostname['92']='ubuntu16u4'
hostname['93']='ubuntu18u4'

#获取mac地址
get_nic=subprocess.check_output("ip a s|grep ether|awk '{print $2}'",shell=True).split('\n')[0]
#获取mac地址最后一位
tail_1=get_nic.split(':')[-1]
#如果最后一段数的开头是0,去掉0
if tail_1[0] == '0':tail_1=tail_1[1]
#获取mac地址倒数第二位
tail_2=get_nic.split(':')[-2]
#Get mac tail 3 number
tail_3=get_nic.split(':')[-2]

if tail_2 == '01':tail_1='1'+tail_1


#设置ip等网络信息
sysinfo={}
sysinfo['ip']='192.168.3.%s'%tail_1
sysinfo['gw']='192.168.3.3'
sysinfo['dns']='192.168.3.2'
sysinfo['dns_search']='alv.pub'
#sysinfo['nic']=subprocess.check_output("ip a s|grep state|grep -v lo|awk -F: '{print $2}'|sed 's/ //'",shell=True).split('\n')[0]
sysinfo['nic']=re.sub(r'(GENERAL.CONNECTION:\s+)','',subprocess.check_output("nmcli device show |grep -i CONNECTION|head -1",shell=True).split('\n')[0])


sysinfo['hostname']=hostname[tail_1]+hostname_domain

#设置ip地址

def set_ip_info():
        if subprocess.call('nmcli connection modify "{nic}" ipv4.method manual ipv4.addresses {ip}/24 ipv4.gateway {gw} ipv4.dns {dns} ipv4.dns-search {dns_search} autoconnect yes && nmcli con up "{nic}"'.format(**sysinfo),shell=True) == 0:
            print('IP address has heen setup ok')
        else:
            print('IP address setup failed.')


def set_hostnaem():
    if subprocess.call('hostnamectl set-hostname %s'%sysinfo['hostname'],shell=True) == 0:
        print('Hostname setup ok')
    else:
        print('Hostname setup failed.')



def main():
    set_ip_info()
    set_hostnaem()

if __name__ == '__main__':
    main()