]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: include image_digests list in 'ls' output
authorSage Weil <sage@newdream.net>
Wed, 27 Jan 2021 13:50:14 +0000 (07:50 -0600)
committerSebastian Wagner <sebastian.wagner@suse.com>
Wed, 10 Feb 2021 12:26:26 +0000 (13:26 +0100)
Signed-off-by: Sage Weil <sage@newdream.net>
(cherry picked from commit 0826c45e0cb5d60fcf8cd71cd14edd34a6997cd4)

src/cephadm/cephadm

index 9d7bd2c5d53b512198173fa2c403903ecc0febad..c636ca85c5b5260ea5a76ea90ae4d9607431b983 100755 (executable)
@@ -4453,6 +4453,9 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
     # keep track of ceph versions we see
     seen_versions = {}  # type: Dict[str, Optional[str]]
 
+    # keep track of image digests
+    seen_digests = {}   # type: Dict[str, List[str]]
+
     # /var/lib/ceph
     if os.path.exists(data_dir):
         for i in os.listdir(data_dir):
@@ -4509,6 +4512,7 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
                         container_id = None
                         image_name = None
                         image_id = None
+                        image_digests = None
                         version = None
                         start_stamp = None
 
@@ -4525,6 +4529,22 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
                             image_id = normalize_container_id(image_id)
                             daemon_type = name.split('.', 1)[0]
                             start_stamp = try_convert_datetime(start)
+
+                            # collect digests for this image id
+                            image_digests = seen_digests.get(image_id)
+                            if not image_digests:
+                                out, err, code = call(
+                                    ctx,
+                                    [
+                                        container_path, 'image', 'inspect', image_name,
+                                        '--format', '{{.RepoDigests}}',
+                                    ],
+                                    verbosity=CallVerbosity.DEBUG)
+                                if not code:
+                                    image_digests = out.strip()[1:-1].split(' ')
+                                    seen_digests[image_id] = image_digests
+
+                            # identify software version inside the container (if we can)
                             if not version or '.' not in version:
                                 version = seen_versions.get(image_id, None)
                             if daemon_type == NFSGanesha.daemon_type:
@@ -4592,6 +4612,7 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
                         val['container_id'] = container_id
                         val['container_image_name'] = image_name
                         val['container_image_id'] = image_id
+                        val['container_image_digests'] = image_digests
                         val['version'] = version
                         val['started'] = start_stamp
                         val['created'] = get_file_timestamp(