enable slices
diff --git a/plstackapi/core/api/slices.py b/plstackapi/core/api/slices.py
new file mode 100644
index 0000000..93b7ba2
--- /dev/null
+++ b/plstackapi/core/api/slices.py
@@ -0,0 +1,82 @@
+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             
+        
+
+