From b2f76f8514baefb57e10c9a5562457b651ec29af Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Tue, 5 Oct 2021 13:47:52 +0000 Subject: [PATCH] Revert "Allow for OCI manifests" This reverts commit e252328bf5a1134bfb236bfc84ce9c7b4597b5a7. Reason for revert: We're hitting some invalid metadata from some ceph containers. Change-Id: I6c5f449f96f212d9d030b0e4a83d4628faf089d5 Closes-Bug: #1946091 --- tripleo_common/image/image_uploader.py | 52 +++---------------- .../tests/image/test_image_uploader.py | 9 ++-- 2 files changed, 11 insertions(+), 50 deletions(-) diff --git a/tripleo_common/image/image_uploader.py b/tripleo_common/image/image_uploader.py index 050cba2c9..1e7092711 100644 --- a/tripleo_common/image/image_uploader.py +++ b/tripleo_common/image/image_uploader.py @@ -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 diff --git a/tripleo_common/tests/image/test_image_uploader.py b/tripleo_common/tests/image/test_image_uploader.py index 6cf10124d..f87c7dfc5 100644 --- a/tripleo_common/tests/image/test_image_uploader.py +++ b/tripleo_common/tests/image/test_image_uploader.py @@ -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': {