Objectiu:
Disposar d’un entorn web per tal de controlar la infraestructura Openstack instal·lada en els tutorials anteriors. L’Openstack Dashboard ofereix un entorn web simple amb el que es possible crear instàncies, volums, regles de seguretat i demés sobre un entorn Openstack. Es tracta d’una aplicació web desenvolupada amb python i que funciona mitjançant el connector wsgi d’Apache, tot i que també es pot executar de forma autònoma. En aquest tutorial farem que funcioni com un VirtualHost més d’Apache.
Procediment:
Instal·larem el client en una màquina ubuntu 11.10 autònoma, que es comunicarà amb el sistema openstack que estarà funcionant en altres màquines. Instal·lar-ho en la mateixa màquina on hem instal·lat la resta de components d’Openstack és perfectament vàlid, però alguns dels mòduls que instal·larem poden crear conflictes a l’hora d’arrencar els serveis a l’inici que, tot i que són fàcils d’arreglar, només complicarien aquest tutorial (veure nota al peu).
La versió que utilitzarem és la de la branca master del repositori git del projecte. El primer que necessitem es satisfer tot un seguit de requeriments. Això ho farem executant les següents comandes:
# apt-get install python-software-properties # add-apt-repository ppa:nova-core/trunk # apt-get update # apt-get install git libapache2-mod-wsgi python-django python-setuptools python-prettytable python-cloudfiles python-mox python-gflags python-django-nose python-dateutil glance-common
Amb els requeriments bàsics instal·lats clonem el projecte i els clients associats:
# git clone https://github.com/openstack/horizon # git clone https://github.com/openstack/python-keystoneclient # git clone https://github.com/openstack/python-quantumclient # git clone https://github.com/openstack/python-novaclient
Instal·lem els clients dels components d’Openstack:
# ls horizon python-keystoneclient python-novaclient python-quantumclient # cd python-keystoneclient # python setup.py install # cd ../python-novaclient # python setup.py install # cd ../horizon/horizon # python setup.py install # cd ../../python-quantumclient # python setup.py install # cd ..
Podem copiar l’aplicació web allà on vulguem, sempre i quan la referenciem correctament des de l’apache2. Tot i potser no ser la millor ubicació la posarem a /var/www:
# cp -aR horizon /var/www/ # cd /var/www # mkdir horizon/.blackhole # mkdir .novaclient # cd horizon/openstack-dashboard # cp local/local_settings.py.example local/local_settings.py # cd /var/www # chown -R www-data:www-data horizon .novaclient
A l’arxiu que es troba a local/local_settings.py de l’aplicació web trobarem la configuració. En aquest arxiu es defineix la base de dades, el host on s’està executant keystone i demés. A continuació es mostra el contingut bàsic de l’arxiu (s’ha de canviar IP_SERVIDOR_KEYSTONE per l’adreça de la màquina on s’executa aquest servei):
# cat /var/www/horizon/openstack-dashboard/local/local_settings.py import os DEBUG = True TEMPLATE_DEBUG = DEBUG PROD = False USE_SSL = False LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(LOCAL_PATH, 'dashboard_openstack.sqlite3'), 'TEST_NAME': os.path.join(LOCAL_PATH, 'test.sqlite3'), }, } CACHE_BACKEND = 'dummy://' SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' MAILER_EMAIL_BACKEND = EMAIL_BACKEND HORIZON_CONFIG = { 'dashboards': ('nova', 'syspanel', 'settings',), 'default_dashboard': 'nova', 'user_home': 'dashboard.views.user_home', } OPENSTACK_HOST = "IP_SERVIDOR_KEYSTONE" OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST OPENSTACK_KEYSTONE_ADMIN_URL = "http://%s:35357/v2.0" % OPENSTACK_HOST OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" API_RESULT_LIMIT = 1000 # How much ram on each compute host? COMPUTE_HOST_RAM_GB = 16
Inicialitzem la base de dades:
# cd /var/www/horizon/openstack-dashboard # python manage.py syncdb # chown -R www-data:www-data /var/www/horizon/openstack-dashboard/local/*
Amb el dashboard configurat passem a definir un VirtualHost per a Apache:
# cd /etc/apache2/sites-available # pico dashboard
El contingut de l’arxiu /etc/apache2/sites-available/dashboard és el següent:
<VirtualHost *:80> WSGIScriptAlias / /var/www/horizon/openstack-dashboard/dashboard/wsgi/django.wsgi WSGIDaemonProcess horizon user=www-data group=www-data processes=3 threads=10 SetEnv APACHE_RUN_USER www-data SetEnv APACHE_RUN_GROUP www-data WSGIProcessGroup horizon DocumentRoot /var/www/horizon/.blackhole/ Alias /media /var/www/horizon/openstack-dashboard/dashboard/static <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/horizon/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost>
Activem el VirtualHost com a principal:
# a2dissite default # a2ensite dashboard # service apache2 restart
En aquest punt ja tenim disponible el dashboard a http://IP_SERVIDOR/
Documentació:
Lamentablement la documentació del projecte no mostra com instal·lar aquesta aplicació web tal i com s’ha descrit en aquest tutorial ja que encara està en desenvolupament i es planteja una instal·lació per a desenvolupadors. Aquest tutorial s’ha basat força en el que el projecte devstack.org du a terme en el seu script.
NOTA sobre els clients i les incompatibilitats:
Quan s’instal·len els clients de keystone i nova en la mateixa màquina on funcionen els serveis es pot donar el cas que els scripts d’inici dels serveis utilitzin els clients en comptes dels binaris corresponents ja que es diuen igual (sí, és alucinant!).
Per arreglar això s’ha de modificar els scripts d’inici i canviar la ruta dels binaris pel seu corresponent:
# cat /etc/init/keystone.conf ... exec su -c "/usr/bin/keystone --log-dir=/var/log/keystone --log-file=api.log" keystone
Aquesta línia (l’última) és la que he modificat.