Add support for creating schema 2 manifests and manifest lists via the OCI model
This commit is contained in:
parent
e344d4a5cf
commit
30f072aeff
16 changed files with 398 additions and 110 deletions
|
@ -6,7 +6,7 @@ from functools import wraps
|
|||
|
||||
from flask import request, make_response, jsonify, session
|
||||
|
||||
from app import userevents, metric_queue
|
||||
from app import userevents, metric_queue, storage
|
||||
from auth.auth_context import get_authenticated_context, get_authenticated_user
|
||||
from auth.credentials import validate_credentials, CredentialKind
|
||||
from auth.decorators import process_auth
|
||||
|
@ -217,7 +217,7 @@ def create_repository(namespace_name, repo_name):
|
|||
|
||||
# Start a new builder for the repository and save its ID in the session.
|
||||
assert repository_ref
|
||||
builder = create_manifest_builder(repository_ref)
|
||||
builder = create_manifest_builder(repository_ref, storage)
|
||||
logger.debug('Started repo push with manifest builder %s', builder)
|
||||
if builder is None:
|
||||
abort(404, message='Unknown repository', issue='unknown-repo')
|
||||
|
@ -243,7 +243,7 @@ def update_images(namespace_name, repo_name):
|
|||
# Make sure the repo actually exists.
|
||||
abort(404, message='Unknown repository', issue='unknown-repo')
|
||||
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'))
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'), storage)
|
||||
if builder is None:
|
||||
abort(400)
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ def put_image_layer(namespace, repository, image_id):
|
|||
exact_abort(409, 'Image already exists')
|
||||
|
||||
logger.debug('Checking for image in manifest builder')
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'))
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'), store)
|
||||
if builder is None:
|
||||
abort(400)
|
||||
|
||||
|
@ -268,7 +268,7 @@ def put_image_checksum(namespace, repository, image_id):
|
|||
image_id=image_id)
|
||||
|
||||
logger.debug('Checking for image in manifest builder')
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'))
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'), store)
|
||||
if builder is None:
|
||||
abort(400)
|
||||
|
||||
|
@ -361,7 +361,7 @@ def put_image_json(namespace, repository, image_id):
|
|||
if repository_ref is None:
|
||||
abort(403)
|
||||
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'))
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'), store)
|
||||
if builder is None:
|
||||
abort(400)
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ import json
|
|||
|
||||
from flask import abort, request, jsonify, make_response, session
|
||||
|
||||
from app import storage
|
||||
from auth.decorators import process_auth
|
||||
from auth.permissions import (ReadRepositoryPermission, ModifyRepositoryPermission)
|
||||
from data.registry_model import registry_model
|
||||
|
@ -70,7 +71,7 @@ def put_tag(namespace_name, repo_name, tag):
|
|||
image_id = json.loads(request.data)
|
||||
|
||||
# Check for the image ID first in a builder (for an in-progress push).
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'))
|
||||
builder = lookup_manifest_builder(repository_ref, session.get('manifest_builder'), storage)
|
||||
if builder is not None:
|
||||
layer = builder.lookup_layer(image_id)
|
||||
if layer is not None:
|
||||
|
@ -86,7 +87,7 @@ def put_tag(namespace_name, repo_name, tag):
|
|||
if legacy_image is None:
|
||||
abort(400)
|
||||
|
||||
if registry_model.retarget_tag(repository_ref, tag, legacy_image) is None:
|
||||
if registry_model.retarget_tag(repository_ref, tag, legacy_image, storage) is None:
|
||||
abort(400)
|
||||
|
||||
return make_response('Created', 200)
|
||||
|
|
Reference in a new issue