101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
package farm
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/containers/common/pkg/config"
|
|
"github.com/containers/podman/v5/cmd/podman/common"
|
|
"github.com/containers/podman/v5/cmd/podman/registry"
|
|
"github.com/containers/podman/v5/cmd/podman/validate"
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
farmRmDescription = `Remove one or more existing farms.`
|
|
rmCommand = &cobra.Command{
|
|
Use: "remove [options] [FARM...]",
|
|
Aliases: []string{"rm"},
|
|
Short: "Remove one or more farms",
|
|
Long: farmRmDescription,
|
|
PersistentPreRunE: validate.NoOp,
|
|
RunE: rm,
|
|
PersistentPostRunE: validate.NoOp,
|
|
ValidArgsFunction: common.AutoCompleteFarms,
|
|
Example: `podman farm rm myfarm1 myfarm2
|
|
podman farm rm --all`,
|
|
}
|
|
|
|
// Temporary struct to hold cli values.
|
|
rmOpts = struct {
|
|
All bool
|
|
}{}
|
|
)
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: rmCommand,
|
|
Parent: farmCmd,
|
|
})
|
|
flags := rmCommand.Flags()
|
|
flags.BoolVarP(&rmOpts.All, "all", "a", false, "Remove all farms")
|
|
}
|
|
|
|
func rm(cmd *cobra.Command, args []string) error {
|
|
deletedFarms := []string{}
|
|
err := config.EditConnectionConfig(func(cfg *config.ConnectionsFile) error {
|
|
if rmOpts.All {
|
|
cfg.Farm.List = make(map[string][]string)
|
|
cfg.Farm.Default = ""
|
|
return nil
|
|
}
|
|
|
|
// If the --all is not set, we require at least one arg
|
|
if len(args) == 0 {
|
|
return errors.New("requires at lease 1 arg(s), received 0")
|
|
}
|
|
|
|
if len(cfg.Farm.List) == 0 {
|
|
return errors.New("no existing farms; nothing to remove")
|
|
}
|
|
|
|
for _, k := range args {
|
|
if _, ok := cfg.Farm.List[k]; !ok {
|
|
logrus.Warnf("farm %q doesn't exist; nothing to remove", k)
|
|
continue
|
|
}
|
|
delete(cfg.Farm.List, k)
|
|
deletedFarms = append(deletedFarms, k)
|
|
if k == cfg.Farm.Default {
|
|
cfg.Farm.Default = ""
|
|
}
|
|
}
|
|
// Return error if none of the given farms were deleted
|
|
if len(deletedFarms) == 0 {
|
|
return fmt.Errorf("failed to delete farms %q", args)
|
|
}
|
|
|
|
// Set a new default farm if the current default farm has been removed
|
|
if cfg.Farm.Default == "" && cfg.Farm.List != nil {
|
|
for k := range cfg.Farm.List {
|
|
cfg.Farm.Default = k
|
|
break
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if rmOpts.All {
|
|
fmt.Println("All farms have been deleted")
|
|
return nil
|
|
}
|
|
|
|
for _, k := range deletedFarms {
|
|
fmt.Printf("Farm %q deleted\n", k)
|
|
}
|
|
return nil
|
|
}
|