From 5c909793655e182619e1b1ac0c75ace47bc2fe71 Mon Sep 17 00:00:00 2001
From: David Vallee Delisle <me@dvd.dev>
Date: Thu, 24 Mar 2022 10:50:51 -0400
Subject: [PATCH] build_catalog should loop deeper than one level

There's some scenarios where our catalog is nested under more than one
layer of folder. build_catalog should take this into account.

Closes-bug: 1966222
Change-Id: Ibdeb5741b32f8060c14ca79d2300886dee68555f
---
 tripleo_common/image/image_export.py | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/tripleo_common/image/image_export.py b/tripleo_common/image/image_export.py
index 687ee1ef8..133f4c528 100644
--- a/tripleo_common/image/image_export.py
+++ b/tripleo_common/image/image_export.py
@@ -375,20 +375,15 @@ def build_tags_list(image):
 def build_catalog():
     catalog_path = os.path.join(IMAGE_EXPORT_DIR, 'v2', '_catalog')
     catalog_entries = []
-    LOG.debug('Rebuilding %s' % catalog_path)
     images_path = os.path.join(IMAGE_EXPORT_DIR, 'v2')
     metadata_set = set(['blobs', 'manifests', 'tags'])
-
-    for namespace in os.listdir(images_path):
-        namespace_path = os.path.join(images_path, namespace)
-        if not os.path.isdir(namespace_path):
-            continue
-        contents_set = set(os.listdir(namespace_path))
-        # handle containers with no namespaces
+    LOG.debug(f'Rebuilding {catalog_path} Based on images_path {images_path}')
+    metadata_set = set(['blobs', 'manifests', 'tags'])
+    for folder, contents_set, files in os.walk(images_path):
         if metadata_set.issubset(contents_set):
-            catalog_entries.append(namespace)
-        for image in list(contents_set - metadata_set):
-            catalog_entries.append('%s/%s' % (namespace, image))
+            image = folder.replace(f'{images_path}/', '')
+            LOG.debug(f'Adding image {image} to catalog')
+            catalog_entries.append(image)
 
     catalog = {'repositories': catalog_entries}
     with open(catalog_path, 'w+b') as f: