¿Te gustaría aprender Python desde cero?
Tenemos los cursos que necesitas.¡Haz clic aquí!



Consumir el API REST de Red Hat Enterprise Virtualization Manager (RHEV-Manager) no es muy común que digamos, por lo mismo que necesitamos contar con una infraestructura RHEV de pruebas para iniciar con nuestros desarrollos (a no ser que exista uno de libre disponibilidad ) y como he escuchado decir en muchas ocasiones se necesita un ambiente donde «podamos malograr». Pero bien, consumir un API REST con Python sea del RHEV-Manager u otro, da igual, se puede utilizar los mismos lineamientos para establecer la comunicación con un API REST, aunque para el presente ejemplo, vamos a usar recursos propios del RHEV-Manager.

La plataforma del RHEV-Manager, ofrece un API REST para poder consumir los recursos de la infraestructura de virtualización de Red Hat.

Para consumir esta API REST, vamos a utilizar requests. Entonces, primero creamos nuestro entorno en python.

$ virtualenv-2.7 –no-site-packages –distribute venv
$ source venv/bin/activate
$ pip install requests

 

Creamos nuestro cliente python rhevmanager.py. A la clase RhevManager la instanciaremos con los valores necesarios para consumir el API REST, como son los datos de autenticación (usuario y contraseña), un certificado y la URL de la API.

# -*- coding: utf-8 -*-
“”” El RhevManager se conecta al API REST del RHEV-Manager“””
__author__ = Gonzalo Chacaltana Buleje
import requests
import json
from requests.auth import HTTPBasicAuth
class RhevManager(object):
def __init__(self,api_url=None,username=None,password=None,cert=None):
self.api_url = api_url
self.username = username
self.password = password
self.cert = cert
def request(self, url, data = None, method = GET):
headers = self.build_header()
if method == GET:
response = requests.get(url,verify=self.cert,auth=HTTPBasicAuth(self.username, self.password),headers=headers)
if method == POST:
pass
if response.status_code == 200 :
return response.json()
if response.status_code == 201 :
pass
code_error = (%s) % response.status_code
message = {code_error:response.reason}
if response.status_code == 400 :
print response.raise_for_status()
if response.status_code == 401 :
return json.dumps(message)
if response.status_code == 402 :
return json.dumps(message)
if response.status_code == 403 :
return json.dumps(message)
if response.status_code == 404 :
return json.dumps(message)
if response.status_code == 408 :
return json.dumps(message)
if response.status_code == 500 :
return json.dumps(message)
def get_home_document(self):
return self.request(self.api_url)
def build_header(self, accept=None, content_type=None):
accept = application/json if accept==None else accept
content_type = application/json if content_type==None else content_type
return {Accept:accept, Content-Type:content_type}

Ahora, crearemos un archivo demo.py, donde instanciaremos un objeto de la clase anteriormente desarrollada, enviándole como parámetros la URL de la API, las credenciales de autenticación (usuario y contraseña) y el certificado. De esta forma, podremos invocar a los métodos de esta clase, donde internamente se está armando el request correcto, y solo preocuparnos por enviarme la URL del recurso que queremos obtener.

# -*- coding: utf-8 -*-
__author__ = Gonzalo Chacaltana @gchacaltanab
from rhevmanager import RhevManager
class Demo(object):
def __init__(self,api_url,username,password,cert):
self.api_url = api_url
rhev_username = username
rhev_password = password
rhev_cert = cert
self.rhevm = RhevManager(self.api_url,rhev_username,rhev_password,rhev_cert)
self.endpoints = self.build_link_resource_rhevm()
def build_link_resource_rhevm(self):
“””Crea lista de recursos del home document del API REST“””
data = self.rhevm.get_home_document()
endpoints = {}
for item in data[link]:
endpoints[item[rel]] = self.api_url + item[href]
return endpoints
def get_templates(self, template_id=None):
url_format = self.endpoints[templates]
url = url_format + / + template_id if template_id != None else url_format
return self.rhevm.request(url)
def get_events(self, event_id = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[events]
url = url_format + / + event_id if event_id != None else url_format
return self.rhevm.request(url)
def get_users(self, user_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[users]
url = url_format + / + user_guid if user_guid != None else url_format
return self.rhevm.request(url)
def get_vm(self, vm_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[vms]
url = url_format + / + vm_guid if vm_guid != None else url_format
return self.rhevm.request(url)
def get_clusters(self, cluster_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[clusters]
url = url_format + / + cluster_guid if cluster_guid != None else url_format
return rhevm.request(url)
def get_datacenters(self, datacenter_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[datacenters]
url = url_format + / + datacenter_guid if datacenter_guid != None else url_format
return rhevm.request(url)
def get_hosts(self, host_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[hosts]
url = url_format + / + host_guid if host_guid != None else url_format
return rhevm.request(url)
def get_networks(self, network_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[networks]
url = url_format + / + network_guid if network_guid != None else url_format
return rhevm.request(url)
def get_roles(self, role_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[roles]
url = url_format + / + role_guid if role_guid != None else url_format
return rhevm.request(url)
def get_storagedomains(self, storagedomain_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[storagedomains]
url = url_format + / + storagedomain_guid if storagedomain_guid != None else url_format
return rhevm.request(url)
def get_tags(self, tag_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[tags]
url = url_format + / + tag_guid if tag_guid != None else url_format
return rhevm.request(url)
def get_groups(self, group_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[groups]
url = url_format + / + group_guid if group_guid != None else url_format
return rhevm.request(url)
def get_domains(self, domain_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[domains]
url = url_format + / + domain_guid if domain_guid != None else url_format
return rhevm.request(url)
def get_vmpools(self, vmpool_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[vmpools]
url = url_format + / + vmpool_guid if vmpool_guid != None else url_format
return rhevm.request(url)
def get_disks(self, disk_guid = None):
rhevm = self.connect_rhev_manager()
url_format = self.endpoints[disks]
url = url_format + / + disk_guid if disk_guid != None else url_format
return rhevm.request(url)
obj = Demo(api_url,username,password,cert)
obj.get_events()
obj.get_users()
obj.get_templates()
obj.get_clusters()
obj.get_datacenters()
obj.get_hosts()
obj.get_networks()

La documentación del API de RHEV-Manager, lo pueden encontrar en el siguiente enlace.

Te esperamos en los próximos artículos en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.

¿Te gustaría aprender Python desde cero?
Tenemos los cursos que necesitas.¡Haz clic aquí!
About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax
()
x
Abrir chat
¿Quieres aprender a programar?
Hola 👋,
¿Te interesa información de nuestros cursos?