From 0b5495e1f087892080cd8948ec27261f9c86107e Mon Sep 17 00:00:00 2001 From: Mark Gius Date: Tue, 12 Jul 2011 15:38:10 -0700 Subject: [PATCH] Better error messages on suspected openstackx missing errors --- django-openstack/django_openstack/api.py | 33 ++++++++++++++++++++++++ openstack-dashboard/README | 16 ++++++++++++ 2 files changed, 49 insertions(+) diff --git a/django-openstack/django_openstack/api.py b/django-openstack/django_openstack/api.py index 6e9aa5fe1..3341c6c35 100644 --- a/django-openstack/django_openstack/api.py +++ b/django-openstack/django_openstack/api.py @@ -42,6 +42,7 @@ import json import logging import openstack.compute import openstackx.admin +import openstackx.api.exceptions as api_exceptions import openstackx.extras import openstackx.auth from urlparse import urlparse @@ -229,6 +230,30 @@ def url_for(request, service_name, admin=False): return rv +def check_openstackx(f): + """Decorator that adds extra info to api exceptions + + The dashboard currently depends on openstackx extensions being present + in nova. Error messages depending for views depending on these + extensions do not lead to the conclusion that nova is missing + extensions. + + This decorator should be dropped and removed after keystone and + dashboard more gracefully handle extensions and openstackx extensions + aren't required by the dashboard in nova. + """ + def inner(*args, **kwargs): + try: + return f(*args, **kwargs) + except api_exceptions.NotFound, e: + e.message = e.details or '' + e.message += ' This error may be caused by missing openstackx' \ + ' extensions in nova. See the dashboard README.' + raise + + return inner + + def compute_api(request): compute = openstack.compute.Compute( auth_token=request.session['token'], @@ -307,6 +332,7 @@ def flavor_get(request, flavor_id): return Flavor(compute_api(request).flavors.get(flavor_id)) +@check_openstackx def flavor_list(request): return [Flavor(f) for f in extras_api(request).flavors.list()] @@ -341,6 +367,7 @@ def keypair_delete(request, keypair_id): extras_api(request).keypairs.delete(keypair_id) +@check_openstackx def keypair_list(request): return [KeyPair(key) for key in extras_api(request).keypairs.list()] @@ -359,6 +386,7 @@ def server_get(request, instance_id): return Server(compute_api(request).servers.get(instance_id), request) +@check_openstackx def server_list(request): return [Server(s, request) for s in extras_api(request).servers.list()] @@ -374,6 +402,7 @@ def service_get(request, name): return Services(admin_api(request).services.get(name)) +@check_openstackx def service_list(request): return [Services(s) for s in admin_api(request).services.list()] @@ -405,6 +434,7 @@ def tenant_get(request, tenant_id): return Tenant(account_api(request).tenants.get(tenant_id)) +@check_openstackx def tenant_list(request): return [Tenant(t) for t in account_api(request).tenants.list()] @@ -444,10 +474,12 @@ def token_info(request, token): 'admin': admin} +@check_openstackx def usage_get(request, tenant_id, start, end): return Usage(extras_api(request).usage.get(tenant_id, start, end)) +@check_openstackx def usage_list(request, start, end): return [Usage(u) for u in extras_api(request).usage.list(start, end)] @@ -465,6 +497,7 @@ def user_get(request, user_id): return User(account_api(request).users.get(user_id)) +@check_openstackx def user_list(request): return [User(u) for u in account_api(request).users.list()] diff --git a/openstack-dashboard/README b/openstack-dashboard/README index 302277bef..3c9053a21 100644 --- a/openstack-dashboard/README +++ b/openstack-dashboard/README @@ -33,5 +33,21 @@ If all is well you should now able to run the server locally: $ tools/with_venv.sh dashboard/manage.py runserver +Adding openstackx Extensions to Nova +------------------------------------ +If you are seeing large numbers of 404 exceptions on operations such as listing +servers, you are probably not running the openstackx extensions that the +dashboard depends on. You will need to download the openstackx code from +> https://github.com/cloudbuilders/openstackx + +and add the following option to your nova instantiation: + +> --osapi_extensions_path=/path/to/openstackx/extensions + +The rackspace cloudbuilders nova.sh script automates this process and creates a +full nova installation compatible with the dashboard. You can acquire this +script from the repository at + +https://github.com/cloudbuilders/deploy.sh