github.com/brahmaroutu/docker@v1.2.1-0.20160809185609-eb28dde01f16/api/client/formatter/volume.go (about)

     1  package formatter
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/docker/engine-api/types"
     9  )
    10  
    11  const (
    12  	defaultVolumeQuietFormat = "{{.Name}}"
    13  	defaultVolumeTableFormat = "table {{.Driver}}\t{{.Name}}"
    14  
    15  	mountpointHeader = "MOUNTPOINT"
    16  	// Status header ?
    17  )
    18  
    19  // VolumeContext contains volume specific information required by the formatter,
    20  // encapsulate a Context struct.
    21  type VolumeContext struct {
    22  	Context
    23  	// Volumes
    24  	Volumes []*types.Volume
    25  }
    26  
    27  func (ctx VolumeContext) Write() {
    28  	switch ctx.Format {
    29  	case tableFormatKey:
    30  		if ctx.Quiet {
    31  			ctx.Format = defaultVolumeQuietFormat
    32  		} else {
    33  			ctx.Format = defaultVolumeTableFormat
    34  		}
    35  	case rawFormatKey:
    36  		if ctx.Quiet {
    37  			ctx.Format = `name: {{.Name}}`
    38  		} else {
    39  			ctx.Format = `name: {{.Name}}\ndriver: {{.Driver}}\n`
    40  		}
    41  	}
    42  
    43  	ctx.buffer = bytes.NewBufferString("")
    44  	ctx.preformat()
    45  
    46  	tmpl, err := ctx.parseFormat()
    47  	if err != nil {
    48  		return
    49  	}
    50  
    51  	for _, volume := range ctx.Volumes {
    52  		volumeCtx := &volumeContext{
    53  			v: volume,
    54  		}
    55  		err = ctx.contextFormat(tmpl, volumeCtx)
    56  		if err != nil {
    57  			return
    58  		}
    59  	}
    60  
    61  	ctx.postformat(tmpl, &networkContext{})
    62  }
    63  
    64  type volumeContext struct {
    65  	baseSubContext
    66  	v *types.Volume
    67  }
    68  
    69  func (c *volumeContext) Name() string {
    70  	c.addHeader(nameHeader)
    71  	return c.v.Name
    72  }
    73  
    74  func (c *volumeContext) Driver() string {
    75  	c.addHeader(driverHeader)
    76  	return c.v.Driver
    77  }
    78  
    79  func (c *volumeContext) Scope() string {
    80  	c.addHeader(scopeHeader)
    81  	return c.v.Scope
    82  }
    83  
    84  func (c *volumeContext) Mountpoint() string {
    85  	c.addHeader(mountpointHeader)
    86  	return c.v.Mountpoint
    87  }
    88  
    89  func (c *volumeContext) Labels() string {
    90  	c.addHeader(labelsHeader)
    91  	if c.v.Labels == nil {
    92  		return ""
    93  	}
    94  
    95  	var joinLabels []string
    96  	for k, v := range c.v.Labels {
    97  		joinLabels = append(joinLabels, fmt.Sprintf("%s=%s", k, v))
    98  	}
    99  	return strings.Join(joinLabels, ",")
   100  }
   101  
   102  func (c *volumeContext) Label(name string) string {
   103  
   104  	n := strings.Split(name, ".")
   105  	r := strings.NewReplacer("-", " ", "_", " ")
   106  	h := r.Replace(n[len(n)-1])
   107  
   108  	c.addHeader(h)
   109  
   110  	if c.v.Labels == nil {
   111  		return ""
   112  	}
   113  	return c.v.Labels[name]
   114  }