diff options
author | baude <bbaude@redhat.com> | 2021-03-15 14:52:43 -0500 |
---|---|---|
committer | baude <bbaude@redhat.com> | 2021-03-25 08:43:51 -0500 |
commit | b5f54a9b23e8d9418700494da9aa78d8db354c43 (patch) | |
tree | 59dfb9edf3faf6d184f6af40522f71968948133a /cmd/podman/machine/destroy.go | |
parent | a861f6fd3ebe4fe0b63a1b550e6b99d7525228c0 (diff) | |
download | podman-b5f54a9b23e8d9418700494da9aa78d8db354c43.tar.gz podman-b5f54a9b23e8d9418700494da9aa78d8db354c43.tar.bz2 podman-b5f54a9b23e8d9418700494da9aa78d8db354c43.zip |
introduce podman machine
podman machine allows podman to create, manage, and interact with a vm
running some form of linux (default is fcos). podman is then configured
to be able to interact with the vm automatically.
while this is usable on linux, the real push is to get this working on
both current apple architectures in macos.
Ashley Cui contributed to this PR and was a great help.
[NO TESTS NEEDED]
Signed-off-by: baude <bbaude@redhat.com>
Diffstat (limited to 'cmd/podman/machine/destroy.go')
-rw-r--r-- | cmd/podman/machine/destroy.go | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/cmd/podman/machine/destroy.go b/cmd/podman/machine/destroy.go new file mode 100644 index 000000000..ab23d607d --- /dev/null +++ b/cmd/podman/machine/destroy.go @@ -0,0 +1,91 @@ +package machine + +import ( + "bufio" + "fmt" + "os" + "strings" + + "github.com/containers/common/pkg/completion" + "github.com/containers/podman/v3/cmd/podman/common" + "github.com/containers/podman/v3/cmd/podman/registry" + "github.com/containers/podman/v3/pkg/domain/entities" + "github.com/containers/podman/v3/pkg/machine" + "github.com/containers/podman/v3/pkg/machine/qemu" + "github.com/spf13/cobra" +) + +var ( + destroyCmd = &cobra.Command{ + Use: "destroy [options] NAME", + Short: "Destroy an existing machine", + Long: "Destroy an existing machine ", + RunE: destroy, + Args: cobra.ExactArgs(1), + Example: `podman machine destroy myvm`, + ValidArgsFunction: completion.AutocompleteNone, + } +) + +var ( + destoryOptions machine.DestroyOptions +) + +func init() { + registry.Commands = append(registry.Commands, registry.CliCommand{ + Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode}, + Command: destroyCmd, + Parent: machineCmd, + }) + + flags := destroyCmd.Flags() + formatFlagName := "force" + flags.BoolVar(&destoryOptions.Force, formatFlagName, false, "Do not prompt before destroying") + _ = destroyCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteJSONFormat) + + keysFlagName := "save-keys" + flags.BoolVar(&destoryOptions.SaveKeys, keysFlagName, false, "Do not delete SSH keys") + _ = destroyCmd.RegisterFlagCompletionFunc(keysFlagName, common.AutocompleteJSONFormat) + + ignitionFlagName := "save-ignition" + flags.BoolVar(&destoryOptions.SaveIgnition, ignitionFlagName, false, "Do not delete ignition file") + _ = destroyCmd.RegisterFlagCompletionFunc(ignitionFlagName, common.AutocompleteJSONFormat) + + imageFlagName := "save-image" + flags.BoolVar(&destoryOptions.SaveImage, imageFlagName, false, "Do not delete the image file") + _ = destroyCmd.RegisterFlagCompletionFunc(imageFlagName, common.AutocompleteJSONFormat) +} + +func destroy(cmd *cobra.Command, args []string) error { + var ( + err error + vm machine.VM + vmType string + ) + switch vmType { + default: + vm, err = qemu.LoadVMByName(args[0]) + } + if err != nil { + return err + } + confirmationMessage, doIt, err := vm.Destroy(args[0], machine.DestroyOptions{}) + if err != nil { + return err + } + + if !destoryOptions.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 + } + } + return doIt() +} |