|
|
@@ -11,6 +11,7 @@ from cloudbridge.cloud.base.resources import BaseLaunchConfig
|
|
|
from cloudbridge.cloud.base.resources import ClientPagedResultList
|
|
|
from cloudbridge.cloud.base.services import BaseBlockStoreService
|
|
|
from cloudbridge.cloud.base.services import BaseComputeService
|
|
|
+from cloudbridge.cloud.base.services import BaseFloatingIPService
|
|
|
from cloudbridge.cloud.base.services import BaseGatewayService
|
|
|
from cloudbridge.cloud.base.services import BaseImageService
|
|
|
from cloudbridge.cloud.base.services import BaseInstanceService
|
|
|
@@ -705,6 +706,7 @@ class OpenStackNetworkingService(BaseNetworkingService):
|
|
|
super(OpenStackNetworkingService, self).__init__(provider)
|
|
|
self._network_service = OpenStackNetworkService(self.provider)
|
|
|
self._subnet_service = OpenStackSubnetService(self.provider)
|
|
|
+ self._fip_service = OpenStackFloatingIPService(self.provider)
|
|
|
self._router_service = OpenStackRouterService(self.provider)
|
|
|
self._gateway_service = OpenStackGatewayService(self.provider)
|
|
|
|
|
|
@@ -716,6 +718,10 @@ class OpenStackNetworkingService(BaseNetworkingService):
|
|
|
def subnets(self):
|
|
|
return self._subnet_service
|
|
|
|
|
|
+ @property
|
|
|
+ def floating_ips(self):
|
|
|
+ return self._fip_service
|
|
|
+
|
|
|
@property
|
|
|
def routers(self):
|
|
|
return self._router_service
|
|
|
@@ -756,23 +762,6 @@ class OpenStackNetworkService(BaseNetworkService):
|
|
|
network = self.provider.neutron.create_network({'network': net_info})
|
|
|
return OpenStackNetwork(self.provider, network.get('network'))
|
|
|
|
|
|
- @property
|
|
|
- def floating_ips(self):
|
|
|
- # if network_id:
|
|
|
- # al = self.provider.neutron.list_floatingips(
|
|
|
- # floating_network_id=network_id)['floatingips']
|
|
|
- al = self.provider.neutron.list_floatingips()['floatingips']
|
|
|
- return [OpenStackFloatingIP(self.provider, a) for a in al]
|
|
|
-
|
|
|
- def create_floating_ip(self):
|
|
|
- # OpenStack requires a floating IP to be associated with a pool,
|
|
|
- # so just choose the first one available...
|
|
|
- ip_pool_name = self.provider.nova.floating_ip_pools.list()[0].name
|
|
|
- ip = self.provider.nova.floating_ips.create(ip_pool_name)
|
|
|
- # Nova returns a different object than Neutron so fetch the Neutron one
|
|
|
- ip = self.provider.neutron.list_floatingips(id=ip.id)['floatingips'][0]
|
|
|
- return OpenStackFloatingIP(self.provider, ip)
|
|
|
-
|
|
|
|
|
|
class OpenStackSubnetService(BaseSubnetService):
|
|
|
|
|
|
@@ -843,6 +832,32 @@ class OpenStackSubnetService(BaseSubnetService):
|
|
|
return False
|
|
|
|
|
|
|
|
|
+class OpenStackFloatingIPService(BaseFloatingIPService):
|
|
|
+
|
|
|
+ def __init__(self, provider):
|
|
|
+ super(OpenStackFloatingIPService, self).__init__(provider)
|
|
|
+
|
|
|
+ def get(self, fip_id):
|
|
|
+ floating_ip = (fip for fip in self if fip.id == fip_id)
|
|
|
+ return next(floating_ip, None)
|
|
|
+
|
|
|
+ def list(self, limit=None, marker=None):
|
|
|
+ fips = [OpenStackFloatingIP(self.provider, fip)
|
|
|
+ for fip in self.provider.neutron.list_floatingips()
|
|
|
+ .get('floatingips') if fip]
|
|
|
+ return ClientPagedResultList(self.provider, fips,
|
|
|
+ limit=limit, marker=marker)
|
|
|
+
|
|
|
+ def create(self):
|
|
|
+ # OpenStack requires a floating IP to be associated with a pool,
|
|
|
+ # so just choose the first one available...
|
|
|
+ ip_pool_name = self.provider.nova.floating_ip_pools.list()[0].name
|
|
|
+ ip = self.provider.nova.floating_ips.create(ip_pool_name)
|
|
|
+ # Nova returns a different object than Neutron so fetch the Neutron one
|
|
|
+ ip = self.provider.neutron.list_floatingips(id=ip.id)['floatingips'][0]
|
|
|
+ return OpenStackFloatingIP(self.provider, ip)
|
|
|
+
|
|
|
+
|
|
|
class OpenStackRouterService(BaseRouterService):
|
|
|
|
|
|
def __init__(self, provider):
|