in ebcli/labs/cleanupversions.py [0:0]
def do_command(self):
app_name = self.get_app_name()
num_to_leave = self.app.pargs.num_to_leave
older_than = self.app.pargs.older_than
force = self.app.pargs.force
envs = elasticbeanstalk.get_app_environments(app_name)
versions_in_use = [e.version_label for e in envs]
app_versions = elasticbeanstalk.get_application_versions(app_name)['ApplicationVersions']
app_versions.sort(key=itemgetter('DateUpdated'), reverse=True)
app_versions = [v for v in app_versions if v['VersionLabel'] not in versions_in_use]
total_num_unused_versions = len(app_versions)
if total_num_unused_versions < num_to_leave:
io.echo(
'Not enough unused application version to leave behind {0}; '
'No application versions to delete.'.format(num_to_leave)
)
return
app_versions = [v for v in app_versions if
utils.get_delta_from_now_and_datetime(
v['DateUpdated']).days > older_than]
app_versions = app_versions[num_to_leave:]
if app_versions:
if not force:
response = io.get_boolean_response(
'{} application versions will be deleted. '
'Continue?'.format(len(app_versions))
)
if not response:
return
else:
io.echo('No application versions to delete.')
return
for version in app_versions:
label = version['VersionLabel']
try:
elasticbeanstalk.delete_application_version(app_name, label)
except ServiceError as e:
io.log_warning('Error deleting version {0}. Error: {1}'
.format(label, e.message))