From e6e5ad9753326479974d316c4ec19a8d34d283df Mon Sep 17 00:00:00 2001 From: Toms Zacharia Date: Thu, 12 Sep 2024 13:45:23 -0400 Subject: [PATCH 1/5] Added new flag to get count of services --- src/cmd/service.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cmd/service.go b/src/cmd/service.go index 233370d2..2f3c4c79 100644 --- a/src/cmd/service.go +++ b/src/cmd/service.go @@ -92,6 +92,10 @@ var listServiceCmd = &cobra.Command{ client := getClientGQL() resp, err := client.ListServices(nil) cobra.CheckErr(err) + if ok, _ := cmd.Flags().GetBool("count"); ok { + fmt.Println(len(resp.Nodes)) + return + } for _, service := range resp.Nodes { if !isJsonOutput() { list = append(list, service) @@ -249,6 +253,7 @@ func init() { listServiceCmd.PersistentFlags().Bool("dependencies", false, "Include dependencies of each service") listServiceCmd.PersistentFlags().Bool("dependents", false, "Include dependents of each service") listServiceCmd.PersistentFlags().Bool("properties", false, "Include properties of each service") + listServiceCmd.PersistentFlags().Bool("count", false, "Print the service count") importCmd.AddCommand(importServicesCmd) } From 102150759e677749bcffdebef8d771ff02f83c67 Mon Sep 17 00:00:00 2001 From: Toms Zacharia Date: Tue, 12 Nov 2024 07:25:08 -0500 Subject: [PATCH 2/5] Added support to delete users via import csv --- src/cmd/user.go | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/src/cmd/user.go b/src/cmd/user.go index 452135d6..d6750e12 100644 --- a/src/cmd/user.go +++ b/src/cmd/user.go @@ -99,13 +99,15 @@ var listUserCmd = &cobra.Command{ Example: ` opslevel list user opslevel list user --ignore-deactivated +opslevel list user --deactivated opslevel list user -o json | jq 'map({"key": .Name, "value": .Role}) | from_entries' `, Run: func(cmd *cobra.Command, args []string) { - // payloadVars should remain nil if '--ignore-deactivated' not set + // payloadVars should remain nil if '--ignore-deactivated' or --deactivated not set var payloadVars *opslevel.PayloadVariables ignoreDeactivated, err := cmd.Flags().GetBool("ignore-deactivated") + // deactivated, err := cmd.Flags().GetBool("deactivated") cobra.CheckErr(err) client := getClientGQL() @@ -113,6 +115,10 @@ opslevel list user -o json | jq 'map({"key": .Name, "value": .Role}) | from_entr payloadVars = client.InitialPageVariablesPointer().WithoutDeactivedUsers() } + //if deactivated { + // payloadVars = client.InitialPageVariablesPointer().DeactivedUsers() + //} + resp, err := getClientGQL().ListUsers(payloadVars) cobra.CheckErr(err) list := resp.Nodes @@ -215,9 +221,45 @@ EOF }, } +var bulkDeleteUsersCmd = &cobra.Command{ + Use: "delete users", + Aliases: []string{"bulk delete users"}, + Short: "Deletes users from a CSV", + Long: `Deletes a list of users from a CSV file with the column headers: +Email`, + Example: ` +cat << EOF | opslevel import delete users -f - +Email +kyle@opslevel.com +toms@opslevel.com +ian@opslevel.com +EOF +`, + Run: func(cmd *cobra.Command, args []string) { + reader, err := readImportFilepathAsCSV() + cobra.CheckErr(err) + for reader.Rows() { + email := reader.Text("Email") + if email == "" { + log.Error().Msgf("user has invalid email '%s'", email) + continue + } else { + err := getClientGQL().DeleteUser(email) + if err != nil { + log.Error().Err(err).Msgf("error deleting user '%s'", email) + continue + } else { + log.Info().Msgf("deleted user '%s'", email) + } + } + } + }, +} + func init() { createUserCmd.Flags().Bool("skip-welcome-email", false, "If this flag is set the welcome e-mail will be skipped from being sent") listUserCmd.Flags().Bool("ignore-deactivated", false, "If this flag is set only return active users") + //listUserCmd.Flags().Bool("deactivated", false, "If this flag is set only return deactivated users") exampleCmd.AddCommand(exampleUserCmd) createCmd.AddCommand(createUserCmd) @@ -226,4 +268,5 @@ func init() { listCmd.AddCommand(listUserCmd) deleteCmd.AddCommand(deleteUserCmd) importCmd.AddCommand(importUsersCmd) + importCmd.AddCommand(bulkDeleteUsersCmd) } From 18cea962d7aa0662e0217cf7e969aa9a7739bf6c Mon Sep 17 00:00:00 2001 From: Toms Zacharia Date: Tue, 12 Nov 2024 07:30:19 -0500 Subject: [PATCH 3/5] Removed unecessary comments --- src/cmd/user.go | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/cmd/user.go b/src/cmd/user.go index d6750e12..70a62ad5 100644 --- a/src/cmd/user.go +++ b/src/cmd/user.go @@ -99,15 +99,13 @@ var listUserCmd = &cobra.Command{ Example: ` opslevel list user opslevel list user --ignore-deactivated -opslevel list user --deactivated opslevel list user -o json | jq 'map({"key": .Name, "value": .Role}) | from_entries' `, Run: func(cmd *cobra.Command, args []string) { - // payloadVars should remain nil if '--ignore-deactivated' or --deactivated not set + // payloadVars should remain nil if '--ignore-deactivated' var payloadVars *opslevel.PayloadVariables ignoreDeactivated, err := cmd.Flags().GetBool("ignore-deactivated") - // deactivated, err := cmd.Flags().GetBool("deactivated") cobra.CheckErr(err) client := getClientGQL() @@ -115,10 +113,6 @@ opslevel list user -o json | jq 'map({"key": .Name, "value": .Role}) | from_entr payloadVars = client.InitialPageVariablesPointer().WithoutDeactivedUsers() } - //if deactivated { - // payloadVars = client.InitialPageVariablesPointer().DeactivedUsers() - //} - resp, err := getClientGQL().ListUsers(payloadVars) cobra.CheckErr(err) list := resp.Nodes @@ -259,7 +253,6 @@ EOF func init() { createUserCmd.Flags().Bool("skip-welcome-email", false, "If this flag is set the welcome e-mail will be skipped from being sent") listUserCmd.Flags().Bool("ignore-deactivated", false, "If this flag is set only return active users") - //listUserCmd.Flags().Bool("deactivated", false, "If this flag is set only return deactivated users") exampleCmd.AddCommand(exampleUserCmd) createCmd.AddCommand(createUserCmd) From 5d234a28c7f83188070d8511c108e52e12806f5f Mon Sep 17 00:00:00 2001 From: Toms Zacharia Date: Tue, 12 Nov 2024 07:44:11 -0500 Subject: [PATCH 4/5] Removed unecessary comments. The change includes an update to get service count using the flag --count --- src/cmd/user.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/user.go b/src/cmd/user.go index 70a62ad5..9a2c39f7 100644 --- a/src/cmd/user.go +++ b/src/cmd/user.go @@ -102,7 +102,7 @@ opslevel list user --ignore-deactivated opslevel list user -o json | jq 'map({"key": .Name, "value": .Role}) | from_entries' `, Run: func(cmd *cobra.Command, args []string) { - // payloadVars should remain nil if '--ignore-deactivated' + // payloadVars should remain nil if '--ignore-deactivated' not set var payloadVars *opslevel.PayloadVariables ignoreDeactivated, err := cmd.Flags().GetBool("ignore-deactivated") From 2b2392b1513a0ee5ae454a9bdd2f867c9bb3613b Mon Sep 17 00:00:00 2001 From: Toms Zacharia Date: Tue, 12 Nov 2024 10:40:58 -0500 Subject: [PATCH 5/5] Added changie --- .changes/unreleased/Feature-20241112-102508.yaml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changes/unreleased/Feature-20241112-102508.yaml diff --git a/.changes/unreleased/Feature-20241112-102508.yaml b/.changes/unreleased/Feature-20241112-102508.yaml new file mode 100644 index 00000000..369f3333 --- /dev/null +++ b/.changes/unreleased/Feature-20241112-102508.yaml @@ -0,0 +1,3 @@ +kind: Feature +body: Added count flag for services list. Added user delete on import csv +time: 2024-11-12T10:25:08.084783-05:00