您的位置:首页 > 运维架构

salt openstack生成随机字符串

2015-06-08 17:03 381 查看
用到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)


参考链接:/article/4256999.html
本文出自 “the-way-to-cloud” 博客,请务必保留此出处http://iceyao.blog.51cto.com/9426658/1659765
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: