Revision 4edfc376 snf-cyclades-app/synnefo/api/floating_ips.py
b/snf-cyclades-app/synnefo/api/floating_ips.py | ||
---|---|---|
143 | 143 |
userid = request.user_uniq |
144 | 144 |
|
145 | 145 |
# the network_pool is a mandatory field |
146 |
network_pool = api.utils.get_attribute(floating_ip_dict, |
|
147 |
"floating_network_id", |
|
148 |
required=True) |
|
149 |
address = api.utils.get_attribute(floating_ip_dict, "floating_ip_address", |
|
150 |
required=False) |
|
151 |
|
|
152 |
try: |
|
153 |
network_id = int(network_pool) |
|
154 |
except ValueError: |
|
155 |
raise faults.BadRequest("Invalid networkd ID.") |
|
156 |
network = util.get_network(network_id, userid, for_update=True, |
|
157 |
non_deleted=True) |
|
158 |
|
|
159 |
if not network.floating_ip_pool: |
|
160 |
# Check that it is a floating IP pool |
|
161 |
raise faults.ItemNotFound("Floating IP pool %s does not exist." % |
|
162 |
network_id) |
|
163 |
|
|
164 |
# Allocate the floating IP |
|
165 |
floating_ip = util.allocate_ip(network, userid, address=address, |
|
166 |
floating_ip=True) |
|
146 |
network_id = api.utils.get_attribute(floating_ip_dict, |
|
147 |
"floating_network_id", |
|
148 |
required=False) |
|
149 |
if network_id is None: |
|
150 |
floating_ip = util.allocate_public_ip(userid, floating_ip=True) |
|
151 |
else: |
|
152 |
try: |
|
153 |
network_id = int(network_id) |
|
154 |
except ValueError: |
|
155 |
raise faults.BadRequest("Invalid networkd ID.") |
|
156 |
|
|
157 |
network = util.get_network(network_id, userid, for_update=True, |
|
158 |
non_deleted=True) |
|
159 |
if not network.floating_ip_pool: |
|
160 |
# TODO: Maybe 409 ?? |
|
161 |
# Check that it is a floating IP pool |
|
162 |
raise faults.ItemNotFound("Floating IP pool %s does not exist." % |
|
163 |
network_id) |
|
164 |
|
|
165 |
address = api.utils.get_attribute(floating_ip_dict, |
|
166 |
"floating_ip_address", |
|
167 |
required=False) |
|
168 |
|
|
169 |
# Allocate the floating IP |
|
170 |
floating_ip = util.allocate_ip(network, userid, address=address, |
|
171 |
floating_ip=True) |
|
172 |
|
|
167 | 173 |
# Issue commission (quotas) |
168 | 174 |
quotas.issue_and_accept_commission(floating_ip) |
169 | 175 |
transaction.commit() |
Also available in: Unified diff