python处理key-value脚本

实现目标:把key-value配置文件解析,并根据解析内容执行一定的命令操作

(注意:配置文件可能是key=value或者key=value1 value2.···的形式)

V1.0代码如下(后续继续优化):

#!/usr/bin/env python
# -*- coding:utf-8 -*-  

"""
This module is *** init config from aliyun os.config
"""
import os
import shutil
import base64


#run  cmd
def run_cmd(args):
	p = os.popen(args)
	print p.read()


#read os.conf
def read_conf():
	filename = 'os.conf'
	conf = {}
	if os.path.exists(filename):
		with open(filename, 'r') as f:
			for line in f.readlines():
				if line == "\n":
					break
				kv = line.strip('\n').split("=")
				conf[kv[0]] = kv[1]
	else:
		message = "Sorry, I cannot find the file "
		print message, filename
	return conf


#initialize devtname
def init_hostname(conf):
	if conf.has_key('hostname'):
		#config vGate cmd
		set_name_cmd = '%s%s' %('system devname set ', conf['hostname'])
		#run vGate cmd
		run_cmd(set_name_cmd)


#modify password
def init_password(conf):
	if conf.has_key('password'):
		enc = conf['password']
		basedec_password = base64.b64decode(enc + '=' * (-len(enc) % 4))
		dec_password = basedec_password.strip('\n')
		modify_password_cmd = '%s%s' %('admin inside-admin modify index-key name index-value superman passwd-type plain passwd ', dec_password)
		run_cmd(modify_password_cmd)


#initialize DNS
def init_dns(conf):
	if conf.has_key('dns_nameserver'):
		str_dns =  conf['dns_nameserver'].strip('"')
		i = 0
		tmp = []
		tmp.append("network dns set")

		for str_slice in str_dns.split(" "):
			i += 1
			str_dns_num = "dns" + str(i)
			tmp.append(str_dns_num)
			tmp.append(str_slice)

		dns_cmd = " ".join(tmp)
		run_cmd(dns_cmd)


#initialize eth* default max network card is 10
def init_eth(conf):
	for eth_count in range(0, 11):
			
		#define eth num like eth0 eth1 eth2...
		eth_num = '%s%s' %('eth', str(eth_count))
		eth_ip = '%s%s' %(eth_num, '_ip_addr')
		
		if conf.has_key(eth_ip):
			clean_cmd = "{0} {1} {2}".format('network interface', eth_num, 'ip clean')
			run_cmd(clean_cmd)

			eth_netmask = '%s%s' %(eth_num, '_netmask')
			if conf.has_key(eth_netmask):
				mask_cmd = "{0} {1} {2} {3} {4} {5}".format('network interface', eth_num, 'ip add', conf[eth_ip],'mask', conf[eth_netmask])				
				run_cmd(mask_cmd)
			else:
				ip_cmd = "{0} {1} {2} {3}".format('network interface', eth_num, 'ip add', conf[eth_ip])
				run_cmd(ip_cmd)

			eth_mac = '%s%s' %(eth_num, '_mac_addr')
			if conf.has_key(eth_mac):
				mac_cmd =  "{0} {1} {2} {3}".format('network interface', eth_num, 'mac-address', conf[eth_mac])
				run_cmd(mac_cmd)

			eth_route = '%s%s' %(eth_num, '_route')
			if conf.has_key(eth_route):
				str_eth_num = "{0}{1}{2}".format('"', eth_num, '"')
				str_route = conf[eth_route].strip('"')

				for route_slice in str_route.split(";"):
					route_dst, route_gw = route_slice.split(" ")
					route_cmd = "{0} {1} {2} {3} {4} {5}".format('network route add dst', route_dst, 'gw', route_gw, 'dev', str_eth_num)
					run_cmd(route_cmd)
		

#save system config
def cmd_save():
	run_cmd('save')


#backup copy os.conf file
def backup_file():
	filename = 'os.conf'	
	dst_dir = "/se_mnt/init_conf"

	is_exists_dir = os.path.isdir(dst_dir)
	if not is_exists_dir:
		os.mkdir(dst_dir)
	
	if os.path.exists(filename):
		shutil.move("os.conf", "/se_mnt/init_conf/aliyun.conf")


def main(): 

	#read conf file
	net_conf = read_conf()

	#init hostname
	init_hostname(net_conf)

	#init password
	init_password(net_conf) 
	
	#init dns
	init_dns(net_conf)

	#init eth
	init_eth(net_conf)

	#cmd save
	cmd_save()
	
	#backup file
	backup_file()

if __name__ == '__main__':
    main()
配置文件内容参考:

hostname=iZ23r29djmjZ
password=cXdlcjEyMzQK
eth0_ip_addr=10.171.254.123
eth0_mac_addr=00:8c:fa:5e:14:23
eth0_netmask=255.255.255.0
eth0_gateway=10.171.254.1
eth0_route="10.0.0.0/8 10.171.254.1;172.16.0.0/12 10.171.254.1"
eth1_ip_addr=42.120.74.105
eth1_mac_addr=00:8c:fa:5e:14:24
eth1_netmask=255.255.255.0
eth1_gateway=42.120.74.1
eth1_route="0.0.0.0/0 42.120.74.1"
dns_nameserver="7.7.7.7 8.8.8.8"



猜你喜欢

转载自blog.csdn.net/qq_21794823/article/details/78905513