Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- from subprocess import *
- import getpass
- import shlex
- """
- dependencies:
- - dmenu
- - dig
- """
- ldap_user = "pepe.rone"
- server_map = {
- 'Devel: mysql-redis': {
- 'ip': "192.168.124.173",
- 'user': 'root'
- },
- 'Devel: mip-panel': {
- 'ip': "192.168.124.66",
- 'user': "root"
- },
- 'Devel: pyapi & contenz': {
- 'ip': "192.168.124.37",
- 'user': "root",
- },
- 'Devel: elastic': {
- 'ip': "192.168.124.176",
- 'user': "root",
- },
- 'Devel: sayt': {
- 'ip': "192.168.124.130",
- 'user': "root",
- },
- 'Devel: kibana': {
- 'ip': "192.168.124.29",
- 'user': "root",
- },
- ##
- # prod
- ##
- 'Prod: mip-panel': {
- 'user': 'devel',
- # 'cluster': 'a060',
- 'ips': ["10.1.20.63", "10.1.20.64"],
- },
- 'Prod: py-api': {
- 'user': 'devel',
- 'ips': ["10.1.22.89", "10.1.22.90", "10.1.22.102", "10.1.22.103"]
- },
- 'Prod: elasticsearch & contenz': {
- # 'cluster': 'a067',
- 'user': 'devel',
- 'ips': ['10.1.22.91', '10.1.22.92', '10.1.22.95', '10.1.22.132'],
- },
- 'Prod: redis': {
- 'cluster': 'a059',
- 'user': 'devel'
- },
- 'Prod: kibana': {
- 'cluster': 'w068',
- 'user': 'devel'
- },
- 'Prod: sayt': {
- 'cluster': 'w125',
- 'user': 'devel'
- },
- }
- def connect_cmd(user, server):
- cmd = """
- ssh\
- -o UserKnownHostsFile=/dev/null\
- -o StrictHostKeyChecking=no\
- -t PSMConnect@10.255.246.25\
- {ldap_user} {user} -vp {password}\
- {server}""".format(
- ldap_user=ldap_user,
- user=user,
- server=server,
- password=getpass.getpass()
- )
- return cmd
- def _select(map):
- command = "dmenu -p server: -l 5 -nf orange -i -b"
- proc = Popen(shlex.split(command), stdin=PIPE, stdout=PIPE)
- out = proc.communicate('\n'.join(sorted(map.keys())))[0]
- if not out:
- print 'No selection'
- raise SystemExit
- try:
- return map[out.strip()]
- except KeyError:
- print 'Invalid selection'
- raise SystemExit
- def expand_cluster(name):
- args = ["mid1-{}-{}.buongiorno.com".format(name, i) for i in range(1,21)]
- proc = Popen(["dig", "+short"]+args, stdout=PIPE)
- out = proc.communicate()[0].split('\n')
- return {"{}-{}".format(name, i):ip for i,ip in enumerate(out, 1) if ip}
- server = _select(server_map)
- if 'ip' in server:
- ip = server['ip']
- elif 'ips' in server:
- ip = _select({'{} - {}'.format(i, ip):ip for i, ip in enumerate(server['ips'], 1)})
- elif 'cluster' in server:
- ip = _select(expand_cluster(server['cluster']))
- else:
- print 'invalid server block'
- raise SystemExit
- call(shlex.split(connect_cmd(user=server['user'], server=ip)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement