blob: f55249a60aa2ef85d77ff968f32aeafffa09fb31 [file] [log] [blame]
import re
from types import StringTypes
from django.contrib.auth import authenticate
from plstackapi.openstack.manager import OpenStackManager
from plstackapi.core.models import Slice
from plstackapi.core.api.sites import _get_sites
def _get_slices(filter):
if isinstance(filter, StringTypes) and filter.isdigit():
filter = int(filter)
if isinstance(filter, int):
slices = Slice.objects.filter(id=filter)
elif isinstance(filter, StringTypes):
slices = Slice.objects.filter(name=filter)
elif isinstance(filter, dict):
slices = Slice.objects.filter(**filter)
else:
slices = []
return slices
def add_slice(auth, fields):
user = authenticate(username=auth.get('username'),
password=auth.get('password'))
auth['tenant'] = user.site.login_base
login_base = fields['name'][:fields['name'].find('_')]
sites = _get_sites(login_base)
if sites: fields['site'] = sites[0]
slice = Slice(**fields)
slice.os_manager = OpenStackManager(auth=auth, caller = user)
slice.save()
return slice
def update_slice(auth, id, **fields):
user = authenticate(username=auth.get('username'),
password=auth.get('password'))
auth['tenant'] = user.site.login_base
slices = _get_slices(id)
if not slices:
return
slice = slices[0]
sites = _get_sites(fields.get('site'))
if sites: fields['site'] = sites[0]
slice.os_manager = OpenStackManager(auth=auth, caller = user)
for (k,v) in fields.items():
setattr(slice, k, v)
slice.save()
return slice
def delete_slice(auth, filter={}):
user = authenticate(username=auth.get('username'),
password=auth.get('password'))
auth['tenant'] = user.site.login_base
slices = _get_slices(filter)
for slice in slices:
slice.os_manager = OpenStackManager(auth=auth, caller = user)
slice.delete()
return 1
def get_slices(auth, filter={}):
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]
slices = _get_slices(filter)
return slices