...
1 package cli
2
3 import (
4 "context"
5 "flag"
6 "strings"
7
8 "github.com/peterbourgon/ff/v3/ffcli"
9
10 dashmgr "edge-infra.dev/pkg/lib/gcp/monitoring/dashboardmanager"
11 )
12
13 type deleteArgsT struct {
14 labels string
15 name string
16 }
17
18 var deleteArgs deleteArgsT
19 var deleteFlagSet = newDeleteFlagSet(&deleteArgs)
20
21 func newDeleteFlagSet(deleteArgs *deleteArgsT) *flag.FlagSet {
22 deletef := newFlagSet("delete")
23 deletef.StringVar(&deleteArgs.labels, "labels", "", "Deletes all dashboards that match the specified label(s). Multiple labels can be specified using a comma between each value.")
24 deletef.StringVar(&deleteArgs.name, "name", "", "Dashboard Name or Display Name to delete.\nNOTE: If a Display Name is used and multiple dashboards exist with the same name, all will be deleted.")
25 return deletef
26 }
27
28 var deleteCmd = &ffcli.Command{
29 Name: "delete",
30 ShortUsage: "delete [flags]",
31 ShortHelp: "Delete dashboard(s) from project",
32 LongHelp: strings.TrimSpace(`
33 Deletes dashboards in the project using either the specified dashboard name, display name, labels.
34 `),
35 FlagSet: withGlobalFlags(deleteFlagSet),
36 Exec: runDelete,
37 }
38
39 func runDelete(ctx context.Context, args []string) error {
40 if len(args) > 0 {
41 Fatalf("too many non-flag arguments: %q", args)
42 }
43 if !checkDeleteFlags() {
44 Println()
45 return flag.ErrHelp
46 }
47
48 client, err := dashmgr.New(ctx, projectID)
49 if err != nil {
50 return err
51 }
52
53
54 if len(deleteArgs.labels) > 0 {
55 labels := strArray(deleteArgs.labels)
56 for i := 0; i < len(labels); i++ {
57 err = client.DeleteDashboardsByLabel(labels[i])
58 if err != nil {
59 return err
60 }
61 }
62 return nil
63 }
64
65
66 if len(deleteArgs.name) > 0 {
67 return client.DeleteDashboard(deleteArgs.name)
68 }
69
70 return nil
71 }
72
73
74 func checkDeleteFlags() bool {
75 if len(projectID) == 0 {
76 Println("Error: no value specified for [project] - a valid project-id is required")
77 return false
78 }
79
80 if len(deleteArgs.name) == 0 && len(deleteArgs.labels) == 0 {
81 Println("Error: no value specified for [name] or [labels] - please provide a value for one of the delete action parameters")
82 return false
83 }
84
85 if len(deleteArgs.name) > 0 && len(deleteArgs.labels) > 0 {
86 Println("Error: values provided for both [name] and [labels] - please specify dashboard [name] or [labels] to perform a delete action on, not both")
87 }
88
89 return true
90 }
91
View as plain text