Просмотр исходного кода

Fix more bad references to floating_ips

Also, Changed FloatingIP.region to FloatingIP.region_name for clarity.
Ehsan Chiniforooshan 8 лет назад
Родитель
Сommit
41053dbd0a
1 измененных файлов с 32 добавлено и 22 удалено
  1. 32 22
      cloudbridge/cloud/providers/gce/resources.py

+ 32 - 22
cloudbridge/cloud/providers/gce/resources.py

@@ -729,6 +729,7 @@ class GCEInstance(BaseInstance):
     def __init__(self, provider, gce_instance):
         super(GCEInstance, self).__init__(provider)
         self._gce_instance = gce_instance
+        self._inet_gateway = None
 
     @property
     def resource_url(self):
@@ -781,11 +782,7 @@ class GCEInstance(BaseInstance):
                 access_config = access_configs[0]
                 if 'natIP' in access_config:
                     ips.append(access_config['natIP'])
-        network_url = self._gce_instance.get('networkInterfaces')[0].get(
-            'network')
-        network = self._provider.networking.networks.get(network_url)
-        inet_gateway = network.gateways.get_or_create_inet_gateway()
-        for ip in inet_gateway.floating_ips:
+        for ip in self.inet_gateway.floating_ips:
             if ip.in_use():
                 if ip.private_ip in self.private_ips:
                     ips.append(ip.public_ip)
@@ -931,6 +928,16 @@ class GCEInstance(BaseInstance):
         """
         return self._provider.security.key_pairs.name
 
+    @property
+    def inet_gateway(self):
+        if self._inet_gateway:
+            return self._inet_gateway
+        network_url = self._gce_instance.get('networkInterfaces')[0].get(
+            'network')
+        network = self._provider.networking.networks.get(network_url)
+        self._inet_gateway = network.gateways.get_or_create_inet_gateway()
+        return self._inet_gateway
+
     def create_image(self, name):
         """
         Create a new image based on this instance.
@@ -1018,7 +1025,7 @@ class GCEInstance(BaseInstance):
             for rule in helpers.iter_all(
                     self._provider.gce_compute.forwardingRules(),
                     project=self._provider.project_name,
-                    region=ip.region):
+                    region=ip.region_name):
                 if rule['IPAddress'] != ip.public_ip:
                     continue
                 parsed_target_url = self._provider.parse_url(rule['target'])
@@ -1031,11 +1038,12 @@ class GCEInstance(BaseInstance):
                                 .forwardingRules()
                                 .setTarget(
                                     project=self._provider.project_name,
-                                    region=ip.region,
+                                    region=ip.region_name,
                                     forwardingRule=rule['name'],
                                     body={'target': new_url})
                                 .execute())
-                self._provider.wait_for_operation(response, region=ip.region)
+                self._provider.wait_for_operation(response,
+                                                  region=ip.region_name)
                 return True
         except Exception as e:
             cb.log.warning(
@@ -1059,10 +1067,10 @@ class GCEInstance(BaseInstance):
                             .gce_compute
                             .forwardingRules()
                             .insert(project=self._provider.project_name,
-                                    region=ip.region,
+                                    region=ip.region_name,
                                     body=body)
                             .execute())
-            self._provider.wait_for_operation(response, region=ip.region)
+            self._provider.wait_for_operation(response, region=ip.region_name)
         except Exception as e:
             cb.log.warning('Exception while inserting a forwarding rule: %s',
                            e)
@@ -1080,7 +1088,7 @@ class GCEInstance(BaseInstance):
             for rule in helpers.iter_all(
                     self._provider.gce_compute.forwardingRules(),
                     project=self._provider.project_name,
-                    region=ip.region):
+                    region=ip.region_name):
                 if rule['IPAddress'] != ip.public_ip:
                     continue
                 parsed_target_url = self._provider.parse_url(rule['target'])
@@ -1096,10 +1104,11 @@ class GCEInstance(BaseInstance):
                                 .forwardingRules()
                                 .delete(
                                     project=self._provider.project_name,
-                                    region=ip.region,
+                                    region=ip.region_name,
                                     forwardingRule=rule['name'])
                                 .execute())
-                self._provider.wait_for_operation(response, region=ip.region)
+                self._provider.wait_for_operation(response,
+                                                  region=ip.region_name)
                 return True
         except Exception as e:
             cb.log.warning(
@@ -1111,7 +1120,7 @@ class GCEInstance(BaseInstance):
         """
         Add an elastic IP address to this instance.
         """
-        for ip in self._provider.networking.floating_ips:
+        for ip in self.inet_gateway.floating_ips:
             if ip.public_ip == ip_address:
                 if ip.in_use():
                     if ip.private_ip not in self.private_ips:
@@ -1135,7 +1144,7 @@ class GCEInstance(BaseInstance):
         """
         Remove a elastic IP address from this instance.
         """
-        for ip in self._provider.networking.floating_ips:
+        for ip in self.inet_gateway.floating_ips:
             if ip.public_ip == ip_address:
                 if not ip.in_use() or ip.private_ip not in self.private_ips:
                     cb.log.warning(
@@ -1340,7 +1349,7 @@ class GCEFloatingIP(BaseFloatingIP):
         # global IPs can be forwarded only to load balancing resources, not to
         # a specific instance. Find out the region to which the IP belongs.
         url = provider.parse_url(self._ip['region'])
-        self._region = url.parameters['region']
+        self._region_name = url.parameters['region']
 
         # Check if the address is used by a resource.
         self._rule = None
@@ -1372,8 +1381,8 @@ class GCEFloatingIP(BaseFloatingIP):
         return self._ip['selfLink']
 
     @property
-    def region(self):
-        return self._region
+    def region_name(self):
+        return self._region_name
 
     @property
     def public_ip(self):
@@ -1397,20 +1406,21 @@ class GCEFloatingIP(BaseFloatingIP):
                             .gce_compute
                             .forwardingRules()
                             .delete(project=project_name,
-                                    region=self._region,
+                                    region=self._region_name,
                                     forwardingRule=self._rule['name'])
                             .execute())
-            self._provider.wait_for_operation(response, region=self._region)
+            self._provider.wait_for_operation(response,
+                                              region=self._region_name)
 
         # Release the address.
         response = (self._provider
                         .gce_compute
                         .addresses()
                         .delete(project=project_name,
-                                region=self._region,
+                                region=self._region_name,
                                 address=self._ip['name'])
                         .execute())
-        self._provider.wait_for_operation(response, region=self._region)
+        self._provider.wait_for_operation(response, region=self._region_name)
 
     def refresh(self):
         self._ip = self._provider.get_resource('addresses', self.id)