default to tunnel without ABISupport tag

When compiling a Linux binary without ABISupport, default to use the
tunnel.  The behaviour is expected in `podman-remote`.

Also set a default for the remote flag so `podman-remote` works OOB.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
Daniel J Walsh
2020-05-08 11:09:48 -04:00
parent ae9892e23e
commit 69f62a1a9c
6 changed files with 53 additions and 14 deletions

View File

@ -22,6 +22,7 @@ const (
var (
podmanOptions entities.PodmanConfig
podmanSync sync.Once
abiSupport = false
)
// PodmanConfig returns an entities.PodmanConfig built up from
@ -39,23 +40,31 @@ func newPodmanConfig() {
var mode entities.EngineMode
switch runtime.GOOS {
case "darwin":
fallthrough
case "windows":
case "darwin", "windows":
mode = entities.TunnelMode
case "linux":
mode = entities.ABIMode
// Some linux clients might only be compiled without ABI
// support (e.g., podman-remote).
if abiSupport {
mode = entities.ABIMode
} else {
mode = entities.TunnelMode
}
default:
fmt.Fprintf(os.Stderr, "%s is not a supported OS", runtime.GOOS)
os.Exit(1)
}
// cobra.Execute() may not be called yet, so we peek at os.Args.
for _, v := range os.Args {
// Prefix checking works because of how default EngineMode's
// have been defined.
if strings.HasPrefix(v, "--remote") {
mode = entities.TunnelMode
// Check if need to fallback to the tunnel mode if --remote is used.
if abiSupport && mode == entities.ABIMode {
// cobra.Execute() may not be called yet, so we peek at os.Args.
for _, v := range os.Args {
// Prefix checking works because of how default EngineMode's
// have been defined.
if strings.HasPrefix(v, "--remote") {
mode = entities.TunnelMode
break
}
}
}

View File

@ -0,0 +1,7 @@
// +build ABISupport
package registry
func init() {
abiSupport = true
}

View File

@ -0,0 +1,7 @@
// +build !ABISupport
package registry
func init() {
abiSupport = false
}

View File

@ -2,14 +2,18 @@ package registry
import (
"context"
"path/filepath"
"github.com/containers/libpod/pkg/domain/entities"
"github.com/containers/libpod/pkg/domain/infra"
"github.com/containers/libpod/pkg/rootless"
"github.com/containers/libpod/pkg/util"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
// DefaultAPIAddress is the default address of the REST socket
const DefaultAPIAddress = "unix:/run/podman/podman.sock"
// DefaultRootAPIAddress is the default address of the REST socket
const DefaultRootAPIAddress = "unix:/run/podman/podman.sock"
// DefaultVarlinkAddress is the default address of the varlink socket
const DefaultVarlinkAddress = "unix:/run/podman/io.podman"
@ -98,3 +102,15 @@ func GetContextWithOptions() context.Context {
func GetContext() context.Context {
return Context()
}
func DefaultAPIAddress() string {
if rootless.IsRootless() {
xdg, err := util.GetRuntimeDir()
if err != nil {
logrus.Warnf("Failed to get rootless runtime dir for DefaultAPIAddress: %s", err)
return DefaultRootAPIAddress
}
return "unix:" + filepath.Join(xdg, "podman", "podman.sock")
}
return DefaultRootAPIAddress
}

View File

@ -208,7 +208,7 @@ func syslogHook() {
func rootFlags(opts *entities.PodmanConfig, flags *pflag.FlagSet) {
// V2 flags
flags.StringVarP(&opts.Uri, "remote", "r", "", "URL to access Podman service")
flags.StringVarP(&opts.Uri, "remote", "r", registry.DefaultAPIAddress(), "URL to access Podman service")
flags.StringSliceVar(&opts.Identities, "identity", []string{}, "path to SSH identity file")
cfg := opts.Config

View File

@ -139,6 +139,6 @@ func resolveApiURI(_url []string) (string, error) {
case srvArgs.Varlink:
return registry.DefaultVarlinkAddress, nil
default:
return registry.DefaultAPIAddress, nil
return registry.DefaultRootAPIAddress, nil
}
}