Merge lp:~yolanda.robla/horizon/precise-security into lp:ubuntu/precise-security/horizon
- precise-security
- Merge into precise-security
Proposed by
Yolanda Robla
Status: | Merged |
---|---|
Approved by: | James Page |
Approved revision: | 30 |
Merge reported by: | James Page |
Merged at revision: | not available |
Proposed branch: | lp:~yolanda.robla/horizon/precise-security |
Merge into: | lp:ubuntu/precise-security/horizon |
Diff against target: |
4012 lines (+794/-1547) 41 files modified
.bzrignore (+0/-12) .mailmap (+0/-8) .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py (+0/-190) .pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py (+0/-31) .pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example (+0/-117) .pc/allow_alternate_css.patch/horizon/templatetags/branding.py (+0/-62) .pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html (+0/-6) .pc/applied-patches (+0/-9) .pc/fix-coverage-binary-name.patch/run_tests.sh (+0/-403) .pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi (+0/-15) .pc/fix-dashboard-manage.patch/manage.py (+0/-12) .pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py (+0/-96) .pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example (+0/-123) .pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example (+0/-123) .pylintrc (+0/-42) AUTHORS (+2/-0) PKG-INFO (+126/-0) debian/changelog (+18/-0) debian/patches/CVE-2012-3540.patch (+0/-33) debian/patches/series (+0/-1) horizon.egg-info/PKG-INFO (+126/-0) horizon.egg-info/SOURCES.txt (+478/-0) horizon.egg-info/dependency_links.txt (+3/-0) horizon.egg-info/not-zip-safe (+1/-0) horizon.egg-info/requires.txt (+18/-0) horizon.egg-info/top_level.txt (+2/-0) horizon/dashboards/nova/images_and_snapshots/images/tables.py (+3/-0) horizon/dashboards/nova/instances_and_volumes/volumes/tables.py (+1/-1) horizon/dashboards/settings/juju/__init__.py (+0/-1) horizon/dashboards/settings/juju/forms.py (+0/-96) horizon/dashboards/settings/juju/panel.py (+0/-28) horizon/dashboards/settings/juju/urls.py (+0/-24) horizon/dashboards/settings/juju/views.py (+0/-28) horizon/dashboards/settings/templates/settings/juju/download_form.html (+0/-20) horizon/dashboards/settings/templates/settings/juju/environments.yaml.template (+0/-21) horizon/dashboards/settings/templates/settings/juju/index.html (+0/-11) horizon/usage/base.py (+9/-6) horizon/version.py (+1/-1) setup.cfg (+5/-0) tools/pip-requires (+1/-1) tox.ini (+0/-26) |
To merge this branch: | bzr merge lp:~yolanda.robla/horizon/precise-security |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
James Page | Approve | ||
Review via email: mp+160649@code.launchpad.net |
Commit message
Description of the change
Essex SRU
To post a comment you must log in.
- 30. By Yolanda Robla
-
updated changelog
Revision history for this message
James Page (james-page) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === removed file '.bzrignore' |
2 | --- .bzrignore 2012-08-24 03:27:33 +0000 |
3 | +++ .bzrignore 1970-01-01 00:00:00 +0000 |
4 | @@ -1,12 +0,0 @@ |
5 | -horizon/.installed.cfg |
6 | -horizon/bin |
7 | -horizon/develop-eggs/ |
8 | -horizon/downloads/ |
9 | -horizon/eggs/ |
10 | -horizon/parts/ |
11 | -horizon/src/django_nova.egg-info |
12 | -horizon/src/django_openstack.egg-info |
13 | -django-nova-syspanel/src/django_nova_syspanel.egg-info |
14 | -openstack-dashboard/.dashboard-venv |
15 | -openstack-dashboard/local/dashboard_openstack.sqlite3 |
16 | -openstack-dashboard/local/local_settings.py |
17 | |
18 | === removed file '.mailmap' |
19 | --- .mailmap 2012-08-24 03:27:33 +0000 |
20 | +++ .mailmap 1970-01-01 00:00:00 +0000 |
21 | @@ -1,8 +0,0 @@ |
22 | -# Format is: |
23 | -# <preferred e-mail> <other e-mail 1> |
24 | -# <preferred e-mail> <other e-mail 2> |
25 | -<ghe@debian.org> <ghe.rivero@stackops.com> |
26 | -<jake@ansolabs.com> <admin@jakedahn.com> |
27 | -<launchpad@markgius.com> <mgius7096@gmail.com> |
28 | -<yorik.sar@gmail.com> <yorik@ytaraday> |
29 | -<jeblair@hp.com> <james.blair@rackspace.com> |
30 | |
31 | === removed directory '.pc/CVE-2012-3540.patch' |
32 | === removed directory '.pc/CVE-2012-3540.patch/horizon' |
33 | === removed directory '.pc/CVE-2012-3540.patch/horizon/views' |
34 | === removed file '.pc/CVE-2012-3540.patch/horizon/views/auth_forms.py' |
35 | --- .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py 2012-08-30 17:15:04 +0000 |
36 | +++ .pc/CVE-2012-3540.patch/horizon/views/auth_forms.py 1970-01-01 00:00:00 +0000 |
37 | @@ -1,190 +0,0 @@ |
38 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
39 | - |
40 | -# Copyright 2012 United States Government as represented by the |
41 | -# Administrator of the National Aeronautics and Space Administration. |
42 | -# All Rights Reserved. |
43 | -# |
44 | -# Copyright 2012 Nebula, Inc. |
45 | -# |
46 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
47 | -# not use this file except in compliance with the License. You may obtain |
48 | -# a copy of the License at |
49 | -# |
50 | -# http://www.apache.org/licenses/LICENSE-2.0 |
51 | -# |
52 | -# Unless required by applicable law or agreed to in writing, software |
53 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
54 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
55 | -# License for the specific language governing permissions and limitations |
56 | -# under the License. |
57 | - |
58 | -""" |
59 | -Forms used for Horizon's auth mechanisms. |
60 | -""" |
61 | - |
62 | -import logging |
63 | - |
64 | -from django import shortcuts |
65 | -from django.conf import settings |
66 | -from django.contrib import messages |
67 | -from django.contrib.auth import REDIRECT_FIELD_NAME |
68 | -from django.utils.translation import ugettext as _ |
69 | -from keystoneclient import exceptions as keystone_exceptions |
70 | - |
71 | -from horizon import api |
72 | -from horizon import base |
73 | -from horizon import exceptions |
74 | -from horizon import forms |
75 | -from horizon import users |
76 | - |
77 | - |
78 | -LOG = logging.getLogger(__name__) |
79 | - |
80 | - |
81 | -def _set_session_data(request, token): |
82 | - request.session['serviceCatalog'] = token.serviceCatalog |
83 | - request.session['tenant'] = token.tenant['name'] |
84 | - request.session['tenant_id'] = token.tenant['id'] |
85 | - request.session['token'] = token.id |
86 | - request.session['user_name'] = token.user['name'] |
87 | - request.session['user_id'] = token.user['id'] |
88 | - request.session['roles'] = token.user['roles'] |
89 | - |
90 | - |
91 | -class Login(forms.SelfHandlingForm): |
92 | - """ Form used for logging in a user. |
93 | - |
94 | - Handles authentication with Keystone, choosing a tenant, and fetching |
95 | - a scoped token token for that tenant. Redirects to the URL returned |
96 | - by :meth:`horizon.get_user_home` if successful. |
97 | - |
98 | - Subclass of :class:`~horizon.forms.SelfHandlingForm`. |
99 | - """ |
100 | - region = forms.ChoiceField(label=_("Region"), required=False) |
101 | - username = forms.CharField(label=_("User Name")) |
102 | - password = forms.CharField(label=_("Password"), |
103 | - widget=forms.PasswordInput(render_value=False)) |
104 | - |
105 | - def __init__(self, *args, **kwargs): |
106 | - super(Login, self).__init__(*args, **kwargs) |
107 | - # FIXME(gabriel): When we switch to region-only settings, we can |
108 | - # remove this default region business. |
109 | - default_region = (settings.OPENSTACK_KEYSTONE_URL, "Default Region") |
110 | - regions = getattr(settings, 'AVAILABLE_REGIONS', [default_region]) |
111 | - self.fields['region'].choices = regions |
112 | - if len(regions) == 1: |
113 | - self.fields['region'].initial = default_region[0] |
114 | - self.fields['region'].widget = forms.widgets.HiddenInput() |
115 | - |
116 | - def handle(self, request, data): |
117 | - if 'user_name' in request.session: |
118 | - if request.session['user_name'] != data['username']: |
119 | - # To avoid reusing another user's session, create a |
120 | - # new, empty session if the existing session |
121 | - # corresponds to a different authenticated user. |
122 | - request.session.flush() |
123 | - # Always cycle the session key when viewing the login form to |
124 | - # prevent session fixation |
125 | - request.session.cycle_key() |
126 | - |
127 | - # For now we'll allow fallback to OPENSTACK_KEYSTONE_URL if the |
128 | - # form post doesn't include a region. |
129 | - endpoint = data.get('region', None) or settings.OPENSTACK_KEYSTONE_URL |
130 | - region_name = dict(self.fields['region'].choices)[endpoint] |
131 | - request.session['region_endpoint'] = endpoint |
132 | - request.session['region_name'] = region_name |
133 | - |
134 | - redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, "") |
135 | - |
136 | - if data.get('tenant', None): |
137 | - try: |
138 | - token = api.token_create(request, |
139 | - data.get('tenant'), |
140 | - data['username'], |
141 | - data['password']) |
142 | - tenants = api.tenant_list_for_token(request, token.id) |
143 | - except: |
144 | - msg = _('Unable to authenticate for that project.') |
145 | - exceptions.handle(request, |
146 | - message=msg, |
147 | - escalate=True) |
148 | - _set_session_data(request, token) |
149 | - user = users.get_user_from_request(request) |
150 | - redirect = redirect_to or base.Horizon.get_user_home(user) |
151 | - return shortcuts.redirect(redirect) |
152 | - |
153 | - elif data.get('username', None): |
154 | - try: |
155 | - unscoped_token = api.token_create(request, |
156 | - '', |
157 | - data['username'], |
158 | - data['password']) |
159 | - except keystone_exceptions.Unauthorized: |
160 | - exceptions.handle(request, |
161 | - _('Invalid user name or password.')) |
162 | - except: |
163 | - # If we get here we don't want to show a stack trace to the |
164 | - # user. However, if we fail here, there may be bad session |
165 | - # data that's been cached already. |
166 | - request.user_logout() |
167 | - exceptions.handle(request, |
168 | - message=_("An error occurred authenticating." |
169 | - " Please try again later."), |
170 | - escalate=True) |
171 | - |
172 | - # Unscoped token |
173 | - request.session['unscoped_token'] = unscoped_token.id |
174 | - request.user.username = data['username'] |
175 | - |
176 | - # Get the tenant list, and log in using first tenant |
177 | - # FIXME (anthony): add tenant chooser here? |
178 | - try: |
179 | - tenants = api.tenant_list_for_token(request, unscoped_token.id) |
180 | - except: |
181 | - exceptions.handle(request) |
182 | - tenants = [] |
183 | - |
184 | - # Abort if there are no valid tenants for this user |
185 | - if not tenants: |
186 | - messages.error(request, |
187 | - _('You are not authorized for any projects.') % |
188 | - {"user": data['username']}, |
189 | - extra_tags="login") |
190 | - return |
191 | - |
192 | - # Create a token. |
193 | - # NOTE(gabriel): Keystone can return tenants that you're |
194 | - # authorized to administer but not to log into as a user, so in |
195 | - # the case of an Unauthorized error we should iterate through |
196 | - # the tenants until one succeeds or we've failed them all. |
197 | - while tenants: |
198 | - tenant = tenants.pop() |
199 | - try: |
200 | - token = api.token_create_scoped(request, |
201 | - tenant.id, |
202 | - unscoped_token.id) |
203 | - break |
204 | - except: |
205 | - # This will continue for recognized Unauthorized |
206 | - # exceptions from keystoneclient. |
207 | - exceptions.handle(request, ignore=True) |
208 | - token = None |
209 | - if token is None: |
210 | - raise exceptions.NotAuthorized( |
211 | - _("You are not authorized for any available projects.")) |
212 | - |
213 | - _set_session_data(request, token) |
214 | - user = users.get_user_from_request(request) |
215 | - redirect = redirect_to or base.Horizon.get_user_home(user) |
216 | - return shortcuts.redirect(redirect) |
217 | - |
218 | - |
219 | -class LoginWithTenant(Login): |
220 | - """ |
221 | - Exactly like :class:`.Login` but includes the tenant id as a field |
222 | - so that the process of choosing a default tenant is bypassed. |
223 | - """ |
224 | - region = forms.ChoiceField(required=False) |
225 | - username = forms.CharField(max_length="20", |
226 | - widget=forms.TextInput(attrs={'readonly': 'readonly'})) |
227 | - tenant = forms.CharField(widget=forms.HiddenInput()) |
228 | |
229 | === added directory '.pc/add_juju_settings_panel.patch' |
230 | === removed directory '.pc/add_juju_settings_panel.patch' |
231 | === added file '.pc/add_juju_settings_panel.patch/.timestamp' |
232 | === added directory '.pc/add_juju_settings_panel.patch/horizon' |
233 | === removed directory '.pc/add_juju_settings_panel.patch/horizon' |
234 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards' |
235 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards' |
236 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings' |
237 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings' |
238 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py' |
239 | --- .pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py 1970-01-01 00:00:00 +0000 |
240 | +++ .pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py 2013-04-24 15:22:28 +0000 |
241 | @@ -0,0 +1,31 @@ |
242 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
243 | + |
244 | +# Copyright 2012 Openstack, LLC |
245 | +# Copyright 2012 Nebula, Inc. |
246 | +# |
247 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
248 | +# not use this file except in compliance with the License. You may obtain |
249 | +# a copy of the License at |
250 | +# |
251 | +# http://www.apache.org/licenses/LICENSE-2.0 |
252 | +# |
253 | +# Unless required by applicable law or agreed to in writing, software |
254 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
255 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
256 | +# License for the specific language governing permissions and limitations |
257 | +# under the License. |
258 | + |
259 | +from django.utils.translation import ugettext_lazy as _ |
260 | + |
261 | +import horizon |
262 | + |
263 | + |
264 | +class Settings(horizon.Dashboard): |
265 | + name = _("Settings") |
266 | + slug = "settings" |
267 | + panels = ('user', 'project', 'ec2') |
268 | + default_panel = 'user' |
269 | + nav = False |
270 | + |
271 | + |
272 | +horizon.register(Settings) |
273 | |
274 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py' |
275 | --- .pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py 2012-04-12 12:42:04 +0000 |
276 | +++ .pc/add_juju_settings_panel.patch/horizon/dashboards/settings/dashboard.py 1970-01-01 00:00:00 +0000 |
277 | @@ -1,31 +0,0 @@ |
278 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
279 | - |
280 | -# Copyright 2012 Openstack, LLC |
281 | -# Copyright 2012 Nebula, Inc. |
282 | -# |
283 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
284 | -# not use this file except in compliance with the License. You may obtain |
285 | -# a copy of the License at |
286 | -# |
287 | -# http://www.apache.org/licenses/LICENSE-2.0 |
288 | -# |
289 | -# Unless required by applicable law or agreed to in writing, software |
290 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
291 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
292 | -# License for the specific language governing permissions and limitations |
293 | -# under the License. |
294 | - |
295 | -from django.utils.translation import ugettext_lazy as _ |
296 | - |
297 | -import horizon |
298 | - |
299 | - |
300 | -class Settings(horizon.Dashboard): |
301 | - name = _("Settings") |
302 | - slug = "settings" |
303 | - panels = ('user', 'project', 'ec2') |
304 | - default_panel = 'user' |
305 | - nav = False |
306 | - |
307 | - |
308 | -horizon.register(Settings) |
309 | |
310 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju' |
311 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju' |
312 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/__init__.py' |
313 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/__init__.py' |
314 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/forms.py' |
315 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/forms.py' |
316 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/panel.py' |
317 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/panel.py' |
318 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/urls.py' |
319 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/urls.py' |
320 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/views.py' |
321 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/juju/views.py' |
322 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates' |
323 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates' |
324 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings' |
325 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings' |
326 | === added directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju' |
327 | === removed directory '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju' |
328 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/download_form.html' |
329 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/download_form.html' |
330 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/environments.yaml.template' |
331 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/environments.yaml.template' |
332 | === added file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/index.html' |
333 | === removed file '.pc/add_juju_settings_panel.patch/horizon/dashboards/settings/templates/settings/juju/index.html' |
334 | === added directory '.pc/add_juju_settings_panel.patch/openstack_dashboard' |
335 | === removed directory '.pc/add_juju_settings_panel.patch/openstack_dashboard' |
336 | === added directory '.pc/add_juju_settings_panel.patch/openstack_dashboard/local' |
337 | === removed directory '.pc/add_juju_settings_panel.patch/openstack_dashboard/local' |
338 | === added file '.pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example' |
339 | --- .pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
340 | +++ .pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example 2013-04-24 15:22:28 +0000 |
341 | @@ -0,0 +1,117 @@ |
342 | +import os |
343 | + |
344 | +from django.utils.translation import ugettext_lazy as _ |
345 | + |
346 | +DEBUG = True |
347 | +TEMPLATE_DEBUG = DEBUG |
348 | +PROD = False |
349 | +USE_SSL = False |
350 | + |
351 | +# Note: You should change this value |
352 | +SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
353 | + |
354 | +# Specify a regular expression to validate user passwords. |
355 | +# HORIZON_CONFIG = { |
356 | +# "password_validator": { |
357 | +# "regex": '.*', |
358 | +# "help_text": _("Your password does not meet the requirements.") |
359 | +# } |
360 | +# } |
361 | + |
362 | +LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
363 | + |
364 | +# We recommend you use memcached for development; otherwise after every reload |
365 | +# of the django development server, you will have to login again. To use |
366 | +# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
367 | +CACHE_BACKEND = 'locmem://' |
368 | + |
369 | +# Send email to the console by default |
370 | +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
371 | +# Or send them to /dev/null |
372 | +#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
373 | + |
374 | +# Configure these for your outgoing email host |
375 | +# EMAIL_HOST = 'smtp.my-company.com' |
376 | +# EMAIL_PORT = 25 |
377 | +# EMAIL_HOST_USER = 'djangomail' |
378 | +# EMAIL_HOST_PASSWORD = 'top-secret!' |
379 | + |
380 | +# For multiple regions uncomment this configuration, and add (endpoint, title). |
381 | +# AVAILABLE_REGIONS = [ |
382 | +# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
383 | +# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
384 | +# ] |
385 | + |
386 | +OPENSTACK_HOST = "127.0.0.1" |
387 | +OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
388 | +OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
389 | + |
390 | +# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
391 | +# capabilities of the auth backend for Keystone. |
392 | +# If Keystone has been configured to use LDAP as the auth backend then set |
393 | +# can_edit_user to False and name to 'ldap'. |
394 | +# |
395 | +# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
396 | +OPENSTACK_KEYSTONE_BACKEND = { |
397 | + 'name': 'native', |
398 | + 'can_edit_user': True |
399 | +} |
400 | + |
401 | +# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
402 | +# in the Keystone service catalog. Use this setting when Horizon is running |
403 | +# external to the OpenStack environment. The default is 'internalURL'. |
404 | +#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
405 | + |
406 | +# The number of Swift containers and objects to display on a single page before |
407 | +# providing a paging element (a "more" link) to paginate results. |
408 | +API_RESULT_LIMIT = 1000 |
409 | + |
410 | +# If you have external monitoring links, eg: |
411 | +# EXTERNAL_MONITORING = [ |
412 | +# ['Nagios','http://foo.com'], |
413 | +# ['Ganglia','http://bar.com'], |
414 | +# ] |
415 | + |
416 | +LOGGING = { |
417 | + 'version': 1, |
418 | + # When set to True this will disable all logging except |
419 | + # for loggers specified in this configuration dictionary. Note that |
420 | + # if nothing is specified here and disable_existing_loggers is True, |
421 | + # django.db.backends will still log unless it is disabled explicitly. |
422 | + 'disable_existing_loggers': False, |
423 | + 'handlers': { |
424 | + 'null': { |
425 | + 'level': 'DEBUG', |
426 | + 'class': 'django.utils.log.NullHandler', |
427 | + }, |
428 | + 'console': { |
429 | + # Set the level to "DEBUG" for verbose output logging. |
430 | + 'level': 'INFO', |
431 | + 'class': 'logging.StreamHandler', |
432 | + }, |
433 | + }, |
434 | + 'loggers': { |
435 | + # Logging from django.db.backends is VERY verbose, send to null |
436 | + # by default. |
437 | + 'django.db.backends': { |
438 | + 'handlers': ['null'], |
439 | + 'propagate': False, |
440 | + }, |
441 | + 'horizon': { |
442 | + 'handlers': ['console'], |
443 | + 'propagate': False, |
444 | + }, |
445 | + 'novaclient': { |
446 | + 'handlers': ['console'], |
447 | + 'propagate': False, |
448 | + }, |
449 | + 'keystoneclient': { |
450 | + 'handlers': ['console'], |
451 | + 'propagate': False, |
452 | + }, |
453 | + 'nose.plugins.manager': { |
454 | + 'handlers': ['console'], |
455 | + 'propagate': False, |
456 | + } |
457 | + } |
458 | +} |
459 | |
460 | === removed file '.pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example' |
461 | --- .pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example 2012-04-13 09:58:54 +0000 |
462 | +++ .pc/add_juju_settings_panel.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
463 | @@ -1,117 +0,0 @@ |
464 | -import os |
465 | - |
466 | -from django.utils.translation import ugettext_lazy as _ |
467 | - |
468 | -DEBUG = True |
469 | -TEMPLATE_DEBUG = DEBUG |
470 | -PROD = False |
471 | -USE_SSL = False |
472 | - |
473 | -# Note: You should change this value |
474 | -SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
475 | - |
476 | -# Specify a regular expression to validate user passwords. |
477 | -# HORIZON_CONFIG = { |
478 | -# "password_validator": { |
479 | -# "regex": '.*', |
480 | -# "help_text": _("Your password does not meet the requirements.") |
481 | -# } |
482 | -# } |
483 | - |
484 | -LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
485 | - |
486 | -# We recommend you use memcached for development; otherwise after every reload |
487 | -# of the django development server, you will have to login again. To use |
488 | -# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
489 | -CACHE_BACKEND = 'locmem://' |
490 | - |
491 | -# Send email to the console by default |
492 | -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
493 | -# Or send them to /dev/null |
494 | -#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
495 | - |
496 | -# Configure these for your outgoing email host |
497 | -# EMAIL_HOST = 'smtp.my-company.com' |
498 | -# EMAIL_PORT = 25 |
499 | -# EMAIL_HOST_USER = 'djangomail' |
500 | -# EMAIL_HOST_PASSWORD = 'top-secret!' |
501 | - |
502 | -# For multiple regions uncomment this configuration, and add (endpoint, title). |
503 | -# AVAILABLE_REGIONS = [ |
504 | -# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
505 | -# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
506 | -# ] |
507 | - |
508 | -OPENSTACK_HOST = "127.0.0.1" |
509 | -OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
510 | -OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
511 | - |
512 | -# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
513 | -# capabilities of the auth backend for Keystone. |
514 | -# If Keystone has been configured to use LDAP as the auth backend then set |
515 | -# can_edit_user to False and name to 'ldap'. |
516 | -# |
517 | -# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
518 | -OPENSTACK_KEYSTONE_BACKEND = { |
519 | - 'name': 'native', |
520 | - 'can_edit_user': True |
521 | -} |
522 | - |
523 | -# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
524 | -# in the Keystone service catalog. Use this setting when Horizon is running |
525 | -# external to the OpenStack environment. The default is 'internalURL'. |
526 | -#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
527 | - |
528 | -# The number of Swift containers and objects to display on a single page before |
529 | -# providing a paging element (a "more" link) to paginate results. |
530 | -API_RESULT_LIMIT = 1000 |
531 | - |
532 | -# If you have external monitoring links, eg: |
533 | -# EXTERNAL_MONITORING = [ |
534 | -# ['Nagios','http://foo.com'], |
535 | -# ['Ganglia','http://bar.com'], |
536 | -# ] |
537 | - |
538 | -LOGGING = { |
539 | - 'version': 1, |
540 | - # When set to True this will disable all logging except |
541 | - # for loggers specified in this configuration dictionary. Note that |
542 | - # if nothing is specified here and disable_existing_loggers is True, |
543 | - # django.db.backends will still log unless it is disabled explicitly. |
544 | - 'disable_existing_loggers': False, |
545 | - 'handlers': { |
546 | - 'null': { |
547 | - 'level': 'DEBUG', |
548 | - 'class': 'django.utils.log.NullHandler', |
549 | - }, |
550 | - 'console': { |
551 | - # Set the level to "DEBUG" for verbose output logging. |
552 | - 'level': 'INFO', |
553 | - 'class': 'logging.StreamHandler', |
554 | - }, |
555 | - }, |
556 | - 'loggers': { |
557 | - # Logging from django.db.backends is VERY verbose, send to null |
558 | - # by default. |
559 | - 'django.db.backends': { |
560 | - 'handlers': ['null'], |
561 | - 'propagate': False, |
562 | - }, |
563 | - 'horizon': { |
564 | - 'handlers': ['console'], |
565 | - 'propagate': False, |
566 | - }, |
567 | - 'novaclient': { |
568 | - 'handlers': ['console'], |
569 | - 'propagate': False, |
570 | - }, |
571 | - 'keystoneclient': { |
572 | - 'handlers': ['console'], |
573 | - 'propagate': False, |
574 | - }, |
575 | - 'nose.plugins.manager': { |
576 | - 'handlers': ['console'], |
577 | - 'propagate': False, |
578 | - } |
579 | - } |
580 | -} |
581 | |
582 | === added directory '.pc/allow_alternate_css.patch' |
583 | === removed directory '.pc/allow_alternate_css.patch' |
584 | === added file '.pc/allow_alternate_css.patch/.timestamp' |
585 | === added directory '.pc/allow_alternate_css.patch/horizon' |
586 | === removed directory '.pc/allow_alternate_css.patch/horizon' |
587 | === added directory '.pc/allow_alternate_css.patch/horizon/templatetags' |
588 | === removed directory '.pc/allow_alternate_css.patch/horizon/templatetags' |
589 | === added file '.pc/allow_alternate_css.patch/horizon/templatetags/branding.py' |
590 | --- .pc/allow_alternate_css.patch/horizon/templatetags/branding.py 1970-01-01 00:00:00 +0000 |
591 | +++ .pc/allow_alternate_css.patch/horizon/templatetags/branding.py 2013-04-24 15:22:28 +0000 |
592 | @@ -0,0 +1,62 @@ |
593 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
594 | + |
595 | +# Copyright 2012 United States Government as represented by the |
596 | +# Administrator of the National Aeronautics and Space Administration. |
597 | +# All Rights Reserved. |
598 | +# |
599 | +# Copyright 2012 Nebula, Inc. |
600 | +# |
601 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
602 | +# not use this file except in compliance with the License. You may obtain |
603 | +# a copy of the License at |
604 | +# |
605 | +# http://www.apache.org/licenses/LICENSE-2.0 |
606 | +# |
607 | +# Unless required by applicable law or agreed to in writing, software |
608 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
609 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
610 | +# License for the specific language governing permissions and limitations |
611 | +# under the License. |
612 | + |
613 | +""" |
614 | +Template tags for customizing Horizon. |
615 | +""" |
616 | + |
617 | +from django import template |
618 | +from django.conf import settings |
619 | + |
620 | + |
621 | +register = template.Library() |
622 | + |
623 | + |
624 | +class SiteBrandingNode(template.Node): |
625 | + def render(self, context): |
626 | + return settings.SITE_BRANDING |
627 | + |
628 | + |
629 | +@register.tag |
630 | +def site_branding(parser, token): |
631 | + return SiteBrandingNode() |
632 | + |
633 | + |
634 | +@register.tag |
635 | +def site_title(parser, token): |
636 | + return settings.SITE_BRANDING |
637 | + |
638 | + |
639 | +# TODO(jeffjapan): This is just an assignment tag version of the above, replace |
640 | +# when the dashboard is upgraded to a django version that |
641 | +# supports the @assignment_tag decorator syntax instead. |
642 | +class SaveBrandingNode(template.Node): |
643 | + def __init__(self, var_name): |
644 | + self.var_name = var_name |
645 | + |
646 | + def render(self, context): |
647 | + context[self.var_name] = settings.SITE_BRANDING |
648 | + return "" |
649 | + |
650 | + |
651 | +@register.tag |
652 | +def save_site_branding(parser, token): |
653 | + tagname = token.contents.split() |
654 | + return SaveBrandingNode(tagname[-1]) |
655 | |
656 | === removed file '.pc/allow_alternate_css.patch/horizon/templatetags/branding.py' |
657 | --- .pc/allow_alternate_css.patch/horizon/templatetags/branding.py 2012-04-23 10:04:39 +0000 |
658 | +++ .pc/allow_alternate_css.patch/horizon/templatetags/branding.py 1970-01-01 00:00:00 +0000 |
659 | @@ -1,62 +0,0 @@ |
660 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
661 | - |
662 | -# Copyright 2012 United States Government as represented by the |
663 | -# Administrator of the National Aeronautics and Space Administration. |
664 | -# All Rights Reserved. |
665 | -# |
666 | -# Copyright 2012 Nebula, Inc. |
667 | -# |
668 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
669 | -# not use this file except in compliance with the License. You may obtain |
670 | -# a copy of the License at |
671 | -# |
672 | -# http://www.apache.org/licenses/LICENSE-2.0 |
673 | -# |
674 | -# Unless required by applicable law or agreed to in writing, software |
675 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
676 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
677 | -# License for the specific language governing permissions and limitations |
678 | -# under the License. |
679 | - |
680 | -""" |
681 | -Template tags for customizing Horizon. |
682 | -""" |
683 | - |
684 | -from django import template |
685 | -from django.conf import settings |
686 | - |
687 | - |
688 | -register = template.Library() |
689 | - |
690 | - |
691 | -class SiteBrandingNode(template.Node): |
692 | - def render(self, context): |
693 | - return settings.SITE_BRANDING |
694 | - |
695 | - |
696 | -@register.tag |
697 | -def site_branding(parser, token): |
698 | - return SiteBrandingNode() |
699 | - |
700 | - |
701 | -@register.tag |
702 | -def site_title(parser, token): |
703 | - return settings.SITE_BRANDING |
704 | - |
705 | - |
706 | -# TODO(jeffjapan): This is just an assignment tag version of the above, replace |
707 | -# when the dashboard is upgraded to a django version that |
708 | -# supports the @assignment_tag decorator syntax instead. |
709 | -class SaveBrandingNode(template.Node): |
710 | - def __init__(self, var_name): |
711 | - self.var_name = var_name |
712 | - |
713 | - def render(self, context): |
714 | - context[self.var_name] = settings.SITE_BRANDING |
715 | - return "" |
716 | - |
717 | - |
718 | -@register.tag |
719 | -def save_site_branding(parser, token): |
720 | - tagname = token.contents.split() |
721 | - return SaveBrandingNode(tagname[-1]) |
722 | |
723 | === added directory '.pc/allow_alternate_css.patch/openstack_dashboard' |
724 | === removed directory '.pc/allow_alternate_css.patch/openstack_dashboard' |
725 | === added directory '.pc/allow_alternate_css.patch/openstack_dashboard/templates' |
726 | === removed directory '.pc/allow_alternate_css.patch/openstack_dashboard/templates' |
727 | === added file '.pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html' |
728 | --- .pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html 1970-01-01 00:00:00 +0000 |
729 | +++ .pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html 2013-04-24 15:22:28 +0000 |
730 | @@ -0,0 +1,6 @@ |
731 | +{% comment %} CSS {% endcomment %} |
732 | +<link href='{{ STATIC_URL }}bootstrap/css/bootstrap.min.css' media='screen' rel='stylesheet' /> |
733 | +<link href='{{ STATIC_URL }}dashboard/css/style.css' media='screen' rel='stylesheet' /> |
734 | + |
735 | +{% comment %} Favicon {% endcomment %} |
736 | +<link rel="shortcut icon" href="{{ STATIC_URL }}dashboard/img/favicon.ico"/> |
737 | |
738 | === removed file '.pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html' |
739 | --- .pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html 2012-04-23 10:04:39 +0000 |
740 | +++ .pc/allow_alternate_css.patch/openstack_dashboard/templates/_stylesheets.html 1970-01-01 00:00:00 +0000 |
741 | @@ -1,6 +0,0 @@ |
742 | -{% comment %} CSS {% endcomment %} |
743 | -<link href='{{ STATIC_URL }}bootstrap/css/bootstrap.min.css' media='screen' rel='stylesheet' /> |
744 | -<link href='{{ STATIC_URL }}dashboard/css/style.css' media='screen' rel='stylesheet' /> |
745 | - |
746 | -{% comment %} Favicon {% endcomment %} |
747 | -<link rel="shortcut icon" href="{{ STATIC_URL }}dashboard/img/favicon.ico"/> |
748 | |
749 | === added file '.pc/applied-patches' |
750 | --- .pc/applied-patches 1970-01-01 00:00:00 +0000 |
751 | +++ .pc/applied-patches 2013-04-24 15:22:28 +0000 |
752 | @@ -0,0 +1,8 @@ |
753 | +fix-dashboard-django-wsgi.patch |
754 | +fix-dashboard-manage.patch |
755 | +fix-coverage-binary-name.patch |
756 | +add_juju_settings_panel.patch |
757 | +turn-off-debug.patch |
758 | +allow_alternate_css.patch |
759 | +use-memcache.patch |
760 | +juju_panel-handle_catalog_exception.patch |
761 | |
762 | === removed file '.pc/applied-patches' |
763 | --- .pc/applied-patches 2012-08-30 17:15:04 +0000 |
764 | +++ .pc/applied-patches 1970-01-01 00:00:00 +0000 |
765 | @@ -1,9 +0,0 @@ |
766 | -fix-dashboard-django-wsgi.patch |
767 | -fix-dashboard-manage.patch |
768 | -fix-coverage-binary-name.patch |
769 | -add_juju_settings_panel.patch |
770 | -turn-off-debug.patch |
771 | -allow_alternate_css.patch |
772 | -use-memcache.patch |
773 | -juju_panel-handle_catalog_exception.patch |
774 | -CVE-2012-3540.patch |
775 | |
776 | === added directory '.pc/fix-coverage-binary-name.patch' |
777 | === removed directory '.pc/fix-coverage-binary-name.patch' |
778 | === added file '.pc/fix-coverage-binary-name.patch/.timestamp' |
779 | === added file '.pc/fix-coverage-binary-name.patch/run_tests.sh' |
780 | --- .pc/fix-coverage-binary-name.patch/run_tests.sh 1970-01-01 00:00:00 +0000 |
781 | +++ .pc/fix-coverage-binary-name.patch/run_tests.sh 2013-04-24 15:22:28 +0000 |
782 | @@ -0,0 +1,403 @@ |
783 | +#!/bin/bash |
784 | + |
785 | +set -o errexit |
786 | + |
787 | +# ---------------UPDATE ME-------------------------------# |
788 | +# Increment me any time the environment should be rebuilt. |
789 | +# This includes dependncy changes, directory renames, etc. |
790 | +# Simple integer secuence: 1, 2, 3... |
791 | +environment_version=14 |
792 | +#--------------------------------------------------------# |
793 | + |
794 | +function usage { |
795 | + echo "Usage: $0 [OPTION]..." |
796 | + echo "Run Horizon's test suite(s)" |
797 | + echo "" |
798 | + echo " -V, --virtual-env Always use virtualenv. Install automatically" |
799 | + echo " if not present" |
800 | + echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local" |
801 | + echo " environment" |
802 | + echo " -c, --coverage Generate reports using Coverage" |
803 | + echo " -f, --force Force a clean re-build of the virtual" |
804 | + echo " environment. Useful when dependencies have" |
805 | + echo " been added." |
806 | + echo " -m, --makemessages Update all translation files." |
807 | + echo " -p, --pep8 Just run pep8" |
808 | + echo " -t, --tabs Check for tab characters in files." |
809 | + echo " -y, --pylint Just run pylint" |
810 | + echo " -q, --quiet Run non-interactively. (Relatively) quiet." |
811 | + echo " Implies -V if -N is not set." |
812 | + echo " --only-selenium Run only the Selenium unit tests" |
813 | + echo " --with-selenium Run unit tests including Selenium tests" |
814 | + echo " --runserver Run the Django development server for" |
815 | + echo " openstack_dashboard in the virtual" |
816 | + echo " environment." |
817 | + echo " --docs Just build the documentation" |
818 | + echo " --backup-environment Make a backup of the environment on exit" |
819 | + echo " --restore-environment Restore the environment before running" |
820 | + echo " --destroy-environment DEstroy the environment and exit" |
821 | + echo " -h, --help Print this usage message" |
822 | + echo "" |
823 | + echo "Note: with no options specified, the script will try to run the tests in" |
824 | + echo " a virtual environment, If no virtualenv is found, the script will ask" |
825 | + echo " if you would like to create one. If you prefer to run tests NOT in a" |
826 | + echo " virtual environment, simply pass the -N option." |
827 | + exit |
828 | +} |
829 | + |
830 | +# DEFAULTS FOR RUN_TESTS.SH |
831 | +# |
832 | +root=`pwd` |
833 | +venv=$root/.venv |
834 | +with_venv=tools/with_venv.sh |
835 | +included_dirs="openstack_dashboard horizon" |
836 | + |
837 | +always_venv=0 |
838 | +backup_env=0 |
839 | +command_wrapper="" |
840 | +destroy=0 |
841 | +force=0 |
842 | +just_pep8=0 |
843 | +just_pylint=0 |
844 | +just_docs=0 |
845 | +just_tabs=0 |
846 | +never_venv=0 |
847 | +quiet=0 |
848 | +restore_env=0 |
849 | +runserver=0 |
850 | +only_selenium=0 |
851 | +with_selenium=0 |
852 | +testargs="" |
853 | +with_coverage=0 |
854 | +makemessages=0 |
855 | + |
856 | +# Jenkins sets a "JOB_NAME" variable, if it's not set, we'll make it "default" |
857 | +[ "$JOB_NAME" ] || JOB_NAME="default" |
858 | + |
859 | +function process_option { |
860 | + case "$1" in |
861 | + -h|--help) usage;; |
862 | + -V|--virtual-env) always_venv=1; never_venv=0;; |
863 | + -N|--no-virtual-env) always_venv=0; never_venv=1;; |
864 | + -p|--pep8) just_pep8=1;; |
865 | + -y|--pylint) just_pylint=1;; |
866 | + -f|--force) force=1;; |
867 | + -t|--tabs) just_tabs=1;; |
868 | + -q|--quiet) quiet=1;; |
869 | + -c|--coverage) with_coverage=1;; |
870 | + -m|--makemessages) makemessages=1;; |
871 | + --only-selenium) only_selenium=1; with_selenium=1;; |
872 | + --with-selenium) with_selenium=1;; |
873 | + --docs) just_docs=1;; |
874 | + --runserver) runserver=1;; |
875 | + --backup-environment) backup_env=1;; |
876 | + --restore-environment) restore_env=1;; |
877 | + --destroy-environment) destroy=1;; |
878 | + *) testargs="$testargs $1" |
879 | + esac |
880 | +} |
881 | + |
882 | +function run_server { |
883 | + echo "Starting Django development server..." |
884 | + ${command_wrapper} python $root/manage.py runserver $testargs |
885 | + echo "Server stopped." |
886 | +} |
887 | + |
888 | +function run_pylint { |
889 | + echo "Running pylint ..." |
890 | + PYTHONPATH=$root ${command_wrapper} pylint --rcfile=.pylintrc -f parseable $included_dirs > pylint.txt || true |
891 | + CODE=$? |
892 | + grep Global -A2 pylint.txt |
893 | + if [ $CODE -lt 32 ]; then |
894 | + echo "Completed successfully." |
895 | + exit 0 |
896 | + else |
897 | + echo "Completed with problems." |
898 | + exit $CODE |
899 | + fi |
900 | +} |
901 | + |
902 | +function run_pep8 { |
903 | + echo "Running pep8 ..." |
904 | + rm -f pep8.txt |
905 | + PEP8_EXCLUDE=vcsversion.py |
906 | + PEP8_IGNORE=W602 |
907 | + PEP8_OPTIONS="--exclude=$PEP8_EXCLUDE --ignore=$PEP8_IGNORE --repeat" |
908 | + ${command_wrapper} pep8 $PEP8_OPTIONS $included_dirs > pep8.txt || true |
909 | + PEP8_COUNT=`wc -l pep8.txt | awk '{ print $1 }'` |
910 | + if [ $PEP8_COUNT -ge 1 ]; then |
911 | + echo "PEP8 violations found ($PEP8_COUNT):" |
912 | + cat pep8.txt |
913 | + echo "Please fix all PEP8 violations before committing." |
914 | + else |
915 | + echo "No violations found. Good job!" |
916 | + fi |
917 | + exit $PEP8_COUNT |
918 | +} |
919 | + |
920 | +function run_sphinx { |
921 | + echo "Building sphinx..." |
922 | + export DJANGO_SETTINGS_MODULE=openstack_dashboard.settings |
923 | + ${command_wrapper} sphinx-build -b html docs/source docs/build/html |
924 | + echo "Build complete." |
925 | +} |
926 | + |
927 | +function tab_check { |
928 | + TAB_VIOLATIONS=`find $included_dirs -type f -regex ".*\.\(css\|js\|py\|html\)" -print0 | xargs -0 awk '/\t/' | wc -l` |
929 | + if [ $TAB_VIOLATIONS -gt 0 ]; then |
930 | + echo "TABS! $TAB_VIOLATIONS of them! Oh no!" |
931 | + HORIZON_FILES=`find $included_dirs -type f -regex ".*\.\(css\|js\|py|\html\)"` |
932 | + for TABBED_FILE in $HORIZON_FILES |
933 | + do |
934 | + TAB_COUNT=`awk '/\t/' $TABBED_FILE | wc -l` |
935 | + if [ $TAB_COUNT -gt 0 ]; then |
936 | + echo "$TABBED_FILE: $TAB_COUNT" |
937 | + fi |
938 | + done |
939 | + fi |
940 | + return $TAB_VIOLATIONS; |
941 | +} |
942 | + |
943 | +function destroy_venv { |
944 | + echo "Cleaning environment..." |
945 | + echo "Removing virtualenv..." |
946 | + rm -rf $venv |
947 | + echo "Virtualenv removed." |
948 | + rm -f .environment_version |
949 | + echo "Environment cleaned." |
950 | +} |
951 | + |
952 | +function environment_check { |
953 | + echo "Checking environment." |
954 | + if [ -f .environment_version ]; then |
955 | + ENV_VERS=`cat .environment_version` |
956 | + if [ $ENV_VERS -eq $environment_version ]; then |
957 | + if [ -e ${venv} ]; then |
958 | + # If the environment exists and is up-to-date then set our variables |
959 | + command_wrapper="${root}/${with_venv}" |
960 | + echo "Environment is up to date." |
961 | + return 0 |
962 | + fi |
963 | + fi |
964 | + fi |
965 | + |
966 | + if [ $always_venv -eq 1 ]; then |
967 | + install_venv |
968 | + else |
969 | + if [ ! -e ${venv} ]; then |
970 | + echo -e "Environment not found. Install? (Y/n) \c" |
971 | + else |
972 | + echo -e "Your environment appears to be out of date. Update? (Y/n) \c" |
973 | + fi |
974 | + read update_env |
975 | + if [ "x$update_env" = "xY" -o "x$update_env" = "x" -o "x$update_env" = "xy" ]; then |
976 | + install_venv |
977 | + fi |
978 | + fi |
979 | +} |
980 | + |
981 | +function sanity_check { |
982 | + # Anything that should be determined prior to running the tests, server, etc. |
983 | + # Don't sanity-check anything environment-related in -N flag is set |
984 | + if [ $never_venv -eq 0 ]; then |
985 | + if [ ! -e ${venv} ]; then |
986 | + echo "Virtualenv not found at $venv. Did install_venv.py succeed?" |
987 | + exit 1 |
988 | + fi |
989 | + fi |
990 | + if [ $with_selenium -eq 1 ]; then |
991 | + SELENIUM_JOB=`ps -elf | grep "selenium" | grep -v grep` |
992 | + if [ $? -eq 0 ]; then |
993 | + echo "WARNING: Selenium doesn't appear to be running. Please start a selenium server process." |
994 | + with_selenium=0 |
995 | + fi |
996 | + fi |
997 | + if [ $only_selenium -eq 1 ]; then |
998 | + export SKIP_UNITTESTS=1 |
999 | + fi |
1000 | + # Remove .pyc files. This is sanity checking because they can linger |
1001 | + # after old files are deleted. |
1002 | + find . -name "*.pyc" -exec rm -rf {} \; |
1003 | +} |
1004 | + |
1005 | +function backup_environment { |
1006 | + if [ $backup_env -eq 1 ]; then |
1007 | + echo "Backing up environment \"$JOB_NAME\"..." |
1008 | + if [ ! -e ${venv} ]; then |
1009 | + echo "Environment not installed. Cannot back up." |
1010 | + return 0 |
1011 | + fi |
1012 | + if [ -d /tmp/.horizon_environment/$JOB_NAME ]; then |
1013 | + mv /tmp/.horizon_environment/$JOB_NAME /tmp/.horizon_environment/$JOB_NAME.old |
1014 | + rm -rf /tmp/.horizon_environment/$JOB_NAME |
1015 | + fi |
1016 | + mkdir -p /tmp/.horizon_environment/$JOB_NAME |
1017 | + cp -r $venv /tmp/.horizon_environment/$JOB_NAME/ |
1018 | + cp .environment_version /tmp/.horizon_environment/$JOB_NAME/ |
1019 | + # Remove the backup now that we've completed successfully |
1020 | + rm -rf /tmp/.horizon_environment/$JOB_NAME.old |
1021 | + echo "Backup completed" |
1022 | + fi |
1023 | +} |
1024 | + |
1025 | +function restore_environment { |
1026 | + if [ $restore_env -eq 1 ]; then |
1027 | + echo "Restoring environment from backup..." |
1028 | + if [ ! -d /tmp/.horizon_environment/$JOB_NAME ]; then |
1029 | + echo "No backup to restore from." |
1030 | + return 0 |
1031 | + fi |
1032 | + |
1033 | + cp -r /tmp/.horizon_environment/$JOB_NAME/.venv ./ || true |
1034 | + cp -r /tmp/.horizon_environment/$JOB_NAME/.environment_version ./ || true |
1035 | + |
1036 | + echo "Environment restored successfully." |
1037 | + fi |
1038 | +} |
1039 | + |
1040 | +function install_venv { |
1041 | + # Install with install_venv.py |
1042 | + export PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE-/tmp/.pip_download_cache} |
1043 | + export PIP_USE_MIRRORS=true |
1044 | + if [ $quiet -eq 1 ]; then |
1045 | + export PIP_NO_INPUT=true |
1046 | + fi |
1047 | + echo "Fetching new src packages..." |
1048 | + rm -rf $venv/src |
1049 | + python tools/install_venv.py |
1050 | + command_wrapper="$root/${with_venv}" |
1051 | + # Make sure it worked and record the environment version |
1052 | + sanity_check |
1053 | + chmod -R 754 $venv |
1054 | + echo $environment_version > .environment_version |
1055 | +} |
1056 | + |
1057 | +function run_tests { |
1058 | + sanity_check |
1059 | + |
1060 | + echo "Running Horizon application tests" |
1061 | + export NOSE_XUNIT_FILE=horizon/nosetests.xml |
1062 | + ${command_wrapper} coverage erase |
1063 | + ${command_wrapper} coverage run -p $root/manage.py test horizon --settings=horizon.tests.testsettings $testargs |
1064 | + # get results of the Horizon tests |
1065 | + HORIZON_RESULT=$? |
1066 | + |
1067 | + echo "Running openstack_dashboard tests" |
1068 | + export NOSE_XUNIT_FILE=openstack_dashboard/nosetests.xml |
1069 | + if [ $with_selenium -eq 1 ]; then |
1070 | + ${command_wrapper} coverage run -p $root/manage.py test openstack_dashboard --settings=horizon.tests.testsettings --with-selenium --with-cherrypyliveserver $testargs |
1071 | + else |
1072 | + ${command_wrapper} coverage run -p $root/manage.py test openstack_dashboard --settings=horizon.tests.testsettings $testargs |
1073 | + fi |
1074 | + # get results of the openstack_dashboard tests |
1075 | + DASHBOARD_RESULT=$? |
1076 | + |
1077 | + if [ $with_coverage -eq 1 ]; then |
1078 | + echo "Generating coverage reports" |
1079 | + ${command_wrapper} coverage combine |
1080 | + ${command_wrapper} coverage xml -i --omit='/usr*,setup.py,*egg*,.venv/*' |
1081 | + ${command_wrapper} coverage html -i --omit='/usr*,setup.py,*egg*,.venv/*' -d reports |
1082 | + fi |
1083 | + # Remove the leftover coverage files from the -p flag earlier. |
1084 | + rm -f .coverage.* |
1085 | + |
1086 | + if [ $(($HORIZON_RESULT || $DASHBOARD_RESULT)) -eq 0 ]; then |
1087 | + echo "Tests completed successfully." |
1088 | + else |
1089 | + echo "Tests failed." |
1090 | + fi |
1091 | + exit $(($HORIZON_RESULT || $DASHBOARD_RESULT)) |
1092 | +} |
1093 | + |
1094 | +function run_makemessages { |
1095 | + cd horizon |
1096 | + ${command_wrapper} $root/manage.py makemessages --all |
1097 | + HORIZON_RESULT=$? |
1098 | + cd ../openstack_dashboard |
1099 | + ${command_wrapper} $root/manage.py makemessages --all |
1100 | + DASHBOARD_RESULT=$? |
1101 | + cd .. |
1102 | + exit $(($HORIZON_RESULT || $DASHBOARD_RESULT)) |
1103 | +} |
1104 | + |
1105 | + |
1106 | +# ---------PREPARE THE ENVIRONMENT------------ # |
1107 | + |
1108 | +# PROCESS ARGUMENTS, OVERRIDE DEFAULTS |
1109 | +for arg in "$@"; do |
1110 | + process_option $arg |
1111 | +done |
1112 | + |
1113 | +if [ $quiet -eq 1 ] && [ $never_venv -eq 0 ] && [ $always_venv -eq 0 ] |
1114 | +then |
1115 | + always_venv=1 |
1116 | +fi |
1117 | + |
1118 | +# If destroy is set, just blow it away and exit. |
1119 | +if [ $destroy -eq 1 ]; then |
1120 | + destroy_venv |
1121 | + exit 0 |
1122 | +fi |
1123 | + |
1124 | +# Ignore all of this if the -N flag was set |
1125 | +if [ $never_venv -eq 0 ]; then |
1126 | + |
1127 | + # Restore previous environment if desired |
1128 | + if [ $restore_env -eq 1 ]; then |
1129 | + restore_environment |
1130 | + fi |
1131 | + |
1132 | + # Remove the virtual environment if --force used |
1133 | + if [ $force -eq 1 ]; then |
1134 | + destroy_venv |
1135 | + fi |
1136 | + |
1137 | + # Then check if it's up-to-date |
1138 | + environment_check |
1139 | + |
1140 | + # Create a backup of the up-to-date environment if desired |
1141 | + if [ $backup_env -eq 1 ]; then |
1142 | + backup_environment |
1143 | + fi |
1144 | +fi |
1145 | + |
1146 | +# ---------EXERCISE THE CODE------------ # |
1147 | + |
1148 | +# Build the docs |
1149 | +if [ $just_docs -eq 1 ]; then |
1150 | + run_sphinx |
1151 | + exit $? |
1152 | +fi |
1153 | + |
1154 | +# Update translation files |
1155 | +if [ $makemessages -eq 1 ]; then |
1156 | + run_makemessages |
1157 | + exit $? |
1158 | +fi |
1159 | + |
1160 | +# PEP8 |
1161 | +if [ $just_pep8 -eq 1 ]; then |
1162 | + run_pep8 |
1163 | + exit $? |
1164 | +fi |
1165 | + |
1166 | +# Pylint |
1167 | +if [ $just_pylint -eq 1 ]; then |
1168 | + run_pylint |
1169 | + exit $? |
1170 | +fi |
1171 | + |
1172 | +# Tab checker |
1173 | +if [ $just_tabs -eq 1 ]; then |
1174 | + tab_check |
1175 | + exit $? |
1176 | +fi |
1177 | + |
1178 | +# Django development server |
1179 | +if [ $runserver -eq 1 ]; then |
1180 | + run_server |
1181 | + exit $? |
1182 | +fi |
1183 | + |
1184 | +# Full test suite |
1185 | +run_tests || exit |
1186 | |
1187 | === removed file '.pc/fix-coverage-binary-name.patch/run_tests.sh' |
1188 | --- .pc/fix-coverage-binary-name.patch/run_tests.sh 2012-08-24 03:27:33 +0000 |
1189 | +++ .pc/fix-coverage-binary-name.patch/run_tests.sh 1970-01-01 00:00:00 +0000 |
1190 | @@ -1,403 +0,0 @@ |
1191 | -#!/bin/bash |
1192 | - |
1193 | -set -o errexit |
1194 | - |
1195 | -# ---------------UPDATE ME-------------------------------# |
1196 | -# Increment me any time the environment should be rebuilt. |
1197 | -# This includes dependncy changes, directory renames, etc. |
1198 | -# Simple integer secuence: 1, 2, 3... |
1199 | -environment_version=14 |
1200 | -#--------------------------------------------------------# |
1201 | - |
1202 | -function usage { |
1203 | - echo "Usage: $0 [OPTION]..." |
1204 | - echo "Run Horizon's test suite(s)" |
1205 | - echo "" |
1206 | - echo " -V, --virtual-env Always use virtualenv. Install automatically" |
1207 | - echo " if not present" |
1208 | - echo " -N, --no-virtual-env Don't use virtualenv. Run tests in local" |
1209 | - echo " environment" |
1210 | - echo " -c, --coverage Generate reports using Coverage" |
1211 | - echo " -f, --force Force a clean re-build of the virtual" |
1212 | - echo " environment. Useful when dependencies have" |
1213 | - echo " been added." |
1214 | - echo " -m, --makemessages Update all translation files." |
1215 | - echo " -p, --pep8 Just run pep8" |
1216 | - echo " -t, --tabs Check for tab characters in files." |
1217 | - echo " -y, --pylint Just run pylint" |
1218 | - echo " -q, --quiet Run non-interactively. (Relatively) quiet." |
1219 | - echo " Implies -V if -N is not set." |
1220 | - echo " --only-selenium Run only the Selenium unit tests" |
1221 | - echo " --with-selenium Run unit tests including Selenium tests" |
1222 | - echo " --runserver Run the Django development server for" |
1223 | - echo " openstack_dashboard in the virtual" |
1224 | - echo " environment." |
1225 | - echo " --docs Just build the documentation" |
1226 | - echo " --backup-environment Make a backup of the environment on exit" |
1227 | - echo " --restore-environment Restore the environment before running" |
1228 | - echo " --destroy-environment DEstroy the environment and exit" |
1229 | - echo " -h, --help Print this usage message" |
1230 | - echo "" |
1231 | - echo "Note: with no options specified, the script will try to run the tests in" |
1232 | - echo " a virtual environment, If no virtualenv is found, the script will ask" |
1233 | - echo " if you would like to create one. If you prefer to run tests NOT in a" |
1234 | - echo " virtual environment, simply pass the -N option." |
1235 | - exit |
1236 | -} |
1237 | - |
1238 | -# DEFAULTS FOR RUN_TESTS.SH |
1239 | -# |
1240 | -root=`pwd` |
1241 | -venv=$root/.venv |
1242 | -with_venv=tools/with_venv.sh |
1243 | -included_dirs="openstack_dashboard horizon" |
1244 | - |
1245 | -always_venv=0 |
1246 | -backup_env=0 |
1247 | -command_wrapper="" |
1248 | -destroy=0 |
1249 | -force=0 |
1250 | -just_pep8=0 |
1251 | -just_pylint=0 |
1252 | -just_docs=0 |
1253 | -just_tabs=0 |
1254 | -never_venv=0 |
1255 | -quiet=0 |
1256 | -restore_env=0 |
1257 | -runserver=0 |
1258 | -only_selenium=0 |
1259 | -with_selenium=0 |
1260 | -testargs="" |
1261 | -with_coverage=0 |
1262 | -makemessages=0 |
1263 | - |
1264 | -# Jenkins sets a "JOB_NAME" variable, if it's not set, we'll make it "default" |
1265 | -[ "$JOB_NAME" ] || JOB_NAME="default" |
1266 | - |
1267 | -function process_option { |
1268 | - case "$1" in |
1269 | - -h|--help) usage;; |
1270 | - -V|--virtual-env) always_venv=1; never_venv=0;; |
1271 | - -N|--no-virtual-env) always_venv=0; never_venv=1;; |
1272 | - -p|--pep8) just_pep8=1;; |
1273 | - -y|--pylint) just_pylint=1;; |
1274 | - -f|--force) force=1;; |
1275 | - -t|--tabs) just_tabs=1;; |
1276 | - -q|--quiet) quiet=1;; |
1277 | - -c|--coverage) with_coverage=1;; |
1278 | - -m|--makemessages) makemessages=1;; |
1279 | - --only-selenium) only_selenium=1; with_selenium=1;; |
1280 | - --with-selenium) with_selenium=1;; |
1281 | - --docs) just_docs=1;; |
1282 | - --runserver) runserver=1;; |
1283 | - --backup-environment) backup_env=1;; |
1284 | - --restore-environment) restore_env=1;; |
1285 | - --destroy-environment) destroy=1;; |
1286 | - *) testargs="$testargs $1" |
1287 | - esac |
1288 | -} |
1289 | - |
1290 | -function run_server { |
1291 | - echo "Starting Django development server..." |
1292 | - ${command_wrapper} python $root/manage.py runserver $testargs |
1293 | - echo "Server stopped." |
1294 | -} |
1295 | - |
1296 | -function run_pylint { |
1297 | - echo "Running pylint ..." |
1298 | - PYTHONPATH=$root ${command_wrapper} pylint --rcfile=.pylintrc -f parseable $included_dirs > pylint.txt || true |
1299 | - CODE=$? |
1300 | - grep Global -A2 pylint.txt |
1301 | - if [ $CODE -lt 32 ]; then |
1302 | - echo "Completed successfully." |
1303 | - exit 0 |
1304 | - else |
1305 | - echo "Completed with problems." |
1306 | - exit $CODE |
1307 | - fi |
1308 | -} |
1309 | - |
1310 | -function run_pep8 { |
1311 | - echo "Running pep8 ..." |
1312 | - rm -f pep8.txt |
1313 | - PEP8_EXCLUDE=vcsversion.py |
1314 | - PEP8_IGNORE=W602 |
1315 | - PEP8_OPTIONS="--exclude=$PEP8_EXCLUDE --ignore=$PEP8_IGNORE --repeat" |
1316 | - ${command_wrapper} pep8 $PEP8_OPTIONS $included_dirs > pep8.txt || true |
1317 | - PEP8_COUNT=`wc -l pep8.txt | awk '{ print $1 }'` |
1318 | - if [ $PEP8_COUNT -ge 1 ]; then |
1319 | - echo "PEP8 violations found ($PEP8_COUNT):" |
1320 | - cat pep8.txt |
1321 | - echo "Please fix all PEP8 violations before committing." |
1322 | - else |
1323 | - echo "No violations found. Good job!" |
1324 | - fi |
1325 | - exit $PEP8_COUNT |
1326 | -} |
1327 | - |
1328 | -function run_sphinx { |
1329 | - echo "Building sphinx..." |
1330 | - export DJANGO_SETTINGS_MODULE=openstack_dashboard.settings |
1331 | - ${command_wrapper} sphinx-build -b html docs/source docs/build/html |
1332 | - echo "Build complete." |
1333 | -} |
1334 | - |
1335 | -function tab_check { |
1336 | - TAB_VIOLATIONS=`find $included_dirs -type f -regex ".*\.\(css\|js\|py\|html\)" -print0 | xargs -0 awk '/\t/' | wc -l` |
1337 | - if [ $TAB_VIOLATIONS -gt 0 ]; then |
1338 | - echo "TABS! $TAB_VIOLATIONS of them! Oh no!" |
1339 | - HORIZON_FILES=`find $included_dirs -type f -regex ".*\.\(css\|js\|py|\html\)"` |
1340 | - for TABBED_FILE in $HORIZON_FILES |
1341 | - do |
1342 | - TAB_COUNT=`awk '/\t/' $TABBED_FILE | wc -l` |
1343 | - if [ $TAB_COUNT -gt 0 ]; then |
1344 | - echo "$TABBED_FILE: $TAB_COUNT" |
1345 | - fi |
1346 | - done |
1347 | - fi |
1348 | - return $TAB_VIOLATIONS; |
1349 | -} |
1350 | - |
1351 | -function destroy_venv { |
1352 | - echo "Cleaning environment..." |
1353 | - echo "Removing virtualenv..." |
1354 | - rm -rf $venv |
1355 | - echo "Virtualenv removed." |
1356 | - rm -f .environment_version |
1357 | - echo "Environment cleaned." |
1358 | -} |
1359 | - |
1360 | -function environment_check { |
1361 | - echo "Checking environment." |
1362 | - if [ -f .environment_version ]; then |
1363 | - ENV_VERS=`cat .environment_version` |
1364 | - if [ $ENV_VERS -eq $environment_version ]; then |
1365 | - if [ -e ${venv} ]; then |
1366 | - # If the environment exists and is up-to-date then set our variables |
1367 | - command_wrapper="${root}/${with_venv}" |
1368 | - echo "Environment is up to date." |
1369 | - return 0 |
1370 | - fi |
1371 | - fi |
1372 | - fi |
1373 | - |
1374 | - if [ $always_venv -eq 1 ]; then |
1375 | - install_venv |
1376 | - else |
1377 | - if [ ! -e ${venv} ]; then |
1378 | - echo -e "Environment not found. Install? (Y/n) \c" |
1379 | - else |
1380 | - echo -e "Your environment appears to be out of date. Update? (Y/n) \c" |
1381 | - fi |
1382 | - read update_env |
1383 | - if [ "x$update_env" = "xY" -o "x$update_env" = "x" -o "x$update_env" = "xy" ]; then |
1384 | - install_venv |
1385 | - fi |
1386 | - fi |
1387 | -} |
1388 | - |
1389 | -function sanity_check { |
1390 | - # Anything that should be determined prior to running the tests, server, etc. |
1391 | - # Don't sanity-check anything environment-related in -N flag is set |
1392 | - if [ $never_venv -eq 0 ]; then |
1393 | - if [ ! -e ${venv} ]; then |
1394 | - echo "Virtualenv not found at $venv. Did install_venv.py succeed?" |
1395 | - exit 1 |
1396 | - fi |
1397 | - fi |
1398 | - if [ $with_selenium -eq 1 ]; then |
1399 | - SELENIUM_JOB=`ps -elf | grep "selenium" | grep -v grep` |
1400 | - if [ $? -eq 0 ]; then |
1401 | - echo "WARNING: Selenium doesn't appear to be running. Please start a selenium server process." |
1402 | - with_selenium=0 |
1403 | - fi |
1404 | - fi |
1405 | - if [ $only_selenium -eq 1 ]; then |
1406 | - export SKIP_UNITTESTS=1 |
1407 | - fi |
1408 | - # Remove .pyc files. This is sanity checking because they can linger |
1409 | - # after old files are deleted. |
1410 | - find . -name "*.pyc" -exec rm -rf {} \; |
1411 | -} |
1412 | - |
1413 | -function backup_environment { |
1414 | - if [ $backup_env -eq 1 ]; then |
1415 | - echo "Backing up environment \"$JOB_NAME\"..." |
1416 | - if [ ! -e ${venv} ]; then |
1417 | - echo "Environment not installed. Cannot back up." |
1418 | - return 0 |
1419 | - fi |
1420 | - if [ -d /tmp/.horizon_environment/$JOB_NAME ]; then |
1421 | - mv /tmp/.horizon_environment/$JOB_NAME /tmp/.horizon_environment/$JOB_NAME.old |
1422 | - rm -rf /tmp/.horizon_environment/$JOB_NAME |
1423 | - fi |
1424 | - mkdir -p /tmp/.horizon_environment/$JOB_NAME |
1425 | - cp -r $venv /tmp/.horizon_environment/$JOB_NAME/ |
1426 | - cp .environment_version /tmp/.horizon_environment/$JOB_NAME/ |
1427 | - # Remove the backup now that we've completed successfully |
1428 | - rm -rf /tmp/.horizon_environment/$JOB_NAME.old |
1429 | - echo "Backup completed" |
1430 | - fi |
1431 | -} |
1432 | - |
1433 | -function restore_environment { |
1434 | - if [ $restore_env -eq 1 ]; then |
1435 | - echo "Restoring environment from backup..." |
1436 | - if [ ! -d /tmp/.horizon_environment/$JOB_NAME ]; then |
1437 | - echo "No backup to restore from." |
1438 | - return 0 |
1439 | - fi |
1440 | - |
1441 | - cp -r /tmp/.horizon_environment/$JOB_NAME/.venv ./ || true |
1442 | - cp -r /tmp/.horizon_environment/$JOB_NAME/.environment_version ./ || true |
1443 | - |
1444 | - echo "Environment restored successfully." |
1445 | - fi |
1446 | -} |
1447 | - |
1448 | -function install_venv { |
1449 | - # Install with install_venv.py |
1450 | - export PIP_DOWNLOAD_CACHE=${PIP_DOWNLOAD_CACHE-/tmp/.pip_download_cache} |
1451 | - export PIP_USE_MIRRORS=true |
1452 | - if [ $quiet -eq 1 ]; then |
1453 | - export PIP_NO_INPUT=true |
1454 | - fi |
1455 | - echo "Fetching new src packages..." |
1456 | - rm -rf $venv/src |
1457 | - python tools/install_venv.py |
1458 | - command_wrapper="$root/${with_venv}" |
1459 | - # Make sure it worked and record the environment version |
1460 | - sanity_check |
1461 | - chmod -R 754 $venv |
1462 | - echo $environment_version > .environment_version |
1463 | -} |
1464 | - |
1465 | -function run_tests { |
1466 | - sanity_check |
1467 | - |
1468 | - echo "Running Horizon application tests" |
1469 | - export NOSE_XUNIT_FILE=horizon/nosetests.xml |
1470 | - ${command_wrapper} coverage erase |
1471 | - ${command_wrapper} coverage run -p $root/manage.py test horizon --settings=horizon.tests.testsettings $testargs |
1472 | - # get results of the Horizon tests |
1473 | - HORIZON_RESULT=$? |
1474 | - |
1475 | - echo "Running openstack_dashboard tests" |
1476 | - export NOSE_XUNIT_FILE=openstack_dashboard/nosetests.xml |
1477 | - if [ $with_selenium -eq 1 ]; then |
1478 | - ${command_wrapper} coverage run -p $root/manage.py test openstack_dashboard --settings=horizon.tests.testsettings --with-selenium --with-cherrypyliveserver $testargs |
1479 | - else |
1480 | - ${command_wrapper} coverage run -p $root/manage.py test openstack_dashboard --settings=horizon.tests.testsettings $testargs |
1481 | - fi |
1482 | - # get results of the openstack_dashboard tests |
1483 | - DASHBOARD_RESULT=$? |
1484 | - |
1485 | - if [ $with_coverage -eq 1 ]; then |
1486 | - echo "Generating coverage reports" |
1487 | - ${command_wrapper} coverage combine |
1488 | - ${command_wrapper} coverage xml -i --omit='/usr*,setup.py,*egg*,.venv/*' |
1489 | - ${command_wrapper} coverage html -i --omit='/usr*,setup.py,*egg*,.venv/*' -d reports |
1490 | - fi |
1491 | - # Remove the leftover coverage files from the -p flag earlier. |
1492 | - rm -f .coverage.* |
1493 | - |
1494 | - if [ $(($HORIZON_RESULT || $DASHBOARD_RESULT)) -eq 0 ]; then |
1495 | - echo "Tests completed successfully." |
1496 | - else |
1497 | - echo "Tests failed." |
1498 | - fi |
1499 | - exit $(($HORIZON_RESULT || $DASHBOARD_RESULT)) |
1500 | -} |
1501 | - |
1502 | -function run_makemessages { |
1503 | - cd horizon |
1504 | - ${command_wrapper} $root/manage.py makemessages --all |
1505 | - HORIZON_RESULT=$? |
1506 | - cd ../openstack_dashboard |
1507 | - ${command_wrapper} $root/manage.py makemessages --all |
1508 | - DASHBOARD_RESULT=$? |
1509 | - cd .. |
1510 | - exit $(($HORIZON_RESULT || $DASHBOARD_RESULT)) |
1511 | -} |
1512 | - |
1513 | - |
1514 | -# ---------PREPARE THE ENVIRONMENT------------ # |
1515 | - |
1516 | -# PROCESS ARGUMENTS, OVERRIDE DEFAULTS |
1517 | -for arg in "$@"; do |
1518 | - process_option $arg |
1519 | -done |
1520 | - |
1521 | -if [ $quiet -eq 1 ] && [ $never_venv -eq 0 ] && [ $always_venv -eq 0 ] |
1522 | -then |
1523 | - always_venv=1 |
1524 | -fi |
1525 | - |
1526 | -# If destroy is set, just blow it away and exit. |
1527 | -if [ $destroy -eq 1 ]; then |
1528 | - destroy_venv |
1529 | - exit 0 |
1530 | -fi |
1531 | - |
1532 | -# Ignore all of this if the -N flag was set |
1533 | -if [ $never_venv -eq 0 ]; then |
1534 | - |
1535 | - # Restore previous environment if desired |
1536 | - if [ $restore_env -eq 1 ]; then |
1537 | - restore_environment |
1538 | - fi |
1539 | - |
1540 | - # Remove the virtual environment if --force used |
1541 | - if [ $force -eq 1 ]; then |
1542 | - destroy_venv |
1543 | - fi |
1544 | - |
1545 | - # Then check if it's up-to-date |
1546 | - environment_check |
1547 | - |
1548 | - # Create a backup of the up-to-date environment if desired |
1549 | - if [ $backup_env -eq 1 ]; then |
1550 | - backup_environment |
1551 | - fi |
1552 | -fi |
1553 | - |
1554 | -# ---------EXERCISE THE CODE------------ # |
1555 | - |
1556 | -# Build the docs |
1557 | -if [ $just_docs -eq 1 ]; then |
1558 | - run_sphinx |
1559 | - exit $? |
1560 | -fi |
1561 | - |
1562 | -# Update translation files |
1563 | -if [ $makemessages -eq 1 ]; then |
1564 | - run_makemessages |
1565 | - exit $? |
1566 | -fi |
1567 | - |
1568 | -# PEP8 |
1569 | -if [ $just_pep8 -eq 1 ]; then |
1570 | - run_pep8 |
1571 | - exit $? |
1572 | -fi |
1573 | - |
1574 | -# Pylint |
1575 | -if [ $just_pylint -eq 1 ]; then |
1576 | - run_pylint |
1577 | - exit $? |
1578 | -fi |
1579 | - |
1580 | -# Tab checker |
1581 | -if [ $just_tabs -eq 1 ]; then |
1582 | - tab_check |
1583 | - exit $? |
1584 | -fi |
1585 | - |
1586 | -# Django development server |
1587 | -if [ $runserver -eq 1 ]; then |
1588 | - run_server |
1589 | - exit $? |
1590 | -fi |
1591 | - |
1592 | -# Full test suite |
1593 | -run_tests || exit |
1594 | |
1595 | === added directory '.pc/fix-dashboard-django-wsgi.patch' |
1596 | === removed directory '.pc/fix-dashboard-django-wsgi.patch' |
1597 | === added file '.pc/fix-dashboard-django-wsgi.patch/.timestamp' |
1598 | === added directory '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard' |
1599 | === removed directory '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard' |
1600 | === added directory '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi' |
1601 | === removed directory '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi' |
1602 | === added file '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi' |
1603 | --- .pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi 1970-01-01 00:00:00 +0000 |
1604 | +++ .pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi 2013-04-24 15:22:28 +0000 |
1605 | @@ -0,0 +1,15 @@ |
1606 | +import logging |
1607 | +import os |
1608 | +import sys |
1609 | +import django.core.handlers.wsgi |
1610 | +from django.conf import settings |
1611 | + |
1612 | +# Add this file path to sys.path in order to import settings |
1613 | +sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..')) |
1614 | +os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings' |
1615 | +sys.stdout = sys.stderr |
1616 | + |
1617 | +DEBUG = False |
1618 | + |
1619 | +application = django.core.handlers.wsgi.WSGIHandler() |
1620 | + |
1621 | |
1622 | === removed file '.pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi' |
1623 | --- .pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi 2012-03-02 12:11:59 +0000 |
1624 | +++ .pc/fix-dashboard-django-wsgi.patch/openstack_dashboard/wsgi/django.wsgi 1970-01-01 00:00:00 +0000 |
1625 | @@ -1,15 +0,0 @@ |
1626 | -import logging |
1627 | -import os |
1628 | -import sys |
1629 | -import django.core.handlers.wsgi |
1630 | -from django.conf import settings |
1631 | - |
1632 | -# Add this file path to sys.path in order to import settings |
1633 | -sys.path.insert(0, os.path.join(os.path.dirname(os.path.realpath(__file__)), '../..')) |
1634 | -os.environ['DJANGO_SETTINGS_MODULE'] = 'openstack_dashboard.settings' |
1635 | -sys.stdout = sys.stderr |
1636 | - |
1637 | -DEBUG = False |
1638 | - |
1639 | -application = django.core.handlers.wsgi.WSGIHandler() |
1640 | - |
1641 | |
1642 | === added directory '.pc/fix-dashboard-manage.patch' |
1643 | === removed directory '.pc/fix-dashboard-manage.patch' |
1644 | === added file '.pc/fix-dashboard-manage.patch/.timestamp' |
1645 | === added file '.pc/fix-dashboard-manage.patch/manage.py' |
1646 | --- .pc/fix-dashboard-manage.patch/manage.py 1970-01-01 00:00:00 +0000 |
1647 | +++ .pc/fix-dashboard-manage.patch/manage.py 2013-04-24 15:22:28 +0000 |
1648 | @@ -0,0 +1,12 @@ |
1649 | +#!/usr/bin/env python |
1650 | + |
1651 | +import os |
1652 | +import sys |
1653 | + |
1654 | + |
1655 | +if __name__ == "__main__": |
1656 | + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "openstack_dashboard.settings") |
1657 | + |
1658 | + from django.core.management import execute_from_command_line |
1659 | + |
1660 | + execute_from_command_line(sys.argv) |
1661 | |
1662 | === removed file '.pc/fix-dashboard-manage.patch/manage.py' |
1663 | --- .pc/fix-dashboard-manage.patch/manage.py 2012-03-09 11:50:22 +0000 |
1664 | +++ .pc/fix-dashboard-manage.patch/manage.py 1970-01-01 00:00:00 +0000 |
1665 | @@ -1,12 +0,0 @@ |
1666 | -#!/usr/bin/env python |
1667 | - |
1668 | -import os |
1669 | -import sys |
1670 | - |
1671 | - |
1672 | -if __name__ == "__main__": |
1673 | - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "openstack_dashboard.settings") |
1674 | - |
1675 | - from django.core.management import execute_from_command_line |
1676 | - |
1677 | - execute_from_command_line(sys.argv) |
1678 | |
1679 | === added directory '.pc/juju_panel-handle_catalog_exception.patch' |
1680 | === removed directory '.pc/juju_panel-handle_catalog_exception.patch' |
1681 | === added file '.pc/juju_panel-handle_catalog_exception.patch/.timestamp' |
1682 | === added directory '.pc/juju_panel-handle_catalog_exception.patch/horizon' |
1683 | === removed directory '.pc/juju_panel-handle_catalog_exception.patch/horizon' |
1684 | === added directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards' |
1685 | === removed directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards' |
1686 | === added directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings' |
1687 | === removed directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings' |
1688 | === added directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju' |
1689 | === removed directory '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju' |
1690 | === added file '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py' |
1691 | --- .pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py 1970-01-01 00:00:00 +0000 |
1692 | +++ .pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py 2013-04-24 15:22:28 +0000 |
1693 | @@ -0,0 +1,96 @@ |
1694 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
1695 | + |
1696 | +# Copyright 2012 Openstack, LLC |
1697 | +# Copyright 2012 Canonical Ltd. |
1698 | +# |
1699 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
1700 | +# not use this file except in compliance with the License. You may obtain |
1701 | +# a copy of the License at |
1702 | +# |
1703 | +# http://www.apache.org/licenses/LICENSE-2.0 |
1704 | +# |
1705 | +# Unless required by applicable law or agreed to in writing, software |
1706 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
1707 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
1708 | +# License for the specific language governing permissions and limitations |
1709 | +# under the License. |
1710 | + |
1711 | +import logging |
1712 | +import tempfile |
1713 | +import zipfile |
1714 | +from contextlib import closing |
1715 | + |
1716 | +from django import http, shortcuts |
1717 | +from django.template.loader import render_to_string |
1718 | +from django.utils.translation import ugettext_lazy as _ |
1719 | + |
1720 | +from horizon import api |
1721 | +from horizon import exceptions |
1722 | +from horizon import forms |
1723 | + |
1724 | +import boto |
1725 | +import uuid |
1726 | + |
1727 | +LOG = logging.getLogger(__name__) |
1728 | + |
1729 | + |
1730 | +class DownloadJujuEnvironment(forms.SelfHandlingForm): |
1731 | + # This is heavily based off the ec2 credentials form |
1732 | + tenant = forms.ChoiceField(label=_("Select a Project")) |
1733 | + @classmethod |
1734 | + def _instantiate(cls, request, *args, **kwargs): |
1735 | + return cls(request, *args, **kwargs) |
1736 | + |
1737 | + def __init__(self, request, *args, **kwargs): |
1738 | + super(DownloadJujuEnvironment, self).__init__(*args, **kwargs) |
1739 | + tenant_choices = [] |
1740 | + try: |
1741 | + tenant_list = api.keystone.tenant_list(request) |
1742 | + except: |
1743 | + tenant_list = [] |
1744 | + exceptions.handle(request, _("Unable to retrieve tenant list.")) |
1745 | + |
1746 | + for tenant in tenant_list: |
1747 | + if tenant.enabled: |
1748 | + tenant_choices.append((tenant.id, tenant.name)) |
1749 | + if not tenant_choices: |
1750 | + self.fields['tenant'].choices = ('', 'No Available Tenants') |
1751 | + else: |
1752 | + self.fields['tenant'].choices = tenant_choices |
1753 | + |
1754 | + def handle(self, request, data): |
1755 | + def find_or_create_access_keys(request, tenant_id): |
1756 | + keys = api.keystone.list_ec2_credentials(request, request.user.id) |
1757 | + if keys: |
1758 | + return keys[0] |
1759 | + else: |
1760 | + return api.keystone.create_ec2_credentials(request, |
1761 | + request.user.id, |
1762 | + tenant_id) |
1763 | + try: |
1764 | + api.keystone.token_create_scoped(request, |
1765 | + data.get('tenant'), |
1766 | + request.user.token) |
1767 | + keys = find_or_create_access_keys(request, data.get('tenant')) |
1768 | + tenant_id = data['tenant'] |
1769 | + tenant_name = dict(self.fields['tenant'].choices)[tenant_id] |
1770 | + control_bucket = "juju-openstack-%s-%s" % (tenant_name, str(uuid.uuid4())[19:]) |
1771 | + context = {'ec2_access_key': keys.access, |
1772 | + 'ec2_secret_key': keys.secret, |
1773 | + 'ec2_url': api.url_for(request, 'ec2'), |
1774 | + 's3_url': api.url_for(request, 's3'), |
1775 | + 'juju_admin_secret': uuid.uuid4().hex, |
1776 | + 'control_bucket': control_bucket |
1777 | + } |
1778 | + except: |
1779 | + exceptions.handle(request, |
1780 | + _('Unable to fetch generate Juju environment config.'), |
1781 | + redirect=request.build_absolute_uri()) |
1782 | + |
1783 | + response = shortcuts.render(request, |
1784 | + 'settings/juju/environments.yaml.template', |
1785 | + context, |
1786 | + content_type='text/plain') |
1787 | + response['Content-Disposition'] = 'attachment; filename=environments.yaml' |
1788 | + response['Content-Length'] = str(len(response.content)) |
1789 | + return response |
1790 | |
1791 | === removed file '.pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py' |
1792 | --- .pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py 2012-08-24 03:27:33 +0000 |
1793 | +++ .pc/juju_panel-handle_catalog_exception.patch/horizon/dashboards/settings/juju/forms.py 1970-01-01 00:00:00 +0000 |
1794 | @@ -1,96 +0,0 @@ |
1795 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
1796 | - |
1797 | -# Copyright 2012 Openstack, LLC |
1798 | -# Copyright 2012 Canonical Ltd. |
1799 | -# |
1800 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
1801 | -# not use this file except in compliance with the License. You may obtain |
1802 | -# a copy of the License at |
1803 | -# |
1804 | -# http://www.apache.org/licenses/LICENSE-2.0 |
1805 | -# |
1806 | -# Unless required by applicable law or agreed to in writing, software |
1807 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
1808 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
1809 | -# License for the specific language governing permissions and limitations |
1810 | -# under the License. |
1811 | - |
1812 | -import logging |
1813 | -import tempfile |
1814 | -import zipfile |
1815 | -from contextlib import closing |
1816 | - |
1817 | -from django import http, shortcuts |
1818 | -from django.template.loader import render_to_string |
1819 | -from django.utils.translation import ugettext_lazy as _ |
1820 | - |
1821 | -from horizon import api |
1822 | -from horizon import exceptions |
1823 | -from horizon import forms |
1824 | - |
1825 | -import boto |
1826 | -import uuid |
1827 | - |
1828 | -LOG = logging.getLogger(__name__) |
1829 | - |
1830 | - |
1831 | -class DownloadJujuEnvironment(forms.SelfHandlingForm): |
1832 | - # This is heavily based off the ec2 credentials form |
1833 | - tenant = forms.ChoiceField(label=_("Select a Project")) |
1834 | - @classmethod |
1835 | - def _instantiate(cls, request, *args, **kwargs): |
1836 | - return cls(request, *args, **kwargs) |
1837 | - |
1838 | - def __init__(self, request, *args, **kwargs): |
1839 | - super(DownloadJujuEnvironment, self).__init__(*args, **kwargs) |
1840 | - tenant_choices = [] |
1841 | - try: |
1842 | - tenant_list = api.keystone.tenant_list(request) |
1843 | - except: |
1844 | - tenant_list = [] |
1845 | - exceptions.handle(request, _("Unable to retrieve tenant list.")) |
1846 | - |
1847 | - for tenant in tenant_list: |
1848 | - if tenant.enabled: |
1849 | - tenant_choices.append((tenant.id, tenant.name)) |
1850 | - if not tenant_choices: |
1851 | - self.fields['tenant'].choices = ('', 'No Available Tenants') |
1852 | - else: |
1853 | - self.fields['tenant'].choices = tenant_choices |
1854 | - |
1855 | - def handle(self, request, data): |
1856 | - def find_or_create_access_keys(request, tenant_id): |
1857 | - keys = api.keystone.list_ec2_credentials(request, request.user.id) |
1858 | - if keys: |
1859 | - return keys[0] |
1860 | - else: |
1861 | - return api.keystone.create_ec2_credentials(request, |
1862 | - request.user.id, |
1863 | - tenant_id) |
1864 | - try: |
1865 | - api.keystone.token_create_scoped(request, |
1866 | - data.get('tenant'), |
1867 | - request.user.token) |
1868 | - keys = find_or_create_access_keys(request, data.get('tenant')) |
1869 | - tenant_id = data['tenant'] |
1870 | - tenant_name = dict(self.fields['tenant'].choices)[tenant_id] |
1871 | - control_bucket = "juju-openstack-%s-%s" % (tenant_name, str(uuid.uuid4())[19:]) |
1872 | - context = {'ec2_access_key': keys.access, |
1873 | - 'ec2_secret_key': keys.secret, |
1874 | - 'ec2_url': api.url_for(request, 'ec2'), |
1875 | - 's3_url': api.url_for(request, 's3'), |
1876 | - 'juju_admin_secret': uuid.uuid4().hex, |
1877 | - 'control_bucket': control_bucket |
1878 | - } |
1879 | - except: |
1880 | - exceptions.handle(request, |
1881 | - _('Unable to fetch generate Juju environment config.'), |
1882 | - redirect=request.build_absolute_uri()) |
1883 | - |
1884 | - response = shortcuts.render(request, |
1885 | - 'settings/juju/environments.yaml.template', |
1886 | - context, |
1887 | - content_type='text/plain') |
1888 | - response['Content-Disposition'] = 'attachment; filename=environments.yaml' |
1889 | - response['Content-Length'] = str(len(response.content)) |
1890 | - return response |
1891 | |
1892 | === added directory '.pc/turn-off-debug.patch' |
1893 | === removed directory '.pc/turn-off-debug.patch' |
1894 | === added file '.pc/turn-off-debug.patch/.timestamp' |
1895 | === added directory '.pc/turn-off-debug.patch/openstack_dashboard' |
1896 | === removed directory '.pc/turn-off-debug.patch/openstack_dashboard' |
1897 | === added directory '.pc/turn-off-debug.patch/openstack_dashboard/local' |
1898 | === removed directory '.pc/turn-off-debug.patch/openstack_dashboard/local' |
1899 | === added file '.pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example' |
1900 | --- .pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
1901 | +++ .pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example 2013-04-24 15:22:28 +0000 |
1902 | @@ -0,0 +1,123 @@ |
1903 | +import os |
1904 | + |
1905 | +from django.utils.translation import ugettext_lazy as _ |
1906 | + |
1907 | +DEBUG = True |
1908 | +TEMPLATE_DEBUG = DEBUG |
1909 | +PROD = False |
1910 | +USE_SSL = False |
1911 | + |
1912 | +# Ubuntu-specific: Enables an extra panel in the 'Settings' section |
1913 | +# that easily generates a Juju environments.yaml for download, |
1914 | +# preconfigured with endpoints and credentails required for bootstrap |
1915 | +# and service deployment. |
1916 | +ENABLE_JUJU_PANEL = True |
1917 | + |
1918 | +# Note: You should change this value |
1919 | +SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
1920 | + |
1921 | +# Specify a regular expression to validate user passwords. |
1922 | +# HORIZON_CONFIG = { |
1923 | +# "password_validator": { |
1924 | +# "regex": '.*', |
1925 | +# "help_text": _("Your password does not meet the requirements.") |
1926 | +# } |
1927 | +# } |
1928 | + |
1929 | +LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
1930 | + |
1931 | +# We recommend you use memcached for development; otherwise after every reload |
1932 | +# of the django development server, you will have to login again. To use |
1933 | +# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
1934 | +CACHE_BACKEND = 'locmem://' |
1935 | + |
1936 | +# Send email to the console by default |
1937 | +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
1938 | +# Or send them to /dev/null |
1939 | +#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
1940 | + |
1941 | +# Configure these for your outgoing email host |
1942 | +# EMAIL_HOST = 'smtp.my-company.com' |
1943 | +# EMAIL_PORT = 25 |
1944 | +# EMAIL_HOST_USER = 'djangomail' |
1945 | +# EMAIL_HOST_PASSWORD = 'top-secret!' |
1946 | + |
1947 | +# For multiple regions uncomment this configuration, and add (endpoint, title). |
1948 | +# AVAILABLE_REGIONS = [ |
1949 | +# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
1950 | +# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
1951 | +# ] |
1952 | + |
1953 | +OPENSTACK_HOST = "127.0.0.1" |
1954 | +OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
1955 | +OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
1956 | + |
1957 | +# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
1958 | +# capabilities of the auth backend for Keystone. |
1959 | +# If Keystone has been configured to use LDAP as the auth backend then set |
1960 | +# can_edit_user to False and name to 'ldap'. |
1961 | +# |
1962 | +# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
1963 | +OPENSTACK_KEYSTONE_BACKEND = { |
1964 | + 'name': 'native', |
1965 | + 'can_edit_user': True |
1966 | +} |
1967 | + |
1968 | +# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
1969 | +# in the Keystone service catalog. Use this setting when Horizon is running |
1970 | +# external to the OpenStack environment. The default is 'internalURL'. |
1971 | +#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
1972 | + |
1973 | +# The number of Swift containers and objects to display on a single page before |
1974 | +# providing a paging element (a "more" link) to paginate results. |
1975 | +API_RESULT_LIMIT = 1000 |
1976 | + |
1977 | +# If you have external monitoring links, eg: |
1978 | +# EXTERNAL_MONITORING = [ |
1979 | +# ['Nagios','http://foo.com'], |
1980 | +# ['Ganglia','http://bar.com'], |
1981 | +# ] |
1982 | + |
1983 | +LOGGING = { |
1984 | + 'version': 1, |
1985 | + # When set to True this will disable all logging except |
1986 | + # for loggers specified in this configuration dictionary. Note that |
1987 | + # if nothing is specified here and disable_existing_loggers is True, |
1988 | + # django.db.backends will still log unless it is disabled explicitly. |
1989 | + 'disable_existing_loggers': False, |
1990 | + 'handlers': { |
1991 | + 'null': { |
1992 | + 'level': 'DEBUG', |
1993 | + 'class': 'django.utils.log.NullHandler', |
1994 | + }, |
1995 | + 'console': { |
1996 | + # Set the level to "DEBUG" for verbose output logging. |
1997 | + 'level': 'INFO', |
1998 | + 'class': 'logging.StreamHandler', |
1999 | + }, |
2000 | + }, |
2001 | + 'loggers': { |
2002 | + # Logging from django.db.backends is VERY verbose, send to null |
2003 | + # by default. |
2004 | + 'django.db.backends': { |
2005 | + 'handlers': ['null'], |
2006 | + 'propagate': False, |
2007 | + }, |
2008 | + 'horizon': { |
2009 | + 'handlers': ['console'], |
2010 | + 'propagate': False, |
2011 | + }, |
2012 | + 'novaclient': { |
2013 | + 'handlers': ['console'], |
2014 | + 'propagate': False, |
2015 | + }, |
2016 | + 'keystoneclient': { |
2017 | + 'handlers': ['console'], |
2018 | + 'propagate': False, |
2019 | + }, |
2020 | + 'nose.plugins.manager': { |
2021 | + 'handlers': ['console'], |
2022 | + 'propagate': False, |
2023 | + } |
2024 | + } |
2025 | +} |
2026 | |
2027 | === removed file '.pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example' |
2028 | --- .pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example 2012-04-23 10:04:39 +0000 |
2029 | +++ .pc/turn-off-debug.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
2030 | @@ -1,123 +0,0 @@ |
2031 | -import os |
2032 | - |
2033 | -from django.utils.translation import ugettext_lazy as _ |
2034 | - |
2035 | -DEBUG = True |
2036 | -TEMPLATE_DEBUG = DEBUG |
2037 | -PROD = False |
2038 | -USE_SSL = False |
2039 | - |
2040 | -# Ubuntu-specific: Enables an extra panel in the 'Settings' section |
2041 | -# that easily generates a Juju environments.yaml for download, |
2042 | -# preconfigured with endpoints and credentails required for bootstrap |
2043 | -# and service deployment. |
2044 | -ENABLE_JUJU_PANEL = True |
2045 | - |
2046 | -# Note: You should change this value |
2047 | -SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
2048 | - |
2049 | -# Specify a regular expression to validate user passwords. |
2050 | -# HORIZON_CONFIG = { |
2051 | -# "password_validator": { |
2052 | -# "regex": '.*', |
2053 | -# "help_text": _("Your password does not meet the requirements.") |
2054 | -# } |
2055 | -# } |
2056 | - |
2057 | -LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
2058 | - |
2059 | -# We recommend you use memcached for development; otherwise after every reload |
2060 | -# of the django development server, you will have to login again. To use |
2061 | -# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
2062 | -CACHE_BACKEND = 'locmem://' |
2063 | - |
2064 | -# Send email to the console by default |
2065 | -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
2066 | -# Or send them to /dev/null |
2067 | -#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
2068 | - |
2069 | -# Configure these for your outgoing email host |
2070 | -# EMAIL_HOST = 'smtp.my-company.com' |
2071 | -# EMAIL_PORT = 25 |
2072 | -# EMAIL_HOST_USER = 'djangomail' |
2073 | -# EMAIL_HOST_PASSWORD = 'top-secret!' |
2074 | - |
2075 | -# For multiple regions uncomment this configuration, and add (endpoint, title). |
2076 | -# AVAILABLE_REGIONS = [ |
2077 | -# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
2078 | -# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
2079 | -# ] |
2080 | - |
2081 | -OPENSTACK_HOST = "127.0.0.1" |
2082 | -OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
2083 | -OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
2084 | - |
2085 | -# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
2086 | -# capabilities of the auth backend for Keystone. |
2087 | -# If Keystone has been configured to use LDAP as the auth backend then set |
2088 | -# can_edit_user to False and name to 'ldap'. |
2089 | -# |
2090 | -# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
2091 | -OPENSTACK_KEYSTONE_BACKEND = { |
2092 | - 'name': 'native', |
2093 | - 'can_edit_user': True |
2094 | -} |
2095 | - |
2096 | -# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
2097 | -# in the Keystone service catalog. Use this setting when Horizon is running |
2098 | -# external to the OpenStack environment. The default is 'internalURL'. |
2099 | -#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
2100 | - |
2101 | -# The number of Swift containers and objects to display on a single page before |
2102 | -# providing a paging element (a "more" link) to paginate results. |
2103 | -API_RESULT_LIMIT = 1000 |
2104 | - |
2105 | -# If you have external monitoring links, eg: |
2106 | -# EXTERNAL_MONITORING = [ |
2107 | -# ['Nagios','http://foo.com'], |
2108 | -# ['Ganglia','http://bar.com'], |
2109 | -# ] |
2110 | - |
2111 | -LOGGING = { |
2112 | - 'version': 1, |
2113 | - # When set to True this will disable all logging except |
2114 | - # for loggers specified in this configuration dictionary. Note that |
2115 | - # if nothing is specified here and disable_existing_loggers is True, |
2116 | - # django.db.backends will still log unless it is disabled explicitly. |
2117 | - 'disable_existing_loggers': False, |
2118 | - 'handlers': { |
2119 | - 'null': { |
2120 | - 'level': 'DEBUG', |
2121 | - 'class': 'django.utils.log.NullHandler', |
2122 | - }, |
2123 | - 'console': { |
2124 | - # Set the level to "DEBUG" for verbose output logging. |
2125 | - 'level': 'INFO', |
2126 | - 'class': 'logging.StreamHandler', |
2127 | - }, |
2128 | - }, |
2129 | - 'loggers': { |
2130 | - # Logging from django.db.backends is VERY verbose, send to null |
2131 | - # by default. |
2132 | - 'django.db.backends': { |
2133 | - 'handlers': ['null'], |
2134 | - 'propagate': False, |
2135 | - }, |
2136 | - 'horizon': { |
2137 | - 'handlers': ['console'], |
2138 | - 'propagate': False, |
2139 | - }, |
2140 | - 'novaclient': { |
2141 | - 'handlers': ['console'], |
2142 | - 'propagate': False, |
2143 | - }, |
2144 | - 'keystoneclient': { |
2145 | - 'handlers': ['console'], |
2146 | - 'propagate': False, |
2147 | - }, |
2148 | - 'nose.plugins.manager': { |
2149 | - 'handlers': ['console'], |
2150 | - 'propagate': False, |
2151 | - } |
2152 | - } |
2153 | -} |
2154 | |
2155 | === added directory '.pc/use-memcache.patch' |
2156 | === removed directory '.pc/use-memcache.patch' |
2157 | === added file '.pc/use-memcache.patch/.timestamp' |
2158 | === added directory '.pc/use-memcache.patch/openstack_dashboard' |
2159 | === removed directory '.pc/use-memcache.patch/openstack_dashboard' |
2160 | === added directory '.pc/use-memcache.patch/openstack_dashboard/local' |
2161 | === removed directory '.pc/use-memcache.patch/openstack_dashboard/local' |
2162 | === added file '.pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example' |
2163 | --- .pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
2164 | +++ .pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example 2013-04-24 15:22:28 +0000 |
2165 | @@ -0,0 +1,123 @@ |
2166 | +import os |
2167 | + |
2168 | +from django.utils.translation import ugettext_lazy as _ |
2169 | + |
2170 | +DEBUG = False |
2171 | +TEMPLATE_DEBUG = DEBUG |
2172 | +PROD = False |
2173 | +USE_SSL = False |
2174 | + |
2175 | +# Ubuntu-specific: Enables an extra panel in the 'Settings' section |
2176 | +# that easily generates a Juju environments.yaml for download, |
2177 | +# preconfigured with endpoints and credentails required for bootstrap |
2178 | +# and service deployment. |
2179 | +ENABLE_JUJU_PANEL = True |
2180 | + |
2181 | +# Note: You should change this value |
2182 | +SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
2183 | + |
2184 | +# Specify a regular expression to validate user passwords. |
2185 | +# HORIZON_CONFIG = { |
2186 | +# "password_validator": { |
2187 | +# "regex": '.*', |
2188 | +# "help_text": _("Your password does not meet the requirements.") |
2189 | +# } |
2190 | +# } |
2191 | + |
2192 | +LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
2193 | + |
2194 | +# We recommend you use memcached for development; otherwise after every reload |
2195 | +# of the django development server, you will have to login again. To use |
2196 | +# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
2197 | +CACHE_BACKEND = 'locmem://' |
2198 | + |
2199 | +# Send email to the console by default |
2200 | +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
2201 | +# Or send them to /dev/null |
2202 | +#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
2203 | + |
2204 | +# Configure these for your outgoing email host |
2205 | +# EMAIL_HOST = 'smtp.my-company.com' |
2206 | +# EMAIL_PORT = 25 |
2207 | +# EMAIL_HOST_USER = 'djangomail' |
2208 | +# EMAIL_HOST_PASSWORD = 'top-secret!' |
2209 | + |
2210 | +# For multiple regions uncomment this configuration, and add (endpoint, title). |
2211 | +# AVAILABLE_REGIONS = [ |
2212 | +# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
2213 | +# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
2214 | +# ] |
2215 | + |
2216 | +OPENSTACK_HOST = "127.0.0.1" |
2217 | +OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
2218 | +OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
2219 | + |
2220 | +# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
2221 | +# capabilities of the auth backend for Keystone. |
2222 | +# If Keystone has been configured to use LDAP as the auth backend then set |
2223 | +# can_edit_user to False and name to 'ldap'. |
2224 | +# |
2225 | +# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
2226 | +OPENSTACK_KEYSTONE_BACKEND = { |
2227 | + 'name': 'native', |
2228 | + 'can_edit_user': True |
2229 | +} |
2230 | + |
2231 | +# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
2232 | +# in the Keystone service catalog. Use this setting when Horizon is running |
2233 | +# external to the OpenStack environment. The default is 'internalURL'. |
2234 | +#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
2235 | + |
2236 | +# The number of Swift containers and objects to display on a single page before |
2237 | +# providing a paging element (a "more" link) to paginate results. |
2238 | +API_RESULT_LIMIT = 1000 |
2239 | + |
2240 | +# If you have external monitoring links, eg: |
2241 | +# EXTERNAL_MONITORING = [ |
2242 | +# ['Nagios','http://foo.com'], |
2243 | +# ['Ganglia','http://bar.com'], |
2244 | +# ] |
2245 | + |
2246 | +LOGGING = { |
2247 | + 'version': 1, |
2248 | + # When set to True this will disable all logging except |
2249 | + # for loggers specified in this configuration dictionary. Note that |
2250 | + # if nothing is specified here and disable_existing_loggers is True, |
2251 | + # django.db.backends will still log unless it is disabled explicitly. |
2252 | + 'disable_existing_loggers': False, |
2253 | + 'handlers': { |
2254 | + 'null': { |
2255 | + 'level': 'DEBUG', |
2256 | + 'class': 'django.utils.log.NullHandler', |
2257 | + }, |
2258 | + 'console': { |
2259 | + # Set the level to "DEBUG" for verbose output logging. |
2260 | + 'level': 'INFO', |
2261 | + 'class': 'logging.StreamHandler', |
2262 | + }, |
2263 | + }, |
2264 | + 'loggers': { |
2265 | + # Logging from django.db.backends is VERY verbose, send to null |
2266 | + # by default. |
2267 | + 'django.db.backends': { |
2268 | + 'handlers': ['null'], |
2269 | + 'propagate': False, |
2270 | + }, |
2271 | + 'horizon': { |
2272 | + 'handlers': ['console'], |
2273 | + 'propagate': False, |
2274 | + }, |
2275 | + 'novaclient': { |
2276 | + 'handlers': ['console'], |
2277 | + 'propagate': False, |
2278 | + }, |
2279 | + 'keystoneclient': { |
2280 | + 'handlers': ['console'], |
2281 | + 'propagate': False, |
2282 | + }, |
2283 | + 'nose.plugins.manager': { |
2284 | + 'handlers': ['console'], |
2285 | + 'propagate': False, |
2286 | + } |
2287 | + } |
2288 | +} |
2289 | |
2290 | === removed file '.pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example' |
2291 | --- .pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example 2012-04-25 10:55:18 +0000 |
2292 | +++ .pc/use-memcache.patch/openstack_dashboard/local/local_settings.py.example 1970-01-01 00:00:00 +0000 |
2293 | @@ -1,123 +0,0 @@ |
2294 | -import os |
2295 | - |
2296 | -from django.utils.translation import ugettext_lazy as _ |
2297 | - |
2298 | -DEBUG = False |
2299 | -TEMPLATE_DEBUG = DEBUG |
2300 | -PROD = False |
2301 | -USE_SSL = False |
2302 | - |
2303 | -# Ubuntu-specific: Enables an extra panel in the 'Settings' section |
2304 | -# that easily generates a Juju environments.yaml for download, |
2305 | -# preconfigured with endpoints and credentails required for bootstrap |
2306 | -# and service deployment. |
2307 | -ENABLE_JUJU_PANEL = True |
2308 | - |
2309 | -# Note: You should change this value |
2310 | -SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0' |
2311 | - |
2312 | -# Specify a regular expression to validate user passwords. |
2313 | -# HORIZON_CONFIG = { |
2314 | -# "password_validator": { |
2315 | -# "regex": '.*', |
2316 | -# "help_text": _("Your password does not meet the requirements.") |
2317 | -# } |
2318 | -# } |
2319 | - |
2320 | -LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
2321 | - |
2322 | -# We recommend you use memcached for development; otherwise after every reload |
2323 | -# of the django development server, you will have to login again. To use |
2324 | -# memcached set CACHE_BACKED to something like 'memcached://127.0.0.1:11211/' |
2325 | -CACHE_BACKEND = 'locmem://' |
2326 | - |
2327 | -# Send email to the console by default |
2328 | -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
2329 | -# Or send them to /dev/null |
2330 | -#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' |
2331 | - |
2332 | -# Configure these for your outgoing email host |
2333 | -# EMAIL_HOST = 'smtp.my-company.com' |
2334 | -# EMAIL_PORT = 25 |
2335 | -# EMAIL_HOST_USER = 'djangomail' |
2336 | -# EMAIL_HOST_PASSWORD = 'top-secret!' |
2337 | - |
2338 | -# For multiple regions uncomment this configuration, and add (endpoint, title). |
2339 | -# AVAILABLE_REGIONS = [ |
2340 | -# ('http://cluster1.example.com:5000/v2.0', 'cluster1'), |
2341 | -# ('http://cluster2.example.com:5000/v2.0', 'cluster2'), |
2342 | -# ] |
2343 | - |
2344 | -OPENSTACK_HOST = "127.0.0.1" |
2345 | -OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST |
2346 | -OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" |
2347 | - |
2348 | -# The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the |
2349 | -# capabilities of the auth backend for Keystone. |
2350 | -# If Keystone has been configured to use LDAP as the auth backend then set |
2351 | -# can_edit_user to False and name to 'ldap'. |
2352 | -# |
2353 | -# TODO(tres): Remove these once Keystone has an API to identify auth backend. |
2354 | -OPENSTACK_KEYSTONE_BACKEND = { |
2355 | - 'name': 'native', |
2356 | - 'can_edit_user': True |
2357 | -} |
2358 | - |
2359 | -# OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints |
2360 | -# in the Keystone service catalog. Use this setting when Horizon is running |
2361 | -# external to the OpenStack environment. The default is 'internalURL'. |
2362 | -#OPENSTACK_ENDPOINT_TYPE = "publicURL" |
2363 | - |
2364 | -# The number of Swift containers and objects to display on a single page before |
2365 | -# providing a paging element (a "more" link) to paginate results. |
2366 | -API_RESULT_LIMIT = 1000 |
2367 | - |
2368 | -# If you have external monitoring links, eg: |
2369 | -# EXTERNAL_MONITORING = [ |
2370 | -# ['Nagios','http://foo.com'], |
2371 | -# ['Ganglia','http://bar.com'], |
2372 | -# ] |
2373 | - |
2374 | -LOGGING = { |
2375 | - 'version': 1, |
2376 | - # When set to True this will disable all logging except |
2377 | - # for loggers specified in this configuration dictionary. Note that |
2378 | - # if nothing is specified here and disable_existing_loggers is True, |
2379 | - # django.db.backends will still log unless it is disabled explicitly. |
2380 | - 'disable_existing_loggers': False, |
2381 | - 'handlers': { |
2382 | - 'null': { |
2383 | - 'level': 'DEBUG', |
2384 | - 'class': 'django.utils.log.NullHandler', |
2385 | - }, |
2386 | - 'console': { |
2387 | - # Set the level to "DEBUG" for verbose output logging. |
2388 | - 'level': 'INFO', |
2389 | - 'class': 'logging.StreamHandler', |
2390 | - }, |
2391 | - }, |
2392 | - 'loggers': { |
2393 | - # Logging from django.db.backends is VERY verbose, send to null |
2394 | - # by default. |
2395 | - 'django.db.backends': { |
2396 | - 'handlers': ['null'], |
2397 | - 'propagate': False, |
2398 | - }, |
2399 | - 'horizon': { |
2400 | - 'handlers': ['console'], |
2401 | - 'propagate': False, |
2402 | - }, |
2403 | - 'novaclient': { |
2404 | - 'handlers': ['console'], |
2405 | - 'propagate': False, |
2406 | - }, |
2407 | - 'keystoneclient': { |
2408 | - 'handlers': ['console'], |
2409 | - 'propagate': False, |
2410 | - }, |
2411 | - 'nose.plugins.manager': { |
2412 | - 'handlers': ['console'], |
2413 | - 'propagate': False, |
2414 | - } |
2415 | - } |
2416 | -} |
2417 | |
2418 | === removed file '.pylintrc' |
2419 | --- .pylintrc 2012-08-24 03:27:33 +0000 |
2420 | +++ .pylintrc 1970-01-01 00:00:00 +0000 |
2421 | @@ -1,42 +0,0 @@ |
2422 | -# The format of this file isn't really documented; just use --generate-rcfile |
2423 | -[MASTER] |
2424 | -# Add <file or directory> to the black list. It should be a base name, not a |
2425 | -# path. You may set this option multiple times. |
2426 | -ignore=test |
2427 | - |
2428 | -[Messages Control] |
2429 | -# NOTE(justinsb): We might want to have a 2nd strict pylintrc in future |
2430 | -# C0111: Don't require docstrings on every method |
2431 | -# W0511: TODOs in code comments are fine. |
2432 | -# W0142: *args and **kwargs are fine. |
2433 | -# W0622: Redefining id is fine. |
2434 | -disable=C0111,W0511,W0142,W0622 |
2435 | - |
2436 | -[Basic] |
2437 | -# Variable names can be 1 to 31 characters long, with lowercase and underscores |
2438 | -variable-rgx=[a-z_][a-z0-9_]{0,30}$ |
2439 | - |
2440 | -# Argument names can be 2 to 31 characters long, with lowercase and underscores |
2441 | -argument-rgx=[a-z_][a-z0-9_]{1,30}$ |
2442 | - |
2443 | -# Method names should be at least 3 characters long |
2444 | -# and be lowecased with underscores |
2445 | -method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$ |
2446 | - |
2447 | -# Module names matching keystone-* are ok (files in bin/) |
2448 | -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(keystone-[a-z0-9_-]+))$ |
2449 | - |
2450 | -# Don't require docstrings on tests. |
2451 | -no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$ |
2452 | - |
2453 | -[Design] |
2454 | -max-public-methods=100 |
2455 | -min-public-methods=0 |
2456 | -max-args=6 |
2457 | - |
2458 | -[Variables] |
2459 | - |
2460 | -# List of additional names supposed to be defined in builtins. Remember that |
2461 | -# you should avoid to define new builtins when possible. |
2462 | -# _ is used by our localization |
2463 | -additional-builtins=_ |
2464 | |
2465 | === modified file 'AUTHORS' |
2466 | --- AUTHORS 2012-08-24 03:27:33 +0000 |
2467 | +++ AUTHORS 2013-04-24 15:22:28 +0000 |
2468 | @@ -3,6 +3,7 @@ |
2469 | Andy Chong <andycjw@gmail.com> |
2470 | Anthony Young <sleepsonthefloor@gmail.com> |
2471 | Arvind Somya <asomya@cisco.com> |
2472 | +Brian Waldon <bcwaldon@gmail.com> |
2473 | Carlo Truijllo <truijllo@crs4.it> |
2474 | Chuck Short <chuck.short@canonical.com> |
2475 | Cole Robinson <crobinso@redhat.com> |
2476 | @@ -47,6 +48,7 @@ |
2477 | Todd Willey <todd@ansolabs.com> |
2478 | Tomasz 'Zen' Napierala <tomasz@napierala.org> |
2479 | Tres Henry <tres@treshenry.net> |
2480 | +Vincent Untz <vuntz@suse.com> |
2481 | Vishvananda Ishaya <vishvananda@gmail.com> |
2482 | Yuriy Taraday <yorik.sar@gmail.com> |
2483 | ZhongYue Luo <lzyeval@gmail.com> |
2484 | |
2485 | === added file 'PKG-INFO' |
2486 | --- PKG-INFO 1970-01-01 00:00:00 +0000 |
2487 | +++ PKG-INFO 2013-04-24 15:22:28 +0000 |
2488 | @@ -0,0 +1,126 @@ |
2489 | +Metadata-Version: 1.1 |
2490 | +Name: horizon |
2491 | +Version: 2012.1.4 |
2492 | +Summary: The OpenStack Dashboard. |
2493 | +Home-page: https://github.com/openstack/horizon/ |
2494 | +Author: OpenStack |
2495 | +Author-email: horizon@lists.launchpad.net |
2496 | +License: Apache 2.0 |
2497 | +Description: ============================= |
2498 | + Horizon (OpenStack Dashboard) |
2499 | + ============================= |
2500 | + |
2501 | + Horizon is a Django-based project aimed at providing a complete OpenStack |
2502 | + Dashboard along with an extensible framework for building new dashboards |
2503 | + from reusable components. The ``openstack_dashboard`` module is a reference |
2504 | + implementation of a Django site that uses the ``horizon`` app to provide |
2505 | + web-based interactions with the various OpenStack projects. |
2506 | + |
2507 | + For release management: |
2508 | + |
2509 | + * https://launchpad.net/horizon |
2510 | + |
2511 | + For blueprints and feature specifications: |
2512 | + |
2513 | + * https://blueprints.launchpad.net/horizon |
2514 | + |
2515 | + For issue tracking: |
2516 | + |
2517 | + * https://bugs.launchpad.net/horizon |
2518 | + |
2519 | + Getting Started |
2520 | + =============== |
2521 | + |
2522 | + For local development, first create a virtualenv for the project. |
2523 | + In the ``tools`` directory there is a script to create one for you: |
2524 | + |
2525 | + $ python tools/install_venv.py |
2526 | + |
2527 | + Alternatively, the ``run_tests.sh`` script will also install the environment |
2528 | + for you and then run the full test suite to verify everything is installed |
2529 | + and functioning correctly. |
2530 | + |
2531 | + Now that the virtualenv is created, you need to configure your local |
2532 | + environment. To do this, create a ``local_settings.py`` file in the |
2533 | + ``openstack_dashboard/local/`` directory. There is a |
2534 | + ``local_settings.py.example`` file there that may be used as a template. |
2535 | + |
2536 | + If all is well you should able to run the development server locally: |
2537 | + |
2538 | + $ tools/with_venv.sh manage.py runserver |
2539 | + |
2540 | + or, as a shortcut:: |
2541 | + |
2542 | + $ ./run_tests.sh --runserver |
2543 | + |
2544 | + |
2545 | + Settings Up OpenStack |
2546 | + ===================== |
2547 | + |
2548 | + The recommended tool for installing and configuring the core OpenStack |
2549 | + components is `Devstack`_. Refer to their documentation for getting |
2550 | + Nova, Keystone, Glance, etc. up and running. |
2551 | + |
2552 | + .. _Devstack: http://devstack.org/ |
2553 | + |
2554 | + .. note:: |
2555 | + |
2556 | + The minimum required set of OpenStack services running includes the |
2557 | + following: |
2558 | + |
2559 | + * Nova (compute, api, scheduler, network, *and* volume services) |
2560 | + * Glance |
2561 | + * Keystone |
2562 | + |
2563 | + Optional support is provided for Swift. |
2564 | + |
2565 | + |
2566 | + Development |
2567 | + =========== |
2568 | + |
2569 | + For development, start with the getting started instructions above. |
2570 | + Once you have a working virtualenv and all the necessary packages, read on. |
2571 | + |
2572 | + If dependencies are added to either ``horizon`` or ``openstack-dashboard``, |
2573 | + they should be added to ``tools/pip-requires``. |
2574 | + |
2575 | + The ``run_tests.sh`` script invokes tests and analyses on both of these |
2576 | + components in its process, and it is what Jenkins uses to verify the |
2577 | + stability of the project. If run before an environment is set up, it will |
2578 | + ask if you wish to install one. |
2579 | + |
2580 | + To run the unit tests:: |
2581 | + |
2582 | + $ ./run_tests.sh |
2583 | + |
2584 | + Building Contributor Documentation |
2585 | + ================================== |
2586 | + |
2587 | + This documentation is written by contributors, for contributors. |
2588 | + |
2589 | + The source is maintained in the ``docs/source`` folder using |
2590 | + `reStructuredText`_ and built by `Sphinx`_ |
2591 | + |
2592 | + .. _reStructuredText: http://docutils.sourceforge.net/rst.html |
2593 | + .. _Sphinx: http://sphinx.pocoo.org/ |
2594 | + |
2595 | + * Building Automatically:: |
2596 | + |
2597 | + $ ./run_tests.sh --docs |
2598 | + |
2599 | + * Building Manually:: |
2600 | + |
2601 | + $ export DJANGO_SETTINGS_MODULE=local.local_settings |
2602 | + $ python doc/generate_autodoc_index.py |
2603 | + $ sphinx-build -b html doc/source build/sphinx/html |
2604 | + |
2605 | + Results are in the `build/sphinx/html` directory |
2606 | + |
2607 | +Platform: UNKNOWN |
2608 | +Classifier: Development Status :: 4 - Beta |
2609 | +Classifier: Framework :: Django |
2610 | +Classifier: Intended Audience :: Developers |
2611 | +Classifier: License :: OSI Approved :: Apache Software License |
2612 | +Classifier: Operating System :: OS Independent |
2613 | +Classifier: Programming Language :: Python |
2614 | +Classifier: Topic :: Internet :: WWW/HTTP |
2615 | |
2616 | === modified file 'debian/changelog' |
2617 | --- debian/changelog 2012-08-30 17:15:04 +0000 |
2618 | +++ debian/changelog 2013-04-24 15:22:28 +0000 |
2619 | @@ -1,3 +1,21 @@ |
2620 | +horizon (2012.1.3+stable-20130423-5ce39422-0ubuntu1) precise-proposed; urgency=low |
2621 | + |
2622 | + * Resynchronize with stable/essex (LP: #1089488) |
2623 | + - [7e651d7] stable/essex horizon installs unusable version of glance |
2624 | + (LP: #1057125) |
2625 | + - [35eada8] open redirect / phishing attack via "next" parameter |
2626 | + (LP: #1039077) |
2627 | + - [8889311] TypeError when trying to delete an unnamed volume via dashboard |
2628 | + (LP: #1031291) |
2629 | + - [f862d9e] Wrong 'Download CSV Summary' link (LP: #1020555) |
2630 | + - [9b22d68] When adding ICMP rule, the type/code is being validated as |
2631 | + from/to ports (LP: #997669) |
2632 | + - [52bbba1] Added --only-selenium option in run_tests.sh |
2633 | + * Dropped patches, superseeded by new snapshot: |
2634 | + - debian/patches/CVE-2012-3540.patch [35eada8] |
2635 | + |
2636 | + -- Yolanda <yolanda.robla@canonical.com> Wed, 24 Apr 2013 15:46:28 +0200 |
2637 | + |
2638 | horizon (2012.1.3+stable~20120815-691dd2-0ubuntu1.1) precise-security; urgency=low |
2639 | |
2640 | * SECURITY UPDATE: open redirect / phishing attack via "next" |
2641 | |
2642 | === removed file 'debian/patches/CVE-2012-3540.patch' |
2643 | --- debian/patches/CVE-2012-3540.patch 2012-08-30 17:15:04 +0000 |
2644 | +++ debian/patches/CVE-2012-3540.patch 1970-01-01 00:00:00 +0000 |
2645 | @@ -1,33 +0,0 @@ |
2646 | -Origin: https://github.com/openstack/horizon/commit/35eada8a27323c0f83c400177797927aba6bc99b |
2647 | -Subject: Disallow login redirects to anywhere other than the same origin. |
2648 | -Bug: https://bugs.launchpad.net/horizon/+bug/1039077 |
2649 | - |
2650 | -CVE-2012-3540 |
2651 | - |
2652 | -diff --git a/horizon/views/auth_forms.py b/horizon/views/auth_forms.py |
2653 | -index 2ebecfc..abf0880 100644 |
2654 | ---- a/horizon/views/auth_forms.py |
2655 | -+++ b/horizon/views/auth_forms.py |
2656 | -@@ -28,6 +28,7 @@ |
2657 | - from django.conf import settings |
2658 | - from django.contrib import messages |
2659 | - from django.contrib.auth import REDIRECT_FIELD_NAME |
2660 | -+from django.utils.http import same_origin |
2661 | - from django.utils.translation import ugettext as _ |
2662 | - from keystoneclient import exceptions as keystone_exceptions |
2663 | - |
2664 | -@@ -94,7 +95,13 @@ def handle(self, request, data): |
2665 | - request.session['region_endpoint'] = endpoint |
2666 | - request.session['region_name'] = region_name |
2667 | - |
2668 | -- redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, "") |
2669 | -+ redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, None) |
2670 | -+ # Make sure the requested redirect matches the protocol, |
2671 | -+ # domain, and port of this request |
2672 | -+ if redirect_to and not same_origin( |
2673 | -+ request.build_absolute_uri(redirect_to), |
2674 | -+ request.build_absolute_uri()): |
2675 | -+ redirect_to = None |
2676 | - |
2677 | - if data.get('tenant', None): |
2678 | - try: |
2679 | |
2680 | === modified file 'debian/patches/series' |
2681 | --- debian/patches/series 2012-08-30 17:15:04 +0000 |
2682 | +++ debian/patches/series 2013-04-24 15:22:28 +0000 |
2683 | @@ -6,4 +6,3 @@ |
2684 | allow_alternate_css.patch |
2685 | use-memcache.patch |
2686 | juju_panel-handle_catalog_exception.patch |
2687 | -CVE-2012-3540.patch |
2688 | |
2689 | === removed file 'docs/source/_static/.gitignore' |
2690 | === added directory 'horizon.egg-info' |
2691 | === added file 'horizon.egg-info/PKG-INFO' |
2692 | --- horizon.egg-info/PKG-INFO 1970-01-01 00:00:00 +0000 |
2693 | +++ horizon.egg-info/PKG-INFO 2013-04-24 15:22:28 +0000 |
2694 | @@ -0,0 +1,126 @@ |
2695 | +Metadata-Version: 1.1 |
2696 | +Name: horizon |
2697 | +Version: 2012.1.4 |
2698 | +Summary: The OpenStack Dashboard. |
2699 | +Home-page: https://github.com/openstack/horizon/ |
2700 | +Author: OpenStack |
2701 | +Author-email: horizon@lists.launchpad.net |
2702 | +License: Apache 2.0 |
2703 | +Description: ============================= |
2704 | + Horizon (OpenStack Dashboard) |
2705 | + ============================= |
2706 | + |
2707 | + Horizon is a Django-based project aimed at providing a complete OpenStack |
2708 | + Dashboard along with an extensible framework for building new dashboards |
2709 | + from reusable components. The ``openstack_dashboard`` module is a reference |
2710 | + implementation of a Django site that uses the ``horizon`` app to provide |
2711 | + web-based interactions with the various OpenStack projects. |
2712 | + |
2713 | + For release management: |
2714 | + |
2715 | + * https://launchpad.net/horizon |
2716 | + |
2717 | + For blueprints and feature specifications: |
2718 | + |
2719 | + * https://blueprints.launchpad.net/horizon |
2720 | + |
2721 | + For issue tracking: |
2722 | + |
2723 | + * https://bugs.launchpad.net/horizon |
2724 | + |
2725 | + Getting Started |
2726 | + =============== |
2727 | + |
2728 | + For local development, first create a virtualenv for the project. |
2729 | + In the ``tools`` directory there is a script to create one for you: |
2730 | + |
2731 | + $ python tools/install_venv.py |
2732 | + |
2733 | + Alternatively, the ``run_tests.sh`` script will also install the environment |
2734 | + for you and then run the full test suite to verify everything is installed |
2735 | + and functioning correctly. |
2736 | + |
2737 | + Now that the virtualenv is created, you need to configure your local |
2738 | + environment. To do this, create a ``local_settings.py`` file in the |
2739 | + ``openstack_dashboard/local/`` directory. There is a |
2740 | + ``local_settings.py.example`` file there that may be used as a template. |
2741 | + |
2742 | + If all is well you should able to run the development server locally: |
2743 | + |
2744 | + $ tools/with_venv.sh manage.py runserver |
2745 | + |
2746 | + or, as a shortcut:: |
2747 | + |
2748 | + $ ./run_tests.sh --runserver |
2749 | + |
2750 | + |
2751 | + Settings Up OpenStack |
2752 | + ===================== |
2753 | + |
2754 | + The recommended tool for installing and configuring the core OpenStack |
2755 | + components is `Devstack`_. Refer to their documentation for getting |
2756 | + Nova, Keystone, Glance, etc. up and running. |
2757 | + |
2758 | + .. _Devstack: http://devstack.org/ |
2759 | + |
2760 | + .. note:: |
2761 | + |
2762 | + The minimum required set of OpenStack services running includes the |
2763 | + following: |
2764 | + |
2765 | + * Nova (compute, api, scheduler, network, *and* volume services) |
2766 | + * Glance |
2767 | + * Keystone |
2768 | + |
2769 | + Optional support is provided for Swift. |
2770 | + |
2771 | + |
2772 | + Development |
2773 | + =========== |
2774 | + |
2775 | + For development, start with the getting started instructions above. |
2776 | + Once you have a working virtualenv and all the necessary packages, read on. |
2777 | + |
2778 | + If dependencies are added to either ``horizon`` or ``openstack-dashboard``, |
2779 | + they should be added to ``tools/pip-requires``. |
2780 | + |
2781 | + The ``run_tests.sh`` script invokes tests and analyses on both of these |
2782 | + components in its process, and it is what Jenkins uses to verify the |
2783 | + stability of the project. If run before an environment is set up, it will |
2784 | + ask if you wish to install one. |
2785 | + |
2786 | + To run the unit tests:: |
2787 | + |
2788 | + $ ./run_tests.sh |
2789 | + |
2790 | + Building Contributor Documentation |
2791 | + ================================== |
2792 | + |
2793 | + This documentation is written by contributors, for contributors. |
2794 | + |
2795 | + The source is maintained in the ``docs/source`` folder using |
2796 | + `reStructuredText`_ and built by `Sphinx`_ |
2797 | + |
2798 | + .. _reStructuredText: http://docutils.sourceforge.net/rst.html |
2799 | + .. _Sphinx: http://sphinx.pocoo.org/ |
2800 | + |
2801 | + * Building Automatically:: |
2802 | + |
2803 | + $ ./run_tests.sh --docs |
2804 | + |
2805 | + * Building Manually:: |
2806 | + |
2807 | + $ export DJANGO_SETTINGS_MODULE=local.local_settings |
2808 | + $ python doc/generate_autodoc_index.py |
2809 | + $ sphinx-build -b html doc/source build/sphinx/html |
2810 | + |
2811 | + Results are in the `build/sphinx/html` directory |
2812 | + |
2813 | +Platform: UNKNOWN |
2814 | +Classifier: Development Status :: 4 - Beta |
2815 | +Classifier: Framework :: Django |
2816 | +Classifier: Intended Audience :: Developers |
2817 | +Classifier: License :: OSI Approved :: Apache Software License |
2818 | +Classifier: Operating System :: OS Independent |
2819 | +Classifier: Programming Language :: Python |
2820 | +Classifier: Topic :: Internet :: WWW/HTTP |
2821 | |
2822 | === added file 'horizon.egg-info/SOURCES.txt' |
2823 | --- horizon.egg-info/SOURCES.txt 1970-01-01 00:00:00 +0000 |
2824 | +++ horizon.egg-info/SOURCES.txt 2013-04-24 15:22:28 +0000 |
2825 | @@ -0,0 +1,478 @@ |
2826 | +AUTHORS |
2827 | +LICENSE |
2828 | +MANIFEST.in |
2829 | +Makefile |
2830 | +README.rst |
2831 | +manage.py |
2832 | +run_tests.sh |
2833 | +setup.py |
2834 | +docs/Makefile |
2835 | +docs/source/conf.py |
2836 | +docs/source/contributing.rst |
2837 | +docs/source/faq.rst |
2838 | +docs/source/glossary.rst |
2839 | +docs/source/index.rst |
2840 | +docs/source/intro.rst |
2841 | +docs/source/quickstart.rst |
2842 | +docs/source/testing.rst |
2843 | +docs/source/_static/basic.css |
2844 | +docs/source/_static/default.css |
2845 | +docs/source/_static/header-line.gif |
2846 | +docs/source/_static/header_bg.jpg |
2847 | +docs/source/_static/jquery.tweet.js |
2848 | +docs/source/_static/openstack_logo.png |
2849 | +docs/source/_static/tweaks.css |
2850 | +docs/source/_templates/.placeholder |
2851 | +docs/source/_theme/layout.html |
2852 | +docs/source/_theme/nature.css_t |
2853 | +docs/source/_theme/theme.conf |
2854 | +docs/source/ref/context_processors.rst |
2855 | +docs/source/ref/decorators.rst |
2856 | +docs/source/ref/exceptions.rst |
2857 | +docs/source/ref/forms.rst |
2858 | +docs/source/ref/horizon.rst |
2859 | +docs/source/ref/middleware.rst |
2860 | +docs/source/ref/run_tests.rst |
2861 | +docs/source/ref/tables.rst |
2862 | +docs/source/ref/tabs.rst |
2863 | +docs/source/ref/test.rst |
2864 | +docs/source/ref/users.rst |
2865 | +docs/source/ref/views.rst |
2866 | +docs/source/topics/customizing.rst |
2867 | +docs/source/topics/deployment.rst |
2868 | +docs/source/topics/tables.rst |
2869 | +docs/source/topics/testing.rst |
2870 | +horizon/__init__.py |
2871 | +horizon/base.py |
2872 | +horizon/context_processors.py |
2873 | +horizon/decorators.py |
2874 | +horizon/exceptions.py |
2875 | +horizon/middleware.py |
2876 | +horizon/models.py |
2877 | +horizon/site_urls.py |
2878 | +horizon/test.py |
2879 | +horizon/time.py |
2880 | +horizon/users.py |
2881 | +horizon/version.py |
2882 | +horizon.egg-info/PKG-INFO |
2883 | +horizon.egg-info/SOURCES.txt |
2884 | +horizon.egg-info/dependency_links.txt |
2885 | +horizon.egg-info/not-zip-safe |
2886 | +horizon.egg-info/requires.txt |
2887 | +horizon.egg-info/top_level.txt |
2888 | +horizon/api/__init__.py |
2889 | +horizon/api/base.py |
2890 | +horizon/api/glance.py |
2891 | +horizon/api/keystone.py |
2892 | +horizon/api/nova.py |
2893 | +horizon/api/swift.py |
2894 | +horizon/dashboards/__init__.py |
2895 | +horizon/dashboards/nova/__init__.py |
2896 | +horizon/dashboards/nova/dashboard.py |
2897 | +horizon/dashboards/nova/models.py |
2898 | +horizon/dashboards/nova/access_and_security/__init__.py |
2899 | +horizon/dashboards/nova/access_and_security/panel.py |
2900 | +horizon/dashboards/nova/access_and_security/tests.py |
2901 | +horizon/dashboards/nova/access_and_security/urls.py |
2902 | +horizon/dashboards/nova/access_and_security/views.py |
2903 | +horizon/dashboards/nova/access_and_security/floating_ips/__init__.py |
2904 | +horizon/dashboards/nova/access_and_security/floating_ips/forms.py |
2905 | +horizon/dashboards/nova/access_and_security/floating_ips/tables.py |
2906 | +horizon/dashboards/nova/access_and_security/floating_ips/tests.py |
2907 | +horizon/dashboards/nova/access_and_security/floating_ips/urls.py |
2908 | +horizon/dashboards/nova/access_and_security/floating_ips/views.py |
2909 | +horizon/dashboards/nova/access_and_security/keypairs/__init__.py |
2910 | +horizon/dashboards/nova/access_and_security/keypairs/forms.py |
2911 | +horizon/dashboards/nova/access_and_security/keypairs/tables.py |
2912 | +horizon/dashboards/nova/access_and_security/keypairs/tests.py |
2913 | +horizon/dashboards/nova/access_and_security/keypairs/urls.py |
2914 | +horizon/dashboards/nova/access_and_security/keypairs/views.py |
2915 | +horizon/dashboards/nova/access_and_security/security_groups/__init__.py |
2916 | +horizon/dashboards/nova/access_and_security/security_groups/forms.py |
2917 | +horizon/dashboards/nova/access_and_security/security_groups/tables.py |
2918 | +horizon/dashboards/nova/access_and_security/security_groups/tests.py |
2919 | +horizon/dashboards/nova/access_and_security/security_groups/urls.py |
2920 | +horizon/dashboards/nova/access_and_security/security_groups/views.py |
2921 | +horizon/dashboards/nova/containers/__init__.py |
2922 | +horizon/dashboards/nova/containers/forms.py |
2923 | +horizon/dashboards/nova/containers/panel.py |
2924 | +horizon/dashboards/nova/containers/tables.py |
2925 | +horizon/dashboards/nova/containers/tests.py |
2926 | +horizon/dashboards/nova/containers/urls.py |
2927 | +horizon/dashboards/nova/containers/views.py |
2928 | +horizon/dashboards/nova/images_and_snapshots/__init__.py |
2929 | +horizon/dashboards/nova/images_and_snapshots/panel.py |
2930 | +horizon/dashboards/nova/images_and_snapshots/tests.py |
2931 | +horizon/dashboards/nova/images_and_snapshots/urls.py |
2932 | +horizon/dashboards/nova/images_and_snapshots/views.py |
2933 | +horizon/dashboards/nova/images_and_snapshots/images/__init__.py |
2934 | +horizon/dashboards/nova/images_and_snapshots/images/forms.py |
2935 | +horizon/dashboards/nova/images_and_snapshots/images/panel.py |
2936 | +horizon/dashboards/nova/images_and_snapshots/images/tables.py |
2937 | +horizon/dashboards/nova/images_and_snapshots/images/tabs.py |
2938 | +horizon/dashboards/nova/images_and_snapshots/images/tests.py |
2939 | +horizon/dashboards/nova/images_and_snapshots/images/urls.py |
2940 | +horizon/dashboards/nova/images_and_snapshots/images/views.py |
2941 | +horizon/dashboards/nova/images_and_snapshots/snapshots/__init__.py |
2942 | +horizon/dashboards/nova/images_and_snapshots/snapshots/forms.py |
2943 | +horizon/dashboards/nova/images_and_snapshots/snapshots/panel.py |
2944 | +horizon/dashboards/nova/images_and_snapshots/snapshots/tables.py |
2945 | +horizon/dashboards/nova/images_and_snapshots/snapshots/tests.py |
2946 | +horizon/dashboards/nova/images_and_snapshots/snapshots/urls.py |
2947 | +horizon/dashboards/nova/images_and_snapshots/snapshots/views.py |
2948 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/__init__.py |
2949 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/panel.py |
2950 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/tables.py |
2951 | +horizon/dashboards/nova/images_and_snapshots/volume_snapshots/tests.py |
2952 | +horizon/dashboards/nova/instances_and_volumes/__init__.py |
2953 | +horizon/dashboards/nova/instances_and_volumes/panel.py |
2954 | +horizon/dashboards/nova/instances_and_volumes/tests.py |
2955 | +horizon/dashboards/nova/instances_and_volumes/urls.py |
2956 | +horizon/dashboards/nova/instances_and_volumes/views.py |
2957 | +horizon/dashboards/nova/instances_and_volumes/instances/__init__.py |
2958 | +horizon/dashboards/nova/instances_and_volumes/instances/forms.py |
2959 | +horizon/dashboards/nova/instances_and_volumes/instances/tables.py |
2960 | +horizon/dashboards/nova/instances_and_volumes/instances/tabs.py |
2961 | +horizon/dashboards/nova/instances_and_volumes/instances/tests.py |
2962 | +horizon/dashboards/nova/instances_and_volumes/instances/urls.py |
2963 | +horizon/dashboards/nova/instances_and_volumes/instances/views.py |
2964 | +horizon/dashboards/nova/instances_and_volumes/volumes/__init__.py |
2965 | +horizon/dashboards/nova/instances_and_volumes/volumes/forms.py |
2966 | +horizon/dashboards/nova/instances_and_volumes/volumes/tables.py |
2967 | +horizon/dashboards/nova/instances_and_volumes/volumes/tabs.py |
2968 | +horizon/dashboards/nova/instances_and_volumes/volumes/tests.py |
2969 | +horizon/dashboards/nova/instances_and_volumes/volumes/urls.py |
2970 | +horizon/dashboards/nova/instances_and_volumes/volumes/views.py |
2971 | +horizon/dashboards/nova/overview/__init__.py |
2972 | +horizon/dashboards/nova/overview/panel.py |
2973 | +horizon/dashboards/nova/overview/tests.py |
2974 | +horizon/dashboards/nova/overview/urls.py |
2975 | +horizon/dashboards/nova/overview/views.py |
2976 | +horizon/dashboards/nova/templates/nova/base.html |
2977 | +horizon/dashboards/nova/templates/nova/access_and_security/index.html |
2978 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/_allocate.html |
2979 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/_associate.html |
2980 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/allocate.html |
2981 | +horizon/dashboards/nova/templates/nova/access_and_security/floating_ips/associate.html |
2982 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/_create.html |
2983 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/_import.html |
2984 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/create.html |
2985 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/download.html |
2986 | +horizon/dashboards/nova/templates/nova/access_and_security/keypairs/import.html |
2987 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/_create.html |
2988 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/_edit_rules.html |
2989 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/create.html |
2990 | +horizon/dashboards/nova/templates/nova/access_and_security/security_groups/edit_rules.html |
2991 | +horizon/dashboards/nova/templates/nova/containers/_create.html |
2992 | +horizon/dashboards/nova/templates/nova/containers/create.html |
2993 | +horizon/dashboards/nova/templates/nova/containers/index.html |
2994 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/index.html |
2995 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_detail_overview.html |
2996 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html |
2997 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_update.html |
2998 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/detail.html |
2999 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/launch.html |
3000 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/images/update.html |
3001 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/snapshots/_create.html |
3002 | +horizon/dashboards/nova/templates/nova/images_and_snapshots/snapshots/create.html |
3003 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/index.html |
3004 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_log.html |
3005 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_overview.html |
3006 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_detail_vnc.html |
3007 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_instance_ips.html |
3008 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/_update.html |
3009 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/detail.html |
3010 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/instances/update.html |
3011 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_attach.html |
3012 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_create.html |
3013 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_create_snapshot.html |
3014 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/_detail_overview.html |
3015 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/attach.html |
3016 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/create.html |
3017 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/create_snapshot.html |
3018 | +horizon/dashboards/nova/templates/nova/instances_and_volumes/volumes/detail.html |
3019 | +horizon/dashboards/nova/templates/nova/objects/_copy.html |
3020 | +horizon/dashboards/nova/templates/nova/objects/_upload.html |
3021 | +horizon/dashboards/nova/templates/nova/objects/copy.html |
3022 | +horizon/dashboards/nova/templates/nova/objects/index.html |
3023 | +horizon/dashboards/nova/templates/nova/objects/upload.html |
3024 | +horizon/dashboards/nova/templates/nova/overview/usage.csv |
3025 | +horizon/dashboards/nova/templates/nova/overview/usage.html |
3026 | +horizon/dashboards/settings/__init__.py |
3027 | +horizon/dashboards/settings/dashboard.py |
3028 | +horizon/dashboards/settings/models.py |
3029 | +horizon/dashboards/settings/ec2/__init__.py |
3030 | +horizon/dashboards/settings/ec2/forms.py |
3031 | +horizon/dashboards/settings/ec2/panel.py |
3032 | +horizon/dashboards/settings/ec2/tests.py |
3033 | +horizon/dashboards/settings/ec2/urls.py |
3034 | +horizon/dashboards/settings/ec2/views.py |
3035 | +horizon/dashboards/settings/project/__init__.py |
3036 | +horizon/dashboards/settings/project/forms.py |
3037 | +horizon/dashboards/settings/project/panel.py |
3038 | +horizon/dashboards/settings/project/urls.py |
3039 | +horizon/dashboards/settings/project/views.py |
3040 | +horizon/dashboards/settings/templates/settings/base.html |
3041 | +horizon/dashboards/settings/templates/settings/ec2/download_form.html |
3042 | +horizon/dashboards/settings/templates/settings/ec2/ec2rc.sh.template |
3043 | +horizon/dashboards/settings/templates/settings/ec2/index.html |
3044 | +horizon/dashboards/settings/templates/settings/project/_openrc.html |
3045 | +horizon/dashboards/settings/templates/settings/project/openrc.sh.template |
3046 | +horizon/dashboards/settings/templates/settings/project/settings.html |
3047 | +horizon/dashboards/settings/templates/settings/user/_language.html |
3048 | +horizon/dashboards/settings/templates/settings/user/settings.html |
3049 | +horizon/dashboards/settings/user/__init__.py |
3050 | +horizon/dashboards/settings/user/panel.py |
3051 | +horizon/dashboards/settings/user/urls.py |
3052 | +horizon/dashboards/settings/user/views.py |
3053 | +horizon/dashboards/syspanel/__init__.py |
3054 | +horizon/dashboards/syspanel/dashboard.py |
3055 | +horizon/dashboards/syspanel/models.py |
3056 | +horizon/dashboards/syspanel/flavors/__init__.py |
3057 | +horizon/dashboards/syspanel/flavors/forms.py |
3058 | +horizon/dashboards/syspanel/flavors/panel.py |
3059 | +horizon/dashboards/syspanel/flavors/tables.py |
3060 | +horizon/dashboards/syspanel/flavors/tests.py |
3061 | +horizon/dashboards/syspanel/flavors/urls.py |
3062 | +horizon/dashboards/syspanel/flavors/views.py |
3063 | +horizon/dashboards/syspanel/images/__init__.py |
3064 | +horizon/dashboards/syspanel/images/forms.py |
3065 | +horizon/dashboards/syspanel/images/panel.py |
3066 | +horizon/dashboards/syspanel/images/tables.py |
3067 | +horizon/dashboards/syspanel/images/tests.py |
3068 | +horizon/dashboards/syspanel/images/urls.py |
3069 | +horizon/dashboards/syspanel/images/views.py |
3070 | +horizon/dashboards/syspanel/instances/__init__.py |
3071 | +horizon/dashboards/syspanel/instances/panel.py |
3072 | +horizon/dashboards/syspanel/instances/tables.py |
3073 | +horizon/dashboards/syspanel/instances/tests.py |
3074 | +horizon/dashboards/syspanel/instances/urls.py |
3075 | +horizon/dashboards/syspanel/instances/views.py |
3076 | +horizon/dashboards/syspanel/overview/__init__.py |
3077 | +horizon/dashboards/syspanel/overview/panel.py |
3078 | +horizon/dashboards/syspanel/overview/urls.py |
3079 | +horizon/dashboards/syspanel/overview/views.py |
3080 | +horizon/dashboards/syspanel/projects/__init__.py |
3081 | +horizon/dashboards/syspanel/projects/forms.py |
3082 | +horizon/dashboards/syspanel/projects/panel.py |
3083 | +horizon/dashboards/syspanel/projects/tables.py |
3084 | +horizon/dashboards/syspanel/projects/tests.py |
3085 | +horizon/dashboards/syspanel/projects/urls.py |
3086 | +horizon/dashboards/syspanel/projects/views.py |
3087 | +horizon/dashboards/syspanel/quotas/__init__.py |
3088 | +horizon/dashboards/syspanel/quotas/panel.py |
3089 | +horizon/dashboards/syspanel/quotas/tables.py |
3090 | +horizon/dashboards/syspanel/quotas/tests.py |
3091 | +horizon/dashboards/syspanel/quotas/urls.py |
3092 | +horizon/dashboards/syspanel/quotas/views.py |
3093 | +horizon/dashboards/syspanel/services/__init__.py |
3094 | +horizon/dashboards/syspanel/services/panel.py |
3095 | +horizon/dashboards/syspanel/services/tables.py |
3096 | +horizon/dashboards/syspanel/services/tests.py |
3097 | +horizon/dashboards/syspanel/services/urls.py |
3098 | +horizon/dashboards/syspanel/services/views.py |
3099 | +horizon/dashboards/syspanel/templates/syspanel/base.html |
3100 | +horizon/dashboards/syspanel/templates/syspanel/flavors/_create.html |
3101 | +horizon/dashboards/syspanel/templates/syspanel/flavors/create.html |
3102 | +horizon/dashboards/syspanel/templates/syspanel/flavors/index.html |
3103 | +horizon/dashboards/syspanel/templates/syspanel/images/_update.html |
3104 | +horizon/dashboards/syspanel/templates/syspanel/images/index.html |
3105 | +horizon/dashboards/syspanel/templates/syspanel/images/update.html |
3106 | +horizon/dashboards/syspanel/templates/syspanel/instances/index.html |
3107 | +horizon/dashboards/syspanel/templates/syspanel/overview/usage.csv |
3108 | +horizon/dashboards/syspanel/templates/syspanel/overview/usage.html |
3109 | +horizon/dashboards/syspanel/templates/syspanel/projects/_add_user.html |
3110 | +horizon/dashboards/syspanel/templates/syspanel/projects/_create.html |
3111 | +horizon/dashboards/syspanel/templates/syspanel/projects/_quotas.html |
3112 | +horizon/dashboards/syspanel/templates/syspanel/projects/_update.html |
3113 | +horizon/dashboards/syspanel/templates/syspanel/projects/add_user.html |
3114 | +horizon/dashboards/syspanel/templates/syspanel/projects/create.html |
3115 | +horizon/dashboards/syspanel/templates/syspanel/projects/index.html |
3116 | +horizon/dashboards/syspanel/templates/syspanel/projects/quotas.html |
3117 | +horizon/dashboards/syspanel/templates/syspanel/projects/update.html |
3118 | +horizon/dashboards/syspanel/templates/syspanel/projects/usage.csv |
3119 | +horizon/dashboards/syspanel/templates/syspanel/projects/usage.html |
3120 | +horizon/dashboards/syspanel/templates/syspanel/projects/users.html |
3121 | +horizon/dashboards/syspanel/templates/syspanel/quotas/index.html |
3122 | +horizon/dashboards/syspanel/templates/syspanel/services/index.html |
3123 | +horizon/dashboards/syspanel/templates/syspanel/users/_create.html |
3124 | +horizon/dashboards/syspanel/templates/syspanel/users/_update.html |
3125 | +horizon/dashboards/syspanel/templates/syspanel/users/create.html |
3126 | +horizon/dashboards/syspanel/templates/syspanel/users/index.html |
3127 | +horizon/dashboards/syspanel/templates/syspanel/users/update.html |
3128 | +horizon/dashboards/syspanel/users/__init__.py |
3129 | +horizon/dashboards/syspanel/users/forms.py |
3130 | +horizon/dashboards/syspanel/users/panel.py |
3131 | +horizon/dashboards/syspanel/users/tables.py |
3132 | +horizon/dashboards/syspanel/users/tests.py |
3133 | +horizon/dashboards/syspanel/users/urls.py |
3134 | +horizon/dashboards/syspanel/users/views.py |
3135 | +horizon/forms/__init__.py |
3136 | +horizon/forms/base.py |
3137 | +horizon/forms/views.py |
3138 | +horizon/locale/es/LC_MESSAGES/django.mo |
3139 | +horizon/locale/es/LC_MESSAGES/django.po |
3140 | +horizon/locale/fr/LC_MESSAGES/django.mo |
3141 | +horizon/locale/fr/LC_MESSAGES/django.po |
3142 | +horizon/locale/ja/LC_MESSAGES/django.mo |
3143 | +horizon/locale/ja/LC_MESSAGES/django.po |
3144 | +horizon/locale/pl/LC_MESSAGES/django.mo |
3145 | +horizon/locale/pl/LC_MESSAGES/django.po |
3146 | +horizon/locale/pt/LC_MESSAGES/django.mo |
3147 | +horizon/locale/pt/LC_MESSAGES/django.po |
3148 | +horizon/locale/zh_CN/LC_MESSAGES/django.po |
3149 | +horizon/locale/zh_TW/LC_MESSAGES/django.mo |
3150 | +horizon/locale/zh_TW/LC_MESSAGES/django.po |
3151 | +horizon/static/horizon/js/form_examples.js |
3152 | +horizon/static/horizon/js/forms.js |
3153 | +horizon/static/horizon/js/hogan-1.0.5.min.js |
3154 | +horizon/static/horizon/js/horizon.js |
3155 | +horizon/static/horizon/js/json2.js |
3156 | +horizon/static/horizon/js/modals.js |
3157 | +horizon/static/horizon/js/plugins.js |
3158 | +horizon/static/horizon/js/tables.js |
3159 | +horizon/static/horizon/js/tabs.js |
3160 | +horizon/static/horizon/js/jquery/jquery-ui.min.js |
3161 | +horizon/static/horizon/js/jquery/jquery.cookie.js |
3162 | +horizon/static/horizon/js/jquery/jquery.example.min.js |
3163 | +horizon/static/horizon/js/jquery/jquery.min.js |
3164 | +horizon/static/horizon/js/jquery/jquery.quicksearch.js |
3165 | +horizon/static/horizon/js/jquery/jquery.table-sorter.js |
3166 | +horizon/tables/__init__.py |
3167 | +horizon/tables/actions.py |
3168 | +horizon/tables/base.py |
3169 | +horizon/tables/views.py |
3170 | +horizon/tabs/__init__.py |
3171 | +horizon/tabs/base.py |
3172 | +horizon/tabs/views.py |
3173 | +horizon/templates/horizon/_messages.html |
3174 | +horizon/templates/horizon/_nav_list.html |
3175 | +horizon/templates/horizon/_subnav_list.html |
3176 | +horizon/templates/horizon/auth/_login.html |
3177 | +horizon/templates/horizon/auth/login.html |
3178 | +horizon/templates/horizon/client_side/_alert_message.html |
3179 | +horizon/templates/horizon/client_side/_modal.html |
3180 | +horizon/templates/horizon/client_side/_table_row.html |
3181 | +horizon/templates/horizon/client_side/conf.html |
3182 | +horizon/templates/horizon/client_side/template.html |
3183 | +horizon/templates/horizon/client_side/templates.html |
3184 | +horizon/templates/horizon/common/_data_table.html |
3185 | +horizon/templates/horizon/common/_data_table_row.html |
3186 | +horizon/templates/horizon/common/_data_table_row_action.html |
3187 | +horizon/templates/horizon/common/_data_table_row_actions.html |
3188 | +horizon/templates/horizon/common/_data_table_table_actions.html |
3189 | +horizon/templates/horizon/common/_detail_table.html |
3190 | +horizon/templates/horizon/common/_form_fields.html |
3191 | +horizon/templates/horizon/common/_modal_form.html |
3192 | +horizon/templates/horizon/common/_page_header.html |
3193 | +horizon/templates/horizon/common/_progress_bar.html |
3194 | +horizon/templates/horizon/common/_region_selector.html |
3195 | +horizon/templates/horizon/common/_sidebar.html |
3196 | +horizon/templates/horizon/common/_sidebar_module.html |
3197 | +horizon/templates/horizon/common/_tab_group.html |
3198 | +horizon/templates/horizon/common/_usage_summary.html |
3199 | +horizon/templatetags/__init__.py |
3200 | +horizon/templatetags/branding.py |
3201 | +horizon/templatetags/horizon.py |
3202 | +horizon/templatetags/parse_date.py |
3203 | +horizon/templatetags/sizeformat.py |
3204 | +horizon/templatetags/truncate_filter.py |
3205 | +horizon/tests/__init__.py |
3206 | +horizon/tests/auth_tests.py |
3207 | +horizon/tests/authors_tests.py |
3208 | +horizon/tests/base_tests.py |
3209 | +horizon/tests/context_processor_tests.py |
3210 | +horizon/tests/table_tests.py |
3211 | +horizon/tests/tabs_tests.py |
3212 | +horizon/tests/templatetag_tests.py |
3213 | +horizon/tests/test_panel_urls.py |
3214 | +horizon/tests/testsettings.py |
3215 | +horizon/tests/testurls.py |
3216 | +horizon/tests/utils_tests.py |
3217 | +horizon/tests/views.py |
3218 | +horizon/tests/api_tests/__init__.py |
3219 | +horizon/tests/api_tests/base_tests.py |
3220 | +horizon/tests/api_tests/glance_tests.py |
3221 | +horizon/tests/api_tests/keystone_tests.py |
3222 | +horizon/tests/api_tests/nova_tests.py |
3223 | +horizon/tests/api_tests/swift_tests.py |
3224 | +horizon/tests/templates/404.html |
3225 | +horizon/tests/templates/_tab.html |
3226 | +horizon/tests/templates/base-sidebar.html |
3227 | +horizon/tests/templates/base.html |
3228 | +horizon/tests/templates/splash.html |
3229 | +horizon/tests/templates/switch_tenants.html |
3230 | +horizon/tests/templates/tab_group.html |
3231 | +horizon/tests/test_data/__init__.py |
3232 | +horizon/tests/test_data/glance_data.py |
3233 | +horizon/tests/test_data/keystone_data.py |
3234 | +horizon/tests/test_data/nova_data.py |
3235 | +horizon/tests/test_data/swift_data.py |
3236 | +horizon/tests/test_data/utils.py |
3237 | +horizon/usage/__init__.py |
3238 | +horizon/usage/base.py |
3239 | +horizon/usage/tables.py |
3240 | +horizon/usage/views.py |
3241 | +horizon/utils/__init__.py |
3242 | +horizon/utils/filters.py |
3243 | +horizon/utils/html.py |
3244 | +horizon/utils/reverse_bugfix.py |
3245 | +horizon/utils/validators.py |
3246 | +horizon/views/__init__.py |
3247 | +horizon/views/auth.py |
3248 | +horizon/views/auth_forms.py |
3249 | +horizon/views/base.py |
3250 | +openstack_dashboard/__init__.py |
3251 | +openstack_dashboard/middleware.py |
3252 | +openstack_dashboard/settings.py |
3253 | +openstack_dashboard/tests.py |
3254 | +openstack_dashboard/urls.py |
3255 | +openstack_dashboard/views.py |
3256 | +openstack_dashboard/local/__init__.py |
3257 | +openstack_dashboard/local/local_settings.py.example |
3258 | +openstack_dashboard/locale/es/LC_MESSAGES/django.po |
3259 | +openstack_dashboard/locale/fr/LC_MESSAGES/django.po |
3260 | +openstack_dashboard/locale/ja/LC_MESSAGES/django.po |
3261 | +openstack_dashboard/locale/pl/LC_MESSAGES/django.po |
3262 | +openstack_dashboard/locale/pt/LC_MESSAGES/django.po |
3263 | +openstack_dashboard/locale/zh_CN/LC_MESSAGES/django.po |
3264 | +openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.mo |
3265 | +openstack_dashboard/locale/zh_TW/LC_MESSAGES/django.po |
3266 | +openstack_dashboard/static/bootstrap/css/bootstrap-responsive.css |
3267 | +openstack_dashboard/static/bootstrap/css/bootstrap-responsive.min.css |
3268 | +openstack_dashboard/static/bootstrap/css/bootstrap.css |
3269 | +openstack_dashboard/static/bootstrap/css/bootstrap.min.css |
3270 | +openstack_dashboard/static/bootstrap/img/glyphicons-halflings-white.png |
3271 | +openstack_dashboard/static/bootstrap/img/glyphicons-halflings.png |
3272 | +openstack_dashboard/static/bootstrap/js/bootstrap.js |
3273 | +openstack_dashboard/static/bootstrap/js/bootstrap.min.js |
3274 | +openstack_dashboard/static/dashboard/css/style.css |
3275 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.eot |
3276 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.svg |
3277 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.ttf |
3278 | +openstack_dashboard/static/dashboard/fonts/Anivers_Regular-webfont.woff |
3279 | +openstack_dashboard/static/dashboard/img/drop_arrow.png |
3280 | +openstack_dashboard/static/dashboard/img/favicon.ico |
3281 | +openstack_dashboard/static/dashboard/img/logo.png |
3282 | +openstack_dashboard/static/dashboard/img/right_droparrow.png |
3283 | +openstack_dashboard/static/dashboard/img/search.png |
3284 | +openstack_dashboard/static/dashboard/img/spinner.gif |
3285 | +openstack_dashboard/static/qunit/qunit.css |
3286 | +openstack_dashboard/static/qunit/qunit.js |
3287 | +openstack_dashboard/templates/403.html |
3288 | +openstack_dashboard/templates/404.html |
3289 | +openstack_dashboard/templates/500.html |
3290 | +openstack_dashboard/templates/_footer.html |
3291 | +openstack_dashboard/templates/_header.html |
3292 | +openstack_dashboard/templates/_scripts.html |
3293 | +openstack_dashboard/templates/_stylesheets.html |
3294 | +openstack_dashboard/templates/base.html |
3295 | +openstack_dashboard/templates/qunit.html |
3296 | +openstack_dashboard/templates/splash.html |
3297 | +openstack_dashboard/templates/switch_tenants.html |
3298 | +openstack_dashboard/wsgi/django.wsgi |
3299 | +tools/install_venv.py |
3300 | +tools/pip-requires |
3301 | +tools/rfc.sh |
3302 | +tools/test-requires |
3303 | +tools/with_venv.sh |
3304 | \ No newline at end of file |
3305 | |
3306 | === added file 'horizon.egg-info/dependency_links.txt' |
3307 | --- horizon.egg-info/dependency_links.txt 1970-01-01 00:00:00 +0000 |
3308 | +++ horizon.egg-info/dependency_links.txt 2013-04-24 15:22:28 +0000 |
3309 | @@ -0,0 +1,3 @@ |
3310 | +http://github.com/openstack/python-novaclient/tarball/master#egg=python-novaclient |
3311 | +http://github.com/openstack/python-keystoneclient/tarball/master#egg=python-keystoneclient |
3312 | +http://github.com/openstack/glance@stable/essex#egg=glance |
3313 | |
3314 | === added file 'horizon.egg-info/not-zip-safe' |
3315 | --- horizon.egg-info/not-zip-safe 1970-01-01 00:00:00 +0000 |
3316 | +++ horizon.egg-info/not-zip-safe 2013-04-24 15:22:28 +0000 |
3317 | @@ -0,0 +1,1 @@ |
3318 | + |
3319 | |
3320 | === added file 'horizon.egg-info/requires.txt' |
3321 | --- horizon.egg-info/requires.txt 1970-01-01 00:00:00 +0000 |
3322 | +++ horizon.egg-info/requires.txt 2013-04-24 15:22:28 +0000 |
3323 | @@ -0,0 +1,18 @@ |
3324 | +Django>=1.3 |
3325 | +python-cloudfiles |
3326 | +python-dateutil |
3327 | +django-nose |
3328 | +PasteDeploy |
3329 | +eventlet |
3330 | +kombu |
3331 | +paste |
3332 | +pycrypto==2.3 |
3333 | +routes |
3334 | +sqlalchemy |
3335 | +sqlalchemy-migrate |
3336 | +webob==1.0.8 |
3337 | +xattr |
3338 | +iso8601 |
3339 | +python-novaclient |
3340 | +python-keystoneclient |
3341 | +glance |
3342 | \ No newline at end of file |
3343 | |
3344 | === added file 'horizon.egg-info/top_level.txt' |
3345 | --- horizon.egg-info/top_level.txt 1970-01-01 00:00:00 +0000 |
3346 | +++ horizon.egg-info/top_level.txt 2013-04-24 15:22:28 +0000 |
3347 | @@ -0,0 +1,2 @@ |
3348 | +openstack_dashboard |
3349 | +horizon |
3350 | |
3351 | === modified file 'horizon/dashboards/nova/images_and_snapshots/images/tables.py' |
3352 | --- horizon/dashboards/nova/images_and_snapshots/images/tables.py 2012-08-24 03:27:33 +0000 |
3353 | +++ horizon/dashboards/nova/images_and_snapshots/images/tables.py 2013-04-24 15:22:28 +0000 |
3354 | @@ -100,3 +100,6 @@ |
3355 | table_actions = (DeleteImage,) |
3356 | row_actions = (LaunchImage, EditImage, DeleteImage) |
3357 | pagination_param = "image_marker" |
3358 | + |
3359 | + def get_object_display(self, obj): |
3360 | + return obj.name or obj.id |
3361 | |
3362 | === modified file 'horizon/dashboards/nova/instances_and_volumes/volumes/tables.py' |
3363 | --- horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2012-08-24 03:27:33 +0000 |
3364 | +++ horizon/dashboards/nova/instances_and_volumes/volumes/tables.py 2013-04-24 15:22:28 +0000 |
3365 | @@ -119,7 +119,7 @@ |
3366 | status_choices=STATUS_CHOICES) |
3367 | |
3368 | def get_object_display(self, obj): |
3369 | - return obj.display_name |
3370 | + return obj.display_name or obj.id |
3371 | |
3372 | |
3373 | class VolumesTable(VolumesTableBase): |
3374 | |
3375 | === added file 'horizon/dashboards/settings/juju/__init__.py' |
3376 | --- horizon/dashboards/settings/juju/__init__.py 1970-01-01 00:00:00 +0000 |
3377 | +++ horizon/dashboards/settings/juju/__init__.py 2013-04-24 15:22:28 +0000 |
3378 | @@ -0,0 +1,1 @@ |
3379 | +# Horizon Juju settings panel |
3380 | |
3381 | === removed file 'horizon/dashboards/settings/juju/__init__.py' |
3382 | --- horizon/dashboards/settings/juju/__init__.py 2012-04-12 12:42:04 +0000 |
3383 | +++ horizon/dashboards/settings/juju/__init__.py 1970-01-01 00:00:00 +0000 |
3384 | @@ -1,1 +0,0 @@ |
3385 | -# Horizon Juju settings panel |
3386 | |
3387 | === added file 'horizon/dashboards/settings/juju/forms.py' |
3388 | --- horizon/dashboards/settings/juju/forms.py 1970-01-01 00:00:00 +0000 |
3389 | +++ horizon/dashboards/settings/juju/forms.py 2013-04-24 15:22:28 +0000 |
3390 | @@ -0,0 +1,96 @@ |
3391 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3392 | + |
3393 | +# Copyright 2012 Openstack, LLC |
3394 | +# Copyright 2012 Canonical Ltd. |
3395 | +# |
3396 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3397 | +# not use this file except in compliance with the License. You may obtain |
3398 | +# a copy of the License at |
3399 | +# |
3400 | +# http://www.apache.org/licenses/LICENSE-2.0 |
3401 | +# |
3402 | +# Unless required by applicable law or agreed to in writing, software |
3403 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3404 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3405 | +# License for the specific language governing permissions and limitations |
3406 | +# under the License. |
3407 | + |
3408 | +import logging |
3409 | +import tempfile |
3410 | +import zipfile |
3411 | +from contextlib import closing |
3412 | + |
3413 | +from django import http, shortcuts |
3414 | +from django.contrib import messages |
3415 | +from django.template.loader import render_to_string |
3416 | +from django.utils.translation import ugettext_lazy as _ |
3417 | +from horizon import api |
3418 | +from horizon import exceptions |
3419 | +from horizon import forms |
3420 | + |
3421 | +import boto |
3422 | +import uuid |
3423 | + |
3424 | +LOG = logging.getLogger(__name__) |
3425 | + |
3426 | + |
3427 | +class DownloadJujuEnvironment(forms.SelfHandlingForm): |
3428 | + # This is heavily based off the ec2 credentials form |
3429 | + tenant = forms.ChoiceField(label=_("Select a Project")) |
3430 | + @classmethod |
3431 | + def _instantiate(cls, request, *args, **kwargs): |
3432 | + return cls(request, *args, **kwargs) |
3433 | + |
3434 | + def __init__(self, request, *args, **kwargs): |
3435 | + super(DownloadJujuEnvironment, self).__init__(*args, **kwargs) |
3436 | + tenant_choices = [] |
3437 | + try: |
3438 | + tenant_list = api.keystone.tenant_list(request) |
3439 | + except: |
3440 | + tenant_list = [] |
3441 | + exceptions.handle(request, _("Unable to retrieve tenant list.")) |
3442 | + |
3443 | + for tenant in tenant_list: |
3444 | + if tenant.enabled: |
3445 | + tenant_choices.append((tenant.id, tenant.name)) |
3446 | + if not tenant_choices: |
3447 | + self.fields['tenant'].choices = ('', 'No Available Tenants') |
3448 | + else: |
3449 | + self.fields['tenant'].choices = tenant_choices |
3450 | + |
3451 | + def handle(self, request, data): |
3452 | + def find_or_create_access_keys(request, tenant_id): |
3453 | + keys = api.keystone.list_ec2_credentials(request, request.user.id) |
3454 | + if keys: |
3455 | + return keys[0] |
3456 | + else: |
3457 | + return api.keystone.create_ec2_credentials(request, |
3458 | + request.user.id, |
3459 | + tenant_id) |
3460 | + try: |
3461 | + api.keystone.token_create_scoped(request, |
3462 | + data.get('tenant'), |
3463 | + request.user.token) |
3464 | + keys = find_or_create_access_keys(request, data.get('tenant')) |
3465 | + tenant_id = data['tenant'] |
3466 | + tenant_name = dict(self.fields['tenant'].choices)[tenant_id] |
3467 | + control_bucket = "juju-openstack-%s-%s" % (tenant_name, str(uuid.uuid4())[19:]) |
3468 | + context = {'ec2_access_key': keys.access, |
3469 | + 'ec2_secret_key': keys.secret, |
3470 | + 'ec2_url': api.url_for(request, 'ec2'), |
3471 | + 's3_url': api.url_for(request, 's3'), |
3472 | + 'juju_admin_secret': uuid.uuid4().hex, |
3473 | + 'control_bucket': control_bucket |
3474 | + } |
3475 | + except Exception, e: |
3476 | + LOG.exception("S3 endpoint required for Juju environments.yaml creation.") |
3477 | + messages.error(request, _('Could not generate environment config: %s') % e) |
3478 | + return shortcuts.redirect(request.build_absolute_uri()) |
3479 | + |
3480 | + response = shortcuts.render(request, |
3481 | + 'settings/juju/environments.yaml.template', |
3482 | + context, |
3483 | + content_type='text/plain') |
3484 | + response['Content-Disposition'] = 'attachment; filename=environments.yaml' |
3485 | + response['Content-Length'] = str(len(response.content)) |
3486 | + return response |
3487 | |
3488 | === removed file 'horizon/dashboards/settings/juju/forms.py' |
3489 | --- horizon/dashboards/settings/juju/forms.py 2012-08-24 03:27:33 +0000 |
3490 | +++ horizon/dashboards/settings/juju/forms.py 1970-01-01 00:00:00 +0000 |
3491 | @@ -1,96 +0,0 @@ |
3492 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3493 | - |
3494 | -# Copyright 2012 Openstack, LLC |
3495 | -# Copyright 2012 Canonical Ltd. |
3496 | -# |
3497 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3498 | -# not use this file except in compliance with the License. You may obtain |
3499 | -# a copy of the License at |
3500 | -# |
3501 | -# http://www.apache.org/licenses/LICENSE-2.0 |
3502 | -# |
3503 | -# Unless required by applicable law or agreed to in writing, software |
3504 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3505 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3506 | -# License for the specific language governing permissions and limitations |
3507 | -# under the License. |
3508 | - |
3509 | -import logging |
3510 | -import tempfile |
3511 | -import zipfile |
3512 | -from contextlib import closing |
3513 | - |
3514 | -from django import http, shortcuts |
3515 | -from django.contrib import messages |
3516 | -from django.template.loader import render_to_string |
3517 | -from django.utils.translation import ugettext_lazy as _ |
3518 | -from horizon import api |
3519 | -from horizon import exceptions |
3520 | -from horizon import forms |
3521 | - |
3522 | -import boto |
3523 | -import uuid |
3524 | - |
3525 | -LOG = logging.getLogger(__name__) |
3526 | - |
3527 | - |
3528 | -class DownloadJujuEnvironment(forms.SelfHandlingForm): |
3529 | - # This is heavily based off the ec2 credentials form |
3530 | - tenant = forms.ChoiceField(label=_("Select a Project")) |
3531 | - @classmethod |
3532 | - def _instantiate(cls, request, *args, **kwargs): |
3533 | - return cls(request, *args, **kwargs) |
3534 | - |
3535 | - def __init__(self, request, *args, **kwargs): |
3536 | - super(DownloadJujuEnvironment, self).__init__(*args, **kwargs) |
3537 | - tenant_choices = [] |
3538 | - try: |
3539 | - tenant_list = api.keystone.tenant_list(request) |
3540 | - except: |
3541 | - tenant_list = [] |
3542 | - exceptions.handle(request, _("Unable to retrieve tenant list.")) |
3543 | - |
3544 | - for tenant in tenant_list: |
3545 | - if tenant.enabled: |
3546 | - tenant_choices.append((tenant.id, tenant.name)) |
3547 | - if not tenant_choices: |
3548 | - self.fields['tenant'].choices = ('', 'No Available Tenants') |
3549 | - else: |
3550 | - self.fields['tenant'].choices = tenant_choices |
3551 | - |
3552 | - def handle(self, request, data): |
3553 | - def find_or_create_access_keys(request, tenant_id): |
3554 | - keys = api.keystone.list_ec2_credentials(request, request.user.id) |
3555 | - if keys: |
3556 | - return keys[0] |
3557 | - else: |
3558 | - return api.keystone.create_ec2_credentials(request, |
3559 | - request.user.id, |
3560 | - tenant_id) |
3561 | - try: |
3562 | - api.keystone.token_create_scoped(request, |
3563 | - data.get('tenant'), |
3564 | - request.user.token) |
3565 | - keys = find_or_create_access_keys(request, data.get('tenant')) |
3566 | - tenant_id = data['tenant'] |
3567 | - tenant_name = dict(self.fields['tenant'].choices)[tenant_id] |
3568 | - control_bucket = "juju-openstack-%s-%s" % (tenant_name, str(uuid.uuid4())[19:]) |
3569 | - context = {'ec2_access_key': keys.access, |
3570 | - 'ec2_secret_key': keys.secret, |
3571 | - 'ec2_url': api.url_for(request, 'ec2'), |
3572 | - 's3_url': api.url_for(request, 's3'), |
3573 | - 'juju_admin_secret': uuid.uuid4().hex, |
3574 | - 'control_bucket': control_bucket |
3575 | - } |
3576 | - except Exception, e: |
3577 | - LOG.exception("S3 endpoint required for Juju environments.yaml creation.") |
3578 | - messages.error(request, _('Could not generate environment config: %s') % e) |
3579 | - return shortcuts.redirect(request.build_absolute_uri()) |
3580 | - |
3581 | - response = shortcuts.render(request, |
3582 | - 'settings/juju/environments.yaml.template', |
3583 | - context, |
3584 | - content_type='text/plain') |
3585 | - response['Content-Disposition'] = 'attachment; filename=environments.yaml' |
3586 | - response['Content-Length'] = str(len(response.content)) |
3587 | - return response |
3588 | |
3589 | === added file 'horizon/dashboards/settings/juju/panel.py' |
3590 | --- horizon/dashboards/settings/juju/panel.py 1970-01-01 00:00:00 +0000 |
3591 | +++ horizon/dashboards/settings/juju/panel.py 2013-04-24 15:22:28 +0000 |
3592 | @@ -0,0 +1,28 @@ |
3593 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3594 | +# Copyright 2012 Openstack, LLC |
3595 | +# Copyright 2012 Canonical Ltd. |
3596 | +# |
3597 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3598 | +# not use this file except in compliance with the License. You may obtain |
3599 | +# a copy of the License at |
3600 | +# |
3601 | +# http://www.apache.org/licenses/LICENSE-2.0 |
3602 | +# |
3603 | +# Unless required by applicable law or agreed to in writing, software |
3604 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3605 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3606 | +# License for the specific language governing permissions and limitations |
3607 | +# under the License. |
3608 | + |
3609 | +from django.utils.translation import ugettext_lazy as _ |
3610 | + |
3611 | +import horizon |
3612 | +from horizon.dashboards.settings import dashboard |
3613 | + |
3614 | + |
3615 | +class JujuPanel(horizon.Panel): |
3616 | + name = _("Juju Environment Config") |
3617 | + slug = 'juju' |
3618 | + |
3619 | + |
3620 | +dashboard.Settings.register(JujuPanel) |
3621 | |
3622 | === removed file 'horizon/dashboards/settings/juju/panel.py' |
3623 | --- horizon/dashboards/settings/juju/panel.py 2012-04-12 12:42:04 +0000 |
3624 | +++ horizon/dashboards/settings/juju/panel.py 1970-01-01 00:00:00 +0000 |
3625 | @@ -1,28 +0,0 @@ |
3626 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3627 | -# Copyright 2012 Openstack, LLC |
3628 | -# Copyright 2012 Canonical Ltd. |
3629 | -# |
3630 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3631 | -# not use this file except in compliance with the License. You may obtain |
3632 | -# a copy of the License at |
3633 | -# |
3634 | -# http://www.apache.org/licenses/LICENSE-2.0 |
3635 | -# |
3636 | -# Unless required by applicable law or agreed to in writing, software |
3637 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3638 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3639 | -# License for the specific language governing permissions and limitations |
3640 | -# under the License. |
3641 | - |
3642 | -from django.utils.translation import ugettext_lazy as _ |
3643 | - |
3644 | -import horizon |
3645 | -from horizon.dashboards.settings import dashboard |
3646 | - |
3647 | - |
3648 | -class JujuPanel(horizon.Panel): |
3649 | - name = _("Juju Environment Config") |
3650 | - slug = 'juju' |
3651 | - |
3652 | - |
3653 | -dashboard.Settings.register(JujuPanel) |
3654 | |
3655 | === added file 'horizon/dashboards/settings/juju/urls.py' |
3656 | --- horizon/dashboards/settings/juju/urls.py 1970-01-01 00:00:00 +0000 |
3657 | +++ horizon/dashboards/settings/juju/urls.py 2013-04-24 15:22:28 +0000 |
3658 | @@ -0,0 +1,24 @@ |
3659 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3660 | + |
3661 | +# Copyright 2012 Openstack, LLC |
3662 | +# Copyright 2012 Canonical Ltd. |
3663 | +# |
3664 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3665 | +# not use this file except in compliance with the License. You may obtain |
3666 | +# a copy of the License at |
3667 | +# |
3668 | +# http://www.apache.org/licenses/LICENSE-2.0 |
3669 | +# |
3670 | +# Unless required by applicable law or agreed to in writing, software |
3671 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3672 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3673 | +# License for the specific language governing permissions and limitations |
3674 | +# under the License. |
3675 | + |
3676 | +from django.conf.urls.defaults import patterns, url |
3677 | + |
3678 | +from .views import IndexView |
3679 | + |
3680 | +urlpatterns = patterns('horizon.dashboards.settings.juju.views', |
3681 | + url(r'^$', IndexView.as_view(), name='index'), |
3682 | +) |
3683 | |
3684 | === removed file 'horizon/dashboards/settings/juju/urls.py' |
3685 | --- horizon/dashboards/settings/juju/urls.py 2012-04-12 12:42:04 +0000 |
3686 | +++ horizon/dashboards/settings/juju/urls.py 1970-01-01 00:00:00 +0000 |
3687 | @@ -1,24 +0,0 @@ |
3688 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3689 | - |
3690 | -# Copyright 2012 Openstack, LLC |
3691 | -# Copyright 2012 Canonical Ltd. |
3692 | -# |
3693 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3694 | -# not use this file except in compliance with the License. You may obtain |
3695 | -# a copy of the License at |
3696 | -# |
3697 | -# http://www.apache.org/licenses/LICENSE-2.0 |
3698 | -# |
3699 | -# Unless required by applicable law or agreed to in writing, software |
3700 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3701 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3702 | -# License for the specific language governing permissions and limitations |
3703 | -# under the License. |
3704 | - |
3705 | -from django.conf.urls.defaults import patterns, url |
3706 | - |
3707 | -from .views import IndexView |
3708 | - |
3709 | -urlpatterns = patterns('horizon.dashboards.settings.juju.views', |
3710 | - url(r'^$', IndexView.as_view(), name='index'), |
3711 | -) |
3712 | |
3713 | === added file 'horizon/dashboards/settings/juju/views.py' |
3714 | --- horizon/dashboards/settings/juju/views.py 1970-01-01 00:00:00 +0000 |
3715 | +++ horizon/dashboards/settings/juju/views.py 2013-04-24 15:22:28 +0000 |
3716 | @@ -0,0 +1,28 @@ |
3717 | +# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3718 | + |
3719 | +# Copyright 2012 Openstack, LLC |
3720 | +# |
3721 | +# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3722 | +# not use this file except in compliance with the License. You may obtain |
3723 | +# a copy of the License at |
3724 | +# |
3725 | +# http://www.apache.org/licenses/LICENSE-2.0 |
3726 | +# |
3727 | +# Unless required by applicable law or agreed to in writing, software |
3728 | +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3729 | +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3730 | +# License for the specific language governing permissions and limitations |
3731 | +# under the License. |
3732 | + |
3733 | +import logging |
3734 | + |
3735 | +from horizon import forms |
3736 | +from horizon.dashboards.settings.juju.forms import DownloadJujuEnvironment |
3737 | + |
3738 | + |
3739 | +LOG = logging.getLogger(__name__) |
3740 | + |
3741 | + |
3742 | +class IndexView(forms.ModalFormView): |
3743 | + form_class = DownloadJujuEnvironment |
3744 | + template_name = 'settings/juju/index.html' |
3745 | |
3746 | === removed file 'horizon/dashboards/settings/juju/views.py' |
3747 | --- horizon/dashboards/settings/juju/views.py 2012-04-12 12:42:04 +0000 |
3748 | +++ horizon/dashboards/settings/juju/views.py 1970-01-01 00:00:00 +0000 |
3749 | @@ -1,28 +0,0 @@ |
3750 | -# vim: tabstop=4 shiftwidth=4 softtabstop=4 |
3751 | - |
3752 | -# Copyright 2012 Openstack, LLC |
3753 | -# |
3754 | -# Licensed under the Apache License, Version 2.0 (the "License"); you may |
3755 | -# not use this file except in compliance with the License. You may obtain |
3756 | -# a copy of the License at |
3757 | -# |
3758 | -# http://www.apache.org/licenses/LICENSE-2.0 |
3759 | -# |
3760 | -# Unless required by applicable law or agreed to in writing, software |
3761 | -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
3762 | -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
3763 | -# License for the specific language governing permissions and limitations |
3764 | -# under the License. |
3765 | - |
3766 | -import logging |
3767 | - |
3768 | -from horizon import forms |
3769 | -from horizon.dashboards.settings.juju.forms import DownloadJujuEnvironment |
3770 | - |
3771 | - |
3772 | -LOG = logging.getLogger(__name__) |
3773 | - |
3774 | - |
3775 | -class IndexView(forms.ModalFormView): |
3776 | - form_class = DownloadJujuEnvironment |
3777 | - template_name = 'settings/juju/index.html' |
3778 | |
3779 | === added file 'horizon/dashboards/settings/templates/settings/juju/download_form.html' |
3780 | --- horizon/dashboards/settings/templates/settings/juju/download_form.html 1970-01-01 00:00:00 +0000 |
3781 | +++ horizon/dashboards/settings/templates/settings/juju/download_form.html 2013-04-24 15:22:28 +0000 |
3782 | @@ -0,0 +1,20 @@ |
3783 | +{% extends "horizon/common/_modal_form.html" %} |
3784 | +{% load i18n %} |
3785 | + |
3786 | + |
3787 | +{% block modal-body %} |
3788 | +<div class="left"> |
3789 | + <fieldset> |
3790 | + {% include "horizon/common/_form_fields.html" %} |
3791 | + </fieldset> |
3792 | +</div> |
3793 | +<div class="right"> |
3794 | + <h3>{% trans "Description:" %}</h3> |
3795 | + <p>{% trans 'Clicking "Download Juju Environment Config" will download a file which includes a Juju environment configured for your cloud.<br><center><img src='/static/dashboard/img/juju.png'></center><br>To find out more about Juju visit <a href='http://juju.ubuntu.com'>http://juju.ubuntu.com</a>' %}</p> |
3796 | +</div> |
3797 | +{% endblock %} |
3798 | + |
3799 | +{% block modal-footer %} |
3800 | + <input class="btn btn-primary pull-right" type="submit" value="{% trans "Download Juju Environment Config" %}" /> |
3801 | + {% if hide %}<a href="{% url horizon:settings:juju:index %}" class="btn secondary cancel close">{% trans "Cancel" %}</a>{% endif %} |
3802 | +{% endblock %} |
3803 | |
3804 | === removed file 'horizon/dashboards/settings/templates/settings/juju/download_form.html' |
3805 | --- horizon/dashboards/settings/templates/settings/juju/download_form.html 2012-04-23 10:04:39 +0000 |
3806 | +++ horizon/dashboards/settings/templates/settings/juju/download_form.html 1970-01-01 00:00:00 +0000 |
3807 | @@ -1,20 +0,0 @@ |
3808 | -{% extends "horizon/common/_modal_form.html" %} |
3809 | -{% load i18n %} |
3810 | - |
3811 | - |
3812 | -{% block modal-body %} |
3813 | -<div class="left"> |
3814 | - <fieldset> |
3815 | - {% include "horizon/common/_form_fields.html" %} |
3816 | - </fieldset> |
3817 | -</div> |
3818 | -<div class="right"> |
3819 | - <h3>{% trans "Description:" %}</h3> |
3820 | - <p>{% trans 'Clicking "Download Juju Environment Config" will download a file which includes a Juju environment configured for your cloud.<br><center><img src='/static/dashboard/img/juju.png'></center><br>To find out more about Juju visit <a href='http://juju.ubuntu.com'>http://juju.ubuntu.com</a>' %}</p> |
3821 | -</div> |
3822 | -{% endblock %} |
3823 | - |
3824 | -{% block modal-footer %} |
3825 | - <input class="btn btn-primary pull-right" type="submit" value="{% trans "Download Juju Environment Config" %}" /> |
3826 | - {% if hide %}<a href="{% url horizon:settings:juju:index %}" class="btn secondary cancel close">{% trans "Cancel" %}</a>{% endif %} |
3827 | -{% endblock %} |
3828 | |
3829 | === added file 'horizon/dashboards/settings/templates/settings/juju/environments.yaml.template' |
3830 | --- horizon/dashboards/settings/templates/settings/juju/environments.yaml.template 1970-01-01 00:00:00 +0000 |
3831 | +++ horizon/dashboards/settings/templates/settings/juju/environments.yaml.template 2013-04-24 15:22:28 +0000 |
3832 | @@ -0,0 +1,21 @@ |
3833 | +# To use Juju with your Openstack cloud: |
3834 | +# 1. Run: apt-get install juju |
3835 | +# 2. Copy this file to $HOME/.juju/environments.yaml |
3836 | +# 3. Modify the 'default-image-id' to match an Ubuntu cloud image |
3837 | +# AMI that has been published to your cloud. |
3838 | +# 4. Run 'juju bootstrap' and deploy services! |
3839 | +# |
3840 | +# To find out more about juju visit http://juju.ubuntu.com |
3841 | + |
3842 | +juju: environments |
3843 | +environments: |
3844 | + openstack: |
3845 | + type: ec2 |
3846 | + control-bucket: {{ control_bucket }} |
3847 | + admin-secret: {{ juju_admin_secret }} |
3848 | + access-key: {{ ec2_access_key }} |
3849 | + secret-key: {{ ec2_secret_key }} |
3850 | + ec2-uri: {{ ec2_url }} |
3851 | + s3-uri: {{ s3_url }} |
3852 | + default-series: precise |
3853 | + default-image-id: ami-00000001 |
3854 | |
3855 | === removed file 'horizon/dashboards/settings/templates/settings/juju/environments.yaml.template' |
3856 | --- horizon/dashboards/settings/templates/settings/juju/environments.yaml.template 2012-04-12 12:42:04 +0000 |
3857 | +++ horizon/dashboards/settings/templates/settings/juju/environments.yaml.template 1970-01-01 00:00:00 +0000 |
3858 | @@ -1,21 +0,0 @@ |
3859 | -# To use Juju with your Openstack cloud: |
3860 | -# 1. Run: apt-get install juju |
3861 | -# 2. Copy this file to $HOME/.juju/environments.yaml |
3862 | -# 3. Modify the 'default-image-id' to match an Ubuntu cloud image |
3863 | -# AMI that has been published to your cloud. |
3864 | -# 4. Run 'juju bootstrap' and deploy services! |
3865 | -# |
3866 | -# To find out more about juju visit http://juju.ubuntu.com |
3867 | - |
3868 | -juju: environments |
3869 | -environments: |
3870 | - openstack: |
3871 | - type: ec2 |
3872 | - control-bucket: {{ control_bucket }} |
3873 | - admin-secret: {{ juju_admin_secret }} |
3874 | - access-key: {{ ec2_access_key }} |
3875 | - secret-key: {{ ec2_secret_key }} |
3876 | - ec2-uri: {{ ec2_url }} |
3877 | - s3-uri: {{ s3_url }} |
3878 | - default-series: precise |
3879 | - default-image-id: ami-00000001 |
3880 | |
3881 | === added file 'horizon/dashboards/settings/templates/settings/juju/index.html' |
3882 | --- horizon/dashboards/settings/templates/settings/juju/index.html 1970-01-01 00:00:00 +0000 |
3883 | +++ horizon/dashboards/settings/templates/settings/juju/index.html 2013-04-24 15:22:28 +0000 |
3884 | @@ -0,0 +1,11 @@ |
3885 | +{% extends 'settings/base.html' %} |
3886 | +{% load i18n %} |
3887 | +{% block title %}{% trans "Download Juju Environment Config" %}{% endblock %} |
3888 | + |
3889 | +{% block page_header %} |
3890 | + {% include "horizon/common/_page_header.html" with title=_("Download Juju Environment Config") %} |
3891 | +{% endblock page_header %} |
3892 | + |
3893 | +{% block settings_main %} |
3894 | + {% include "settings/juju/download_form.html" %} |
3895 | +{% endblock %} |
3896 | |
3897 | === removed file 'horizon/dashboards/settings/templates/settings/juju/index.html' |
3898 | --- horizon/dashboards/settings/templates/settings/juju/index.html 2012-04-12 12:42:04 +0000 |
3899 | +++ horizon/dashboards/settings/templates/settings/juju/index.html 1970-01-01 00:00:00 +0000 |
3900 | @@ -1,11 +0,0 @@ |
3901 | -{% extends 'settings/base.html' %} |
3902 | -{% load i18n %} |
3903 | -{% block title %}{% trans "Download Juju Environment Config" %}{% endblock %} |
3904 | - |
3905 | -{% block page_header %} |
3906 | - {% include "horizon/common/_page_header.html" with title=_("Download Juju Environment Config") %} |
3907 | -{% endblock page_header %} |
3908 | - |
3909 | -{% block settings_main %} |
3910 | - {% include "settings/juju/download_form.html" %} |
3911 | -{% endblock %} |
3912 | |
3913 | === modified file 'horizon/usage/base.py' |
3914 | --- horizon/usage/base.py 2012-03-02 12:11:59 +0000 |
3915 | +++ horizon/usage/base.py 2013-04-24 15:22:28 +0000 |
3916 | @@ -68,15 +68,13 @@ |
3917 | |
3918 | def get_form(self): |
3919 | if not hasattr(self, 'form'): |
3920 | - if (any(key in ['month', 'year'] |
3921 | - for key in self.request.GET.keys())): |
3922 | + if any(key in ['month', 'year'] for key in self.request.GET): |
3923 | # bound form |
3924 | self.form = forms.DateForm(self.request.GET) |
3925 | else: |
3926 | # non-bound form |
3927 | - self.form = forms.DateForm(initial={ |
3928 | - 'month': self.today.month, |
3929 | - 'year': self.today.year}) |
3930 | + self.form = forms.DateForm(initial={'month': self.today.month, |
3931 | + 'year': self.today.year}) |
3932 | return self.form |
3933 | |
3934 | def get_usage_list(self, start, end): |
3935 | @@ -104,7 +102,12 @@ |
3936 | self.summary[key] += value |
3937 | |
3938 | def csv_link(self): |
3939 | - return "?date_month=%s&date_year=%s&format=csv" % self.get_date_range() |
3940 | + form = self.get_form() |
3941 | + if hasattr(form, "cleaned_data"): |
3942 | + data = form.cleaned_data |
3943 | + else: |
3944 | + data = {"month": self.today.month, "year": self.today.year} |
3945 | + return "?month=%s&year=%s&format=csv" % (data['month'], data['year']) |
3946 | |
3947 | |
3948 | class GlobalUsage(BaseUsage): |
3949 | |
3950 | === modified file 'horizon/version.py' |
3951 | --- horizon/version.py 2012-08-24 03:27:33 +0000 |
3952 | +++ horizon/version.py 2013-04-24 15:22:28 +0000 |
3953 | @@ -19,7 +19,7 @@ |
3954 | 'revno': 0} |
3955 | |
3956 | |
3957 | -HORIZON_VERSION = ['2012', '1', '3'] |
3958 | +HORIZON_VERSION = ['2012', '1', '4'] |
3959 | YEAR, COUNT, REVISION = HORIZON_VERSION |
3960 | FINAL = False # This becomes true at Release Candidate time |
3961 | |
3962 | |
3963 | === added file 'setup.cfg' |
3964 | --- setup.cfg 1970-01-01 00:00:00 +0000 |
3965 | +++ setup.cfg 2013-04-24 15:22:28 +0000 |
3966 | @@ -0,0 +1,5 @@ |
3967 | +[egg_info] |
3968 | +tag_build = |
3969 | +tag_date = 0 |
3970 | +tag_svn_revision = 0 |
3971 | + |
3972 | |
3973 | === modified file 'tools/pip-requires' |
3974 | --- tools/pip-requires 2012-08-24 03:27:33 +0000 |
3975 | +++ tools/pip-requires 2013-04-24 15:22:28 +0000 |
3976 | @@ -20,4 +20,4 @@ |
3977 | # Horizon Non-pip Requirements |
3978 | -e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient |
3979 | -e git+https://github.com/openstack/python-keystoneclient.git#egg=python-keystoneclient |
3980 | --e git+https://github.com/openstack/glance.git#egg=glance |
3981 | +-e git+https://github.com/openstack/glance@stable/essex#egg=glance |
3982 | |
3983 | === removed file 'tox.ini' |
3984 | --- tox.ini 2012-08-24 03:27:33 +0000 |
3985 | +++ tox.ini 1970-01-01 00:00:00 +0000 |
3986 | @@ -1,26 +0,0 @@ |
3987 | -[tox] |
3988 | -envlist = py26,py27,pep8 |
3989 | - |
3990 | -[testenv] |
3991 | -setenv = VIRTUAL_ENV={envdir} |
3992 | - NOSE_WITH_OPENSTACK=1 |
3993 | - NOSE_OPENSTACK_COLOR=1 |
3994 | - NOSE_OPENSTACK_RED=0.05 |
3995 | - NOSE_OPENSTACK_YELLOW=0.025 |
3996 | - NOSE_OPENSTACK_SHOW_ELAPSED=1 |
3997 | -deps = -r{toxinidir}/tools/pip-requires |
3998 | - -r{toxinidir}/tools/test-requires |
3999 | -commands = /bin/bash run_tests.sh -N |
4000 | - |
4001 | -[tox:jenkins] |
4002 | -downloadcache = ~/cache/pip |
4003 | - |
4004 | -[testenv:pep8] |
4005 | -deps = pep8==1.1 |
4006 | -commands = /bin/bash run_tests.sh -N --pep8 |
4007 | - |
4008 | -[testenv:cover] |
4009 | -commands = /bin/bash run_tests.sh -N --coverage |
4010 | - |
4011 | -[testenv:venv] |
4012 | -commands = {posargs} |