用到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)


参考链接http://wangwei007.blog.51cto.com/68019/1224833