merge latest code
[plstackapi.git] / plstackapi / core / api / subnets.py
1 import re
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, int):
10         subnets = Subnet.objects.filter(id=filter)
11     elif isinstance(filter, StringTypes):
12         subnets = Subnet.objects.filter(name=filter)
13     elif isinstance(filer, dict):
14         subnets = Subnet.objects.filter(**filter)
15     else:
16         subnets = []
17     return subnets
18
19 def add_subnet(auth, fields):
20     driver = OpenStackDriver(client = auth_check(auth))
21     slices = _get_slice(fields.get('slice')) 
22     if slices: fields['slice'] = slices[0]     
23     subnet = Subnet(**fields)
24     # create quantum subnet
25     subnet = driver.create_subnet(network_name=subnet.name,
26                                   cidr_ip = subnet.cidr,
27                                   ip_version=subnet.ip_version,
28                                   start = subnet.start,
29                                   end = subnet.end,
30                                   dns_nameservers = ['8.8.8.8', '8.8.4.4'])
31
32     subnet.subnet_id=subnet.id
33
34     # add subnet as interface to slice's router
35     driver.add_router_interface(subnet.slice.router_id, subnet.subnet_id)     
36     
37     subnet.save()
38     return subnet
39
40 def update_subnet(auth, subnet, **fields):
41     return  
42
43 def delete_subnet(auth, filter={}):
44     driver = OpenStackDriver(client = auth_check(auth))   
45     subnets = Subnet.objects.filter(**filter)
46     for subnet in subnets:
47         driver.delete_router_interface(subnet.slice.router_id, subnet.subnet_id)
48         driver.delete_subnet(subnet.subnet_id) 
49         subnet.delete()
50     return 1
51
52 def get_subnets(auth, filter={}):
53     client = auth_check(auth)
54     if 'slice' in filter:
55         slice = _get_slice(filter.get('slice'))
56         if slice: filter['slice'] = slice
57     subnets = Subnet.objects.filter(**filter)
58     return subnets             
59         
60
61