6 "github.com/docker/docker/api/types"
7 "github.com/docker/docker/pkg/stringid"
8 "github.com/docker/docker/pkg/stringutils"
12 defaultPluginTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Description}}\t{{.Enabled}}"
15 descriptionHeader = "DESCRIPTION"
16 enabledHeader = "ENABLED"
19 // NewPluginFormat returns a Format for rendering using a plugin Context
20 func NewPluginFormat(source string, quiet bool) Format {
24 return defaultQuietFormat
26 return defaultPluginTableFormat
29 return `plugin_id: {{.ID}}`
31 return `plugin_id: {{.ID}}\nname: {{.Name}}\ndescription: {{.Description}}\nenabled: {{.Enabled}}\n`
36 // PluginWrite writes the context
37 func PluginWrite(ctx Context, plugins []*types.Plugin) error {
38 render := func(format func(subContext subContext) error) error {
39 for _, plugin := range plugins {
40 pluginCtx := &pluginContext{trunc: ctx.Trunc, p: *plugin}
41 if err := format(pluginCtx); err != nil {
47 pluginCtx := pluginContext{}
48 pluginCtx.header = map[string]string{
51 "Description": descriptionHeader,
52 "Enabled": enabledHeader,
53 "PluginReference": imageHeader,
55 return ctx.Write(&pluginCtx, render)
58 type pluginContext struct {
64 func (c *pluginContext) MarshalJSON() ([]byte, error) {
68 func (c *pluginContext) ID() string {
70 return stringid.TruncateID(c.p.ID)
75 func (c *pluginContext) Name() string {
79 func (c *pluginContext) Description() string {
80 desc := strings.Replace(c.p.Config.Description, "\n", "", -1)
81 desc = strings.Replace(desc, "\r", "", -1)
83 desc = stringutils.Ellipsis(desc, 45)
89 func (c *pluginContext) Enabled() bool {
93 func (c *pluginContext) PluginReference() string {
94 return c.p.PluginReference