用到python中的string、random模块;介绍下string模块的3个函数,看输出结果就懂了
[root@saltstack-ui ~]# python Python 2.7.5 (default, Jun 17 2014, 18:11:42) [GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import string >>> string.letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> string.digits '0123456789' >>> string.printable '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c' # 生成salt部署openstack组件的随机密码字符串 [root@pxe ~]# cat utils/gen_random_openstack_password.py #!/usr/bin/env python # -*- coding: utf-8 -*- # description: generate a set of random charactor for openstack component import random import string from jinja2 import Environment,FileSystemLoader env = Environment(loader=FileSystemLoader('/root/utils/sls')) length = 16 openstack_sls_dir = '/srv/openstack-deploy/pillar/dev/openstack/' base_sls_dir = '/srv/openstack-deploy/pillar/dev/ha/' def gen_password(length): # chars=string.ascii_letters+string.digits+'!$%^&*' chars=string.ascii_letters+string.digits return ''.join([random.choice(chars) for i in range(length)]) def create_openstack_sls(config_name,content): try: fp = open(config_name,'w') fp.write(content) except IOError: print "Error: can\'t find file or read data" else: fp.close() def create_openstack_sls_dict(component): sls_dict = {} if component == 'keystone': sls_dict = dict(zip( ['MYSQL_KEYSTONE_PASS','ADMIN_TOKEN','ADMIN_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'glance': sls_dict = dict(zip( ['MYSQL_GLANCE_PASS','AUTH_ADMIN_GLANCE_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'nova': sls_dict = dict(zip( ['MYSQL_NOVA_PASS','AUTH_ADMIN_NOVA_PASS','METADATA_PROXY_SECRET'], [gen_password(length) for i in xrange(3)])) elif component == 'neutron': sls_dict = dict(zip( ['MYSQL_NEUTRON_PASS','AUTH_ADMIN_NEUTRON_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'cinder': sls_dict = dict(zip( ['MYSQL_CINDER_PASS','AUTH_ADMIN_CINDER_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'ceilometer': sls_dict = dict(zip( ['MONGODB_CEILOMETER_PASS','AUTH_ADMIN_CEILOMETER_PASS','METERING_SECRET'], [gen_password(length) for i in xrange(3)])) elif component == 'heat': sls_dict = dict(zip( ['MYSQL_HEAT_PASS','AUTH_ADMIN_HEAT_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'mariadb': sls_dict = dict(zip( ['SST_PASS'], [gen_password(length) for i in xrange(3)])) elif component == 'rabbitmq': sls_dict = dict(zip( ['RABBIT_PASS'], [gen_password(length) for i in xrange(3)])) return sls_dict def execute_gen_sls(sls_dir,*args): for component in args: sls_template = env.get_template(component +".sls.template") sls_content = sls_template.render(create_openstack_sls_dict(component)) create_openstack_sls(sls_dir+component+'.sls',sls_content) if __name__=="__main__": openstack_component = [ 'keystone','glance','nova', 'neutron','cinder','ceilometer','heat' ] base_component = [ 'rabbitmq', 'mariadb' ] execute_gen_sls(openstack_sls_dir,*openstack_component) execute_gen_sls(base_sls_dir,*base_component)
转载于:https://blog.51cto.com/iceyao/1659765