spiegel_podman/cmd/podman/machine/start.go
Ashley Cui d3f406e9f6 podman system reset removed machines incorrectly
podman system reset did not clean up machines fully, leaving some config
files, and breaking machines. Now it removes all machines files fully.

Signed-off-by: Ashley Cui <acui@redhat.com>
2022-05-04 18:06:23 +00:00

68 lines
1.6 KiB
Go

//go:build amd64 || arm64
// +build amd64 arm64
package machine
import (
"fmt"
"github.com/containers/podman/v4/cmd/podman/registry"
"github.com/containers/podman/v4/libpod/events"
"github.com/containers/podman/v4/pkg/machine"
"github.com/pkg/errors"
"github.com/spf13/cobra"
)
var (
startCmd = &cobra.Command{
Use: "start [MACHINE]",
Short: "Start an existing machine",
Long: "Start a managed virtual machine ",
RunE: start,
Args: cobra.MaximumNArgs(1),
Example: `podman machine start myvm`,
ValidArgsFunction: autocompleteMachine,
}
)
func init() {
registry.Commands = append(registry.Commands, registry.CliCommand{
Command: startCmd,
Parent: machineCmd,
})
}
func start(_ *cobra.Command, args []string) error {
var (
err error
vm machine.VM
)
vmName := defaultMachineName
if len(args) > 0 && len(args[0]) > 0 {
vmName = args[0]
}
provider := GetSystemDefaultProvider()
vm, err = provider.LoadVMByName(vmName)
if err != nil {
return err
}
active, activeName, cerr := provider.CheckExclusiveActiveVM()
if cerr != nil {
return cerr
}
if active {
if vmName == activeName {
return errors.Wrapf(machine.ErrVMAlreadyRunning, "cannot start VM %s", vmName)
}
return errors.Wrapf(machine.ErrMultipleActiveVM, "cannot start VM %s. VM %s is currently running", vmName, activeName)
}
fmt.Printf("Starting machine %q\n", vmName)
if err := vm.Start(vmName, machine.StartOptions{}); err != nil {
return err
}
fmt.Printf("Machine %q started successfully\n", vmName)
newMachineEvent(events.Start, events.Event{Name: vmName})
return nil
}