Skip to content
Snippets Groups Projects
hypervisor-show 5.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python
    
    import sys
    import httplib
    import json
    import io
    
    ################## Start API service class ##################
    
    class api_response():
    
    	__status = None
    	__data = None
    	__msg = None
    
    	def __init__(self, status, data, msg):
    		self.setStatus(status)
    		self.setData(data)
    		self.setMsg(msg)
    
    	def setStatus(self, status):
    		self.__status = status
    
    	def getStatus(self):
    		return self.__status
    
    	def setData(self, data):
    		self.__data = data
    
    	def getData(self):
    		return self.__data
    
    	def setMsg(self, msg):
    		self.__msg = msg
    
    	def getMsg(self):
    		return self.__msg	
    
    class api_request():
    	@staticmethod
    	def httpGet(url, host, port, header):
    		conn = httplib.HTTPConnection(host, port)
                    conn.request("GET", url, headers = header)
    		res = conn.getresponse()
    		response = api_response(res.status, res.read(), res.msg)
    		return response
    	@staticmethod
    	def httpsGet(url, host, port, header):
    		conn = httplib.HTTPSConnection(host, port)
                    conn.request("GET", url, headers = header)
    		res = conn.getresponse()
    		response = api_response(res.status, res.read(), res.msg)
    		return response
    	@staticmethod
    	def httpPost(url, host, port, params, headers):
    		conn = httplib.HTTPConnection(host, port)
    		conn.request("POST", url, params, headers)
    		res = conn.getresponse()
    		response = api_response(res.status, res.read(), res.msg)
    		return response
    	@staticmethod
    	def httpsPost(url, host, port, params, headers):
    		conn = httplib.HTTPSConnection(host, port)
    		conn.request("POST", url, params, headers)
    		res = conn.getresponse()
    		response = api_response(res.status, res.read(), res.msg)
    		return response
    
    
    ################## End API service class ##################
    
    ################## Start Structure service function ##################
    
    def add_host(struct, host, enable, state):
    	find = 0
    	if 'hosts' not in struct.keys():
    		struct['hosts'] = []
    
    	for h in iter(struct['hosts']):
    		if h['host'] == host:
    			h['services'][service] = state
    			find = 1
    		else:
    			continue
    
    	if find == 0:
    		struct['hosts'].append({'host' : host, 'enable' : enable, 'state' : state})
    			
    ################## End Structure service function ##################
    
    ################## Start Prisma class ##################
    
    class Prisma:
    
    	__username = ''
    	__tenant = ''
    	__token = ''
    	__password = ''
    	__tenantID = None
    
    	def __init__(self, username, tenant, password):
    		auth = '{"auth": {"tenantName": "%s","passwordCredentials": {"username": "%s","password": "%s"}}}' % (tenant, username, password)
    		header = {"Content-Type": "application/json", "Accept": "application/json"}
    		res = api_request.httpsPost('/v2.0/tokens','prisma-cloud.ba.infn.it', 5000, auth, header)
    		res_json = json.loads(res.getData())
    		self.setUsername(username)
    		self.setTenant(tenant)
    		self.setTenantID(res_json['access']['token']['tenant']['id'])
    		self.setToken(res_json['access']['token']['id'])
    		self.setPassword(password)
    
    	def setUsername(self, username):
    		self.__username = username
    	
    	def setPassword(self, password):
    		self.__password = password
    
    	def setTenant(self, tenant):
    		self.__tenant = tenant
    
    	def getTenant(self):
    		return self.__tenant
    
    	def setTenantID(self, tenantID):
    		self.__tenantID = tenantID
    
    	def getTenantID(self):
    #		tenantID = None
    #		res = api_request.httpsGet("%s%s" % ('/v2.0/tenants?name=', self.getTenant()), 'prisma-cloud.ba.infn.it', 35357, self.getAuth())
    #		if res.getStatus() == 200:
    #			tenantID = json.loads(res.getData())['tenant']['id']
    #		return tenantID
    		return self.__tenantID
    
    	def setToken(self, token):
    		self.__token = token
    
    	def getToken(self):
    		return self.__token
    
    	def getAuth(self):
    		return {"X-Auth-Token": self.getToken()}
    
    	def nova_service_list(self):
    		service = None
    		res = api_request.httpGet("%s%s%s" % ('/v2/', self.getTenantID(), '/os-services'), 'prisma-cloud.ba.infn.it', 8774, self.getAuth())
    		if res.getStatus() == 200:
    			service = json.loads(res.getData())
    		return service
    
    	def neutron_agent_list(self):
    		agent = None
    		res = api_request.httpGet('/v2.0/agents.json', 'prisma-cloud-net.ba.infn.it', 9696, self.getAuth())
    		if res.getStatus() == 200:
    			agent = json.loads(res.getData())
    		return agent
    
    	def glance_images(self):
    		images = None
    		res = api_request.httpGet('/v1.1/images', 'prisma-cloud.ba.infn.it', '9292', self.getAuth())
    		if res.getStatus() == 200:
    			images = json.loads(res.getData())
    		return images
    
    	def cinder_blocks_list(self):
    		blocks = None
    		res = api_request.httpGet('%s%s%s' % ('/v2/', self.getTenantID(), '/os-services'), 'prisma-cloud.ba.infn.it', '8776', self.getAuth())
    		if res.getStatus() == 200:
    			blocks = json.loads(res.getData())
    		return blocks
    
    	def swift_blocks_list(self):
    		blocks = None
    		res = api_request.httpsGet('%s%s%s' % ('/v1/AUTH_', self.getTenantID(), '?format=json'), 'prisma-swift.ba.infn.it', '8080', self.getAuth())
    		if res.getStatus() == 200:
    			blocks = json.loads(res.getData())
    		return blocks
    		
    
    ################## End Prisma class ##################
    
    def encode():
    
    	struct = {}
    	prisma = Prisma('admin', 'admin', 'password_da_cambiare')
    
    	nova = prisma.nova_service_list()
    	if nova != None:
    		for i in iter(nova['services']):
    			if i['binary'] == 'nova-compute':
    				add_host(struct, i['host'], 0 if i['status'] == 'disabled' else 1, 0 if i['state'] == 'down' else 1)
    
    #	print json.dumps(nova, sort_keys=True, indent=4)
    
    
    	return struct
    
    def main():
    	print encode()
    
    if __name__ == "__main__":
    	main()