Skip to content

Commit 47a7d4b

Browse files
committed
Add shim.StopThenStart
Signed-off-by: Jait Jacob <jai8.jacob@gmail.com>
1 parent a317420 commit 47a7d4b

2 files changed

Lines changed: 40 additions & 18 deletions

File tree

cmd/podman/machine/restart.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ import (
1414

1515
var (
1616
restartCmd = &cobra.Command{
17-
Use: "restart [MACHINE]",
18-
Short: "Restart an existing machine",
19-
Long: "Restart a managed virtual machine",
20-
PersistentPreRunE: machinePreRunE,
21-
RunE: restart,
22-
Args: cobra.MaximumNArgs(1),
23-
Example: `podman machine restart podman-machine-default`,
24-
ValidArgsFunction: AutocompleteMachine,
25-
}
17+
Use: "restart [MACHINE]",
18+
Short: "Restart an existing machine",
19+
Long: "Restart a managed virtual machine",
20+
PersistentPreRunE: machinePreRunE,
21+
RunE: restart,
22+
Args: cobra.MaximumNArgs(1),
23+
Example: `podman machine restart podman-machine-default`,
24+
ValidArgsFunction: AutocompleteMachine,
25+
}
2626
restartOpts = machine.StartOptions{}
2727
)
2828

@@ -56,13 +56,12 @@ func restart(_ *cobra.Command, args []string) error {
5656
fmt.Printf("Restarting machine %q\n", vmName)
5757
}
5858

59-
newMachineEvent(events.Stop, events.Event{Name: vmName})
60-
6159
updateConnection := false
62-
if err := shim.Start(mc, vmProvider, machine.StartOptions{}, &updateConnection); err != nil {
60+
if err := shim.StopThenStart(mc, vmProvider, false, restartOpts, &updateConnection); err != nil {
6361
return err
6462
}
6563
fmt.Printf("Machine %q restarted successfully\n", vmName)
64+
newMachineEvent(events.Stop, events.Event{Name: vmName})
6665
newMachineEvent(events.Start, events.Event{Name: vmName})
6766
return nil
6867
}

pkg/machine/shim/host.go

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,24 @@ func Stop(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, hardStop bool) e
418418
return stopLocked(mc, mp, dirs, hardStop)
419419
}
420420

421+
// StopThenStart stops and starts the machine while holding its lock.
422+
func StopThenStart(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, hardStop bool, opts machine.StartOptions, updateSystemConn *bool) error {
423+
dirs, err := env.GetMachineDirs(mp.VMType())
424+
if err != nil {
425+
return err
426+
}
427+
mc.Lock()
428+
defer mc.Unlock()
429+
if err := mc.Refresh(); err != nil {
430+
return fmt.Errorf("reload config: %w", err)
431+
}
432+
433+
if err := stopLocked(mc, mp, dirs, hardStop); err != nil {
434+
return err
435+
}
436+
return startLocked(mc, mp, dirs, opts, updateSystemConn)
437+
}
438+
421439
// stopLocked stops the machine and expects the caller to hold the machine's lock.
422440
func stopLocked(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, dirs *machineDefine.MachineDirs, hardStop bool) error {
423441
state, err := mp.State(mc, false)
@@ -463,12 +481,6 @@ func stopLocked(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, dirs *mach
463481
}
464482

465483
func Start(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, opts machine.StartOptions, updateSystemConn *bool) error {
466-
var updateDefaultConnection bool
467-
468-
defaultBackoff := 500 * time.Millisecond
469-
maxBackoffs := 6
470-
signalChanClosed := false
471-
472484
dirs, err := env.GetMachineDirs(mp.VMType())
473485
if err != nil {
474486
return err
@@ -481,6 +493,17 @@ func Start(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, opts machine.St
481493
return fmt.Errorf("reload config: %w", err)
482494
}
483495

496+
return startLocked(mc, mp, dirs, opts, updateSystemConn)
497+
}
498+
499+
// startLocked starts the machine and expects the caller to hold the machine's lock.
500+
func startLocked(mc *vmconfigs.MachineConfig, mp vmconfigs.VMProvider, dirs *machineDefine.MachineDirs, opts machine.StartOptions, updateSystemConn *bool) error {
501+
var updateDefaultConnection bool
502+
503+
defaultBackoff := 500 * time.Millisecond
504+
maxBackoffs := 6
505+
signalChanClosed := false
506+
484507
connName := mc.Name
485508
if mc.HostUser.Rootful {
486509
connName += "-root"

0 commit comments

Comments
 (0)