La semana pasada compartí un artículo donde daba a conocer pyVmomi, un SDK desarrollado en lenguaje Python para la API de VMware vSphere que permite gestionar hosts de máquinas virtuales ESX, ESXi y vCenter. Hoy comparto mi primer script Python utilizando pyVmomi, el cual permite listar el espacio libre en todos los datastores de un host ESX/ESXi/vCenter.

Partiendo de uno de los ejemplos del proyecto pyvmomi-community-samples, decidí implementar el script list_datastore_space.py, el cual se puede descargar desde mi repositorio de scripts en GitHub:

linuxitux/scripts/pyVmomi/list_datastore_space.py

A fin de poder obtener información desde la API de VMware vSphere, es necesario acceder a la documentación de la misma para saber qué objetos y atributos hay disponibles. Algo interesante de esta referencia es que permite buscar atributos por nombre, lo cual simplifica mucho el trabajo. Aunque no es una búsqueda en sí, sino más bien un diccionario de atributos, organizado alfabéticamente (All Properties). Por ejemplo, para encontrar un atributo relacionado al espacio libre en disco, se me ocurrió buscar los atributos que comiencen con la palabra "free". De esta forma encontré el atributo freeSpace perteneciente al objeto vim.Datastore.Summary:

Data Object - DatastoreSummary(vim.Datastore.Summary)

De esta forma, luego de establecer la conexión con el host, el primer paso consiste en obtener todos los datastores disponibles:

        # Search for all Datastores
        objview = content.viewManager.CreateContainerView(content.rootFolder,
            [vim.Datastore],
            True)
        datastores = objview.view

Luego por cada datastore listado, recuperar su nombre (datastore.summary.name), tamaño (datastore.summary.capacity) y espacio disponible/libre (datastore.summary.freeSpace).

Muy simple realmente.

Finalmente se agrega toda esta información en un diccionario para mostrarla por pantalla en formato amigable o en formato JSON.

Un ejemplo del script en funcionamiento:

emi@hal9000:/usr/local/pyvmomi-community-samples/samples % ./list_datastore_space.py -s vcenter.domain -u readonly_usr -p 1234 -S
Datastore:   DS-Testing
Capacity:    1.9 TB
Free space:  626.2 GB
%free:       32.83 %

Datastore:   DS-Desa
Capacity:    2.8 TB
Free space:  945.6 GB
%free:       32.61 %

Datastore:   DS-Prod2
Capacity:    3.9 TB
Free space:  1.1 TB
%free:       28.42 %

Datastore:   DS-Prod
Capacity:    3.0 TB
Free space:  606.8 GB
%free:       19.75 %

Datastore:   ds-local-1
Capacity:    62.8 GB
Free space:  61.8 GB
%free:       98.49 %

Datastore:   ds-local-2
Capacity:    62.8 GB
Free space:  61.8 GB
%free:       98.49 %

Datastore:   ds-local-3
Capacity:    62.8 GB
Free space:  58.6 GB
%free:       93.32 %

El parámetro -s indica el nombre de host o IP a conectarse. Luego con los parámetros -u y -p se pasan las credenciales de usuario. Con -S se ignoran los errores SSL (por ejemplo en caso de usar un certificado autofirmado).

La opción -j permite volcar la salida en formato JSON:

emi@hal9000:/usr/local/pyvmomi-community-samples/samples % time ./list_datastore_space.py -s vcenter.domain -u readonly_usr -p 1234 -S -j
{"ds-local-2": {"bfree": 66359132160, "capacity": 67377299456, "pfree": "98.49"}, "ds-local-1": {"bfree": 66359132160, "capacity": 67377299456, "pfree": "98.49"}, "ds-local-3": {"bfree": 62876811264, "capacity": 67377299456, "pfree": "93.32"}, "DS-Testing": {"bfree": 672415088640, "capacity": 2047894093824, "pfree": "32.83"}, "DS-Prod": {"bfree": 651520114688, "capacity": 3298266447872, "pfree": "19.75"}, "DS-Desa": {"bfree": 1015366549504, "capacity": 3113582854144, "pfree": "32.61"}, "DS-Prod2": {"bfree": 1211339112448, "capacity": 4262486605824, "pfree": "28.42"}}

La primera impresión desarrollando programas con Python y pyVmomi es muy satisfactoria. Partiendo de cualquiera de los ejemplos, en apenas unos minutos es posible contar con un programa en funcionamiento. Sólo basta con un conocimiento mínimo sobre programación en lenguaje Python.

Referencias


Tal vez pueda interesarte


Compartí este artículo