Beispiel #1
0
 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=[])
Beispiel #2
0
    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=[])
Beispiel #3
0
    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"])
Beispiel #4
0
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,
        )
Beispiel #5
0
 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"]),
         []
     )
Beispiel #6
0
 def test_keep_tags_by_age_keep(self):
     self.assertEqual(
         get_newer_tags(self.registry, "imagename", 24, ["latest"]),
         ["latest"]
     )