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