58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package registry
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/containers/podman/v5/pkg/domain/entities"
|
|
"github.com/spf13/pflag"
|
|
)
|
|
|
|
// Value for --remote given on command line
|
|
var remoteFromCLI = struct {
|
|
Value bool
|
|
sync sync.Once
|
|
}{}
|
|
|
|
const PodmanSh = "podmansh"
|
|
|
|
// IsRemote returns true if podman was built to run remote or --remote flag given on CLI
|
|
// Use in init() functions as an initialization check
|
|
func IsRemote() bool {
|
|
// remote conflicts with podmansh in how the `-c` option gets parsed
|
|
// This is noticeable if a user with shell set to podmansh were to execute
|
|
// a command using ssh like so:
|
|
// ssh user@host id
|
|
if strings.HasSuffix(filepath.Base(os.Args[0]), PodmanSh) {
|
|
return false
|
|
}
|
|
remoteFromCLI.sync.Do(func() {
|
|
remote := false
|
|
if _, ok := os.LookupEnv("CONTAINER_HOST"); ok {
|
|
remote = true
|
|
} else if _, ok := os.LookupEnv("CONTAINER_CONNECTION"); ok {
|
|
remote = true
|
|
}
|
|
fs := pflag.NewFlagSet("remote", pflag.ContinueOnError)
|
|
fs.ParseErrorsWhitelist.UnknownFlags = true
|
|
fs.Usage = func() {}
|
|
fs.SetInterspersed(false)
|
|
fs.BoolVarP(&remoteFromCLI.Value, "remote", "r", remote, "")
|
|
connectionFlagName := "connection"
|
|
fs.StringP(connectionFlagName, "c", "", "")
|
|
contextFlagName := "context"
|
|
fs.String(contextFlagName, "", "")
|
|
hostFlagName := "host"
|
|
fs.StringP(hostFlagName, "H", "", "")
|
|
urlFlagName := "url"
|
|
fs.String(urlFlagName, "", "")
|
|
|
|
_ = fs.Parse(os.Args[parseIndex():])
|
|
// --connection or --url implies --remote
|
|
remoteFromCLI.Value = remoteFromCLI.Value || fs.Changed(connectionFlagName) || fs.Changed(urlFlagName) || fs.Changed(hostFlagName) || fs.Changed(contextFlagName)
|
|
})
|
|
return podmanOptions.EngineMode == entities.TunnelMode || remoteFromCLI.Value
|
|
}
|