Skip to content

Instantly share code, notes, and snippets.

@weldpua2008
Created August 15, 2018 04:54
Show Gist options
  • Save weldpua2008/0e67eba702549ee1e9c9982e888a6c59 to your computer and use it in GitHub Desktop.
Save weldpua2008/0e67eba702549ee1e9c9982e888a6c59 to your computer and use it in GitHub Desktop.
Retantion DigitalOcena snapshots by name
#!/usr/bin/env python
API_KEY = ''
import argparse
import sys
from dopy.manager import DoManager
if sys.version < '3':
integer_types = (int, long,)
else:
integer_types = (int,)
def remove_snapshot(do, do_id):
if isinstance(do_id, integer_types) or isinstance(do_id, float):
status = do.request('/snapshots/%s' % do_id, method='DELETE')
return status
else:
for sn in do.request('/snapshots')['snapshots']:
if sn['name'] == do_id:
status = do.request('/snapshots/%s' % sn['id'], method='DELETE')
return status
break
elif sn['name'].lower() == do_id.lower():
status = do.request('/snapshots/%s' % sn['id'], method='DELETE')
return status
break
elif str(sn['id']) == str(do_id):
status = do.request('/snapshots/%s' % sn['id'], method='DELETE')
return status
break
raise ValueError("Failed delete a snapshot")
def get_snapshot(do, snapshot_name):
list_snapshots = do.request('/snapshots')
snapshots = []
for sn in list_snapshots['snapshots']:
if 'name' in sn:
if sn['name'] == snapshot_name:
snapshots.append(sn)
elif sn['name'].lower() == snapshot_name.lower():
snapshots.append(sn)
# else:
# snapshots.append(sn)
return snapshots
if __name__ == '__main__':
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('-s', '--snapshotname', action="store", help="Snapshots Name", required=True)
parser.add_argument('-l', '--retantionlimit', action="store", help="Max number of snapshots to leave", default=14)
args = parser.parse_args()
MAX_SNAPSHOT_VOLUME = int(args.retantionlimit)
if MAX_SNAPSHOT_VOLUME < 0:
MAX_SNAPSHOT_VOLUME = 0
try:
do = DoManager(None, API_KEY, api_version=2)
sn_raw = get_snapshot(do, args.snapshotname)
sn_raw.sort(key=lambda item:item['created_at'], reverse=True)
print ("len(sn_raw) %s MAX_SNAPSHOT_VOLUME %s" % (len(sn_raw), MAX_SNAPSHOT_VOLUME))
if len(sn_raw) > int(MAX_SNAPSHOT_VOLUME):
print "Entered"
if MAX_SNAPSHOT_VOLUME > 0:
_leave = sn_raw[:MAX_SNAPSHOT_VOLUME]
for s in _leave:
print ("leave %s - %s - %s " % (s['name'], s['id'],s['created_at']))
del sn_raw[:MAX_SNAPSHOT_VOLUME]
print ("len(sn_raw) %s MAX_SNAPSHOT_VOLUME %s" % (len(sn_raw), MAX_SNAPSHOT_VOLUME))
sn_raw.sort(key=lambda item:item['created_at'], reverse=False)
for s in sn_raw:
# print ("%s - %s - %s " % (s['name'], s['id'],s['created_at']))
print ("removing %s - %s - %s " % (s['name'], s['id'],s['created_at']))
try:
print remove_snapshot(do, s['id'])
except (Exception) as e:
print("Error to Remove: %s" % e)
pass
# sys.exit(0)
except Exception as e:
print("Error: %s" % e)
sys.exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment