From 0aa347a933348c2c03bb8059b1ed50f67e48b514 Mon Sep 17 00:00:00 2001 From: Mario Loriedo Date: Fri, 29 Nov 2024 16:28:47 +0000 Subject: [PATCH] Fix `podman info` with multiple imagestores The command `podman info` returned only one imagestore in `store.graphOptions..imagestore` even if multiple image stores were configured. This change replaces the field `.imagestore` with the field `.additionalImageStores`, that instead of a string is an array of strings and that includes all the configured additional image stores. Fix https://github.com/containers/storage/issues/2094 Signed-off-by: Mario Loriedo --- libpod/info.go | 15 +++++++++++++-- test/system/005-info.bats | 11 +++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/libpod/info.go b/libpod/info.go index 81b3e8a010..172d230596 100644 --- a/libpod/info.go +++ b/libpod/info.go @@ -250,7 +250,8 @@ func (r *Runtime) storeInfo() (*define.StoreInfo, error) { graphOptions := map[string]interface{}{} for _, o := range r.store.GraphOptions() { split := strings.SplitN(o, "=", 2) - if strings.HasSuffix(split[0], "mount_program") { + switch { + case strings.HasSuffix(split[0], "mount_program"): ver, err := version.Program(split[1]) if err != nil { logrus.Warnf("Failed to retrieve program version for %s: %v", split[1], err) @@ -260,7 +261,17 @@ func (r *Runtime) storeInfo() (*define.StoreInfo, error) { program["Version"] = ver program["Package"] = version.Package(split[1]) graphOptions[split[0]] = program - } else { + case strings.HasSuffix(split[0], "imagestore"): + key := strings.ReplaceAll(split[0], "imagestore", "additionalImageStores") + if graphOptions[key] == nil { + graphOptions[key] = []string{split[1]} + } else { + graphOptions[key] = append(graphOptions[key].([]string), split[1]) + } + // Fallthrough to include the `imagestore` key to avoid breaking + // Podman v5 API. Should be removed in Podman v6.0.0. + fallthrough + default: graphOptions[split[0]] = split[1] } } diff --git a/test/system/005-info.bats b/test/system/005-info.bats index 1e1b9f0e49..fc8a3e334b 100644 --- a/test/system/005-info.bats +++ b/test/system/005-info.bats @@ -182,6 +182,17 @@ host.slirp4netns.executable | $expr_path is "$output" ".*graphOptions: {}" "output includes graphOptions: {}" } +@test "podman info - additional image stores" { + skip_if_remote "--storage-opt flag is not supported for remote" + store1=$PODMAN_TMPDIR/store1 + store2=$PODMAN_TMPDIR/store2 + mkdir -p $store1 $store2 + run_podman info --storage-opt=$(podman_storage_driver)'.imagestore='$store1 \ + --storage-opt=$(podman_storage_driver)'.imagestore='$store2 \ + --format '{{index .Store.GraphOptions "'$(podman_storage_driver)'.additionalImageStores"}}' + is "$output" "["$store1" "$store2"]" "output includes additional image stores" +} + @test "podman info netavark " { # Confirm netavark in use when explicitly required by execution environment. if [[ "$NETWORK_BACKEND" == "netavark" ]]; then