最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述guacamole user-mapping文件生成脚本相关的知识,希望能为你提供帮助。
#!/usr/bin/python #coding:utf-8from xml.dom.minidom import Document import json,requests,hashlib,re from config import *def add_host(user,hostname,protocol,ip,port,host_username,host_password,os_family): h = hostname p = protocol connection = config.createElement(' connection' ) connection.setAttribute(' name' , h) user.appendChild(connection) protocol = config.createElement(' protocol' ) protocol_text = config.createTextNode(p) protocol.appendChild(protocol_text) connection.appendChild(protocol) param = config.createElement(' param' ) param.setAttribute(' name' , ' hostname' ) param_text = config.createTextNode(ip) param.appendChild(param_text) connection.appendChild(param) param = config.createElement(' param' ) param.setAttribute(' name' , ' port' ) param_text = config.createTextNode(port) param.appendChild(param_text) connection.appendChild(param) param = config.createElement(' param' ) param.setAttribute(' name' , ' username' ) param_text = config.createTextNode(host_username) param.appendChild(param_text) connection.appendChild(param) param = config.createElement(' param' ) param.setAttribute(' name' , ' password' ) param_text = config.createTextNode(host_password) param.appendChild(param_text) connection.appendChild(param) if os_family == ' win' : param = config.createElement(' param' ) param.setAttribute(' name' , ' enable-drive' ) param_text = config.createTextNode(' true' ) param.appendChild(param_text) connection.appendChild(param) param = config.createElement(' param' ) param.setAttribute(' name' , ' create-drive-path' ) param_text = config.createTextNode(' true' ) param.appendChild(param_text) connection.appendChild(param) param = config.createElement(' param' ) param.setAttribute(' name' , ' drive-path' ) param_text = config.createTextNode(' /var/ftp/pub/upload' ) param.appendChild(param_text) connection.appendChild(param) else: param = config.createElement(' param' ) param.setAttribute(' name' , ' color-scheme' ) param_text = config.createTextNode(' white-black' ) param.appendChild(param_text) connection.appendChild(param) return connectiondef add_user(map,guac_username,guac_password): user = config.createElement(' authorize' ) user.setAttribute(' password' , guac_password) user.setAttribute(' username' , guac_username) user.setAttribute(' encoding' , ' md5' ) result = map.appendChild(user) return resultdef init_host(host): one_host = {} one_host[' ip' ] = host[' ip' ] one_host[' hostname' ] = host[' name' ] one_host[' os' ] = host[' osfamily' ] one_host[' env' ] = host[' env' ] one_host[' tag' ] = host[' tag' ] # _tmp = re.match(r' ^[a-zA-Z]{3,10}' , host[' tag' ]) # one_host[' tag' ] = _tmp.group() return one_host def get_url(hostname): import base64 name = hostname + ' \x00c\x00default' init_name = base64.b64encode(name) ##guacamole服务器的公网ip url = ' http://ip:8081/#/client/' + init_name return url def create_md5(pwd): m = hashlib.md5() m.update(pwd) password = m.hexdigest() #print password return password if __name__==' __main__' : config = Document() map = config.createElement(' user-mapping' ) config.appendChild(map) ##用户是从CMDB API获取的 url = ' http://cmdb.beyondhost.com/api/user/get/' r = requests.get(url) users = json.loads(r.text) ##服务器列表也是cmdb中获取的 url = ' http://cmdb.beyondhost.com/api/get_uhost/' r = requests.get(url) hosts = json.loads(r.text) #print json.dumps(hosts,indent=4) host_set = [] for host in hosts: if host[' env' ]==' test' : _tmp = init_host(host) host_set.append(_tmp) for user in users: guac_username = user[' username' ] guac_password = user[' password' ] guac_group = user[' group' ] guac_additionalgroup = user[' additionalgroupname' ] user = add_user(map, guac_username, guac_password) for host in host_set: if guac_group == ' OPS' : if host[' os' ] == ' win' : port = ' 13040' protocol = ' rdp' hostname = host[' hostname' ] ip = host[' ip' ] host_username = ' administrator' host_password = admin_passwd_test add_host(user, hostname, protocol, ip, port, host_username, host_password,host[' os' ]) elif host[' os' ] == ' linux' : port = ' 22' protocol = ' ssh' hostname = host[' hostname' ] ip = host[' ip' ] host_username = ' ansible' host_password = ansible_passwd_test add_host(user, hostname, protocol, ip, port, host_username, host_password,host[' os' ]) else: if len(guac_additionalgroup) > 0: if host[' tag' ] in guac_additionalgroup : if host[' os' ] == ' win' : port = ' 13040' protocol = ' rdp' hostname = host[' hostname' ] ip = host[' ip' ] host_username = ' dev' host_password = dev_passwd_test add_host(user, hostname, protocol, ip, port, host_username, host_password,host[' os' ]) elif host[' os' ] == ' linux' : port = ' 22' protocol = ' ssh' hostname = host[' hostname' ] ip = host[' ip' ] host_username = ' ansible' host_password = ansible_passwd_test add_host(user, hostname, protocol, ip, port, host_username, host_password,host[' os' ]) file_object = open(' /etc/guacamole/user-mapping.xml' ,' w' ) file_object.write(config.toprettyxml(encoding=' utf-8' )) file_object.close()
【guacamole user-mapping文件生成脚本】
推荐阅读
- respberry2b + android5.1
- 编译报错(Failed to resolve com.android.support)
- html代码直接打包封装成APP文档
- 小红伞杀毒软件,本文教您小红伞杀毒软件怎样运用
- office2003产品密钥,本文教您如何激活office2003
- 笔记本亮度怎样调,本文教您怎样调节笔记本亮度
- 打印机共享无法打印,本文教您如何恢复正常
- dwg文件,本文教您dwg格式文件怎样打开
- 电脑连不上网,本文教您处理电脑win7连不上网