Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pwnall@pwnall-desktop:~$ cat osa_import.py
- #! /usr/bin/env python
- import os
- import sys
- import json
- import requests
- class osa_import(object):
- def __init__(self, inventory, region):
- self.inv = inventory
- self.region = region
- def query_craton(self, endpoint):
- headers = {}
- headers['X-Auth-User'] = os.environ['OS_USERNAME']
- headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
- headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
- headers['Content-type'] = 'application/json'
- url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
- r = requests.get(
- url = url,
- headers=headers
- )
- return r.text
- def delete_craton(self, endpoint):
- headers = {}
- headers['X-Auth-User'] = os.environ['OS_USERNAME']
- headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
- headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
- headers['Content-type'] = 'application/json'
- url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
- r = requests.delete(
- url = url,
- headers=headers
- )
- return r.status_code
- def get_all_hosts(self):
- all_hosts = []
- data = json.loads(self.query_craton(('hosts?limit=100®ion=%s' %
- self.region))
- for k,v in data:
- for item in v:
- if item.get('id', None) is not None:
- name = v.get('name')
- ipv4 = v.get('ip_address')
- uid = v.get('id')
- parent = v.get('parent', None)
- all_hosts.append()
- #returns id of hosts
- return all_hosts
- def insert_craton(self, endpoint, data):
- headers = {}
- headers['X-Auth-User'] = os.environ['OS_USERNAME']
- headers['X-Auth-Project'] = os.environ['OS_PROJECT_ID']
- headers['X-Auth-Token'] = os.environ['OS_PASSWORD']
- headers['Content-type'] = 'application/json'
- url = ('%s/%s' % (os.environ['CRATON_URL'], endpoint))
- r = requests.post(
- url = url,
- data=json.dumps(data),
- headers=headers
- )
- return r.status_code, r.text
- def gen_baremetal(self, region):
- baremetal_list = []
- for k, v in self.inv['_meta']['hostvars'].items():
- if v['is_metal']:
- dev = {}
- dev['name'] = k
- dev['ip_address'] = v['ansible_ssh_host']
- dev['region_id'] = int(region)
- dev['device_type'] = 'baremetal'
- baremetal_list.append(dev)
- return baremetal_list
- def get_parents(self):
- req = self.query_craton('hosts?limit=100&device_type=baremetal')
- metal_dict = json.loads(req)
- parents = []
- for k,v in metal_dict.items():
- for item in v:
- if item.get('id', None) is not None:
- parents.append((item['name'],item['id']))
- #returns tuple in format ('name', 'id')
- return parents
- def gen_containers(self, parents, region):
- container_list = []
- for k, v in self.inv['_meta']['hostvars'].items():
- for name,parent_id in parents:
- if v['is_metal'] is False and name in v['physical_host']:
- dev = {}
- dev['name'] = k
- dev['ip_address'] = v['ansible_ssh_host']
- dev['region_id'] = int(region)
- dev['device_type'] = 'container'
- dev['parent_id'] = parent_id
- container_list.append(dev)
- return container_list
- if __name__ == '__main__':
- #load inventory
- with open(os.path.expanduser(sys.argv[1])) as f:
- inventory = json.loads(f.read())
- #init osa class
- osa = osa_import(inventory)
- #import baremetal
- for host in osa.gen_baremetal():
- s,t = osa.insert_craton('hosts', host)
- if s == 201:
- print('%s imported into craton successfully.' % host['name'])
- elif s == 409:
- print('%s already exists in craton.' % host['name'])
- else:
- print('%s failed to import into craton.' % host['name'])
- #import containers
- parents = osa.get_parents()
- for host in osa.gen_containers(parents):
- s,t = osa.insert_craton('hosts', host)
- if s == 201:
- print('%s imported into craton successfully.' % host['name'])
- elif s == 409:
- print('%s already exists in craton.' % host['name'])
- else:
- print('%s failed to import into craton.' % host['name'])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement