mirror of
https://github.com/containers/podman.git
synced 2025-05-17 23:26:08 +08:00
Assign separate ports for each appleHV machine
Previously, every machine created using appleHV interacted with VFKit using port 8081. This meant that if multiple machines existed on the machine, starting one would start all the machines. This patch assigns a separate random port for each machine, so machine commands interact with just the specified machine. Signed-off-by: Ashley Cui <acui@redhat.com>
This commit is contained in:
@ -12,15 +12,15 @@ import (
|
||||
"github.com/containers/podman/v4/pkg/machine"
|
||||
"github.com/containers/podman/v4/pkg/machine/compression"
|
||||
"github.com/containers/podman/v4/pkg/machine/define"
|
||||
"github.com/containers/podman/v4/pkg/machine/vmconfigs"
|
||||
"github.com/containers/podman/v4/pkg/machine/ignition"
|
||||
"github.com/containers/podman/v4/pkg/machine/vmconfigs"
|
||||
vfConfig "github.com/crc-org/vfkit/pkg/config"
|
||||
"github.com/docker/go-units"
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultVFKitEndpoint = "http://localhost:8081"
|
||||
localhostURI = "http://localhost"
|
||||
ignitionSocketName = "ignition.sock"
|
||||
)
|
||||
|
||||
|
@ -116,7 +116,12 @@ func (m *MacMachine) setVfkitInfo(cfg *config.Config, readySocket define.VMFile)
|
||||
}
|
||||
|
||||
m.Vfkit.VirtualMachine.Devices = defaultDevices
|
||||
m.Vfkit.Endpoint = defaultVFKitEndpoint
|
||||
randPort, err := utils.GetRandomPort()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m.Vfkit.Endpoint = localhostURI + ":" + strconv.Itoa(randPort)
|
||||
m.Vfkit.VfkitBinaryPath = vfkitBinaryPath
|
||||
|
||||
return nil
|
||||
|
@ -132,7 +132,7 @@ func (m *machineTestBuilder) setCmd(mc machineCommand) *machineTestBuilder {
|
||||
return m
|
||||
}
|
||||
|
||||
func (m *machineTestBuilder) setTimeout(timeout time.Duration) *machineTestBuilder {
|
||||
func (m *machineTestBuilder) setTimeout(timeout time.Duration) *machineTestBuilder { //nolint: unparam
|
||||
m.timeout = timeout
|
||||
return m
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package e2e_test
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/containers/podman/v4/pkg/machine/define"
|
||||
. "github.com/onsi/ginkgo/v2"
|
||||
. "github.com/onsi/gomega"
|
||||
@ -84,4 +86,36 @@ var _ = Describe("podman machine start", func() {
|
||||
Expect(startSession).To(Exit(125))
|
||||
Expect(startSession.errorToString()).To(ContainSubstring("VM already running or starting"))
|
||||
})
|
||||
It("start only starts specified machine", func() {
|
||||
i := initMachine{}
|
||||
startme := randomString()
|
||||
session, err := mb.setName(startme).setCmd(i.withImagePath(mb.imagePath)).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session).To(Exit(0))
|
||||
|
||||
j := initMachine{}
|
||||
dontstartme := randomString()
|
||||
session2, err := mb.setName(dontstartme).setCmd(j.withImagePath(mb.imagePath)).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session2).To(Exit(0))
|
||||
|
||||
s := startMachine{}
|
||||
session3, err := mb.setName(startme).setCmd(s).setTimeout(time.Minute * 10).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(session3).Should(Exit(0))
|
||||
|
||||
inspect := new(inspectMachine)
|
||||
inspect = inspect.withFormat("{{.State}}")
|
||||
inspectSession, err := mb.setName(startme).setCmd(inspect).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(inspectSession).To(Exit(0))
|
||||
Expect(inspectSession.outputToString()).To(Equal(define.Running))
|
||||
|
||||
inspect2 := new(inspectMachine)
|
||||
inspect2 = inspect2.withFormat("{{.State}}")
|
||||
inspectSession2, err := mb.setName(dontstartme).setCmd(inspect2).run()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
Expect(inspectSession2).To(Exit(0))
|
||||
Expect(inspectSession2.outputToString()).To(Not(Equal(define.Running)))
|
||||
})
|
||||
})
|
||||
|
Reference in New Issue
Block a user