def delete_image_v2(registry: str,
                    remote_image_name: str,
                    tag: str = "latest") -> Union[Set[str],
                                                  DockerscanError]:
    """
    delete selected images from remote repo.

        remote_image_name can contain regex expressions.

    :return: return a set() with the images deleted
    """
    insecure, registry_without_schema = _get_schema_and_security(registry)

    d = DXF(registry_without_schema,
            remote_image_name,
            insecure=insecure)

    removed = set()

    # Getting remote digest for the tag
    digest = _get_digest_by_tag(registry, remote_image_name, tag)

    if not digest:
        raise DockerscanError("> Can't obtain digest reference for selected "
                              "image / tag")

    try:
        if digest:
            # If digest found -> remote image is not a regex. Then remove it

            d.del_alias(digest)

            removed.add(remote_image_name)

        return removed

    except requests.exceptions.HTTPError:
        raise DockerscanError("> Registry does not support delete "
                              "operations. Default Docker Registry does not "
                              "support deletion. For more information see: "
                              "https://docs.docker.com/registry/"
                              "configuration/")
Exemple #2
0
    dxf.authenticate(os.environ.get("DOCKER_USERNAME"),
                     os.environ.get("DOCKER_TOKEN"),
                     response=response)


if __name__ == '__main__':
    try:
        logging.basicConfig(level=logging.INFO)
        parsedArgs = parseArguments()
        logging.info('Call arguments given: %s' % sys.argv[1:])
        dxf = DXF('registry-1.docker.io',
                  'schulcloud/{}'.format(parsedArgs.repo), auth)
        if hasattr(parsedArgs, 'add_tag') and parsedArgs.add_tag == True:
            logging.info("Adding tag '{}' to '{}' in repository '{}'".format(
                parsedArgs.new_tag, parsedArgs.exist_tag, parsedArgs.repo))
            manifest = dxf.get_manifest('{}'.format(parsedArgs.exist_tag))
            dxf.set_manifest('{}'.format(parsedArgs.new_tag), manifest)
        else:
            logging.info("Deleting tag '{}' in repository '{}'".format(
                parsedArgs.exist_tag, parsedArgs.repo))
            suretodel = query_yes_no(
                "Are you sure to delete tag '{}' from '{}'".format(
                    parsedArgs.exist_tag, parsedArgs.repo))
            if suretodel:
                dxf.del_alias(parsedArgs.exist_tag)
        exit(0)

    except Exception as ex:
        logging.exception(ex)
        exit(1)