summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/podman/logout.go16
-rw-r--r--contrib/spec/podman.spec.in4
-rw-r--r--docs/podman-info.1.md8
-rw-r--r--libpod/image/pull.go4
-rw-r--r--libpod/runtime.go16
-rw-r--r--pkg/registries/registries.go49
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