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 "cth...@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 - vu...@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 - sasc...@suse.de + +- Drop from_vcs build flag + +------------------------------------------------------------------- +Tue Oct 30 10:29:30 UTC 2012 - sasc...@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 - sasc...@suse.de + +- Update (green) branding: Ship local copies of various Google fonts + (bnc#772230) + +------------------------------------------------------------------- +Mon Oct 1 15:05:08 UTC 2012 - sasc...@suse.de + +- Add horizon-suse-branding.patch: SUSE Cloud branding according + to documentation (bnc#770065) + +------------------------------------------------------------------- +Sun Sep 16 18:20:10 UTC 2012 - jenk...@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 - vu...@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 - vu...@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 - vu...@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 - jenk...@suse.de + +- Update to latest git (f862d9e): + + Corrects the CSV download link for overview pages. + +------------------------------------------------------------------- +Fri Aug 24 10:08:57 UTC 2012 - j...@suse.com + +- refresh patch in order to apply with no fuzz + +------------------------------------------------------------------- +Thu Aug 23 14:12:53 UTC 2012 - vu...@opensuse.org + +- Update horizon-login-no-phishing.patch with patch from upstream. + +------------------------------------------------------------------- +Thu Aug 23 09:14:45 UTC 2012 - vu...@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 - cth...@suse.com + +- add vnc-iframe-size.patch to improve vnc iframe size and avoid scrollbars + +------------------------------------------------------------------- +Mon Aug 20 13:56:22 UTC 2012 - vu...@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 - bwiedem...@suse.com + +- add minimum password length check in sample config + +------------------------------------------------------------------- +Tue Aug 14 22:49:12 UTC 2012 - jenk...@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 - cth...@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 - jenk...@suse.de + +- Update to latest git (52bbba1): + + Added --only-selenium option in run_tests.sh + +------------------------------------------------------------------- +Fri Aug 3 17:20:30 UTC 2012 - vu...@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 - j...@suse.de + +- fix template syntax error in user filter (bnc#771667) + +------------------------------------------------------------------- +Mon Jul 30 15:29:37 UTC 2012 - sasc...@suse.de + +- More SSl fixes, renamed patch to horizon-ssl.patch therefore + +------------------------------------------------------------------- +Wed Jul 25 11:24:47 UTC 2012 - sasc...@suse.de + +- Secure file permissions for Apache SSL certificate files + +------------------------------------------------------------------- +Tue Jul 24 12:58:20 UTC 2012 - sasc...@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 - sasc...@suse.de + +- Remote temporary hack agin, no need to uncoditionally disable + SSL certificate verification anymore + +------------------------------------------------------------------- +Mon Jul 23 10:47:24 UTC 2012 - cth...@suse.com + +- fix test case for horizon-insecure-ssl.patch + +------------------------------------------------------------------- +Mon Jul 23 09:54:04 UTC 2012 - cth...@suse.com + +- fix test part of 7b565fc9-fixed-validation-ICMP.patch + +------------------------------------------------------------------- +Fri Jul 20 06:50:09 UTC 2012 - cth...@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 - sasc...@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 - sasc...@suse.de + +- Provide Apache2 example configuration + +------------------------------------------------------------------- +Fri Jul 6 12:45:10 UTC 2012 - sasc...@suse.de + +- Fixed yet another typo in horizon-secure_SECRET_KEY.patch + +------------------------------------------------------------------- +Wed Jul 4 14:33:21 UTC 2012 - sasc...@suse.de + +- Fixed horizon-secure_SECRET_KEY.patch, it still contained + debug code + +------------------------------------------------------------------- +Fri Jun 29 09:28:31 UTC 2012 - sasc...@suse.de + +- Remove requires on "openstack-quantum" as there seems to be no + support for it + +------------------------------------------------------------------- +Wed Jun 27 10:49:34 UTC 2012 - sasc...@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,unified Patch5: horizon-minimumpwlen.patch Patch7: vnc-iframe-size.patch # PATCH-FIX-UPSTREAM horizon-keep-image-properties.patch bnc#777855 vu...@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 sasc...@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 <andrewsmed...@gmail.com> Andy Chong <andy...@gmail.com> Anthony Young <sleepsonthefl...@gmail.com> Arvind Somya <aso...@cisco.com> +Bernhard M. Wiedemann <bwiedem...@suse.de> Carlo Truijllo <truij...@crs4.it> Chuck Short <chuck.sh...@canonical.com> Cole Robinson <crobi...@redhat.com> 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 <jaypi...@gmail.com> 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 <sasc...@suse.de> 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 <mord...@inaugust.com> Neil Johnston <onewheeldrive....@gmail.com> Paul McMillan <paul.mcmil...@nebula.com> Sam Morrison <sorri...@gmail.com> +Sascha Peilicke <sasc...@suse.de> Stephane Angot <s...@hydre.org> termie <git...@anarkystic.com> Thierry Carrez <thie...@openstack.org> 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-keystoneclient ++++++ 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) # <VirtualHost *:80> ServerName openstack-dashboard.example.com ServerAdmin webmas...@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 <Directory /var/lib/openstack-dashboard/horizon/static/> Order allow,deny Allow from all </Directory> Alias /static /var/lib/openstack-dashboard/openstack_dashboard/static <Directory /var/lib/openstack-dashboard/openstack_dashboard/static/> Order allow,deny Allow from all </Directory> WSGIScriptAlias / /var/lib/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi <Directory /var/lib/openstack-dashboard/openstack_dashboard/wsgi/> Order allow,deny Allow from all </Directory> </VirtualHost> <IfDefine SSL> <IfDefine !NOSSL> # Uncomment the following if you want to redirect all HTTP traffic to HTTPS. # Make sure to comment out the above <VirtualHost *:80> #RewriteEngine On #RewriteCond %{SERVER_PORT} ^80$ #RewriteRule / https://%{HTTP_HOST}%{REQUEST_URI} [L,R] <VirtualHost *:443> ServerName openstack-dashboard.example.com ServerAdmin webmas...@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 <Directory /var/lib/openstack-dashboard/horizon/static/> Order allow,deny Allow from all </Directory> Alias /static /var/lib/openstack-dashboard/openstack_dashboard/static <Directory /var/lib/openstack-dashboard/openstack_dashboard/static/> Order allow,deny Allow from all </Directory> WSGIScriptAlias / /var/lib/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi <Directory /var/lib/openstack-dashboard/openstack_dashboard/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+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org