Actualmente he realizado algunas modificaciones en un proyecto el cual me ha permitido conocer de cerca algunas de las funciones de python-openstacksdk, por lo que me gustaría compartir mis primeras observaciones. El primer paso es su instalación, en este caso para no complicarse, utilizaremos un manejador de paquetes como es el caso de pip.
Instalación de dependencias
$ pip install openstacksdk
Una vez instalada la biblioteca junto con todas sus dependencias podemos utilizar dentro del código de nuestra aplicación. Lo primero y más importante es necesario crear un objeto el cual nos permitirá comunicarnos con nuestra implementación de OpenStack.
Conexion
from openstack import connection
auth_args = {
'auth_url': 'http://localhost:5000/v3',
'project_name': 'admin',
'username': 'admin',
'password': 'secure',
}
conn = connection.Connection(**auth_args)
Para conocer los parametros de conexion, es necesario navegar en la documentación oficial.
Aunque los argumentos del constructor de este objeto están ampliamente documentados, existe un poco de ambigüedad respecto a los soportados por auth_args, para ello es necesario buscar dentro del código fuente. Una vez que hemos revisado algo del código, podemos observar que los valores aceptados varían de acuerdo a la versión de Keystone que queramos consumir(v2 o v3) y al método de autenticación a ser usado(password o token), estas son las combinaciones existentes al momento de la publicación.
Combinacion | URL |
---|---|
Password V2 | https://github.com/openstack/python-openstacksdk/blob/master/openstack/auth/identity/v2.py#L115-L127 |
Token V2 | https://github.com/openstack/python-openstacksdk/blob/master/openstack/auth/identity/v2.py#L170-L180 |
Password V3 | https://github.com/openstack/python-openstacksdk/blob/master/openstack/auth/identity/v3.py#L253-L269 |
Token V3 | https://github.com/openstack/python-openstacksdk/blob/master/openstack/auth/identity/v3.py#L295-L309 |
Una vez que se establece una conexión se puede realizar una serie de operaciones. Operaciones como la creación, eliminación, actualización y enlistado de usuarios, roles, proyectos, credenciales, dominios, endpoints, etc.
Ejemplo de listado de proyectos
...
projects = conn.identity.list_projects()
...
Observaciones
En el transcurso del desarrollo de la aplicación, parece ser que carece de algunas operaciones que no son de uso frecuente o común para las aplicaciones orientadas en la nube. Por ejemplo, referente a la manera de conectarse parece estar restringida solo a nubes existentes previamente configuradas de tal forma que, valores como OS_TOKEN y OS_URL son inválidos.
Por último resulta incierto la manera de asociar objetos, por ejemplo, asignar un rol a una cuenta o un grupo. Quizá la falta de documentación o el acceso a la documentación existente no es del todo eficiente. De cualquier forma, estas carencias tanto de documentación como de código fuente, refleja la necesidad de apoyo a este útil proyecto.