Kaynağa Gözat

Move GCEFloatingIPService under GCEInternetGateway

Ehsan Chiniforooshan 8 yıl önce
ebeveyn
işleme
c28a8c7a0e

+ 6 - 0
.travis.yml

@@ -12,18 +12,24 @@ matrix:
       env: TOX_ENV=py27-aws
     - python: 2.7
       env: TOX_ENV=py27-azure
+    - python: 2.7
+      env: TOX_ENV=py27-gce
     - python: 2.7
       env: TOX_ENV=py27-openstack
     - python: 3.6
       env: TOX_ENV=py36-aws
     - python: 3.6
       env: TOX_ENV=py36-azure
+    - python: 3.6
+      env: TOX_ENV=py36-gce
     - python: 3.6
       env: TOX_ENV=py36-openstack
     - python: pypy-5.3.1
       env: TOX_ENV=pypy-aws
     - python: pypy-5.3.1
       env: TOX_ENV=pypy-azure
+    - python: pypy-5.3.1
+      env: TOX_ENV=pypy-gce
     - python: pypy-5.3.1
       env: TOX_ENV=pypy-openstack
 before_install:

+ 70 - 0
cloudbridge/cloud/providers/gce/resources.py

@@ -14,6 +14,7 @@ from cloudbridge.cloud.base.resources import BaseAttachmentInfo
 from cloudbridge.cloud.base.resources import BaseBucket
 from cloudbridge.cloud.base.resources import BaseBucketObject
 from cloudbridge.cloud.base.resources import BaseFloatingIP
+from cloudbridge.cloud.base.resources import BaseFloatingIPContainer
 from cloudbridge.cloud.base.resources import BaseInstance
 from cloudbridge.cloud.base.resources import BaseInternetGateway
 from cloudbridge.cloud.base.resources import BaseKeyPair
@@ -1255,6 +1256,67 @@ class GCENetwork(BaseNetwork):
         self._network = self._provider.parse_url(self_link).get_resource()
 
 
+class GCEFloatingIPContainer(BaseFloatingIPContainer):
+
+    def __init__(self, provider, gateway):
+        super(GCEFloatingIPContainer, self).__init__(provider, gateway)
+
+    def get(self, floating_ip_id):
+        try:
+            response = (self.provider
+                            .gce_compute
+                            .addresses()
+                            .get(project=self.provider.project_name,
+                                 region=self.provider.region_name)
+                            .execute())
+            return GCEFloatingIP(self.provider, response)
+        except googleapiclient.errors.HttpError as http_error:
+            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
+            return None
+
+    def list(self, limit=None, marker=None):
+        max_result = limit if limit is not None and limit < 500 else 500
+        try:
+            response = (self.provider
+                            .gce_compute
+                            .addresses()
+                            .list(project=self.provider.project_name,
+                                  region=self.provider.region_name,
+                                  maxResults=max_result,
+                                  pageToken=marker)
+                            .execute())
+            ips = [GCEFloatingIP(self.provider, ip)
+                   for ip in response.get('items', [])]
+            if len(ips) > max_result:
+                cb.log.warning('Expected at most %d results; got %d',
+                               max_result, len(ips))
+            return ServerPagedResultList('nextPageToken' in response,
+                                         response.get('nextPageToken'),
+                                         False, data=ips)
+        except googleapiclient.errors.HttpError as http_error:
+            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
+            return None
+
+    def create(self):
+        region = self.provider.region_name
+        ip_name = 'ip-{0}'.format(uuid.uuid4())
+        try:
+            response = (self.provider
+                            .gce_compute
+                            .addresses()
+                            .insert(project=self.provider.project_name,
+                                    region=region,
+                                    body={'name': ip_name})
+                            .execute())
+            if 'error' in response:
+                return None
+            self.provider.wait_for_operation(response, region=region)
+            return self.get(ip_name)
+        except googleapiclient.errors.HttpError as http_error:
+            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
+            return None
+
+
 class GCEFloatingIP(BaseFloatingIP):
     _DEAD_INSTANCE = 'dead instance'
 
@@ -1338,6 +1400,9 @@ class GCEFloatingIP(BaseFloatingIP):
                         .execute())
         self._provider.wait_for_operation(response, region=self._region)
 
+    def refresh(self):
+        pass
+
 
 class GCERouter(BaseRouter):
 
@@ -1399,6 +1464,7 @@ class GCEInternetGateway(BaseInternetGateway):
     def __init__(self, provider, gateway):
         super(GCEInternetGateway, self).__init__(provider)
         self._gateway = gateway
+        self._fip_container = GCEFloatingIPContainer(provider, self)
 
     @property
     def id(self):
@@ -1429,6 +1495,10 @@ class GCEInternetGateway(BaseInternetGateway):
     def delete(self):
         pass
 
+    @property
+    def floating_ips(self):
+        return self._fips_container
+
 
 class GCESubnet(BaseSubnet):
 

+ 0 - 68
cloudbridge/cloud/providers/gce/services.py

@@ -8,7 +8,6 @@ from cloudbridge.cloud.base.resources import ClientPagedResultList
 from cloudbridge.cloud.base.resources import ServerPagedResultList
 from cloudbridge.cloud.base.services import BaseBucketService
 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
@@ -33,7 +32,6 @@ import googleapiclient
 from retrying import retry
 
 from .resources import GCEFirewallsDelegate
-from .resources import GCEFloatingIP
 from .resources import GCEInstance
 from .resources import GCEInternetGateway
 from .resources import GCEKeyPair
@@ -567,7 +565,6 @@ class GCENetworkingService(BaseNetworkingService):
         super(GCENetworkingService, self).__init__(provider)
         self._network_service = GCENetworkService(self.provider)
         self._subnet_service = GCESubnetService(self.provider)
-        self._floating_ip_service = GCEFloatingIPService(self.provider)
         self._router_service = GCERouterService(self.provider)
         self._gateway_service = GCEGatewayService(self.provider)
 
@@ -579,10 +576,6 @@ class GCENetworkingService(BaseNetworkingService):
     def subnets(self):
         return self._subnet_service
 
-    @property
-    def floating_ips(self):
-        return self._floating_ip_service
-
     @property
     def routers(self):
         return self._router_service
@@ -683,67 +676,6 @@ class GCENetworkService(BaseNetworkService):
         return self._create(GCEFirewallsDelegate.DEFAULT_NETWORK, None, True)
 
 
-class GCEFloatingIPService(BaseFloatingIPService):
-
-    def __init__(self, provider):
-        super(GCEFloatingIPService, self).__init__(provider)
-
-    def get(self, floating_ip_id):
-        try:
-            response = (self.provider
-                            .gce_compute
-                            .addresses()
-                            .get(project=self.provider.project_name,
-                                 region=self.provider.region_name)
-                            .execute())
-            return GCEFloatingIP(self.provider, response)
-        except googleapiclient.errors.HttpError as http_error:
-            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
-            return None
-
-    def list(self, limit=None, marker=None):
-        max_result = limit if limit is not None and limit < 500 else 500
-        try:
-            response = (self.provider
-                            .gce_compute
-                            .addresses()
-                            .list(project=self.provider.project_name,
-                                  region=self.provider.region_name,
-                                  maxResults=max_result,
-                                  pageToken=marker)
-                            .execute())
-            ips = [GCEFloatingIP(self.provider, ip)
-                   for ip in response.get('items', [])]
-            if len(ips) > max_result:
-                cb.log.warning('Expected at most %d results; got %d',
-                               max_result, len(ips))
-            return ServerPagedResultList('nextPageToken' in response,
-                                         response.get('nextPageToken'),
-                                         False, data=ips)
-        except googleapiclient.errors.HttpError as http_error:
-            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
-            return None
-
-    def create(self):
-        region = self.provider.region_name
-        ip_name = 'ip-{0}'.format(uuid.uuid4())
-        try:
-            response = (self.provider
-                            .gce_compute
-                            .addresses()
-                            .insert(project=self.provider.project_name,
-                                    region=region,
-                                    body={'name': ip_name})
-                            .execute())
-            if 'error' in response:
-                return None
-            self.provider.wait_for_operation(response, region=region)
-            return self.get(ip_name)
-        except googleapiclient.errors.HttpError as http_error:
-            cb.log.warning('googleapiclient.errors.HttpError: %s', http_error)
-            return None
-
-
 class GCERouterService(BaseRouterService):
 
     def __init__(self, provider):