diff --git a/cmd/podman/common/completion.go b/cmd/podman/common/completion.go index ca886b137d..e46675733c 100644 --- a/cmd/podman/common/completion.go +++ b/cmd/podman/common/completion.go @@ -16,6 +16,7 @@ import ( "github.com/containers/common/pkg/config" "github.com/containers/common/pkg/ssh" "github.com/containers/image/v5/pkg/sysregistriesv2" + imageTypes "github.com/containers/image/v5/types" "github.com/containers/podman/v5/cmd/podman/registry" "github.com/containers/podman/v5/libpod/define" "github.com/containers/podman/v5/libpod/events" @@ -276,7 +277,9 @@ func getSecrets(cmd *cobra.Command, toComplete string, cType completeType) ([]st } func getRegistries() ([]string, cobra.ShellCompDirective) { - regs, err := sysregistriesv2.UnqualifiedSearchRegistries(nil) + sysCtx := &imageTypes.SystemContext{} + SetRegistriesConfPath(sysCtx) + regs, err := sysregistriesv2.UnqualifiedSearchRegistries(sysCtx) if err != nil { cobra.CompErrorln(err.Error()) return nil, cobra.ShellCompDirectiveNoFileComp diff --git a/cmd/podman/common/registries.go b/cmd/podman/common/registries.go new file mode 100644 index 0000000000..f444585f6c --- /dev/null +++ b/cmd/podman/common/registries.go @@ -0,0 +1,24 @@ +package common + +import ( + "os" + + "github.com/containers/image/v5/types" +) + +// SetRegistriesConfPath sets the registries.conf path for the specified context. +// NOTE: this is a verbatim copy from c/common/libimage which we're not using +// to prevent leaking c/storage into this file. Maybe this should go into c/image? +func SetRegistriesConfPath(systemContext *types.SystemContext) { + if systemContext.SystemRegistriesConfPath != "" { + return + } + if envOverride, ok := os.LookupEnv("CONTAINERS_REGISTRIES_CONF"); ok { + systemContext.SystemRegistriesConfPath = envOverride + return + } + if envOverride, ok := os.LookupEnv("REGISTRIES_CONFIG_PATH"); ok { + systemContext.SystemRegistriesConfPath = envOverride + return + } +} diff --git a/cmd/podman/login.go b/cmd/podman/login.go index 5a3edb3369..fe63a4ba3a 100644 --- a/cmd/podman/login.go +++ b/cmd/podman/login.go @@ -98,24 +98,7 @@ func login(cmd *cobra.Command, args []string) error { sysCtx := &types.SystemContext{ DockerInsecureSkipTLSVerify: skipTLS, } - setRegistriesConfPath(sysCtx) + common.SetRegistriesConfPath(sysCtx) loginOptions.GetLoginSet = cmd.Flag("get-login").Changed return auth.Login(context.Background(), sysCtx, &loginOptions.LoginOptions, args) } - -// setRegistriesConfPath sets the registries.conf path for the specified context. -// NOTE: this is a verbatim copy from c/common/libimage which we're not using -// to prevent leaking c/storage into this file. Maybe this should go into c/image? -func setRegistriesConfPath(systemContext *types.SystemContext) { - if systemContext.SystemRegistriesConfPath != "" { - return - } - if envOverride, ok := os.LookupEnv("CONTAINERS_REGISTRIES_CONF"); ok { - systemContext.SystemRegistriesConfPath = envOverride - return - } - if envOverride, ok := os.LookupEnv("REGISTRIES_CONFIG_PATH"); ok { - systemContext.SystemRegistriesConfPath = envOverride - return - } -} diff --git a/cmd/podman/logout.go b/cmd/podman/logout.go index 46a123f292..ef2dc17fe7 100644 --- a/cmd/podman/logout.go +++ b/cmd/podman/logout.go @@ -49,6 +49,6 @@ func init() { // Implementation of podman-logout. func logout(cmd *cobra.Command, args []string) error { sysCtx := &types.SystemContext{} - setRegistriesConfPath(sysCtx) + common.SetRegistriesConfPath(sysCtx) return auth.Logout(sysCtx, &logoutOptions, args) } diff --git a/test/system/600-completion.bats b/test/system/600-completion.bats index 1f300b0565..fd108e445b 100644 --- a/test/system/600-completion.bats +++ b/test/system/600-completion.bats @@ -168,10 +168,10 @@ function check_shell_completion() { *REGISTRY*) run_completion "$@" $cmd "${extra_args[@]}" "" - ### FIXME how can we get the configured registries? _check_completion_end NoFileComp - ### FIXME this fails if no registries are configured assert "${#lines[@]}" -gt 2 "$* $cmd: No REGISTRIES found in suggestions" + # We can assume quay.io as we force our own CONTAINERS_REGISTRIES_CONF below. + assert "${lines[0]}" == "quay.io" "unqualified-search-registries from registries.conf listed" match=true # resume @@ -311,6 +311,11 @@ function _check_no_suggestions() { # create secret run_podman secret create $random_secret_name $secret_file + # create our own registries.conf so we know what registry is set + local CONTAINERS_REGISTRIES_CONF="$PODMAN_TMPDIR/registries.conf" + echo 'unqualified-search-registries = ["quay.io"]' > "$CONTAINERS_REGISTRIES_CONF" + export CONTAINERS_REGISTRIES_CONF + # Called with no args -- start with 'podman --help'. check_shell_completion() will # recurse for any subcommands. check_shell_completion