From 375f60d42659821e0314d06d651e947e50a93c4f Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Tue, 29 Dec 2020 22:11:33 -0500 Subject: [PATCH 1/3] make 'cloud network private details' support showing all private info .. this makes it nicer --- cmd/cloudNetworkPrivateDetails.go | 61 ++++++++++++++++++++----------- types/api/cloud.go | 14 +++++++ 2 files changed, 53 insertions(+), 22 deletions(-) diff --git a/cmd/cloudNetworkPrivateDetails.go b/cmd/cloudNetworkPrivateDetails.go index 29cfd91..fd8dc9b 100644 --- a/cmd/cloudNetworkPrivateDetails.go +++ b/cmd/cloudNetworkPrivateDetails.go @@ -20,14 +20,15 @@ import ( "github.com/spf13/cobra" + "github.com/liquidweb/liquidweb-cli/instance" "github.com/liquidweb/liquidweb-cli/types/api" "github.com/liquidweb/liquidweb-cli/validate" ) var cloudNetworkPrivateDetailsCmd = &cobra.Command{ Use: "details", - Short: "Get Private Network details for a Cloud Server", - Long: `Get Private Network details for a Cloud Server + Short: "Get Private Network details for a single or all Cloud Server(s)", + Long: `Get Private Network details for a single or all Cloud Server(s) Private networking provides the option for several Cloud Servers to contact each other via a network interface that is: @@ -40,28 +41,46 @@ and cost-savings. `, Run: func(cmd *cobra.Command, args []string) { uniqIdFlag, _ := cmd.Flags().GetString("uniq-id") + allFlag, _ := cmd.Flags().GetBool("all") - validateFields := map[interface{}]interface{}{ - uniqIdFlag: "UniqId", - } - if err := validate.Validate(validateFields); err != nil { - lwCliInst.Die(err) + var uniqIds []string + + if uniqIdFlag == "" || allFlag { + methodArgs := instance.AllPaginatedResultsArgs{ + Method: "bleed/storm/server/list", + ResultsPerPage: 100, + } + results, err := lwCliInst.AllPaginatedResults(&methodArgs) + if err != nil { + lwCliInst.Die(err) + } + for _, item := range results.Items { + var cs apiTypes.CloudServerDetails + if err := instance.CastFieldTypes(item, &cs); err != nil { + lwCliInst.Die(err) + } + uniqIds = append(uniqIds, cs.UniqId) + } + } else { + uniqIds = append(uniqIds, uniqIdFlag) } - apiArgs := map[string]interface{}{"uniq_id": uniqIdFlag} + for _, uniqId := range uniqIds { + validateFields := map[interface{}]interface{}{ + uniqId: "UniqId", + } + if err := validate.Validate(validateFields); err != nil { + lwCliInst.Die(err) + } - var details apiTypes.CloudNetworkPrivateGetIpResponse - err := lwCliInst.CallLwApiInto("bleed/network/private/getip", apiArgs, &details) - if err != nil { - lwCliInst.Die(err) - } + apiArgs := map[string]interface{}{"uniq_id": uniqId} - if details.Ip == "" { - fmt.Printf("Cloud Server is not attached to a Private Network\n") - } else { - fmt.Printf("Cloud Server is attached to a Private Network\n") - fmt.Printf("\tIP: %s\n", details.Ip) - fmt.Printf("\tLegacy: %t\n", details.Legacy) + var details apiTypes.CloudNetworkPrivateGetIpResponse + if err := lwCliInst.CallLwApiInto("bleed/network/private/getip", apiArgs, &details); err != nil { + lwCliInst.Die(err) + } + + fmt.Print(details) } }, } @@ -69,7 +88,5 @@ and cost-savings. func init() { cloudNetworkPrivateCmd.AddCommand(cloudNetworkPrivateDetailsCmd) cloudNetworkPrivateDetailsCmd.Flags().String("uniq-id", "", "uniq-id of the Cloud Server") - if err := cloudNetworkPrivateDetailsCmd.MarkFlagRequired("uniq-id"); err != nil { - lwCliInst.Die(err) - } + cloudNetworkPrivateDetailsCmd.Flags().Bool("all", false, "get details for all Cloud Servers") } diff --git a/types/api/cloud.go b/types/api/cloud.go index 9e24c11..fbe4245 100644 --- a/types/api/cloud.go +++ b/types/api/cloud.go @@ -429,6 +429,20 @@ type CloudNetworkPrivateGetIpResponse struct { Ip string `json:"ip" mapstructure:"ip"` } +func (self CloudNetworkPrivateGetIpResponse) String() string { + var slice []string + + if self.Ip == "" { + slice = append(slice, fmt.Sprintf("Cloud Server [%s] is not attached to a Private Network\n", self.UniqId)) + } else { + slice = append(slice, fmt.Sprintf("Cloud Server [%s] is attached to a Private Network\n", self.UniqId)) + slice = append(slice, fmt.Sprintf("\tIP: %s\n", self.Ip)) + slice = append(slice, fmt.Sprintf("\tLegacy: %t\n", self.Legacy)) + } + + return strings.Join(slice[:], "") +} + type CloudNetworkPrivateIsAttachedResponse struct { IsAttached bool `json:"is_attached" mapstructure:"is_attached"` } From adaf6af282cdcdf08476af8f119f60c60ad281fa Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Tue, 29 Dec 2020 22:18:26 -0500 Subject: [PATCH 2/3] heck, support string separated uids too --- cmd/cloudNetworkPrivateDetails.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmd/cloudNetworkPrivateDetails.go b/cmd/cloudNetworkPrivateDetails.go index fd8dc9b..b1e5444 100644 --- a/cmd/cloudNetworkPrivateDetails.go +++ b/cmd/cloudNetworkPrivateDetails.go @@ -25,6 +25,8 @@ import ( "github.com/liquidweb/liquidweb-cli/validate" ) +var cloudNetworkPrivateDetailsCmdUniqIdFlag []string + var cloudNetworkPrivateDetailsCmd = &cobra.Command{ Use: "details", Short: "Get Private Network details for a single or all Cloud Server(s)", @@ -40,12 +42,11 @@ Applications that communicate internally will frequently use this for both secur and cost-savings. `, Run: func(cmd *cobra.Command, args []string) { - uniqIdFlag, _ := cmd.Flags().GetString("uniq-id") allFlag, _ := cmd.Flags().GetBool("all") var uniqIds []string - if uniqIdFlag == "" || allFlag { + if len(cloudNetworkPrivateDetailsCmdUniqIdFlag) == 0 || allFlag { methodArgs := instance.AllPaginatedResultsArgs{ Method: "bleed/storm/server/list", ResultsPerPage: 100, @@ -62,7 +63,7 @@ and cost-savings. uniqIds = append(uniqIds, cs.UniqId) } } else { - uniqIds = append(uniqIds, uniqIdFlag) + uniqIds = cloudNetworkPrivateDetailsCmdUniqIdFlag } for _, uniqId := range uniqIds { @@ -87,6 +88,7 @@ and cost-savings. func init() { cloudNetworkPrivateCmd.AddCommand(cloudNetworkPrivateDetailsCmd) - cloudNetworkPrivateDetailsCmd.Flags().String("uniq-id", "", "uniq-id of the Cloud Server") + cloudNetworkPrivateDetailsCmd.Flags().StringSliceVar(&cloudNetworkPrivateDetailsCmdUniqIdFlag, "uniq-id", + []string{}, "uniq-ids separated by ',' of Cloud Servers to fetch private networking details for") cloudNetworkPrivateDetailsCmd.Flags().Bool("all", false, "get details for all Cloud Servers") } From a6f141e443ff93d3b217acfa555306c38ed7c13c Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Mon, 4 Jan 2021 11:26:55 -0500 Subject: [PATCH 3/3] remove useless flag --- cmd/cloudNetworkPrivateDetails.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cmd/cloudNetworkPrivateDetails.go b/cmd/cloudNetworkPrivateDetails.go index b1e5444..223f2c1 100644 --- a/cmd/cloudNetworkPrivateDetails.go +++ b/cmd/cloudNetworkPrivateDetails.go @@ -42,11 +42,9 @@ Applications that communicate internally will frequently use this for both secur and cost-savings. `, Run: func(cmd *cobra.Command, args []string) { - allFlag, _ := cmd.Flags().GetBool("all") - var uniqIds []string - if len(cloudNetworkPrivateDetailsCmdUniqIdFlag) == 0 || allFlag { + if len(cloudNetworkPrivateDetailsCmdUniqIdFlag) == 0 { methodArgs := instance.AllPaginatedResultsArgs{ Method: "bleed/storm/server/list", ResultsPerPage: 100, @@ -90,5 +88,4 @@ func init() { cloudNetworkPrivateCmd.AddCommand(cloudNetworkPrivateDetailsCmd) cloudNetworkPrivateDetailsCmd.Flags().StringSliceVar(&cloudNetworkPrivateDetailsCmdUniqIdFlag, "uniq-id", []string{}, "uniq-ids separated by ',' of Cloud Servers to fetch private networking details for") - cloudNetworkPrivateDetailsCmd.Flags().Bool("all", false, "get details for all Cloud Servers") }