github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/cli/command/formatter/network.go (about) 1 package formatter 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/docker/docker/api/types" 8 "github.com/docker/docker/pkg/stringid" 9 ) 10 11 const ( 12 defaultNetworkTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}" 13 14 networkIDHeader = "NETWORK ID" 15 ipv6Header = "IPV6" 16 internalHeader = "INTERNAL" 17 ) 18 19 // NewNetworkFormat returns a Format for rendering using a network Context 20 func NewNetworkFormat(source string, quiet bool) Format { 21 switch source { 22 case TableFormatKey: 23 if quiet { 24 return defaultQuietFormat 25 } 26 return defaultNetworkTableFormat 27 case RawFormatKey: 28 if quiet { 29 return `network_id: {{.ID}}` 30 } 31 return `network_id: {{.ID}}\nname: {{.Name}}\ndriver: {{.Driver}}\nscope: {{.Scope}}\n` 32 } 33 return Format(source) 34 } 35 36 // NetworkWrite writes the context 37 func NetworkWrite(ctx Context, networks []types.NetworkResource) error { 38 render := func(format func(subContext subContext) error) error { 39 for _, network := range networks { 40 networkCtx := &networkContext{trunc: ctx.Trunc, n: network} 41 if err := format(networkCtx); err != nil { 42 return err 43 } 44 } 45 return nil 46 } 47 return ctx.Write(&networkContext{}, render) 48 } 49 50 type networkContext struct { 51 HeaderContext 52 trunc bool 53 n types.NetworkResource 54 } 55 56 func (c *networkContext) ID() string { 57 c.AddHeader(networkIDHeader) 58 if c.trunc { 59 return stringid.TruncateID(c.n.ID) 60 } 61 return c.n.ID 62 } 63 64 func (c *networkContext) Name() string { 65 c.AddHeader(nameHeader) 66 return c.n.Name 67 } 68 69 func (c *networkContext) Driver() string { 70 c.AddHeader(driverHeader) 71 return c.n.Driver 72 } 73 74 func (c *networkContext) Scope() string { 75 c.AddHeader(scopeHeader) 76 return c.n.Scope 77 } 78 79 func (c *networkContext) IPv6() string { 80 c.AddHeader(ipv6Header) 81 return fmt.Sprintf("%v", c.n.EnableIPv6) 82 } 83 84 func (c *networkContext) Internal() string { 85 c.AddHeader(internalHeader) 86 return fmt.Sprintf("%v", c.n.Internal) 87 } 88 89 func (c *networkContext) Labels() string { 90 c.AddHeader(labelsHeader) 91 if c.n.Labels == nil { 92 return "" 93 } 94 95 var joinLabels []string 96 for k, v := range c.n.Labels { 97 joinLabels = append(joinLabels, fmt.Sprintf("%s=%s", k, v)) 98 } 99 return strings.Join(joinLabels, ",") 100 } 101 102 func (c *networkContext) Label(name string) string { 103 n := strings.Split(name, ".") 104 r := strings.NewReplacer("-", " ", "_", " ") 105 h := r.Replace(n[len(n)-1]) 106 107 c.AddHeader(h) 108 109 if c.n.Labels == nil { 110 return "" 111 } 112 return c.n.Labels[name] 113 }