| package formatter |
| |
| import ( |
| "fmt" |
| "strings" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/pkg/stringid" |
| ) |
| |
| const ( |
| defaultNetworkTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}" |
| |
| networkIDHeader = "NETWORK ID" |
| ipv6Header = "IPV6" |
| internalHeader = "INTERNAL" |
| ) |
| |
| // NewNetworkFormat returns a Format for rendering using a network Context |
| func NewNetworkFormat(source string, quiet bool) Format { |
| switch source { |
| case TableFormatKey: |
| if quiet { |
| return defaultQuietFormat |
| } |
| return defaultNetworkTableFormat |
| case RawFormatKey: |
| if quiet { |
| return `network_id: {{.ID}}` |
| } |
| return `network_id: {{.ID}}\nname: {{.Name}}\ndriver: {{.Driver}}\nscope: {{.Scope}}\n` |
| } |
| return Format(source) |
| } |
| |
| // NetworkWrite writes the context |
| func NetworkWrite(ctx Context, networks []types.NetworkResource) error { |
| render := func(format func(subContext subContext) error) error { |
| for _, network := range networks { |
| networkCtx := &networkContext{trunc: ctx.Trunc, n: network} |
| if err := format(networkCtx); err != nil { |
| return err |
| } |
| } |
| return nil |
| } |
| return ctx.Write(&networkContext{}, render) |
| } |
| |
| type networkContext struct { |
| HeaderContext |
| trunc bool |
| n types.NetworkResource |
| } |
| |
| func (c *networkContext) MarshalJSON() ([]byte, error) { |
| return marshalJSON(c) |
| } |
| |
| func (c *networkContext) ID() string { |
| c.AddHeader(networkIDHeader) |
| if c.trunc { |
| return stringid.TruncateID(c.n.ID) |
| } |
| return c.n.ID |
| } |
| |
| func (c *networkContext) Name() string { |
| c.AddHeader(nameHeader) |
| return c.n.Name |
| } |
| |
| func (c *networkContext) Driver() string { |
| c.AddHeader(driverHeader) |
| return c.n.Driver |
| } |
| |
| func (c *networkContext) Scope() string { |
| c.AddHeader(scopeHeader) |
| return c.n.Scope |
| } |
| |
| func (c *networkContext) IPv6() string { |
| c.AddHeader(ipv6Header) |
| return fmt.Sprintf("%v", c.n.EnableIPv6) |
| } |
| |
| func (c *networkContext) Internal() string { |
| c.AddHeader(internalHeader) |
| return fmt.Sprintf("%v", c.n.Internal) |
| } |
| |
| func (c *networkContext) Labels() string { |
| c.AddHeader(labelsHeader) |
| if c.n.Labels == nil { |
| return "" |
| } |
| |
| var joinLabels []string |
| for k, v := range c.n.Labels { |
| joinLabels = append(joinLabels, fmt.Sprintf("%s=%s", k, v)) |
| } |
| return strings.Join(joinLabels, ",") |
| } |
| |
| func (c *networkContext) Label(name string) string { |
| n := strings.Split(name, ".") |
| r := strings.NewReplacer("-", " ", "_", " ") |
| h := r.Replace(n[len(n)-1]) |
| |
| c.AddHeader(h) |
| |
| if c.n.Labels == nil { |
| return "" |
| } |
| return c.n.Labels[name] |
| } |