[lxc-devel] [lxd/master] lxc/network: Add --format option to list

stgraber on Github lxc-bot at linuxcontainers.org
Tue Jun 26 23:32:41 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 370 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180626/668e7885/attachment.bin>
-------------- next part --------------
From 378e1041703d78f03d7772072465a30d4c1c76d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Tue, 26 Jun 2018 19:31:19 -0400
Subject: [PATCH] lxc/network: Add --format option to list
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4654

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxc/network.go | 51 +++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 43 insertions(+), 8 deletions(-)

diff --git a/lxc/network.go b/lxc/network.go
index 0386ed12f..2831a0b29 100644
--- a/lxc/network.go
+++ b/lxc/network.go
@@ -1,6 +1,8 @@
 package main
 
 import (
+	"encoding/csv"
+	"encoding/json"
 	"fmt"
 	"io/ioutil"
 	"os"
@@ -709,6 +711,8 @@ func (c *cmdNetworkGet) Run(cmd *cobra.Command, args []string) error {
 type cmdNetworkList struct {
 	global  *cmdGlobal
 	network *cmdNetwork
+
+	flagFormat string
 }
 
 func (c *cmdNetworkList) Command() *cobra.Command {
@@ -720,6 +724,7 @@ func (c *cmdNetworkList) Command() *cobra.Command {
 		`List available networks`))
 
 	cmd.RunE = c.Run
+	cmd.Flags().StringVar(&c.flagFormat, "format", "table", i18n.G("Format (csv|json|table|yaml)")+"``")
 
 	return cmd
 }
@@ -773,10 +778,6 @@ func (c *cmdNetworkList) Run(cmd *cobra.Command, args []string) error {
 		data = append(data, details)
 	}
 
-	table := tablewriter.NewWriter(os.Stdout)
-	table.SetAutoWrapText(false)
-	table.SetAlignment(tablewriter.ALIGN_LEFT)
-	table.SetRowLine(true)
 	header := []string{
 		i18n.G("NAME"),
 		i18n.G("TYPE"),
@@ -787,10 +788,44 @@ func (c *cmdNetworkList) Run(cmd *cobra.Command, args []string) error {
 	if resource.server.IsClustered() {
 		header = append(header, i18n.G("STATE"))
 	}
-	table.SetHeader(header)
-	sort.Sort(byName(data))
-	table.AppendBulk(data)
-	table.Render()
+
+	switch c.flagFormat {
+	case listFormatTable:
+		table := tablewriter.NewWriter(os.Stdout)
+		table.SetAutoWrapText(false)
+		table.SetAlignment(tablewriter.ALIGN_LEFT)
+		table.SetRowLine(true)
+		table.SetHeader(header)
+		sort.Sort(byName(data))
+		table.AppendBulk(data)
+		table.Render()
+	case listFormatCSV:
+		sort.Sort(byName(data))
+		data = append(data, []string{})
+		copy(data[1:], data[0:])
+		data[0] = header
+		w := csv.NewWriter(os.Stdout)
+		w.WriteAll(data)
+		if err := w.Error(); err != nil {
+			return err
+		}
+	case listFormatJSON:
+		data := networks
+		enc := json.NewEncoder(os.Stdout)
+		err := enc.Encode(data)
+		if err != nil {
+			return err
+		}
+	case listFormatYAML:
+		data := networks
+		out, err := yaml.Marshal(data)
+		if err != nil {
+			return err
+		}
+		fmt.Printf("%s", out)
+	default:
+		return fmt.Errorf(i18n.G("Invalid format %q"), c.flagFormat)
+	}
 
 	return nil
 }


More information about the lxc-devel mailing list