Răsfoiți Sursa

Only wait for operations when appropriate

Nuwan Goonasekera 7 ani în urmă
părinte
comite
7088857f9c

+ 128 - 128
cloudbridge/cloud/providers/gce/resources.py

@@ -767,13 +767,14 @@ class GCEMachineImage(BaseMachineImage):
             'labelFingerprint': self._gce_image.get('labelFingerprint'),
             'labelFingerprint': self._gce_image.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .images()
-                 .setLabels(project=self._provider.project_name,
-                            resource=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .images()
+                        .setLabels(project=self._provider.project_name,
+                                   resource=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting image label: %s. '
             cb.log.warning('Exception while setting image label: %s. '
                            'Check for invalid characters in label. '
                            'Check for invalid characters in label. '
@@ -889,14 +890,15 @@ class GCEInstance(BaseInstance):
             'labelFingerprint': self._gce_instance.get('labelFingerprint'),
             'labelFingerprint': self._gce_instance.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .instances()
-                 .setLabels(project=self._provider.project_name,
-                            zone=self.zone_name,
-                            instance=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .instances()
+                        .setLabels(project=self._provider.project_name,
+                                   zone=self.zone_name,
+                                   instance=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response, zone=self.zone_name)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting instance label: %s. '
             cb.log.warning('Exception while setting instance label: %s. '
                            'Check for invalid characters in label. '
                            'Check for invalid characters in label. '
@@ -971,52 +973,48 @@ class GCEInstance(BaseInstance):
         """
         """
         Reboot this instance.
         Reboot this instance.
         """
         """
-        response = None
         if self.state == InstanceState.STOPPED:
         if self.state == InstanceState.STOPPED:
-            response = (self._provider
-                            .gce_compute
-                            .instances()
-                            .start(project=self._provider.project_name,
-                                   zone=self.zone_name,
-                                   instance=self.name)
-                            .execute())
+            (self._provider
+             .gce_compute
+             .instances()
+             .start(project=self._provider.project_name,
+                    zone=self.zone_name,
+                    instance=self.name)
+             .execute())
         else:
         else:
-            response = (self._provider
-                            .gce_compute
-                            .instances()
-                            .reset(project=self._provider.project_name,
-                                   zone=self.zone_name,
-                                   instance=self.name)
-                            .execute())
-        self._provider.wait_for_operation(response, zone=self.zone_name)
+            (self._provider
+             .gce_compute
+             .instances()
+             .reset(project=self._provider.project_name,
+                    zone=self.zone_name,
+                    instance=self.name)
+             .execute())
 
 
     def delete(self):
     def delete(self):
         """
         """
         Permanently terminate this instance.
         Permanently terminate this instance.
         """
         """
         name = self.name
         name = self.name
-        response = (self._provider
-                        .gce_compute
-                        .instances()
-                        .delete(project=self._provider.project_name,
-                                zone=self.zone_name,
-                                instance=name)
-                        .execute())
-        self._provider.wait_for_operation(response, zone=self.zone_name)
+        (self._provider
+         .gce_compute
+         .instances()
+         .delete(project=self._provider.project_name,
+                 zone=self.zone_name,
+                 instance=name)
+         .execute())
         self._gce_instance = {'name': name, 'status': 'UNKNOWN'}
         self._gce_instance = {'name': name, 'status': 'UNKNOWN'}
 
 
     def stop(self):
     def stop(self):
         """
         """
         Stop this instance.
         Stop this instance.
         """
         """
-        response = (self._provider
-                        .gce_compute
-                        .instances()
-                        .stop(project=self._provider.project_name,
-                              zone=self.zone_name,
-                              instance=self.name)
-                        .execute())
-        self._provider.wait_for_operation(response, zone=self.zone_name)
+        (self._provider
+         .gce_compute
+         .instances()
+         .stop(project=self._provider.project_name,
+               zone=self.zone_name,
+               instance=self.name)
+         .execute())
 
 
     @property
     @property
     def image_id(self):
     def image_id(self):
@@ -1108,14 +1106,16 @@ class GCEInstance(BaseInstance):
                 "fingerprint": self._gce_instance['metadata']['fingerprint']
                 "fingerprint": self._gce_instance['metadata']['fingerprint']
             }
             }
             try:
             try:
-                (self._provider
-                    .gce_compute
-                    .instances()
-                    .setMetadata(project=self._provider.project_name,
-                                 zone=self.zone_name,
-                                 instance=self.name,
-                                 body=config)
-                    .execute())
+                response = (self._provider
+                            .gce_compute
+                            .instances()
+                            .setMetadata(project=self._provider.project_name,
+                                         zone=self.zone_name,
+                                         instance=self.name,
+                                         body=config)
+                            .execute())
+                self._provider.wait_for_operation(response,
+                                                  zone=self.zone_name)
             except Exception as e:
             except Exception as e:
                 cb.log.warning('Exception while setting instance key pair: %s',
                 cb.log.warning('Exception while setting instance key pair: %s',
                                e)
                                e)
@@ -1162,7 +1162,7 @@ class GCEInstance(BaseInstance):
 
 
     def _get_existing_target_instance(self):
     def _get_existing_target_instance(self):
         """
         """
-        Return the target instance corrsponding to this instance.
+        Return the target instance corresponding to this instance.
 
 
         If there is no target instance for this instance, return None.
         If there is no target instance for this instance, return None.
         """
         """
@@ -1558,16 +1558,13 @@ class GCEFloatingIPContainer(BaseFloatingIPContainer):
     def create(self):
     def create(self):
         region_name = self._provider.region_name
         region_name = self._provider.region_name
         ip_name = 'ip-{0}'.format(uuid.uuid4())
         ip_name = 'ip-{0}'.format(uuid.uuid4())
-        response = (self._provider
-                        .gce_compute
-                        .addresses()
-                        .insert(project=self._provider.project_name,
-                                region=region_name,
-                                body={'name': ip_name})
-                        .execute())
-        if 'error' in response:
-            return None
-        self._provider.wait_for_operation(response, region=region_name)
+        (self._provider
+         .gce_compute
+         .addresses()
+         .insert(project=self._provider.project_name,
+                 region=region_name,
+                 body={'name': ip_name})
+         .execute())
         return self.get(ip_name)
         return self.get(ip_name)
 
 
 
 
@@ -1691,14 +1688,16 @@ class GCERouter(BaseRouter):
             'description': value.replace(' ', '_').lower()
             'description': value.replace(' ', '_').lower()
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .routers()
-                 .patch(project=self._provider.project_name,
-                        region=self.region_name,
-                        router=self.name,
-                        body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .routers()
+                        .patch(project=self._provider.project_name,
+                               region=self.region_name,
+                               router=self.name,
+                               body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response,
+                                              region=self.region_name)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting router label: %s. '
             cb.log.warning('Exception while setting router label: %s. '
                            'Check for invalid characters in label. '
                            'Check for invalid characters in label. '
@@ -1741,14 +1740,13 @@ class GCERouter(BaseRouter):
         return network.subnets
         return network.subnets
 
 
     def delete(self):
     def delete(self):
-        response = (self._provider
-                        .gce_compute
-                        .routers()
-                        .delete(project=self._provider.project_name,
-                                region=self.region_name,
-                                router=self.name)
-                        .execute())
-        self._provider.wait_for_operation(response, region=self.region_name)
+        (self._provider
+         .gce_compute
+         .routers()
+         .delete(project=self._provider.project_name,
+                 region=self.region_name,
+                 router=self.name)
+         .execute())
 
 
     def attach_subnet(self, subnet):
     def attach_subnet(self, subnet):
         if not isinstance(subnet, GCESubnet):
         if not isinstance(subnet, GCESubnet):
@@ -1942,14 +1940,15 @@ class GCEVolume(BaseVolume):
             'labelFingerprint': self._volume.get('labelFingerprint'),
             'labelFingerprint': self._volume.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .disks()
-                 .setLabels(project=self._provider.project_name,
-                            zone=self.zone_id,
-                            resource=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .disks()
+                        .setLabels(project=self._provider.project_name,
+                                   zone=self.zone_name,
+                                   resource=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response, zone=self.zone_name)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting volume name: %s. '
             cb.log.warning('Exception while setting volume name: %s. '
                            'Check for invalid characters in name. '
                            'Check for invalid characters in name. '
@@ -1975,14 +1974,16 @@ class GCEVolume(BaseVolume):
             'labelFingerprint': self._volume.get('labelFingerprint'),
             'labelFingerprint': self._volume.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .disks()
-                 .setLabels(project=self._provider.project_name,
-                            zone=self.zone_name,
-                            resource=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .disks()
+                        .setLabels(project=self._provider.project_name,
+                                   zone=self.zone_name,
+                                   resource=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response,
+                                              zone=self.zone_name)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting volume description: %s. '
             cb.log.warning('Exception while setting volume description: %s. '
                            'Check for invalid characters in description. '
                            'Check for invalid characters in description. '
@@ -2100,15 +2101,13 @@ class GCEVolume(BaseVolume):
         """
         """
         Delete this volume.
         Delete this volume.
         """
         """
-        response = (self._provider
-                    .gce_compute
-                    .disks()
-                    .delete(project=self._provider.project_name,
-                            zone=self.zone_name,
-                            disk=self.name)
-                    .execute())
-        self._provider.wait_for_operation(
-            response, zone=self.zone_name)
+        (self._provider
+         .gce_compute
+         .disks()
+         .delete(project=self._provider.project_name,
+                 zone=self.zone_name,
+                 disk=self.name)
+         .execute())
 
 
     @property
     @property
     def state(self):
     def state(self):
@@ -2171,13 +2170,14 @@ class GCESnapshot(BaseSnapshot):
             'labelFingerprint': self._snapshot.get('labelFingerprint'),
             'labelFingerprint': self._snapshot.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .snapshots()
-                 .setLabels(project=self._provider.project_name,
-                            resource=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .snapshots()
+                        .setLabels(project=self._provider.project_name,
+                                   resource=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting snapshot label: %s. '
             cb.log.warning('Exception while setting snapshot label: %s. '
                            'Check for invalid characters in label. '
                            'Check for invalid characters in label. '
@@ -2203,13 +2203,14 @@ class GCESnapshot(BaseSnapshot):
             'labelFingerprint': self._snapshot.get('labelFingerprint'),
             'labelFingerprint': self._snapshot.get('labelFingerprint'),
         }
         }
         try:
         try:
-            (self._provider
-                 .gce_compute
-                 .snapshots()
-                 .setLabels(project=self._provider.project_name,
-                            resource=self.name,
-                            body=request_body)
-                 .execute())
+            response = (self._provider
+                        .gce_compute
+                        .snapshots()
+                        .setLabels(project=self._provider.project_name,
+                                   resource=self.name,
+                                   body=request_body)
+                        .execute())
+            self._provider.wait_for_operation(response)
         except Exception as e:
         except Exception as e:
             cb.log.warning('Exception while setting volume description: %s. '
             cb.log.warning('Exception while setting volume description: %s. '
                            'Check for invalid characters in description. '
                            'Check for invalid characters in description. '
@@ -2251,13 +2252,12 @@ class GCESnapshot(BaseSnapshot):
         """
         """
         Delete this snapshot.
         Delete this snapshot.
         """
         """
-        response = (self._provider
-                    .gce_compute
-                    .snapshots()
-                    .delete(project=self._provider.project_name,
-                            snapshot=self.name)
-                    .execute())
-        self._provider.wait_for_operation(response)
+        (self._provider
+         .gce_compute
+         .snapshots()
+         .delete(project=self._provider.project_name,
+                 snapshot=self.name)
+         .execute())
 
 
     def create_volume(self, placement, size=None, volume_type=None, iops=None):
     def create_volume(self, placement, size=None, volume_type=None, iops=None):
         """
         """

+ 14 - 17
cloudbridge/cloud/providers/gce/services.py

@@ -728,14 +728,13 @@ class GCERouterService(BaseRouterService):
     def delete(self, router):
     def delete(self, router):
         region_name = self.provider.region_name
         region_name = self.provider.region_name
         name = router.name if isinstance(router, GCERouter) else router
         name = router.name if isinstance(router, GCERouter) else router
-        response = (self.provider
-                        .gce_compute
-                        .routers()
-                        .delete(project=self.provider.project_name,
-                                region=region_name,
-                                router=name)
-                        .execute())
-        self._provider.wait_for_operation(response, region=region_name)
+        (self.provider
+         .gce_compute
+         .routers()
+         .delete(project=self.provider.project_name,
+                 region=region_name,
+                 router=name)
+         .execute())
 
 
     def _get_in_region(self, router_id, region=None):
     def _get_in_region(self, router_id, region=None):
         region_name = self.provider.region_name
         region_name = self.provider.region_name
@@ -846,15 +845,13 @@ class GCESubnetService(BaseSubnetService):
         return None
         return None
 
 
     def delete(self, subnet):
     def delete(self, subnet):
-        response = (self.provider
-                        .gce_compute
-                        .subnetworks()
-                        .delete(project=self.provider.project_name,
-                                region=subnet.region_name,
-                                subnetwork=subnet.name)
-                        .execute())
-        self._provider.wait_for_operation(
-            response, region=subnet.region_name)
+        (self.provider
+         .gce_compute
+         .subnetworks()
+         .delete(project=self.provider.project_name,
+                 region=subnet.region_name,
+                 subnetwork=subnet.name)
+         .execute())
 
 
     def _zone_to_region_name(self, zone):
     def _zone_to_region_name(self, zone):
         if zone:
         if zone: