diff options
-rw-r--r-- | cmd/podman/logout.go | 16 | ||||
-rw-r--r-- | contrib/spec/podman.spec.in | 4 | ||||
-rw-r--r-- | docs/podman-info.1.md | 8 | ||||
-rw-r--r-- | libpod/image/pull.go | 4 | ||||
-rw-r--r-- | libpod/runtime.go | 16 | ||||
-rw-r--r-- | pkg/registries/registries.go | 49 |
6 files changed, 73 insertions, 24 deletions
diff --git a/cmd/podman/logout.go b/cmd/podman/logout.go index 8abe918b8..ec581a098 100644 --- a/cmd/podman/logout.go +++ b/cmd/podman/logout.go @@ -3,6 +3,7 @@ package main import ( "fmt" + "github.com/containers/image/docker" "github.com/containers/image/pkg/docker/config" "github.com/containers/libpod/cmd/podman/cliconfig" "github.com/containers/libpod/libpod/image" @@ -66,12 +67,23 @@ func logoutCmd(c *cliconfig.LogoutValues) error { } err := config.RemoveAuthentication(sc, server) - switch err { + switch errors.Cause(err) { case nil: fmt.Printf("Removed login credentials for %s\n", server) return nil case config.ErrNotLoggedIn: - return errors.Errorf("Not logged into %s\n", server) + // username of user logged in to server (if one exists) + userFromAuthFile, passFromAuthFile, err := config.GetAuthentication(sc, server) + if err != nil { + return errors.Wrapf(err, "error reading auth file") + } + islogin := docker.CheckAuth(getContext(), sc, userFromAuthFile, passFromAuthFile, server) + if userFromAuthFile != "" && passFromAuthFile != "" && islogin == nil { + fmt.Printf("Not logged into %s with podman. Existing credentials were established via docker login. Please use docker logout instead.\n", server) + return nil + } + fmt.Printf("Not logged into %s\n", server) + return nil default: return errors.Wrapf(err, "error logging out of %q", server) } diff --git a/contrib/spec/podman.spec.in b/contrib/spec/podman.spec.in index 4b9cbd4cf..f3ee01bca 100644 --- a/contrib/spec/podman.spec.in +++ b/contrib/spec/podman.spec.in @@ -204,7 +204,7 @@ BuildRequires: golang(github.com/containers/image/docker/tarfile) BuildRequires: golang(github.com/containers/image/image) BuildRequires: golang(github.com/containers/image/oci/archive) BuildRequires: golang(github.com/containers/image/pkg/strslice) -BuildRequires: golang(github.com/containers/image/pkg/sysregistries) +BuildRequires: golang(github.com/containers/image/pkg/sysregistriesv2) BuildRequires: golang(github.com/containers/image/signature) BuildRequires: golang(github.com/containers/image/storage) BuildRequires: golang(github.com/containers/image/tarball) @@ -256,7 +256,7 @@ Requires: golang(github.com/containers/image/docker/tarfile) Requires: golang(github.com/containers/image/image) Requires: golang(github.com/containers/image/oci/archive) Requires: golang(github.com/containers/image/pkg/strslice) -Requires: golang(github.com/containers/image/pkg/sysregistries) +Requires: golang(github.com/containers/image/pkg/sysregistriesv2) Requires: golang(github.com/containers/image/signature) Requires: golang(github.com/containers/image/storage) Requires: golang(github.com/containers/image/tarball) diff --git a/docs/podman-info.1.md b/docs/podman-info.1.md index c606a4422..edd0252f6 100644 --- a/docs/podman-info.1.md +++ b/docs/podman-info.1.md @@ -52,14 +52,14 @@ host: kernel: 4.18.7-200.fc28.x86_64 os: linux uptime: 218h 49m 33.66s (Approximately 9.08 days) -insecure registries: - registries: [] registries: - registries: + blocked: null + insecure: null + search: - quay.io - registry.fedoraproject.org - docker.io - - registry.access.redhat.com + - registry.redhat.io store: ConfigFile: /etc/containers/storage.conf ContainerStore: diff --git a/libpod/image/pull.go b/libpod/image/pull.go index 5a0706b07..cb7411ce5 100644 --- a/libpod/image/pull.go +++ b/libpod/image/pull.go @@ -13,7 +13,6 @@ import ( dockerarchive "github.com/containers/image/docker/archive" "github.com/containers/image/docker/tarfile" ociarchive "github.com/containers/image/oci/archive" - "github.com/containers/image/pkg/sysregistries" is "github.com/containers/image/storage" "github.com/containers/image/transports" "github.com/containers/image/transports/alltransports" @@ -284,9 +283,8 @@ func (ir *Runtime) doPullImage(ctx context.Context, sc *types.SystemContext, goa } // If no image was found, we should handle. Lets be nicer to the user and see if we can figure out why. if len(images) == 0 { - registryPath := sysregistries.RegistriesConfPath(&types.SystemContext{SystemRegistriesConfPath: systemRegistriesConfPath}) if goal.usedSearchRegistries && len(goal.searchedRegistries) == 0 { - return nil, errors.Errorf("image name provided is a short name and no search registries are defined in %s.", registryPath) + return nil, errors.Errorf("image name provided is a short name and no search registries are defined in the registries config file.") } // If the image passed in was fully-qualified, we will have 1 refpair. Bc the image is fq'd, we dont need to yap about registries. if !goal.usedSearchRegistries { diff --git a/libpod/runtime.go b/libpod/runtime.go index 6b8d97fd9..34b6ac74f 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -1122,16 +1122,20 @@ func (r *Runtime) Info() ([]InfoData, error) { return nil, errors.Wrapf(err, "error getting registries") } registries := make(map[string]interface{}) - registries["registries"] = reg - info = append(info, InfoData{Type: "registries", Data: registries}) + registries["search"] = reg + + ireg, err := sysreg.GetInsecureRegistries() + if err != nil { + return nil, errors.Wrapf(err, "error getting registries") + } + registries["insecure"] = ireg - i, err := sysreg.GetInsecureRegistries() + breg, err := sysreg.GetBlockedRegistries() if err != nil { return nil, errors.Wrapf(err, "error getting registries") } - insecureRegistries := make(map[string]interface{}) - insecureRegistries["registries"] = i - info = append(info, InfoData{Type: "insecure registries", Data: insecureRegistries}) + registries["blocked"] = breg + info = append(info, InfoData{Type: "registries", Data: registries}) return info, nil } diff --git a/pkg/registries/registries.go b/pkg/registries/registries.go index 9f4c94533..fdb7f33c5 100644 --- a/pkg/registries/registries.go +++ b/pkg/registries/registries.go @@ -5,7 +5,7 @@ import ( "path/filepath" "strings" - "github.com/containers/image/pkg/sysregistries" + "github.com/containers/image/pkg/sysregistriesv2" "github.com/containers/image/types" "github.com/containers/libpod/pkg/rootless" "github.com/docker/distribution/reference" @@ -34,22 +34,57 @@ func SystemRegistriesConfPath() string { return "" } -// GetRegistries obtains the list of registries defined in the global registries file. -func GetRegistries() ([]string, error) { - searchRegistries, err := sysregistries.GetRegistries(&types.SystemContext{SystemRegistriesConfPath: SystemRegistriesConfPath()}) +func getRegistries() ([]sysregistriesv2.Registry, error) { + registries, err := sysregistriesv2.GetRegistries(&types.SystemContext{SystemRegistriesConfPath: SystemRegistriesConfPath()}) if err != nil { return nil, errors.Wrapf(err, "unable to parse the registries.conf file") } + return registries, nil +} + +// GetRegistries obtains the list of search registries defined in the global registries file. +func GetRegistries() ([]string, error) { + var searchRegistries []string + registries, err := getRegistries() + if err != nil { + return nil, err + } + for _, reg := range registries { + if reg.Search { + searchRegistries = append(searchRegistries, reg.URL) + } + } return searchRegistries, nil } +// GetBlockedRegistries obtains the list of blocked registries defined in the global registries file. +func GetBlockedRegistries() ([]string, error) { + var blockedRegistries []string + registries, err := getRegistries() + if err != nil { + return nil, err + } + for _, reg := range registries { + if reg.Blocked { + blockedRegistries = append(blockedRegistries, reg.URL) + } + } + return blockedRegistries, nil +} + // GetInsecureRegistries obtains the list of insecure registries from the global registration file. func GetInsecureRegistries() ([]string, error) { - registries, err := sysregistries.GetInsecureRegistries(&types.SystemContext{SystemRegistriesConfPath: SystemRegistriesConfPath()}) + var insecureRegistries []string + registries, err := getRegistries() if err != nil { - return nil, errors.Wrapf(err, "unable to parse the registries.conf file") + return nil, err } - return registries, nil + for _, reg := range registries { + if reg.Insecure { + insecureRegistries = append(insecureRegistries, reg.URL) + } + } + return insecureRegistries, nil } // GetRegistry returns the registry name from a string if specified |