mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-09-21 07:24:19 +00:00
add support for bulk deletion to ark schedule delete
refactor and move DeleteOptions struct and methods unexport fields not used outside the package in DeleteOptions struct refactor BindFlags() to work with name of command fix constructor Signed-off-by: Shubheksha Jalan <jshubheksha@gmail.com>
This commit is contained in:
@@ -19,29 +19,99 @@ package schedule
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
kubeerrs "k8s.io/apimachinery/pkg/util/errors"
|
||||
|
||||
arkv1api "github.com/heptio/ark/pkg/apis/ark/v1"
|
||||
"github.com/heptio/ark/pkg/client"
|
||||
"github.com/heptio/ark/pkg/cmd"
|
||||
"github.com/heptio/ark/pkg/cmd/cli"
|
||||
)
|
||||
|
||||
// NewDeleteCommand creates and returns a new cobra command for deleting schedules.
|
||||
func NewDeleteCommand(f client.Factory, use string) *cobra.Command {
|
||||
o := cli.NewDeleteOptions("schedule")
|
||||
|
||||
c := &cobra.Command{
|
||||
Use: fmt.Sprintf("%s NAME", use),
|
||||
Short: "Delete a schedule",
|
||||
Args: cobra.ExactArgs(1),
|
||||
Use: fmt.Sprintf("%s [NAMES]", use),
|
||||
Short: "Delete schedules",
|
||||
Example: ` # delete a schedule named "schedule-1"
|
||||
ark schedule delete schedule-1
|
||||
|
||||
# delete a schedule named "schedule-1" without prompting for confirmation
|
||||
ark schedule delete schedule-1 --confirm
|
||||
|
||||
# delete schedules named "schedule-1" and "schedule-2"
|
||||
ark schedule delete schedule-1 schedule-2
|
||||
|
||||
# delete all schedules labelled with foo=bar"
|
||||
ark schedule delete --selector foo=bar
|
||||
|
||||
# delete all schedules
|
||||
ark schedule delete --all`,
|
||||
|
||||
Run: func(c *cobra.Command, args []string) {
|
||||
arkClient, err := f.Client()
|
||||
cmd.CheckError(err)
|
||||
|
||||
name := args[0]
|
||||
|
||||
err = arkClient.ArkV1().Schedules(f.Namespace()).Delete(name, nil)
|
||||
cmd.CheckError(err)
|
||||
|
||||
fmt.Printf("Schedule %q deleted\n", name)
|
||||
cmd.CheckError(o.Complete(f, args))
|
||||
cmd.CheckError(o.Validate(c, f, args))
|
||||
cmd.CheckError(Run(o))
|
||||
},
|
||||
}
|
||||
|
||||
o.BindFlags(c.Flags())
|
||||
return c
|
||||
}
|
||||
|
||||
// Run performs the deletion of schedules.
|
||||
func Run(o *cli.DeleteOptions) error {
|
||||
if !o.Confirm && !cli.GetConfirmation() {
|
||||
return nil
|
||||
}
|
||||
var (
|
||||
schedules []*arkv1api.Schedule
|
||||
errs []error
|
||||
)
|
||||
switch {
|
||||
case len(o.Names) > 0:
|
||||
for _, name := range o.Names {
|
||||
schedule, err := o.Client.ArkV1().Schedules(o.Namespace).Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
errs = append(errs, errors.WithStack(err))
|
||||
continue
|
||||
}
|
||||
schedules = append(schedules, schedule)
|
||||
}
|
||||
default:
|
||||
selector := labels.Everything().String()
|
||||
if o.Selector.LabelSelector != nil {
|
||||
selector = o.Selector.String()
|
||||
}
|
||||
res, err := o.Client.ArkV1().Schedules(o.Namespace).List(metav1.ListOptions{
|
||||
LabelSelector: selector,
|
||||
})
|
||||
if err != nil {
|
||||
errs = append(errs, errors.WithStack(err))
|
||||
}
|
||||
|
||||
for i := range res.Items {
|
||||
schedules = append(schedules, &res.Items[i])
|
||||
}
|
||||
}
|
||||
if len(schedules) == 0 {
|
||||
fmt.Println("No schedules found")
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, s := range schedules {
|
||||
err := o.Client.ArkV1().Schedules(s.Namespace).Delete(s.Name, nil)
|
||||
if err != nil {
|
||||
errs = append(errs, errors.WithStack(err))
|
||||
continue
|
||||
}
|
||||
fmt.Printf("Schedule deleted: %v/n", s.Name)
|
||||
}
|
||||
return kubeerrs.NewAggregate(errs)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user