From: Tony Mack Date: Wed, 10 Apr 2013 03:04:42 +0000 (-0400) Subject: lookup site by slice name X-Git-Tag: 1.0~138 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=67c6b1f4f7794fce43d70101e8c531e13a6797c4;p=plstackapi.git lookup site by slice name --- diff --git a/plstackapi/core/api/slices.py b/plstackapi/core/api/slices.py index 93b7ba2..5e63df8 100644 --- a/plstackapi/core/api/slices.py +++ b/plstackapi/core/api/slices.py @@ -1,19 +1,33 @@ +import re from plstackapi.openstack.client import OpenStackClient from plstackapi.openstack.driver import OpenStackDriver from plstackapi.core.api.auth import auth_check from plstackapi.core.models import Site +def validate_name(name): + # N.B.: Responsibility of the caller to ensure that login_base + # portion of the slice name corresponds to a valid site, if + # desired. + + # 1. Lowercase. + # 2. Begins with login_base (letters or numbers). + # 3. Then single underscore after login_base. + # 4. Then letters, numbers, or underscores. + good_name = r'^[a-z0-9]+_[a-zA-Z0-9_]+$' + if not name or \ + not re.match(good_name, name): + raise Exception, "Invalid slice name: %s" % name + def lookup_site(fields): site = None - if 'site' in fields: - if isinstance(fields['site'], int): - sites = Site.objects.filter(id=fields['site']) - else: - sites = Site.objects.filter(login_base=fields['site']) + if 'name' in fields: + validate_name(fields['name']) + login_base = fields['name'][:fields['name'].find('@')] + sites = Site.objects.filter(login_base=login_base) if sites: site = sites[0] if not site: - raise Exception, "No such site: %s" % fields['site'] + raise Exception, "No such site: %s" % login_base return site def add_slice(auth, fields):