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  }