diff options
-rw-r--r-- | cmd/podman/system/service_abi.go | 17 | ||||
-rw-r--r-- | pkg/api/handlers/libpod/info.go | 4 | ||||
-rw-r--r-- | pkg/domain/infra/abi/system.go | 10 | ||||
-rw-r--r-- | pkg/util/utils.go | 23 | ||||
-rw-r--r-- | test/e2e/info_test.go | 15 |
5 files changed, 56 insertions, 13 deletions
diff --git a/cmd/podman/system/service_abi.go b/cmd/podman/system/service_abi.go index 9e8a9f9b4..364663323 100644 --- a/cmd/podman/system/service_abi.go +++ b/cmd/podman/system/service_abi.go @@ -6,11 +6,13 @@ import ( "context" "net" "os" + "path/filepath" "strings" api "github.com/containers/podman/v3/pkg/api/server" "github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/infra" + "github.com/containers/podman/v3/pkg/util" "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/pflag" @@ -24,6 +26,17 @@ func restService(opts entities.ServiceOptions, flags *pflag.FlagSet, cfg *entiti ) if opts.URI != "" { + fields := strings.Split(opts.URI, ":") + if len(fields) == 1 { + return errors.Errorf("%s is an invalid socket destination", opts.URI) + } + path := opts.URI + if fields[0] == "unix" { + if path, err = filepath.Abs(fields[1]); err != nil { + return err + } + } + util.SetSocketPath(path) if os.Getenv("LISTEN_FDS") != "" { // If it is activated by systemd, use the first LISTEN_FD (3) // instead of opening the socket file. @@ -34,10 +47,6 @@ func restService(opts entities.ServiceOptions, flags *pflag.FlagSet, cfg *entiti } listener = &l } else { - fields := strings.Split(opts.URI, ":") - if len(fields) == 1 { - return errors.Errorf("%s is an invalid socket destination", opts.URI) - } network := fields[0] address := strings.Join(fields[1:], ":") l, err := net.Listen(network, address) diff --git a/pkg/api/handlers/libpod/info.go b/pkg/api/handlers/libpod/info.go index 546609451..8868d563d 100644 --- a/pkg/api/handlers/libpod/info.go +++ b/pkg/api/handlers/libpod/info.go @@ -5,11 +5,13 @@ import ( "github.com/containers/podman/v3/libpod" "github.com/containers/podman/v3/pkg/api/handlers/utils" + "github.com/containers/podman/v3/pkg/domain/infra/abi" ) func GetInfo(w http.ResponseWriter, r *http.Request) { runtime := r.Context().Value("runtime").(*libpod.Runtime) - info, err := runtime.Info() + containerEngine := abi.ContainerEngine{Libpod: runtime} + info, err := containerEngine.Info(r.Context()) if err != nil { utils.InternalServerError(w, err) return diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go index f87f9e370..6319c1ab1 100644 --- a/pkg/domain/infra/abi/system.go +++ b/pkg/domain/infra/abi/system.go @@ -32,17 +32,11 @@ func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) { if err != nil { return nil, err } - xdg, err := util.GetRuntimeDir() + + socketPath, err := util.SocketPath() if err != nil { return nil, err } - if len(xdg) == 0 { - // If no xdg is returned, assume root socket - xdg = "/run" - } - - // Glue the socket path together - socketPath := filepath.Join(xdg, "podman", "podman.sock") rs := define.RemoteSocket{ Path: socketPath, Exists: false, diff --git a/pkg/util/utils.go b/pkg/util/utils.go index bbaf72981..622fbde99 100644 --- a/pkg/util/utils.go +++ b/pkg/util/utils.go @@ -706,3 +706,26 @@ func IDtoolsToRuntimeSpec(idMaps []idtools.IDMap) (convertedIDMap []specs.LinuxI } return convertedIDMap } + +var socketPath string + +func SetSocketPath(path string) { + socketPath = path +} + +func SocketPath() (string, error) { + if socketPath != "" { + return socketPath, nil + } + xdg, err := GetRuntimeDir() + if err != nil { + return "", err + } + if len(xdg) == 0 { + // If no xdg is returned, assume root socket + xdg = "/run" + } + + // Glue the socket path together + return filepath.Join(xdg, "podman", "podman.sock"), nil +} diff --git a/test/e2e/info_test.go b/test/e2e/info_test.go index 3ce294b30..0b112b312 100644 --- a/test/e2e/info_test.go +++ b/test/e2e/info_test.go @@ -109,4 +109,19 @@ var _ = Describe("Podman Info", func() { Expect(err).To(BeNil()) Expect(string(out)).To(Equal(expect)) }) + + It("podman info check RemoteSocket", func() { + session := podmanTest.Podman([]string{"info", "--format", "{{.Host.RemoteSocket.Path}}"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + Expect(session.OutputToString()).To(MatchRegexp("/run/.*podman.*sock")) + + if IsRemote() { + session = podmanTest.Podman([]string{"info", "--format", "{{.Host.RemoteSocket.Exists}}"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Equal(0)) + Expect(session.OutputToString()).To(ContainSubstring("true")) + } + }) + }) |