Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. pwnall@pwnall-desktop:~$ cat osa_import.py
  2. #! /usr/bin/env python
  3.  
  4. import os
  5. import sys
  6. import json
  7. import requests
  8.  
  9.  
  10. class osa_import(object):
  11.  
  12. def __init__(self, inventory, region):
  13. self.inv = inventory
  14. self.region = region
  15.  
  16. def query_craton(self, endpoint):
  17. headers = {}
  18. headers['X-Auth-User'] = os.environ['OS_USERNAME']
  19. headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
  20. headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
  21. headers['Content-type'] = 'application/json'
  22. url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
  23. r = requests.get(
  24. url = url,
  25. headers=headers
  26. )
  27. return r.text
  28.  
  29. def delete_craton(self, endpoint):
  30. headers = {}
  31. headers['X-Auth-User'] = os.environ['OS_USERNAME']
  32. headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
  33. headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
  34. headers['Content-type'] = 'application/json'
  35. url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
  36. r = requests.delete(
  37. url = url,
  38. headers=headers
  39. )
  40. return r.status_code
  41.  
  42. def get_all_hosts(self):
  43. all_hosts = []
  44. data = json.loads(self.query_craton(('hosts?limit=100&region=%s' %
  45. self.region))
  46. for k,v in data:
  47. for item in v:
  48. if item.get('id', None) is not None:
  49. name = v.get('name')
  50. ipv4 = v.get('ip_address')
  51. uid = v.get('id')
  52. parent = v.get('parent', None)
  53. all_hosts.append()
  54. #returns id of hosts
  55. return all_hosts
  56.  
  57.  
  58. def insert_craton(self, endpoint, data):
  59. headers = {}
  60. headers['X-Auth-User'] = os.environ['OS_USERNAME']
  61. headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
  62. headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
  63. headers['Content-type'] = 'application/json'
  64. url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
  65. r = requests.post(
  66. url = url,
  67. data=json.dumps(data),
  68. headers=headers
  69. )
  70. return r.status_code, r.text
  71.  
  72. def gen_baremetal(self, region):
  73. baremetal_list = []
  74. for k, v in self.inv['_meta']['hostvars'].items():
  75. if v['is_metal']:
  76. dev = {}
  77. dev['name'] = k
  78. dev['ip_address'] = v['ansible_ssh_host']
  79. dev['region_id'] = int(region)
  80. dev['device_type'] = 'baremetal'
  81. baremetal_list.append(dev)
  82. return baremetal_list
  83.  
  84. def get_parents(self):
  85. req = self.query_craton('hosts?limit=100&device_type=baremetal')
  86. metal_dict = json.loads(req)
  87. parents = []
  88. for k,v in metal_dict.items():
  89. for item in v:
  90. if item.get('id', None) is not None:
  91. parents.append((item['name'],item['id']))
  92. #returns tuple in format ('name', 'id')
  93. return parents
  94.  
  95. def gen_containers(self, parents, region):
  96. container_list = []
  97. for k, v in self.inv['_meta']['hostvars'].items():
  98. for name,parent_id in parents:
  99. if v['is_metal'] is False and name in v['physical_host']:
  100. dev = {}
  101. dev['name'] = k
  102. dev['ip_address'] = v['ansible_ssh_host']
  103. dev['region_id'] = int(region)
  104. dev['device_type'] = 'container'
  105. dev['parent_id'] = parent_id
  106. container_list.append(dev)
  107. return container_list
  108.  
  109.  
  110. if __name__ == '__main__':
  111.  
  112. #load inventory
  113. with open(os.path.expanduser(sys.argv[1])) as f:
  114. inventory = json.loads(f.read())
  115.  
  116. #init osa class
  117. osa = osa_import(inventory)
  118.  
  119. #import baremetal
  120. for host in osa.gen_baremetal():
  121. s,t = osa.insert_craton('hosts', host)
  122. if s == 201:
  123. print('%s imported into craton successfully.' % host['name'])
  124. elif s == 409:
  125. print('%s already exists in craton.' % host['name'])
  126. else:
  127. print('%s failed to import into craton.' % host['name'])
  128.  
  129. #import containers
  130. parents = osa.get_parents()
  131. for host in osa.gen_containers(parents):
  132. s,t = osa.insert_craton('hosts', host)
  133. if s == 201:
  134. print('%s imported into craton successfully.' % host['name'])
  135. elif s == 409:
  136. print('%s already exists in craton.' % host['name'])
  137. else:
  138. print('%s failed to import into craton.' % host['name'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement