Advertisement
Guest User

Untitled

a guest
May 24th, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import sys
  4. from random import choice
  5. from argparse import ArgumentParser
  6. from pprint import pprint
  7. from elasticsearch import Elasticsearch
  8.  
  9.  
  10. def auto_relocate(host='localhost'):
  11. es = Elasticsearch(host)
  12.  
  13. data = es.cluster.state('routing_table,nodes')
  14. commands = []
  15.  
  16. for index in data['routing_table']['indices'].values():
  17. shards = [s for i in index['shards'].values() for s in i]
  18.  
  19. unassigned = [shard for shard in shards
  20. if shard['state'] == 'UNASSIGNED' and
  21. not shard['relocating_node']]
  22.  
  23. if len(unassigned) == 1:
  24. unassigned = unassigned[0]
  25. dest_node = [shard['node'] for shard in shards
  26. if shard['shard'] == unassigned['shard'] and
  27. shard['state'] != 'UNASSIGNED'][0]
  28. to_move = choice([shard for shard in shards
  29. if shard['shard'] != unassigned['shard'] and
  30. shard['primary'] != unassigned['primary']])
  31. print('')
  32. print('Move the below to: {0}'.format(
  33. data['nodes'][dest_node]['name']
  34. ))
  35. pprint(to_move)
  36.  
  37. commands.append({'move': {
  38. 'index': to_move['index'],
  39. 'shard': to_move['shard'],
  40. 'from_node': data['nodes'][to_move['node']]['name'],
  41. 'to_node': data['nodes'][dest_node]['name']
  42. }})
  43.  
  44. if raw_input('Perform the above actions? [y/N]: ').lower() == 'y':
  45. es.cluster.reroute({'commands': commands})
  46.  
  47.  
  48. def parse_arguments():
  49. parser = ArgumentParser()
  50. parser.add_argument('--elasticsearch', '-e', type=str, default='localhost')
  51. return parser.parse_args()
  52.  
  53.  
  54. def main():
  55. args = parse_arguments()
  56. auto_relocate(host=args.elasticsearch)
  57. sys.exit(0)
  58.  
  59.  
  60. if __name__ == '__main__':
  61. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement