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  }