parents=[bc.build_region_parser(), bc.build_filter_parser("EBS snapshots"), bc.build_common_parser()], ) args = parser.parse_args() # process common command line arguments log = logging.getLogger("botocross") bc.configure_logging(log, args.log_level) credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) log.info(args.resource_ids) # execute business logic log.info("Describing EBS snapshots:") for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) snapshots = ec2.get_all_snapshots(snapshot_ids=args.resource_ids, owner="self", filters=filter["filters"]) if filter["excludes"]: exclusions = ec2.get_all_snapshots(owner="self", filters=filter["excludes"]) snapshots = bc.filter_list_by_attribute(snapshots, exclusions, "id") print region.name + ": " + str(len(snapshots)) + " snapshots" for snapshot in snapshots: if args.verbose: pprint(vars(snapshot)) else: print snapshot.id except boto.exception.BotoServerError, e: log.error(e.error_message)
bc.build_common_parser(), ], ) args = parser.parse_args() # process common command line arguments log = logging.getLogger("botocross") bc.configure_logging(log, args.log_level) credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) # execute business logic log.info("Expire EBS snapshots") for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) # NOTE: Not filtering by id allows expiring snapshots of deregistered volumes as well. volumes = ec2.get_all_volumes(filters=filter["filters"]) if filter["excludes"]: exclusions = ec2.get_all_volumes(filters=filter["excludes"]) volumes = bc.filter_list_by_attribute(volumes, exclusions, "id") volume_ids = [volume.id for volume in volumes] if args.resource_ids: volume_ids.extend(args.resource_ids) print region.name + ": " + str(len(volumes)) + " volumes / " + str(len(volume_ids)) + " volume IDs" expire_snapshots(ec2, volume_ids, args.backup_set, args.backup_retention, args.no_origin_safeguard) except boto.exception.BotoServerError, e: log.error(e.error_message)
]) args = parser.parse_args() # process common command line arguments log = logging.getLogger('botocross') bc.configure_logging(log, args.log_level) credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) # execute business logic log.info("Expire EBS snapshots") for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) # NOTE: Not filtering by id allows expiring snapshots of deregistered volumes as well. volumes = ec2.get_all_volumes(filters=filter['filters']) if filter['excludes']: exclusions = ec2.get_all_volumes(filters=filter['excludes']) volumes = bc.filter_list_by_attribute(volumes, exclusions, 'id') volume_ids = [volume.id for volume in volumes] if args.resource_ids: volume_ids.extend(args.resource_ids) print region.name + ": " + str(len(volumes)) + " volumes / " + str( len(volume_ids)) + " volume IDs" expire_snapshots(ec2, volume_ids, args.backup_set, args.backup_retention, args.no_origin_safeguard) except boto.exception.BotoServerError, e: log.error(e.error_message)
parser = argparse.ArgumentParser(description='Describe EC2 images in all/some available EC2 regions', parents=[bc.build_region_parser(), bc.build_filter_parser('EC2 image'), bc.build_common_parser()]) args = parser.parse_args() # process common command line arguments log = logging.getLogger('botocross') bc.configure_logging(log, args.log_level) credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) log.info(args.resource_ids) # execute business logic log.info("Describing EC2 images") for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) images = ec2.get_all_images(image_ids=args.resource_ids, owners=['self'], filters=filter['filters']) if filter['excludes']: exclusions = ec2.get_all_images(owners=['self'], filters=filter['excludes']) images = bc.filter_list_by_attribute(images, exclusions, 'id') print region.name + ": " + str(len(images)) + " images" for image in images: if args.verbose: pprint(vars(image)) else: print image.id except boto.exception.BotoServerError, e: log.error(e.error_message)
credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) # execute business logic log.info("Imaging EC2 instances:") # REVIEW: For backup purposes it seems reasonable to only consider all OK vs. FAIL?! exit_code = bc.ExitCodes.OK for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) reservations = ec2.get_all_instances(instance_ids=args.resource_ids, filters=filter["filters"]) if filter["excludes"]: exclusions = ec2.get_all_instances(filters=filter["excludes"]) reservations = bc.filter_list_by_attribute(reservations, exclusions, "id") instances = [instance for reservation in reservations for instance in reservation.instances] print region.name + ": " + str(len(instances)) + " instances" images = create_images(ec2, instances, args.backup_set, args.description, no_reboot=args.no_reboot) if args.backup_timeout: try: states = await_images(ec2, images, timeout=args.backup_timeout) if not bc.ec2.IMAGE_STATES_SUCCEEDED.issuperset(states): message = "FAILED to create some images: {0}!".format(format_states(states)) log.error(message) exit_code = bc.ExitCodes.FAIL except bc.BotocrossAwaitTimeoutError, e: log.error(e.message) exit_code = bc.ExitCodes.FAIL
regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) # execute business logic log.info("Imaging EC2 instances:") # REVIEW: For backup purposes it seems reasonable to only consider all OK vs. FAIL?! exit_code = bc.ExitCodes.OK for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) reservations = ec2.get_all_instances(instance_ids=args.resource_ids, filters=filter['filters']) if filter['excludes']: exclusions = ec2.get_all_instances(filters=filter['excludes']) reservations = bc.filter_list_by_attribute(reservations, exclusions, 'id') instances = [ instance for reservation in reservations for instance in reservation.instances ] print region.name + ": " + str(len(instances)) + " instances" images = create_images(ec2, instances, args.backup_set, args.description, no_reboot=args.no_reboot) if args.backup_timeout: try: states = await_images(ec2, images, timeout=args.backup_timeout)
filter = bc.build_filter(args.filter, args.exclude) # execute business logic log.info("Describing EC2 security groups:") if args.filter: for filter in args.filter: heading += "... (filtered by filter '" + filter + "')" for region in regions: pprint(region.name, indent=2) try: ec2 = boto.connect_ec2(region=region, **credentials) groups = ec2.get_all_security_groups(filters=filter['filters']) if filter['excludes']: exclusions = ec2.get_all_security_groups(filters=filter['excludes']) groups = bc.filter_list_by_attribute(groups, exclusions, 'id') for group in groups: if args.verbose: pprint(vars(group)) else: vpc_id = "|" + group.vpc_id if group.vpc_id else "" print("\n" + group.name + " (" + group.id + vpc_id + " - " + group.description + "):") if args.rules: print("... rules ...") for rule in group.rules: pprint(rule) if group.vpc_id: print("... rules (egress) ...") for rule in group.rules_egress: pprint(rule) if args.instances:
# process common command line arguments log = logging.getLogger('botocross') bc.configure_logging(log, args.log_level) credentials = bc.parse_credentials(args) regions = bc.filter_regions(boto.ec2.regions(), args.region) filter = bc.build_filter(args.filter, args.exclude) log.info(args.resource_ids) # execute business logic log.info("Deleting EBS snapshots:") for region in regions: try: ec2 = boto.connect_ec2(region=region, **credentials) snapshots = ec2.get_all_snapshots(snapshot_ids=args.resource_ids, owner='self', filters=filter['filters']) if filter['excludes']: exclusions = ec2.get_all_snapshots(owner='self', filters=filter['excludes']) snapshots = bc.filter_list_by_attribute(snapshots, exclusions, 'id') print region.name + ": " + str(len(snapshots)) + " EBS snapshots" for snapshot in snapshots: if args.verbose: print snapshot.id else: ec2.delete_snapshot(snapshot.id) except boto.exception.BotoServerError, e: log.error(e.error_message)