diff --git a/cli/cmd/acl/list.go b/cli/cmd/acl/list.go index 72ce2cc2..41277444 100644 --- a/cli/cmd/acl/list.go +++ b/cli/cmd/acl/list.go @@ -3,6 +3,7 @@ package acl import ( "os" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/gravitl/netmaker/logic/acls" "github.com/guumaster/tablewriter" @@ -16,23 +17,28 @@ var aclListCmd = &cobra.Command{ Long: `List all ACLs associated with a network`, Run: func(cmd *cobra.Command, args []string) { aclSource := (map[acls.AclID]acls.ACL)(*functions.GetACL(args[0])) - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"From", "To", "Status"}) - for id, acl := range aclSource { - for k, v := range (map[acls.AclID]byte)(acl) { - row := []string{string(id), string(k)} - switch v { - case acls.NotAllowed: - row = append(row, "Not Allowed") - case acls.NotPresent: - row = append(row, "Not Present") - case acls.Allowed: - row = append(row, "Allowed") + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(aclSource) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"From", "To", "Status"}) + for id, acl := range aclSource { + for k, v := range (map[acls.AclID]byte)(acl) { + row := []string{string(id), string(k)} + switch v { + case acls.NotAllowed: + row = append(row, "Not Allowed") + case acls.NotPresent: + row = append(row, "Not Present") + case acls.Allowed: + row = append(row, "Allowed") + } + table.Append(row) } - table.Append(row) } + table.Render() } - table.Render() }, } diff --git a/cli/cmd/commons/globals.go b/cli/cmd/commons/globals.go new file mode 100644 index 00000000..6eedbcc9 --- /dev/null +++ b/cli/cmd/commons/globals.go @@ -0,0 +1,9 @@ +package commons + +// OutputFormat flag defines the output format to stdout (Enum:- json) +var OutputFormat string + +const ( + // JsonOutput refers to json format output to stdout + JsonOutput = "json" +) diff --git a/cli/cmd/dns/list.go b/cli/cmd/dns/list.go index 4f0a91d0..3ce09689 100644 --- a/cli/cmd/dns/list.go +++ b/cli/cmd/dns/list.go @@ -4,6 +4,7 @@ import ( "fmt" "os" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/gravitl/netmaker/models" "github.com/guumaster/tablewriter" @@ -31,12 +32,17 @@ var dnsListCmd = &cobra.Command{ } else { data = *functions.GetDNS() } - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Name", "Network", "IPv4 Address", "IPv6 Address"}) - for _, d := range data { - table.Append([]string{d.Name, d.Network, d.Address, d.Address6}) + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(data) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Name", "Network", "IPv4 Address", "IPv6 Address"}) + for _, d := range data { + table.Append([]string{d.Name, d.Network, d.Address, d.Address6}) + } + table.Render() } - table.Render() }, } diff --git a/cli/cmd/ext_client/list.go b/cli/cmd/ext_client/list.go index e7eb434c..7c36b66e 100644 --- a/cli/cmd/ext_client/list.go +++ b/cli/cmd/ext_client/list.go @@ -5,6 +5,7 @@ import ( "strconv" "time" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/gravitl/netmaker/models" "github.com/guumaster/tablewriter" @@ -25,12 +26,17 @@ var extClientListCmd = &cobra.Command{ } else { data = *functions.GetAllExtClients() } - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Client ID", "Network", "IPv4 Address", "IPv6 Address", "Enabled", "Last Modified"}) - for _, d := range data { - table.Append([]string{d.ClientID, d.Network, d.Address, d.Address6, strconv.FormatBool(d.Enabled), time.Unix(d.LastModified, 0).String()}) + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(data) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Client ID", "Network", "IPv4 Address", "IPv6 Address", "Enabled", "Last Modified"}) + for _, d := range data { + table.Append([]string{d.ClientID, d.Network, d.Address, d.Address6, strconv.FormatBool(d.Enabled), time.Unix(d.LastModified, 0).String()}) + } + table.Render() } - table.Render() }, } diff --git a/cli/cmd/network/list.go b/cli/cmd/network/list.go index cbaa1bac..60cadfe7 100644 --- a/cli/cmd/network/list.go +++ b/cli/cmd/network/list.go @@ -4,6 +4,7 @@ import ( "os" "time" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" @@ -16,14 +17,19 @@ var networkListCmd = &cobra.Command{ Args: cobra.NoArgs, Run: func(cmd *cobra.Command, args []string) { networks := functions.GetNetworks() - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"NetId", "Address Range (IPv4)", "Address Range (IPv6)", "Network Last Modified", "Nodes Last Modified"}) - for _, n := range *networks { - networkLastModified := time.Unix(n.NetworkLastModified, 0).Format(time.RFC3339) - nodesLastModified := time.Unix(n.NodesLastModified, 0).Format(time.RFC3339) - table.Append([]string{n.NetID, n.AddressRange, n.AddressRange6, networkLastModified, nodesLastModified}) + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(networks) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"NetId", "Address Range (IPv4)", "Address Range (IPv6)", "Network Last Modified", "Nodes Last Modified"}) + for _, n := range *networks { + networkLastModified := time.Unix(n.NetworkLastModified, 0).Format(time.RFC3339) + nodesLastModified := time.Unix(n.NodesLastModified, 0).Format(time.RFC3339) + table.Append([]string{n.NetID, n.AddressRange, n.AddressRange6, networkLastModified, nodesLastModified}) + } + table.Render() } - table.Render() }, } diff --git a/cli/cmd/node/list.go b/cli/cmd/node/list.go index 6adc78e2..86504d28 100644 --- a/cli/cmd/node/list.go +++ b/cli/cmd/node/list.go @@ -4,6 +4,7 @@ import ( "os" "strconv" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/gravitl/netmaker/models" "github.com/guumaster/tablewriter" @@ -23,23 +24,28 @@ var nodeListCmd = &cobra.Command{ } else { data = *functions.GetNodes() } - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"ID", "Addresses", "Network", "Egress", "Ingress", "Relay"}) - for _, d := range data { - addresses := "" - if d.Address != "" { - addresses += d.Address - } - if d.Address6 != "" { + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(data) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"ID", "Addresses", "Network", "Egress", "Ingress", "Relay"}) + for _, d := range data { + addresses := "" if d.Address != "" { - addresses += ", " + addresses += d.Address } - addresses += d.Address6 + if d.Address6 != "" { + if d.Address != "" { + addresses += ", " + } + addresses += d.Address6 + } + table.Append([]string{d.ID, addresses, d.Network, + strconv.FormatBool(d.IsEgressGateway), strconv.FormatBool(d.IsIngressGateway), strconv.FormatBool(d.IsRelay)}) } - table.Append([]string{d.ID, addresses, d.Network, - strconv.FormatBool(d.IsEgressGateway), strconv.FormatBool(d.IsIngressGateway), strconv.FormatBool(d.IsRelay)}) + table.Render() } - table.Render() }, } diff --git a/cli/cmd/root.go b/cli/cmd/root.go index 58d1c905..6b8a0c65 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -4,6 +4,7 @@ import ( "os" "github.com/gravitl/netmaker/cli/cmd/acl" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/cmd/context" "github.com/gravitl/netmaker/cli/cmd/dns" "github.com/gravitl/netmaker/cli/cmd/enrollment_key" @@ -42,6 +43,7 @@ func Execute() { } func init() { + rootCmd.PersistentFlags().StringVarP(&commons.OutputFormat, "output", "o", "", "List output in specific format (Enum:- json)") // Bind subcommands here rootCmd.AddCommand(network.GetRoot()) rootCmd.AddCommand(context.GetRoot()) diff --git a/cli/cmd/user/list.go b/cli/cmd/user/list.go index 12bb563a..3dd9e01c 100644 --- a/cli/cmd/user/list.go +++ b/cli/cmd/user/list.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/gravitl/netmaker/cli/cmd/commons" "github.com/gravitl/netmaker/cli/functions" "github.com/guumaster/tablewriter" "github.com/spf13/cobra" @@ -16,12 +17,18 @@ var userListCmd = &cobra.Command{ Short: "List all users", Long: `List all users`, Run: func(cmd *cobra.Command, args []string) { - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Name", "Admin", "Networks", "Groups"}) - for _, d := range *functions.ListUsers() { - table.Append([]string{d.UserName, strconv.FormatBool(d.IsAdmin), strings.Join(d.Networks, ", "), strings.Join(d.Groups, ", ")}) + data := functions.ListUsers() + switch commons.OutputFormat { + case commons.JsonOutput: + functions.PrettyPrint(data) + default: + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Name", "Admin", "Networks", "Groups"}) + for _, d := range *data { + table.Append([]string{d.UserName, strconv.FormatBool(d.IsAdmin), strings.Join(d.Networks, ", "), strings.Join(d.Groups, ", ")}) + } + table.Render() } - table.Render() }, }