diff --git a/pkg/machine/applehv/machine.go b/pkg/machine/applehv/machine.go
index 43bbd51418..2ca843c83e 100644
--- a/pkg/machine/applehv/machine.go
+++ b/pkg/machine/applehv/machine.go
@@ -269,7 +269,7 @@ func (m *MacMachine) Init(opts machine.InitOptions) (bool, error) {
 		return false, err
 	}
 
-	readyUnitFile, err := createReadyUnitFile()
+	readyUnitFile, err := ignition.CreateReadyUnitFile(define.AppleHvVirt, nil)
 	if err != nil {
 		return false, err
 	}
@@ -288,13 +288,6 @@ func (m *MacMachine) Init(opts machine.InitOptions) (bool, error) {
 	return err == nil, err
 }
 
-func createReadyUnitFile() (string, error) {
-	readyUnit := ignition.DefaultReadyUnitFile()
-	readyUnit.Add("Unit", "Requires", "dev-virtio\\x2dports-vsock.device")
-	readyUnit.Add("Service", "ExecStart", "/bin/sh -c '/usr/bin/echo Ready | socat - VSOCK-CONNECT:2:1025'")
-	return readyUnit.ToString()
-}
-
 func (m *MacMachine) removeSystemConnections() error {
 	return machine.RemoveConnections(m.Name, fmt.Sprintf("%s-root", m.Name))
 }
diff --git a/pkg/machine/hyperv/machine.go b/pkg/machine/hyperv/machine.go
index 4e5bf724a1..2d2d1bbb12 100644
--- a/pkg/machine/hyperv/machine.go
+++ b/pkg/machine/hyperv/machine.go
@@ -246,7 +246,8 @@ func (m *HyperVMachine) Init(opts machine.InitOptions) (bool, error) {
 		return false, err
 	}
 
-	readyUnitFile, err := createReadyUnit(m.ReadyHVSock.Port)
+	readyOpts := ignition.ReadyUnitOpts{Port: m.ReadyHVSock.Port}
+	readyUnitFile, err := ignition.CreateReadyUnitFile(define.HyperVVirt, &readyOpts)
 	if err != nil {
 		return false, err
 	}
@@ -294,13 +295,6 @@ func (m *HyperVMachine) Init(opts machine.InitOptions) (bool, error) {
 	return err == nil, err
 }
 
-func createReadyUnit(readyPort uint64) (string, error) {
-	readyUnit := ignition.DefaultReadyUnitFile()
-	readyUnit.Add("Unit", "After", "systemd-user-sessions.service")
-	readyUnit.Add("Service", "ExecStart", fmt.Sprintf("/bin/sh -c '/usr/bin/echo Ready | socat - VSOCK-CONNECT:2:%d'", readyPort))
-	return readyUnit.ToString()
-}
-
 func createNetworkUnit(netPort uint64) (string, error) {
 	netUnit := parser.NewUnitFile()
 	netUnit.Add("Unit", "Description", "vsock_network")
diff --git a/pkg/machine/ignition/ready.go b/pkg/machine/ignition/ready.go
new file mode 100644
index 0000000000..6fb775ef67
--- /dev/null
+++ b/pkg/machine/ignition/ready.go
@@ -0,0 +1,39 @@
+package ignition
+
+import (
+	"errors"
+	"fmt"
+
+	"github.com/containers/podman/v4/pkg/machine/define"
+)
+
+// ReadyUnitOpts are options for creating the ready unit that reports back to podman
+// when the system is booted
+type ReadyUnitOpts struct {
+	Port uint64
+}
+
+// CreateReadyUnitFile makes a the ready unit to report back to the host that the system is running
+func CreateReadyUnitFile(provider define.VMType, opts *ReadyUnitOpts) (string, error) {
+	readyUnit := DefaultReadyUnitFile()
+	switch provider {
+	case define.QemuVirt:
+		readyUnit.Add("Unit", "Requires", "dev-virtio\\x2dports-vport1p1.device")
+		readyUnit.Add("Unit", "After", "systemd-user-sessions.service")
+		readyUnit.Add("Service", "ExecStart", "/bin/sh -c '/usr/bin/echo Ready >/dev/vport1p1'")
+	case define.AppleHvVirt:
+		readyUnit.Add("Unit", "Requires", "dev-virtio\\x2dports-vsock.device")
+		readyUnit.Add("Service", "ExecStart", "/bin/sh -c '/usr/bin/echo Ready | socat - VSOCK-CONNECT:2:1025'")
+	case define.HyperVVirt:
+		if opts == nil || opts.Port == 0 {
+			return "", errors.New("no port provided for hyperv ready unit")
+		}
+		readyUnit.Add("Unit", "After", "systemd-user-sessions.service")
+		readyUnit.Add("Service", "ExecStart", fmt.Sprintf("/bin/sh -c '/usr/bin/echo Ready | socat - VSOCK-CONNECT:2:%d'", opts.Port))
+	case define.WSLVirt: // WSL does not use ignition
+		return "", nil
+	default:
+		return "", fmt.Errorf("unable to generate ready unit for provider %q", provider.String())
+	}
+	return readyUnit.ToString()
+}
diff --git a/pkg/machine/qemu/machine.go b/pkg/machine/qemu/machine.go
index 695362f5ca..ea37098de5 100644
--- a/pkg/machine/qemu/machine.go
+++ b/pkg/machine/qemu/machine.go
@@ -215,7 +215,7 @@ func (v *MachineVM) Init(opts machine.InitOptions) (bool, error) {
 		return false, err
 	}
 
-	readyUnitFile, err := createReadyUnitFile()
+	readyUnitFile, err := ignition.CreateReadyUnitFile(define.QemuVirt, nil)
 	if err != nil {
 		return false, err
 	}
@@ -232,14 +232,6 @@ func (v *MachineVM) Init(opts machine.InitOptions) (bool, error) {
 	return err == nil, err
 }
 
-func createReadyUnitFile() (string, error) {
-	readyUnit := ignition.DefaultReadyUnitFile()
-	readyUnit.Add("Unit", "Requires", "dev-virtio\\x2dports-vport1p1.device")
-	readyUnit.Add("Unit", "After", "systemd-user-sessions.service")
-	readyUnit.Add("Service", "ExecStart", "/bin/sh -c '/usr/bin/echo Ready >/dev/vport1p1'")
-	return readyUnit.ToString()
-}
-
 func (v *MachineVM) removeSystemConnections() error {
 	return machine.RemoveConnections(v.Name, fmt.Sprintf("%s-root", v.Name))
 }