Ahora es momento de explicar que pasos son requeridos para poder consumir y depurar el código fuente del Servicio de Identidad, o mejor conocido como Keystone.
En términos generales los pasos a realizar son muy sencillos y pueden resumirse en los siguientes:
- Instalación de paquetes necesarios
- Descarga del código fuente
- Personalización de valores de configuración
- Generación de tablas
- Inicio de servicio
Todos los pasos a realizar serán agregados a un nuevo script llamado «keystone_dev.sh», el cual podrá ser utilizado desde nuestro proyecto en vagrant. No esta por de mas mencionar que el código utilizado a lo largo de esta publicación estará disponible en el mismo repositorio.
Lo primero que haremos sera modificar el archivo Vagrantfile para poder ejecutar el script keystone_dev.sh
Vagrantfile
config.vm.define :keystone do |keystone|
keystone.vm.hostname = 'keystone-precise64'
keystone.vm.network :private_network, ip: '192.168.50.12'
keystone.vm.network :forwarded_port, guest: 5000, host: 5000
keystone.vm.network :forwarded_port, guest: 35357, host: 35357
#keystone.vm.provision "shell", path: "keystone.sh"
keystone.vm.provision "shell", path: "keystone_dev.sh"
end
Comenzare el script almacenando un par de variables que pueden servir en caso de querer agregar roles, cuentas, servicios, etc. No son parte indispensable del proceso, pero son de gran utilidad para manipular datos en el momento de hacer pruebas.
keystone_dev.sh
#!/bin/bash
token=`openssl rand -hex 10`
echo "export SERVICE_TOKEN=${token}" >> openrc
echo "export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0" >> openrc
La documentación oficial recomienda para Ubuntu la instalacion de solo algunos paquetes necesarios como lo son: python-dev, libxml2-dev, libxslt1-dev, libsasl2-dev, libsqlite3-dev, libssl-dev, libldap2-dev y libffi-dev, para complementar la lista seran agregados varios paquetes para facilitar el desarrollo.
keystone_dev.sh
apt-get update
apt-get install --no-install-recommends -qqy git screen python-pip python-virtualenv python-dev libxml2-dev libxslt1-dev libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev libffi-dev
Una vez instalado las dependencias necesarias para nuestro ambiente de desarrollo, procederemos a descargar el código fuente mas reciente desde el repositorio oficial.
keystone_dev.sh
git clone https://github.com/openstack/keystone.git
cd keystone
Nuevamente instalaremos mas dependencias requeridas por el proyecto, solo que estas librerías serán almacenadas en un ambiente virtual de python llamado «.venv». Por ultimo creamos un archivo de configuración con base en una plantilla proporcionada por el código fuente descargado.
keystone_dev.sh
python tools/install_venv.py
cp etc/keystone.conf.sample etc/keystone.conf
sed -i.bak "s/#admin_token=ADMIN/admin_token=${token}/g" etc/keystone.conf
Al sincronizar la base de datos, las tablas y columnas generadas serán almacenados en el archivo definido por la configuración que especificamos previamente.
keystone_dev.sh
tools/with_venv.sh bin/keystone-manage db_sync
Por ultimo, solo nos queda levantar el servicio para poder ser consumido por otras herramientas. Por lo que iniciaremos una instancia de screen donde estará corriendo el servicio.
keystone_dev.sh
screen -dmS "keystone_service" tools/with_venv.sh bin/keystone-all