mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-13 04:09:36 +00:00
Podman Machine crashes if run as root. When creating the machine, we write the ignition so that the UID of the core user matches the UID of the user on the host. We by default, create the root user on the machine with UID 0. If the user on the host is root, the core UID and the Root UID collide, causing a the VM not to boot. [NO NEW TESTS NEEDED] Signed-off-by: Ashley Cui <acui@redhat.com>
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
//go:build amd64 || arm64
|
|
// +build amd64 arm64
|
|
|
|
package machine
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/containers/podman/v4/cmd/podman/registry"
|
|
"github.com/containers/podman/v4/libpod/events"
|
|
"github.com/containers/podman/v4/pkg/machine"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
rmCmd = &cobra.Command{
|
|
Use: "rm [options] [MACHINE]",
|
|
Short: "Remove an existing machine",
|
|
Long: "Remove a managed virtual machine ",
|
|
PersistentPreRunE: rootlessOnly,
|
|
RunE: rm,
|
|
Args: cobra.MaximumNArgs(1),
|
|
Example: `podman machine rm myvm`,
|
|
ValidArgsFunction: autocompleteMachine,
|
|
}
|
|
)
|
|
|
|
var (
|
|
destroyOptions machine.RemoveOptions
|
|
)
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: rmCmd,
|
|
Parent: machineCmd,
|
|
})
|
|
|
|
flags := rmCmd.Flags()
|
|
formatFlagName := "force"
|
|
flags.BoolVarP(&destroyOptions.Force, formatFlagName, "f", false, "Stop and do not prompt before rming")
|
|
|
|
keysFlagName := "save-keys"
|
|
flags.BoolVar(&destroyOptions.SaveKeys, keysFlagName, false, "Do not delete SSH keys")
|
|
|
|
ignitionFlagName := "save-ignition"
|
|
flags.BoolVar(&destroyOptions.SaveIgnition, ignitionFlagName, false, "Do not delete ignition file")
|
|
|
|
imageFlagName := "save-image"
|
|
flags.BoolVar(&destroyOptions.SaveImage, imageFlagName, false, "Do not delete the image file")
|
|
}
|
|
|
|
func rm(_ *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
|
|
}
|
|
confirmationMessage, remove, err := vm.Remove(vmName, destroyOptions)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if !destroyOptions.Force {
|
|
// Warn user
|
|
fmt.Println(confirmationMessage)
|
|
reader := bufio.NewReader(os.Stdin)
|
|
fmt.Print("Are you sure you want to continue? [y/N] ")
|
|
answer, err := reader.ReadString('\n')
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if strings.ToLower(answer)[0] != 'y' {
|
|
return nil
|
|
}
|
|
}
|
|
err = remove()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
newMachineEvent(events.Remove, events.Event{Name: vmName})
|
|
return nil
|
|
}
|