github.com/brahmaroutu/docker@v1.2.1-0.20160809185609-eb28dde01f16/api/client/formatter/network.go (about) 1 package formatter 2 3 import ( 4 "bytes" 5 "fmt" 6 "strings" 7 8 "github.com/docker/docker/pkg/stringid" 9 "github.com/docker/engine-api/types" 10 ) 11 12 const ( 13 defaultNetworkTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}" 14 15 networkIDHeader = "NETWORK ID" 16 ipv6Header = "IPV6" 17 internalHeader = "INTERNAL" 18 ) 19 20 // NetworkContext contains network specific information required by the formatter, 21 // encapsulate a Context struct. 22 type NetworkContext struct { 23 Context 24 // Networks 25 Networks []types.NetworkResource 26 } 27 28 func (ctx NetworkContext) Write() { 29 switch ctx.Format { 30 case tableFormatKey: 31 if ctx.Quiet { 32 ctx.Format = defaultQuietFormat 33 } else { 34 ctx.Format = defaultNetworkTableFormat 35 } 36 case rawFormatKey: 37 if ctx.Quiet { 38 ctx.Format = `network_id: {{.ID}}` 39 } else { 40 ctx.Format = `network_id: {{.ID}}\nname: {{.Name}}\ndriver: {{.Driver}}\nscope: {{.Scope}}\n` 41 } 42 } 43 44 ctx.buffer = bytes.NewBufferString("") 45 ctx.preformat() 46 47 tmpl, err := ctx.parseFormat() 48 if err != nil { 49 return 50 } 51 52 for _, network := range ctx.Networks { 53 networkCtx := &networkContext{ 54 trunc: ctx.Trunc, 55 n: network, 56 } 57 err = ctx.contextFormat(tmpl, networkCtx) 58 if err != nil { 59 return 60 } 61 } 62 63 ctx.postformat(tmpl, &networkContext{}) 64 } 65 66 type networkContext struct { 67 baseSubContext 68 trunc bool 69 n types.NetworkResource 70 } 71 72 func (c *networkContext) ID() string { 73 c.addHeader(networkIDHeader) 74 if c.trunc { 75 return stringid.TruncateID(c.n.ID) 76 } 77 return c.n.ID 78 } 79 80 func (c *networkContext) Name() string { 81 c.addHeader(nameHeader) 82 return c.n.Name 83 } 84 85 func (c *networkContext) Driver() string { 86 c.addHeader(driverHeader) 87 return c.n.Driver 88 } 89 90 func (c *networkContext) Scope() string { 91 c.addHeader(scopeHeader) 92 return c.n.Scope 93 } 94 95 func (c *networkContext) IPv6() string { 96 c.addHeader(ipv6Header) 97 return fmt.Sprintf("%v", c.n.EnableIPv6) 98 } 99 100 func (c *networkContext) Internal() string { 101 c.addHeader(internalHeader) 102 return fmt.Sprintf("%v", c.n.Internal) 103 } 104 105 func (c *networkContext) Labels() string { 106 c.addHeader(labelsHeader) 107 if c.n.Labels == nil { 108 return "" 109 } 110 111 var joinLabels []string 112 for k, v := range c.n.Labels { 113 joinLabels = append(joinLabels, fmt.Sprintf("%s=%s", k, v)) 114 } 115 return strings.Join(joinLabels, ",") 116 } 117 118 func (c *networkContext) Label(name string) string { 119 n := strings.Split(name, ".") 120 r := strings.NewReplacer("-", " ", "_", " ") 121 h := r.Replace(n[len(n)-1]) 122 123 c.addHeader(h) 124 125 if c.n.Labels == nil { 126 return "" 127 } 128 return c.n.Labels[name] 129 }