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)
Beispiel #3
0
    ])
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)
Beispiel #4
0
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)
Beispiel #5
0
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
Beispiel #6
0
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:
Beispiel #8
0
# 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)