Advertisement
Guest User

Untitled

a guest
Mar 10th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. #!/usr/bin/python
  2. from subprocess import *
  3. import getpass
  4. import shlex
  5.  
  6. """
  7. dependencies:
  8. - dmenu
  9. - dig
  10. """
  11.  
  12. ldap_user = "pepe.rone"
  13.  
  14. server_map = {
  15. 'Devel: mysql-redis': {
  16. 'ip': "192.168.124.173",
  17. 'user': 'root'
  18. },
  19. 'Devel: mip-panel': {
  20. 'ip': "192.168.124.66",
  21. 'user': "root"
  22. },
  23. 'Devel: pyapi & contenz': {
  24. 'ip': "192.168.124.37",
  25. 'user': "root",
  26. },
  27. 'Devel: elastic': {
  28. 'ip': "192.168.124.176",
  29. 'user': "root",
  30. },
  31. 'Devel: sayt': {
  32. 'ip': "192.168.124.130",
  33. 'user': "root",
  34. },
  35. 'Devel: kibana': {
  36. 'ip': "192.168.124.29",
  37. 'user': "root",
  38. },
  39. ##
  40. # prod
  41. ##
  42. 'Prod: mip-panel': {
  43. 'user': 'devel',
  44. # 'cluster': 'a060',
  45. 'ips': ["10.1.20.63", "10.1.20.64"],
  46. },
  47. 'Prod: py-api': {
  48. 'user': 'devel',
  49. 'ips': ["10.1.22.89", "10.1.22.90", "10.1.22.102", "10.1.22.103"]
  50. },
  51. 'Prod: elasticsearch & contenz': {
  52. # 'cluster': 'a067',
  53. 'user': 'devel',
  54. 'ips': ['10.1.22.91', '10.1.22.92', '10.1.22.95', '10.1.22.132'],
  55. },
  56. 'Prod: redis': {
  57. 'cluster': 'a059',
  58. 'user': 'devel'
  59. },
  60. 'Prod: kibana': {
  61. 'cluster': 'w068',
  62. 'user': 'devel'
  63. },
  64. 'Prod: sayt': {
  65. 'cluster': 'w125',
  66. 'user': 'devel'
  67. },
  68. }
  69.  
  70. def connect_cmd(user, server):
  71. cmd = """
  72. ssh\
  73. -o UserKnownHostsFile=/dev/null\
  74. -o StrictHostKeyChecking=no\
  75. -t PSMConnect@10.255.246.25\
  76. {ldap_user} {user} -vp {password}\
  77. {server}""".format(
  78. ldap_user=ldap_user,
  79. user=user,
  80. server=server,
  81. password=getpass.getpass()
  82. )
  83. return cmd
  84.  
  85. def _select(map):
  86. command = "dmenu -p server: -l 5 -nf orange -i -b"
  87. proc = Popen(shlex.split(command), stdin=PIPE, stdout=PIPE)
  88. out = proc.communicate('\n'.join(sorted(map.keys())))[0]
  89. if not out:
  90. print 'No selection'
  91. raise SystemExit
  92. try:
  93. return map[out.strip()]
  94. except KeyError:
  95. print 'Invalid selection'
  96. raise SystemExit
  97.  
  98. def expand_cluster(name):
  99. args = ["mid1-{}-{}.buongiorno.com".format(name, i) for i in range(1,21)]
  100. proc = Popen(["dig", "+short"]+args, stdout=PIPE)
  101. out = proc.communicate()[0].split('\n')
  102. return {"{}-{}".format(name, i):ip for i,ip in enumerate(out, 1) if ip}
  103.  
  104. server = _select(server_map)
  105. if 'ip' in server:
  106. ip = server['ip']
  107. elif 'ips' in server:
  108. ip = _select({'{} - {}'.format(i, ip):ip for i, ip in enumerate(server['ips'], 1)})
  109. elif 'cluster' in server:
  110. ip = _select(expand_cluster(server['cluster']))
  111. else:
  112. print 'invalid server block'
  113. raise SystemExit
  114.  
  115. call(shlex.split(connect_cmd(user=server['user'], server=ip)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement