Last active
June 8, 2016 16:54
-
-
Save viperscape/7042a8d7918a16970ab9 to your computer and use it in GitHub Desktop.
ec2 snapshot script, max snaps sets revolving snapshots to expire when rerun; expects volume to have tag: snapshot, some-unique-name
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import boto.ec2 | |
import sys | |
def get_snaps (desc, vol,conn): | |
snapshots = conn.get_all_snapshots(owner='id...', | |
filters={'description':'*'+desc+'*'}) | |
return snapshots | |
def op_snaps (vols,max_snaps,conn): | |
for v in iter(vols): | |
print ("\n",v, ":", vols[v]) | |
snapshots = get_snaps(v,vols[v],conn) | |
## they come sorted, but sort anyway | |
snapshots = sorted(snapshots,key=lambda snap:snap.start_time) | |
done_snaps = list(filter(lambda snap:snap.status == 'completed',snapshots)) | |
## create new snaps, only if there are none in progress! | |
if len(snapshots) <= len(done_snaps): | |
snap = conn.create_snapshot(vols[v], v) | |
print ("creating:",v,snap) | |
## delete snaps, if completed snaps is more than max | |
if len(done_snaps) >= max_snaps: | |
print("removing snaps:",len(snapshots) - (max_snaps-1)) | |
for n in range(len(snapshots) - (max_snaps-1)): | |
print ("deleting:",v,snapshots[n].id) | |
conn.delete_snapshot(snapshots[n].id) | |
def start_snaps (tag): | |
snap_tag = str(tag) | |
max_snaps = 2 | |
conn = boto.ec2.connect_to_region("us-east-1", | |
aws_access_key_id='id...', | |
aws_secret_access_key='key...') | |
all_vols = conn.get_all_volumes(filters={"tag:snapshot":snap_tag+"*"}) | |
if len(all_vols) < 1: | |
print ("no volumes found with snapshot tag",snap_tag) | |
return | |
vols = dict() | |
for n in all_vols: | |
vols[n.tags['snapshot']] = n.id | |
op_snaps(vols,max_snaps,conn) | |
def main (argv): | |
if len(sys.argv) < 2: | |
print("snapshot tag required!") | |
return | |
start_snaps(sys.argv[1]) | |
if __name__ == "__main__": | |
main(sys.argv) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
python ss.py dev | |
dev iis : vol-d... | |
removing snaps: 1 | |
deleting: dev iis Snapshot:snap-2... | |
creating: dev iis Snapshot:snap-5... | |
dev root : vol-6... | |
removing snaps: 1 | |
deleting: dev root Snapshot:snap-3... | |
creating: dev root Snapshot:snap-d... | |
dev sql : vol-1... | |
removing snaps: 1 | |
deleting: dev sql Snapshot:snap-9... | |
creating: dev sql Snapshot:snap-4... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment