import re
from types import StringTypes
+from django.contrib.auth import authenticate
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 Slice
from plstackapi.core.api.sites import _get_sites
-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 _get_slices(filter):
if isinstance(filter, StringTypes) and filter.isdigit():
filter = int(filter)
def add_slice(auth, fields):
driver = OpenStackDriver(client = auth_check(auth))
- validate_name(fields.get('name'))
login_base = fields['name'][:fields['name'].find('_')]
sites = _get_sites(login_base)
if sites: fields['site'] = sites[0]
driver = OpenStackDriver(client = auth_check(auth))
slices = _get_slices(id)
for slice in slices:
+ driver.delete_network(slice.network_id)
+ driver.delete_router(slice.router_id)
driver.delete_slice(id=slice.tenant_id)
slice.delete()
return 1
def get_slices(auth, filter={}):
- client = auth_check(auth)
+ user = authenticate(username=auth.get('username'),
+ password=auth.get('password'))
if 'site' in filter:
sites = _get_sites(filter.get('site'))
if sites: filter['site'] = sites[0]