The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/1876
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Output detailed container, state and snapshot info in JSON format. Fixes #882.
From cef37715ad4bdc6e0a7974509eb1d38b0aa3edbd Mon Sep 17 00:00:00 2001 From: Casey Marshall <casey.marsh...@canonical.com> Date: Fri, 8 Apr 2016 16:22:37 -0500 Subject: [PATCH] Add json format option. Output detailed container, state and snapshot info in JSON format. Fixes #882. --- lxc/list.go | 69 ++++++++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 19 deletions(-) diff --git a/lxc/list.go b/lxc/list.go index 902f177..e0cfd6c 100644 --- a/lxc/list.go +++ b/lxc/list.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "os" "regexp" @@ -47,9 +48,15 @@ func (a byName) Less(i, j int) bool { return a[i][0] < a[j][0] } +const ( + listFormatTable = "table" + listFormatJSON = "json" +) + type listCmd struct { chosenColumnRunes string fast bool + format string } func (c *listCmd) showByDefault() bool { @@ -60,7 +67,7 @@ func (c *listCmd) usage() string { return i18n.G( `Lists the available resources. -lxc list [resource] [filters] [-c columns] [--fast] +lxc list [resource] [filters] [--format table|json] [-c columns] [--fast] The filters are: * A single keyword like "web" which will list any container with "web" in its name. @@ -70,7 +77,7 @@ The filters are: * "security.privileged=1" will list all privileged containers * "s.privileged=1" will do the same -The columns are: +Columns for table format are: * 4 - IPv4 address * 6 - IPv6 address * a - architecture @@ -89,6 +96,7 @@ Fast column layout: nsacPt`) func (c *listCmd) flags() { gnuflag.StringVar(&c.chosenColumnRunes, "c", "ns46tS", i18n.G("Columns")) gnuflag.StringVar(&c.chosenColumnRunes, "columns", "ns46tS", i18n.G("Columns")) + gnuflag.StringVar(&c.format, "format", "table", i18n.G("Format")) gnuflag.BoolVar(&c.fast, "fast", false, i18n.G("Fast mode (same as --columns=nsacPt")) } @@ -263,31 +271,54 @@ func (c *listCmd) listContainers(d *lxd.Client, cinfos []shared.ContainerInfo, f cStatesWg.Wait() cSnapshotsWg.Wait() - data := [][]string{} - for _, cInfo := range cinfos { - if !c.shouldShow(filters, &cInfo) { - continue + switch c.format { + case listFormatTable: + data := [][]string{} + for _, cInfo := range cinfos { + if !c.shouldShow(filters, &cInfo) { + continue + } + + col := []string{} + for _, column := range columns { + col = append(col, column.Data(cInfo, cStates[cInfo.Name], cSnapshots[cInfo.Name])) + } + data = append(data, col) } - col := []string{} - for _, column := range columns { - col = append(col, column.Data(cInfo, cStates[cInfo.Name], cSnapshots[cInfo.Name])) + table := tablewriter.NewWriter(os.Stdout) + table.SetAutoWrapText(false) + table.SetAlignment(tablewriter.ALIGN_LEFT) + table.SetRowLine(true) + table.SetHeader(headers) + sort.Sort(byName(data)) + table.AppendBulk(data) + table.Render() + case listFormatJSON: + data := make([]listContainerItem, len(cinfos)) + for i := range cinfos { + data[i].ContainerInfo = &cinfos[i] + data[i].State = cStates[cinfos[i].Name] + data[i].Snapshots = cSnapshots[cinfos[i].Name] + } + enc := json.NewEncoder(os.Stdout) + err := enc.Encode(data) + if err != nil { + return err } - data = append(data, col) + default: + return fmt.Errorf("invalid format %q", c.format) } - table := tablewriter.NewWriter(os.Stdout) - table.SetAutoWrapText(false) - table.SetAlignment(tablewriter.ALIGN_LEFT) - table.SetRowLine(true) - table.SetHeader(headers) - sort.Sort(byName(data)) - table.AppendBulk(data) - table.Render() - return nil } +type listContainerItem struct { + *shared.ContainerInfo + State *shared.ContainerState `json:"state"` + Snapshots []shared.SnapshotInfo `json:"snapshots"` +} + func (c *listCmd) run(config *lxd.Config, args []string) error { var remote string name := ""
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel