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:
Ashley Cui
2024-01-10 14:53:02 -05:00
parent eeff3d2de8
commit f6107f6319
4 changed files with 44 additions and 5 deletions

View File

@ -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"
)

View File

@ -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

View File

@ -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
}

View File

@ -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)))
})
})