diff --git a/docs/source/markdown/podman-machine-inspect.1.md b/docs/source/markdown/podman-machine-inspect.1.md index 56c3233bf6..f8b5bd8ffa 100644 --- a/docs/source/markdown/podman-machine-inspect.1.md +++ b/docs/source/markdown/podman-machine-inspect.1.md @@ -23,18 +23,19 @@ Rootless only. Print results with a Go template. -| **Placeholder** | **Description** | -| ------------------- | ----------------------------------------------------- | -| .ConfigPath ... | Machine configuration file location | -| .ConnectionInfo ... | Machine connection information | -| .Created | Machine creation time (string, ISO3601) | -| .Image ... | Machine image config | -| .LastUp | Time when machine was last booted | -| .Name | Name of the machine | -| .Resources ... | Resources used by the machine | -| .SSHConfig ... | SSH configuration info for communitating with machine | -| .State ... | Machine state | -| .UserModeNetworking | Whether this machine uses user-mode networking | +| **Placeholder** | **Description** | +| ------------------- | --------------------------------------------------------------------- | +| .ConfigPath ... | Machine configuration file location | +| .ConnectionInfo ... | Machine connection information | +| .Created | Machine creation time (string, ISO3601) | +| .Image ... | Machine image config | +| .LastUp | Time when machine was last booted | +| .Name | Name of the machine | +| .Resources ... | Resources used by the machine | +| .Rootful | Whether the machine prefers rootful or rootless container execution | +| .SSHConfig ... | SSH configuration info for communitating with machine | +| .State ... | Machine state | +| .UserModeNetworking | Whether this machine uses user-mode networking | #### **--help** diff --git a/pkg/machine/applehv/machine.go b/pkg/machine/applehv/machine.go index 28c27231bf..f53f03cf9a 100644 --- a/pkg/machine/applehv/machine.go +++ b/pkg/machine/applehv/machine.go @@ -317,6 +317,7 @@ func (m *MacMachine) Inspect() (*machine.InspectInfo, error) { }, SSHConfig: m.SSHConfig, State: vmState, + Rootful: m.Rootful, } return &ii, nil } diff --git a/pkg/machine/config.go b/pkg/machine/config.go index 5fd51a899c..b64511af29 100644 --- a/pkg/machine/config.go +++ b/pkg/machine/config.go @@ -151,6 +151,7 @@ type InspectInfo struct { SSHConfig SSHConfig State Status UserModeNetworking bool + Rootful bool } func (rc RemoteConnectionType) MakeSSHURL(host, path, port, userName string) url.URL { diff --git a/pkg/machine/e2e/config_init_test.go b/pkg/machine/e2e/config_init_test.go index 51dd397159..c0c2b1c89f 100644 --- a/pkg/machine/e2e/config_init_test.go +++ b/pkg/machine/e2e/config_init_test.go @@ -19,16 +19,17 @@ type initMachine struct { --volume-driver string Optional volume driver */ - cpus *uint - diskSize *uint - ignitionPath string - username string - imagePath string - memory *uint - now bool - timezone string - rootful bool - volumes []string + cpus *uint + diskSize *uint + ignitionPath string + username string + imagePath string + memory *uint + now bool + timezone string + rootful bool + volumes []string + userModeNetworking bool cmd []string } @@ -65,6 +66,9 @@ func (i *initMachine) buildCmd(m *machineTestBuilder) []string { if i.rootful { cmd = append(cmd, "--rootful") } + if i.userModeNetworking { + cmd = append(cmd, "--user-mode-networking") + } cmd = append(cmd, m.name) i.cmd = cmd return cmd @@ -118,3 +122,8 @@ func (i *initMachine) withRootful(r bool) *initMachine { i.rootful = r return i } + +func (i *initMachine) withUserModeNetworking(r bool) *initMachine { + i.userModeNetworking = r + return i +} diff --git a/pkg/machine/e2e/config_set_test.go b/pkg/machine/e2e/config_set_test.go index 1ebd97d118..09e71f00f8 100644 --- a/pkg/machine/e2e/config_set_test.go +++ b/pkg/machine/e2e/config_set_test.go @@ -5,10 +5,11 @@ import ( ) type setMachine struct { - cpus *uint - diskSize *uint - memory *uint - rootful bool + cpus *uint + diskSize *uint + memory *uint + rootful bool + userModeNetworking bool cmd []string } @@ -27,6 +28,9 @@ func (i *setMachine) buildCmd(m *machineTestBuilder) []string { if i.rootful { cmd = append(cmd, "--rootful") } + if i.userModeNetworking { + cmd = append(cmd, "--user-mode-networking") + } cmd = append(cmd, m.name) i.cmd = cmd return cmd @@ -50,3 +54,8 @@ func (i *setMachine) withRootful(r bool) *setMachine { i.rootful = r return i } + +func (i *setMachine) withUserModeNetworking(r bool) *setMachine { + i.userModeNetworking = r + return i +} diff --git a/pkg/machine/e2e/config_test.go b/pkg/machine/e2e/config_test.go index 06f9ca9f0b..321d276678 100644 --- a/pkg/machine/e2e/config_test.go +++ b/pkg/machine/e2e/config_test.go @@ -6,6 +6,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "strings" "time" @@ -201,3 +202,16 @@ func (matcher *ValidJSONMatcher) FailureMessage(actual interface{}) (message str func (matcher *ValidJSONMatcher) NegatedFailureMessage(actual interface{}) (message string) { return format.Message(actual, "to _not_ be valid JSON") } + +func checkReason(reason string) { + if len(reason) < 5 { + panic("Test must specify a reason to skip") + } +} + +func SkipIfNotWindows(reason string) { + checkReason(reason) + if runtime.GOOS != "windows" { + Skip("[not windows]: " + reason) + } +} diff --git a/pkg/machine/e2e/init_test.go b/pkg/machine/e2e/init_test.go index 9cd3ffa0fd..8d156abc4d 100644 --- a/pkg/machine/e2e/init_test.go +++ b/pkg/machine/e2e/init_test.go @@ -186,7 +186,7 @@ var _ = Describe("podman machine init", func() { }) - It("machine init rootful docker.sock check", func() { + It("machine init rootful with docker.sock check", func() { i := initMachine{} name := randomString() session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath).withRootful(true)).run() @@ -198,6 +198,13 @@ var _ = Describe("podman machine init", func() { Expect(err).ToNot(HaveOccurred()) Expect(ssession).Should(Exit(0)) + inspect := new(inspectMachine) + inspect = inspect.withFormat("{{.Rootful}}") + inspectSession, err := mb.setName(name).setCmd(inspect).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession).To(Exit(0)) + Expect(inspectSession.outputToString()).To(Equal("true")) + ssh2 := sshMachine{} sshSession2, err := mb.setName(name).setCmd(ssh2.withSSHCommand([]string{"readlink /var/run/docker.sock"})).run() Expect(err).ToNot(HaveOccurred()) @@ -205,4 +212,21 @@ var _ = Describe("podman machine init", func() { output := strings.TrimSpace(sshSession2.outputToString()) Expect(output).To(Equal("/run/podman/podman.sock")) }) + + It("init with user mode networking ", func() { + SkipIfNotWindows("setting user mode networking is only honored on Windows") + + i := new(initMachine) + name := randomString() + session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath).withUserModeNetworking(true)).run() + Expect(err).ToNot(HaveOccurred()) + Expect(session).To(Exit(0)) + + inspect := new(inspectMachine) + inspect = inspect.withFormat("{{.UserModeNetworking}}") + inspectSession, err := mb.setName(name).setCmd(inspect).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession).To(Exit(0)) + Expect(inspectSession.outputToString()).To(Equal("true")) + }) }) diff --git a/pkg/machine/e2e/set_test.go b/pkg/machine/e2e/set_test.go index 1dd34e9627..a1f12cdad6 100644 --- a/pkg/machine/e2e/set_test.go +++ b/pkg/machine/e2e/set_test.go @@ -101,7 +101,7 @@ var _ = Describe("podman machine set", func() { Expect(sshSession3.outputToString()).To(ContainSubstring("100 GiB")) }) - It("set rootful, docker sock change", func() { + It("set rootful with docker sock change", func() { name := randomString() i := new(initMachine) session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath)).run() @@ -118,6 +118,13 @@ var _ = Describe("podman machine set", func() { Expect(err).ToNot(HaveOccurred()) Expect(startSession).To(Exit(0)) + inspect := new(inspectMachine) + inspect = inspect.withFormat("{{.Rootful}}") + inspectSession, err := mb.setName(name).setCmd(inspect).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession).To(Exit(0)) + Expect(inspectSession.outputToString()).To(Equal("true")) + ssh2 := sshMachine{} sshSession2, err := mb.setName(name).setCmd(ssh2.withSSHCommand([]string{"readlink /var/run/docker.sock"})).run() Expect(err).ToNot(HaveOccurred()) @@ -125,4 +132,26 @@ var _ = Describe("podman machine set", func() { output := strings.TrimSpace(sshSession2.outputToString()) Expect(output).To(Equal("/run/podman/podman.sock")) }) + + It("set user mode networking", func() { + SkipIfNotWindows("Setting user mode networking is only honored on Windows") + + name := randomString() + i := new(initMachine) + session, err := mb.setName(name).setCmd(i.withImagePath(mb.imagePath)).run() + Expect(err).ToNot(HaveOccurred()) + Expect(session).To(Exit(0)) + + set := setMachine{} + setSession, err := mb.setName(name).setCmd(set.withUserModeNetworking(true)).run() + Expect(err).ToNot(HaveOccurred()) + Expect(setSession).To(Exit(0)) + + inspect := new(inspectMachine) + inspect = inspect.withFormat("{{.UserModeNetworking}}") + inspectSession, err := mb.setName(name).setCmd(inspect).run() + Expect(err).ToNot(HaveOccurred()) + Expect(inspectSession).To(Exit(0)) + Expect(inspectSession.outputToString()).To(Equal("true")) + }) }) diff --git a/pkg/machine/hyperv/machine.go b/pkg/machine/hyperv/machine.go index 4919f5bd31..3bf71f17e2 100644 --- a/pkg/machine/hyperv/machine.go +++ b/pkg/machine/hyperv/machine.go @@ -303,6 +303,7 @@ func (m *HyperVMachine) Inspect() (*machine.InspectInfo, error) { }, SSHConfig: m.SSHConfig, State: vm.State().String(), + Rootful: m.Rootful, }, nil } diff --git a/pkg/machine/qemu/machine.go b/pkg/machine/qemu/machine.go index 1b623ac4cf..8082f3b9d8 100644 --- a/pkg/machine/qemu/machine.go +++ b/pkg/machine/qemu/machine.go @@ -1596,6 +1596,7 @@ func (v *MachineVM) Inspect() (*machine.InspectInfo, error) { SSHConfig: v.SSHConfig, State: state, UserModeNetworking: true, // always true + Rootful: v.Rootful, }, nil } diff --git a/pkg/machine/wsl/machine.go b/pkg/machine/wsl/machine.go index 9182fbd3b7..163493f60d 100644 --- a/pkg/machine/wsl/machine.go +++ b/pkg/machine/wsl/machine.go @@ -1745,6 +1745,7 @@ func (v *MachineVM) Inspect() (*machine.InspectInfo, error) { SSHConfig: v.SSHConfig, State: state, UserModeNetworking: v.UserModeNetworking, + Rootful: v.Rootful, }, nil }