Instalación “manual” de OpenStack – Servicio de Identidad (perspectiva desarrollador)

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