mirror of
https://github.com/containers/podman.git
synced 2025-11-01 22:32:50 +08:00
Merge pull request #22028 from n1hility/fix-api-socket
Change API socket to be machine name isolated
This commit is contained in:
@ -68,10 +68,10 @@ var _ = Describe("podman inspect stop", func() {
|
|||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
switch testProvider.VMType() {
|
switch testProvider.VMType() {
|
||||||
case define.WSLVirt:
|
case define.HyperVVirt, define.WSLVirt:
|
||||||
Expect(inspectInfo[0].ConnectionInfo.PodmanPipe.GetPath()).To(ContainSubstring("podman-"))
|
Expect(inspectInfo[0].ConnectionInfo.PodmanPipe.GetPath()).To(ContainSubstring("podman-"))
|
||||||
default:
|
default:
|
||||||
Expect(inspectInfo[0].ConnectionInfo.PodmanSocket.GetPath()).To(HaveSuffix("podman.sock"))
|
Expect(inspectInfo[0].ConnectionInfo.PodmanSocket.GetPath()).To(HaveSuffix("api.sock"))
|
||||||
}
|
}
|
||||||
|
|
||||||
inspect := new(inspectMachine)
|
inspect := new(inspectMachine)
|
||||||
@ -89,4 +89,31 @@ var _ = Describe("podman inspect stop", func() {
|
|||||||
Expect(inspectSession).To(Exit(125))
|
Expect(inspectSession).To(Exit(125))
|
||||||
Expect(inspectSession.errorToString()).To(ContainSubstring("can't evaluate field Abcde in type machine.InspectInfo"))
|
Expect(inspectSession.errorToString()).To(ContainSubstring("can't evaluate field Abcde in type machine.InspectInfo"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("inspect shows a unique socket name per machine", func() {
|
||||||
|
skipIfVmtype(define.WSLVirt, "test is only relevant for Unix based providers")
|
||||||
|
skipIfVmtype(define.HyperVVirt, "test is only relevant for Unix based machines")
|
||||||
|
|
||||||
|
var socks []string
|
||||||
|
for c := 0; c < 2; c++ {
|
||||||
|
name := randomString()
|
||||||
|
i := new(initMachine)
|
||||||
|
session, err := mb.setName(name).setCmd(i.withImage(mb.imagePath)).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(session).To(Exit(0))
|
||||||
|
|
||||||
|
// regular inspect should
|
||||||
|
inspectJSON := new(inspectMachine)
|
||||||
|
inspectSession, err := mb.setName(name).setCmd(inspectJSON).run()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(inspectSession).To(Exit(0))
|
||||||
|
|
||||||
|
var inspectInfo []machine.InspectInfo
|
||||||
|
err = jsoniter.Unmarshal(inspectSession.Bytes(), &inspectInfo)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
socks = append(socks, inspectInfo[0].ConnectionInfo.PodmanSocket.GetPath())
|
||||||
|
}
|
||||||
|
|
||||||
|
Expect(socks[0]).ToNot(Equal(socks[1]))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
8
pkg/machine/env/dir.go
vendored
8
pkg/machine/env/dir.go
vendored
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/containers/podman/v5/pkg/machine/define"
|
"github.com/containers/podman/v5/pkg/machine/define"
|
||||||
"github.com/containers/storage/pkg/homedir"
|
"github.com/containers/storage/pkg/homedir"
|
||||||
@ -149,3 +150,10 @@ func GetSSHIdentityPath(name string) (string, error) {
|
|||||||
}
|
}
|
||||||
return filepath.Join(datadir, name), nil
|
return filepath.Join(datadir, name), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithPodmanPrefix(name string) string {
|
||||||
|
if !strings.HasPrefix(name, "podman") {
|
||||||
|
name = "podman-" + name
|
||||||
|
}
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
|||||||
@ -81,7 +81,7 @@ address can't be used by podman. `
|
|||||||
fmtString = `You can %sconnect Docker API clients by setting DOCKER_HOST using the
|
fmtString = `You can %sconnect Docker API clients by setting DOCKER_HOST using the
|
||||||
following command in your terminal session:
|
following command in your terminal session:
|
||||||
|
|
||||||
%s'
|
%s
|
||||||
|
|
||||||
`
|
`
|
||||||
prefix := ""
|
prefix := ""
|
||||||
|
|||||||
@ -123,7 +123,7 @@ func LaunchWinProxy(opts WinProxyOpts, noInfo bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func launchWinProxy(opts WinProxyOpts) (bool, string, error) {
|
func launchWinProxy(opts WinProxyOpts) (bool, string, error) {
|
||||||
machinePipe := ToDist(opts.Name)
|
machinePipe := env.WithPodmanPrefix(opts.Name)
|
||||||
if !PipeNameAvailable(machinePipe, MachineNameWait) {
|
if !PipeNameAvailable(machinePipe, MachineNameWait) {
|
||||||
return false, "", fmt.Errorf("could not start api proxy since expected pipe is not available: %s", machinePipe)
|
return false, "", fmt.Errorf("could not start api proxy since expected pipe is not available: %s", machinePipe)
|
||||||
}
|
}
|
||||||
@ -263,13 +263,6 @@ func GetWinProxyStateDir(name string, vmtype define.VMType) (string, error) {
|
|||||||
return stateDir, nil
|
return stateDir, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ToDist(name string) string {
|
|
||||||
if !strings.HasPrefix(name, "podman") {
|
|
||||||
name = "podman-" + name
|
|
||||||
}
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetEnvSetString(env string, val string) string {
|
func GetEnvSetString(env string, val string) string {
|
||||||
return fmt.Sprintf("$Env:%s=\"%s\"", env, val)
|
return fmt.Sprintf("$Env:%s=\"%s\"", env, val)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -111,7 +111,7 @@ func startNetworking(mc *vmconfigs.MachineConfig, provider vmconfigs.VMProvider)
|
|||||||
return "", 0, err
|
return "", 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
hostSocks, forwardSock, forwardingState, err := setupMachineSockets(mc.Name, dirs)
|
hostSocks, forwardSock, forwardingState, err := setupMachineSockets(mc, dirs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", 0, err
|
return "", 0, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,63 +10,92 @@ import (
|
|||||||
|
|
||||||
"github.com/containers/podman/v5/pkg/machine"
|
"github.com/containers/podman/v5/pkg/machine"
|
||||||
"github.com/containers/podman/v5/pkg/machine/define"
|
"github.com/containers/podman/v5/pkg/machine/define"
|
||||||
|
"github.com/containers/podman/v5/pkg/machine/vmconfigs"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupMachineSockets(name string, dirs *define.MachineDirs) ([]string, string, machine.APIForwardingState, error) {
|
func setupMachineSockets(mc *vmconfigs.MachineConfig, dirs *define.MachineDirs) ([]string, string, machine.APIForwardingState, error) {
|
||||||
hostSocket, err := dirs.DataDir.AppendToNewVMFile("podman.sock", nil)
|
hostSocket, err := mc.APISocket()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", 0, err
|
return nil, "", 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
linkSocketPath := filepath.Dir(dirs.DataDir.GetPath())
|
forwardSock, state, err := setupForwardingLinks(hostSocket, dirs.DataDir)
|
||||||
linkSocket, err := define.NewMachineFile(filepath.Join(linkSocketPath, "podman.sock"), nil)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", 0, err
|
return nil, "", 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
forwardSock, state := setupForwardingLinks(hostSocket, linkSocket)
|
|
||||||
return []string{hostSocket.GetPath()}, forwardSock, state, nil
|
return []string{hostSocket.GetPath()}, forwardSock, state, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupForwardingLinks(hostSocket, linkSocket *define.VMFile) (string, machine.APIForwardingState) {
|
func setupForwardingLinks(hostSocket, dataDir *define.VMFile) (string, machine.APIForwardingState, error) {
|
||||||
// The linking pattern is /var/run/docker.sock -> user global sock (link) -> machine sock (socket)
|
// Sets up a cooperative link structure to help a separate privileged
|
||||||
// This allows the helper to only have to maintain one constant target to the user, which can be
|
// service manage /var/run/docker.sock (currently only on MacOS via
|
||||||
// repositioned without updating docker.sock.
|
// podman-mac-helper, but potentially other OSs in the future).
|
||||||
|
//
|
||||||
|
// The linking pattern is:
|
||||||
|
//
|
||||||
|
// /var/run/docker.sock (link) -> user global sock (link) -> machine sock
|
||||||
|
//
|
||||||
|
// This allows the helper to only have to maintain one constant target to
|
||||||
|
// the user, which can be repositioned without updating docker.sock.
|
||||||
|
//
|
||||||
|
// Since these link locations are global/shared across multiple machine
|
||||||
|
// instances, they must coordinate on the winner. The scheme is first come
|
||||||
|
// first serve, whoever is actively answering on the socket first wins. All
|
||||||
|
// other machine instances backs off. As soon as the winner is no longer
|
||||||
|
// active another machine instance start will become the new active winner.
|
||||||
|
// The same applies to a competing container runtime trying to use
|
||||||
|
// /var/run/docker.sock, if the socket is in use by another runtime, podman
|
||||||
|
// machine will back off. In the start message "Losing" machine instances
|
||||||
|
// will instead advertise the direct machine socket, while "winning"
|
||||||
|
// instances will simply note they listen on the standard
|
||||||
|
// /var/run/docker.sock address. The APIForwardingState return value is
|
||||||
|
// returned by this function to indicate how the start message should behave
|
||||||
|
|
||||||
|
// Skip any OS not supported for helper usage
|
||||||
if !dockerClaimSupported() {
|
if !dockerClaimSupported() {
|
||||||
return hostSocket.GetPath(), machine.ClaimUnsupported
|
return hostSocket.GetPath(), machine.ClaimUnsupported, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify the helper system service was installed and report back if not
|
||||||
if !dockerClaimHelperInstalled() {
|
if !dockerClaimHelperInstalled() {
|
||||||
return hostSocket.GetPath(), machine.NotInstalled
|
return hostSocket.GetPath(), machine.NotInstalled, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !alreadyLinked(hostSocket.GetPath(), linkSocket.GetPath()) {
|
dataPath := filepath.Dir(dataDir.GetPath())
|
||||||
if checkSockInUse(linkSocket.GetPath()) {
|
userGlobalSocket, err := define.NewMachineFile(filepath.Join(dataPath, "podman.sock"), nil)
|
||||||
return hostSocket.GetPath(), machine.MachineLocal
|
if err != nil {
|
||||||
|
return "", 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the user global socket if not in use
|
||||||
|
// (e.g ~/.local/share/containers/podman/machine/podman.sock)
|
||||||
|
if !alreadyLinked(hostSocket.GetPath(), userGlobalSocket.GetPath()) {
|
||||||
|
if checkSockInUse(userGlobalSocket.GetPath()) {
|
||||||
|
return hostSocket.GetPath(), machine.MachineLocal, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = linkSocket.Delete()
|
_ = userGlobalSocket.Delete()
|
||||||
|
|
||||||
if err := os.Symlink(hostSocket.GetPath(), linkSocket.GetPath()); err != nil {
|
if err := os.Symlink(hostSocket.GetPath(), userGlobalSocket.GetPath()); err != nil {
|
||||||
logrus.Warnf("could not create user global API forwarding link: %s", err.Error())
|
logrus.Warnf("could not create user global API forwarding link: %s", err.Error())
|
||||||
return hostSocket.GetPath(), machine.MachineLocal
|
return hostSocket.GetPath(), machine.MachineLocal, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !alreadyLinked(linkSocket.GetPath(), dockerSock) {
|
// Setup /var/run/docker.sock if not in use
|
||||||
|
if !alreadyLinked(userGlobalSocket.GetPath(), dockerSock) {
|
||||||
if checkSockInUse(dockerSock) {
|
if checkSockInUse(dockerSock) {
|
||||||
return hostSocket.GetPath(), machine.MachineLocal
|
return hostSocket.GetPath(), machine.MachineLocal, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !claimDockerSock() {
|
if !claimDockerSock() {
|
||||||
logrus.Warn("podman helper is installed, but was not able to claim the global docker sock")
|
logrus.Warn("podman helper is installed, but was not able to claim the global docker sock")
|
||||||
return hostSocket.GetPath(), machine.MachineLocal
|
return hostSocket.GetPath(), machine.MachineLocal, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return dockerSock, machine.DockerGlobal
|
return dockerSock, machine.DockerGlobal, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func alreadyLinked(target string, link string) bool {
|
func alreadyLinked(target string, link string) bool {
|
||||||
|
|||||||
@ -5,10 +5,12 @@ import (
|
|||||||
|
|
||||||
"github.com/containers/podman/v5/pkg/machine"
|
"github.com/containers/podman/v5/pkg/machine"
|
||||||
"github.com/containers/podman/v5/pkg/machine/define"
|
"github.com/containers/podman/v5/pkg/machine/define"
|
||||||
|
"github.com/containers/podman/v5/pkg/machine/env"
|
||||||
|
"github.com/containers/podman/v5/pkg/machine/vmconfigs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupMachineSockets(name string, dirs *define.MachineDirs) ([]string, string, machine.APIForwardingState, error) {
|
func setupMachineSockets(mc *vmconfigs.MachineConfig, dirs *define.MachineDirs) ([]string, string, machine.APIForwardingState, error) {
|
||||||
machinePipe := machine.ToDist(name)
|
machinePipe := env.WithPodmanPrefix(mc.Name)
|
||||||
if !machine.PipeNameAvailable(machinePipe, machine.MachineNameWait) {
|
if !machine.PipeNameAvailable(machinePipe, machine.MachineNameWait) {
|
||||||
return nil, "", 0, fmt.Errorf("could not start api proxy since expected pipe is not available: %s", machinePipe)
|
return nil, "", 0, fmt.Errorf("could not start api proxy since expected pipe is not available: %s", machinePipe)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import (
|
|||||||
"github.com/containers/podman/v5/pkg/errorhandling"
|
"github.com/containers/podman/v5/pkg/errorhandling"
|
||||||
"github.com/containers/podman/v5/pkg/machine/connection"
|
"github.com/containers/podman/v5/pkg/machine/connection"
|
||||||
"github.com/containers/podman/v5/pkg/machine/define"
|
"github.com/containers/podman/v5/pkg/machine/define"
|
||||||
|
"github.com/containers/podman/v5/pkg/machine/env"
|
||||||
"github.com/containers/podman/v5/pkg/machine/lock"
|
"github.com/containers/podman/v5/pkg/machine/lock"
|
||||||
"github.com/containers/podman/v5/pkg/machine/ports"
|
"github.com/containers/podman/v5/pkg/machine/ports"
|
||||||
"github.com/containers/storage/pkg/ioutils"
|
"github.com/containers/storage/pkg/ioutils"
|
||||||
@ -162,6 +163,16 @@ func (mc *MachineConfig) Remove(saveIgnition, saveImage bool) ([]string, func()
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gvProxySocket, err := mc.GVProxySocket()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
apiSocket, err := mc.APISocket()
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
logPath, err := mc.LogFile()
|
logPath, err := mc.LogFile()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
@ -170,6 +181,8 @@ func (mc *MachineConfig) Remove(saveIgnition, saveImage bool) ([]string, func()
|
|||||||
rmFiles := []string{
|
rmFiles := []string{
|
||||||
mc.configPath.GetPath(),
|
mc.configPath.GetPath(),
|
||||||
readySocket.GetPath(),
|
readySocket.GetPath(),
|
||||||
|
gvProxySocket.GetPath(),
|
||||||
|
apiSocket.GetPath(),
|
||||||
logPath.GetPath(),
|
logPath.GetPath(),
|
||||||
}
|
}
|
||||||
if !saveImage {
|
if !saveImage {
|
||||||
@ -198,6 +211,12 @@ func (mc *MachineConfig) Remove(saveIgnition, saveImage bool) ([]string, func()
|
|||||||
if err := readySocket.Delete(); err != nil {
|
if err := readySocket.Delete(); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
|
if err := gvProxySocket.Delete(); err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
|
if err := apiSocket.Delete(); err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
if err := logPath.Delete(); err != nil {
|
if err := logPath.Delete(); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
@ -268,6 +287,14 @@ func (mc *MachineConfig) GVProxySocket() (*define.VMFile, error) {
|
|||||||
return gvProxySocket(mc.Name, machineRuntimeDir)
|
return gvProxySocket(mc.Name, machineRuntimeDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (mc *MachineConfig) APISocket() (*define.VMFile, error) {
|
||||||
|
machineRuntimeDir, err := mc.RuntimeDir()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return apiSocket(mc.Name, machineRuntimeDir)
|
||||||
|
}
|
||||||
|
|
||||||
func (mc *MachineConfig) LogFile() (*define.VMFile, error) {
|
func (mc *MachineConfig) LogFile() (*define.VMFile, error) {
|
||||||
rtDir, err := mc.RuntimeDir()
|
rtDir, err := mc.RuntimeDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -309,26 +336,13 @@ func (mc *MachineConfig) ConnectionInfo(vmtype define.VMType) (*define.VMFile, *
|
|||||||
)
|
)
|
||||||
|
|
||||||
if vmtype == define.HyperVVirt || vmtype == define.WSLVirt {
|
if vmtype == define.HyperVVirt || vmtype == define.WSLVirt {
|
||||||
pipeName := mc.Name
|
pipeName := env.WithPodmanPrefix(mc.Name)
|
||||||
if !strings.HasPrefix(pipeName, "podman") {
|
|
||||||
pipeName = "podman-" + pipeName
|
|
||||||
}
|
|
||||||
pipe = &define.VMFile{Path: `\\.\pipe\` + pipeName}
|
pipe = &define.VMFile{Path: `\\.\pipe\` + pipeName}
|
||||||
}
|
|
||||||
|
|
||||||
if vmtype == define.WSLVirt {
|
|
||||||
return nil, pipe, nil
|
return nil, pipe, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
sockName := "podman.sock"
|
socket, err := mc.APISocket()
|
||||||
dataDir, err := mc.DataDir()
|
return socket, nil, err
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("Resolving data dir: %s", err.Error())
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
socket, err = define.NewMachineFile(filepath.Join(dataDir.Path, sockName), &sockName)
|
|
||||||
return socket, pipe, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadMachineByName returns a machine config based on the vm name and provider
|
// LoadMachineByName returns a machine config based on the vm name and provider
|
||||||
|
|||||||
@ -15,3 +15,7 @@ func gvProxySocket(name string, machineRuntimeDir *define.VMFile) (*define.VMFil
|
|||||||
func readySocket(name string, machineRuntimeDir *define.VMFile) (*define.VMFile, error) {
|
func readySocket(name string, machineRuntimeDir *define.VMFile) (*define.VMFile, error) {
|
||||||
return machineRuntimeDir.AppendToNewVMFile(name+".sock", nil)
|
return machineRuntimeDir.AppendToNewVMFile(name+".sock", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func apiSocket(name string, socketDir *define.VMFile) (*define.VMFile, error) {
|
||||||
|
return socketDir.AppendToNewVMFile(name+"-api.sock", nil)
|
||||||
|
}
|
||||||
|
|||||||
@ -15,3 +15,8 @@ func readySocket(name string, machineRuntimeDir *define.VMFile) (*define.VMFile,
|
|||||||
socketName := name + ".sock"
|
socketName := name + ".sock"
|
||||||
return machineRuntimeDir.AppendToNewVMFile(socketName, &socketName)
|
return machineRuntimeDir.AppendToNewVMFile(socketName, &socketName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func apiSocket(name string, socketDir *define.VMFile) (*define.VMFile, error) {
|
||||||
|
socketName := name + "-api.sock"
|
||||||
|
return socketDir.AppendToNewVMFile(socketName, &socketName)
|
||||||
|
}
|
||||||
|
|||||||
@ -60,7 +60,7 @@ func getConfigPathExt(name string, extension string) (string, error) {
|
|||||||
// TODO like provisionWSL, i think this needs to be pushed to use common
|
// TODO like provisionWSL, i think this needs to be pushed to use common
|
||||||
// paths and types where possible
|
// paths and types where possible
|
||||||
func unprovisionWSL(mc *vmconfigs.MachineConfig) error {
|
func unprovisionWSL(mc *vmconfigs.MachineConfig) error {
|
||||||
dist := machine.ToDist(mc.Name)
|
dist := env.WithPodmanPrefix(mc.Name)
|
||||||
if err := terminateDist(dist); err != nil {
|
if err := terminateDist(dist); err != nil {
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
@ -92,7 +92,7 @@ func provisionWSLDist(name string, imagePath string, prompt string) (string, err
|
|||||||
return "", fmt.Errorf("could not create wsldist directory: %w", err)
|
return "", fmt.Errorf("could not create wsldist directory: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dist := machine.ToDist(name)
|
dist := env.WithPodmanPrefix(name)
|
||||||
fmt.Println(prompt)
|
fmt.Println(prompt)
|
||||||
if err = runCmdPassThrough(wutil.FindWSL(), "--import", dist, distTarget, imagePath, "--version", "2"); err != nil {
|
if err = runCmdPassThrough(wutil.FindWSL(), "--import", dist, distTarget, imagePath, "--version", "2"); err != nil {
|
||||||
return "", fmt.Errorf("the WSL import of guest OS failed: %w", err)
|
return "", fmt.Errorf("the WSL import of guest OS failed: %w", err)
|
||||||
@ -684,7 +684,7 @@ func unregisterDist(dist string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func isRunning(name string) (bool, error) {
|
func isRunning(name string) (bool, error) {
|
||||||
dist := machine.ToDist(name)
|
dist := env.WithPodmanPrefix(name)
|
||||||
wsl, err := isWSLRunning(dist)
|
wsl, err := isWSLRunning(dist)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
@ -719,7 +719,7 @@ func getDiskSize(name string) strongunits.GiB {
|
|||||||
|
|
||||||
//nolint:unused
|
//nolint:unused
|
||||||
func getCPUs(name string) (uint64, error) {
|
func getCPUs(name string) (uint64, error) {
|
||||||
dist := machine.ToDist(name)
|
dist := env.WithPodmanPrefix(name)
|
||||||
if run, _ := isWSLRunning(dist); !run {
|
if run, _ := isWSLRunning(dist); !run {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
@ -744,7 +744,7 @@ func getCPUs(name string) (uint64, error) {
|
|||||||
|
|
||||||
//nolint:unused
|
//nolint:unused
|
||||||
func getMem(name string) (strongunits.MiB, error) {
|
func getMem(name string) (strongunits.MiB, error) {
|
||||||
dist := machine.ToDist(name)
|
dist := env.WithPodmanPrefix(name)
|
||||||
if run, _ := isWSLRunning(dist); !run {
|
if run, _ := isWSLRunning(dist); !run {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/containers/podman/v5/pkg/machine/env"
|
||||||
"github.com/containers/podman/v5/pkg/machine/ocipull"
|
"github.com/containers/podman/v5/pkg/machine/ocipull"
|
||||||
"github.com/containers/podman/v5/pkg/machine/shim/diskpull"
|
"github.com/containers/podman/v5/pkg/machine/shim/diskpull"
|
||||||
"github.com/containers/podman/v5/pkg/machine/stdpull"
|
"github.com/containers/podman/v5/pkg/machine/stdpull"
|
||||||
@ -91,7 +92,7 @@ func (w WSLStubber) PrepareIgnition(_ *vmconfigs.MachineConfig, _ *ignition.Igni
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w WSLStubber) Exists(name string) (bool, error) {
|
func (w WSLStubber) Exists(name string) (bool, error) {
|
||||||
return isWSLExist(machine.ToDist(name))
|
return isWSLExist(env.WithPodmanPrefix(name))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w WSLStubber) MountType() vmconfigs.VolumeMountType {
|
func (w WSLStubber) MountType() vmconfigs.VolumeMountType {
|
||||||
@ -107,7 +108,7 @@ func (w WSLStubber) Remove(mc *vmconfigs.MachineConfig) ([]string, func() error,
|
|||||||
// below if we wanted to hard error on the wsl unregister
|
// below if we wanted to hard error on the wsl unregister
|
||||||
// of the vm
|
// of the vm
|
||||||
wslRemoveFunc := func() error {
|
wslRemoveFunc := func() error {
|
||||||
if err := runCmdPassThrough(wutil.FindWSL(), "--unregister", machine.ToDist(mc.Name)); err != nil {
|
if err := runCmdPassThrough(wutil.FindWSL(), "--unregister", env.WithPodmanPrefix(mc.Name)); err != nil {
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -156,7 +157,7 @@ func (w WSLStubber) SetProviderAttrs(mc *vmconfigs.MachineConfig, opts define.Se
|
|||||||
return errors.New("user-mode networking can only be changed when the machine is not running")
|
return errors.New("user-mode networking can only be changed when the machine is not running")
|
||||||
}
|
}
|
||||||
|
|
||||||
dist := machine.ToDist(mc.Name)
|
dist := env.WithPodmanPrefix(mc.Name)
|
||||||
if err := changeDistUserModeNetworking(dist, mc.SSH.RemoteUsername, mc.ImagePath.GetPath(), *opts.UserModeNetworking); err != nil {
|
if err := changeDistUserModeNetworking(dist, mc.SSH.RemoteUsername, mc.ImagePath.GetPath(), *opts.UserModeNetworking); err != nil {
|
||||||
return fmt.Errorf("failure changing state of user-mode networking setting: %w", err)
|
return fmt.Errorf("failure changing state of user-mode networking setting: %w", err)
|
||||||
}
|
}
|
||||||
@ -202,7 +203,7 @@ func (w WSLStubber) PostStartNetworking(mc *vmconfigs.MachineConfig, noInfo bool
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w WSLStubber) StartVM(mc *vmconfigs.MachineConfig) (func() error, func() error, error) {
|
func (w WSLStubber) StartVM(mc *vmconfigs.MachineConfig) (func() error, func() error, error) {
|
||||||
dist := machine.ToDist(mc.Name)
|
dist := env.WithPodmanPrefix(mc.Name)
|
||||||
|
|
||||||
err := wslInvoke(dist, "/root/bootstrap")
|
err := wslInvoke(dist, "/root/bootstrap")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -236,7 +237,7 @@ func (w WSLStubber) StopVM(mc *vmconfigs.MachineConfig, hardStop bool) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
dist := machine.ToDist(mc.Name)
|
dist := env.WithPodmanPrefix(mc.Name)
|
||||||
|
|
||||||
// Stop user-mode networking if enabled
|
// Stop user-mode networking if enabled
|
||||||
if err := stopUserModeNetworking(mc); err != nil {
|
if err := stopUserModeNetworking(mc); err != nil {
|
||||||
@ -270,7 +271,7 @@ func (w WSLStubber) StopHostNetworking(mc *vmconfigs.MachineConfig, vmType defin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w WSLStubber) UpdateSSHPort(mc *vmconfigs.MachineConfig, port int) error {
|
func (w WSLStubber) UpdateSSHPort(mc *vmconfigs.MachineConfig, port int) error {
|
||||||
dist := machine.ToDist(mc.Name)
|
dist := env.WithPodmanPrefix(mc.Name)
|
||||||
|
|
||||||
if err := wslInvoke(dist, "sh", "-c", fmt.Sprintf(changePort, port)); err != nil {
|
if err := wslInvoke(dist, "sh", "-c", fmt.Sprintf(changePort, port)); err != nil {
|
||||||
return fmt.Errorf("could not change SSH port for guest OS: %w", err)
|
return fmt.Errorf("could not change SSH port for guest OS: %w", err)
|
||||||
|
|||||||
@ -102,7 +102,7 @@ func startUserModeNetworking(mc *vmconfigs.MachineConfig) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := createUserModeResolvConf(machine.ToDist(mc.Name)); err != nil {
|
if err := createUserModeResolvConf(env.WithPodmanPrefix(mc.Name)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ func addUserModeNetEntry(mc *vmconfigs.MachineConfig) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
path := filepath.Join(entriesDir, machine.ToDist(mc.Name))
|
path := filepath.Join(entriesDir, env.WithPodmanPrefix(mc.Name))
|
||||||
file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
|
file, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not add user-mode networking registration: %w", err)
|
return fmt.Errorf("could not add user-mode networking registration: %w", err)
|
||||||
@ -275,7 +275,7 @@ func removeUserModeNetEntry(name string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
path := filepath.Join(entriesDir, machine.ToDist(name))
|
path := filepath.Join(entriesDir, env.WithPodmanPrefix(name))
|
||||||
return os.Remove(path)
|
return os.Remove(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user