From d360b07f3a7645c6c7690b33ffa32bcb5b32d81c Mon Sep 17 00:00:00 2001 From: Anthony Young Date: Thu, 16 Jun 2011 23:01:23 -0700 Subject: [PATCH] use service catalog --- django-openstack/src/django_openstack/api.py | 60 ++++++++----------- .../src/django_openstack/auth/views.py | 3 +- 2 files changed, 27 insertions(+), 36 deletions(-) diff --git a/django-openstack/src/django_openstack/api.py b/django-openstack/src/django_openstack/api.py index 55844d16b..12172b5d6 100644 --- a/django-openstack/src/django_openstack/api.py +++ b/django-openstack/src/django_openstack/api.py @@ -2,65 +2,55 @@ from django.conf import settings import glance.client import httplib -import logging import json import openstack.compute import openstackx.admin import openstackx.extras import openstackx.auth from urlparse import urlparse +import json -# FIXME this is duplicated in syspanel need to consolidate - - +def url_for(request, service_name, admin=False): + catalog = request.session['serviceCatalog'] + if admin: + return catalog[service_name][0]['adminURL'] + else: + return catalog[service_name][0]['internalURL'] + def compute_api(request): - compute = openstack.compute.Compute(auth_token=request.session['token'], - management_url=settings.OPENSTACK_MANAGER_URL) - compute.client.auth_token = auth_token=request.session['token'] - compute.client.management_url = settings.OPENSTACK_MANAGER_URL - return compute - + return openstack.compute.Compute(auth_token=request.session['token'], + management_url=url_for(request, 'nova')) def account_api(request): return openstackx.extras.Account(auth_token=request.session['token'], - management_url=settings.OPENSTACK_ACCOUNT_URL) - - + management_url=url_for(request, 'keystone', True)) + def glance_api(request): - o = urlparse(settings.OPENSTACK_GLANCE_URL) + o = urlparse(url_for(request, 'glance')) return glance.client.Client(o.hostname, o.port) - - + def admin_api(request): return openstackx.admin.Admin(auth_token=request.session['token'], - management_url=settings.OPENSTACK_ADMIN_MANAGER_URL) - - -def extras_api(request): + management_url=url_for(request, 'nova', True)) + +def extras_api(request): return openstackx.extras.Extras(auth_token=request.session['token'], - management_url=settings.OPENSTACK_ADMIN_MANAGER_URL) - - -def auth_api(): + management_url=url_for(request, 'nova')) + + +def auth_api(): return openstackx.auth.Auth(management_url=\ - settings.OPENSTACK_KEYSTONE_URL) - - -def get_tenant(request, tenant_id): - tenants = auth_api().tenants.for_token(request.session['token']) - logging.info('TENANTS: %s', tenants) - for t in tenants: - if str(t.id) == str(tenant_id): - return t + settings.OPENSTACK_KEYSTONE_URL) def token_info(token): hdrs = {"Content-type": "application/json", "X_AUTH_TOKEN": settings.OPENSTACK_ADMIN_TOKEN, "Accept": "text/json"} - o = urlparse(settings.OPENSTACK_ACCOUNT_URL) + + o = urlparse(token.serviceCatalog['keystone'][0]['adminURL']) conn = httplib.HTTPConnection(o.hostname, o.port) - conn.request("GET", "/v2.0/tokens/%s" % token, headers=hdrs) + conn.request("GET", "/v2.0/tokens/%s" % token.id, headers=hdrs) response = conn.getresponse() data = json.loads(response.read()) diff --git a/django-openstack/src/django_openstack/auth/views.py b/django-openstack/src/django_openstack/auth/views.py index e6eabc1d8..2188406a5 100644 --- a/django-openstack/src/django_openstack/auth/views.py +++ b/django-openstack/src/django_openstack/auth/views.py @@ -21,11 +21,12 @@ class Login(forms.SelfHandlingForm): token = api.auth_api().tokens.create(data['tenant'], data['username'], data['password']) - info = api.token_info(token.id) + info = api.token_info(token) request.session['token'] = token.id request.session['user'] = info['user'] request.session['tenant'] = info['tenant'] request.session['admin'] = info['admin'] + request.session['serviceCatalog'] = token.serviceCatalog if request.session['admin']: return shortcuts.redirect('syspanel_overview')