fix bugs
[plstackapi.git] / plstackapi / core / api / subnets.py
1 from types import StringTypes
2 from plstackapi.openstack.client import OpenStackClient
3 from plstackapi.openstack.driver import OpenStackDriver
4 from plstackapi.core.api.auth import auth_check
5 from plstackapi.core.models import Subnet
6 from plstackapi.core.api.slices import _get_slices
7
8 def _get_subnets(filter):
9     if isinstance(filter, StringTypes) and filter.isdigit():
10         filter = int(filter)
11     if isinstance(filter, int):
12         subnets = Subnet.objects.filter(id=filter)
13     elif isinstance(filter, StringTypes):
14         # the name is the subnet's slice's name
15         slices = _get_slices(filter)
16         slice = None
17         if slices: slice=slices[0]
18         subnets = Subnet.objects.filter(slice=slice)
19     elif isinstance(filter, dict):
20         subnets = Subnet.objects.filter(**filter)
21     else:
22         subnets = []
23     return subnets
24
25 def add_subnet(auth, fields):
26     driver = OpenStackDriver(client = auth_check(auth))
27     slices = _get_slices(fields.get('slice')) 
28     if slices: fields['slice'] = slices[0]     
29     subnet = Subnet(**fields)
30     # create quantum subnet
31     quantum_subnet = driver.create_subnet(name= subnet.slice.name,
32                                           network_id=subnet.slice.network_id,
33                                           cidr_ip = subnet.cidr,
34                                           ip_version=subnet.ip_version,
35                                           start = subnet.start,
36                                           end = subnet.end)
37     subnet.subnet_id=quantum_subnet['id']
38     ## set dns servers
39     #driver.update_subnet(subnet.id, {'dns_nameservers': ['8.8.8.8', '8.8.4.4']})
40
41     # add subnet as interface to slice's router
42     driver.add_router_interface(subnet.slice.router_id, subnet.subnet_id)     
43     
44     subnet.save()
45     return subnet
46
47 def update_subnet(auth, subnet, **fields):
48     return  
49
50 def delete_subnet(auth, filter={}):
51     driver = OpenStackDriver(client = auth_check(auth))   
52     subnets = Subnet.objects.filter(**filter)
53     for subnet in subnets:
54         driver.delete_router_interface(subnet.slice.router_id, subnet.subnet_id)
55         driver.delete_subnet(subnet.subnet_id) 
56         subnet.delete()
57     return 1
58
59 def get_subnets(auth, filter={}):
60     client = auth_check(auth)
61     if 'slice' in filter:
62         slice = _get_slice(filter.get('slice'))
63         if slice: filter['slice'] = slice
64     subnets = Subnet.objects.filter(**filter)
65     return subnets             
66         
67
68