def test_find_digests_to_delete_by_age_no_keep_with_non_utc_value(self, get_keep_digests_patched, get_delete_digests_patched): get_keep_digests_patched.return_value = [] self.registry.get_image_age.return_value = "2017-12-27T12:47:33.511765448+02:00" all_tags_list = self.registry.list_tags("imagename") tags_to_keep = get_newer_tags(self.registry, "imagename", 24, all_tags_list) find_digests_to_delete(registry=self.registry, image_name="imagename", tags_to_delete=all_tags_list, tags_to_keep=tags_to_keep) self.list_tags_mock.assert_called_with("imagename") self.get_tag_config_mock.assert_called_with("imagename", "image") get_keep_digests_patched.assert_called_with(image_name="imagename", tags_to_keep=[]) get_delete_digests_patched.assert_called_with(image_name="imagename", tags_to_delete=['image'], digests_to_keep=[])
def test_find_digests_to_delete_tags_by_age_no_keep(self, get_keep_digests_patched, get_delete_digests_patched): get_keep_digests_patched.return_value = [] all_tags_list = self.registry.list_tags("imagename") tags_to_keep = get_newer_tags(self.registry, "imagename", 24, all_tags_list) find_digests_to_delete(registry=self.registry, image_name="imagename", tags_to_delete=all_tags_list, tags_to_keep=tags_to_keep) self.list_tags_mock.assert_called_with("imagename") self.get_tag_config_mock.assert_called_with("imagename", "image") get_keep_digests_patched.assert_called_with(image_name="imagename", tags_to_keep=[]) get_delete_digests_patched.assert_called_with(image_name="imagename", tags_to_delete=['image'], digests_to_keep=[])
def test_find_digests_to_delete_by_age_keep_tags_by_age(self, get_keep_digests_patched, get_delete_digests_patched): get_keep_digests_patched.return_value = ["MOCK_DIGEST"] all_tags_list = self.registry.list_tags("imagename") self.registry.get_image_age.return_value = str(datetime.now(tz=tzutc())) tags_to_keep = get_newer_tags(self.registry, "imagename", 24, all_tags_list) find_digests_to_delete(registry=self.registry, image_name="imagename", tags_to_delete=all_tags_list, tags_to_keep=tags_to_keep) self.list_tags_mock.assert_called_with("imagename") self.get_tag_config_mock.assert_called_with("imagename", "image") get_keep_digests_patched.assert_called_with(image_name="imagename", tags_to_keep=['image']) get_delete_digests_patched.assert_called_with(image_name="imagename", tags_to_delete=['image'], digests_to_keep=["MOCK_DIGEST"])
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, )
def test_keep_tags_by_age_no_keep_non_utc_datetime(self): self.registry.get_image_age.return_value = "2017-12-27T12:47:33.511765448+02:00" self.assertEqual( get_newer_tags(self.registry, "imagename", 23, ["latest"]), [] )
def test_keep_tags_by_age_keep(self): self.assertEqual( get_newer_tags(self.registry, "imagename", 24, ["latest"]), ["latest"] )