From ff192ce72c9d4e5dc5a13418707cdf3430c0b746 Mon Sep 17 00:00:00 2001 From: mrrishi Date: Sun, 7 Sep 2025 20:39:10 +0530 Subject: [PATCH] feat: add custom api url to search against --- cmd/apikey/apikey.go | 7 +- cmd/apikey/apikey_current.go | 17 +- cmd/apikey/apikey_list.go | 4 +- cmd/apikey/apikey_remove.go | 17 +- cmd/apikey/apikey_save.go | 26 ++- cmd/apikey/apikey_show.go | 24 ++- cmd/database/database.go | 6 +- cmd/database/database_backup.go | 6 +- cmd/database/database_backup_delete.go | 161 +++++++++--------- cmd/database/database_create.go | 6 +- cmd/database/database_delete.go | 3 +- cmd/database/database_restore.go | 4 +- cmd/diskimage/disk_image_create.go | 16 +- cmd/domain/domain.go | 2 - cmd/domain/domain_list.go | 4 +- cmd/domain/domain_record_create.go | 6 +- cmd/domain/domain_record_list.go | 2 - cmd/domain/domain_record_remove.go | 147 ++++++++-------- cmd/domain/domain_record_show.go | 8 +- cmd/domain/domain_remove.go | 133 ++++++++------- cmd/firewall/firewall_create.go | 10 +- cmd/firewall/firewall_remove.go | 139 +++++++-------- cmd/firewall/firewall_rule_create.go | 3 +- cmd/firewall/firewall_rule_list.go | 2 +- cmd/firewall/firewall_rule_remove.go | 144 ++++++++-------- cmd/instance/instance.go | 1 - cmd/instance/instance_create.go | 18 +- cmd/instance/instance_remove.go | 138 +++++++-------- cmd/instance/instance_stop.go | 120 ++++++------- cmd/ip/ip_unassign.go | 1 - cmd/kubernetes/kubernetes.go | 3 - cmd/kubernetes/kubernetes_ recycle.go | 3 - cmd/kubernetes/kubernetes_app_remove.go | 1 - cmd/kubernetes/kubernetes_app_show.go | 1 - cmd/kubernetes/kubernetes_config.go | 7 +- cmd/kubernetes/kubernetes_create.go | 18 +- cmd/kubernetes/kubernetes_list.go | 7 +- cmd/kubernetes/kubernetes_list_version.go | 5 +- cmd/kubernetes/kubernetes_nodepool_create.go | 8 +- cmd/kubernetes/kubernetes_nodepool_delete.go | 156 ++++++++--------- .../kubernetes_nodepool_instance_list.go | 1 - cmd/kubernetes/kubernetes_remove.go | 6 +- cmd/kubernetes/kubernetes_show.go | 6 +- cmd/kubernetes/kubernetes_test.go | 2 +- cmd/loadbalancer/loadbalancer.go | 7 +- cmd/network/network_remove.go | 146 ++++++++-------- cmd/objectstore/objectstore.go | 11 +- cmd/objectstore/objectstore_create.go | 8 +- .../objectstore_credential_delete.go | 149 ++++++++-------- cmd/objectstore/objectstore_delete.go | 149 ++++++++-------- cmd/region/region_current.go | 90 +++++----- cmd/size/size_list.go | 2 +- cmd/snapshot/snapshot_schedule_create.go | 10 +- cmd/snapshot/snapshot_schedule_update.go | 6 +- cmd/sshkey/ssh_key_create.go | 2 +- cmd/sshkey/ssh_key_find.go | 3 +- cmd/sshkey/ssh_key_remove.go | 128 +++++++------- cmd/sshkey/ssh_key_update.go | 3 +- cmd/teams/teams_create.go | 1 - cmd/teams/teams_delete.go | 126 +++++++------- cmd/teams/teams_rename.go | 1 - cmd/update.go | 99 ++++++----- cmd/volume/volume_attach.go | 6 +- cmd/volume/volume_remove.go | 146 ++++++++-------- cmd/volumetype/volumetype.go | 1 + cmd/volumetype/volumetype_list.go | 7 +- config/config.go | 46 +++-- go.sum | 23 --- utility/check.go | 21 +-- utility/color_util.go | 2 - utility/kubernetes.go | 10 +- utility/output_writer.go | 11 +- utility/random.go | 3 +- 73 files changed, 1324 insertions(+), 1292 deletions(-) diff --git a/cmd/apikey/apikey.go b/cmd/apikey/apikey.go index 6317970a..dae4d122 100644 --- a/cmd/apikey/apikey.go +++ b/cmd/apikey/apikey.go @@ -27,9 +27,9 @@ between them when required.`, func apiKeyFind(search string) (string, error) { var result string - for key, value := range config.Current.APIKeys { - if key == search || value == search { - result = key + for _, apiKey := range config.Current.APIKeys { + if apiKey.Name == search { + result = apiKey.Name } } @@ -41,7 +41,6 @@ func apiKeyFind(search string) (string, error) { } func init() { - config.SkipAPIInitialization = true APIKeyCmd.AddCommand(apikeyListCmd) diff --git a/cmd/apikey/apikey_current.go b/cmd/apikey/apikey_current.go index 6e545f88..1ee82f2a 100644 --- a/cmd/apikey/apikey_current.go +++ b/cmd/apikey/apikey_current.go @@ -15,17 +15,24 @@ var apikeyCurrentCmd = &cobra.Command{ Short: "Set the current API key", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - index, err := apiKeyFind(args[0]) + apiKeyName, err := apiKeyFind(args[0]) if err != nil { utility.Error("Unable to find the API key %s", err.Error()) os.Exit(1) } - if index != "" { - config.Current.Meta.CurrentAPIKey = index + if apiKeyName != "" { + var idx int + for index, apiKey := range config.Current.APIKeys { + if apiKeyName == apiKey.Name { + idx = index + break + } + } + config.Current.Meta.CurrentAPIKey = config.Current.APIKeys[idx].Name + config.Current.Meta.URL = config.Current.APIKeys[idx].APIURL config.SaveConfig() - fmt.Printf("Set the default API Key to be %s\n", utility.Green(index)) + fmt.Printf("Set the default API Key to be %s\n", utility.Green(apiKeyName)) } - }, } diff --git a/cmd/apikey/apikey_list.go b/cmd/apikey/apikey_list.go index 013eb5ea..03b90d6b 100644 --- a/cmd/apikey/apikey_list.go +++ b/cmd/apikey/apikey_list.go @@ -21,8 +21,8 @@ If you wish to use a custom format, the available fields are: Example: civo apikey ls -o custom -f "Name: Key"`, Run: func(cmd *cobra.Command, args []string) { keys := make([]string, 0, len(config.Current.APIKeys)) - for k := range config.Current.APIKeys { - keys = append(keys, k) + for _, k := range config.Current.APIKeys { + keys = append(keys, k.Name) } sort.Strings(keys) diff --git a/cmd/apikey/apikey_remove.go b/cmd/apikey/apikey_remove.go index 29abbb6d..209970d0 100644 --- a/cmd/apikey/apikey_remove.go +++ b/cmd/apikey/apikey_remove.go @@ -19,14 +19,14 @@ var apikeyRemoveCmd = &cobra.Command{ Args: cobra.MinimumNArgs(1), Example: "civo apikey remove NAME", Run: func(cmd *cobra.Command, args []string) { - index, err := apiKeyFind(args[0]) + apiKeyName, err := apiKeyFind(args[0]) if err != nil { utility.Error("Unable to find the API key %s", err.Error()) os.Exit(1) } // Check if the requested API key is the current one - if index == config.Current.Meta.CurrentAPIKey { + if apiKeyName == config.Current.Meta.CurrentAPIKey { if forceFlag { utility.Warning("The API key %q is the current one. You are using the --force flag, so it will be deleted.", args[0]) } else { @@ -37,11 +37,19 @@ var apikeyRemoveCmd = &cobra.Command{ // Confirm deletion of the API key if forceFlag || utility.UserConfirmedDeletion("API key", common.DefaultYes, args[0]) { numKeys := len(config.Current.APIKeys) - delete(config.Current.APIKeys, index) + var index int + for idx, apiKey := range config.Current.APIKeys { + if apiKey.Name == apiKeyName { + index = idx + break + } + } + // delete(config.Current.APIKeys, index) + config.Current.APIKeys = append(config.Current.APIKeys[:index], config.Current.APIKeys[index+1:]...) config.SaveConfig() if numKeys > len(config.Current.APIKeys) { - fmt.Printf("Removed the API Key %s\n", utility.Green(index)) + fmt.Printf("Removed the API Key %s\n", utility.Green(apiKeyName)) } else { utility.Error("The API Key %q couldn't be found", args[0]) os.Exit(1) @@ -49,6 +57,5 @@ var apikeyRemoveCmd = &cobra.Command{ } else { fmt.Println("Operation aborted.") } - }, } diff --git a/cmd/apikey/apikey_save.go b/cmd/apikey/apikey_save.go index 08c3b8a1..737fbf25 100644 --- a/cmd/apikey/apikey_save.go +++ b/cmd/apikey/apikey_save.go @@ -20,7 +20,7 @@ var apikeySaveCmdExample = `* Interactive way: civo apikey save * Non-interactive way: - civo apikey save NAME APIKEY + civo apikey save NAME APIKEY APIURL * Load from environment variables way: civo apikey save --load-from-env @@ -43,8 +43,7 @@ var apikeySaveCmd = &cobra.Command{ Short: "Save a new API key", Example: apikeySaveCmdExample, Run: func(cmd *cobra.Command, args []string) { - - var name, apiKey string + var name, apiKey, apiURL string var err error // if arg is more than two, return an error @@ -79,7 +78,22 @@ var apikeySaveCmd = &cobra.Command{ utility.Error("Error reading api key %v", err) os.Exit(1) } + fmt.Println() apiKey = string(apikeyBytes) + fmt.Printf("Enter the API URL key: (default is %s): ", config.DefaultAPIURL) + apiURL, err = reader.ReadString('\n') + if err != nil { + utility.Error("Error reading name %v", err) + os.Exit(1) + } + if runtime.GOOS == "windows" { + apiURL = strings.TrimSuffix(apiURL, "\r\n") + } else { + apiURL = strings.TrimSuffix(apiURL, "\n") + } + if len(apiURL) == 0 { + apiURL = config.DefaultAPIURL + } } if len(args) == 2 && !loadAPIKeyFromEnv { @@ -110,9 +124,9 @@ var apikeySaveCmd = &cobra.Command{ apiKey = apiKeyEnv } - config.Current.APIKeys[name] = apiKey + config.Current.APIKeys = append(config.Current.APIKeys, config.APIKey{Name: name, Value: apiKey, APIURL: apiURL}) if config.Current.Meta.DefaultRegion == "" { - client, err := civogo.NewClientWithURL(apiKey, config.Current.Meta.URL, "") + client, err := civogo.NewClientWithURL(apiKey, apiURL, "") if err != nil { utility.Error("Unable to create a Civo API client, please report this at https://github.com/civo/cli") os.Exit(1) @@ -129,6 +143,7 @@ var apikeySaveCmd = &cobra.Command{ if len(config.Current.APIKeys) == 1 { config.Current.Meta.CurrentAPIKey = name + config.Current.Meta.URL = apiURL config.SaveConfig() } @@ -142,6 +157,5 @@ var apikeySaveCmd = &cobra.Command{ default: fmt.Printf("Saved the API Key %s\n", utility.Green(name)) } - }, } diff --git a/cmd/apikey/apikey_show.go b/cmd/apikey/apikey_show.go index 304c6ded..36ff1ef1 100644 --- a/cmd/apikey/apikey_show.go +++ b/cmd/apikey/apikey_show.go @@ -23,26 +23,34 @@ If you wish to use a custom format, the available fields are: `, Run: func(cmd *cobra.Command, args []string) { keys := make([]string, 0, len(config.Current.APIKeys)) - for k := range config.Current.APIKeys { - keys = append(keys, k) + for _, apiKey := range config.Current.APIKeys { + keys = append(keys, apiKey.Name) } sort.Strings(keys) ow := utility.NewOutputWriter() - for _, name := range keys { - apiKey := config.Current.APIKeys[name] + var idx int + for index, apiKey := range config.Current.APIKeys { + if name == apiKey.Name { + idx = index + break + } + } + apiKey := config.Current.APIKeys[idx] if len(args) > 0 { if strings.Contains(name, args[0]) { ow.StartLine() - ow.AppendDataWithLabel("name", name, "Name") - ow.AppendDataWithLabel("key", apiKey, "Key") + ow.AppendDataWithLabel("name", apiKey.Name, "Name") + ow.AppendDataWithLabel("key", apiKey.Value, "Key") + ow.AppendDataWithLabel("url", apiKey.APIURL, "APIURL") } } else { if config.Current.Meta.CurrentAPIKey == name { ow.StartLine() - ow.AppendDataWithLabel("name", name, "Name") - ow.AppendDataWithLabel("key", apiKey, "Key") + ow.AppendDataWithLabel("name", apiKey.Name, "Name") + ow.AppendDataWithLabel("key", apiKey.Value, "Key") + ow.AppendDataWithLabel("url", apiKey.APIURL, "APIURL") } } } diff --git a/cmd/database/database.go b/cmd/database/database.go index 75e0c4d3..2f6210e1 100644 --- a/cmd/database/database.go +++ b/cmd/database/database.go @@ -7,8 +7,10 @@ import ( "github.com/spf13/cobra" ) -var firewallID, networkID, size, updatedName, software, softwareVersion string -var nodes int +var ( + firewallID, networkID, size, updatedName, software, softwareVersion string + nodes int +) // DBCmd is the root command for the db subcommand var DBCmd = &cobra.Command{ diff --git a/cmd/database/database_backup.go b/cmd/database/database_backup.go index 82b9a876..f27b9b5d 100644 --- a/cmd/database/database_backup.go +++ b/cmd/database/database_backup.go @@ -6,8 +6,10 @@ import ( "github.com/spf13/cobra" ) -var name, schedule, backupType string -var scheduled bool +var ( + name, schedule, backupType string + scheduled bool +) // dbBackupCmd is the root command for the db backup subcommand var dbBackupCmd = &cobra.Command{ diff --git a/cmd/database/database_backup_delete.go b/cmd/database/database_backup_delete.go index 3f2b951b..cd52850d 100644 --- a/cmd/database/database_backup_delete.go +++ b/cmd/database/database_backup_delete.go @@ -3,6 +3,7 @@ package database import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,106 +12,106 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var backupList []utility.ObjecteList -var dbBackupDeleteCmd = &cobra.Command{ - Use: "delete", - Aliases: []string{"rm", "remove", "destroy"}, - Short: "Delete a manual database backup or scheduled backups", - Example: "civo database backup delete \ncivo database backup delete --scheduled", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() +var ( + backupList []utility.ObjecteList + dbBackupDeleteCmd = &cobra.Command{ + Use: "delete", + Aliases: []string{"rm", "remove", "destroy"}, + Short: "Delete a manual database backup or scheduled backups", + Example: "civo database backup delete \ncivo database backup delete --scheduled", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } + client, err := config.CivoAPIClient() + if err != nil { + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) + } - if common.RegionSet != "" { - client.Region = common.RegionSet - } + if common.RegionSet != "" { + client.Region = common.RegionSet + } - if scheduled { - backupList = append(backupList, utility.ObjecteList{ID: "scheduled", Name: "scheduled backups"}) - } else { - if len(args) == 2 { - bk, err := client.FindDatabaseBackup(args[0], args[1]) - if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s Database in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one database with that name in your account") - os.Exit(1) - } - } - backupList = append(backupList, utility.ObjecteList{ID: bk.ID, Name: bk.Name}) + if scheduled { + backupList = append(backupList, utility.ObjecteList{ID: "scheduled", Name: "scheduled backups"}) } else { - for idx, v := range args { - if idx == 0 { - continue + if len(args) == 2 { + bk, err := client.FindDatabaseBackup(args[0], args[1]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s Database in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one database with that name in your account") + os.Exit(1) + } } - bk, err := client.FindDatabaseBackup(args[0], v) - if err == nil { - backupList = append(backupList, utility.ObjecteList{ID: bk.ID, Name: bk.Name}) + backupList = append(backupList, utility.ObjecteList{ID: bk.ID, Name: bk.Name}) + } else { + for idx, v := range args { + if idx == 0 { + continue + } + bk, err := client.FindDatabaseBackup(args[0], v) + if err == nil { + backupList = append(backupList, utility.ObjecteList{ID: bk.ID, Name: bk.Name}) + } } } } - } - dbNameList := []string{} - for _, v := range backupList { - dbNameList = append(dbNameList, v.Name) - } + dbNameList := []string{} + for _, v := range backupList { + dbNameList = append(dbNameList, v.Name) + } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(backupList), "Database Backup"), common.DefaultYes, strings.Join(dbNameList, ", ")) { + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(backupList), "Database Backup"), common.DefaultYes, strings.Join(dbNameList, ", ")) { - for _, v := range backupList { - dbId := v.ID - if !scheduled { - db, err := client.FindDatabaseBackup(args[0], dbId) + for _, v := range backupList { + dbId := v.ID + if !scheduled { + db, err := client.FindDatabaseBackup(args[0], dbId) + if err != nil { + utility.Error("%s", err) + os.Exit(1) + } + dbId = db.ID + } + _, err = client.DeleteDatabaseBackup(args[0], dbId) if err != nil { - utility.Error("%s", err) + utility.Error("Error deleting the Database backup: %s", err) os.Exit(1) } - dbId = db.ID } - _, err = client.DeleteDatabaseBackup(args[0], dbId) - if err != nil { - utility.Error("Error deleting the Database backup: %s", err) - os.Exit(1) - } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range backupList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("backup", v.Name, "Backup") - } + for _, v := range backupList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("backup", v.Name, "Backup") + } - switch common.OutputFormat { - case "json": - if len(backupList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(backupList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(backupList), "database backup"), utility.Green(strings.Join(dbNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(backupList), "database backup"), utility.Green(strings.Join(dbNameList, ", "))) + } else { + fmt.Println("Operation aborted") } - } else { - fmt.Println("Operation aborted") - } - }, -} + }, + } +) diff --git a/cmd/database/database_create.go b/cmd/database/database_create.go index 8657b9dc..802f6ed6 100644 --- a/cmd/database/database_create.go +++ b/cmd/database/database_create.go @@ -14,8 +14,10 @@ import ( "github.com/spf13/cobra" ) -var rulesFirewall string -var waitDatabase bool +var ( + rulesFirewall string + waitDatabase bool +) var dbCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/database/database_delete.go b/cmd/database/database_delete.go index 1ea1e66b..ceb9deaa 100644 --- a/cmd/database/database_delete.go +++ b/cmd/database/database_delete.go @@ -3,6 +3,7 @@ package database import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,8 +12,6 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) diff --git a/cmd/database/database_restore.go b/cmd/database/database_restore.go index 0f10f228..c74a50ba 100644 --- a/cmd/database/database_restore.go +++ b/cmd/database/database_restore.go @@ -2,14 +2,13 @@ package database import ( "fmt" + "os" "github.com/civo/civogo" "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) @@ -72,6 +71,5 @@ var dbRestoreCmd = &cobra.Command{ } else { fmt.Println("Aborted") } - }, } diff --git a/cmd/diskimage/disk_image_create.go b/cmd/diskimage/disk_image_create.go index 1ffea9b5..1d3049a3 100644 --- a/cmd/diskimage/disk_image_create.go +++ b/cmd/diskimage/disk_image_create.go @@ -92,14 +92,14 @@ var diskImageCreateCmd = &cobra.Command{ } params := &civogo.CreateDiskImageParams{ - Name: createDiskImageName, - Distribution: createDiskImageDistribution, - Version: createDiskImageVersion, - OS: createOS, - ImageSHA256: sha256Sum, - ImageMD5: md5Sum, - ImageSizeBytes: size, - LogoBase64: logoBase64, + Name: createDiskImageName, + Distribution: createDiskImageDistribution, + Version: createDiskImageVersion, + OS: createOS, + ImageSHA256: sha256Sum, + ImageMD5: md5Sum, + ImageSizeBytes: size, + LogoBase64: logoBase64, } resp, err := client.CreateDiskImage(params) diff --git a/cmd/domain/domain.go b/cmd/domain/domain.go index ee7c5d0f..500aac18 100644 --- a/cmd/domain/domain.go +++ b/cmd/domain/domain.go @@ -34,7 +34,6 @@ var domainRecordCmd = &cobra.Command{ } func init() { - DomainCmd.AddCommand(domainListCmd) DomainCmd.AddCommand(domainCreateCmd) DomainCmd.AddCommand(domainRemoveCmd) @@ -54,5 +53,4 @@ func init() { domainRecordCreateCmd.Flags().StringVarP(&recordValue, "value", "v", "", "the value of the record") domainRecordCreateCmd.Flags().IntVarP(&recordTTL, "ttl", "t", 600, "The TTL of the record") domainRecordCreateCmd.Flags().IntVarP(&recordPriority, "priority", "p", 0, "the priority of record only for SRV and MX record") - } diff --git a/cmd/domain/domain_list.go b/cmd/domain/domain_list.go index c400616d..fe774983 100644 --- a/cmd/domain/domain_list.go +++ b/cmd/domain/domain_list.go @@ -1,11 +1,11 @@ package domain import ( + "os" + "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) diff --git a/cmd/domain/domain_record_create.go b/cmd/domain/domain_record_create.go index 59522dba..1b971b56 100644 --- a/cmd/domain/domain_record_create.go +++ b/cmd/domain/domain_record_create.go @@ -13,8 +13,10 @@ import ( "github.com/spf13/cobra" ) -var recordName, recordType, recordValue string -var recordTTL, recordPriority int +var ( + recordName, recordType, recordValue string + recordTTL, recordPriority int +) var domainRecordCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/domain/domain_record_list.go b/cmd/domain/domain_record_list.go index 896a128a..6bc1c2a1 100644 --- a/cmd/domain/domain_record_list.go +++ b/cmd/domain/domain_record_list.go @@ -83,7 +83,6 @@ func getDomainList(value string) []string { domainList = append(domainList, domain.Name) return domainList - } func getAllDomainList() []string { @@ -105,5 +104,4 @@ func getAllDomainList() []string { } return domainList - } diff --git a/cmd/domain/domain_record_remove.go b/cmd/domain/domain_record_remove.go index 098c26da..4a08939b 100644 --- a/cmd/domain/domain_record_remove.go +++ b/cmd/domain/domain_record_remove.go @@ -14,95 +14,96 @@ import ( "github.com/spf13/cobra" ) -var domainRecordList []utility.ObjecteList -var domainRecordRemoveCmd = &cobra.Command{ - Use: "remove [DOMAIN|DOMAIN_ID] [RECORD_ID]", - Aliases: []string{"delete", "destroy", "rm"}, - Args: cobra.MinimumNArgs(2), - Short: "Remove domain record", - Example: "civo domain record remove DOMAIN/DOMAIN_ID RECORD_ID", - ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - if len(args) == 0 { - return getAllDomainList(), cobra.ShellCompDirectiveNoFileComp - } - return getDomainList(toComplete), cobra.ShellCompDirectiveNoFileComp - }, - Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - domain, err := client.FindDNSDomain(args[0]) - if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s domain in your account", utility.Red(args[0])) - os.Exit(1) +var ( + domainRecordList []utility.ObjecteList + domainRecordRemoveCmd = &cobra.Command{ + Use: "remove [DOMAIN|DOMAIN_ID] [RECORD_ID]", + Aliases: []string{"delete", "destroy", "rm"}, + Args: cobra.MinimumNArgs(2), + Short: "Remove domain record", + Example: "civo domain record remove DOMAIN/DOMAIN_ID RECORD_ID", + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + if len(args) == 0 { + return getAllDomainList(), cobra.ShellCompDirectiveNoFileComp } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one domain with that name in your account") + return getDomainList(toComplete), cobra.ShellCompDirectiveNoFileComp + }, + Run: func(cmd *cobra.Command, args []string) { + client, err := config.CivoAPIClient() + if err != nil { + utility.Error("Creating the connection to Civo's API failed with %s", err) os.Exit(1) } - } - if len(args) == 2 { - record, err := client.GetDNSRecord(domain.ID, args[1]) + domain, err := client.FindDNSDomain(args[0]) if err != nil { - if errors.Is(err, civogo.ErrDNSRecordNotFound) { - utility.Error("sorry there is no %s domain record in your account", utility.Red(args[1])) + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s domain in your account", utility.Red(args[0])) os.Exit(1) } - } - domainRecordList = append(domainRecordList, utility.ObjecteList{ID: record.ID, Name: record.Name}) - } else { - for _, v := range args[1:] { - record, err := client.GetDNSRecord(domain.ID, v) - if err == nil { - domainRecordList = append(domainRecordList, utility.ObjecteList{ID: record.ID, Name: record.Name}) + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one domain with that name in your account") + os.Exit(1) } } - } - domainRecordNameList := []string{} - for _, v := range domainRecordList { - domainRecordNameList = append(domainRecordNameList, v.Name) - } - - if utility.UserConfirmedDeletion(fmt.Sprintf("domain %s", pluralize.Pluralize(len(domainRecordList), "record")), common.DefaultYes, strings.Join(domainRecordNameList, ", ")) { - - for _, v := range domainRecordList { - record, _ := client.GetDNSRecord(domain.ID, v.ID) - _, err = client.DeleteDNSRecord(record) + if len(args) == 2 { + record, err := client.GetDNSRecord(domain.ID, args[1]) if err != nil { - utility.Error("error deleting the DNS record: %s", err) - os.Exit(1) + if errors.Is(err, civogo.ErrDNSRecordNotFound) { + utility.Error("sorry there is no %s domain record in your account", utility.Red(args[1])) + os.Exit(1) + } + } + domainRecordList = append(domainRecordList, utility.ObjecteList{ID: record.ID, Name: record.Name}) + } else { + for _, v := range args[1:] { + record, err := client.GetDNSRecord(domain.ID, v) + if err == nil { + domainRecordList = append(domainRecordList, utility.ObjecteList{ID: record.ID, Name: record.Name}) + } } } - ow := utility.NewOutputWriter() - + domainRecordNameList := []string{} for _, v := range domainRecordList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("name", v.Name, "Name") + domainRecordNameList = append(domainRecordNameList, v.Name) } - switch common.OutputFormat { - case "json": - if len(domainRecordList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + if utility.UserConfirmedDeletion(fmt.Sprintf("domain %s", pluralize.Pluralize(len(domainRecordList), "record")), common.DefaultYes, strings.Join(domainRecordNameList, ", ")) { + + for _, v := range domainRecordList { + record, _ := client.GetDNSRecord(domain.ID, v.ID) + _, err = client.DeleteDNSRecord(record) + if err != nil { + utility.Error("error deleting the DNS record: %s", err) + os.Exit(1) + } } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The domain %s (%s) has been deleted\n", pluralize.Pluralize(len(domainRecordList), "record"), strings.Join(domainRecordNameList, ", ")) - } - } else { - fmt.Println("Operation aborted.") - } - }, -} + ow := utility.NewOutputWriter() + + for _, v := range domainRecordList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("name", v.Name, "Name") + } + + switch common.OutputFormat { + case "json": + if len(domainRecordList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The domain %s (%s) has been deleted\n", pluralize.Pluralize(len(domainRecordList), "record"), strings.Join(domainRecordNameList, ", ")) + } + } else { + fmt.Println("Operation aborted.") + } + }, + } +) diff --git a/cmd/domain/domain_record_show.go b/cmd/domain/domain_record_show.go index 948cc332..3a8c2342 100644 --- a/cmd/domain/domain_record_show.go +++ b/cmd/domain/domain_record_show.go @@ -1,15 +1,15 @@ package domain import ( + "os" + "strconv" + "time" + "github.com/civo/civogo" "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "strconv" - "time" - "github.com/spf13/cobra" ) diff --git a/cmd/domain/domain_remove.go b/cmd/domain/domain_remove.go index c61bbb85..215ad8c8 100644 --- a/cmd/domain/domain_remove.go +++ b/cmd/domain/domain_remove.go @@ -3,6 +3,7 @@ package domain import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,85 +12,85 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var domainList []utility.ObjecteList -var domainRemoveCmd = &cobra.Command{ - Use: "remove", - Aliases: []string{"rm", "delete", "destroy"}, - Short: "Remove a domain", - Example: "civo domain remove DOMAIN/DOMAIN_ID", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - domain, err := client.FindDNSDomain(args[0]) +var ( + domainList []utility.ObjecteList + domainRemoveCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"rm", "delete", "destroy"}, + Short: "Remove a domain", + Example: "civo domain remove DOMAIN/DOMAIN_ID", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s domain in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one domain with that name in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - domainList = append(domainList, utility.ObjecteList{ID: domain.ID, Name: domain.Name}) - } else { - for _, v := range args { - domain, err := client.FindDNSDomain(v) - if err == nil { - domainList = append(domainList, utility.ObjecteList{ID: domain.ID, Name: domain.Name}) + + if len(args) == 1 { + domain, err := client.FindDNSDomain(args[0]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s domain in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one domain with that name in your account") + os.Exit(1) + } + } + domainList = append(domainList, utility.ObjecteList{ID: domain.ID, Name: domain.Name}) + } else { + for _, v := range args { + domain, err := client.FindDNSDomain(v) + if err == nil { + domainList = append(domainList, utility.ObjecteList{ID: domain.ID, Name: domain.Name}) + } } } - } - domainNameList := []string{} - for _, v := range domainList { - domainNameList = append(domainNameList, v.Name) - } + domainNameList := []string{} + for _, v := range domainList { + domainNameList = append(domainNameList, v.Name) + } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(domainList), "domain"), common.DefaultYes, strings.Join(domainNameList, ", ")) { + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(domainList), "domain"), common.DefaultYes, strings.Join(domainNameList, ", ")) { - for _, v := range domainList { - domain, _ := client.FindDNSDomain(v.ID) - _, err = client.DeleteDNSDomain(domain) - if err != nil { - utility.Error("error deleting the DNS domain: %s", err) - os.Exit(1) + for _, v := range domainList { + domain, _ := client.FindDNSDomain(v.ID) + _, err = client.DeleteDNSDomain(domain) + if err != nil { + utility.Error("error deleting the DNS domain: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range domainList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("domain", v.Name, "Domain") - } + for _, v := range domainList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("domain", v.Name, "Domain") + } - switch common.OutputFormat { - case "json": - if len(domainList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(domainList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(domainList), "domain"), utility.Green(strings.Join(domainNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(domainList), "domain"), utility.Green(strings.Join(domainNameList, ", "))) + } else { + fmt.Println("Operation aborted") } - } else { - fmt.Println("Operation aborted") - } - }, -} + }, + } +) diff --git a/cmd/firewall/firewall_create.go b/cmd/firewall/firewall_create.go index 7e0aa108..afb9f870 100644 --- a/cmd/firewall/firewall_create.go +++ b/cmd/firewall/firewall_create.go @@ -11,10 +11,12 @@ import ( "github.com/spf13/cobra" ) -var firewallnetwork string -var createRules bool -var noDefaultRules bool -var defaultNetwork *civogo.Network +var ( + firewallnetwork string + createRules bool + noDefaultRules bool + defaultNetwork *civogo.Network +) var firewallCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/firewall/firewall_remove.go b/cmd/firewall/firewall_remove.go index a398de4a..33dc23da 100644 --- a/cmd/firewall/firewall_remove.go +++ b/cmd/firewall/firewall_remove.go @@ -3,6 +3,7 @@ package firewall import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,89 +12,89 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var firewallList []utility.ObjecteList -var firewallRemoveCmd = &cobra.Command{ - Use: "remove [NAME]", - Aliases: []string{"rm", "delete", "destroy"}, - Example: "civo firewall remove NAME", - Short: "Remove a firewall", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() +var ( + firewallList []utility.ObjecteList + firewallRemoveCmd = &cobra.Command{ + Use: "remove [NAME]", + Aliases: []string{"rm", "delete", "destroy"}, + Example: "civo firewall remove NAME", + Short: "Remove a firewall", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - firewall, err := client.FindFirewall(args[0]) + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet + } if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s firewall in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one firewall with that name in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - firewallList = append(firewallList, utility.ObjecteList{ID: firewall.ID, Name: firewall.Name}) - } else { - for _, v := range args { - firewall, err := client.FindFirewall(v) - if err == nil { - firewallList = append(firewallList, utility.ObjecteList{ID: firewall.ID, Name: firewall.Name}) + + if len(args) == 1 { + firewall, err := client.FindFirewall(args[0]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s firewall in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one firewall with that name in your account") + os.Exit(1) + } + } + firewallList = append(firewallList, utility.ObjecteList{ID: firewall.ID, Name: firewall.Name}) + } else { + for _, v := range args { + firewall, err := client.FindFirewall(v) + if err == nil { + firewallList = append(firewallList, utility.ObjecteList{ID: firewall.ID, Name: firewall.Name}) + } } } - } - firewallNameList := []string{} - for _, v := range firewallList { - firewallNameList = append(firewallNameList, v.Name) - } + firewallNameList := []string{} + for _, v := range firewallList { + firewallNameList = append(firewallNameList, v.Name) + } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(firewallList), "firewall"), common.DefaultYes, strings.Join(firewallNameList, ", ")) { + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(firewallList), "firewall"), common.DefaultYes, strings.Join(firewallNameList, ", ")) { - for _, v := range firewallList { - _, err = client.DeleteFirewall(v.ID) - if err != nil { - utility.Error("error deleting the firewall: %s", err) - os.Exit(1) + for _, v := range firewallList { + _, err = client.DeleteFirewall(v.ID) + if err != nil { + utility.Error("error deleting the firewall: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range firewallList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("name", v.Name, "Name") - } + for _, v := range firewallList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("name", v.Name, "Name") + } - switch common.OutputFormat { - case "json": - if len(firewallList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(firewallList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(firewallList), "firewall"), utility.Green(strings.Join(firewallNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(firewallList), "firewall"), utility.Green(strings.Join(firewallNameList, ", "))) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/firewall/firewall_rule_create.go b/cmd/firewall/firewall_rule_create.go index 7bad9d7a..4a8c7147 100644 --- a/cmd/firewall/firewall_rule_create.go +++ b/cmd/firewall/firewall_rule_create.go @@ -3,6 +3,7 @@ package firewall import ( "fmt" "net" + "os" "strings" "github.com/civo/civogo" @@ -10,8 +11,6 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) diff --git a/cmd/firewall/firewall_rule_list.go b/cmd/firewall/firewall_rule_list.go index 5d2c1bec..a0216b69 100644 --- a/cmd/firewall/firewall_rule_list.go +++ b/cmd/firewall/firewall_rule_list.go @@ -66,7 +66,7 @@ If you wish to use a custom format, the available fields are: ow.AppendDataWithLabel("id", firewallRule.ID, "ID") // TODO: Check if is necessary this in the table, because you need pass like arg the name or the id of the firewall - //ow.AppendDataWithLabel("Firewall", firewall.Name, "Firewall") + // ow.AppendDataWithLabel("Firewall", firewall.Name, "Firewall") ow.AppendDataWithLabel("direction", firewallRule.Direction, "Direction") ow.AppendDataWithLabel("protocol", firewallRule.Protocol, "Protocol") ow.AppendDataWithLabel("start_port", firewallRule.StartPort, "Start Port") diff --git a/cmd/firewall/firewall_rule_remove.go b/cmd/firewall/firewall_rule_remove.go index 85d33f05..00cae39d 100644 --- a/cmd/firewall/firewall_rule_remove.go +++ b/cmd/firewall/firewall_rule_remove.go @@ -3,6 +3,7 @@ package firewall import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,102 +12,101 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var firewallRuleList []utility.ObjecteList -var firewallRuleRemoveCmd = &cobra.Command{ - Use: "remove", - Aliases: []string{"delete", "destroy", "rm"}, - Args: cobra.MinimumNArgs(2), - Short: "Remove firewall rule", - Example: "civo firewall rule remove FIREWALL_NAME/FIREWALL_ID FIREWALL_RULE_ID", - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() +var ( + firewallRuleList []utility.ObjecteList + firewallRuleRemoveCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"delete", "destroy", "rm"}, + Args: cobra.MinimumNArgs(2), + Short: "Remove firewall rule", + Example: "civo firewall rule remove FIREWALL_NAME/FIREWALL_ID FIREWALL_RULE_ID", + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - firewall, err := client.FindFirewall(args[0]) - if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s firewall in your account", utility.Red(args[0])) - os.Exit(1) + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one firewall with that name in your account") + if err != nil { + utility.Error("Creating the connection to Civo's API failed with %s", err) os.Exit(1) } - } - if len(args) == 2 { - rule, err := client.FindFirewallRule(firewall.ID, args[1]) + firewall, err := client.FindFirewall(args[0]) if err != nil { if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s firewall rule in your account", utility.Red(args[1])) + utility.Error("sorry there is no %s firewall in your account", utility.Red(args[0])) os.Exit(1) } if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one firewall rule in your account") + utility.Error("sorry we found more than one firewall with that name in your account") os.Exit(1) } } - firewallRuleList = append(firewallRuleList, utility.ObjecteList{ID: rule.ID, Name: rule.Label}) - } else { - for _, v := range args[1:] { - rule, err := client.FindFirewallRule(firewall.ID, v) - if err == nil { - firewallRuleList = append(firewallRuleList, utility.ObjecteList{ID: rule.ID, Name: rule.Label}) + + if len(args) == 2 { + rule, err := client.FindFirewallRule(firewall.ID, args[1]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s firewall rule in your account", utility.Red(args[1])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one firewall rule in your account") + os.Exit(1) + } + } + firewallRuleList = append(firewallRuleList, utility.ObjecteList{ID: rule.ID, Name: rule.Label}) + } else { + for _, v := range args[1:] { + rule, err := client.FindFirewallRule(firewall.ID, v) + if err == nil { + firewallRuleList = append(firewallRuleList, utility.ObjecteList{ID: rule.ID, Name: rule.Label}) + } } } - } - firewallRuleNameList := []string{} - for _, v := range firewallRuleList { - firewallRuleNameList = append(firewallRuleNameList, v.Name) - } + firewallRuleNameList := []string{} + for _, v := range firewallRuleList { + firewallRuleNameList = append(firewallRuleNameList, v.Name) + } - if utility.UserConfirmedDeletion(fmt.Sprintf("firewall %s", pluralize.Pluralize(len(firewallRuleList), "rule")), common.DefaultYes, strings.Join(firewallRuleNameList, ", ")) { + if utility.UserConfirmedDeletion(fmt.Sprintf("firewall %s", pluralize.Pluralize(len(firewallRuleList), "rule")), common.DefaultYes, strings.Join(firewallRuleNameList, ", ")) { - for _, v := range firewallRuleList { - _, err = client.DeleteFirewallRule(firewall.ID, v.ID) - if err != nil { - utility.Error("error deleting the firewall rule: %s", err) - os.Exit(1) + for _, v := range firewallRuleList { + _, err = client.DeleteFirewallRule(firewall.ID, v.ID) + if err != nil { + utility.Error("error deleting the firewall rule: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range firewallRuleList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("label", v.Name, "Label") - } + for _, v := range firewallRuleList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("label", v.Name, "Label") + } - switch common.OutputFormat { - case "json": - if len(firewallRuleList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(firewallRuleList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The firewall %s (%s) has been deleted\n", pluralize.Pluralize(len(firewallRuleList), "rule"), strings.Join(firewallRuleNameList, ", ")) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The firewall %s (%s) has been deleted\n", pluralize.Pluralize(len(firewallRuleList), "rule"), strings.Join(firewallRuleNameList, ", ")) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - - }, -} + }, + } +) diff --git a/cmd/instance/instance.go b/cmd/instance/instance.go index 6eddbdd8..eb82b5b1 100644 --- a/cmd/instance/instance.go +++ b/cmd/instance/instance.go @@ -45,7 +45,6 @@ func init() { InstanceCmd.AddCommand(instanceAllowedIPsUpdateCmd) InstanceCmd.AddCommand(instanceBandwidthUpdateCmd) - instanceUpdateCmd.Flags().StringVarP(¬es, "notes", "n", "", "notes stored against the instance") instanceUpdateCmd.Flags().StringVarP(&reverseDNS, "reverse-dns", "r", "", "the reverse DNS entry for the instance") instanceUpdateCmd.Flags().StringVarP(&hostname, "hostname", "s", "", "the instance's hostname") diff --git a/cmd/instance/instance_create.go b/cmd/instance/instance_create.go index 1436697a..259b2f15 100644 --- a/cmd/instance/instance_create.go +++ b/cmd/instance/instance_create.go @@ -17,13 +17,15 @@ import ( "github.com/spf13/cobra" ) -var wait bool -var hostnameCreate, size, diskimage, publicip, initialuser, sshkey, tags, network, privateIPv4, reservedIPv4, firewall, volumetype string -var script string -var skipShebangCheck bool -var volumes []string -var allowedIPs []string -var networkBandwidthLimit int +var ( + wait bool + hostnameCreate, size, diskimage, publicip, initialuser, sshkey, tags, network, privateIPv4, reservedIPv4, firewall, volumetype string + script string + skipShebangCheck bool + volumes []string + allowedIPs []string + networkBandwidthLimit int +) var instanceCreateCmd = &cobra.Command{ Use: "create", @@ -185,7 +187,7 @@ If you wish to use a custom format, the available fields are: config.SSHKeyID = sshKey.ID } - var net = &civogo.Network{} + net := &civogo.Network{} if network != "" { net, err = client.FindNetwork(network) if err != nil { diff --git a/cmd/instance/instance_remove.go b/cmd/instance/instance_remove.go index 2199a03f..89113edf 100644 --- a/cmd/instance/instance_remove.go +++ b/cmd/instance/instance_remove.go @@ -16,91 +16,93 @@ import ( // InstanceList is a tmp list to hold all instance to delete -var instanceList []utility.ObjecteList -var instanceRemoveCmd = &cobra.Command{ - Use: "remove", - Example: "civo instance remove ID/HOSTNAME", - Args: cobra.MinimumNArgs(1), - Aliases: []string{"delete", "destroy", "rm"}, - Short: "Remove/delete instance", - Long: `Remove the specified instance by part of the ID or name. +var ( + instanceList []utility.ObjecteList + instanceRemoveCmd = &cobra.Command{ + Use: "remove", + Example: "civo instance remove ID/HOSTNAME", + Args: cobra.MinimumNArgs(1), + Aliases: []string{"delete", "destroy", "rm"}, + Short: "Remove/delete instance", + Long: `Remove the specified instance by part of the ID or name. If you wish to use a custom format, the available fields are: * id * hostname`, - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - instance, err := client.FindInstance(args[0]) + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet + } if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s instance in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one instance with that name in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - instanceList = append(instanceList, utility.ObjecteList{ID: instance.ID, Name: instance.Hostname}) + if len(args) == 1 { + instance, err := client.FindInstance(args[0]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s instance in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one instance with that name in your account") + os.Exit(1) + } + } - } else { - for _, v := range args { - instance, err := client.FindInstance(v) - if err == nil { - instanceList = append(instanceList, utility.ObjecteList{ID: instance.ID, Name: instance.Hostname}) + instanceList = append(instanceList, utility.ObjecteList{ID: instance.ID, Name: instance.Hostname}) + + } else { + for _, v := range args { + instance, err := client.FindInstance(v) + if err == nil { + instanceList = append(instanceList, utility.ObjecteList{ID: instance.ID, Name: instance.Hostname}) + } } } - } - instanceNameList := []string{} - for _, v := range instanceList { - instanceNameList = append(instanceNameList, v.Name) - } + instanceNameList := []string{} + for _, v := range instanceList { + instanceNameList = append(instanceNameList, v.Name) + } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(instanceList), "instance"), common.DefaultYes, strings.Join(instanceNameList, ", ")) { + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(instanceList), "instance"), common.DefaultYes, strings.Join(instanceNameList, ", ")) { - for _, v := range instanceList { - _, err = client.DeleteInstance(v.ID) - if err != nil { - utility.Error("Error deleting the instance: %s", err) - os.Exit(1) + for _, v := range instanceList { + _, err = client.DeleteInstance(v.ID) + if err != nil { + utility.Error("Error deleting the instance: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range instanceList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("hostname", v.Name, "Hostname") - } + for _, v := range instanceList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("hostname", v.Name, "Hostname") + } - switch common.OutputFormat { - case "json": - if len(instanceList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(instanceList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(instanceList), "instance"), utility.Green(strings.Join(instanceNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(instanceList), "instance"), utility.Green(strings.Join(instanceNameList, ", "))) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/instance/instance_stop.go b/cmd/instance/instance_stop.go index a33bcbd9..e59d4267 100644 --- a/cmd/instance/instance_stop.go +++ b/cmd/instance/instance_stop.go @@ -12,76 +12,78 @@ import ( "github.com/spf13/cobra" ) -var waitStop bool -var instanceStopCmd = &cobra.Command{ - Use: "stop", - Example: "civo instance stop ID/HOSTNAME", - Args: cobra.MinimumNArgs(1), - Short: "Stop an instance", - Aliases: []string{"shutdown"}, - Long: `Pull the power from the specified instance by part of the ID or name. +var ( + waitStop bool + instanceStopCmd = &cobra.Command{ + Use: "stop", + Example: "civo instance stop ID/HOSTNAME", + Args: cobra.MinimumNArgs(1), + Short: "Stop an instance", + Aliases: []string{"shutdown"}, + Long: `Pull the power from the specified instance by part of the ID or name. If you wish to use a custom format, the available fields are: * id * hostname`, - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet + } + if err != nil { + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) + } - instance, err := client.FindInstance(args[0]) - if err != nil { - utility.Error("Instance %s", err) - os.Exit(1) - } + instance, err := client.FindInstance(args[0]) + if err != nil { + utility.Error("Instance %s", err) + os.Exit(1) + } - _, err = client.StopInstance(instance.ID) - if err != nil { - utility.Error("%s", err) - os.Exit(1) - } + _, err = client.StopInstance(instance.ID) + if err != nil { + utility.Error("%s", err) + os.Exit(1) + } - if waitStop { - stillStopping := true - s := spinner.New(spinner.CharSets[9], 100*time.Millisecond) - s.Writer = os.Stderr - s.Prefix = "Stopping instance... " - s.Start() + if waitStop { + stillStopping := true + s := spinner.New(spinner.CharSets[9], 100*time.Millisecond) + s.Writer = os.Stderr + s.Prefix = "Stopping instance... " + s.Start() - for stillStopping { - instanceCheck, err := client.FindInstance(instance.ID) - if err != nil { - utility.Error("Finding instance failed with %s\n", err) - os.Exit(1) - } - if instanceCheck.Status == "SHUTOFF" { - stillStopping = false - s.Stop() - } else { - time.Sleep(2 * time.Second) + for stillStopping { + instanceCheck, err := client.FindInstance(instance.ID) + if err != nil { + utility.Error("Finding instance failed with %s\n", err) + os.Exit(1) + } + if instanceCheck.Status == "SHUTOFF" { + stillStopping = false + s.Stop() + } else { + time.Sleep(2 * time.Second) + } } } - } - if common.OutputFormat == common.OutputFormatHuman { - fmt.Printf("The instance %s (%s) is being stopped\n", utility.Green(instance.Hostname), instance.ID) - } else { - ow := utility.NewOutputWriter() - ow.StartLine() - ow.AppendDataWithLabel("id", instance.ID, "ID") - ow.AppendDataWithLabel("hostname", instance.Hostname, "Hostname") - if common.OutputFormat == "json" { - ow.WriteSingleObjectJSON(common.PrettySet) + if common.OutputFormat == common.OutputFormatHuman { + fmt.Printf("The instance %s (%s) is being stopped\n", utility.Green(instance.Hostname), instance.ID) } else { - ow.WriteCustomOutput(common.OutputFields) + ow := utility.NewOutputWriter() + ow.StartLine() + ow.AppendDataWithLabel("id", instance.ID, "ID") + ow.AppendDataWithLabel("hostname", instance.Hostname, "Hostname") + if common.OutputFormat == "json" { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteCustomOutput(common.OutputFields) + } } - } - }, -} + }, + } +) diff --git a/cmd/ip/ip_unassign.go b/cmd/ip/ip_unassign.go index 8d810bfd..d8b50cef 100644 --- a/cmd/ip/ip_unassign.go +++ b/cmd/ip/ip_unassign.go @@ -65,6 +65,5 @@ civo ip Unassign `, } else { fmt.Println("Aborted") } - }, } diff --git a/cmd/kubernetes/kubernetes.go b/cmd/kubernetes/kubernetes.go index 0e73955a..74058635 100644 --- a/cmd/kubernetes/kubernetes.go +++ b/cmd/kubernetes/kubernetes.go @@ -60,7 +60,6 @@ var kubernetesApplicationsCmd = &cobra.Command{ } func init() { - KubernetesCmd.AddCommand(kubernetesListCmd) KubernetesCmd.AddCommand(kubernetesSizeCmd) KubernetesCmd.AddCommand(kubernetesListVersionCmd) @@ -174,7 +173,6 @@ func getKubernetesList(value string) []string { clusterList = append(clusterList, cluster.Name) return clusterList - } func getAllKubernetesList() []string { @@ -196,5 +194,4 @@ func getAllKubernetesList() []string { } return clusterList - } diff --git a/cmd/kubernetes/kubernetes_ recycle.go b/cmd/kubernetes/kubernetes_ recycle.go index 908816f4..0047c584 100644 --- a/cmd/kubernetes/kubernetes_ recycle.go +++ b/cmd/kubernetes/kubernetes_ recycle.go @@ -61,7 +61,6 @@ var kubernetesRecycleCmd = &cobra.Command{ } func getKubernetesClusterName(value string) []string { - client, err := config.CivoAPIClient() if err != nil { utility.Error("Creating the connection to Civo's API failed with %s", err) @@ -78,11 +77,9 @@ func getKubernetesClusterName(value string) []string { k8sList = append(k8sList, k8s.Name) return k8sList - } func getAllKubernetesClusterName() []string { - client, err := config.CivoAPIClient() if err != nil { utility.Error("Creating the connection to Civo's API failed with %s", err) diff --git a/cmd/kubernetes/kubernetes_app_remove.go b/cmd/kubernetes/kubernetes_app_remove.go index 5271a516..c3523ec3 100644 --- a/cmd/kubernetes/kubernetes_app_remove.go +++ b/cmd/kubernetes/kubernetes_app_remove.go @@ -93,6 +93,5 @@ var kubernetesAppRemoveCmd = &cobra.Command{ utility.Error("%s", err) os.Exit(1) } - }, } diff --git a/cmd/kubernetes/kubernetes_app_show.go b/cmd/kubernetes/kubernetes_app_show.go index 41da3fcc..dde3f0a2 100644 --- a/cmd/kubernetes/kubernetes_app_show.go +++ b/cmd/kubernetes/kubernetes_app_show.go @@ -60,6 +60,5 @@ var kubernetesAppShowCmd = &cobra.Command{ utility.Warning("Sorry the app %s was not found in the cluster %s", args[0], args[1]) os.Exit(1) } - }, } diff --git a/cmd/kubernetes/kubernetes_config.go b/cmd/kubernetes/kubernetes_config.go index feca5750..68b22507 100644 --- a/cmd/kubernetes/kubernetes_config.go +++ b/cmd/kubernetes/kubernetes_config.go @@ -26,8 +26,10 @@ Notes: * When --overwrite is specified, --switch is not required. Your context will be updated automatically. ` -var saveConfig, switchConfig, overwriteConfig bool -var localPathConfig, defaultKubeConfigPath string +var ( + saveConfig, switchConfig, overwriteConfig bool + localPathConfig, defaultKubeConfigPath string +) var kubernetesConfigCmd = &cobra.Command{ Use: "config", @@ -104,7 +106,6 @@ If you wish to use a custom format, the available fields are: os.Exit(1) } } - } ow := utility.NewOutputWriterWithMap(map[string]string{"kubeconfig": kube.KubeConfig}) diff --git a/cmd/kubernetes/kubernetes_create.go b/cmd/kubernetes/kubernetes_create.go index 53d3402f..1554021c 100644 --- a/cmd/kubernetes/kubernetes_create.go +++ b/cmd/kubernetes/kubernetes_create.go @@ -14,11 +14,13 @@ import ( "github.com/spf13/cobra" ) -var numTargetNodes int -var rulesFirewall string -var waitKubernetes, saveConfigKubernetes, mergeConfigKubernetes, switchConfigKubernetes, createFirewall bool -var kubernetesVersion, targetNodesSize, clusterName, clusterType, applications, removeapplications, networkID, existingFirewall, cniPlugin, volumeType string -var kubernetesCluster *civogo.KubernetesCluster +var ( + numTargetNodes int + rulesFirewall string + waitKubernetes, saveConfigKubernetes, mergeConfigKubernetes, switchConfigKubernetes, createFirewall bool + kubernetesVersion, targetNodesSize, clusterName, clusterType, applications, removeapplications, networkID, existingFirewall, cniPlugin, volumeType string + kubernetesCluster *civogo.KubernetesCluster +) var kubernetesCreateCmdExample = `civo kubernetes create CLUSTER_NAME [flags] @@ -111,7 +113,7 @@ var kubernetesCreateCmd = &cobra.Command{ clusterName = utility.RandomName() } - var network = &civogo.Network{} + network := &civogo.Network{} if networkID == "default" { network, err = client.GetDefaultNetwork() if err != nil { @@ -156,14 +158,14 @@ var kubernetesCreateCmd = &cobra.Command{ configKubernetes.KubernetesVersion = kubernetesVersion } - defaultApplications, err := utility.ListDefaultApps() + defaultApplications, err := utility.ListDefaultApps(client) if err != nil { utility.Error("Error %s", err) os.Exit(1) } apps := InstallApps(defaultApplications, applications, removeapplications) for _, app := range apps { - if !utility.CheckAPPName(app) { + if !utility.CheckAppName(client, app) { utility.Error("%q is not a valid application name", app) os.Exit(1) } diff --git a/cmd/kubernetes/kubernetes_list.go b/cmd/kubernetes/kubernetes_list.go index f0f9422c..e076ae2f 100644 --- a/cmd/kubernetes/kubernetes_list.go +++ b/cmd/kubernetes/kubernetes_list.go @@ -1,13 +1,13 @@ package kubernetes import ( + "os" + "strconv" + "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "strconv" - "github.com/spf13/cobra" ) @@ -29,7 +29,6 @@ If you wish to use a custom format, the available fields are: utility.EnsureCurrentRegion() client, err := config.CivoAPIClient() - if err != nil { utility.Error("Creating the connection to Civo's API failed with %s", err) os.Exit(1) diff --git a/cmd/kubernetes/kubernetes_list_version.go b/cmd/kubernetes/kubernetes_list_version.go index 8e93de8c..1fea63dd 100644 --- a/cmd/kubernetes/kubernetes_list_version.go +++ b/cmd/kubernetes/kubernetes_list_version.go @@ -1,15 +1,14 @@ package kubernetes import ( + "os" + "strconv" "strings" "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "strconv" - "github.com/spf13/cobra" ) diff --git a/cmd/kubernetes/kubernetes_nodepool_create.go b/cmd/kubernetes/kubernetes_nodepool_create.go index ec48e4b4..8f9d903e 100644 --- a/cmd/kubernetes/kubernetes_nodepool_create.go +++ b/cmd/kubernetes/kubernetes_nodepool_create.go @@ -12,9 +12,11 @@ import ( "github.com/spf13/cobra" ) -var targetNodesPoolSize, nodePoolName string -var numTargetNodesPool int -var publicIpNodePool bool +var ( + targetNodesPoolSize, nodePoolName string + numTargetNodesPool int + publicIpNodePool bool +) var kubernetesNodePoolCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/kubernetes/kubernetes_nodepool_delete.go b/cmd/kubernetes/kubernetes_nodepool_delete.go index a220c3a8..53d43bce 100644 --- a/cmd/kubernetes/kubernetes_nodepool_delete.go +++ b/cmd/kubernetes/kubernetes_nodepool_delete.go @@ -13,97 +13,99 @@ import ( "github.com/spf13/cobra" ) -var kubernetesNodePoolList []utility.ObjecteList -var kubernetesNodePoolDeleteCmd = &cobra.Command{ - Use: "delete", - Aliases: []string{"delete", "rm"}, - Short: "Delete a node pool from Kubernetes cluster", - Example: "civo kubernetes node-pool delete CLUSTER_NAME NODEPOOL_ID [flags]", - Args: cobra.MinimumNArgs(2), - ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { - if len(args) == 0 { - return getAllKubernetesList(), cobra.ShellCompDirectiveNoFileComp - } - return getKubernetesList(toComplete), cobra.ShellCompDirectiveNoFileComp - }, - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() - - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - kubernetesNodePoolList = append(kubernetesNodePoolList, utility.ObjecteList{ID: args[0], Name: args[1]}) - } else { - for _, v := range args[1:] { - kubernetesNodePoolList = append(kubernetesNodePoolList, utility.ObjecteList{ID: args[0], Name: v}) +var ( + kubernetesNodePoolList []utility.ObjecteList + kubernetesNodePoolDeleteCmd = &cobra.Command{ + Use: "delete", + Aliases: []string{"delete", "rm"}, + Short: "Delete a node pool from Kubernetes cluster", + Example: "civo kubernetes node-pool delete CLUSTER_NAME NODEPOOL_ID [flags]", + Args: cobra.MinimumNArgs(2), + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + if len(args) == 0 { + return getAllKubernetesList(), cobra.ShellCompDirectiveNoFileComp } - } + return getKubernetesList(toComplete), cobra.ShellCompDirectiveNoFileComp + }, + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - kubernetesPoolNameList := []string{} - for _, v := range kubernetesNodePoolList { - if len(v.Name) < 6 { - utility.Error("Please provide the node pool ID with at least 6 characters for %s", v.Name) - os.Exit(1) + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet } - kubernetesPoolNameList = append(kubernetesPoolNameList, v.Name) - } - - if utility.UserConfirmedDeletion(fmt.Sprintf("node %s", pluralize.Pluralize(len(kubernetesNodePoolList), "pool")), common.DefaultYes, strings.Join(kubernetesPoolNameList, ", ")) { - - nodePool := []civogo.KubernetesClusterPoolConfig{} - kubernetesFindCluster, err := client.FindKubernetesCluster(args[0]) if err != nil { - utility.Error("Kubernetes %s", err) + utility.Error("Creating the connection to Civo's API failed with %s", err) os.Exit(1) } - for _, v := range kubernetesFindCluster.Pools { - nodePool = append(nodePool, civogo.KubernetesClusterPoolConfig{ID: v.ID, Count: v.Count, Size: v.Size}) + if len(args) == 1 { + kubernetesNodePoolList = append(kubernetesNodePoolList, utility.ObjecteList{ID: args[0], Name: args[1]}) + } else { + for _, v := range args[1:] { + kubernetesNodePoolList = append(kubernetesNodePoolList, utility.ObjecteList{ID: args[0], Name: v}) + } } - kubernetesPoolNameList = nil - for _, kubeList := range kubernetesNodePoolList { - nodePool, kubernetesPoolNameList = utility.RemoveNodePool(nodePool, kubeList.Name, kubernetesPoolNameList) + kubernetesPoolNameList := []string{} + for _, v := range kubernetesNodePoolList { + if len(v.Name) < 6 { + utility.Error("Please provide the node pool ID with at least 6 characters for %s", v.Name) + os.Exit(1) + } + kubernetesPoolNameList = append(kubernetesPoolNameList, v.Name) } - configKubernetes := &civogo.KubernetesClusterConfig{ - Pools: nodePool, - } + if utility.UserConfirmedDeletion(fmt.Sprintf("node %s", pluralize.Pluralize(len(kubernetesNodePoolList), "pool")), common.DefaultYes, strings.Join(kubernetesPoolNameList, ", ")) { - kubernetesCluster, err := client.UpdateKubernetesCluster(kubernetesFindCluster.ID, configKubernetes) - if err != nil { - utility.Error("%s", err) - os.Exit(1) - } + nodePool := []civogo.KubernetesClusterPoolConfig{} + kubernetesFindCluster, err := client.FindKubernetesCluster(args[0]) + if err != nil { + utility.Error("Kubernetes %s", err) + os.Exit(1) + } - ow := utility.NewOutputWriter() + for _, v := range kubernetesFindCluster.Pools { + nodePool = append(nodePool, civogo.KubernetesClusterPoolConfig{ID: v.ID, Count: v.Count, Size: v.Size}) + } - for _, v := range kubernetesNodePoolList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.Name, "ID") - } + kubernetesPoolNameList = nil + for _, kubeList := range kubernetesNodePoolList { + nodePool, kubernetesPoolNameList = utility.RemoveNodePool(nodePool, kubeList.Name, kubernetesPoolNameList) + } + + configKubernetes := &civogo.KubernetesClusterConfig{ + Pools: nodePool, + } - switch common.OutputFormat { - case "json": - if len(kubernetesNodePoolList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + kubernetesCluster, err := client.UpdateKubernetesCluster(kubernetesFindCluster.ID, configKubernetes) + if err != nil { + utility.Error("%s", err) + os.Exit(1) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted from the cluster (%s)\n", fmt.Sprintf("node %s", pluralize.Pluralize(len(kubernetesNodePoolList), "pool")), utility.Green(strings.Join(kubernetesPoolNameList, ", ")), utility.Green(kubernetesCluster.Name)) + + ow := utility.NewOutputWriter() + + for _, v := range kubernetesNodePoolList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.Name, "ID") + } + + switch common.OutputFormat { + case "json": + if len(kubernetesNodePoolList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted from the cluster (%s)\n", fmt.Sprintf("node %s", pluralize.Pluralize(len(kubernetesNodePoolList), "pool")), utility.Green(strings.Join(kubernetesPoolNameList, ", ")), utility.Green(kubernetesCluster.Name)) + } + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/kubernetes/kubernetes_nodepool_instance_list.go b/cmd/kubernetes/kubernetes_nodepool_instance_list.go index 6df2e5b1..68a0712d 100644 --- a/cmd/kubernetes/kubernetes_nodepool_instance_list.go +++ b/cmd/kubernetes/kubernetes_nodepool_instance_list.go @@ -33,7 +33,6 @@ var kubernetesNodePoolInstanceListCmd = &cobra.Command{ ow := utility.NewOutputWriter() if nodePoolID == "" { - for _, pool := range cluster.Pools { fmt.Println() ow.WriteHeader(fmt.Sprintf("Node Pool %s", pool.ID)) diff --git a/cmd/kubernetes/kubernetes_remove.go b/cmd/kubernetes/kubernetes_remove.go index 37d89416..e34881cd 100644 --- a/cmd/kubernetes/kubernetes_remove.go +++ b/cmd/kubernetes/kubernetes_remove.go @@ -15,8 +15,10 @@ import ( "github.com/spf13/cobra" ) -var kuberneteList []utility.ObjecteList -var deleteKubeconfigContext bool +var ( + kuberneteList []utility.ObjecteList + deleteKubeconfigContext bool +) var kubernetesRemoveCmd = &cobra.Command{ Use: "remove", diff --git a/cmd/kubernetes/kubernetes_show.go b/cmd/kubernetes/kubernetes_show.go index 6d258fce..740c147e 100644 --- a/cmd/kubernetes/kubernetes_show.go +++ b/cmd/kubernetes/kubernetes_show.go @@ -60,14 +60,14 @@ If you wish to use a custom format, the available fields are: os.Exit(1) } - //Get the firewall name by the id + // Get the firewall name by the id firewall, err := client.FindFirewall(kubernetesCluster.FirewallID) if err != nil { utility.Error("Firewall %s", err) os.Exit(1) } - //Get the loadbalancer name by the id + // Get the loadbalancer name by the id lbCluster := []civogo.LoadBalancer{} loadbalancer, err := client.ListLoadBalancers() if err != nil { @@ -111,7 +111,7 @@ If you wish to use a custom format, the available fields are: } if common.OutputFormat == "json" || common.OutputFormat == "custom" { - //ow.AppendData("CloudConfig", template.CloudConfig) + // ow.AppendData("CloudConfig", template.CloudConfig) if kubernetesCluster.UpgradeAvailableTo != "" { ow.AppendDataWithLabel("KubernetesVersion", kubernetesCluster.KubernetesVersion, "Version") diff --git a/cmd/kubernetes/kubernetes_test.go b/cmd/kubernetes/kubernetes_test.go index 4b129a50..6f0b794e 100644 --- a/cmd/kubernetes/kubernetes_test.go +++ b/cmd/kubernetes/kubernetes_test.go @@ -13,7 +13,7 @@ type InstallApplicationsArgs struct { } func TestInstallApplications(t *testing.T) { - var tests = []struct { + tests := []struct { name string args InstallApplicationsArgs want []string diff --git a/cmd/loadbalancer/loadbalancer.go b/cmd/loadbalancer/loadbalancer.go index 4f3d4946..766633e7 100644 --- a/cmd/loadbalancer/loadbalancer.go +++ b/cmd/loadbalancer/loadbalancer.go @@ -21,12 +21,11 @@ var LoadBalancerCmd = &cobra.Command{ } func init() { - LoadBalancerCmd.AddCommand(loadBalancerListCmd) LoadBalancerCmd.AddCommand(loadBalancerShowCmd) - //loadBalancerCmd.AddCommand(loadBalancerRemoveCmd) - //loadBalancerCmd.AddCommand(loadBalancerCreateCmd) - //loadBalancerCmd.AddCommand(loadBalancerUpdateCmd) + // loadBalancerCmd.AddCommand(loadBalancerRemoveCmd) + // loadBalancerCmd.AddCommand(loadBalancerCreateCmd) + // loadBalancerCmd.AddCommand(loadBalancerUpdateCmd) // Balancer create subcommand // loadBalancerCreateCmd.Flags().StringVarP(&lbName, "name", "", "", "Name of the load balancer") diff --git a/cmd/network/network_remove.go b/cmd/network/network_remove.go index 98505cbf..8b4ff48f 100644 --- a/cmd/network/network_remove.go +++ b/cmd/network/network_remove.go @@ -14,44 +14,28 @@ import ( "github.com/spf13/cobra" ) -var networkList []utility.ObjecteList -var networkRemoveCmd = &cobra.Command{ - Use: "remove", - Aliases: []string{"rm", "delete", "destroy"}, - Example: "civo network rm NAME", - Short: "Remove a network", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() - - client, err := config.CivoAPIClient() - if common.RegionSet != "" { - client.Region = common.RegionSet - } - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - network, err := client.FindNetwork(args[0]) +var ( + networkList []utility.ObjecteList + networkRemoveCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"rm", "delete", "destroy"}, + Example: "civo network rm NAME", + Short: "Remove a network", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() + client, err := config.CivoAPIClient() + if common.RegionSet != "" { + client.Region = common.RegionSet + } if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s network in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one network with that name in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - networkList = append(networkList, utility.ObjecteList{ID: network.ID, Name: network.Label}) - - } else { - for _, v := range args { - network, err := client.FindNetwork(v) + if len(args) == 1 { + network, err := client.FindNetwork(args[0]) if err != nil { if errors.Is(err, civogo.ZeroMatchesError) { utility.Error("sorry there is no %s network in your account", utility.Red(args[0])) @@ -62,55 +46,71 @@ var networkRemoveCmd = &cobra.Command{ os.Exit(1) } } - if err == nil { - networkList = append(networkList, utility.ObjecteList{ID: network.ID, Name: network.Label}) + + networkList = append(networkList, utility.ObjecteList{ID: network.ID, Name: network.Label}) + + } else { + for _, v := range args { + network, err := client.FindNetwork(v) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s network in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one network with that name in your account") + os.Exit(1) + } + } + if err == nil { + networkList = append(networkList, utility.ObjecteList{ID: network.ID, Name: network.Label}) + } } } - } - networkNameList := []string{} - for _, v := range networkList { - networkNameList = append(networkNameList, v.Name) - } + networkNameList := []string{} + for _, v := range networkList { + networkNameList = append(networkNameList, v.Name) + } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(networkList), "network"), common.DefaultYes, strings.Join(networkNameList, ", ")) { + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(networkList), "network"), common.DefaultYes, strings.Join(networkNameList, ", ")) { - for _, v := range networkList { - _, err = client.DeleteNetwork(v.ID) - if err != nil { - if errors.Is(err, civogo.DatabaseNetworkDeleteWithInstanceError) { - errMessage := fmt.Sprintf("sorry couldn't delete this network %s while it is in use\n", utility.Green(v.Name)) - utility.Error(errMessage) + for _, v := range networkList { + _, err = client.DeleteNetwork(v.ID) + if err != nil { + if errors.Is(err, civogo.DatabaseNetworkDeleteWithInstanceError) { + errMessage := fmt.Sprintf("sorry couldn't delete this network %s while it is in use\n", utility.Green(v.Name)) + utility.Error(errMessage) + os.Exit(1) + } + utility.Error("Error deleting the Network: %s", err) os.Exit(1) } - utility.Error("Error deleting the Network: %s", err) - os.Exit(1) } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range networkList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("label", v.Name, "Name") - } + for _, v := range networkList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("label", v.Name, "Name") + } - switch common.OutputFormat { - case "json": - if len(networkList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(networkList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(networkList), "network"), utility.Green(strings.Join(networkNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(networkList), "network"), utility.Green(strings.Join(networkNameList, ", "))) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - - }, -} + }, + } +) diff --git a/cmd/objectstore/objectstore.go b/cmd/objectstore/objectstore.go index 4a378c22..e567ebd3 100644 --- a/cmd/objectstore/objectstore.go +++ b/cmd/objectstore/objectstore.go @@ -36,7 +36,6 @@ var objectStoreCredentialCmd = &cobra.Command{ } func init() { - ObjectStoreCmd.AddCommand(objectStoreListCmd) ObjectStoreCmd.AddCommand(objectStoreCreateCmd) ObjectStoreCmd.AddCommand(objectStoreUpdateCmd) @@ -44,16 +43,16 @@ func init() { ObjectStoreCmd.AddCommand(objectStoreShowCmd) ObjectStoreCmd.AddCommand(objectStoreCredentialCmd) - //Flags for create cmd + // Flags for create cmd objectStoreCreateCmd.Flags().Int64VarP(&bucketSize, "size", "s", 500, "Size of the Object store (Minimum size is 500GB)") objectStoreCreateCmd.Flags().StringVarP(&owner, "owner-name", "n", "", "Name of Owner of the Object store. You can reference name of any civo object store credential created before") objectStoreCreateCmd.Flags().StringVarP(&owner, "owner-access-key", "a", "", "Access Key ID of Owner of the Object store. You can reference name of any civo object store credential created before") objectStoreCreateCmd.Flags().BoolVarP(&waitOS, "wait", "w", false, "a simple flag (e.g. --wait) that will cause the CLI to spin and wait for the Object Store to be ready") - //Flags for update cmd + // Flags for update cmd objectStoreUpdateCmd.Flags().Int64VarP(&bucketSize, "size", "s", 500, "Size of the object store (Minimum size is 500GB)") - //Credential commands + // Credential commands objectStoreCredentialCmd.AddCommand(objectStoreCredentialSecretCmd) objectStoreCredentialSecretCmd.Flags().StringVarP(&accessKey, "access-key", "a", "", "Access Key") objectStoreCredentialSecretCmd.MarkFlagRequired("access-key") @@ -66,12 +65,12 @@ func init() { objectStoreCredentialCmd.AddCommand(objectStoreCredentialUpdateCmd) objectStoreCredentialCmd.AddCommand(objectStoreCredentialDeleteCmd) - //Flags for credential create command + // Flags for credential create command objectStoreCredentialCreateCmd.Flags().BoolVarP(&waitOS, "wait", "w", false, "a simple flag (e.g. --wait) that will cause the CLI to spin and wait for the credential to be ready") objectStoreCredentialCreateCmd.Flags().StringVarP(&accessKey, "access-key", "a", "", "Access Key") objectStoreCredentialCreateCmd.Flags().StringVarP(&secretAccessKey, "secret-access-key", "s", "", "Secret Access Key") - //Flags for credential update command + // Flags for credential update command objectStoreCredentialUpdateCmd.Flags().StringVarP(&credAccessKey, "access-key", "a", "", "Access Key") objectStoreCredentialUpdateCmd.Flags().StringVarP(&credSecretAccessKey, "secret-key", "k", "", "Secret Key") } diff --git a/cmd/objectstore/objectstore_create.go b/cmd/objectstore/objectstore_create.go index da9fc86e..6f58a5d3 100644 --- a/cmd/objectstore/objectstore_create.go +++ b/cmd/objectstore/objectstore_create.go @@ -13,9 +13,11 @@ import ( "github.com/spf13/cobra" ) -var bucketSize int64 -var owner string -var waitOS bool +var ( + bucketSize int64 + owner string + waitOS bool +) var objectStoreCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/objectstore/objectstore_credential_delete.go b/cmd/objectstore/objectstore_credential_delete.go index 9d125b6e..b7cc16eb 100644 --- a/cmd/objectstore/objectstore_credential_delete.go +++ b/cmd/objectstore/objectstore_credential_delete.go @@ -3,6 +3,7 @@ package objectstore import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,94 +12,94 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var objectStoreCredsList []utility.ObjecteList -var objectStoreCredentialDeleteCmd = &cobra.Command{ - Use: "delete", - Aliases: []string{"rm", "remove", "destroy"}, - Short: "Delete an Object Store Credential", - Example: "civo objectstore credential delete CREDENTIAL-NAME", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if common.RegionSet != "" { - client.Region = common.RegionSet - } - - if len(args) == 1 { - credential, err := client.FindObjectStoreCredential(args[0]) +var ( + objectStoreCredsList []utility.ObjecteList + objectStoreCredentialDeleteCmd = &cobra.Command{ + Use: "delete", + Aliases: []string{"rm", "remove", "destroy"}, + Short: "Delete an Object Store Credential", + Example: "civo objectstore credential delete CREDENTIAL-NAME", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s Object Store credential in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one Object Store credential with that name in your account") - os.Exit(1) - } - } - objectStoreCredsList = append(objectStoreCredsList, utility.ObjecteList{ID: credential.ID, Name: credential.Name}) - } else { - for _, v := range args { - credential, err := client.FindObjectStoreCredential(v) - if err == nil { - objectStoreCredsList = append(objectStoreCredsList, utility.ObjecteList{ID: credential.ID, Name: credential.Name}) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - } - objectStoreCredsNameList := []string{} - for _, v := range objectStoreCredsList { - objectStoreCredsNameList = append(objectStoreCredsNameList, v.Name) - } - - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(objectStoreCredsList), "Object Store Credential"), common.DefaultYes, strings.Join(objectStoreCredsNameList, ", ")) { + if common.RegionSet != "" { + client.Region = common.RegionSet + } - for _, v := range objectStoreCredsList { - credential, err := client.FindObjectStoreCredential(v.ID) + if len(args) == 1 { + credential, err := client.FindObjectStoreCredential(args[0]) if err != nil { - utility.Error("%s", err) - os.Exit(1) + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s Object Store credential in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one Object Store credential with that name in your account") + os.Exit(1) + } } - _, err = client.DeleteObjectStoreCredential(credential.ID) - if err != nil { - utility.Error("Error deleting the Object Store Credential: %s", err) - os.Exit(1) + objectStoreCredsList = append(objectStoreCredsList, utility.ObjecteList{ID: credential.ID, Name: credential.Name}) + } else { + for _, v := range args { + credential, err := client.FindObjectStoreCredential(v) + if err == nil { + objectStoreCredsList = append(objectStoreCredsList, utility.ObjecteList{ID: credential.ID, Name: credential.Name}) + } } } - ow := utility.NewOutputWriter() - + objectStoreCredsNameList := []string{} for _, v := range objectStoreCredsList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("objectStoreCredential", v.Name, "Object Store Credential") + objectStoreCredsNameList = append(objectStoreCredsNameList, v.Name) } - switch common.OutputFormat { - case "json": - if len(objectStoreCredsList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(objectStoreCredsList), "Object Store Credential"), common.DefaultYes, strings.Join(objectStoreCredsNameList, ", ")) { + + for _, v := range objectStoreCredsList { + credential, err := client.FindObjectStoreCredential(v.ID) + if err != nil { + utility.Error("%s", err) + os.Exit(1) + } + _, err = client.DeleteObjectStoreCredential(credential.ID) + if err != nil { + utility.Error("Error deleting the Object Store Credential: %s", err) + os.Exit(1) + } + } + + ow := utility.NewOutputWriter() + + for _, v := range objectStoreCredsList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("objectStoreCredential", v.Name, "Object Store Credential") } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(objectStoreCredsList), "objectStoreCredential"), utility.Green(strings.Join(objectStoreCredsNameList, ", "))) + + switch common.OutputFormat { + case "json": + if len(objectStoreCredsList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(objectStoreCredsList), "objectStoreCredential"), utility.Green(strings.Join(objectStoreCredsNameList, ", "))) + } + } else { + fmt.Println("Operation aborted") } - } else { - fmt.Println("Operation aborted") - } - }, -} + }, + } +) diff --git a/cmd/objectstore/objectstore_delete.go b/cmd/objectstore/objectstore_delete.go index 538df0fe..4549abe4 100644 --- a/cmd/objectstore/objectstore_delete.go +++ b/cmd/objectstore/objectstore_delete.go @@ -3,6 +3,7 @@ package objectstore import ( "errors" "fmt" + "os" "strings" pluralize "github.com/alejandrojnm/go-pluralize" @@ -11,95 +12,95 @@ import ( "github.com/civo/cli/config" "github.com/civo/cli/utility" - "os" - "github.com/spf13/cobra" ) -var objectStoreList []utility.ObjecteList -var objectStoreDeleteCmd = &cobra.Command{ - Use: "delete", - Aliases: []string{"rm", "remove", "destroy"}, - Short: "Remove an Object Store", - Example: "civo objectstore delete OBJECTSTORE_NAME", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() +var ( + objectStoreList []utility.ObjecteList + objectStoreDeleteCmd = &cobra.Command{ + Use: "delete", + Aliases: []string{"rm", "remove", "destroy"}, + Short: "Remove an Object Store", + Example: "civo objectstore delete OBJECTSTORE_NAME", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if common.RegionSet != "" { - client.Region = common.RegionSet - } - - if len(args) == 1 { - objectStore, err := client.FindObjectStore(args[0]) + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s Object Store in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one Object Store with that name in your account") - os.Exit(1) - } - } - objectStoreList = append(objectStoreList, utility.ObjecteList{ID: objectStore.ID, Name: objectStore.Name}) - } else { - for _, v := range args { - objectStore, err := client.FindObjectStore(v) - if err == nil { - objectStoreList = append(objectStoreList, utility.ObjecteList{ID: objectStore.ID, Name: objectStore.Name}) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - } - objectStoreNameList := []string{} - for _, v := range objectStoreList { - objectStoreNameList = append(objectStoreNameList, v.Name) - } - - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(objectStoreList), "Object Store"), common.DefaultYes, strings.Join(objectStoreNameList, ", ")) { + if common.RegionSet != "" { + client.Region = common.RegionSet + } - for _, v := range objectStoreList { - objectStore, err := client.FindObjectStore(v.ID) + if len(args) == 1 { + objectStore, err := client.FindObjectStore(args[0]) if err != nil { - utility.Error("%s", err) - os.Exit(1) + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s Object Store in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one Object Store with that name in your account") + os.Exit(1) + } } - _, err = client.DeleteObjectStore(objectStore.ID) - if err != nil { - utility.Error("Error deleting the Object Store: %s", err) - os.Exit(1) + objectStoreList = append(objectStoreList, utility.ObjecteList{ID: objectStore.ID, Name: objectStore.Name}) + } else { + for _, v := range args { + objectStore, err := client.FindObjectStore(v) + if err == nil { + objectStoreList = append(objectStoreList, utility.ObjecteList{ID: objectStore.ID, Name: objectStore.Name}) + } } } - ow := utility.NewOutputWriter() - + objectStoreNameList := []string{} for _, v := range objectStoreList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("objectStore", v.Name, "Object Store") + objectStoreNameList = append(objectStoreNameList, v.Name) } - switch common.OutputFormat { - case "json": - if len(objectStoreList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(objectStoreList), "Object Store"), common.DefaultYes, strings.Join(objectStoreNameList, ", ")) { + + for _, v := range objectStoreList { + objectStore, err := client.FindObjectStore(v.ID) + if err != nil { + utility.Error("%s", err) + os.Exit(1) + } + _, err = client.DeleteObjectStore(objectStore.ID) + if err != nil { + utility.Error("Error deleting the Object Store: %s", err) + os.Exit(1) + } + } + + ow := utility.NewOutputWriter() + + for _, v := range objectStoreList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("objectStore", v.Name, "Object Store") } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(objectStoreList), "objectStore"), utility.Green(strings.Join(objectStoreNameList, ", "))) + + switch common.OutputFormat { + case "json": + if len(objectStoreList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) has been deleted\n", pluralize.Pluralize(len(objectStoreList), "objectStore"), utility.Green(strings.Join(objectStoreNameList, ", "))) + } + } else { + fmt.Println("Operation aborted") } - } else { - fmt.Println("Operation aborted") - } - }, -} + }, + } +) diff --git a/cmd/region/region_current.go b/cmd/region/region_current.go index a11a53de..41f3caaa 100644 --- a/cmd/region/region_current.go +++ b/cmd/region/region_current.go @@ -11,54 +11,56 @@ import ( "github.com/spf13/cobra" ) -var regionName string -var validRegion bool -var regionCurrentCmd = &cobra.Command{ - Use: "current [NAME]", - Aliases: []string{"use", "default", "set"}, - Short: "Set the current region", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - return - } +var ( + regionName string + validRegion bool + regionCurrentCmd = &cobra.Command{ + Use: "current [NAME]", + Aliases: []string{"use", "default", "set"}, + Short: "Set the current region", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + client, err := config.CivoAPIClient() + if err != nil { + utility.Error("Creating the connection to Civo's API failed with %s", err) + return + } - regions, err := client.ListRegions() - if err != nil { - utility.Error("%s", err) - return - } + regions, err := client.ListRegions() + if err != nil { + utility.Error("%s", err) + return + } - if strings.ToLower(config.Current.Meta.DefaultRegion) == strings.ToLower(args[0]) { - fmt.Printf("You are already using that region: %s\n", utility.Red(args[0])) - os.Exit(1) - } + if strings.ToLower(config.Current.Meta.DefaultRegion) == strings.ToLower(args[0]) { + fmt.Printf("You are already using that region: %s\n", utility.Red(args[0])) + os.Exit(1) + } - for _, v := range regions { - if strings.ToLower(v.Code) == strings.ToLower(args[0]) { - config.Current.Meta.DefaultRegion = args[0] - regionName = v.Name - config.SaveConfig() - validRegion = true + for _, v := range regions { + if strings.ToLower(v.Code) == strings.ToLower(args[0]) { + config.Current.Meta.DefaultRegion = args[0] + regionName = v.Name + config.SaveConfig() + validRegion = true + } } - } - if !validRegion { - fmt.Printf("The region you tried to set %s doesn't exist, please use 'civo region ls' to get the code of a valid region\n", utility.Red(args[0])) - os.Exit(1) - } + if !validRegion { + fmt.Printf("The region you tried to set %s doesn't exist, please use 'civo region ls' to get the code of a valid region\n", utility.Red(args[0])) + os.Exit(1) + } - ow := utility.NewOutputWriterWithMap(map[string]string{"region": args[0], "name": regionName}) + ow := utility.NewOutputWriterWithMap(map[string]string{"region": args[0], "name": regionName}) - switch common.OutputFormat { - case "json": - ow.WriteSingleObjectJSON(common.PrettySet) - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The default region was set to (%s) %s\n", regionName, utility.Green(args[0])) - } - }, -} + switch common.OutputFormat { + case "json": + ow.WriteSingleObjectJSON(common.PrettySet) + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The default region was set to (%s) %s\n", regionName, utility.Green(args[0])) + } + }, + } +) diff --git a/cmd/size/size_list.go b/cmd/size/size_list.go index 2f39ebb1..e61a5ea0 100644 --- a/cmd/size/size_list.go +++ b/cmd/size/size_list.go @@ -57,7 +57,7 @@ Example: civo size ls -o custom -f "Code: name (type)"`, case strings.ToLower(filterSize) == "database" || strings.ToLower(filterSize) == "db": search = ".db." case strings.ToLower(filterSize) == "kubernetes" || strings.ToLower(filterSize) == "k8s" || strings.ToLower(filterSize) == "k3s" || strings.ToLower(filterSize) == "kube": - search = ".kube." + search = ".kube" case strings.ToLower(filterSize) == "instance" || strings.ToLower(filterSize) == "iaas" || strings.ToLower(filterSize) == "vm": search = "iaas" } diff --git a/cmd/snapshot/snapshot_schedule_create.go b/cmd/snapshot/snapshot_schedule_create.go index 38fe54bc..db17563b 100644 --- a/cmd/snapshot/snapshot_schedule_create.go +++ b/cmd/snapshot/snapshot_schedule_create.go @@ -11,10 +11,12 @@ import ( "github.com/spf13/cobra" ) -var scheduleDescription, scheduleCron string -var maxSnapshots int -var instanceIDs []string -var includeVolumes bool +var ( + scheduleDescription, scheduleCron string + maxSnapshots int + instanceIDs []string + includeVolumes bool +) var snapshotScheduleCreateCmd = &cobra.Command{ Use: "create", diff --git a/cmd/snapshot/snapshot_schedule_update.go b/cmd/snapshot/snapshot_schedule_update.go index 7d0fb89e..721f12e3 100644 --- a/cmd/snapshot/snapshot_schedule_update.go +++ b/cmd/snapshot/snapshot_schedule_update.go @@ -11,8 +11,10 @@ import ( "github.com/spf13/cobra" ) -var scheduleName string -var schedulePaused string +var ( + scheduleName string + schedulePaused string +) var snapshotScheduleUpdateCmd = &cobra.Command{ Use: "update [ID/NAME]", diff --git a/cmd/sshkey/ssh_key_create.go b/cmd/sshkey/ssh_key_create.go index b4862f2b..8abc8690 100644 --- a/cmd/sshkey/ssh_key_create.go +++ b/cmd/sshkey/ssh_key_create.go @@ -32,7 +32,7 @@ var sshKeyCreateCmd = &cobra.Command{ os.Exit(1) } - //validate the ssh public key + // validate the ssh public key if err := utility.ValidateSSHKey(data); err != nil { utility.Error("Validating the SSH key failed with %s", err) os.Exit(1) diff --git a/cmd/sshkey/ssh_key_find.go b/cmd/sshkey/ssh_key_find.go index 7af0e5ff..2ce2c49d 100644 --- a/cmd/sshkey/ssh_key_find.go +++ b/cmd/sshkey/ssh_key_find.go @@ -1,11 +1,12 @@ package sshkey import ( + "os" + "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" "github.com/spf13/cobra" - "os" ) var sshKeyFindCmd = &cobra.Command{ diff --git a/cmd/sshkey/ssh_key_remove.go b/cmd/sshkey/ssh_key_remove.go index b53fd479..b6d01e7b 100644 --- a/cmd/sshkey/ssh_key_remove.go +++ b/cmd/sshkey/ssh_key_remove.go @@ -14,79 +14,81 @@ import ( "github.com/spf13/cobra" ) -var sshList []utility.ObjecteList -var sshKeyRemoveCmd = &cobra.Command{ - Use: "remove", - Aliases: []string{"rm", "delete", "destroy"}, - Example: "civo ssh rm NAME", - Short: "Remove an SSH key", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - - if len(args) == 1 { - sshKey, err := client.FindSSHKey(args[0]) +var ( + sshList []utility.ObjecteList + sshKeyRemoveCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"rm", "delete", "destroy"}, + Example: "civo ssh rm NAME", + Short: "Remove an SSH key", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s SSH key in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one SSH key with that value in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - sshList = append(sshList, utility.ObjecteList{ID: sshKey.ID, Name: sshKey.Name}) - } else { - for _, v := range args { - sshKey, err := client.FindSSHKey(v) - if err == nil { - sshList = append(sshList, utility.ObjecteList{ID: sshKey.ID, Name: sshKey.Name}) + + if len(args) == 1 { + sshKey, err := client.FindSSHKey(args[0]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s SSH key in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one SSH key with that value in your account") + os.Exit(1) + } + } + sshList = append(sshList, utility.ObjecteList{ID: sshKey.ID, Name: sshKey.Name}) + } else { + for _, v := range args { + sshKey, err := client.FindSSHKey(v) + if err == nil { + sshList = append(sshList, utility.ObjecteList{ID: sshKey.ID, Name: sshKey.Name}) + } } } - } - sshKeyNameList := []string{} - for _, v := range sshList { - sshKeyNameList = append(sshKeyNameList, v.Name) - } + sshKeyNameList := []string{} + for _, v := range sshList { + sshKeyNameList = append(sshKeyNameList, v.Name) + } - if utility.UserConfirmedDeletion(fmt.Sprintf("ssh %s", pluralize.Pluralize(len(sshList), "key")), common.DefaultYes, strings.Join(sshKeyNameList, ", ")) { + if utility.UserConfirmedDeletion(fmt.Sprintf("ssh %s", pluralize.Pluralize(len(sshList), "key")), common.DefaultYes, strings.Join(sshKeyNameList, ", ")) { - for _, v := range sshList { - _, err = client.DeleteSSHKey(v.ID) - if err != nil { - utility.Error("error deleting the ssh key: %s", err) - os.Exit(1) + for _, v := range sshList { + _, err = client.DeleteSSHKey(v.ID) + if err != nil { + utility.Error("error deleting the ssh key: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range sshList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("name", v.Name, "Name") - } + for _, v := range sshList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("name", v.Name, "Name") + } - switch common.OutputFormat { - case "json": - if len(sshList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(sshList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The ssh %s (%s) has been deleted\n", pluralize.Pluralize(len(sshList), "key"), utility.Green(strings.Join(sshKeyNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The ssh %s (%s) has been deleted\n", pluralize.Pluralize(len(sshList), "key"), utility.Green(strings.Join(sshKeyNameList, ", "))) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/sshkey/ssh_key_update.go b/cmd/sshkey/ssh_key_update.go index f273569e..514479e4 100644 --- a/cmd/sshkey/ssh_key_update.go +++ b/cmd/sshkey/ssh_key_update.go @@ -2,12 +2,13 @@ package sshkey import ( "errors" + "os" + "github.com/civo/civogo" "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" "github.com/spf13/cobra" - "os" ) var sshKeyUpdateCmd = &cobra.Command{ diff --git a/cmd/teams/teams_create.go b/cmd/teams/teams_create.go index a0022681..388550ca 100644 --- a/cmd/teams/teams_create.go +++ b/cmd/teams/teams_create.go @@ -17,7 +17,6 @@ var teamsCreateCmd = &cobra.Command{ Short: "Create a new team", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() if err != nil { utility.Error("Creating the connection to Civo's API failed with %s", err) diff --git a/cmd/teams/teams_delete.go b/cmd/teams/teams_delete.go index bc5f961e..930b4526 100644 --- a/cmd/teams/teams_delete.go +++ b/cmd/teams/teams_delete.go @@ -14,78 +14,80 @@ import ( "github.com/spf13/cobra" ) -var teamList []utility.ObjecteList -var teamsDeleteCmd = &cobra.Command{ - Use: "delete", - Aliases: []string{"delete", "rm"}, - Short: "Delete a team", - Args: cobra.MinimumNArgs(1), - Example: "civo teams delete TEAM_NAME", - Run: func(cmd *cobra.Command, args []string) { - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - if len(args) == 1 { - team, err := client.FindTeam(args[0]) +var ( + teamList []utility.ObjecteList + teamsDeleteCmd = &cobra.Command{ + Use: "delete", + Aliases: []string{"delete", "rm"}, + Short: "Delete a team", + Args: cobra.MinimumNArgs(1), + Example: "civo teams delete TEAM_NAME", + Run: func(cmd *cobra.Command, args []string) { + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s team in your organisation", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one team with that name in your organisation") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - teamList = append(teamList, utility.ObjecteList{ID: team.ID, Name: team.Name}) - } else { - for _, v := range args { - team, err := client.FindTeam(v) - if err == nil { - teamList = append(teamList, utility.ObjecteList{ID: team.ID, Name: team.Name}) + if len(args) == 1 { + team, err := client.FindTeam(args[0]) + if err != nil { + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s team in your organisation", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one team with that name in your organisation") + os.Exit(1) + } + } + teamList = append(teamList, utility.ObjecteList{ID: team.ID, Name: team.Name}) + } else { + for _, v := range args { + team, err := client.FindTeam(v) + if err == nil { + teamList = append(teamList, utility.ObjecteList{ID: team.ID, Name: team.Name}) + } } } - } - teamNameList := []string{} - for _, v := range teamList { - teamNameList = append(teamNameList, v.Name) - } + teamNameList := []string{} + for _, v := range teamList { + teamNameList = append(teamNameList, v.Name) + } - if utility.UserConfirmedDeletion(fmt.Sprintf("team %s", pluralize.Pluralize(len(teamList), "")), common.DefaultYes, strings.Join(teamNameList, ", ")) { + if utility.UserConfirmedDeletion(fmt.Sprintf("team %s", pluralize.Pluralize(len(teamList), "")), common.DefaultYes, strings.Join(teamNameList, ", ")) { - for _, v := range teamList { - _, err = client.DeleteTeam(v.ID) - if err != nil { - utility.Error("error deleting team: %s", err) - os.Exit(1) + for _, v := range teamList { + _, err = client.DeleteTeam(v.ID) + if err != nil { + utility.Error("error deleting team: %s", err) + os.Exit(1) + } } - } - ow := utility.NewOutputWriter() + ow := utility.NewOutputWriter() - for _, v := range teamList { - ow.StartLine() - ow.AppendDataWithLabel("id", v.ID, "ID") - ow.AppendDataWithLabel("name", v.Name, "Name") - } + for _, v := range teamList { + ow.StartLine() + ow.AppendDataWithLabel("id", v.ID, "ID") + ow.AppendDataWithLabel("name", v.Name, "Name") + } - switch common.OutputFormat { - case "json": - if len(teamList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + switch common.OutputFormat { + case "json": + if len(teamList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The team %s(%s) has been deleted\n", pluralize.Pluralize(len(teamList), ""), utility.Green(strings.Join(teamNameList, ", "))) } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The team %s(%s) has been deleted\n", pluralize.Pluralize(len(teamList), ""), utility.Green(strings.Join(teamNameList, ", "))) + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/teams/teams_rename.go b/cmd/teams/teams_rename.go index 69dd4e06..b3deaf7e 100644 --- a/cmd/teams/teams_rename.go +++ b/cmd/teams/teams_rename.go @@ -17,7 +17,6 @@ var teamsRenameCmd = &cobra.Command{ Args: cobra.MinimumNArgs(2), Run: func(cmd *cobra.Command, args []string) { client, err := config.CivoAPIClient() - if err != nil { utility.Error("Creating the connection to Civo's API failed with %s", err) os.Exit(1) diff --git a/cmd/update.go b/cmd/update.go index f639897c..1f8737c0 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -18,68 +18,65 @@ import ( "github.com/tj/go-update/stores/github" ) -var ( - updateCmd = &cobra.Command{ - Use: "update", - Short: "Update the cli to the last version", - Run: func(cmd *cobra.Command, args []string) { +var updateCmd = &cobra.Command{ + Use: "update", + Short: "Update the cli to the last version", + Run: func(cmd *cobra.Command, args []string) { + ansi.HideCursor() + defer ansi.ShowCursor() - ansi.HideCursor() - defer ansi.ShowCursor() + // source update + m := &update.Manager{ + Command: "civo", + Store: &github.Store{ + Owner: "civo", + Repo: "cli", + Version: common.VersionCli, + }, + } - // source update - m := &update.Manager{ - Command: "civo", - Store: &github.Store{ - Owner: "civo", - Repo: "cli", - Version: common.VersionCli, - }, - } - - // fetch the new releases - releases, err := m.LatestReleases() - if err != nil { - if _, ok := err.(*gogithub.AbuseRateLimitError); ok { - os.Exit(1) - } - utility.Error("error fetching releases: %s", err) + // fetch the new releases + releases, err := m.LatestReleases() + if err != nil { + if _, ok := err.(*gogithub.AbuseRateLimitError); ok { os.Exit(1) } + utility.Error("error fetching releases: %s", err) + os.Exit(1) + } - // no updates - if len(releases) == 0 { - fmt.Printf("%s\n", utility.Green("Your client is up to date")) - os.Exit(0) - } + // no updates + if len(releases) == 0 { + fmt.Printf("%s\n", utility.Green("Your client is up to date")) + os.Exit(0) + } - // latest release - latest := releases[0] + // latest release + latest := releases[0] - s := fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH) - for _, a := range releases[0].Assets { - ext := filepath.Ext(a.Name) - if strings.Contains(a.Name, s) && ext == ".gz" { - // download tarball to a tmp dir - tarball, err := a.DownloadProxy(progress.Reader) - if err != nil { - utility.Error("error downloading: %s", err) - os.Exit(1) - } + s := fmt.Sprintf("%s-%s", runtime.GOOS, runtime.GOARCH) + for _, a := range releases[0].Assets { + ext := filepath.Ext(a.Name) + if strings.Contains(a.Name, s) && ext == ".gz" { + // download tarball to a tmp dir + tarball, err := a.DownloadProxy(progress.Reader) + if err != nil { + utility.Error("error downloading: %s", err) + os.Exit(1) + } - // install it - if err := m.Install(tarball); err != nil { - utility.Error("error installing: %s", err) - os.Exit(1) - } + // install it + if err := m.Install(tarball); err != nil { + utility.Error("error installing: %s", err) + os.Exit(1) + } - fmt.Printf("Updated to %s\n", utility.Green(latest.Version)) + fmt.Printf("Updated to %s\n", utility.Green(latest.Version)) - } } - }, - } -) + } + }, +} func init() { rootCmd.AddCommand(updateCmd) diff --git a/cmd/volume/volume_attach.go b/cmd/volume/volume_attach.go index 4f6f78d1..d803ed4f 100644 --- a/cmd/volume/volume_attach.go +++ b/cmd/volume/volume_attach.go @@ -14,8 +14,10 @@ import ( "github.com/spf13/cobra" ) -var waitVolumeAttach bool -var attachAtBoot bool +var ( + waitVolumeAttach bool + attachAtBoot bool +) var volumeAttachCmdExamples = []string{ "civo volume attach VOLUME_NAME INSTANCE_HOSTNAME", diff --git a/cmd/volume/volume_remove.go b/cmd/volume/volume_remove.go index 1cb36ded..622f080c 100644 --- a/cmd/volume/volume_remove.go +++ b/cmd/volume/volume_remove.go @@ -19,89 +19,91 @@ var volumeRemoveCmdExamples = []string{ "civo volume rm VOLUME_ID", } -var volumesList []utility.ObjecteList -var volumeRemoveCmd = &cobra.Command{ - Use: "remove", - Aliases: []string{"rm", "delete", "destroy"}, - Example: strings.Join(volumeRemoveCmdExamples, "\n"), - Short: "Remove a volume", - Args: cobra.MinimumNArgs(1), - Run: func(cmd *cobra.Command, args []string) { - utility.EnsureCurrentRegion() +var ( + volumesList []utility.ObjecteList + volumeRemoveCmd = &cobra.Command{ + Use: "remove", + Aliases: []string{"rm", "delete", "destroy"}, + Example: strings.Join(volumeRemoveCmdExamples, "\n"), + Short: "Remove a volume", + Args: cobra.MinimumNArgs(1), + Run: func(cmd *cobra.Command, args []string) { + utility.EnsureCurrentRegion() - client, err := config.CivoAPIClient() - if err != nil { - utility.Error("Creating the connection to Civo's API failed with %s", err) - os.Exit(1) - } - if common.RegionSet != "" { - client.Region = common.RegionSet - } - - if len(args) == 1 { - volume, err := client.FindVolume(args[0]) + client, err := config.CivoAPIClient() if err != nil { - if errors.Is(err, civogo.ZeroMatchesError) { - utility.Error("sorry there is no %s volume in your account", utility.Red(args[0])) - os.Exit(1) - } - if errors.Is(err, civogo.MultipleMatchesError) { - utility.Error("sorry we found more than one volume with that value in your account") - os.Exit(1) - } + utility.Error("Creating the connection to Civo's API failed with %s", err) + os.Exit(1) } - volumesList = append(volumesList, utility.ObjecteList{ID: volume.ID, Name: volume.Name}) - } else { - for _, v := range args { - volume, err := client.FindVolume(v) - if err == nil { - volumesList = append(volumesList, utility.ObjecteList{ID: volume.ID, Name: volume.Name}) - } + if common.RegionSet != "" { + client.Region = common.RegionSet } - } - - volumeNameList := []string{} - for _, v := range volumesList { - volumeNameList = append(volumeNameList, v.Name) - } - if utility.UserConfirmedDeletion(pluralize.Pluralize(len(volumesList), "Volume"), common.DefaultYes, strings.Join(volumeNameList, ", ")) { - - for _, v := range volumesList { - vol, err := client.FindVolume(v.ID) + if len(args) == 1 { + volume, err := client.FindVolume(args[0]) if err != nil { - utility.Error("%s", err) - os.Exit(1) + if errors.Is(err, civogo.ZeroMatchesError) { + utility.Error("sorry there is no %s volume in your account", utility.Red(args[0])) + os.Exit(1) + } + if errors.Is(err, civogo.MultipleMatchesError) { + utility.Error("sorry we found more than one volume with that value in your account") + os.Exit(1) + } } - _, err = client.DeleteVolume(vol.ID) - if err != nil { - utility.Error("Error deleting the Volume: %s", err) - os.Exit(1) + volumesList = append(volumesList, utility.ObjecteList{ID: volume.ID, Name: volume.Name}) + } else { + for _, v := range args { + volume, err := client.FindVolume(v) + if err == nil { + volumesList = append(volumesList, utility.ObjecteList{ID: volume.ID, Name: volume.Name}) + } } } - ow := utility.NewOutputWriter() - - for _, volume := range volumesList { - ow.StartLine() - ow.AppendDataWithLabel("id", volume.ID, "ID") - ow.AppendDataWithLabel("volume", volume.Name, "Volume") + volumeNameList := []string{} + for _, v := range volumesList { + volumeNameList = append(volumeNameList, v.Name) } - switch common.OutputFormat { - case "json": - if len(volumesList) == 1 { - ow.WriteSingleObjectJSON(common.PrettySet) - } else { - ow.WriteMultipleObjectsJSON(common.PrettySet) + if utility.UserConfirmedDeletion(pluralize.Pluralize(len(volumesList), "Volume"), common.DefaultYes, strings.Join(volumeNameList, ", ")) { + + for _, v := range volumesList { + vol, err := client.FindVolume(v.ID) + if err != nil { + utility.Error("%s", err) + os.Exit(1) + } + _, err = client.DeleteVolume(vol.ID) + if err != nil { + utility.Error("Error deleting the Volume: %s", err) + os.Exit(1) + } + } + + ow := utility.NewOutputWriter() + + for _, volume := range volumesList { + ow.StartLine() + ow.AppendDataWithLabel("id", volume.ID, "ID") + ow.AppendDataWithLabel("volume", volume.Name, "Volume") } - case "custom": - ow.WriteCustomOutput(common.OutputFields) - default: - fmt.Printf("The %s (%s) have been deleted\n", pluralize.Pluralize(len(volumesList), "volume"), utility.Green(strings.Join(volumeNameList, ", "))) + + switch common.OutputFormat { + case "json": + if len(volumesList) == 1 { + ow.WriteSingleObjectJSON(common.PrettySet) + } else { + ow.WriteMultipleObjectsJSON(common.PrettySet) + } + case "custom": + ow.WriteCustomOutput(common.OutputFields) + default: + fmt.Printf("The %s (%s) have been deleted\n", pluralize.Pluralize(len(volumesList), "volume"), utility.Green(strings.Join(volumeNameList, ", "))) + } + } else { + fmt.Println("Operation aborted.") } - } else { - fmt.Println("Operation aborted.") - } - }, -} + }, + } +) diff --git a/cmd/volumetype/volumetype.go b/cmd/volumetype/volumetype.go index 340f4ad4..da6d2b19 100644 --- a/cmd/volumetype/volumetype.go +++ b/cmd/volumetype/volumetype.go @@ -2,6 +2,7 @@ package volumetype import ( "errors" + "github.com/spf13/cobra" ) diff --git a/cmd/volumetype/volumetype_list.go b/cmd/volumetype/volumetype_list.go index 88a9de91..c47e07d9 100644 --- a/cmd/volumetype/volumetype_list.go +++ b/cmd/volumetype/volumetype_list.go @@ -2,13 +2,14 @@ package volumetype import ( "fmt" + "os" + "strconv" + "strings" + "github.com/civo/cli/common" "github.com/civo/cli/config" "github.com/civo/cli/utility" "github.com/spf13/cobra" - "os" - "strconv" - "strings" ) var volumetypesListCmd = &cobra.Command{ diff --git a/config/config.go b/config/config.go index 5c9bb58f..6f3d43a8 100644 --- a/config/config.go +++ b/config/config.go @@ -12,11 +12,20 @@ import ( ) // SkipAPIInitialization can be set to true to bypass API-related initialization -var SkipAPIInitialization bool +var ( + SkipAPIInitialization bool + DefaultAPIURL = "https://api.civo.com" +) + +type APIKey struct { + Name string `json:"name"` + Value string `json:"value"` + APIURL string `json:"url"` +} // Config describes the configuration for Civo's CLI type Config struct { - APIKeys map[string]string `json:"apikeys"` + APIKeys []APIKey `json:"apikeys"` Meta Metadata `json:"meta"` RegionToFeatures map[string]civogo.Feature `json:"region_to_features"` } @@ -77,11 +86,11 @@ func loadConfig(filename string) { initializeDefaultConfig(filename) } if Current.APIKeys == nil { - Current.APIKeys = map[string]string{} + Current.APIKeys = []APIKey{} } if token, found := os.LookupEnv("CIVO_TOKEN"); found && token != "" { - Current.APIKeys["tempKey"] = token + Current.APIKeys = append(Current.APIKeys, APIKey{Name: "tempKey", Value: "token", APIURL: DefaultAPIURL}) Current.Meta.CurrentAPIKey = "tempKey" } @@ -123,14 +132,14 @@ func saveUpdatedConfig(filename string) { } // Write the JSON data to the specified configuration file - err = os.WriteFile(filename, dataBytes, 0600) + err = os.WriteFile(filename, dataBytes, 0o600) if err != nil { fmt.Printf("Error writing configuration to file '%s': %s\n", filename, err) os.Exit(1) } // Set file permissions to be read-write for the owner only - if err := os.Chmod(filename, 0600); err != nil { + if err := os.Chmod(filename, 0o600); err != nil { fmt.Printf("Error setting file permissions for '%s': %s\n", filename, err) os.Exit(1) } @@ -160,21 +169,20 @@ func SaveConfig() { os.Exit(1) } - err = os.WriteFile(filename, dataBytes, 0600) + err = os.WriteFile(filename, dataBytes, 0o600) if err != nil { fmt.Println(err) os.Exit(1) } - if err := os.Chmod(filename, 0600); err != nil { + if err := os.Chmod(filename, 0o600); err != nil { fmt.Println(err) os.Exit(1) } - } func checkConfigFile(filename string) error { - curr := Config{APIKeys: map[string]string{}} + curr := Config{APIKeys: []APIKey{}} curr.Meta = Metadata{ Admin: false, DefaultRegion: "NYC1", @@ -202,7 +210,7 @@ func checkConfigFile(filename string) error { if err != nil { return err } - err = os.WriteFile(filename, fileContend, 0600) + err = os.WriteFile(filename, fileContend, 0o600) if err != nil { fmt.Println(err) os.Exit(1) @@ -211,7 +219,7 @@ func checkConfigFile(filename string) error { } else { size := file.Size() if size == 0 { - err = os.WriteFile(filename, fileContend, 0600) + err = os.WriteFile(filename, fileContend, 0o600) if err != nil { fmt.Println(err) os.Exit(1) @@ -219,7 +227,7 @@ func checkConfigFile(filename string) error { } } - if err := os.Chmod(filename, 0600); err != nil { + if err := os.Chmod(filename, 0o600); err != nil { fmt.Println(err) os.Exit(1) } @@ -252,7 +260,11 @@ func regionsToFeature() (map[string]civogo.Feature, error) { // DefaultAPIKey returns the current default API key func DefaultAPIKey() string { if Current.Meta.CurrentAPIKey != "" { - return Current.APIKeys[Current.Meta.CurrentAPIKey] + for _, apiKey := range Current.APIKeys { + if apiKey.Name == Current.Meta.CurrentAPIKey { + return apiKey.Value + } + } } return "" } @@ -290,7 +302,7 @@ func CivoAPIClient() (*civogo.Client, error) { func initializeDefaultConfig(filename string) { // Set up a default configuration Current = Config{ - APIKeys: make(map[string]string), // Initialize an empty API keys map + APIKeys: []APIKey{}, // Initialize an empty API keys map Meta: Metadata{ Admin: false, DefaultRegion: "LON1", // Set a default region @@ -308,14 +320,14 @@ func initializeDefaultConfig(filename string) { } // Write the default configuration to the file - err = os.WriteFile(filename, dataBytes, 0600) + err = os.WriteFile(filename, dataBytes, 0o600) if err != nil { fmt.Printf("Error saving default configuration to file '%s': %s\n", filename, err) os.Exit(1) } // Set secure file permissions - if err := os.Chmod(filename, 0600); err != nil { + if err := os.Chmod(filename, 0o600); err != nil { fmt.Printf("Error setting file permissions for '%s': %s\n", filename, err) os.Exit(1) } diff --git a/go.sum b/go.sum index c8c1077b..ed6385ae 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,6 @@ github.com/c4milo/unpackit v0.0.0-20170704181138-4ed373e9ef1c h1:aprLqMn7gSPT+vd github.com/c4milo/unpackit v0.0.0-20170704181138-4ed373e9ef1c/go.mod h1:Ie6SubJv/NTO9Q0UBH0QCl3Ve50lu9hjbi5YJUw03TE= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/civo/civogo v0.6.3 h1:AgTJa2C8Q6q+vFfsaa41vVZBQXVOiUdb/JbWpNuDlc8= -github.com/civo/civogo v0.6.3/go.mod h1:LaEbkszc+9nXSh4YNG0sYXFGYqdQFmXXzQg0gESs2hc= github.com/civo/civogo v0.6.4 h1:f77SHuXcVuUAm1famdtN9YUMP+eA9myyxAgRmepY9uQ= github.com/civo/civogo v0.6.4/go.mod h1:LaEbkszc+9nXSh4YNG0sYXFGYqdQFmXXzQg0gESs2hc= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= @@ -53,8 +51,6 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fxamacker/cbor/v2 v2.8.0 h1:fFtUGXUzXPHTIUdne5+zzMPTfffl3RD5qYnkY40vtxU= -github.com/fxamacker/cbor/v2 v2.8.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -207,8 +203,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -217,8 +211,6 @@ golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/mod v0.27.0 h1:kb+q2PyFnEADO2IEF935ehFUXlWiNjJWtRNgBLSfbxQ= golang.org/x/mod v0.27.0/go.mod h1:rWI627Fq0DEoudcK+MBkNkCe0EetEaDSwJJkCcjpazc= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -227,8 +219,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -243,19 +233,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -280,20 +264,14 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= -k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= k8s.io/api v0.33.3 h1:SRd5t//hhkI1buzxb288fy2xvjubstenEKL9K51KBI8= k8s.io/api v0.33.3/go.mod h1:01Y/iLUjNBM3TAvypct7DIj0M0NIZc+PzAHCIo0CYGE= -k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= -k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/apimachinery v0.33.3 h1:4ZSrmNa0c/ZpZJhAgRdcsFcZOw1PQU1bALVQ0B3I5LA= k8s.io/apimachinery v0.33.3/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= @@ -301,7 +279,6 @@ sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= sigs.k8s.io/structured-merge-diff/v4 v4.7.0 h1:qPeWmscJcXP0snki5IYF79Z8xrl8ETFxgMd7wez1XkI= sigs.k8s.io/structured-merge-diff/v4 v4.7.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/utility/check.go b/utility/check.go index 92032f89..cacbc953 100644 --- a/utility/check.go +++ b/utility/check.go @@ -3,7 +3,6 @@ package utility import ( "fmt" "math" - "os" "runtime" "strings" @@ -74,14 +73,8 @@ func GetK3sSize() ([]string, error) { } // CheckAPPName is a function to check if the app name is valid -func CheckAPPName(appName string) bool { - client, err := config.CivoAPIClient() - if err != nil { - return false - } - client.Region = "nyc1" - - allAPP, err := client.ListKubernetesMarketplaceApplications() +func CheckAppName(c *civogo.Client, appName string) bool { + allAPP, err := c.ListKubernetesMarketplaceApplications() if err != nil { return false } @@ -96,14 +89,8 @@ func CheckAPPName(appName string) bool { } // ListDefaultApps is a function to list the default apps in the marketplace -func ListDefaultApps() ([]string, error) { - client, err := config.CivoAPIClient() - if err != nil { - return nil, err - } - client.Region = "nyc1" - - allApps, err := client.ListKubernetesMarketplaceApplications() +func ListDefaultApps(c *civogo.Client) ([]string, error) { + allApps, err := c.ListKubernetesMarketplaceApplications() if err != nil { return nil, err } diff --git a/utility/color_util.go b/utility/color_util.go index 610ed3e5..ec1d50c1 100644 --- a/utility/color_util.go +++ b/utility/color_util.go @@ -65,13 +65,11 @@ func YellowConfirm(msg string, args ...interface{}) { // RedConfirm is the function to handler the new version of the Cli func RedConfirm(msg string, args ...interface{}) { - fmt.Fprintf(os.Stderr, "%s: %s", color.Red.Sprintf("IMPORTANT"), fmt.Sprintf(msg, args...)) } // ColorStatus is to print the status of the Instance or k8s Cluster func ColorStatus(status string) string { - var returnText string switch { diff --git a/utility/kubernetes.go b/utility/kubernetes.go index aa43c672..26b54fd7 100644 --- a/utility/kubernetes.go +++ b/utility/kubernetes.go @@ -12,7 +12,6 @@ import ( // ObtainKubeConfig is the function to get the kubeconfig from the cluster // and save to the file or merge with the existing one func ObtainKubeConfig(KubeconfigFilename string, civoConfig string, merge bool, switchContext bool, clusterName string) error { - kubeConfig := []byte(civoConfig) if merge { @@ -107,18 +106,18 @@ func writeConfig(path string, data []byte, suppressMessage bool, mergeConfigs bo // we check if the .kube dir is present checkKubeDir() - var _, err = os.Stat(path) + _, err := os.Stat(path) // create file if not exists if os.IsNotExist(err) { - var file, err = os.Create(path) + file, err := os.Create(path) if err != nil { Error(err.Error()) } defer file.Close() } - writeErr := os.WriteFile(path, data, 0600) + writeErr := os.WriteFile(path, data, 0o600) if writeErr != nil { return writeErr } @@ -241,7 +240,6 @@ func switchKubernetesContext(context string) (bool, error) { } func checkKubeDir() { - home, err := os.UserHomeDir() if err != nil { Error("%s", err) @@ -249,7 +247,7 @@ func checkKubeDir() { } if _, err := os.Stat(fmt.Sprintf("%s/.kube/", home)); os.IsNotExist(err) { - os.Mkdir(fmt.Sprintf("%s/.kube/", home), 0755) + os.Mkdir(fmt.Sprintf("%s/.kube/", home), 0o755) } } diff --git a/utility/output_writer.go b/utility/output_writer.go index 3210e9a0..539a3988 100644 --- a/utility/output_writer.go +++ b/utility/output_writer.go @@ -6,14 +6,15 @@ import ( "bytes" "encoding/json" "fmt" - "github.com/civo/cli/common" - "github.com/civo/cli/config" "os" "regexp" "sort" "strconv" "strings" + "github.com/civo/cli/common" + "github.com/civo/cli/config" + "github.com/olekukonko/tablewriter" ) @@ -22,9 +23,11 @@ type byLen []string func (a byLen) Len() int { return len(a) } + func (a byLen) Less(i, j int) bool { return len(a[i]) > len(a[j]) } + func (a byLen) Swap(i, j int) { a[i], a[j] = a[j], a[i] } @@ -142,7 +145,6 @@ func (ow *OutputWriter) WriteSingleObjectJSON(pretty bool) { default: fmt.Println(string(jsonString)) } - } // WriteMultipleObjectsJSON writes the JSON for multiple objects to STDOUT @@ -173,7 +175,6 @@ func (ow *OutputWriter) WriteMultipleObjectsJSON(pretty bool) { default: fmt.Println(string(jsonString)) } - } // WriteKeyValues prints a single object stored in the OutputWriter @@ -250,7 +251,7 @@ func (ow *OutputWriter) WriteCustomOutput(fields string) { for i := range ow.Values { output := fields for key, name := range ow.Keys { - var re = regexp.MustCompile(name) + re := regexp.MustCompile(name) if len(re.FindStringIndex(output)) > 0 { output = replaceNth(output, name, fmt.Sprintf("$%v$", key), 1) } diff --git a/utility/random.go b/utility/random.go index ccd1e28b..8994c3f2 100644 --- a/utility/random.go +++ b/utility/random.go @@ -1,9 +1,10 @@ package utility import ( - "github.com/google/uuid" "math/rand" "time" + + "github.com/google/uuid" ) var adjectives = [...]string{