Introduction 
Openstack Horizon 
Jim
About 
I am Jim. 
A web developer. 
Interested in automation
Outline 
Packages 
Create a dashboard
What is Horizon? 
A dashboard for managing Openstack Services 
Powered by Django
Key Packages 
openstack_dashboard 
horizon 
openstack_auth 
openstack/horizon 
openstack/django_openstack_auth
openstack_auth 
A Django authentication backend 
Form a User object after an identity is verified by 
Keystone 
Define permission instantly according to the role of a 
user 
No database
horizon 
Define a singleton of Horizon 
Provide all base components that are used in dashboard 
table 
workflow 
form 
tab
openstack_dashboard 
The actual django project for Horizon 
dashboards and panels 
api
Dashaboard 
Dashaboard 
Dashaboard 
Register 
horizon 
class Dashboard 
class Panel 
Horizon 
App 
urls 
Discover urls 
from dashboards 
openstack_dashboard 
(django project) 
urls.py
horizon
horizon.base 
Core of horizon app 
Class of Dashboard and Panel 
manage urls for registered dashboards and panels
Flow of a View 
View Class - Handle request, collect data for component 
Component Class - Render 
View Class Component 
Class 
Request Data 
Response Render
horizon.tables 
The most commonly-used component in Horizon 
Every element in a table is a class
Components of a table 
Table 
Row 
Column 
Cell 
Actions
horizon.workflow 
It’s a form with multiple step 
There are four classes in a workflow: 
Workflow 
Modal 
Step 
Step 
Action 
Form 
WorkflowView
openstack_dashboard
openstack_dashboard.api 
Wrapper for openstack-xxxxclient
openstack_dashboard.dashboards
Default Dashboard 
Project 
Admin 
Identity (Move out from Admin)
How to Hack 
Ubuntu / MacOS 
A controller server (keystone, glance, nova)
Setup Environment
1.Clone the source code 
2.Create a virtual environment (Optional) 
3.Install pip requirements 
4.Copy and update local_settings.py
Update local_settings.py 
OPENSTACK_HOST = “controller"
Create a dashboard 
python manage.py startdash mydashboard --target 
openstack_dashboard/dashboards/mydashboard
Create a panel 
python manage.py startpanel mypanel -- 
dashboard=openstack_dashboard.dashboards.mydashbo 
ard --target=openstack_dashboard/dashboards/ 
mydashboard/mypanel
Add to enabled 
Add a config file in openstack_dashboard/enabled 
openstack_dashboard/enabled/mydashboard.py
Set the default panel 
Add default panel
Hack
Q & A

Introduction openstack horizon