Revista Tecnología

Usando la VMware vSphere API a través de Python con pyVmomi

Publicado el 01 diciembre 2014 por Dbigcloud @dbigcloud

Hoy os voy mostrar como usar la VMware vSphere API a través del SDK de python pyVmomi, para los que no esteis acostumbrados a trabajar con PowerCli o PoweShell os puede ser de muchisima utilidad. Con este SDK podemos construir potentes aplicaciones con las que administrar todo un entorno VMware.

Os voy a explicar como instalarlo y usarlo en una distribución Red hat o Centos.

Repositorio EPEL para RHEL 6.x y CentOS 6.x (x86_64)

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Repositorio EPEL RHEL 6.x y CentOS 6.x (i386)

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Una vez tenemos configurado el repositorio EPL procedemos a instalar PIP.

yum install -y python-pip

Lo siguiente es instalar el SDK pyVmomi:

pip install --upgrade pyvmomi

Una vez tenemos preparado el entorno vamos a probar como funciona, para ello vamos a realizar un pequeño script que nos muestre el listado de máquinas virtuales que tenemos en nuestro entorno.

 

#!/usr/bin/env python

import atexit
import sys
from pyVim import connect
from pyVmomi import vmodl
from pyVmomi import vim


def print_vm_info(vm, depth=1, max_depth=10):
    """
    Print information for a particular virtual machine or recurse into a
    folder with depth protection
    """

    # if this is a group it will have children. if it does, recurse into them
    # and then return
    if hasattr(vm, 'childEntity'):
        if depth > max_depth:
            return
        vmList = vm.childEntity
        for c in vmList:
            print_vm_info(c, depth + 1)
        return

    summary = vm.summary
    print "Name       : ", summary.config.name
    print "Path       : ", summary.config.vmPathName
    print "Guest      : ", summary.config.guestFullName
    annotation = summary.config.annotation
    if annotation:
        print "Annotation : ", annotation
    print "State      : ", summary.runtime.powerState
    if summary.guest is not None:
        ip = summary.guest.ipAddress
        if ip:
            print "IP         : ", ip
    if summary.runtime.question is not None:
        print "Question  : ", summary.runtime.question.text
    print ""



user='Administrador'
password='XXXXXXXX'
host='vcenter.dbigcloud.com'

try:
    service_instance = connect.SmartConnect(host=host,
                                                user=user,
                                                pwd=password,)
    content = service_instance.RetrieveContent()
    object_view = content.viewManager.CreateContainerView(content.rootFolder,
                                                          [], True)
    for obj in object_view.view:
        if isinstance(obj, vim.VirtualMachine):
            print_vm_info(obj)

    object_view.Destroy()

    atexit.register(connect.Disconnect, service_instance)

except vmodl.MethodFault, e:
    print "Caught vmodl fault : " + e.msg

 

En el script tenemos una función llamada print_vm_info la cual nos va a parsear la información del entorno VMware relacionada con las máquinas virtuales, despues de la función tenemos los parametros de conexión al vCenter y de esta forma podemos sacar información detallada de él.

Usando la API de VMware vSphere con Python por DBigCloud

 

Yo os recomiendo que os descarguéis el repositorio de ejemplos de GitHub y trabajéis a partir de él. Espero que os haya sido de utilidad.



Volver a la Portada de Logo Paperblog

Revista