-# #TODO server.add_floating_ip("10.95.87.209")
-# #To look for a free floating_ip
-# free_floating_ip = None
-# for floating_ip in self.neutron.list_floatingips().get("floatingips", () ):
-# if not floating_ip["port_id"]:
-# free_floating_ip = floating_ip["floating_ip_address"]
-# break
-# if free_floating_ip:
-# server.add_floating_ip(free_floating_ip)
+ pool_id = None
+ floating_ips = self.neutron.list_floatingips().get("floatingips", ())
+ for floating_network in external_network:
+ assigned = False
+ while(assigned == False):
+ if floating_ips:
+ ip = floating_ips.pop(0)
+ if not ip.get("port_id", False):
+ free_floating_ip = ip.get("floating_ip_address")
+ try:
+ fix_ip = floating_network.get('ip')
+ server.add_floating_ip(free_floating_ip, fix_ip)
+ assigned = True
+ except Exception as e:
+ self.delete_vminstance(server.id)
+ raise vimconn.vimconnException(type(e).__name__ + ": Cannot create floating_ip "+ str(e), http_code=vimconn.HTTP_Conflict)
+ else:
+ pool_id = floating_network.get('net_id')
+ param = {'floatingip': {'floating_network_id': pool_id}}
+ try:
+ #self.logger.debug("Creating floating IP")
+ new_floating_ip = self.neutron.create_floatingip(param)
+ free_floating_ip = new_floating_ip['floatingip']['floating_ip_address']
+ fix_ip = floating_network.get('ip')
+ server.add_floating_ip(free_floating_ip, fix_ip)
+ assigned=True
+ except Exception as e:
+ self.delete_vminstance(server.id)
+ raise vimconn.vimconnException(type(e).__name__ + ": Cannot create floating_ip "+ str(e), http_code=vimconn.HTTP_Conflict)