def test_delete_tags_no_keep(self): delete_tags(self.registry, "imagename", False, ["tag_to_delete"], []) self.delete_mock.assert_called_with( "imagename", "tag_to_delete", False, [] )
def test_delete_tags_digest_none(self): digest_mock = MagicMock(return_value=None) self.registry.get_tag_digest = digest_mock delete_tags(self.registry, "imagename", False, ["tag1", "tag2"], ["tag2"]) digest_mock.assert_called_with("imagename", "tag2") self.delete_mock.assert_called_with("imagename", "tag1", False, [])
def test_delete_tags_keep(self): digest_mock = MagicMock(return_value="DIGEST_MOCK") self.registry.get_tag_digest = digest_mock delete_tags(self.registry, "imagename", False, ["tag1", "tag2"], ["tag2"]) digest_mock.assert_called_with("imagename", "tag2") self.delete_mock.assert_called_with("imagename", "tag1", False, ['DIGEST_MOCK'])
def apply_delete(image_name, config, global_dry_run, registry): print("---------------------------------") print("Image: {0}".format(image_name)) all_tags_list = registry.list_tags(image_name) if not all_tags_list: print(" no tags!") return keep_last_versions = config.get('num', CONST_KEEP_LAST_VERSIONS) tags_list = get_tags(all_tags_list, image_name, config.get('tags-like', [])) # add tags to "tags_to_keep" list, if we have regexp "tags_to_keep" # entries or a number of hours for "keep_by_hours": keep_tags = [] if config.get('keep-tags-like', []): keep_tags.extend(get_tags_like(config['keep-tags-like'], tags_list)) if config.get('keep-by-hours', False): keep_tags.extend(get_newer_tags(registry, image_name, config['keep-by-hours'], tags_list)) keep_tags = list(set(keep_tags)) # Eliminate duplicates tags_list_to_delete = ( sorted(tags_list, key=natural_keys)[:-keep_last_versions]) # A manifest might be shared between different tags. Explicitly add those # tags that we want to preserve to the keep_tags list, to prevent # any manifest they are using from being deleted. tags_list_to_keep = ( [tag for tag in tags_list if tag not in tags_list_to_delete]) keep_tags.extend(tags_list_to_keep) delete_tags( registry, image_name, global_dry_run or config.get('dry-run', False), tags_list_to_delete, keep_tags, ) # delete tags by age in hours if config.get('delete-by-hours', False): keep_tags.extend(config.get('keep-tags', [])) delete_tags_by_age( registry, image_name, global_dry_run or config.get('dry-run', False), config['delete-by-hours'], keep_tags, )