Ejemplo n.º 1
0
 def get_instance(self):
     """ This returns a boto Instance resource; if boto can't find the instance or if no entry for instance in database,
         it raises Server.DoesNotExist error and removes database entry if appropriate """
     self.log.debug("function get_instance for user %s" % self.user.name)
     server = Server.get_server(self.user.name)
     resource = yield retry(boto3.resource,
                            "ec2",
                            region_name=SERVER_PARAMS["REGION"])
     try:
         ret = yield retry(resource.Instance, server.server_id)
         self.log.debug("return for get_instance for user %s: %s" %
                        (self.user.name, ret))
         # boto3.Instance is lazily loaded. Force with .load()
         yield retry(ret.load)
         if ret.meta.data is None:
             Server.remove_server(server.server_id)
             raise Server.DoesNotExist()
         return ret
     except ClientError as e:
         self.log.error("get_instance client error: %s" % e)
         if "InvalidInstanceID.NotFound" not in str(e):
             self.log.error("Couldn't find instance for user '%s'" %
                            self.user.name)
             Server.remove_server(server.server_id)
             raise Server.DoesNotExist()
         raise e