Refactor to /opt/planetstack, final tweaks to make sure planetstack can run in non...
[plstackapi.git] / planetstack / core / api / slices.py
1 import re
2 from types import StringTypes
3 from django.contrib.auth import authenticate
4 from openstack.client import OpenStackClient
5 from openstack.driver import OpenStackDriver
6 from core.api.auth import auth_check
7 from core.models import Slice
8 from core.api.sites import _get_sites
9
10 def _get_slices(filter):
11     if isinstance(filter, StringTypes) and filter.isdigit():
12         filter = int(filter)
13     if isinstance(filter, int):
14         slices = Slice.objects.filter(id=filter)
15     elif isinstance(filter, StringTypes):
16         slices = Slice.objects.filter(name=filter)
17     elif isinstance(filter, dict):
18         slices = Slice.objects.filter(**filter)
19     else:
20         slices = []
21     return slices
22     
23  
24 def add_slice(auth, fields):
25     driver = OpenStackDriver(client = auth_check(auth))
26     login_base = fields['name'][:fields['name'].find('_')]
27     sites = _get_sites(login_base) 
28     if sites: fields['site'] = sites[0]     
29     slice = Slice(**fields)
30    
31     # create tenant
32     nova_fields = {'tenant_name': slice.name,
33                    'description': slice.description,
34                    'enabled': slice.enabled}
35     tenant = driver.create_tenant(**nova_fields)
36     slice.tenant_id=tenant.id
37     
38     # create network
39     network = driver.create_network(slice.name)
40     slice.network_id = network['id']
41
42     # create router
43     router = driver.create_router(slice.name)
44     slice.router_id = router['id']    
45
46     slice.save()
47     return slice
48
49 def update_slice(auth, id, **fields):
50     driver = OpenStackDriver(client = auth_check(auth))
51     slices = _get_slices(id)
52     if not slices:
53         return
54
55     # update tenant
56     slice = slices[0]
57     nova_fields = {}
58     if 'name' in fields:
59         nova_fields['tenant_name'] = fields['name']
60     if 'description' in fields:
61         nova_fields['description'] = fields['description']
62     if 'enabled' in fields:
63         nova_fields['enabled'] = fields['enabled']
64     driver.update_tenant(slice.tenant_id, **nova_fields)
65
66     # update db record 
67     sites = _get_sites(fields.get('site'))
68     if sites: fields['site'] = sites[0]
69     slice.update(**fields)
70
71     return slice 
72
73 def delete_slice(auth, filter={}):
74     driver = OpenStackDriver(client = auth_check(auth))   
75     slices = _get_slices(id)
76     for slice in slices:
77         driver.delete_network(slice.network_id)
78         driver.delete_router(slice.router_id)
79         driver.delete_slice(id=slice.tenant_id) 
80         slice.delete()
81     return 1
82
83 def get_slices(auth, filter={}):
84     user = authenticate(username=auth.get('username'),
85                         password=auth.get('password'))
86     if 'site' in filter:
87         sites = _get_sites(filter.get('site'))
88         if sites: filter['site'] = sites[0]
89     slices = _get_slices(filter)
90     return slices             
91         
92
93