constellation/cli/internal/cmd/terminate.go

67 lines
2.0 KiB
Go
Raw Normal View History

/*
Copyright (c) Edgeless Systems GmbH
SPDX-License-Identifier: AGPL-3.0-only
*/
package cmd
import (
"errors"
"fmt"
"io/fs"
"github.com/spf13/afero"
"github.com/spf13/cobra"
2022-03-29 09:38:14 +00:00
"go.uber.org/multierr"
2022-09-21 11:47:57 +00:00
"github.com/edgelesssys/constellation/v2/cli/internal/cloudcmd"
"github.com/edgelesssys/constellation/v2/internal/constants"
"github.com/edgelesssys/constellation/v2/internal/file"
)
2022-06-08 06:14:28 +00:00
// NewTerminateCmd returns a new cobra.Command for the terminate command.
func NewTerminateCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "terminate",
2022-05-09 15:02:47 +00:00
Short: "Terminate a Constellation cluster",
Long: "Terminate a Constellation cluster. The cluster can't be started again, and all persistent storage will be lost.",
Args: cobra.NoArgs,
RunE: runTerminate,
}
return cmd
}
// runTerminate runs the terminate command.
func runTerminate(cmd *cobra.Command, args []string) error {
fileHandler := file.NewHandler(afero.NewOsFs())
spinner := newSpinner(cmd.OutOrStdout())
2022-10-07 17:35:07 +00:00
defer spinner.Stop()
2022-04-13 11:01:38 +00:00
terminator := cloudcmd.NewTerminator()
2022-10-07 17:35:07 +00:00
return terminate(cmd, terminator, fileHandler, spinner)
}
2022-10-07 17:35:07 +00:00
func terminate(cmd *cobra.Command, terminator cloudTerminator, fileHandler file.Handler, spinner spinnerInterf,
) error {
spinner.Start("Terminating", false)
err := terminator.Terminate(cmd.Context())
spinner.Stop()
if err != nil {
return fmt.Errorf("terminating Constellation cluster: %w", err)
}
2022-05-04 07:13:46 +00:00
cmd.Println("Your Constellation cluster was terminated successfully.")
2022-03-29 09:38:14 +00:00
var retErr error
2022-04-06 08:36:58 +00:00
if err := fileHandler.Remove(constants.AdminConfFilename); err != nil && !errors.Is(err, fs.ErrNotExist) {
retErr = multierr.Append(err, fmt.Errorf("failed to remove file: '%s', please remove it manually", constants.AdminConfFilename))
}
2022-03-29 09:38:14 +00:00
2022-07-05 11:59:46 +00:00
if err := fileHandler.Remove(constants.ClusterIDsFileName); err != nil && !errors.Is(err, fs.ErrNotExist) {
retErr = multierr.Append(err, fmt.Errorf("failed to remove file: '%s', please remove it manually", constants.ClusterIDsFileName))
}
2022-03-29 09:38:14 +00:00
return retErr
}