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 }