Hello community,
here is the log from the commit of package openstack-dashboard for openSUSE:Factory checked in at 2012-12-08 15:52:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openstack-dashboard (Old)
and /work/SRC/openSUSE:Factory/.openstack-dashboard.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openstack-dashboard", Maintainer is "CThiel@suse.com"
Changes:
--------
New Changes file:
--- /dev/null 2012-11-30 12:21:47.308011256 +0100
+++ /work/SRC/openSUSE:Factory/.openstack-dashboard.new/openstack-dashboard.changes 2012-12-08 15:52:17.000000000 +0100
@@ -0,0 +1,273 @@
+-------------------------------------------------------------------
+Fri Dec 7 11:19:52 UTC 2012 - vuntz@suse.com
+
+- Comment out python-selenium Requires from test subpackage: the
+ selenium tests are not run by default, and pushing selenium to
+ Factory would require too much time for now.
+
+-------------------------------------------------------------------
+Thu Nov 8 13:34:00 UTC 2012 - saschpe@suse.de
+
+- Drop from_vcs build flag
+
+-------------------------------------------------------------------
+Tue Oct 30 10:29:30 UTC 2012 - saschpe@suse.de
+
+- Add horizon-launch-from-volume.patch: Launch from volume with valid
+ volume size (fixes bnc#780982, lp#1047568)
+
+-------------------------------------------------------------------
+Mon Oct 8 15:25:42 UTC 2012 - saschpe@suse.de
+
+- Update (green) branding: Ship local copies of various Google fonts
+ (bnc#772230)
+
+-------------------------------------------------------------------
+Mon Oct 1 15:05:08 UTC 2012 - saschpe@suse.de
+
+- Add horizon-suse-branding.patch: SUSE Cloud branding according
+ to documentation (bnc#770065)
+
+-------------------------------------------------------------------
+Sun Sep 16 18:20:10 UTC 2012 - jenkins@suse.de
+
+- Update to latest git (35eada8):
+ + Do not crash when deleting image or volume with no name (bnc#776890)
+ + Fix open redirect in Horizon. (bnc#776559)
+
+-------------------------------------------------------------------
+Wed Sep 12 11:09:15 UTC 2012 - vuntz@suse.com
+
+- Do not use a sed to modify /usr/bin/gensslcert in %post: this
+ file belongs to another package, and we actually don't do any
+ change with the sed... Fix bnc#779747.
+
+-------------------------------------------------------------------
+Mon Sep 10 09:06:01 UTC 2012 - vuntz@suse.com
+
+- Add horizon-keep-image-properties.patch: fix the test accordingly
+ too. This test isn't in Folsom anymore, so wasn't in the
+ backported patch.
+
+-------------------------------------------------------------------
+Mon Sep 3 12:00:15 UTC 2012 - vuntz@suse.com
+
+- Add horizon-keep-image-properties.patch: do not lose properties
+ when editing an image. Fix bnc#777855.
+
+-------------------------------------------------------------------
+Tue Aug 28 15:04:05 UTC 2012 - jenkins@suse.de
+
+- Update to latest git (f862d9e):
+ + Corrects the CSV download link for overview pages.
+
+-------------------------------------------------------------------
+Fri Aug 24 10:08:57 UTC 2012 - jdsn@suse.com
+
+- refresh patch in order to apply with no fuzz
+
+-------------------------------------------------------------------
+Thu Aug 23 14:12:53 UTC 2012 - vuntz@opensuse.org
+
+- Update horizon-login-no-phishing.patch with patch from upstream.
+
+-------------------------------------------------------------------
+Thu Aug 23 09:14:45 UTC 2012 - vuntz@suse.com
+
+- Add horizon-crash-no-name.patch: fix crash when deleting image or
+ volume with no name. Fix bnc#776890.
+
+-------------------------------------------------------------------
+Wed Aug 22 06:55:06 UTC 2012 - cthiel@suse.com
+
+- add vnc-iframe-size.patch to improve vnc iframe size and avoid scrollbars
+
+-------------------------------------------------------------------
+Mon Aug 20 13:56:22 UTC 2012 - vuntz@suse.com
+
+- Add horizon-login-no-phishing.patch: fix an open redirect /
+ phishing attack. Fix bnc#776559.
+
+-------------------------------------------------------------------
+Mon Aug 20 12:00:21 UTC 2012 - bwiedemann@suse.com
+
+- add minimum password length check in sample config
+
+-------------------------------------------------------------------
+Tue Aug 14 22:49:12 UTC 2012 - jenkins@suse.de
+
+- Update to latest git (691dd22):
+ + Fixed validation check for ICMP rules
+ + Bump version to 2012.1.3
+
+-------------------------------------------------------------------
+Tue Aug 14 22:47:33 UTC 2012 - cthiel@suse.com
+
+- remove 7b565fc9-fixed-validation-ICMP.patch, which has been merged upstream
+ https://review.openstack.org/#/c/10078/
+
+-------------------------------------------------------------------
+Mon Aug 13 22:06:44 UTC 2012 - jenkins@suse.de
+
+- Update to latest git (52bbba1):
+ + Added --only-selenium option in run_tests.sh
+
+-------------------------------------------------------------------
+Fri Aug 3 17:20:30 UTC 2012 - vuntz@suse.com
+
+- Update suse-patches.diff: remove part that was making us not
+ handle swiftclient.Error exceptions, which was causing
+ bnc#773186.
+
+-------------------------------------------------------------------
+Tue Jul 31 17:08:13 UTC 2012 - jdsn@suse.de
+
+- fix template syntax error in user filter (bnc#771667)
+
+-------------------------------------------------------------------
+Mon Jul 30 15:29:37 UTC 2012 - saschpe@suse.de
+
+- More SSl fixes, renamed patch to horizon-ssl.patch therefore
+
+-------------------------------------------------------------------
+Wed Jul 25 11:24:47 UTC 2012 - saschpe@suse.de
+
+- Secure file permissions for Apache SSL certificate files
+
+-------------------------------------------------------------------
+Tue Jul 24 12:58:20 UTC 2012 - saschpe@suse.de
+
+- Drop directory /var/log/openstack_dashboard, it was previously
+ used by Apache2 vhosts that are now using /var/log/apache2
+
+-------------------------------------------------------------------
+Mon Jul 23 15:05:28 UTC 2012 - saschpe@suse.de
+
+- Remote temporary hack agin, no need to uncoditionally disable
+ SSL certificate verification anymore
+
+-------------------------------------------------------------------
+Mon Jul 23 10:47:24 UTC 2012 - cthiel@suse.com
+
+- fix test case for horizon-insecure-ssl.patch
+
+-------------------------------------------------------------------
+Mon Jul 23 09:54:04 UTC 2012 - cthiel@suse.com
+
+- fix test part of 7b565fc9-fixed-validation-ICMP.patch
+
+-------------------------------------------------------------------
+Fri Jul 20 06:50:09 UTC 2012 - cthiel@suse.com
+
+- add 7b565fc9-fixed-validation-ICMP.patch, backport of
+ https://review.openstack.org/#/c/8446 (fixes bnc#771658)
+
+-------------------------------------------------------------------
+Tue Jul 17 10:28:32 UTC 2012 - saschpe@suse.de
+
+- Add horizon-insecure-ssl.patch to allow disabling SSl certificate
+ validity checks (useful for debugging / self-signed certificates)
+- Avoid packaging language files twice
+
+-------------------------------------------------------------------
+Mon Jul 9 14:43:09 UTC 2012 - saschpe@suse.de
+
+- Provide Apache2 example configuration
+
+-------------------------------------------------------------------
+Fri Jul 6 12:45:10 UTC 2012 - saschpe@suse.de
+
+- Fixed yet another typo in horizon-secure_SECRET_KEY.patch
+
+-------------------------------------------------------------------
+Wed Jul 4 14:33:21 UTC 2012 - saschpe@suse.de
+
+- Fixed horizon-secure_SECRET_KEY.patch, it still contained
+ debug code
+
+-------------------------------------------------------------------
+Fri Jun 29 09:28:31 UTC 2012 - saschpe@suse.de
+
+- Remove requires on "openstack-quantum" as there seems to be no
+ support for it
+
+-------------------------------------------------------------------
+Wed Jun 27 10:49:34 UTC 2012 - saschpe@suse.de
+
+- Change versioning scheme to $release+git.$AUTHORDATE.$COMMITREV
++++ 76 more lines (skipped)
++++ between /dev/null
++++ and /work/SRC/openSUSE:Factory/.openstack-dashboard.new/openstack-dashboard.changes
New:
----
_service
backports.patch
green.tar.gz
horizon-2012.1+git.1346336140.35eada8.tar.gz
horizon-keep-image-properties.patch
horizon-launch-from-volume.patch
horizon-minimumpwlen.patch
horizon-secure_SECRET_KEY.patch
horizon-ssl.patch
horizon-suse-branding.patch
openstack-dashboard.changes
openstack-dashboard.conf.sample
openstack-dashboard.spec
rpmlintrc
suse-patches.diff
vnc-iframe-size.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openstack-dashboard.spec ++++++
#
# spec file for package openstack-dashboard
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define component horizon
Name: openstack-dashboard
Version: 2012.1+git.1346336140.35eada8
Release: 0
License: Apache-2.0
Summary: OpenStack Dashboard (Horizon)
Url: http://wiki.openstack.org/OpenStackDashboard
Group: Development/Languages/Python
Source: %{component}-%{version}.tar.gz
Source1: green.tar.gz
# Apache2 example configuration:
Source2: openstack-dashboard.conf.sample
Patch0: suse-patches.diff
Patch2: backports.patch
# PATCH-FIX-UPSTREAM: Backport of https://review.openstack.org/#/c/8799
Patch3: horizon-secure_SECRET_KEY.patch
# PATCH-FIX-OPENSUSE: Backport of several SSL-related fixes
Patch4: horizon-ssl.patch
# backport https://review.openstack.org/#/c/5204/7/horizon/tests/testsettings.py,unifie...
Patch5: horizon-minimumpwlen.patch
Patch7: vnc-iframe-size.patch
# PATCH-FIX-UPSTREAM horizon-keep-image-properties.patch bnc#777855 vuntz@suse.com -- Do not lose properties when editing an image, cherry-picked from Folsom
Patch9: horizon-keep-image-properties.patch
# PATCH-FIX-OPENSUSE: SUSE Cloud branding
Patch10: horizon-suse-branding.patch
# PATCH-FIX-UPSTREAM horizon-launch-from-volume-.patch bnc#780982 saschpe@susee.de -- Launch from volume with valid volume size
Patch11: horizon-launch-from-volume.patch
BuildRequires: apache2
BuildRequires: fdupes
BuildRequires: python-devel
BuildRequires: python-setuptools
Requires: apache2
Requires: apache2-mod_wsgi
# temporary requires - there will (most likely) be patterns with and without the config subpackage
Requires: openstack-dashboard-config = %{version}
Requires: python >= 2.6.8
Requires: python-cloudfiles
Requires: python-dateutil
Requires: python-django >= 1.4
Requires: python-glance
Requires: python-horizon = %{version}
Requires: python-keystoneclient
# For secure SECRET_KEY generation:
Requires: python-lockfile
Requires: python-novaclient
Recommends: openstack-novncproxy
# Can't hurt to also provide openstack-horizon:
Provides: openstack-%{component} = %{version}
BuildRoot: %{_tmppath}/%{name}-%{version}-build
# To generate a self-signed certificate to be used in demo setups:
Requires(post): apache2-utils
Requires(post): openssl
Requires(post): sysconfig
%if 0%{?suse_version} && 0%{?suse_version} <= 1110
%{!?python_sitelib: %global python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
%else
BuildArch: noarch
%endif
%description
The OpenStack dashboard provides administrators and users a graphical
interface to access, provision and automate cloud-based resources. The
extensible design makes it easy to plug in and expose third party
products and services, such as billing, monitoring and additional
management tools.
The dashboard is just one way to interact with OpenStack resources.
Developers can automate access or build tools to manage their resources
using the native OpenStack API or the EC2 compatibility API.
%package -n python-horizon
Summary: OpenStack Dashboard (Horizon) - Python module
Group: Development/Languages/Python
#TODO/FIXME: This shouldn't be needed:
#Requires: %%{name} = %%{version}
%description -n python-horizon
The Python module horizon is the core component of the OpenStack
dashboard.
%package config
Summary: OpenStack Dashboard (Horizon) - Default configuration
Group: Development/Languages/Python
Requires: %{name} = %{version}
%description config
A default configuration for the OpenStack dashboard. It is provides
best-practices and recommendations.
%package test
Summary: OpenStack Dashboard (Horizon) - Testsuite
Group: Development/Languages/Python
Requires: %{name} = %{version}
Requires: python-coverage
Requires: python-django-nose
Requires: python-django-nose-selenium
# Disabled: the selenium tests are not run by default, and pushing selenium to
# Factory would require too much time for now. We might need to patch the
# source to kill the selenium-related import later, though.
#Requires: python-selenium
%description test
The OpenStack dashboard testsuite. It is used to verify the
functionality of the OpenStack dashboard and its components.
%prep
%setup -q -n %{component}-%{version}
tar xf %{SOURCE1} ; cp -a green/* openstack_dashboard/static/dashboard/
%patch0 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch7
%patch9 -p1
%patch10 -p1
%patch11 -p1
# Fix non-executable script rpmlint warning:
sed -i "/\#\!\/bin\/bash/d" horizon/dashboards/settings/templates/settings/{ec2/ec2rc.sh,project/openrc.sh}.template
%build
python setup.py build
%install
install -d -m 755 %{buildroot}%{_localstatedir}/lib/openstack-dashboard
install -d -m 755 %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard
install -d -m 755 %{buildroot}%{_localstatedir}/lib/openstack-dashboard/horizon
# test subpackage
install -d -m 755 %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test
cp -av .pylintrc * %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test
find %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test -name ".gitignore" | xargs rm -f
rm -rf %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test/horizon
rm -rf %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test/openstack_dashboard
ln -s %{python_sitelib}/horizon %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test/horizon
ln -s %{python_sitelib}/openstack_dashboard %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test/openstack_dashboard
python setup.py install --prefix=%{_prefix} --root=%{buildroot} --record-rpm=INSTALLED_FILES_ALL
cp -av manage.py %{buildroot}%{_localstatedir}/lib/openstack-dashboard/
pushd openstack_dashboard
cp -av local static wsgi %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard
cp -av templates %{buildroot}%{python_sitelib}/openstack_dashboard/
popd
pushd horizon
cp -av static locale %{buildroot}%{_localstatedir}/lib/openstack-dashboard/horizon
popd
mv %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/local_settings.py.example %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/local_settings.py
cat <<EOF >> %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/local_settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(LOCAL_PATH, 'dashboard_openstack.sqlite3'),
'TEST_NAME': os.path.join(LOCAL_PATH, 'test.sqlite3'),
},
}
# Use HttpOnly CSRF cookie:
CSRF_COOKIE_HTTPONLY = True
# SUSE Branding (currently only used in HTML <title> tags):
SITE_BRANDING = 'SUSE Cloud'
EOF
# Use secure SECRET_KEY generation for local_settings.py (bnc#755607):
sed -i -e "s|\# \(from horizon\.utils import secret_key\)|\1|" \
-e "s|\# \(SECRET_KEY = .*\)|\1|" %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/local_settings.py
(cd %{buildroot}%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/static/ ; find -type f | xargs chmod a-x )
# remove local settings file from python module
# this belongs 1. in /var and 2. in the config sub package, see below
rm -rf %{buildroot}%{python_sitelib}/openstack_dashboard/local
# link local settings
ln -s %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local %{buildroot}%{python_sitelib}/openstack_dashboard/local
# remove duplicate files
%if 0%{?suse_version}
%fdupes %{buildroot}%{python_sitelib}
%fdupes %{buildroot}%{_localstatedir}/lib/openstack-dashboard
%fdupes %{buildroot}%{_localstatedir}/lib/openstack-dashboard-test
%endif
#remove po files
find %{buildroot}%{_localstatedir}/lib/openstack-dashboard/horizon/locale -name "*.po" | xargs rm -f
# Apache2 SSL certificate stubs (generated in %%post)
install -d %{buildroot}%{_sysconfdir}/apache2/ssl.{crt,csr,key}
install -d %{buildroot}/srv/www/htdocs
touch %{buildroot}%{_sysconfdir}/apache2/ssl.key/openstack-dashboard-{ca,server}.key
touch %{buildroot}%{_sysconfdir}/apache2/ssl.csr/openstack-dashboard-server.csr
touch %{buildroot}%{_sysconfdir}/apache2/ssl.crt/openstack-dashboard-{ca,server}.crt
# Apache2 sample configuration
install -d %{buildroot}%{_sysconfdir}/apache2/conf.d
install -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/apache2/conf.d/openstack-dashboard.conf.sample
#TODO: Maybe move Apache2-related stuff + certs into sub-package?
%post
if [ ! -s %{_sysconfdir}/apache2/ssl.csr/openstack-dashboard-server.csr ] ; then
# Generate a self-signed certificate to be used in non-production Dashboard setups:
(umask 377 ; /usr/bin/gensslcert -C openstack-dashboard -n openstack-dashboard.example.com)
fi
%files
%defattr(-,root,root)
%dir %{_localstatedir}/lib/openstack-dashboard
%dir %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard
%dir %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/wsgi
%dir %attr(0750, wwwrun, www) %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local
%dir %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/static
%dir %{_localstatedir}/lib/openstack-dashboard/horizon
%dir %{_localstatedir}/lib/openstack-dashboard/horizon/static
%{_localstatedir}/lib/openstack-dashboard/manage.py
%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/static/*
%{_localstatedir}/lib/openstack-dashboard/horizon/static/*
%{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
# lang files
%dir %{_localstatedir}/lib/openstack-dashboard/horizon/locale
%dir %{_localstatedir}/lib/openstack-dashboard/horizon/locale/*
%dir %{_localstatedir}/lib/openstack-dashboard/horizon/locale/*/LC_MESSAGES
%lang(es) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/es/LC_MESSAGES/django.mo
%lang(fr) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/fr/LC_MESSAGES/django.mo
%lang(ja) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/ja/LC_MESSAGES/django.mo
%lang(pl) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/pl/LC_MESSAGES/django.mo
%lang(pt) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/pt/LC_MESSAGES/django.mo
#%%lang(zh-cn) %%{_localstatedir}/lib/openstack-dashboard/horizon/locale/zh_CN/LC_MESSAGES/django.mo
%lang(zh-tw) %{_localstatedir}/lib/openstack-dashboard/horizon/locale/zh_TW/LC_MESSAGES/django.mo
%ghost %{_sysconfdir}/apache2/ssl.key/openstack-dashboard-*.key
%ghost %{_sysconfdir}/apache2/ssl.csr/openstack-dashboard-server.csr
%ghost %{_sysconfdir}/apache2/ssl.crt/openstack-dashboard-*.crt
%{_sysconfdir}/apache2/conf.d/openstack-dashboard.conf.sample
%files config
%defattr(0750,root,root)
%dir %attr(0750, wwwrun, www) %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local
%attr(0640, wwwrun, www) %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/__init__.py
%config(noreplace) %attr(0640, wwwrun, www) %{_localstatedir}/lib/openstack-dashboard/openstack_dashboard/local/local_settings.py
%files -n python-horizon
%defattr(-,root,root)
%{python_sitelib}/*
%files test
%defattr(-,root,root)
%{_localstatedir}/lib/openstack-dashboard-test/
%{_localstatedir}/lib/openstack-dashboard-test/.pylintrc
%changelog
++++++ _service ++++++
<services>
<service name="tar_scm" mode="disabled">
<param name="url">git://github.com/openstack/horizon.git</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
<param name="exclude">.gitreview</param>
<param name="version">git-master</param>
<param name="versionformat">2012.1+git.%ct.%h</param>
<!-- Use this if you want a specific revision. -->
<param name="revision">stable/essex</param>
</service>
<service name="recompress" mode="disabled">
<param name="file">horizon-*git*.tar</param>
<param name="compression">gz</param>
</service>
<service name="set_version" mode="disabled">
<param name="basename">horizon</param>
</service>
</services>
++++++ backports.patch ++++++
Index: horizon-git-2012.1.1336725470.master.8f1ea73/AUTHORS
===================================================================
--- horizon-git-2012.1.1336725470.master.8f1ea73.orig/AUTHORS
+++ horizon-git-2012.1.1336725470.master.8f1ea73/AUTHORS
@@ -3,6 +3,7 @@ Andrews Medina
Andy Chong
Anthony Young
Arvind Somya
+Bernhard M. Wiedemann
Carlo Truijllo
Chuck Short
Cole Robinson
Index: horizon-git-2012.1.1336725470.master.8f1ea73/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html
===================================================================
--- horizon-git-2012.1.1336725470.master.8f1ea73.orig/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html
+++ horizon-git-2012.1.1336725470.master.8f1ea73/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html
@@ -2,7 +2,7 @@
<h3>{% trans "Instance VNC Console" %}</h3>
{% if vnc_url %}
-<p class='alert alert-info'>{% blocktrans %}If VNC console is not responding to keyboard input: click the grey status bar below.{% endblocktrans %}</p>
+<p class='alert alert-info'>{% blocktrans %}If VNC console is not responding to keyboard input: click the grey status bar below.{% endblocktrans %} <a href="{{ vnc_url }}">{% trans "Click here to show only VNC" %}</a></p>
<iframe src="{{ vnc_url }}" width="720" height="430"></iframe>
{% else %}
<p class='alert alert-error'>{% blocktrans %}VNC console is currently unavailabe. Please try again later.{% endblocktrans %}
++++++ horizon-keep-image-properties.patch ++++++
commit 5e20e7cc11a15820ebc8b829ee485780268eb8e1
Author: Jay Pipes
Date: Sun Jun 17 13:21:46 2012 -0400
Ensure existing image properties are not deleted
Fixes LP #1014226
Passing the X-Glance-Registry-Purge-Props: false
header to the image_update Glance client method
prevents previously-set image properties from being
marked deleted.
Change-Id: I91e927f8c95205cae11bad0d93361f1c9951d62d
Index: horizon-2012.1+git.1344968911.f862d9e/horizon/dashboards/nova/images_and_snapshots/images/forms.py
===================================================================
--- horizon-2012.1+git.1344968911.f862d9e.orig/horizon/dashboards/nova/images_and_snapshots/images/forms.py
+++ horizon-2012.1+git.1344968911.f862d9e/horizon/dashboards/nova/images_and_snapshots/images/forms.py
@@ -83,6 +83,9 @@ class UpdateImageForm(forms.SelfHandling
meta['properties']['architecture'] = data['architecture']
try:
+ # Ensure we do not delete properties that have already been
+ # set on an image.
+ meta['features'] = {'X-Glance-Registry-Purge-Props': False}
api.image_update(request, image_id, meta)
messages.success(request, _('Image was successfully updated.'))
except:
Index: horizon-2012.1+git.1344968911.f862d9e/horizon/dashboards/nova/images_and_snapshots/images/tests.py
===================================================================
--- horizon-2012.1+git.1344968911.f862d9e.orig/horizon/dashboards/nova/images_and_snapshots/images/tests.py
+++ horizon-2012.1+git.1344968911.f862d9e/horizon/dashboards/nova/images_and_snapshots/images/tests.py
@@ -54,7 +54,8 @@ class ImageViewTests(test.TestCase):
'container_format': u'new_format',
'is_public': False,
'disk_format': u'new_disk_format',
- 'properties': {}}
+ 'properties': {},
+ 'features': {'X-Glance-Registry-Purge-Props': False}}
self.mox.StubOutWithMock(api, 'image_get_meta')
self.mox.StubOutWithMock(api, 'image_update')
++++++ horizon-launch-from-volume.patch ++++++
commit fd2291bd28a5a4331d9a7baf961c76effd17b85a
Author: Sascha Peilicke
Date: Thu Oct 18 09:29:46 2012 +0200
Launch from volume with valid volume size, fixes bug 1047568
Change-Id: I05546ef27f9ab1930ad8a6c8273d133af785db77
diff --git a/AUTHORS b/AUTHORS
index 4110431..677253f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -41,6 +41,7 @@ Monty Taylor
Neil Johnston
Paul McMillan
Sam Morrison
+Sascha Peilicke
Stephane Angot
termie
Thierry Carrez
diff --git a/horizon/dashboards/nova/images_and_snapshots/images/forms.py b/horizon/dashboards/nova/images_and_snapshots/images/forms.py
index bc4851d..a6cdbad 100644
--- a/horizon/dashboards/nova/images_and_snapshots/images/forms.py
+++ b/horizon/dashboards/nova/images_and_snapshots/images/forms.py
@@ -164,7 +164,7 @@ class LaunchForm(forms.SelfHandlingForm):
else:
delete_on_terminate = 0
dev_mapping = {data['device_name']:
- ("%s::%s" % (data['volume'], delete_on_terminate))}
+ ("%s:%s" % (data['volume'], delete_on_terminate))}
else:
dev_mapping = None
diff --git a/horizon/dashboards/nova/images_and_snapshots/images/tests.py b/horizon/dashboards/nova/images_and_snapshots/images/tests.py
index aa02325..3615288 100644
--- a/horizon/dashboards/nova/images_and_snapshots/images/tests.py
+++ b/horizon/dashboards/nova/images_and_snapshots/images/tests.py
@@ -118,8 +118,8 @@ class ImageViewTests(test.TestCase):
sec_group = self.security_groups.first()
USER_DATA = 'user data'
device_name = u'vda'
- volume_choice = "%s:vol" % volume.id
- block_device_mapping = {device_name: u"%s::0" % volume_choice}
+ volume_choice = "%s:vol:%s" % (volume.id, volume.size)
+ block_device_mapping = {device_name: u"%s:0" % volume_choice}
self.mox.StubOutWithMock(api, 'image_get_meta')
self.mox.StubOutWithMock(api, 'flavor_list')
@@ -269,7 +269,7 @@ class ImageViewTests(test.TestCase):
sec_group = self.security_groups.first()
USER_DATA = 'user data'
device_name = u'vda'
- volume_choice = "%s:vol" % volume.id
+ volume_choice = "%s:vol:%s" % (volume.id, volume.size)
self.mox.StubOutWithMock(api, 'image_get_meta')
self.mox.StubOutWithMock(api, 'flavor_list')
diff --git a/horizon/dashboards/nova/images_and_snapshots/images/views.py b/horizon/dashboards/nova/images_and_snapshots/images/views.py
index 1803f97..0b6ec5c 100644
--- a/horizon/dashboards/nova/images_and_snapshots/images/views.py
+++ b/horizon/dashboards/nova/images_and_snapshots/images/views.py
@@ -117,7 +117,7 @@ class LaunchView(forms.ModalFormView):
else:
vol_type = "vol"
visible_label = _("Volume")
- return (("%s:%s" % (volume.id, vol_type)),
+ return (("%s:%s:%s" % (volume.id, vol_type, volume.size)),
("%s - %s GB (%s)" % (volume.display_name,
volume.size,
visible_label)))
++++++ horizon-minimumpwlen.patch ++++++
Index: horizon-2012.1+git.1344931337.691dd22/openstack_dashboard/local/local_settings.py.example
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/openstack_dashboard/local/local_settings.py.example
+++ horizon-2012.1+git.1344931337.691dd22/openstack_dashboard/local/local_settings.py.example
@@ -8,12 +8,12 @@ PROD = False
USE_SSL = False
# Specify a regular expression to validate user passwords.
-# HORIZON_CONFIG = {
-# "password_validator": {
-# "regex": '.*',
-# "help_text": _("Your password does not meet the requirements.")
-# }
-# }
+HORIZON_CONFIG = {
+ "password_validator": {
+ "regex": '.{8,}',
+ "help_text": _("Your password must be at least 8 characters long.")
+ }
+}
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
++++++ horizon-secure_SECRET_KEY.patch ++++++
diff -ruN a/.gitignore b/.gitignore
--- a/.gitignore 2012-06-05 15:43:17.000000000 +0200
+++ b/.gitignore 2012-06-25 15:36:16.029765418 +0200
@@ -10,6 +10,7 @@
reports
horizon.egg-info
openstack_dashboard/local/local_settings.py
+openstack_dashboard/test/.secret_key_store
docs/build/
docs/source/sourcecode
.venv
diff -ruN a/horizon/tests/utils_tests.py b/horizon/tests/utils_tests.py
--- a/horizon/tests/utils_tests.py 2012-06-05 15:43:17.000000000 +0200
+++ b/horizon/tests/utils_tests.py 2012-06-25 15:36:32.677765799 +0200
@@ -15,8 +15,11 @@
# under the License.
+import os
+
from horizon import test
from horizon.utils import validators
+from horizon.utils import secret_key
class ValidatorsTests(test.TestCase):
@@ -40,3 +43,26 @@
self.assertTrue(validators.ipv4_cidr_re.match(cidr))
for cidr in BAD_CIDRS:
self.assertFalse(validators.ipv4_cidr_re.match(cidr))
+
+
+class SecretKeyTests(test.TestCase):
+ def test_generate_secret_key(self):
+ key = secret_key.generate_key(32)
+ self.assertEqual(len(key), 32)
+ self.assertNotEqual(key, secret_key.generate_key(32))
+
+ def test_generate_or_read_key_from_file(self):
+ key_file = ".test_secret_key_store"
+ key = secret_key.generate_or_read_from_file(key_file)
+
+ # Consecutive reads should come from the already existing file:
+ self.assertEqual(key, secret_key.generate_or_read_from_file(key_file))
+
+ # Key file only be read/writable by user:
+ self.assertEqual(oct(os.stat(key_file).st_mode & 0777), "0600")
+ os.chmod(key_file, 0777)
+ self.assertRaises(secret_key.FilePermissionError,
+ secret_key.generate_or_read_from_file, key_file)
+ os.chmod(key_file, 0600)
+
+ os.remove(key_file) # Cleanup
diff -ruN a/horizon/utils/secret_key.py b/horizon/utils/secret_key.py
--- a/horizon/utils/secret_key.py 1970-01-01 01:00:00.000000000 +0100
+++ b/horizon/utils/secret_key.py 2012-06-25 15:37:13.443766746 +0200
@@ -0,0 +1,68 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 Nebula, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+from __future__ import with_statement # Python 2.5 compliance
+
+import lockfile
+import random
+import string
+import tempfile
+import os
+
+
+class FilePermissionError(Exception):
+ """The key file permissions are insecure."""
+ pass
+
+
+def generate_key(key_length=64):
+ """Secret key generator.
+
+ The quality of randomness depends on operating system support,
+ see http://docs.python.org/library/random.html#random.SystemRandom.
+ """
+ if hasattr(random, 'SystemRandom'):
+ choice = random.SystemRandom().choice
+ else:
+ choice = random.choice
+ return ''.join(map(lambda x: choice(string.digits + string.letters),
+ range(key_length)))
+
+
+def generate_or_read_from_file(key_file='.secret_key', key_length=64):
+ """Multiprocess-safe secret key file generator.
+
+ Useful to replace the default (and thus unsafe) SECRET_KEY in settings.py
+ upon first start. Save to use, i.e. when multiple Python interpreters
+ serve the dashboard Django application (e.g. in a mod_wsgi + daemonized
+ environment). Also checks if file permissions are set correctly and
+ throws an exception if not.
+ """
+ lock = lockfile.FileLock(key_file)
+ with lock:
+ if not os.path.exists(key_file):
+ key = generate_key(key_length)
+ old_umask = os.umask(0177) # Use '0600' file permissions
+ with open(key_file, 'w') as f:
+ f.write(key)
+ os.umask(old_umask)
+ else:
+ if oct(os.stat(key_file).st_mode & 0777) != '0600':
+ raise FilePermissionError("Insecure key file permissions!")
+ with open(key_file, 'r') as f:
+ key = f.readline()
+ return key
diff -ruN a/openstack_dashboard/local/local_settings.py.example b/openstack_dashboard/local/local_settings.py.example
--- a/openstack_dashboard/local/local_settings.py.example 2012-06-05 15:43:17.000000000 +0200
+++ b/openstack_dashboard/local/local_settings.py.example 2012-06-25 15:38:21.185768316 +0200
@@ -7,9 +7,6 @@
PROD = False
USE_SSL = False
-# Note: You should change this value
-SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0'
-
# Specify a regular expression to validate user passwords.
# HORIZON_CONFIG = {
# "password_validator": {
@@ -20,6 +17,18 @@
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
+# Set custom secret key:
+# You can either set it to a specific value or you can let horizion generate a
+# default secret key that is unique on this machine, e.i. regardless of the
+# amount of Python WSGI workers (if used behind Apache+mod_wsgi): However, there
+# may be situations where you would want to set this explicitly, e.g. when
+# multiple dashboard instances are distributed on different machines (usually
+# behind a load-balancer). Either you have to make sure that a session gets all
+# requests routed to the same dashboard instance or you set the same SECRET_KEY
+# for all of them.
+# from horizon.utils import secret_key
+# SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))
+
# We recommend you use memcached for development; otherwise after every reload
# of the django development server, you will have to login again. To use
# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/'
diff -ruN a/tools/pip-requires b/tools/pip-requires
--- a/tools/pip-requires 2012-06-05 15:43:17.000000000 +0200
+++ b/tools/pip-requires 2012-06-25 15:38:34.263768622 +0200
@@ -17,6 +17,9 @@
xattr
iso8601
+# Horizon Utility Requirements
+lockfile # for SECURE_KEY generation
+
# Horizon Non-pip Requirements
-e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient
-e git+https://github.com/openstack/python-keystoneclient.git#egg=python-keystonecl...
++++++ horizon-ssl.patch ++++++
Index: horizon-2012.1+git.1344931337.691dd22/horizon/api/keystone.py
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/horizon/api/keystone.py
+++ horizon-2012.1+git.1344931337.691dd22/horizon/api/keystone.py
@@ -113,13 +113,15 @@ def keystoneclient(request, username=Non
else:
endpoint_lookup = _get_endpoint_url(request, endpoint_type)
auth_url = endpoint or endpoint_lookup
+ insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
LOG.debug("Creating a new keystoneclient connection to %s." % auth_url)
conn = keystone_client.Client(username=username or user.username,
password=password,
tenant_id=tenant_id or user.tenant_id,
token=token_id or user.token,
auth_url=auth_url,
- endpoint=endpoint)
+ endpoint=endpoint,
+ insecure=insecure)
setattr(request, cache_attr, conn)
# Fetch the correct endpoint if we've re-scoped the token.
Index: horizon-2012.1+git.1344931337.691dd22/openstack_dashboard/local/local_settings.py.example
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/openstack_dashboard/local/local_settings.py.example
+++ horizon-2012.1+git.1344931337.691dd22/openstack_dashboard/local/local_settings.py.example
@@ -54,6 +54,8 @@ EMAIL_BACKEND = 'django.core.mail.backen
OPENSTACK_HOST = "127.0.0.1"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
+# Disable SSL certificate checks (useful for self-signed certificates):
+# OPENSTACK_SSL_NO_VERIFY = True
# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the
# capabilities of the auth backend for Keystone.
Index: horizon-2012.1+git.1344931337.691dd22/horizon/tests/api_tests/keystone_tests.py
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/horizon/tests/api_tests/keystone_tests.py
+++ horizon-2012.1+git.1344931337.691dd22/horizon/tests/api_tests/keystone_tests.py
@@ -50,6 +50,7 @@ class ClientConnectionTests(test.TestCas
def test_connect(self):
keystone_client.Client(auth_url=self.internal_url,
endpoint=None,
+ insecure=False,
password=self.user.password,
tenant_id=None,
token=None,
@@ -64,6 +65,7 @@ class ClientConnectionTests(test.TestCas
self.test_user.roles = [{'name': 'admin'}]
keystone_client.Client(auth_url=self.admin_url,
endpoint=None,
+ insecure=False,
password=self.user.password,
tenant_id=None,
token=None,
Index: horizon-2012.1+git.1344931337.691dd22/horizon/api/nova.py
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/horizon/api/nova.py
+++ horizon-2012.1+git.1344931337.691dd22/horizon/api/nova.py
@@ -24,6 +24,9 @@ from __future__ import absolute_import
import logging
+from django.conf import settings
+from django.utils.translation import ugettext as _
+
from novaclient.v1_1 import client as nova_client
from novaclient.v1_1 import security_group_rules as nova_rules
from novaclient.v1_1.security_groups import SecurityGroup as NovaSecurityGroup
@@ -31,8 +34,6 @@ from novaclient.v1_1.servers import REBO
from horizon.api.base import APIResourceWrapper, APIDictWrapper, url_for
-from django.utils.translation import ugettext as _
-
LOG = logging.getLogger(__name__)
@@ -191,10 +192,12 @@ class SecurityGroupRule(APIResourceWrapp
def novaclient(request):
LOG.debug('novaclient connection created using token "%s" and url "%s"' %
(request.user.token, url_for(request, 'compute')))
+ insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
c = nova_client.Client(request.user.username,
request.user.token,
project_id=request.user.tenant_id,
- auth_url=url_for(request, 'compute'))
+ auth_url=url_for(request, 'compute'),
+ insecure=insecure)
c.client.auth_token = request.user.token
c.client.management_url = url_for(request, 'compute')
return c
@@ -203,10 +206,12 @@ def novaclient(request):
def cinderclient(request):
LOG.debug('cinderclient connection created using token "%s" and url "%s"' %
(request.user.token, url_for(request, 'volume')))
+ insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
c = nova_client.Client(request.user.username,
request.user.token,
project_id=request.user.tenant_id,
- auth_url=url_for(request, 'volume'))
+ auth_url=url_for(request, 'volume'),
+ insecure=insecure)
c.client.auth_token = request.user.token
c.client.management_url = url_for(request, 'volume')
return c
Index: horizon-2012.1+git.1344931337.691dd22/horizon/api/glance.py
===================================================================
--- horizon-2012.1+git.1344931337.691dd22.orig/horizon/api/glance.py
+++ horizon-2012.1+git.1344931337.691dd22/horizon/api/glance.py
@@ -89,8 +89,11 @@ def glanceclient(request):
o = urlparse.urlparse(url_for(request, 'image'))
LOG.debug('glanceclient connection created for host "%s:%d"' %
(o.hostname, o.port))
+ insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
return glance_client.Client(o.hostname,
o.port,
+ insecure=insecure,
+ use_ssl=(o.scheme == 'https'),
auth_tok=request.user.token)
++++++ horizon-suse-branding.patch ++++++
diff -ruN a/horizon/templates/horizon/common/_sidebar.html b/horizon/templates/horizon/common/_sidebar.html
--- a/horizon/templates/horizon/common/_sidebar.html 2012-06-05 15:43:17.000000000 +0200
+++ b/horizon/templates/horizon/common/_sidebar.html 2012-10-01 17:01:35.901448453 +0200
@@ -1,7 +1,7 @@
{% load horizon i18n %}
<div class='sidebar'>
- <h1 class="brand clearfix"><a href="{% url horizon:user_home %}">{% trans "OpenStack Dashboard" %}</a></h1>
+ <h1 class="brand clearfix"><a href="{% url horizon:user_home %}">SUSE CLoud Dashboard</a></h1>
{% horizon_main_nav %}
diff -ruN a/openstack_dashboard/templates/splash.html b/openstack_dashboard/templates/splash.html
--- a/openstack_dashboard/templates/splash.html 2012-06-05 15:43:17.000000000 +0200
+++ b/openstack_dashboard/templates/splash.html 2012-10-02 09:26:35.423484195 +0200
@@ -1,8 +1,10 @@
+{% load branding %}
+
<!DOCTYPE html>
<html lang="en" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <title>Login – OpenStack Dashboard</title>
+ <title>Login – {% site_branding %} Dashboard</title>
{% include "_stylesheets.html" %}
</head>
<body id="splash">
Binary files a/openstack_dashboard/templates/.splash.html.swp and b/openstack_dashboard/templates/.splash.html.swp differ
++++++ openstack-dashboard.conf.sample ++++++
#
# OpenStack Horizon (Dashboard) Apache2 example configuration.
#
# Required Apache2 modules:
# - mod_rewrite (If you use the port 80 -> 443 rewrite rule below)
# - mod_ssl (If you enable the HTTPS vhost)
#
ServerName openstack-dashboard.example.com
ServerAdmin webmaster@openstack-dashboard.example.com
ErrorLog /var/log/apache2/openstack-dashboard-error_log
TransferLog /var/log/apache2/openstack-dashboard-access_log
DocumentRoot /var/lib/openstack-dashboard/
Alias /static/horizon /var/lib/openstack-dashboard/horizon/static/horizon
Order allow,deny
Allow from all
</Directory>
Alias /static /var/lib/openstack-dashboard/openstack_dashboard/static
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /var/lib/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<IfDefine SSL>
# Uncomment the following if you want to redirect all HTTP traffic to HTTPS.
# Make sure to comment out the above
#RewriteEngine On
#RewriteCond %{SERVER_PORT} ^80$
#RewriteRule / https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
ServerName openstack-dashboard.example.com
ServerAdmin webmaster@openstack-dashboard.example.com
ErrorLog /var/log/apache2/openstack-dashboard-error_log
TransferLog /var/log/apache2/openstack-dashboard-access_log
SSLEngine On
SSLCertificateFile /etc/apache2/ssl.crt/openstack-dashboard-server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/openstack-dashboard-server.key
DocumentRoot /var/lib/openstack-dashboard/
Alias /static/horizon /var/lib/openstack-dashboard/horizon/static/horizon
Order allow,deny
Allow from all
</Directory>
Alias /static /var/lib/openstack-dashboard/openstack_dashboard/static
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias / /var/lib/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
</IfDefine>
</IfDefine>
++++++ rpmlintrc ++++++
#TODO: Fix this later on (i.e. SLE-12), Python on SLE-11 is way beyond broken:
addFilter("no-binary")
# This symling is for the -test package and can be ignored:
addFilter("dangling-symlink /var/lib/openstack-dashboard-test/openstack_dashboard")
addFilter("dangling-symlink /var/lib/openstack-dashboard-test/horizon")
addFilter("dangling-symlink /usr/lib.*/python.*/site-packages/openstack_dashboard/local /var/lib/openstack-dashboard/openstack_dashboard/local")
# False positive, those files are actually found elsewhere:
addFilter("file-not-in-%lang /var/lib/openstack-dashboard-test")
# Pylint config may be useful for testing:
addFilter("hidden-file-or-dir /var/lib/openstack-dashboard-test/.pylintrc")
++++++ suse-patches.diff ++++++
diff --git a/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html b/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html
index aacb429..34dbe8f 100644
--- a/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html
+++ b/horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html
@@ -93,5 +93,4 @@
<li><em>{% trans "No volumes attached." %}</em></li>
</ul>
{% endif %}
- </dl>
</div>
diff --git a/horizon/dashboards/syspanel/users/tables.py b/horizon/dashboards/syspanel/users/tables.py
index fe51a3a..6e1b244 100644
--- a/horizon/dashboards/syspanel/users/tables.py
+++ b/horizon/dashboards/syspanel/users/tables.py
@@ -109,7 +109,7 @@ class UserFilterAction(tables.FilterAction):
def comp(user):
if any([q in (user.name or "").lower(),
- q in (user.email or "").lower()]):
+ q in ((hasattr(user, 'email') and user.email) or "").lower()]):
return True
return False
diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py
index 5153759..a2d95c6 100644
--- a/openstack_dashboard/settings.py
+++ b/openstack_dashboard/settings.py
@@ -94,7 +94,7 @@ INSTALLED_APPS = (
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
- 'django_nose',
+ #'django_nose',
'horizon',
'horizon.dashboards.nova',
'horizon.dashboards.syspanel',
diff --git a/openstack_dashboard/wsgi/django.wsgi b/openstack_dashboard/wsgi/django.wsgi
index 1e92a4d..1166eaa 100644
--- a/openstack_dashboard/wsgi/django.wsgi
+++ b/openstack_dashboard/wsgi/django.wsgi
@@ -4,6 +4,9 @@ import sys
import django.core.handlers.wsgi
from django.conf import settings
+sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
+sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
+
# Add this file path to sys.path in order to import settings
sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings'
diff --git a/tools/pip-requires b/tools/pip-requires
index 498cc1b..b35573c 100644
--- a/tools/pip-requires
+++ b/tools/pip-requires
@@ -7,7 +7,7 @@ django-nose
# Glance Requirements
PasteDeploy
eventlet
-kombu
+#kombu # required?
paste
pycrypto==2.3
routes
++++++ vnc-iframe-size.patch ++++++
--- horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html
+++ horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html
@@ -3,7 +3,7 @@
<h3>{% trans "Instance VNC Console" %}</h3>
{% if vnc_url %}
<p class='alert alert-info'>{% blocktrans %}If VNC console is not responding to keyboard input: click the grey status bar below.{% endblocktrans %} <a href="{{ vnc_url }}">{% trans "Click here to show only VNC" %}</a></p>
-<iframe src="{{ vnc_url }}" width="720" height="430"></iframe>
+<iframe src="{{ vnc_url }}" width="800" height="644"></iframe>
{% else %}
<p class='alert alert-error'>{% blocktrans %}VNC console is currently unavailabe. Please try again later.{% endblocktrans %}
<a class='btn btn-mini' href="{% url horizon:nova:instances_and_volumes:instances:detail instance_id %}">{% trans "Reload" %}</a></p>
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org