Fix image replication for images with remote layers
This commit is contained in:
parent
0eb84f8077
commit
180d8847db
7 changed files with 103 additions and 40 deletions
|
@ -290,6 +290,32 @@ class SharedModel:
|
|||
|
||||
return LegacyImage.for_image(image, images_map=parent_images_map, blob=blob)
|
||||
|
||||
def _get_manifest_local_blobs(self, manifest, repo_id, include_placements=False,
|
||||
by_manifest=False):
|
||||
parsed = manifest.get_parsed_manifest()
|
||||
if parsed is None:
|
||||
return None
|
||||
|
||||
local_blob_digests = list(set(parsed.local_blob_digests))
|
||||
if not len(local_blob_digests):
|
||||
return []
|
||||
|
||||
blob_query = model.storage.lookup_repo_storages_by_content_checksum(repo_id,
|
||||
local_blob_digests,
|
||||
by_manifest=by_manifest)
|
||||
blobs = []
|
||||
for image_storage in blob_query:
|
||||
placements = None
|
||||
if include_placements:
|
||||
placements = list(model.storage.get_storage_locations(image_storage.uuid))
|
||||
|
||||
blob = Blob.for_image_storage(image_storage,
|
||||
storage_path=model.storage.get_layer_path(image_storage),
|
||||
placements=placements)
|
||||
blobs.append(blob)
|
||||
|
||||
return blobs
|
||||
|
||||
def _list_manifest_layers(self, repo_id, parsed, include_placements=False, by_manifest=False):
|
||||
""" Returns an *ordered list* of the layers found in the manifest, starting at the base and
|
||||
working towards the leaf, including the associated Blob and its placements (if specified).
|
||||
|
|
Reference in a new issue