blob: 93b7ba21fb0368f85f74d1a1e21345884c59fd73 [file] [log] [blame]
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 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 sites:
site = sites[0]
if not site:
raise Exception, "No such site: %s" % fields['site']
return site
def add_slice(auth, fields):
driver = OpenStackDriver(client = auth_check(auth))
site = lookup_site(fields)
if site: fields['site'] = site
slice = Slice(**fields)
# create tenant
nova_fields = {'tenant_name': slice.name,
'description': slice.description,
'enabled': slice.enabled}
tenant = driver.create_tenant(**nova_fields)
slice.tenant_id=tenant.id
# create network
network = driver.create_network(name=self.name)
self.network_id = network['id']
# create router
router = driver.create_router(name=self.name)
self.router_id = router['id']
slice.save()
return slice
def update_slice(auth, id, **fields):
driver = OpenStackDriver(client = auth_check(auth))
slices = Slice.objects.filter(id=id)
if not slices:
return
# update tenant
slice = slices[0]
nova_fields = {}
if 'name' in fields:
nova_fields['tenant_name'] = fields['name']
if 'description' in fields:
nova_fields['description'] = fields['description']
if 'enabled' in fields:
nova_fields['enabled'] = fields['enabled']
driver.update_tenant(slice.tenant_id, **nova_fields)
# update db record
site = lookup_site(fields)
if site: fields['site'] = site
slice.update(**fields)
return slice
def delete_slice(auth, filter={}):
driver = OpenStackDriver(client = auth_check(auth))
slices = Slice.objects.filter(**filter)
for slice in slices:
driver.delete_slice(id=slice.tenant_id)
slice.delete()
return 1
def get_slices(auth, filter={}):
client = auth_check(auth)
site = lookup_site(fields)
if site: fields['site'] = site
slices = Slice.objects.filter(**filter)
return slices