Refactor to /opt/planetstack, final tweaks to make sure planetstack can run in non-openstack mode, adjustments to GUI for model focus changes
diff --git a/planetstack/core/api/slices.py b/planetstack/core/api/slices.py
new file mode 100644
index 0000000..f03dd6f
--- /dev/null
+++ b/planetstack/core/api/slices.py
@@ -0,0 +1,93 @@
+import re
+from types import StringTypes
+from django.contrib.auth import authenticate
+from openstack.client import OpenStackClient
+from openstack.driver import OpenStackDriver
+from core.api.auth import auth_check
+from core.models import Slice
+from 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):
+ driver = OpenStackDriver(client = auth_check(auth))
+ login_base = fields['name'][:fields['name'].find('_')]
+ sites = _get_sites(login_base)
+ if sites: fields['site'] = sites[0]
+ 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(slice.name)
+ slice.network_id = network['id']
+
+ # create router
+ router = driver.create_router(slice.name)
+ slice.router_id = router['id']
+
+ slice.save()
+ return slice
+
+def update_slice(auth, id, **fields):
+ driver = OpenStackDriver(client = auth_check(auth))
+ slices = _get_slices(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
+ sites = _get_sites(fields.get('site'))
+ if sites: fields['site'] = sites[0]
+ slice.update(**fields)
+
+ return slice
+
+def delete_slice(auth, filter={}):
+ 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={}):
+ 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
+
+
+