Revision 882b662f snf-cyclades-app/synnefo/neutron/subnet_views.py
b/snf-cyclades-app/synnefo/neutron/subnet_views.py | ||
---|---|---|
44 | 44 |
|
45 | 45 |
import ipaddr |
46 | 46 |
|
47 |
log = getLogger('synnefo.neutron')
|
|
47 |
log = getLogger(__name__)
|
|
48 | 48 |
|
49 | 49 |
|
50 | 50 |
def demux(request): |
51 | 51 |
if request.method == 'GET': |
52 | 52 |
return list_subnets(request) |
53 | 53 |
elif request.method == 'POST': |
54 |
#return create_network(request) |
|
55 |
return HttpResponse("in subnet POST") |
|
54 |
return create_subnet(request) |
|
56 | 55 |
else: |
57 | 56 |
return api.api_method_not_allowed(request) |
58 | 57 |
|
... | ... | |
61 | 60 |
if request.method == 'GET': |
62 | 61 |
return get_subnet(request, offset) |
63 | 62 |
elif request.method == 'DELETE': |
64 |
return delete_network(request, offset)
|
|
63 |
return delete_subnet(request, offset)
|
|
65 | 64 |
elif request.method == 'PUT': |
66 |
#return update_network(request,offset) |
|
67 |
return HttpResponse("in subnet det put") |
|
65 |
return update_subnet(request, offset) |
|
68 | 66 |
else: |
69 | 67 |
return api.api_method_not_allowed(request) |
70 | 68 |
|
... | ... | |
85 | 83 |
@api.api_method(http_method='POST', user_required=True, logger=log) |
86 | 84 |
def create_subnet(request): |
87 | 85 |
'''Create a subnet''' |
86 |
|
|
87 |
dic = utils.get_request_dict(request) |
|
88 |
log.info('create subnet %s', dic) |
|
88 | 89 |
user_id = request.user_uniq |
89 | 90 |
|
90 | 91 |
try: |
91 |
dic = utils.get_request_dict(request) |
|
92 | 92 |
subnet = dic['subnet'] |
93 | 93 |
network_id = subnet['network_id'] |
94 | 94 |
cidr = subnet['cidr'] |
... | ... | |
97 | 97 |
|
98 | 98 |
ipversion = subnet.get('ip_version', 4) |
99 | 99 |
if ipversion not in [4, 6]: |
100 |
raise api.faults.BadRequests("Malformed IP version type")
|
|
100 |
raise api.faults.BadRequest("Malformed IP version type") |
|
101 | 101 |
|
102 | 102 |
dhcp = subnet.get('enable_dhcp', True) |
103 |
if dhcp not in [True, False]: |
|
104 |
raise api.faults.BadRequest("Malformed request, enable_dhcp must be" |
|
105 |
" True or False") |
|
103 | 106 |
name = subnet.get('name', None) |
107 |
if len(str(name)) > Subnet.SUBNET_NAME_LENGTH: |
|
108 |
raise api.faults.BadRequest("Subnet name too long") |
|
104 | 109 |
|
105 | 110 |
# FIX ME, SNF:gateway6 vs gateway6 |
106 | 111 |
gateway6 = subnet.get('SNF:gateway6', None) |
107 | 112 |
subnet6 = subnet.get('SNF:subnet6', None) |
108 | 113 |
|
109 |
# Returns the first available ip in the subnet
|
|
114 |
# Returns the first available IP in the subnet
|
|
110 | 115 |
potential_gateway = ipaddr.IPv4Network(cidr).network + 1 |
111 | 116 |
gateway = subnet.get('gateway_ip', potential_gateway) |
112 | 117 |
|
113 |
networks.validate_network_params(subnet, gateway, subnet6, gateway6)
|
|
118 |
networks.validate_network_params(cidr, gateway, subnet6, gateway6)
|
|
114 | 119 |
|
120 |
# FIX ME |
|
115 | 121 |
try: |
116 | 122 |
sub = Subnet.objects.create(name=name, network_id=network_id, |
117 | 123 |
cidr=cidr, ipversion=ipversion, |
118 | 124 |
gateway=gateway, gateway6=gateway6, |
119 | 125 |
subnet6=subnet6) |
120 |
# FIX ME |
|
121 | 126 |
except: |
122 | 127 |
print "Error" |
123 | 128 |
|
... | ... | |
140 | 145 |
@api.api_method(http_method='DELETE', user_required=True, logger=log) |
141 | 146 |
def delete_subnet(request, offset): |
142 | 147 |
'''Delete a subnet''' |
143 |
try: |
|
144 |
subnet = Subnet.objects.get(subnet_id=offset) |
|
145 |
except Subnet.DoesNotExist: |
|
146 |
raise api.faults.ItemNotFound("Subnet not found") |
|
148 |
# Commented until we have a design document |
|
149 |
#log.info('delete_subnet %s', offset) |
|
150 |
#try: |
|
151 |
# subnet = Subnet.objects.get(subnet_id=offset) |
|
152 |
#except Subnet.DoesNotExist: |
|
153 |
# raise api.faults.ItemNotFound("Subnet not found") |
|
147 | 154 |
# Add support for 409 error, subnet in use |
148 | 155 |
|
149 |
subnet.delete() |
|
150 |
return HttpResponse(status=204) |
|
156 |
#subnets.delete() |
|
157 |
#return HttpResponse(status=204) |
|
158 |
raise api.faults.BadRequest("Deletion of a subnet is not supported") |
|
151 | 159 |
|
152 | 160 |
|
153 | 161 |
def subnet_to_dict(subnet): |
Also available in: Unified diff