def prepare(self): self.region_name = self.req.option("region") try: self.region = boto.vpc.connect_to_region(self.region_name) except Exception as e: Logger.error("VPC connection error: %s" % (e)) self.resp.send_error("VPC connection failed") self.handlers["default"] = self.handle_list
def connect(self): self.region_name = self.req.option("region") try: self.region = boto.ec2.connect_to_region(self.region_name) except Exception as e: Logger.error("Error connecting to EC2: %s" % (e)) self.resp.send_error("Cannot connect to EC2") if not self.region: Logger.error("Error: Unknown region: %s" % (self.region_name)) self.resp.send_error("Sorry. The region '%s' is unknown." % (self.region_name))
def handle_list(self): args = [".*"] if self.req.arg_count() > 0: args = self.req.args() try: patterns = [re.compile(arg) for arg in args] buckets = [{"bucket": bucket.name} for bucket in self.find_matching(patterns)] if len(buckets) == 0: self.resp.append_body([], template="empty_result") else: self.resp.append_body({"buckets": buckets}, template="list_buckets") except Exception as e: Logger.error("Regex compilation error: %s" % (e)) self.resp.send_error("Invalid regular expression: '%s'" % (self.req.arg(0)))
def handle_delete(self): if self.req.arg_count() < 2: self.usage_error() args = self.req.args() try: patterns = [re.compile(arg) for arg in args[1:]] buckets = self.find_matching(patterns) try: for bucket in buckets: bucket.delete() except Exception as e: bucketnames = [bucket.name for bucket in buckets] Logger.error("Error deleting S3 buckets (%s): %s" % (bucketnames, e)) self.resp.send_error("Error deleting buckets '%s': %s" % (bucketnames, e)) if len(buckets) == 0: self.resp.append_body([], template="empty_result") else: bucket_names = [bucket.name for bucket in buckets] self.resp.append_body({"buckets": bucket_names}, template="delete_buckets") except Exception as e: self.resp.send_error("One of the following regular expressions is invalid: %s, %s" % (args[1:], e))
def handle_list(self): ids = self.req.args() if len(ids) == 0: ids = None elif ids[0] == "list" or ids[0] == "ls": ids = ids[1:] vpcs = [] try: for vpc in self.region.get_all_vpcs(ids, filters={"state": "available"}): vpc_data = {"id": vpc.id, "state": vpc.state, "cidr_block": vpc.cidr_block, "region": self.region_name} if self.req.option("subnets"): subnets = region.get_all_subnets(filters={"vpcId": vpc.id}) vpc_data["subnets"] = build_subnet_list(subnets) vpcs.append(vpc_data) self.resp.append_body({"vpcs": vpc_data}, template="list_vpcs") except Exception as e: Logger.error("Error enumerating VPC data: %s" % (e)) self.resp.send_error("VPC service error: %s" % (e))
def connect(self): try: self.conn = S3Connection() except Exception as e: Logger.error("Failed connecting to S3: %s" % (e)) self.resp.send_error("S3 connection failed.")
def find_matching(self, patterns): try: return [bucket for bucket in self.conn.get_all_buckets() if self.name_matches(bucket.name, patterns)] except Exception as e: Logger.error("S3 error: %s" % (e)) self.resp.send_error("S3 error")