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/")
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)