From 3b6ffcd290978f5e0110e925c212d6396accee10 Mon Sep 17 00:00:00 2001
From: "Jason T. Greene" <jason.greene@redhat.com>
Date: Thu, 21 Apr 2022 15:37:34 -0500
Subject: Update to use new common machine API

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
---
 .../containers/common/libnetwork/etchosts/ip.go    |  5 +-
 .../common/libnetwork/netavark/network.go          |  2 +-
 .../common/libnetwork/network/interface.go         |  3 +-
 .../containers/common/pkg/config/config.go         |  2 +
 .../containers/common/pkg/config/config_freebsd.go | 25 ++++++++
 .../containers/common/pkg/config/containers.conf   | 10 +---
 .../containers/common/pkg/machine/machine.go       | 70 ++++++++++++++++++++++
 vendor/modules.txt                                 |  3 +-
 8 files changed, 107 insertions(+), 13 deletions(-)
 create mode 100644 vendor/github.com/containers/common/pkg/config/config_freebsd.go
 create mode 100644 vendor/github.com/containers/common/pkg/machine/machine.go

(limited to 'vendor')

diff --git a/vendor/github.com/containers/common/libnetwork/etchosts/ip.go b/vendor/github.com/containers/common/libnetwork/etchosts/ip.go
index 3d14b7147..2b8186e72 100644
--- a/vendor/github.com/containers/common/libnetwork/etchosts/ip.go
+++ b/vendor/github.com/containers/common/libnetwork/etchosts/ip.go
@@ -6,6 +6,7 @@ import (
 	"github.com/containers/common/libnetwork/types"
 	"github.com/containers/common/libnetwork/util"
 	"github.com/containers/common/pkg/config"
+	"github.com/containers/common/pkg/machine"
 	"github.com/containers/storage/pkg/unshare"
 )
 
@@ -15,8 +16,8 @@ func GetHostContainersInternalIP(conf *config.Config, netStatus map[string]types
 	switch conf.Containers.HostContainersInternalIP {
 	case "":
 		// if empty (default) we will automatically choose one below
-		// if machine we let the gvproxy dns server handle the dns name so do not add it
-		if conf.Engine.MachineEnabled {
+		// if machine using gvproxy we let the gvproxy dns server handle the dns name so do not add it
+		if machine.IsGvProxyBased() {
 			return ""
 		}
 	case "none":
diff --git a/vendor/github.com/containers/common/libnetwork/netavark/network.go b/vendor/github.com/containers/common/libnetwork/netavark/network.go
index 9c8c4bfb4..8e7576a56 100644
--- a/vendor/github.com/containers/common/libnetwork/netavark/network.go
+++ b/vendor/github.com/containers/common/libnetwork/netavark/network.go
@@ -27,7 +27,7 @@ type netavarkNetwork struct {
 	// networkRunDir is where temporary files are stored, i.e.the ipam db, aardvark config etc
 	networkRunDir string
 
-	// tells netavark whether this is rootless mode or rootfull, "true" or "false"
+	// tells netavark whether this is rootless mode or rootful, "true" or "false"
 	networkRootless bool
 
 	// netavarkBinary is the path to the netavark binary.
diff --git a/vendor/github.com/containers/common/libnetwork/network/interface.go b/vendor/github.com/containers/common/libnetwork/network/interface.go
index e452e6cd5..893bdea2e 100644
--- a/vendor/github.com/containers/common/libnetwork/network/interface.go
+++ b/vendor/github.com/containers/common/libnetwork/network/interface.go
@@ -14,6 +14,7 @@ import (
 	"github.com/containers/common/libnetwork/netavark"
 	"github.com/containers/common/libnetwork/types"
 	"github.com/containers/common/pkg/config"
+	"github.com/containers/common/pkg/machine"
 	"github.com/containers/storage"
 	"github.com/containers/storage/pkg/homedir"
 	"github.com/containers/storage/pkg/ioutils"
@@ -173,7 +174,7 @@ func getCniInterface(conf *config.Config) (types.ContainerNetwork, error) {
 		DefaultNetwork:     conf.Network.DefaultNetwork,
 		DefaultSubnet:      conf.Network.DefaultSubnet,
 		DefaultsubnetPools: conf.Network.DefaultSubnetPools,
-		IsMachine:          conf.Engine.MachineEnabled,
+		IsMachine:          machine.IsGvProxyBased(),
 	})
 }
 
diff --git a/vendor/github.com/containers/common/pkg/config/config.go b/vendor/github.com/containers/common/pkg/config/config.go
index 319b8d153..d362495e3 100644
--- a/vendor/github.com/containers/common/pkg/config/config.go
+++ b/vendor/github.com/containers/common/pkg/config/config.go
@@ -312,6 +312,8 @@ type EngineConfig struct {
 	LockType string `toml:"lock_type,omitempty"`
 
 	// MachineEnabled indicates if Podman is running in a podman-machine VM
+	//
+	// This method is soft deprecated, use machine.IsPodmanMachine instead
 	MachineEnabled bool `toml:"machine_enabled,omitempty"`
 
 	// MultiImageArchive - if true, the container engine allows for storing
diff --git a/vendor/github.com/containers/common/pkg/config/config_freebsd.go b/vendor/github.com/containers/common/pkg/config/config_freebsd.go
new file mode 100644
index 000000000..85404a48d
--- /dev/null
+++ b/vendor/github.com/containers/common/pkg/config/config_freebsd.go
@@ -0,0 +1,25 @@
+package config
+
+import (
+	"os"
+)
+
+// podman remote clients on freebsd cannot use unshare.isRootless() to determine the configuration file locations.
+func customConfigFile() (string, error) {
+	if path, found := os.LookupEnv("CONTAINERS_CONF"); found {
+		return path, nil
+	}
+	return rootlessConfigPath()
+}
+
+func ifRootlessConfigPath() (string, error) {
+	return rootlessConfigPath()
+}
+
+var defaultHelperBinariesDir = []string{
+	"/usr/local/bin",
+	"/usr/local/libexec/podman",
+	"/usr/local/lib/podman",
+	"/usr/local/libexec/podman",
+	"/usr/local/lib/podman",
+}
diff --git a/vendor/github.com/containers/common/pkg/config/containers.conf b/vendor/github.com/containers/common/pkg/config/containers.conf
index 429b254bc..2b250753e 100644
--- a/vendor/github.com/containers/common/pkg/config/containers.conf
+++ b/vendor/github.com/containers/common/pkg/config/containers.conf
@@ -455,12 +455,6 @@ default_sysctls = [
 #
 #lock_type** = "shm"
 
-# Indicates if Podman is running inside a VM via Podman Machine.
-# Podman uses this value to do extra setup around networking from the
-# container inside the VM to to host.
-#
-#machine_enabled = false
-
 # MultiImageArchive - if true, the container engine allows for storing archives
 # (e.g., of the docker-archive transport) with multiple images.  By default,
 # Podman creates single-image archives.
@@ -572,9 +566,9 @@ default_sysctls = [
 #     URI to access the Podman service
 #     Examples:
 #       rootless "unix://run/user/$UID/podman/podman.sock" (Default)
-#       rootfull "unix://run/podman/podman.sock (Default)
+#       rootful "unix://run/podman/podman.sock (Default)
 #       remote rootless ssh://engineering.lab.company.com/run/user/1000/podman/podman.sock
-#       remote rootfull ssh://root@10.10.1.136:22/run/podman/podman.sock
+#       remote rootful ssh://root@10.10.1.136:22/run/podman/podman.sock
 #
 #    uri = "ssh://user@production.example.com/run/user/1001/podman/podman.sock"
 #    Path to file containing ssh identity key
diff --git a/vendor/github.com/containers/common/pkg/machine/machine.go b/vendor/github.com/containers/common/pkg/machine/machine.go
new file mode 100644
index 000000000..465eeceaf
--- /dev/null
+++ b/vendor/github.com/containers/common/pkg/machine/machine.go
@@ -0,0 +1,70 @@
+package machine
+
+import (
+	"os"
+	"strings"
+	"sync"
+
+	"github.com/containers/common/pkg/config"
+	"github.com/sirupsen/logrus"
+)
+
+type MachineMarker struct {
+	Enabled bool
+	Type    string
+}
+
+const (
+	markerFile = "/etc/containers/podman-machine"
+	Wsl        = "wsl"
+	Qemu       = "qemu"
+)
+
+var (
+	markerSync    sync.Once
+	machineMarker *MachineMarker
+)
+
+func loadMachineMarker(file string) {
+	var kind string
+
+	// Support deprecated config value for compatibility
+	enabled := isLegacyConfigSet()
+
+	if content, err := os.ReadFile(file); err == nil {
+		enabled = true
+		kind = strings.TrimSpace(string(content))
+	}
+
+	machineMarker = &MachineMarker{enabled, kind}
+}
+
+func isLegacyConfigSet() bool {
+	config, err := config.Default()
+	if err != nil {
+		logrus.Warnf("could not obtain container configuration")
+		return false
+	}
+
+	//nolint:staticcheck //lint:ignore SA1019 deprecated call
+	return config.Engine.MachineEnabled
+}
+
+func IsPodmanMachine() bool {
+	return GetMachineMarker().Enabled
+}
+
+func MachineHostType() string {
+	return GetMachineMarker().Type
+}
+
+func IsGvProxyBased() bool {
+	return IsPodmanMachine() && MachineHostType() != Wsl
+}
+
+func GetMachineMarker() *MachineMarker {
+	markerSync.Do(func() {
+		loadMachineMarker(markerFile)
+	})
+	return machineMarker
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index b1e0e3a23..4b1f03471 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -109,7 +109,7 @@ github.com/containers/buildah/pkg/rusage
 github.com/containers/buildah/pkg/sshagent
 github.com/containers/buildah/pkg/util
 github.com/containers/buildah/util
-# github.com/containers/common v0.47.5-0.20220421111103-112a47964ddb
+# github.com/containers/common v0.47.5-0.20220425182415-4081e6be9356
 ## explicit
 github.com/containers/common/libimage
 github.com/containers/common/libimage/manifests
@@ -132,6 +132,7 @@ github.com/containers/common/pkg/config
 github.com/containers/common/pkg/download
 github.com/containers/common/pkg/filters
 github.com/containers/common/pkg/flag
+github.com/containers/common/pkg/machine
 github.com/containers/common/pkg/manifests
 github.com/containers/common/pkg/netns
 github.com/containers/common/pkg/parse
-- 
cgit v1.2.3-54-g00ecf