├── openstack-dashboard ├── debian │ ├── copyright │ ├── compat │ ├── changelog │ ├── rules │ └── control ├── local │ └── __init__.py ├── dashboard │ ├── __init__.py │ ├── templates │ │ ├── _footer.html │ │ ├── _header.html │ │ ├── _login.html │ │ ├── _switch.html │ │ ├── unavailable.html │ │ ├── splash.html │ │ ├── login_required.html │ │ ├── _messages.html │ │ ├── switch_tenants.html │ │ ├── permission_denied.html │ │ ├── 404.html │ │ ├── 500.html │ │ ├── 403.html │ │ ├── _topbar.html │ │ └── base.html │ ├── locale │ │ ├── es │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── it │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── pt │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── en-gb │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── zh-cn │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ └── zh-tw │ │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── static │ │ └── dashboard │ │ │ ├── images │ │ │ ├── gears.png │ │ │ ├── logo.gif │ │ │ ├── logo.png │ │ │ ├── body_bg.gif │ │ │ ├── body_bg.png │ │ │ ├── btn_bg.png │ │ │ ├── login_bg.png │ │ │ ├── logo_new.png │ │ │ ├── misc_bg.png │ │ │ ├── nav_bg.png │ │ │ ├── refresh.png │ │ │ ├── search.png │ │ │ ├── spinner.gif │ │ │ ├── book_icon.png │ │ │ ├── chat_icon.png │ │ │ ├── content_bg.gif │ │ │ ├── content_bg.png │ │ │ ├── drop_arrow.png │ │ │ ├── foot_back.png │ │ │ ├── header_bg.png │ │ │ ├── large_logo.png │ │ │ ├── login_btn.png │ │ │ ├── modal_btn.png │ │ │ ├── nav_arrow.png │ │ │ ├── bread_crumb.gif │ │ │ ├── button │ │ │ │ ├── launch.png │ │ │ │ ├── btn_left.png │ │ │ │ └── btn_right.png │ │ │ ├── dashblock_bg.png │ │ │ ├── image_detail.png │ │ │ ├── nav_highlight.png │ │ │ ├── page_header.png │ │ │ ├── projects_bg.png │ │ │ ├── server_icon.png │ │ │ ├── status_sprite.png │ │ │ ├── steps_left_bg.png │ │ │ ├── sub-head-back.png │ │ │ ├── sub_head_back.png │ │ │ ├── content_shadow.png │ │ │ ├── home_head_back.png │ │ │ ├── steps_right_bg.png │ │ │ ├── table_header_bg.png │ │ │ ├── dashboard_nav_bg.png │ │ │ ├── logged_in_box_bg.gif │ │ │ ├── table_heading_bg.png │ │ │ └── title-blank-short-foot.png │ │ │ ├── css │ │ │ ├── Anivers_Regular-webfont.eot │ │ │ ├── Anivers_Regular-webfont.ttf │ │ │ ├── Anivers_Regular-webfont.woff │ │ │ ├── images │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ ├── ui-icons_cd0a0a_256x240.png │ │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ ├── ui-bg_glass_75_ffffff_1x400.png │ │ │ │ ├── ui-bg_inset-soft_95_fef1ec_1x100.png │ │ │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ ├── cupertino │ │ │ │ └── images │ │ │ │ │ ├── ui-icons_2694e8_256x240.png │ │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ │ ├── ui-icons_3d80b3_256x240.png │ │ │ │ │ ├── ui-icons_72a7cf_256x240.png │ │ │ │ │ ├── ui-icons_ffffff_256x240.png │ │ │ │ │ ├── ui-bg_flat_15_cd0a0a_40x100.png │ │ │ │ │ ├── ui-bg_glass_100_e4f1fb_1x400.png │ │ │ │ │ ├── ui-bg_glass_50_3baae3_1x400.png │ │ │ │ │ ├── ui-bg_glass_80_d7ebf9_1x400.png │ │ │ │ │ ├── ui-bg_highlight-hard_70_000000_1x100.png │ │ │ │ │ ├── ui-bg_highlight-soft_25_ffef8f_1x100.png │ │ │ │ │ ├── ui-bg_diagonals-thick_90_eeeeee_40x40.png │ │ │ │ │ ├── ui-bg_highlight-hard_100_f2f5f7_1x100.png │ │ │ │ │ └── ui-bg_highlight-soft_100_deedf7_1x100.png │ │ │ ├── ie7.css │ │ │ └── reset.css │ │ │ └── js │ │ │ ├── dashboard.js │ │ │ ├── old-application.js │ │ │ ├── form_examples.js │ │ │ ├── application.js │ │ │ └── jquery.example.min.js │ ├── wsgi │ │ └── django.wsgi │ ├── tests.py │ ├── manage.py │ ├── views.py │ ├── middleware.py │ └── urls.py ├── tools │ ├── with_venv.sh │ └── pip-requires ├── Makefile ├── README └── setup.py ├── django-openstack ├── django_openstack │ ├── __init__.py │ ├── auth │ │ ├── __init__.py │ │ └── urls.py │ ├── dash │ │ ├── __init__.py │ │ └── views │ │ │ └── __init__.py │ ├── middleware │ │ └── __init__.py │ ├── syspanel │ │ ├── __init__.py │ │ ├── views │ │ │ ├── __init__.py │ │ │ └── quotas.py │ │ └── forms.py │ ├── templatetags │ │ ├── __init__.py │ │ └── templatetags │ │ │ ├── __init__.py │ │ │ ├── truncate_filter.py │ │ │ ├── sidebar_modules.py │ │ │ ├── branding.py │ │ │ └── parse_date.py │ ├── tests │ │ ├── view_tests │ │ │ ├── __init__.py │ │ │ ├── dash │ │ │ │ └── __init__.py │ │ │ └── syspanel │ │ │ │ └── __init__.py │ │ ├── templates │ │ │ └── base-sidebar.html │ │ ├── broken │ │ │ ├── README │ │ │ └── region_tests.py │ │ ├── __init__.py │ │ ├── views.py │ │ ├── dependency_tests.py │ │ └── testurls.py │ ├── locale │ │ ├── es │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── fr │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── ja │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── pl │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── pt │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── en-gb │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ ├── zh-cn │ │ │ └── LC_MESSAGES │ │ │ │ └── django.mo │ │ └── zh-tw │ │ │ └── LC_MESSAGES │ │ │ └── django.mo │ ├── templates │ │ └── django_openstack │ │ │ ├── dash │ │ │ ├── images │ │ │ │ ├── _launch.html │ │ │ │ ├── _launch_form.html │ │ │ │ ├── index.html │ │ │ │ ├── _list.html │ │ │ │ └── launch.html │ │ │ ├── floating_ips │ │ │ │ ├── _allocate.html │ │ │ │ ├── _release.html │ │ │ │ ├── _disassociate.html │ │ │ │ ├── _associate.html │ │ │ │ ├── associate.html │ │ │ │ ├── index.html │ │ │ │ └── _list.html │ │ │ ├── networks │ │ │ │ ├── _delete.html │ │ │ │ ├── _form.html │ │ │ │ ├── _delete_port.html │ │ │ │ ├── _detach_port.html │ │ │ │ ├── _rename_form.html │ │ │ │ ├── _toggle_port.html │ │ │ │ ├── _rename.html │ │ │ │ ├── create.html │ │ │ │ ├── _list.html │ │ │ │ ├── index.html │ │ │ │ ├── rename.html │ │ │ │ ├── detail.html │ │ │ │ └── _detail.html │ │ │ ├── objects │ │ │ │ ├── _copy.html │ │ │ │ ├── _filter.html │ │ │ │ ├── _form.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _list.html │ │ │ │ ├── copy.html │ │ │ │ ├── upload.html │ │ │ │ └── index.html │ │ │ ├── instances │ │ │ │ ├── _form.html │ │ │ │ ├── usage.csv │ │ │ │ ├── update.html │ │ │ │ └── index.html │ │ │ ├── keypairs │ │ │ │ ├── _form.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _list.html │ │ │ │ ├── index.html │ │ │ │ └── create.html │ │ │ ├── containers │ │ │ │ ├── _form.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _list.html │ │ │ │ ├── index.html │ │ │ │ └── create.html │ │ │ ├── security_groups │ │ │ │ ├── _delete_rule.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _form.html │ │ │ │ ├── create.html │ │ │ │ ├── _list.html │ │ │ │ └── index.html │ │ │ ├── snapshots │ │ │ │ ├── _form.html │ │ │ │ ├── index.html │ │ │ │ └── create.html │ │ │ ├── ports │ │ │ │ ├── _create.html │ │ │ │ ├── _attach.html │ │ │ │ ├── create.html │ │ │ │ └── attach.html │ │ │ ├── base.html │ │ │ └── _sidebar.html │ │ │ ├── syspanel │ │ │ ├── flavors │ │ │ │ ├── _create.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _form.html │ │ │ │ ├── _list.html │ │ │ │ ├── index.html │ │ │ │ └── create.html │ │ │ ├── users │ │ │ │ ├── _create_form.html │ │ │ │ ├── _update_form.html │ │ │ │ ├── _form.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _enable_disable.html │ │ │ │ ├── create.html │ │ │ │ ├── update.html │ │ │ │ ├── _toggle_enabled.html │ │ │ │ └── index.html │ │ │ ├── tenants │ │ │ │ ├── _create_form.html │ │ │ │ ├── _update_form.html │ │ │ │ ├── _update_quotas_form.html │ │ │ │ ├── _form.html │ │ │ │ ├── _quotas_form.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _add_user.html │ │ │ │ ├── _remove_user.html │ │ │ │ ├── update.html │ │ │ │ ├── index.html │ │ │ │ ├── create.html │ │ │ │ ├── quotas.html │ │ │ │ ├── _list.html │ │ │ │ └── users.html │ │ │ ├── images │ │ │ │ ├── _toggle.html │ │ │ │ ├── _delete.html │ │ │ │ ├── _form.html │ │ │ │ ├── index.html │ │ │ │ ├── update.html │ │ │ │ └── _list.html │ │ │ ├── base.html │ │ │ ├── services │ │ │ │ ├── index.html │ │ │ │ ├── _toggle.html │ │ │ │ └── _list.html │ │ │ ├── instances │ │ │ │ ├── usage.csv │ │ │ │ ├── tenant_usage.csv │ │ │ │ ├── _list.html │ │ │ │ └── index.html │ │ │ ├── quotas │ │ │ │ └── index.html │ │ │ └── _sidebar.html │ │ │ ├── common │ │ │ ├── _sidebar_module.html │ │ │ ├── instances │ │ │ │ ├── _reboot.html │ │ │ │ └── _terminate.html │ │ │ └── _page_header.html │ │ │ └── auth │ │ │ ├── _login.html │ │ │ └── _switch.html │ ├── models.py │ ├── urls.py │ ├── decorators.py │ ├── utils.py │ ├── context_processors.py │ └── signals.py ├── Makefile ├── README └── setup.py ├── .bzrignore ├── .gitignore ├── .pylintrc └── README /openstack-dashboard/debian/copyright: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /openstack-dashboard/local/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /openstack-dashboard/debian/compat: -------------------------------------------------------------------------------- 1 | 7 2 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/auth/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/dash/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/dash/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/middleware/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/syspanel/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/syspanel/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/view_tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_footer.html: -------------------------------------------------------------------------------- 1 | FOOTER 2 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_header.html: -------------------------------------------------------------------------------- 1 | HEADER 2 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/templates/base-sidebar.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/view_tests/dash/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/view_tests/syspanel/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/broken/README: -------------------------------------------------------------------------------- 1 | Intentionally not a python module so that test runner won't find 2 | these broken tests 3 | -------------------------------------------------------------------------------- /openstack-dashboard/tools/with_venv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | TOOLS=`dirname $0` 3 | VENV=$TOOLS/../.dashboard-venv 4 | source $VENV/bin/activate && $@ 5 | 6 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/ja/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/ja/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/gears.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/gears.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/logo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/logo.gif -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/logo.png -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/ja/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/ja/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/en-gb/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/en-gb/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/zh-cn/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/zh-cn/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/locale/zh-tw/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/locale/zh-tw/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/body_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/body_bg.gif -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/body_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/body_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/btn_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/btn_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/login_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/logo_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/logo_new.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/misc_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/misc_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/nav_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/nav_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/refresh.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/search.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/spinner.gif -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/en-gb/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/en-gb/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/zh-cn/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/zh-cn/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /django-openstack/django_openstack/locale/zh-tw/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/django-openstack/django_openstack/locale/zh-tw/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/book_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/book_icon.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/chat_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/chat_icon.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/content_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/content_bg.gif -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/content_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/content_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/drop_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/drop_arrow.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/foot_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/foot_back.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/header_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/header_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/large_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/large_logo.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/login_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/login_btn.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/modal_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/modal_btn.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/nav_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/nav_arrow.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/bread_crumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/bread_crumb.gif -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/button/launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/button/launch.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/dashblock_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/dashblock_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/image_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/image_detail.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/nav_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/nav_highlight.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/page_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/page_header.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/projects_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/projects_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/server_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/server_icon.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/status_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/status_sprite.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/steps_left_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/steps_left_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/sub-head-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/sub-head-back.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/sub_head_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/sub_head_back.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/button/btn_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/button/btn_left.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/content_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/content_shadow.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/home_head_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/home_head_back.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/steps_right_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/steps_right_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/table_header_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/table_header_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/button/btn_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/button/btn_right.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/dashboard_nav_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/dashboard_nav_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/logged_in_box_bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/logged_in_box_bg.gif -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/table_heading_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/table_heading_bg.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.eot -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.ttf -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/Anivers_Regular-webfont.woff -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/images/title-blank-short-foot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/images/title-blank-short-foot.png -------------------------------------------------------------------------------- /openstack-dashboard/debian/changelog: -------------------------------------------------------------------------------- 1 | openstack-dashboard (0.2.0) UNRELEASED; urgency=low 2 | 3 | * Initial release. (Closes: #XXXXXX) 4 | 5 | -- anthony Mon, 20 Jun 2011 20:29:57 +0000 6 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_glass_75_ffffff_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_2694e8_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_2694e8_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_3d80b3_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_3d80b3_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_72a7cf_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_72a7cf_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/js/dashboard.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | // Display notification message close boxes and wire up click handlers. 3 | $('.message .close').show().click(function() { $(this).closest('.message').fadeOut(); }); 4 | }); -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/images/_launch.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/images/_launch_form.html' %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/_create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/flavors/_form.html' %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_create_form.html: -------------------------------------------------------------------------------- 1 | {% extends "django_openstack/syspanel/users/_form.html" %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_update_form.html: -------------------------------------------------------------------------------- 1 | {% extends "django_openstack/syspanel/users/_form.html" %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zen/openstack-dashboard/master/openstack-dashboard/dashboard/static/dashboard/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_create_form.html: -------------------------------------------------------------------------------- 1 | {% extends "django_openstack/syspanel/tenants/_form.html" %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_update_form.html: -------------------------------------------------------------------------------- 1 | {% extends "django_openstack/syspanel/tenants/_form.html" %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_update_quotas_form.html: -------------------------------------------------------------------------------- 1 | {% extends "django_openstack/syspanel/tenants/_quotas_form.html" %} 2 | 3 | {% block submit %} 4 | 5 | {% endblock %} 6 | 7 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_login.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/auth/_login.html' %} 2 | {% block submit %} 3 | 4 |
5 | 6 |
7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_switch.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/auth/_switch.html' %} 2 | {% block submit %} 3 | 4 |
5 | 6 |
7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /openstack-dashboard/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # -*- makefile -*- 3 | 4 | DEB_PYTHON_SYSTEM := pysupport 5 | 6 | include /usr/share/cdbs/1/rules/debhelper.mk 7 | include /usr/share/cdbs/1/class/python-distutils.mk 8 | 9 | clean:: 10 | rm -rf build build-stamp configure-stamp build/ MANIFEST 11 | dh_clean 12 | 13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/_allocate.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 |
8 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/wsgi/django.wsgi: -------------------------------------------------------------------------------- 1 | import logging 2 | import os 3 | import sys 4 | import django.core.handlers.wsgi 5 | from django.conf import settings 6 | 7 | os.environ['DJANGO_SETTINGS_MODULE'] = 'dashboard.settings' 8 | sys.stdout = sys.stderr 9 | 10 | DEBUG = False 11 | 12 | application = django.core.handlers.wsgi.WSGIHandler() 13 | 14 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/common/_sidebar_module.html: -------------------------------------------------------------------------------- 1 | {% for module in modules %} 2 |

{{module.title}}

3 | 4 | 9 | {% endfor %} 10 | 11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | {% block submit %} 10 | {% endblock %} 11 |
12 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/_toggle.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | {% block submit %} 10 | {% endblock %} 11 |
12 | 13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/_copy.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_quotas_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | {% block submit %} 10 | {% endblock %} 11 |
12 | 13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/instances/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/keypairs/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/containers/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/common/instances/_reboot.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/_release.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/keypairs/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/common/instances/_terminate.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/_filter.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{hidden}}{% endfor %} 4 | {% for field in form.visible_fields %}{{field}}{% endfor %} 5 | 6 | 7 |
8 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 |
11 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/_delete_rule.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | 10 | -------------------------------------------------------------------------------- /.bzrignore: -------------------------------------------------------------------------------- 1 | django-openstack/.installed.cfg 2 | django-openstack/bin 3 | django-openstack/develop-eggs/ 4 | django-openstack/downloads/ 5 | django-openstack/eggs/ 6 | django-openstack/parts/ 7 | django-openstack/src/django_nova.egg-info 8 | django-openstack/src/django_openstack.egg-info 9 | django-nova-syspanel/src/django_nova_syspanel.egg-info 10 | openstack-dashboard/.dashboard-venv 11 | openstack-dashboard/local/dashboard_openstack.sqlite3 12 | openstack-dashboard/local/local_settings.py 13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/containers/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/_disassociate.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/auth/_login.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 |
4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | {% for field in form.visible_fields %} 8 | {{field.label_tag}} 9 | {{field.errors}} 10 | {{field}} 11 | {% endfor %} 12 | {% block submit %} 13 | 14 | {% endblock %} 15 |
16 |
17 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/auth/_switch.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 |
4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | {% for field in form.visible_fields %} 8 | {{field.label_tag}} 9 | {{field.errors}} 10 | {{field}} 11 | {% endfor %} 12 | {% block submit %} 13 | 14 | {% endblock %} 15 |
16 |
17 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_add_user.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/unavailable.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %} - {% trans "Service Unavailable"%}{% endblock %} 5 | {% block pageclass %}unavailable{% endblock %} 6 | 7 | {% block content %} 8 | 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/_delete.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_delete_port.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/snapshots/_form.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% csrf_token %} 4 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 5 | {% for field in form.visible_fields %} 6 | {{ field.label_tag }} 7 | {{ field.errors }} 8 | {{ field }} 9 | {% endfor %} 10 | 11 |
12 |
13 | 14 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/ports/_create.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 | 11 |
12 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_detach_port.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/_form.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% csrf_token %} 4 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 5 | {% for field in form.visible_fields %} 6 | {{ field.label_tag }} 7 | {{ field.errors }} 8 | {{ field }} 9 | {% endfor %} 10 | 11 |
12 |
13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_remove_user.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_rename_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{ hidden }}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 | 11 |
12 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 |
4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | {% for field in form.visible_fields %} 8 | {{field.label_tag}} 9 | {{field.errors}} 10 | {{field}} 11 | {% endfor %} 12 | {% block submit %} 13 | 14 | {% endblock %} 15 |
16 |
17 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/images/_launch_form.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 |
4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | {% for field in form.visible_fields %} 8 | {{field.label_tag}} 9 | {{field.errors}} 10 | {{field}} 11 | {% endfor %} 12 | {% block submit %} 13 | 14 | {% endblock %} 15 |
16 |
17 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/_associate.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 |
4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | {% for field in form.visible_fields %} 8 | {{field.label_tag}} 9 | {{field.errors}} 10 | {{field}} 11 | {% endfor %} 12 | {% block submit %} 13 | 14 | {% endblock %} 15 |
16 |
17 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/base.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block topbar %} 4 | {% with current_topbar="dash" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | {% block sidebar %} 9 | {% include 'django_openstack/dash/_sidebar.html' %} 10 | {% endblock %} 11 | 12 | {% block main %} 13 | {% block page_header %} 14 | {% endblock %} 15 | 16 |
17 | {% include "_messages.html" %} 18 | {% block dash_main %}{% endblock %} 19 |
20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/base.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {% block topbar %} 4 | {% with current_topbar="syspanel" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | {% block sidebar %} 9 | {% include 'django_openstack/syspanel/_sidebar.html' %} 10 | {% endblock %} 11 | 12 | {% block main %} 13 | {% block page_header %} 14 | {% endblock %} 15 | 16 |
17 | {% include "_messages.html" %} 18 | {% block syspanel_main %}{% endblock %} 19 |
20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/ports/_attach.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %}{{hidden}}{% endfor %} 4 | {% for field in form.visible_fields %} 5 | {{ field.label_tag }} 6 | {{ field.errors }} 7 | {{ field }} 8 | {% endfor %} 9 | 10 | 11 | 12 |
13 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/keypairs/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {% for keypair in keypairs %} 8 | 9 | 10 | 11 | 16 | 17 | {% endfor %} 18 |
NameFingerprintActions
{{ keypair.name }}{{ keypair.fingerprint }} 12 |
    13 |
  • {% include "django_openstack/dash/keypairs/_delete.html" with form=delete_form %}
  • 14 |
15 |
19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.swp 3 | .coverage 4 | coverage.xml 5 | pep8.txt 6 | pylint.txt 7 | reports 8 | django-openstack/.installed.cfg 9 | django-openstack/bin 10 | django-openstack/develop-eggs/ 11 | django-openstack/downloads/ 12 | django-openstack/eggs/ 13 | django-openstack/htmlcov 14 | django-openstack/launchpad 15 | django-openstack/parts/ 16 | django-openstack/django_nova.egg-info 17 | django-openstack/django_openstack.egg-info 18 | django-nova-syspanel/src/django_nova_syspanel.egg-info 19 | openstack-dashboard/.dashboard-venv 20 | openstack-dashboard/local/dashboard_openstack.sqlite3 21 | openstack-dashboard/local/local_settings.py 22 | -------------------------------------------------------------------------------- /openstack-dashboard/tools/pip-requires: -------------------------------------------------------------------------------- 1 | nose==1.0.0 2 | Django==1.3 3 | django-nose==0.1.2 4 | django-mailer 5 | django-registration==0.7 6 | kombu 7 | python-cloudfiles 8 | python-dateutil 9 | routes 10 | webob 11 | sqlalchemy 12 | paste 13 | PasteDeploy 14 | sqlalchemy-migrate 15 | eventlet 16 | xattr 17 | pep8 18 | pylint 19 | coverage 20 | glance 21 | 22 | -e git+https://github.com/openstack/quantum.git#egg=quantum 23 | -e git+https://github.com/jacobian/openstack.compute.git#egg=openstack 24 | -e git+https://github.com/cloudbuilders/openstackx.git#egg=openstackx 25 | -e git://github.com/rackspace/python-novaclient.git#egg=python-novaclient 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_enable_disable.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 |
10 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/ie7.css: -------------------------------------------------------------------------------- 1 | h1, h1 a, h1 span { position: relative !important; } 2 | #content_wrap {margin-top: 15px;} 3 | .image_detail, .instance_detail { position: relative; } 4 | td#actions { padding-bottom: 10px !important; } 5 | td#actions input { width: 80px; } 6 | #edit_image_link:hover { color: #1d77ff; } 7 | input.private { margin-right: -30px !important; margin-left: -17px !important;} 8 | #user_info li { list-style: disc !important; } 9 | input.create, input.attach, input#launch_image { margin-right: 4px !important; } 10 | 11 | #edit_image_link { 12 | margin-left: -180px !important; 13 | margin-top: 20px !important; 14 | } 15 | 16 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="images" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_images as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Images" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | {% include "django_openstack/syspanel/images/_list.html" %} 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/services/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="services" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_services as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Services" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | {% include "django_openstack/syspanel/services/_list.html" %} 17 | {% endblock %} 18 | 19 | -------------------------------------------------------------------------------- /openstack-dashboard/debian/control: -------------------------------------------------------------------------------- 1 | Source: openstack-dashboard 2 | Section: python 3 | Priority: optional 4 | Maintainer: Anthony Young (sleepsonthefloor) 5 | Build-Depends: debhelper (>=7.0.50~), python-support (>= 0.6), cdbs (>= 0.4.49), python-all-dev 6 | XS-Python-Version: >=2.5 7 | Standards-Version: 3.9.1 8 | 9 | Package: openstack-dashboard 10 | Architecture: all 11 | Homepage: https://github.com/4P/openstack-dashboard 12 | XB-Python-Version: ${python:Versions} 13 | Depends: ${misc:Depends}, ${python:Depends} 14 | Description: Dashboard for Openstack 15 | Here you should put a long description your package. This line *MUST* (this is 16 | for default printing) begin with a single space. 17 | Look for more information about this. 18 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/splash.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Login 6 | 7 | 8 | 9 |
10 |
11 | {% include "_messages.html" %} 12 | {% include '_login.html' %} 13 | 17 |
18 |
19 |
20 | 21 | 22 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/images/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="images" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_images request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Images" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if images %} 17 | {% include 'django_openstack/dash/images/_list.html' %} 18 | 19 | {% endif %} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/containers/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% for container in containers %} 7 | 8 | 9 | 16 | 17 | {% endfor %} 18 |
NameActions
{{ container.name }} 10 |
    11 |
  • {% include "django_openstack/dash/containers/_delete.html" with form=delete_form %}
  • 12 |
  • List Objects
  • 13 |
  • Upload Object
  • 14 |
15 |
19 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/common/_page_header.html: -------------------------------------------------------------------------------- 1 | {% block page_header %} 2 | 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/login_required.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.html' %} 2 | 3 | {# pleasant landing page if not logged in #} 4 | {# redirected to overview if logged in #} 5 | 6 | 7 | {% block sidebar %} 8 | 9 | {% endblock %} 10 | 11 | {% block main %} 12 | 16 |
17 | 18 | {% include "_messages.html" %} 19 | 20 |
21 |
22 |

Login

23 |
24 | {% include '_login.html' %} 25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {% for object in objects %} 7 | 8 | 9 | 16 | 17 | {% endfor %} 18 |
NameActions
{{ object.name }} 10 |
    11 |
  • Copy
  • 12 |
  • {% include "django_openstack/dash/objects/_delete.html" with form=delete_form %}
  • 13 |
  • Download 14 |
15 |
19 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_messages.html: -------------------------------------------------------------------------------- 1 | {% for message in messages %} 2 | {% if message.tags == "info" %} 3 |
4 |

Info

5 |

{{ message }}

6 |
7 | {% endif %} 8 | {% if message.tags == "warning" %} 9 |
10 |

Warning

11 |

{{ message }}

12 |
13 | {% endif %} 14 | {% if message.tags == "success" %} 15 |
16 |

Success

17 |

{{ message }}

18 |
19 | {% endif %} 20 | {% if message.tags == "error" %} 21 |
22 |

Error

23 |

{{ message }}

24 |
25 | {% endif %} 26 | {% endfor %} 27 | 28 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for flavor in flavors %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | {% endfor %} 24 |
IdNameVCPUsMemoryDiskActions
{{flavor.id}}{{flavor.name}}{{flavor.vcpus}}{{flavor.ram}}MB{{flavor.disk}}GB 18 |
    19 |
  • {% include "django_openstack/syspanel/flavors/_delete.html" with form=delete_form %}
  • 20 |
21 |
25 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_toggle_port.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | {% if port.state == 'DOWN' %} 9 | 10 | 11 | {% else %} 12 | 13 | 14 | {% endif %} 15 |
16 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/switch_tenants.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Login 6 | 7 | 8 | 9 |
10 |
11 |

Log-in to tenant: {{to_tenant}}

12 |
13 | {% include "_messages.html" %} 14 | {% include '_login.html' %} 15 | 19 |
20 |
21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/update.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="images" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Update Image" %} 11 | {% endblock page_header %} 12 | 13 | {% block syspanel_main %} 14 |
15 |
16 | {% include 'django_openstack/syspanel/images/_form.html' %} 17 |
18 | 19 |
20 |

Description:

21 |

From here you can modify different properties of an image.

22 |
23 |
 
24 |
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/update.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="tenants" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Update Tenant" %} 11 | {% endblock page_header %} 12 | 13 | {% block syspanel_main %} 14 |
15 |
16 | {% include 'django_openstack/syspanel/tenants/_update_form.html' %} 17 |
18 | 19 |
20 |

Description:

21 |

From here you can edit a tenant.

22 |
23 |
 
24 |
25 | {% endblock %} 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="security_groups" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Create Security Group" %} 11 | {% endblock page_header %} 12 | 13 | {% block dash_main %} 14 |
15 |
16 | {% include 'django_openstack/dash/security_groups/_form.html' %} 17 |
18 | 19 |
20 |

Description:

21 |

From here you can create a new security group

22 |
23 |
 
24 |
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="flavors" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_flavors as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Flavors" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | {% include "django_openstack/syspanel/flavors/_list.html" %} 17 | Create New Flavor 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/images/_list.html: -------------------------------------------------------------------------------- 1 | {% load parse_date %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for image in images %} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 22 | 23 | {% endfor %} 24 |
IDNameCreatedUpdatedStatus
{{image.id}}{{image.name}}{{image.created_at|parse_date}}{{image.updated_at|parse_date}}{{image.status|capfirst}} 18 | 21 |
25 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/containers/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="containers" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_images request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Containers" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% include 'django_openstack/dash/containers/_list.html' %} 17 | Create New Container >> 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/instances/usage.csv: -------------------------------------------------------------------------------- 1 | Usage Report For Period:,{{datetime_start|date:"b. d Y H:i"}},/,{{datetime_end|date:"b. d Y H:i"}} 2 | Active Instances:,{{global_summary.total_active_instances|default:'-'}} 3 | This month's VCPU-Hours:,{{global_summary.total_cpu_usage|floatformat|default:'-'}} 4 | This month's GB-Hours:,{{global_summary.total_disk_usage|floatformat|default:'-'}} 5 | 6 | Name,UserId,VCPUs,RamMB,DiskGB,Flavor,Usage(Hours),Uptime(Seconds),State 7 | {% for usage in usage_list %}{% for instance in usage.instances %}{{instance.name|addslashes}},{{instance.user_id|addslashes}},{{instance.vcpus|addslashes}},{{instance.ram_size|addslashes}},{{instance.disk_size|addslashes}},{{instance.flavor|addslashes}},{{instance.hours}},{{instance.uptime}},{{instance.state|capfirst|addslashes}}{% endfor %} 8 | {% endfor %} 9 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_rename.html: -------------------------------------------------------------------------------- 1 |
2 | {% csrf_token %} 3 | {% for hidden in form.hidden_fields %} 4 | {{hidden}} 5 | {% endfor %} 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 |

14 | 15 |
16 | 17 |
18 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="tenants" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_tenants as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Tenants" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | {% include "django_openstack/syspanel/tenants/_list.html" %} 17 | Create New Tenant 18 | {% endblock %} 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="tenants" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Create Tenant" %} 11 | {% endblock page_header %} 12 | 13 | {% block syspanel_main %} 14 |
15 |
16 | {% include 'django_openstack/syspanel/tenants/_create_form.html' %} 17 |
18 | 19 |
20 |

Description:

21 |

From here you can create a new tenant (aka project) to organize users.

22 |
23 |
 
24 |
25 | {% endblock %} 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/instances/usage.csv: -------------------------------------------------------------------------------- 1 | Usage Report For Period:,{{datetime_start|date:"b. d Y H:i"}},/,{{datetime_end|date:"b. d Y H:i"}} 2 | Tenant ID:,{{usage.tenant_id}} 3 | Total Active VCPUs:,{{usage.total_active_vcpus}} 4 | CPU-HRs Used:,{{usage.total_cpu_usage}} 5 | Total Active Ram (MB):,{{usage.total_active_ram_size}} 6 | Total Disk Size:,{{usage.total_active_disk_size}} 7 | Total Disk Usage:,{{usage.total_disk_usage}} 8 | 9 | ID,Name,UserId,VCPUs,RamMB,DiskGB,Flavor,Usage(Hours),Uptime(Seconds),State 10 | {% for instance in usage.instances %}{{instance.id}},{{instance.name|addslashes}},{{instance.user_id|addslashes}},{{instance.vcpus|addslashes}},{{instance.ram_size|addslashes}},{{instance.disk_size|addslashes}},{{instance.flavor|addslashes}},{{instance.hours}},{{instance.uptime}},{{instance.state|capfirst|addslashes}} 11 | {% endfor %} 12 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/permission_denied.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %} - {% trans "Permission Denied"%}{% endblock %} 5 | 6 | {% block content %} 7 |
8 | 12 |
13 | {% endblock %} 14 | 15 | {% block sidebar %} 16 | 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/instances/tenant_usage.csv: -------------------------------------------------------------------------------- 1 | Usage Report For Period:,{{datetime_start|date:"b. d Y H:i"}},/,{{datetime_end|date:"b. d Y H:i"}} 2 | Tenant ID:,{{usage.tenant_id}} 3 | Total Active VCPUs:,{{usage.total_active_vcpus}} 4 | CPU-HRs Used:,{{usage.total_cpu_usage}} 5 | Total Active Ram (MB):,{{usage.total_active_ram_size}} 6 | Total Disk Size:,{{usage.total_active_disk_size}} 7 | Total Disk Usage:,{{usage.total_disk_usage}} 8 | 9 | ID,Name,UserId,VCPUs,RamMB,DiskGB,Flavor,Usage(Hours),Uptime(Seconds),State 10 | {% for instance in usage.instances %}{{instance.id}},{{instance.name|addslashes}},{{instance.user_id|addslashes}},{{instance.vcpus|addslashes}},{{instance.ram_size|addslashes}},{{instance.disk_size|addslashes}},{{instance.flavor|addslashes}},{{instance.hours}},{{instance.uptime}},{{instance.state|capfirst|addslashes}} 11 | {% endfor %} 12 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/quotas.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="tenants" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Update Tenant Quotas" %} 11 | {% endblock page_header %} 12 | 13 | {% block syspanel_main %} 14 |
15 |
16 | {% include 'django_openstack/syspanel/tenants/_update_quotas_form.html' with form=form %} 17 |
18 | 19 |
20 |

Description:

21 |

From here you can edit quotas (max limits) for the tenant {{tenant_id}}.

22 |
23 |
 
24 |
25 | {% endblock %} 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %} - {% trans "Page Not Found" %}{% endblock %} 5 | 6 | {% block content %} 7 |
8 | 12 |
13 | {% endblock %} 14 | 15 | {% block sidebar %} 16 | 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/500.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %} - Internal Server Error{% endblock %} 5 | 6 | {% block content %} 7 |
8 | 12 |
13 | {% endblock %} 14 | 15 | {% block sidebar %} 16 | 27 | {% endblock %} 28 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% for security_group in security_groups %} 9 | 10 | 11 | 12 | 13 | 21 | 22 | {% endfor %} 23 |
IdNameDescriptionActions
{{ security_group.id }}{{ security_group.name }}{{ security_group.description }} 14 |
    15 |
  • Edit Rules
  • 16 | {% if security_group.name != 'default' %} 17 |
  • {% include "django_openstack/dash/security_groups/_delete.html" with form=delete_form %}
  • 18 | {% endif %} 19 |
20 |
24 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="users" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Create User" %} 12 | {% endblock page_header %} 13 | 14 | {% block syspanel_main %} 15 |
16 |
17 | {% include 'django_openstack/syspanel/users/_create_form.html' %} 18 |
19 | 20 |
21 |

Description:

22 |

From here you can create a new user and assign them to a tenant (aka project).

23 |
24 |
 
25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/associate.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="floatingips" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Associate Floating IP" %} 12 | {% endblock page_header %} 13 | 14 | {% block dash_main %} 15 |
16 |
17 | {% include 'django_openstack/dash/floating_ips/_associate.html' with form=associate_form %} 18 |
19 | 20 |
21 |

Description:

22 |

Associate a floating ip with an instance.

23 |
24 |
 
25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/quotas/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="quotas" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_quotas as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Default Quotas" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | 17 | 18 | 19 | 20 | 21 | {% for name,value in quotas.items %} 22 | 23 | 24 | 25 | 26 | {% endfor %} 27 |
Quota NameLimit
{{name}}{{value}}
28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/update.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="users" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Update User" %} 12 | {% endblock page_header %} 13 | 14 | {% block syspanel_main %} 15 |
16 |
17 | {% include 'django_openstack/syspanel/users/_update_form.html' %} 18 |
19 | 20 |
21 |

Description:

22 |

From here you can edit users by changing their usernames, emails, passwords, and tenants.

23 |
24 |
 
25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/403.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load i18n %} 3 | 4 | {% block title %} - Forbidden{% endblock %} 5 | 6 | {% block content %} 7 |
8 | 13 |
14 | {% endblock %} 15 | 16 | {% block sidebar %} 17 | 28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/__init__.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from testsettings import * 22 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/_toggle_enabled.html: -------------------------------------------------------------------------------- 1 | {% if user.enabled %} 2 |
3 | {% csrf_token %} 4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | 8 | 9 |
10 | {% else %} 11 |
12 | {% csrf_token %} 13 | {% for hidden in form.hidden_fields %} 14 | {{hidden}} 15 | {% endfor %} 16 | 17 | 18 |
19 | {% endif %} 20 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% for tenant in tenants %} 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 | {% endfor %} 25 |
IdNameDescriptionEnabledOptions
{{tenant.id}}{{tenant.name}}{{tenant.description}}{{tenant.enabled}} 16 |
    17 |
  • {% include "django_openstack/syspanel/tenants/_delete.html" with form=tenant_delete_form %}
  • 18 |
  • Edit
  • 19 |
  • View Members
  • 20 |
  • Modify Quotas
  • 21 |
22 |
26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/models.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Stub file to work around django bug: https://code.djangoproject.com/ticket/7198 23 | """ 24 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Create Network" %} 12 | {% endblock page_header %} 13 | 14 | {% block dash_main %} 15 |
16 |
17 | {% include 'django_openstack/dash/networks/_form.html' with form=network_form %} 18 |

<< Return to networks list

19 |
20 | 21 |
22 |

Description:

23 |

Networks provide layer 2 connectivity to your instances.

24 |
25 |
 
26 |
27 | {% endblock %} 28 | 29 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="floatingips" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_floating_ips request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Floating IPs" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if floating_ips %} 17 | {% include 'django_openstack/dash/floating_ips/_list.html' %} 18 | {% else %} 19 |
20 |

Info

21 |

There are currently no floating ips assigned to your tenant.

22 |
23 | {% endif %} 24 | {% include "django_openstack/dash/floating_ips/_allocate.html" with form=allocate_form %} 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/snapshots/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="snapshots" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_snapshots request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Snapshots" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if images %} 17 | {% include 'django_openstack/dash/images/_list.html' %} 18 | {% else %} 19 |
20 |

Info

21 |

There are currently no snapshots. You can create snapshots from running instances. View Running Instances >>

22 |
23 | {% endif %} 24 | {% endblock %} 25 | 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/ports/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Create Network" %} 12 | {% endblock page_header %} 13 | 14 | {% block dash_main %} 15 |
16 |
17 | {% include 'django_openstack/dash/ports/_create.html' with form=create_form %} 18 |

<< Return to network detail

19 |
20 | 21 |
22 |

Description:

23 |

You can plug virtual interfaces from your instances to ports created in the network

24 |
25 |
 
26 |
27 | {% endblock %} 28 | 29 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% for network in networks %} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 24 | 25 | {% endfor %} 26 | 27 |
IDNamePortsAvailableUsedAction
{{network.id}}{{network.name}}{{network.total}}{{network.available}}{{network.used}} 19 |
    20 |
  • {% include "django_openstack/dash/networks/_delete.html" with form=delete_form %}
  • 21 |
  • Rename
  • 22 |
23 |
28 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/services/_toggle.html: -------------------------------------------------------------------------------- 1 | {% if service.disabled %} 2 |
3 | {% csrf_token %} 4 | {% for hidden in form.hidden_fields %} 5 | {{hidden}} 6 | {% endfor %} 7 | 8 | 9 | 10 |
11 | {% else %} 12 |
13 | {% csrf_token %} 14 | {% for hidden in form.hidden_fields %} 15 | {{hidden}} 16 | {% endfor %} 17 | 18 | 19 | 20 |
21 | {% endif %} 22 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/syspanel/forms.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django import forms 22 | 23 | 24 | class DisableProject(forms.Form): 25 | project_name = forms.CharField() 26 | 27 | 28 | class DisableIpAddress(forms.Form): 29 | cidr = forms.CharField() 30 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/keypairs/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="keypairs" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_keypairs request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Keypairs" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if keypairs %} 17 | {% include 'django_openstack/dash/keypairs/_list.html' %} 18 | Create New Keypair 19 | {% else %} 20 |
21 |

Info

22 |

There are currently no keypairs. Create A Keypair >>

23 |
24 | {% endif %} 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_networks request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Networks" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if networks %} 17 | {% include 'django_openstack/dash/networks/_list.html' %} 18 | Create New Network 19 | {% else %} 20 |
21 |

Info

22 |

There are currently no networks. Create A Network >>

23 |
24 | {% endif %} 25 |
26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/copy.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="containers" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Copy Object" %} 11 | {% endblock page_header %} 12 | 13 | {% block dash_main %} 14 |

Container: {{container_name}}

15 | 16 |
17 |
18 |

Copy Object: '{{object_name}}'

19 | {% include 'django_openstack/dash/objects/_copy.html' with form=copy_form greeting="HI" %} 20 |

<< Return to objects list

21 |
22 | 23 |
24 |

Description:

25 |

You may make a new copy of an existing object to store in this or another container.

26 |
27 |
 
28 |
29 | 30 | {% endblock %} 31 | 32 | 33 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/snapshots/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="snapshots" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block headerjs %} 10 | 15 | {% endblock %} 16 | 17 | {% block page_header %} 18 | {% include "django_openstack/common/_page_header.html" with title="Create a Snapshot" %} 19 | {% endblock page_header %} 20 | 21 | {% block dash_main %} 22 |
23 |
24 |

Choose a name for your snapshot.

25 | {% include 'django_openstack/dash/snapshots/_form.html' with form=create_form %} 26 |

<< Return to snapshots list

27 |
28 | 29 |
30 |

Description:

31 |

Snapshots preserve the disk state of a running instance.

32 |
33 |
 
34 |
35 | {% endblock %} 36 | 37 | 38 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/security_groups/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="security_groups" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_security_groups request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Security Groups" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if security_groups %} 17 | {% include 'django_openstack/dash/security_groups/_list.html' %} 18 | Create Security Group 19 | {% else %} 20 |
21 |

Info

22 |

There are currently no security groups. Create A Security Group >>

23 |
24 | {% endif %} 25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/rename.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Rename Network" %} 12 | {% endblock page_header %} 13 | 14 | {% block headerjs %} 15 | 20 | {% endblock headerjs %} 21 | 22 | {% block dash_main %} 23 |
24 |
25 | {% include 'django_openstack/dash/networks/_rename_form.html' with form=rename_form %} 26 |

<< Return to networks list

27 |
28 | 29 |
30 |

Rename:

31 |

Enter a new name for your network.

32 |
33 |
 
34 |
35 | {% endblock %} 36 | 37 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/views.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django import http 22 | 23 | 24 | def fakeView(request): 25 | resp = http.HttpResponse() 26 | resp.write('

' 27 | 'This is a fake httpresponse from a fake view for testing ' 28 | ' purposes only' 29 | '

') 30 | 31 | return resp 32 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/floating_ips/_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% for ip in floating_ips %} 9 | 10 | 11 | 12 | 22 | 23 | 33 | 34 | {% endfor %} 35 |
IDIPInstanceActions
{{ ip.id }}{{ ip.ip }} 13 | {% if ip.fixed_ip %} 14 |
    15 |
  • Instance ID: {{ip.instance_id}}
  • 16 |
  • Fixed IP: {{ip.fixed_ip}}
  • 17 |
18 | {% else %} 19 | None 20 | {% endif %} 21 |
24 |
    25 |
  • {% include "django_openstack/dash/floating_ips/_release.html" with form=release_form %}
  • 26 | {% if ip.fixed_ip %} 27 |
  • {% include "django_openstack/dash/floating_ips/_disassociate.html" with form=disassociate_form %}
  • 28 | {% else %} 29 |
  • Associate to instance
  • 30 | {% endif %} 31 |
32 |
36 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/auth/urls.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django.conf.urls.defaults import * 22 | from django.conf import settings 23 | 24 | 25 | urlpatterns = patterns('django_openstack.auth.views', 26 | url(r'login/$', 'login', name='auth_login'), 27 | url(r'logout/$', 'logout', name='auth_logout'), 28 | url(r'switch/(?P[^/]+)/$', 'switch_tenants', 29 | name='auth_switch'), 30 | ) 31 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/containers/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="containers" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Create Tenant" %} 11 | {% endblock page_header %} 12 | 13 | {% block dash_main %} 14 |
15 |
16 | {% include 'django_openstack/dash/containers/_form.html' with form=create_form %} 17 |
18 | 19 |
20 |

Description:

21 |

A container is a storage compartment for your data and provides a way for you to organize your data. You can think of a container as a folder in Windows® or a directory in UNIX®. The primary difference between a container and these other file system concepts is that containers cannot be nested. You can, however, create an unlimited number of containers within your account. Data must be stored in a container so you must have at least one container defined in your account prior to uploading data.

22 |
23 |
 
24 |
25 | {% endblock %} 26 | 27 | 28 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/_sidebar.html: -------------------------------------------------------------------------------- 1 | {% load sidebar_modules %} 2 | 3 | 19 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/templatetags/truncate_filter.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Template tags for truncating strings. 23 | """ 24 | 25 | from django import template 26 | 27 | register = template.Library() 28 | 29 | 30 | @register.filter("truncate") 31 | def truncate(value, size): 32 | if len(value) > size and size > 3: 33 | return value[0:(size - 3)] + '...' 34 | else: 35 | return value[0:size] 36 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/_topbar.html: -------------------------------------------------------------------------------- 1 | 33 | 34 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/js/old-application.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | $('input#table_search').quicksearch('table tbody.main tr'); 3 | 4 | $("#more").hide() 5 | $("#page_header a.more_link").click(function(e){ 6 | $("#more").fadeToggle("slow") 7 | e.preventDefault(); 8 | }) 9 | 10 | $("#health_table tr").hide() 11 | $("#health_table tr:first").show() 12 | $("#health_table tr.odd, #health_table tr.even").show() 13 | 14 | $("#health_table .more_link").click(function(e){ 15 | $(this).parent().parent().nextUntil(".even, .odd").fadeToggle("slow") 16 | e.preventDefault(); 17 | }) 18 | 19 | // $(".modal_window").hide() 20 | 21 | $("#weight_slider").slider() 22 | 23 | $('a.fancy_btn').click(function(e) { 24 | e.preventDefault(); 25 | 26 | var maskHeight = $(document).height(); 27 | var maskWidth = $(window).width(); 28 | 29 | $('#mask').css({'width':maskWidth,'height':maskHeight}); 30 | $('#mask').fadeTo(500, 0.7); 31 | 32 | var winH = $(window).height(); 33 | var winW = $(window).width(); 34 | 35 | $(".modal_window").css('top', winH/2-$(".modal_window").height()/2); 36 | $(".modal_window").css('left', winW/2-$(".modal_window").width()/2); 37 | 38 | $(".modal_window").fadeIn(1000); 39 | 40 | }); 41 | 42 | 43 | }) 44 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/upload.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="containers" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Upload Objects" %} 11 | {% endblock page_header %} 12 | 13 | {% block dash_main %} 14 |

Container: {{ container_name }}

15 | 16 |
17 |
18 | {% include 'django_openstack/dash/objects/_form.html' with form=upload_form %} 19 |

<< Return to objects list

20 |
21 | 22 |
23 |

Description:

24 |

An object is the basic storage entity and any optional metadata that represents the files you store in the OpenStack Object Storage system. When you upload data to OpenStack Object Storage, the data is stored as-is (no compression or encryption) and consists of a location (container), the object's name, and any metadata consisting of key/value pairs.

25 |
26 |
 
27 |
28 | 29 | {% endblock %} 30 | 31 | -------------------------------------------------------------------------------- /django-openstack/Makefile: -------------------------------------------------------------------------------- 1 | PYTHON=`which python` 2 | DESTDIR=/ 3 | BUILDIR=$(CURDIR)/debian/django-openstack 4 | PROJECT=django-openstack 5 | 6 | all: 7 | @echo "make buildout - Run through buildout" 8 | @echo "make test - Run tests" 9 | @echo "make source - Create source package" 10 | @echo "make install - Install on local system" 11 | @echo "make buildrpm - Generate a rpm package" 12 | @echo "make builddeb - Generate a deb package" 13 | @echo "make clean - Get rid of scratch and byte files" 14 | 15 | buildout: ./bin/buildout 16 | ./bin/buildout 17 | 18 | ./bin/buildout: 19 | $(PYTHON) bootstrap.py 20 | 21 | source: 22 | $(PYTHON) setup.py sdist $(COMPILE) 23 | 24 | install: 25 | $(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE) 26 | 27 | buildrpm: 28 | $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall 29 | 30 | builddeb: 31 | # build the source package in the parent directory 32 | # then rename it to project_version.orig.tar.gz 33 | $(PYTHON) setup.py sdist $(COMPILE) --dist-dir=../ 34 | rename -f 's/$(PROJECT)-(.*)\.tar\.gz/$(PROJECT)_$$1\.orig\.tar\.gz/' ../* 35 | # build the package 36 | #dpkg-buildpackage -i -I -rfakeroot 37 | dpkg-buildpackage -b -rfakeroot -tc -uc -D 38 | 39 | clean: 40 | $(PYTHON) setup.py clean 41 | $(MAKE) -f $(CURDIR)/debian/rules clean 42 | rm -rf build/ MANIFEST 43 | find . -name '*.pyc' -delete 44 | -------------------------------------------------------------------------------- /openstack-dashboard/Makefile: -------------------------------------------------------------------------------- 1 | PYTHON=`which python` 2 | DESTDIR=/ 3 | BUILDIR=$(CURDIR)/debian/openstack-dashboard 4 | PROJECT=openstack-dashboard 5 | 6 | all: 7 | @echo "make buildout - Run through buildout" 8 | @echo "make test - Run tests" 9 | @echo "make source - Create source package" 10 | @echo "make install - Install on local system" 11 | @echo "make buildrpm - Generate a rpm package" 12 | @echo "make builddeb - Generate a deb package" 13 | @echo "make clean - Get rid of scratch and byte files" 14 | 15 | buildout: ./bin/buildout 16 | ./bin/buildout 17 | 18 | ./bin/buildout: 19 | $(PYTHON) bootstrap.py 20 | 21 | source: 22 | $(PYTHON) setup.py sdist $(COMPILE) 23 | 24 | install: 25 | $(PYTHON) setup.py install --root $(DESTDIR) $(COMPILE) 26 | 27 | buildrpm: 28 | $(PYTHON) setup.py bdist_rpm --post-install=rpm/postinstall --pre-uninstall=rpm/preuninstall 29 | 30 | builddeb: 31 | # build the source package in the parent directory 32 | # then rename it to project_version.orig.tar.gz 33 | $(PYTHON) setup.py sdist $(COMPILE) --dist-dir=../ 34 | rename -f 's/$(PROJECT)-(.*)\.tar\.gz/$(PROJECT)_$$1\.orig\.tar\.gz/' ../* 35 | # build the package 36 | #dpkg-buildpackage -i -I -rfakeroot 37 | dpkg-buildpackage -b -rfakeroot -tc -uc -D 38 | 39 | clean: 40 | $(PYTHON) setup.py clean 41 | $(MAKE) -f $(CURDIR)/debian/rules clean 42 | rm -rf build/ MANIFEST 43 | find . -name '*.pyc' -delete 44 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/detail.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_networks_detail request.user.tenant network.id as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title=network.name refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block breadcrumbs %} 16 | Networks »  17 | {{network.name}} 18 | {% endblock %} 19 | 20 | {% block dash_main %} 21 | {% if network.ports %} 22 | {% include 'django_openstack/dash/networks/_detail.html' %} 23 | Create Ports 24 | {% else %} 25 |
26 |

Info

27 |

There are currently no ports in this network. Create Ports >>

28 |
29 | {% endif %} 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/objects/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="containers" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | 19 | {% endblock %} 20 | 21 | {% block dash_main %} 22 |

Container: {{ container_name }}

23 | 24 | {% if objects %} 25 | {% include 'django_openstack/dash/objects/_list.html' %} 26 | {% else %} 27 |
28 |

Info

29 |

There are currently no objects in the container {{container_name}}. You can upload a new object from the Object Upload Page >>

30 |
31 | {% endif %} 32 | Upload New Object >> 33 | 34 | {% endblock %} 35 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/urls.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django.conf.urls.defaults import * 22 | from django.conf import settings 23 | from django_openstack.signals import * 24 | 25 | urlpatterns = patterns('', 26 | url(r'^auth/', include('django_openstack.auth.urls')), 27 | url(r'^dash/', include('django_openstack.dash.urls')), 28 | url(r'^syspanel/', include('django_openstack.syspanel.urls')), 29 | ) 30 | 31 | # import urls from modules 32 | for module_urls in dash_modules_urls.send(sender=dash_modules_urls): 33 | urlpatterns += module_urls[1].urlpatterns 34 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/tests.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | ''' Test for django mailer. 22 | 23 | This test is pretty much worthless, and should be removed once real testing of 24 | views that send emails is implemented 25 | ''' 26 | 27 | from django import test 28 | from django.core import mail 29 | from mailer import engine 30 | from mailer import send_mail 31 | 32 | 33 | class DjangoMailerPresenceTest(test.TestCase): 34 | def test_mailsent(self): 35 | send_mail('subject', 'message_body', 'from@test.com', ['to@test.com']) 36 | engine.send_all() 37 | self.assertEqual(len(mail.outbox), 1) 38 | self.assertEqual(mail.outbox[0].subject, 'subject') 39 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 3 | 4 | # Copyright 2011 United States Government as represented by the 5 | # Administrator of the National Aeronautics and Space Administration. 6 | # All Rights Reserved. 7 | # 8 | # Copyright 2011 Nebula, Inc. 9 | # 10 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 11 | # not use this file except in compliance with the License. You may obtain 12 | # a copy of the License at 13 | # 14 | # http://www.apache.org/licenses/LICENSE-2.0 15 | # 16 | # Unless required by applicable law or agreed to in writing, software 17 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 18 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 19 | # License for the specific language governing permissions and limitations 20 | # under the License. 21 | 22 | from django.core.management import execute_manager 23 | try: 24 | import settings # Assumed to be in the same directory. 25 | except ImportError: 26 | import sys 27 | sys.stderr.write("Error: Can't find the file 'settings.py' in the " 28 | "directory containing %r. It appears you've customized things.\nYou'll " 29 | "have to run django-admin.py, passing it your settings module.\n(If " 30 | "the file settings.py does indeed exist, it's causing an ImportError " 31 | "somehow.)\n" % __file__) 32 | sys.exit(1) 33 | 34 | if __name__ == "__main__": 35 | execute_manager(settings) 36 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | # The format of this file isn't really documented; just use --generate-rcfile 2 | [MASTER] 3 | # Add to the black list. It should be a base name, not a 4 | # path. You may set this option multiple times. 5 | ignore=test 6 | 7 | [Messages Control] 8 | # NOTE(justinsb): We might want to have a 2nd strict pylintrc in future 9 | # C0111: Don't require docstrings on every method 10 | # W0511: TODOs in code comments are fine. 11 | # W0142: *args and **kwargs are fine. 12 | # W0622: Redefining id is fine. 13 | disable=C0111,W0511,W0142,W0622 14 | 15 | [Basic] 16 | # Variable names can be 1 to 31 characters long, with lowercase and underscores 17 | variable-rgx=[a-z_][a-z0-9_]{0,30}$ 18 | 19 | # Argument names can be 2 to 31 characters long, with lowercase and underscores 20 | argument-rgx=[a-z_][a-z0-9_]{1,30}$ 21 | 22 | # Method names should be at least 3 characters long 23 | # and be lowecased with underscores 24 | method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$ 25 | 26 | # Module names matching keystone-* are ok (files in bin/) 27 | module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(keystone-[a-z0-9_-]+))$ 28 | 29 | # Don't require docstrings on tests. 30 | no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ 31 | 32 | [Design] 33 | max-public-methods=100 34 | min-public-methods=0 35 | max-args=6 36 | 37 | [Variables] 38 | 39 | # List of additional names supposed to be defined in builtins. Remember that 40 | # you should avoid to define new builtins when possible. 41 | # _ is used by our localization 42 | additional-builtins=_ 43 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/dependency_tests.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Tests for dependency packages 23 | Honestly, this can probably go away once tests that depend on these 24 | packages become more ingrained in the code. 25 | """ 26 | 27 | from django import test 28 | from django.core import mail 29 | from mailer import engine 30 | from mailer import send_mail 31 | 32 | 33 | class DjangoMailerPresenceTest(test.TestCase): 34 | def test_mailsent(self): 35 | send_mail('subject', 'message_body', 'from@test.com', ['to@test.com']) 36 | engine.send_all() 37 | 38 | self.assertEqual(len(mail.outbox), 1) 39 | self.assertEqual(mail.outbox[0].subject, 'subject') 40 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/testurls.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | URL patterns for testing django-openstack views. 23 | """ 24 | 25 | from django.conf.urls.defaults import * 26 | 27 | from django_openstack import urls as django_openstack_urls 28 | 29 | 30 | urlpatterns = patterns('', 31 | url(r'^$', 'django_openstack.tests.views.fakeView', name='splash'), 32 | url(r'^dash/$', 'django_openstack.dash.views.instances.usage', 33 | name='dash_overview'), 34 | url(r'^syspanel/$', 'django_openstack.syspanel.views.instances.usage', 35 | name='syspanel_overview') 36 | ) 37 | 38 | 39 | # NOTE(termie): just append them since we want the routes at the root 40 | urlpatterns += django_openstack_urls.urlpatterns 41 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/tests/broken/region_tests.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2010 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 8 | # not use this file except in compliance with the License. You may obtain 9 | # a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 15 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 16 | # License for the specific language governing permissions and limitations 17 | # under the License. 18 | 19 | """ 20 | Unit tests for region views. 21 | """ 22 | 23 | from django.core.urlresolvers import reverse 24 | from django_openstack.nova.tests.base import BaseViewTests 25 | 26 | 27 | TEST_REGION = 'one' 28 | 29 | 30 | class RegionViewTests(BaseViewTests): 31 | def test_change(self): 32 | self.authenticateTestUser() 33 | session = self.client.session 34 | session['region'] = 'two' 35 | session.save() 36 | 37 | data = {'redirect_url': '/', 38 | 'region': TEST_REGION} 39 | res = self.client.post(reverse('region_change'), data) 40 | self.assertEqual(self.client.session['region'], TEST_REGION) 41 | self.assertRedirectsNoFollow(res, '/') 42 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/keypairs/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="keypairs" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block headerjs %} 10 | 19 | {% endblock %} 20 | 21 | {% block page_header %} 22 | {# to make searchable false, just remove it from the include statement #} 23 | {% include "django_openstack/common/_page_header.html" with title="Create Keypair" %} 24 | {% endblock page_header %} 25 | 26 | {% block dash_main %} 27 |
28 |
29 |

Your private key is being downloaded.

30 | {% include 'django_openstack/dash/keypairs/_form.html' with form=create_form %} 31 |

<< Return to keypairs list

32 |
33 | 34 |
35 |

Description:

36 |

Keypairs are ssh credentials which are injected into images when they are launched. Creating a new key pair registers the public key and downloads the private key (a .pem file).

37 |

Protect and use the key as you would any normal ssh private key.

38 |
39 |
 
40 |
41 | {% endblock %} 42 | 43 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/decorators.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 CRS4 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Simple decorator container for general purpose 23 | """ 24 | 25 | from django.shortcuts import redirect 26 | import logging 27 | 28 | 29 | LOG = logging.getLogger('django_openstack.syspanel') 30 | 31 | 32 | def enforce_admin_access(fn): 33 | """ Preserve unauthorized bypass typing directly the URL and redirects to 34 | the overview dash page """ 35 | def dec(*args, **kwargs): 36 | if args[0].user.is_admin(): 37 | return fn(*args, **kwargs) 38 | else: 39 | LOG.warn('Redirecting user "%s" from syspanel to dash ( %s )' % 40 | (args[0].user.username, fn.__name__), exc_info=True) 41 | return redirect('dash_overview') 42 | return dec 43 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/instances/update.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="instances" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Update Instance" %} 12 | {% endblock page_header %} 13 | 14 | {% block dash_main %} 15 |
16 |
17 | {% include 'django_openstack/dash/instances/_form.html' with form=form %} 18 |

<< Return to Instances List

19 |
20 | 21 |
22 |

Description:

23 |

Update the name and description of your instance

24 |
25 |
26 |
27 | {% endblock %} 28 | 29 | {% block footer_js %} 30 | 49 | {% endblock footer_js %} 50 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/utils.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | import datetime 22 | 23 | 24 | def time(): 25 | '''Overrideable version of datetime.datetime.today''' 26 | if time.override_time: 27 | return time.override_time 28 | return datetime.time() 29 | 30 | time.override_time = None 31 | 32 | 33 | def today(): 34 | '''Overridable version of datetime.datetime.today''' 35 | if today.override_time: 36 | return today.override_time 37 | return datetime.datetime.today() 38 | 39 | today.override_time = None 40 | 41 | 42 | def utcnow(): 43 | '''Overridable version of datetime.datetime.utcnow''' 44 | if utcnow.override_time: 45 | return utcnow.override_time 46 | return datetime.datetime.utcnow() 47 | 48 | utcnow.override_time = None 49 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/ports/attach.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="networks" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Attach Port" %} 12 | {% endblock page_header %} 13 | 14 | {% block headerjs %} 15 | 31 | {% endblock headerjs %} 32 | 33 | {% block dash_main %} 34 |
35 |
36 | {% include 'django_openstack/dash/ports/_attach.html' with form=attach_form %} 37 |

<< Return to network detail

38 |
39 | 40 |
41 |

Select an interface from the list on the left to attach it to this port.

42 |

Only interfaces that are not connected to any existing port are shown

43 |

If you want to reconnect a connected interface, please detach it first

44 |
45 |
 
46 |
47 | {% endblock %} 48 | 49 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/views.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Views for home page. 23 | """ 24 | from django import template 25 | from django import shortcuts 26 | from django.views.decorators import vary 27 | 28 | from django_openstack import api 29 | from django_openstack.auth import views as auth_views 30 | 31 | 32 | @vary.vary_on_cookie 33 | def splash(request): 34 | if request.user: 35 | if request.user.is_admin(): 36 | return shortcuts.redirect('syspanel_overview') 37 | else: 38 | return shortcuts.redirect('dash_overview') 39 | 40 | form, handled = auth_views.Login.maybe_handle(request) 41 | if handled: 42 | return handled 43 | 44 | return shortcuts.render_to_response('splash.html', { 45 | 'form': form, 46 | }, context_instance=template.RequestContext(request)) 47 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/js/form_examples.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | // update/create image form 3 | $("#image_form input#id_name").example("ami-ubuntu"); 4 | $("#image_form input#id_kernel").example("123"); 5 | $("#image_form input#id_ramdisk").example("123"); 6 | $("#image_form input#id_state").example("available"); 7 | $("#image_form input#id_location").example("file:///var/lib/glance/images/123"); 8 | $("#image_form input#id_architecture").example("x86_64"); 9 | $("#image_form input#id_project_id").example("some"); 10 | $("#image_form input#id_disk_format").example("ari"); 11 | $("#image_form input#id_container_format").example("ari"); 12 | $("#image_form input#id_ramdisk").example("123"); 13 | 14 | // launch instance form 15 | $("#launch_img input#id_name").example("YetAnotherInstance") 16 | $("#launch_img input#id_security_groups").example("group1,group2") 17 | 18 | // create flavor form 19 | $("#flavor_form input#id_flavorid").example("1234"); 20 | $("#flavor_form input#id_name").example("small"); 21 | $("#flavor_form input#id_vcpus").example("256"); 22 | $("#flavor_form input#id_memory_mb").example("256"); 23 | $("#flavor_form input#id_disk_gb").example("256"); 24 | 25 | // update/create tenant 26 | $("#tenant_form input#id__id").example("YetAnotherTenant"); 27 | $("#tenant_form textarea#id_description").example("One or two sentence description."); 28 | 29 | // update/create tenant 30 | $("#user_form input#id_id").example("username"); 31 | $("#user_form input#id_email").example("email@example.com"); 32 | $("#user_form input#id_password").example("password"); 33 | 34 | // table search box 35 | $("input#table_search").example("Search...") 36 | }) 37 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/users/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="users" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_users as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Users" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {% for user in users %} 25 | 26 | 27 | 28 | 29 | 36 | 37 | {% endfor %} 38 |
IDEmailDefault TenantOptions
{{user.id}}{% if not user.enabled %} (disabled){% endif %}{{user.email}}{{user.tenantId}} 30 |
    31 |
  • {% include "django_openstack/syspanel/users/_enable_disable.html" with form=user_enable_disable_form %}
  • 32 |
  • {% include "django_openstack/syspanel/users/_delete.html" with form=user_delete_form %}
  • 33 |
  • Edit
  • 34 |
35 |
39 | Create New User 40 | 41 | 42 | 43 | {% endblock %} 44 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/images/launch.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="images" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {# to make searchable false, just remove it from the include statement #} 11 | {% include "django_openstack/common/_page_header.html" with title="Launch Instance" %} 12 | {% endblock page_header %} 13 | 14 | {% block dash_main %} 15 |
16 |
17 | {% include 'django_openstack/dash/images/_launch.html' %} 18 |
19 |
20 |

Description:

21 |

Specify the details for launching an instance. Also please make note of the table below; all tenants have quotas which define the limit of resources you are allowed to provision.

22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
Quota NameLimit
RAM (MB){{quotas.ram}}MB
Floating IPs{{quotas.floating_ips}}
Instances{{quotas.instances}}
Volumes{{quotas.volumes}}
Gigabytes{{quotas.gigabytes}}GB
48 |
49 |
 
50 |
51 | {% endblock %} 52 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/context_processors.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django.conf import settings 22 | from django_openstack import api 23 | from django.contrib import messages 24 | from openstackx.api import exceptions as api_exceptions 25 | 26 | 27 | def tenants(request): 28 | if not request.user or not request.user.is_authenticated(): 29 | return {} 30 | 31 | try: 32 | return {'tenants': api.token_list_tenants(request, request.user.token)} 33 | except api_exceptions.BadRequest, e: 34 | messages.error(request, "Unable to retrieve tenant list from\ 35 | keystone: %s" % e.message) 36 | return {'tenants': []} 37 | 38 | 39 | def swift(request): 40 | return {'swift_configured': settings.SWIFT_ENABLED} 41 | 42 | 43 | def quantum(request): 44 | return {'quantum_configured': settings.QUANTUM_ENABLED} 45 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | {% load branding %} 3 | 4 | 5 | 6 | {% site_branding %} Dashboard{% block title %}{% endblock %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% block headerjs %}{% endblock %} 16 | {% block headercss %}{% endblock %} 17 | 18 | 19 | {% block topbar %} 20 | {% include '_topbar.html' %} 21 | {% endblock %} 22 | {% block content %} 23 |
24 |
25 | {% block sidebar %} 26 | {% endblock %} 27 | {% block main %} 28 | {% endblock %} 29 |
30 |
31 | {% endblock %} 32 | 35 | {% block footer_js %}{% endblock %} 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/_sidebar.html: -------------------------------------------------------------------------------- 1 | {% load sidebar_modules %} 2 | 3 | 27 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/js/application.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | $('input#table_search').quicksearch('tr.odd, tr.even'); 3 | 4 | // show+hide image details 5 | $(".details").hide() 6 | $("#images td:not(#actions)").click(function(e){ 7 | $(this).parent().nextUntil(".even, .odd").fadeToggle("slow"); 8 | }) 9 | 10 | $("#drop_btn").click(function(){ 11 | $("#user_tenant_list").toggle(); 12 | }) 13 | 14 | 15 | // confirmation on deletion of items 16 | $(".terminate").click(function(e){ 17 | var response = confirm('Are you sure you want to terminate the Instance: '+$(this).attr('title')+"?"); 18 | return response; 19 | }) 20 | 21 | $(".delete").click(function(e){ 22 | var response = confirm('Are you sure you want to delete the '+$(this).attr('title')+" ?"); 23 | return response; 24 | }) 25 | 26 | $(".reboot").click(function(e){ 27 | var response = confirm('Are you sure you want to reboot the '+$(this).attr('title')+" ?"); 28 | return response; 29 | }) 30 | 31 | $(".disable").click(function(e){ 32 | var response = confirm('Are you sure you want to disable the '+$(this).attr('title')+" ?"); 33 | return response; 34 | }) 35 | 36 | $(".enable").click(function(e){ 37 | var response = confirm('Are you sure you want to enable the '+$(this).attr('title')+" ?"); 38 | return response; 39 | }) 40 | 41 | // disable multiple submissions when launching a form 42 | $("form").submit(function() { 43 | $(this).submit(function() { 44 | return false; 45 | }); 46 | return true; 47 | }); 48 | 49 | // Fancy multi-selects 50 | $(".chzn-select").chosen() 51 | 52 | $(".detach").click(function(e){ 53 | var response = confirm('Are you sure you want to detach the '+$(this).attr('title')+" ?"); 54 | return response; 55 | }) 56 | }) 57 | -------------------------------------------------------------------------------- /django-openstack/README: -------------------------------------------------------------------------------- 1 | OpenStack Django-Nova 2 | --------------------- 3 | 4 | The Django-Nova project is a Django module that is used to provide web based 5 | interactions with the OpenStack Nova cloud controller. 6 | 7 | There is a reference implementation that uses this module located at: 8 | 9 | http://launchpad.net/openstack-dashboard 10 | 11 | It is highly recommended that you make use of this reference implementation 12 | so that changes you make can be visualized effectively and are consistent. 13 | Using this reference implementation as a development environment will greatly 14 | simplify development of the django-nova module. 15 | 16 | Of course, if you are developing your own Django site using django-nova, then 17 | you can disregard this advice. 18 | 19 | 20 | 21 | Getting Started 22 | --------------- 23 | 24 | Django-Nova uses Buildout (http://www.buildout.org/) to manage local 25 | development. To configure your local Buildout environment first install the following 26 | system-level dependencies: 27 | * python-dev 28 | * git 29 | * bzr 30 | 31 | Then instantiate buildout with 32 | 33 | $ python bootstrap.py 34 | $ bin/buildout 35 | 36 | This will install all the dependencies of django-nova and provide some useful 37 | scripts in the bin/ directory: 38 | 39 | bin/python provides a python shell for the current buildout. 40 | bin/django provides django functions for the current buildout. 41 | 42 | 43 | You should now be able to run unit tests as follows: 44 | 45 | $ bin/django test 46 | or 47 | $ bin/test 48 | 49 | You can run unit tests with code coverage on django_openstack by setting 50 | NOSE_WITH_COVERAGE: 51 | 52 | $ NOSE_WITH_COVERAGE=true bin/test 53 | 54 | Get even better coverage info by running coverage directly: 55 | 56 | $ coverage run --branch --source django_openstack bin/django test django_openstack && coverage html 57 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | OpenStack Dashboard 2 | ------------------- 3 | 4 | The OpenStack Dashboard is a Django based reference implementation of a web 5 | based management interface for OpenStack. 6 | 7 | It is based on django-openstack, which is designed to be a generic Django 8 | module that can be re-used in other sites. 9 | 10 | For more information about how to get started with the OpenStack Dashboard, 11 | view the README file in the openstack-dashboard folder. 12 | 13 | For more information about working directly with django-openstack, see the 14 | README file in the django-openstack folder. 15 | 16 | For release management: 17 | 18 | * https://launchpad.net/openstack-dashboard 19 | 20 | For blueprints and feature specifications: 21 | 22 | * https://blueprints.launchpad.net/openstack-dashboard 23 | 24 | For issue tracking: 25 | 26 | * https://bugs.launchpad.net/openstack-dashboard 27 | 28 | Project Structure and Testing: 29 | ------------------------------ 30 | 31 | This project is a bit different from other Openstack projects in that it has 32 | two very distinct components underneath it: django-openstack, and 33 | openstack-dashboard. 34 | 35 | django-openstack holds the generic libraries and components that can be 36 | used in any Django project. In testing, this component is set up with 37 | buildout (see run_tests.sh), and any dependencies that get added need to 38 | be added to the django-openstack/buildout.cfg file. 39 | 40 | openstack-dashboard is a reference django project that uses django-openstack 41 | and is built with a virtualenv and tested through that environment. If 42 | depdendencies are added that the reference django project needs, they 43 | should be added to openstack-dashboard/tools/pip-requires. 44 | 45 | The run_tests.sh script invokes tests and analysis on both of these 46 | components in it's process, and is what Jenkins uses to verify the 47 | stability of the project. 48 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/syspanel/views/quotas.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from operator import itemgetter 22 | 23 | from django import template 24 | from django import http 25 | from django.conf import settings 26 | from django.contrib import messages 27 | from django.contrib.auth.decorators import login_required 28 | from django.shortcuts import redirect 29 | from django.shortcuts import render_to_response 30 | from openstackx.api import exceptions as api_exceptions 31 | 32 | 33 | from django_openstack import api 34 | from django_openstack import forms 35 | from django_openstack.decorators import enforce_admin_access 36 | 37 | 38 | @login_required 39 | @enforce_admin_access 40 | def index(request): 41 | quotas = api.admin_api(request).quota_sets.get(True)._info 42 | quotas['ram'] = int(quotas['ram']) / 100 43 | quotas.pop('id') 44 | 45 | return render_to_response( 46 | 'django_openstack/syspanel/quotas/index.html', { 47 | 'quotas': quotas, 48 | }, context_instance=template.RequestContext(request)) 49 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/networks/_detail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% for port in network.ports %} 11 | 12 | 13 | 14 | 30 | 41 | 45 | 46 | {% endfor %} 47 | 48 |
IDStateAttachmentActionsExtensions
{{port.id}}{{port.state}} 15 | {% if port.attachment %} 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
Instance VIF Id
{{port.instance}} {{port.attachment.id}}
26 | {% else %} 27 | -- 28 | {% endif %} 29 |
31 |
    32 | {% if port.attachment %} 33 |
  • {% include "django_openstack/dash/networks/_detach_port.html" with form=detach_port_form %}
  • 34 | {% else %} 35 |
  • Attach
  • 36 | {% endif %} 37 |
  • {% include "django_openstack/dash/networks/_delete_port.html" with form=delete_port_form %}
  • 38 |
  • {% include "django_openstack/dash/networks/_toggle_port.html" with form=toggle_port_form %}
  • 39 |
40 |
42 |
    43 |
44 |
49 | 50 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/templatetags/sidebar_modules.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | from django import template 22 | from django_openstack import signals 23 | 24 | register = template.Library() 25 | 26 | 27 | @register.inclusion_tag('django_openstack/common/_sidebar_module.html') 28 | def dash_sidebar_modules(request): 29 | signals_call = signals.dash_modules_detect() 30 | if signals_call: 31 | if signals_call[0][1]['type'] == "dash": 32 | return {'modules': [module[1] for module in signals_call], 33 | 'request': request} 34 | else: 35 | return {} 36 | 37 | 38 | @register.inclusion_tag('django_openstack/common/_sidebar_module.html') 39 | def syspanel_sidebar_modules(request): 40 | signals_call = signals.dash_modules_detect() 41 | if signals_call: 42 | if signals_call[0][1]['type'] == "syspanel": 43 | return {'modules': [module[1] for module in signals_call], 44 | 'request': request} 45 | else: 46 | return {} 47 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/images/_list.html: -------------------------------------------------------------------------------- 1 | {% load parse_date %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {% for image in images %} 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 30 | 31 | 32 | 44 | 45 | {% endfor %} 46 |
IDNameSizePublicCreatedUpdatedStatus
{{image.id}}{{image.name}}{{image.size|filesizeformat}}{{image.is_public}}{{image.created_at|parse_date}}{{image.updated_at|parse_date}}{{image.status|capfirst}} 23 |
    24 |
  • {% include "django_openstack/syspanel/images/_delete.html" with form=delete_form %}
  • 25 | {#
  • {% include "django_openstack/syspanel/images/_toggle.html" with form=toggle_form %}
  • #} 26 | 27 |
  • Edit
  • 28 |
29 |
33 |
    34 |
  • Location: {{image.properties.image_location}}
  • 35 |
  • State: {{image.properties.image_state}}
  • 36 |
  • Kernel ID: {{image.properties.kernel_id}}
  • 37 |
  • Ramdisk ID: {{image.properties.ramdisk_id}}
  • 38 |
  • Architecture: {{image.properties.architecture}}
  • 39 |
  • Project ID: {{image.container_format}}
  • 40 |
  • Container Format: {{image.properties.project_id}}
  • 41 |
  • Disk Format: {{image.disk_format}}
  • 42 |
43 |
47 | -------------------------------------------------------------------------------- /openstack-dashboard/README: -------------------------------------------------------------------------------- 1 | OpenStack Dashboard 2 | ------------------- 3 | 4 | The OpenStack Dashboard is a reference implementation of a Django site that 5 | uses the Django-Nova project to provide web based interactions with the 6 | OpenStack Nova cloud controller. 7 | 8 | 9 | Getting Started 10 | --------------- 11 | 12 | For local development, first create a virtualenv for local development. 13 | A tool is included to create one for you: 14 | 15 | $ python tools/install_venv.py 16 | 17 | 18 | Now that the virtualenv is created, you need to configure your local 19 | environment. To do this, create a local_settings.py file in the local/ 20 | directory. There is a local_settings.py.example file there that may be used 21 | as a template. 22 | 23 | Finally, issue the django syncdb command: 24 | 25 | $ tools/with_venv.sh dashboard/manage.py syncdb 26 | 27 | If after you have specified the admin user the script appears to hang, it 28 | probably means the installation of Nova being referred to in local_settings.py 29 | is unavailable. 30 | 31 | 32 | If all is well you should now able to run the server locally: 33 | 34 | $ tools/with_venv.sh dashboard/manage.py runserver 35 | 36 | Adding openstackx Extensions to Nova 37 | ------------------------------------ 38 | 39 | If you are seeing large numbers of 404 exceptions on operations such as listing 40 | servers, you are probably not running the openstackx extensions that the 41 | dashboard depends on. You will need to download the openstackx code from 42 | 43 | > https://github.com/cloudbuilders/openstackx 44 | 45 | and add the following option to your nova instantiation: 46 | 47 | > --osapi_extensions_path=/path/to/openstackx/extensions 48 | 49 | The rackspace cloudbuilders nova.sh script automates this process and creates a 50 | full nova installation compatible with the dashboard. You can acquire this 51 | script from the repository at 52 | 53 | https://github.com/cloudbuilders/deploy.sh 54 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/flavors/create.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="flavors" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% include "django_openstack/common/_page_header.html" with title="Create Flavor" %} 11 | {% endblock page_header %} 12 | 13 | {% block syspanel_main %} 14 |
15 |
16 |
    17 |
  • 18 |

    {{global_summary.total_vcpus}} Cores

    19 |

    {{global_summary.total_avail_vcpus}} Avail

    20 |
  • 21 |
  • 22 |

    {{global_summary.total_ram_size_hr|floatformat}} {{global_summary.unit_ram_size}} Ram

    23 |

    {{global_summary.total_avail_ram_size_hr|floatformat}} {{global_summary.unit_ram_size}} Avail

    24 |
  • 25 |
  • 26 |

    {{global_summary.total_disk_size_hr|floatformat}} {{global_summary.unit_disk_size}} Disk

    27 |

    {{global_summary.total_avail_disk_size_hr|floatformat}} {{global_summary.unit_disk_size}} Avail

    28 |
  • 29 |
30 |
31 |
32 | {% include "django_openstack/syspanel/flavors/_create.html" %} 33 |
34 |
35 |

Description:

36 |

From here you can define the sizing of a new flavor.

37 |
38 |
 
39 |
40 | {% endblock %} 41 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/signals.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | import django.dispatch 22 | from django.dispatch import receiver 23 | 24 | dash_modules_ping = django.dispatch.Signal() 25 | dash_modules_urls = django.dispatch.Signal() 26 | 27 | 28 | def dash_modules_detect(): 29 | """ 30 | Sends a pinging signal to the app, all listening modules will reply with 31 | items for the sidebar. 32 | 33 | The response is a tuple of the Signal object instance, and a dictionary. 34 | The values within the dictionary containing links and a title which should 35 | be added to the sidebar navigation. 36 | 37 | Example: (, 38 | {'title': 'Nixon', 39 | 'links': [{'url':'/syspanel/nixon/google', 40 | 'text':'Google', 'active_text': 'google'}], 41 | 'type': syspanel}) 42 | """ 43 | return dash_modules_ping.send(sender=dash_modules_ping) 44 | 45 | 46 | def dash_app_setup_urls(): 47 | """ 48 | Adds urls from modules 49 | """ 50 | return dash_modules_urls.send(sender=dash_modules_urls) 51 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/instances/_list.html: -------------------------------------------------------------------------------- 1 | {% load parse_date %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | {% for instance in instances %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 41 | 42 | 43 | 51 | 52 | {% endfor %} 53 |
IdTenantUserHostCreatedImageIPsStateActions
{{instance.id}}{{instance.attrs.tenant_id}}{{instance.attrs.user_id}}{{instance.attrs.host}}{{instance.attrs.launched_at|parse_date}}{{instance.image_name}} 24 | {% for ip_group, addresses in instance.addresses.items %} 25 | {% if instance.addresses.items|length > 1 %} 26 |

{{ip_group}}

27 |
    28 | {% for address in addresses %} 29 |
  • {{address.addr}}
  • 30 | {% endfor %} 31 |
32 | {% else %} 33 |
    34 | {% for address in addresses %} 35 |
  • {{address.addr}}
  • 36 | {% endfor %} 37 |
38 | {% endif %} 39 | {% endfor %} 40 |
{{instance.status|lower|capfirst}} 44 |
    45 |
  • {% include "django_openstack/common/instances/_terminate.html" with form=terminate_form %}
  • 46 |
  • {% include "django_openstack/common/instances/_reboot.html" with form=reboot_form %}
  • 47 |
  • Console Log
  • 48 |
  • VNC Console
  • 49 |
50 |
54 | -------------------------------------------------------------------------------- /django-openstack/setup.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | import os 22 | from setuptools import setup, find_packages, findall 23 | 24 | def read(fname): 25 | return open(os.path.join(os.path.dirname(__file__), fname)).read() 26 | 27 | setup( 28 | name = "django-openstack", 29 | version = "0.3", 30 | url = 'https://launchpad.net/django-openstack/', 31 | license = 'Apache 2.0', 32 | description = "A Django interface for OpenStack.", 33 | long_description = read('README'), 34 | author = 'Devin Carlen', 35 | author_email = 'devin.carlen@gmail.com', 36 | packages = find_packages(), 37 | package_data = {'django_openstack': 38 | [s[len('django_openstack/'):] for s in 39 | findall('django_openstack/templates')]}, 40 | install_requires = ['setuptools', 'mox>=0.5.3', 'django_nose'], 41 | classifiers = [ 42 | 'Development Status :: 4 - Beta', 43 | 'Framework :: Django', 44 | 'Intended Audience :: Developers', 45 | 'License :: OSI Approved :: Apache License', 46 | 'Operating System :: OS Independent', 47 | 'Programming Language :: Python', 48 | 'Topic :: Internet :: WWW/HTTP', 49 | ] 50 | ) 51 | 52 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/css/reset.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, object, iframe, 2 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 3 | abbr, address, cite, code, 4 | del, dfn, em, img, ins, kbd, q, samp, 5 | small, strong, sub, sup, var, 6 | b, i, 7 | dl, dt, dd, ol, ul, li, 8 | fieldset, form, label, legend, 9 | table, caption, tbody, tfoot, thead, tr, th, td, 10 | article, aside, canvas, details, figcaption, figure, 11 | footer, header, hgroup, menu, nav, section, summary, 12 | time, mark, audio, video { 13 | margin:0; 14 | padding:0; 15 | border:0; 16 | outline:0; 17 | font-size:100%; 18 | vertical-align:baseline; 19 | background:transparent; 20 | } 21 | 22 | body { 23 | line-height:1; 24 | } 25 | 26 | article,aside,details,figcaption,figure, 27 | footer,header,hgroup,menu,nav,section { 28 | display:block; 29 | } 30 | 31 | nav ul { 32 | list-style:none; 33 | } 34 | 35 | blockquote, q { 36 | quotes:none; 37 | } 38 | 39 | blockquote:before, blockquote:after, 40 | q:before, q:after { 41 | content:''; 42 | content:none; 43 | } 44 | 45 | a { 46 | margin:0; 47 | padding:0; 48 | font-size:100%; 49 | vertical-align:baseline; 50 | background:transparent; 51 | } 52 | 53 | /* change colours to suit your needs */ 54 | ins { 55 | background-color:#ff9; 56 | color:#000; 57 | text-decoration:none; 58 | } 59 | 60 | /* change colours to suit your needs */ 61 | mark { 62 | background-color:#ff9; 63 | color:#000; 64 | font-style:italic; 65 | font-weight:bold; 66 | } 67 | 68 | del { 69 | text-decoration: line-through; 70 | } 71 | 72 | abbr[title], dfn[title] { 73 | border-bottom:1px dotted; 74 | cursor:help; 75 | } 76 | 77 | table { 78 | border-collapse:collapse; 79 | border-spacing:0; 80 | } 81 | 82 | /* change border colour to suit your needs */ 83 | hr { 84 | display:block; 85 | height:1px; 86 | border:0; 87 | border-top:1px solid #cccccc; 88 | margin:1em 0; 89 | padding:0; 90 | } 91 | 92 | input, select { 93 | vertical-align:middle; 94 | } -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/tenants/users.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="tenants" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | 13 | {% endblock %} 14 | 15 | {% block syspanel_main %} 16 |
17 | 18 | {% if users %} 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {% for user in users %} 27 | 28 | 29 | 30 | 35 | 36 | {% endfor %} 37 | 38 |
NameEmailActions
{{user.id}}{{user.email}} 31 |
    32 |
  • {% include "django_openstack/syspanel/tenants/_remove_user.html" with form=remove_user_form %}
  • 33 |
34 |
39 | {% else %} 40 |
41 |

Info

42 |

There are currently no users for this tenant

43 |
44 | {% endif %} 45 | {% if new_users %} 46 |

Add new users

47 | 48 | 49 | 50 | 51 | 52 | 53 | {% for user in new_users %} 54 | 55 | 56 | 61 | 62 | {% endfor %} 63 | 64 |
NameActions
{{user}} 57 |
    58 |
  • {% include "django_openstack/syspanel/tenants/_add_user.html" with form=add_user_form %}
  • 59 |
60 |
65 | {% endif %} 66 | 67 | {% endblock %} 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/templatetags/branding.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Template tags for working with django_openstack. 23 | """ 24 | 25 | from django import template 26 | from django.conf import settings 27 | 28 | 29 | register = template.Library() 30 | 31 | 32 | class SiteBrandingNode(template.Node): 33 | def render(self, context): 34 | return settings.SITE_BRANDING 35 | 36 | 37 | @register.tag 38 | def site_branding(parser, token): 39 | return SiteBrandingNode() 40 | 41 | 42 | @register.tag 43 | def site_title(parser, token): 44 | return settings.SITE_BRANDING 45 | 46 | 47 | # TODO(jeffjapan): This is just an assignment tag version of the above, replace 48 | # when the dashboard is upgraded to a django version that 49 | # supports the @assignment_tag decorator syntax instead. 50 | class SaveBrandingNode(template.Node): 51 | def __init__(self, var_name): 52 | self.var_name = var_name 53 | 54 | def render(self, context): 55 | context[self.var_name] = settings.SITE_BRANDING 56 | return "" 57 | 58 | 59 | @register.tag 60 | def save_site_branding(parser, token): 61 | tagname = token.contents.split() 62 | return SaveBrandingNode(tagname[-1]) 63 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/static/dashboard/js/jquery.example.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Form Example Plugin 1.4.3 3 | * Populate form inputs with example text that disappears on focus. 4 | * 5 | * e.g. 6 | * $('input#name').example('Bob Smith'); 7 | * $('input[@title]').example(function() { 8 | * return $(this).attr('title'); 9 | * }); 10 | * $('textarea#message').example('Type your message here', { 11 | * className: 'example_text' 12 | * }); 13 | * 14 | * Copyright (c) Paul Mucur (http://mucur.name), 2007-2008. 15 | * Dual-licensed under the BSD (BSD-LICENSE.txt) and GPL (GPL-LICENSE.txt) 16 | * licenses. 17 | * 18 | * This program is free software; you can redistribute it and/or modify 19 | * it under the terms of the GNU General Public License as published by 20 | * the Free Software Foundation; either version 2 of the License, or 21 | * (at your option) any later version. 22 | * 23 | * This program is distributed in the hope that it will be useful, 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 26 | * GNU General Public License for more details. 27 | */ 28 | (function(a){a.fn.example=function(e,g){var d=a.isFunction(e),f=a.extend({},g,{example:e});return this.each(function(){var c=a(this),b=a.metadata?a.extend({},a.fn.example.defaults,c.metadata(),f):a.extend({},a.fn.example.defaults,f);if(!a.fn.example.boundClassNames[b.className]){a(window).unload(function(){a("."+b.className).val("")});a("form").submit(function(){a(this).find("."+b.className).val("")});a.fn.example.boundClassNames[b.className]=true}if(!c.attr("defaultValue")&&(d||c.val()==b.example))c.val(""); 29 | if(c.val()==""&&this!=document.activeElement){c.addClass(b.className);c.val(d?b.example.call(this):b.example)}c.focus(function(){if(a(this).is("."+b.className)){a(this).val("");a(this).removeClass(b.className)}});c.change(function(){a(this).is("."+b.className)&&a(this).removeClass(b.className)});c.blur(function(){if(a(this).val()==""){a(this).addClass(b.className);a(this).val(d?b.example.call(this):b.example)}})})};a.fn.example.defaults={className:"example"};a.fn.example.boundClassNames=[]})(jQuery); 30 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/middleware.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | import logging 22 | 23 | from django import shortcuts 24 | from django.contrib import messages 25 | from openstackx.api import exceptions as api_exceptions 26 | 27 | LOG = logging.getLogger('openstack_dashboard') 28 | 29 | 30 | class DashboardLogUnhandledExceptionsMiddleware(object): 31 | def process_exception(self, request, exception): 32 | if isinstance(exception, api_exceptions.NotFound): 33 | try: 34 | exception.message.index('reauthenticate') 35 | # clear the errors 36 | for message in messages.get_messages(request): 37 | LOG.debug('Discarded message - %s: "%s"' 38 | % (message.tags, message.message)) 39 | messages.info(request, 'Your session has timed out.' 40 | ' Please log back in.') 41 | LOG.info('User "%s" auth token expired, redirecting to logout' 42 | % request.user.username) 43 | return shortcuts.redirect('auth_logout') 44 | 45 | except ValueError: 46 | pass 47 | 48 | LOG.critical('Unhandled Exception in of type "%s" in dashboard.' 49 | % type(exception), exc_info=True) 50 | -------------------------------------------------------------------------------- /openstack-dashboard/dashboard/urls.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | URL patterns for the OpenStack Dashboard. 23 | """ 24 | 25 | from django.conf.urls.defaults import * 26 | from django.conf.urls.static import static 27 | from django.conf import settings 28 | from django.contrib.staticfiles.urls import staticfiles_urlpatterns 29 | from django.views import generic as generic_views 30 | import django.views.i18n 31 | 32 | from django_openstack import urls as django_openstack_urls 33 | 34 | urlpatterns = patterns('', 35 | url(r'^$', 'dashboard.views.splash', name='splash'), 36 | url(r'^dash/$', 'django_openstack.dash.views.instances.usage', 37 | name='dash_overview'), 38 | url(r'^syspanel/$', 'django_openstack.syspanel.views.instances.usage', 39 | name='syspanel_overview'), 40 | ) 41 | 42 | # Development static app and project media serving using the staticfiles app. 43 | urlpatterns += staticfiles_urlpatterns() 44 | 45 | # Convenience function for serving user-uploaded media during 46 | # development. Only active if DEBUG==True and the URL prefix is a local 47 | # path. Production media should NOT be served by Django. 48 | urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 49 | 50 | # NOTE(termie): just append them since we want the routes at the root 51 | urlpatterns += django_openstack_urls.urlpatterns 52 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/dash/instances/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/dash/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="instances" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url dash_instances request.user.tenant as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Instances" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block dash_main %} 16 | {% if instances %} 17 | {% include 'django_openstack/dash/instances/_list.html' %} 18 | {% else %} 19 |
20 |

Info

21 |

There are currently no instances. You can launch an instance from the Images Page.

22 |
23 | {% endif %} 24 | {% endblock %} 25 | 26 | {% block footer_js %} 27 | 64 | {% endblock footer_js %} 65 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/services/_list.html: -------------------------------------------------------------------------------- 1 | {% load sizeformat %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {% for service in services %} 12 | 13 | 17 | {% if service.type == 'nova-compute' %} 18 | 40 | {% else %} 41 | 42 | {% endif %} 43 | 44 | 45 | 50 | 51 | {% endfor %} 52 | {% for service in other_services %} 53 | 54 | 58 | 59 | 60 | 61 | 62 | 63 | {% endfor %} 64 |
ServiceSystem StatsEnabledUpActions
14 | {{service.type}}
15 | ( {{service.host}} ) 16 |
19 |
    20 |
  • 21 | Hypervisor: {{service.stats.hypervisor_type}}( {{service.stats.cpu_info.features|join:', '}}) 22 |
  • 23 |
  • 24 | Allocable Cores: 25 | {{service.stats.max_vcpus}} 26 | ({{service.stats.vcpus_used}} Used, {{service.stats.vcpus}} Physical/Virtual) 27 |
  • 28 |
  • 29 | Allocable Storage: 30 | {{service.stats.max_gigabytes|diskgbformat}} 31 | ({{service.stats.local_gb_used|diskgbformat}} Used, {{service.stats.local_gb|diskgbformat}} Physical) 32 |
  • 33 |
  • 34 | System Ram: 35 | {{service.stats.memory_mb|mbformat}} 36 | ({{service.stats.memory_mb_used|mbformat}} Used) 37 |
  • 38 |
39 |
- {{service.disabled|yesno:"Disabled,Enabled"}}{{service.up}} 46 |
    47 |
  • {% include "django_openstack/syspanel/services/_toggle.html" with form=service_toggle_enabled_form %}
  • 48 |
49 |
55 | {{service.type}}
56 | ( {{service.host}} ) 57 |
- {{service.disabled|yesno:"Disabled,Enabled"}}{{service.up}}
65 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templates/django_openstack/syspanel/instances/index.html: -------------------------------------------------------------------------------- 1 | {% extends 'django_openstack/syspanel/base.html' %} 2 | 3 | {% block sidebar %} 4 | {% with current_sidebar="instances" %} 5 | {{block.super}} 6 | {% endwith %} 7 | {% endblock %} 8 | 9 | {% block page_header %} 10 | {% url syspanel_instances as refresh_link %} 11 | {# to make searchable false, just remove it from the include statement #} 12 | {% include "django_openstack/common/_page_header.html" with title="Instances" refresh_link=refresh_link searchable="true" %} 13 | {% endblock page_header %} 14 | 15 | {% block syspanel_main %} 16 | {% if instances %} 17 | {% include 'django_openstack/syspanel/instances/_list.html' %} 18 | {% else %} 19 |
20 |

Info

21 |

There are currently no instances. You can launch an instance from the Images Page.

22 |
23 | {% endif %} 24 | {% endblock %} 25 | 26 | {% block footer_js %} 27 | 64 | {% endblock footer_js %} 65 | 66 | -------------------------------------------------------------------------------- /openstack-dashboard/setup.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | import os 22 | import shutil 23 | from setuptools import setup, find_packages, findall 24 | 25 | def read(fname): 26 | return open(os.path.join(os.path.dirname(__file__), fname)).read() 27 | 28 | dst = 'debian/openstack-dashboard/var/lib/dash' 29 | os.system('rm -rf %s' % dst) 30 | shutil.copytree('tools', '%s/tools' % dst) 31 | shutil.copytree('dashboard', '%s/dashboard' % dst) 32 | shutil.copytree('local', '%s/local' % dst) 33 | 34 | 35 | setup( 36 | name = "openstack-dashboard", 37 | version = "0.2", 38 | url = 'https://github.com/cloudbuilders/openstack-dashboard.git', 39 | license = 'Apache 2.0', 40 | description = "A Django interface for OpenStack.", 41 | long_description = read('README'), 42 | author = 'Devin Carlen', 43 | author_email = 'devin.carlen@gmail.com', 44 | # packages = find_packages(), 45 | # package_data = {'openstack-dashboard': 46 | # [s[len('dashboard/'):] for s in 47 | # findall('dashboard/templates')]}, 48 | 49 | data_files = [], 50 | install_requires = ['setuptools', 'mox>=0.5.0'], 51 | zip_safe = False, 52 | classifiers = [ 53 | 'Development Status :: 4 - Beta', 54 | 'Framework :: Django', 55 | 'Intended Audience :: Developers', 56 | 'License :: OSI Approved :: Apache License', 57 | 'Operating System :: OS Independent', 58 | 'Programming Language :: Python', 59 | 'Topic :: Internet :: WWW/HTTP', 60 | ] 61 | ) 62 | 63 | -------------------------------------------------------------------------------- /django-openstack/django_openstack/templatetags/templatetags/parse_date.py: -------------------------------------------------------------------------------- 1 | # vim: tabstop=4 shiftwidth=4 softtabstop=4 2 | 3 | # Copyright 2011 United States Government as represented by the 4 | # Administrator of the National Aeronautics and Space Administration. 5 | # All Rights Reserved. 6 | # 7 | # Copyright 2011 Nebula, Inc. 8 | # 9 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 10 | # not use this file except in compliance with the License. You may obtain 11 | # a copy of the License at 12 | # 13 | # http://www.apache.org/licenses/LICENSE-2.0 14 | # 15 | # Unless required by applicable law or agreed to in writing, software 16 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 17 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 18 | # License for the specific language governing permissions and limitations 19 | # under the License. 20 | 21 | """ 22 | Template tags for parsing date strings. 23 | """ 24 | 25 | import datetime 26 | from django import template 27 | from dateutil import tz 28 | 29 | 30 | register = template.Library() 31 | 32 | 33 | def _parse_datetime(dtstr): 34 | fmts = ["%Y-%m-%dT%H:%M:%S.%f", "%Y-%m-%d %H:%M:%S.%f", 35 | "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"] 36 | for fmt in fmts: 37 | try: 38 | return datetime.datetime.strptime(dtstr, fmt) 39 | except: 40 | pass 41 | 42 | 43 | class ParseDateNode(template.Node): 44 | def render(self, context): 45 | """Turn an iso formatted time back into a datetime.""" 46 | if context == None: 47 | return "None" 48 | date_obj = _parse_datetime(context) 49 | return date_obj.strftime("%m/%d/%y at %H:%M:%S") 50 | 51 | 52 | @register.filter(name='parse_date') 53 | def parse_date(value): 54 | return ParseDateNode().render(value) 55 | 56 | 57 | @register.filter(name='parse_datetime') 58 | def parse_datetime(value): 59 | return _parse_datetime(value) 60 | 61 | 62 | @register.filter(name='parse_local_datetime') 63 | def parse_local_datetime(value): 64 | dt = _parse_datetime(value) 65 | local_tz = tz.tzlocal() 66 | utc = tz.gettz('UTC') 67 | local_dt = dt.replace(tzinfo=utc) 68 | return local_dt.astimezone(local_tz) 69 | 70 | 71 | @register.filter(name='pretty_date') 72 | def pretty_date(value): 73 | return value.strftime("%d/%m/%y at %H:%M:%S") 74 | --------------------------------------------------------------------------------