Exemplo n.º 1
0
 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,
         []
     )
Exemplo n.º 2
0
    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, [])
Exemplo n.º 3
0
    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'])
Exemplo n.º 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,
        )