Merge "Revert "Allow for OCI manifests""

This commit is contained in:
Zuul 2021-10-06 04:16:08 +00:00 committed by Gerrit Code Review
commit 7b8e9f442c
2 changed files with 11 additions and 50 deletions

View File

@ -89,10 +89,7 @@ MEDIA_TYPES = (
MEDIA_MANIFEST_V2,
MEDIA_MANIFEST_V2_LIST,
MEDIA_OCI_MANIFEST_V1,
MEDIA_OCI_CONFIG_V1,
MEDIA_OCI_INDEX_V1,
MEDIA_OCI_LAYER,
MEDIA_OCI_LAYER_COMPRESSED,
MEDIA_CONFIG,
MEDIA_BLOB,
MEDIA_BLOB_COMPRESSED
@ -102,10 +99,7 @@ MEDIA_TYPES = (
'application/vnd.docker.distribution.manifest.v2+json',
'application/vnd.docker.distribution.manifest.list.v2+json',
'application/vnd.oci.image.manifest.v1+json',
'application/vnd.oci.image.config.v1+json',
'application/vnd.oci.image.index.v1+json',
'application/vnd.oci.image.layer.v1.tar',
'application/vnd.oci.image.layer.v1.tar+gzip',
'application/vnd.docker.container.image.v1+json',
'application/vnd.docker.image.rootfs.diff.tar',
'application/vnd.docker.image.rootfs.diff.tar.gzip'
@ -900,9 +894,7 @@ class BaseImageUploader(object):
manifest_url = cls._build_url(
image_url, CALL_MANIFEST % parts
)
# prefer docker manifest over oci
manifest_headers = {'Accept': ", ".join([
MEDIA_MANIFEST_V2 + ";q=1", MEDIA_OCI_MANIFEST_V1 + ";q=0.5"])}
manifest_headers = {'Accept': MEDIA_MANIFEST_V2}
try:
manifest_r = RegistrySessionHelper.get(
@ -1638,9 +1630,7 @@ class PythonImageUploader(BaseImageUploader):
if multi_arch:
manifest_headers = {'Accept': MEDIA_MANIFEST_V2_LIST}
else:
# prefer docker manifest over oci
manifest_headers = {'Accept': ", ".join([
MEDIA_MANIFEST_V2 + ";q=1", MEDIA_OCI_MANIFEST_V1 + ";q=0.5"])}
manifest_headers = {'Accept': MEDIA_MANIFEST_V2}
try:
r = RegistrySessionHelper.get(
session,
@ -1664,16 +1654,12 @@ class PythonImageUploader(BaseImageUploader):
)
manifests_str.append(manifest_str)
manifest = json.loads(manifest_str)
media_type = manifest.get('mediaType',
manifest.get('config', {}).get('mediaType'))
if manifest.get('schemaVersion', 2) == 1:
layers.extend(reversed([x['blobSum']
for x in manifest['fsLayers']]))
elif not media_type or media_type in [MEDIA_MANIFEST_V2,
MEDIA_OCI_MANIFEST_V1,
MEDIA_OCI_CONFIG_V1]:
elif manifest.get('mediaType') == MEDIA_MANIFEST_V2:
layers.extend(x['digest'] for x in manifest['layers'])
elif media_type == MEDIA_MANIFEST_V2_LIST:
elif manifest.get('mediaType') == MEDIA_MANIFEST_V2_LIST:
image, _, tag = image_url.geturl().rpartition(':')
for man in manifest.get('manifests', []):
# replace image tag with the manifest hash in the list
@ -1881,12 +1867,7 @@ class PythonImageUploader(BaseImageUploader):
for source_manifest in source_manifests:
manifest = json.loads(source_manifest)
config_str = None
media_type = manifest.get('mediaType',
manifest.get('config',
{}).get('mediaType'))
if not media_type or media_type in [MEDIA_MANIFEST_V2,
MEDIA_OCI_MANIFEST_V1,
MEDIA_OCI_CONFIG_V1]:
if manifest.get('mediaType') == MEDIA_MANIFEST_V2:
config_digest = manifest['config']['digest']
LOG.debug('[%s] Uploading config with digest: %s' %
(image, config_digest))
@ -1938,27 +1919,8 @@ class PythonImageUploader(BaseImageUploader):
# is explicitly OCI because buildah uses OCI by default but we
# convert the metadata to Docker format in the uploader.
# See LP#1860585
manifest_type = manifest.get('mediaType',
manifest.get('config',
{}).get('mediaType'))
if not manifest_type or manifest_type in [MEDIA_OCI_MANIFEST_V1,
MEDIA_OCI_CONFIG_V1]:
manifest_type = MEDIA_MANIFEST_V2
# convert config mediaType to docker.container.image
manifest['config']['mediaType'] = MEDIA_CONFIG
layers = manifest.get('layers')
# convert layer type to docker layer type
if layers:
new_layers = []
for layer in layers:
layer_type = layer.get('mediaType')
if layer_type == MEDIA_OCI_LAYER_COMPRESSED:
layer['mediaType'] = MEDIA_BLOB_COMPRESSED
elif layer_type == MEDIA_OCI_LAYER:
layer['mediaType'] = MEDIA_BLOB
new_layers.append(layer)
manifest['layers'] = new_layers
elif manifest_type == MEDIA_CONFIG:
manifest_type = manifest.get('mediaType', False)
if not manifest_type or manifest_type == MEDIA_OCI_MANIFEST_V1:
manifest_type = MEDIA_MANIFEST_V2
elif manifest_type == MEDIA_OCI_INDEX_V1:
manifest_type = MEDIA_MANIFEST_V2_LIST

View File

@ -1830,10 +1830,8 @@ class TestPythonImageUploader(base.TestCase):
'nova-api/manifests/tripleo-current',
timeout=30,
headers={
'Accept': 'application/'
'vnd.docker.distribution.manifest.v2+json;q=1, '
'application/'
'vnd.oci.image.manifest.v1+json;q=0.5'
'Accept': 'application/vnd.docker.distribution'
'.manifest.v2+json'
}
)
@ -2191,12 +2189,13 @@ class TestPythonImageUploader(base.TestCase):
'config': {
'digest': 'sha256:1234',
'size': 2,
'mediaType': image_uploader.MEDIA_OCI_CONFIG_V1
'mediaType': image_uploader.MEDIA_CONFIG
},
'layers': [
{'digest': 'sha256:aaaa'},
{'digest': 'sha256:bbbb'},
],
'mediaType': image_uploader.MEDIA_OCI_MANIFEST_V1
})
expected_manifest = {
'config': {