]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: normalize_image_digest: reworked
authorSebastian Wagner <sewagner@redhat.com>
Tue, 14 Dec 2021 12:05:59 +0000 (13:05 +0100)
committerAdam King <adking@redhat.com>
Mon, 21 Feb 2022 18:43:45 +0000 (13:43 -0500)
Reworked to only care about known short names. I coudn't
find any algorithm, as this problem is ambiguous.

Fixes: https://tracker.ceph.com/issues/53594
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
(cherry picked from commit a48b8344bd9ebb47c23e589f2c7ecdd18a6f3085)

src/pybind/mgr/cephadm/tests/test_upgrade.py
src/pybind/mgr/cephadm/upgrade.py

index 3699b6eb75e7482f55e34271b1099586667d10af..7659b44734cafd4277d794709173c86c30d3c622 100644 (file)
@@ -17,19 +17,19 @@ def test_upgrade_start(cephadm_module: CephadmOrchestrator):
         with with_host(cephadm_module, 'test2'):
             with with_service(cephadm_module, ServiceSpec('mgr', placement=PlacementSpec(count=2)), status_running=True):
                 assert wait(cephadm_module, cephadm_module.upgrade_start(
-                    'image_id', None)) == 'Initiating upgrade to docker.io/image_id'
+                    'image_id', None)) == 'Initiating upgrade to image_id'
 
                 assert wait(cephadm_module, cephadm_module.upgrade_status()
-                            ).target_image == 'docker.io/image_id'
+                            ).target_image == 'image_id'
 
                 assert wait(cephadm_module, cephadm_module.upgrade_pause()
-                            ) == 'Paused upgrade to docker.io/image_id'
+                            ) == 'Paused upgrade to image_id'
 
                 assert wait(cephadm_module, cephadm_module.upgrade_resume()
-                            ) == 'Resumed upgrade to docker.io/image_id'
+                            ) == 'Resumed upgrade to image_id'
 
                 assert wait(cephadm_module, cephadm_module.upgrade_stop()
-                            ) == 'Stopped upgrade to docker.io/image_id'
+                            ) == 'Stopped upgrade to image_id'
 
 
 @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
@@ -57,10 +57,10 @@ def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator):
                            }):
                 version_mock.return_value = 'ceph version 18.2.1 (somehash)'
                 assert wait(cephadm_module, cephadm_module.upgrade_start(
-                    'to_image', None)) == 'Initiating upgrade to docker.io/to_image'
+                    'to_image', None)) == 'Initiating upgrade to to_image'
 
                 assert wait(cephadm_module, cephadm_module.upgrade_status()
-                            ).target_image == 'docker.io/to_image'
+                            ).target_image == 'to_image'
 
                 def _versions_mock(cmd):
                     return json.dumps({
@@ -113,7 +113,7 @@ def test_upgrade_run(use_repo_digest, cephadm_module: CephadmOrchestrator):
                 if use_repo_digest:
                     assert image == 'to_image@repo_digest'
                 else:
-                    assert image == 'docker.io/to_image'
+                    assert image == 'to_image'
 
 
 def test_upgrade_state_null(cephadm_module: CephadmOrchestrator):
index 6061eddd470faaa280f6f09ae32ecbd81cad0ff0..e2bde0034a7f90adf5ba737dc30111dad45207e4 100644 (file)
@@ -27,20 +27,24 @@ def normalize_image_digest(digest: str, default_registry: str) -> str:
     >>> normalize_image_digest('ceph/ceph', 'docker.io')
     'docker.io/ceph/ceph'
 
-    Edge cases that shouldn't ever come up. (ubuntu alias for library/ubuntu)
-    >>> normalize_image_digest('ubuntu', 'docker.io')
-    'docker.io/ubuntu'
-
     No change:
     >>> normalize_image_digest('quay.ceph.io/ceph/ceph', 'docker.io')
     'quay.ceph.io/ceph/ceph'
 
     >>> normalize_image_digest('docker.io/ubuntu', 'docker.io')
     'docker.io/ubuntu'
+
+    >>> normalize_image_digest('localhost/ceph', 'docker.io')
+    'localhost/ceph'
     """
-    bits = digest.split('/')
-    if '.' not in bits[0] or len(bits) < 3:
-        digest = 'docker.io/' + digest
+    known_shortnames = [
+        'ceph/ceph',
+        'ceph/daemon',
+        'ceph/daemon-base',
+    ]
+    for image in known_shortnames:
+        if digest.startswith(image):
+            return f'{default_registry}/{digest}'
     return digest