You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.9 KiB
Go
61 lines
1.9 KiB
Go
6 years ago
|
package manager
|
||
|
|
||
|
import (
|
||
|
"github.com/docker/cli/cli/command"
|
||
|
"github.com/spf13/cobra"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// CommandAnnotationPlugin is added to every stub command added by
|
||
|
// AddPluginCommandStubs with the value "true" and so can be
|
||
|
// used to distinguish plugin stubs from regular commands.
|
||
|
CommandAnnotationPlugin = "com.docker.cli.plugin"
|
||
|
|
||
|
// CommandAnnotationPluginVendor is added to every stub command
|
||
|
// added by AddPluginCommandStubs and contains the vendor of
|
||
|
// that plugin.
|
||
|
CommandAnnotationPluginVendor = "com.docker.cli.plugin.vendor"
|
||
|
|
||
|
// CommandAnnotationPluginVersion is added to every stub command
|
||
|
// added by AddPluginCommandStubs and contains the version of
|
||
|
// that plugin.
|
||
|
CommandAnnotationPluginVersion = "com.docker.cli.plugin.version"
|
||
|
|
||
|
// CommandAnnotationPluginInvalid is added to any stub command
|
||
|
// added by AddPluginCommandStubs for an invalid command (that
|
||
|
// is, one which failed it's candidate test) and contains the
|
||
|
// reason for the failure.
|
||
|
CommandAnnotationPluginInvalid = "com.docker.cli.plugin-invalid"
|
||
|
)
|
||
|
|
||
|
// AddPluginCommandStubs adds a stub cobra.Commands for each valid and invalid
|
||
|
// plugin. The command stubs will have several annotations added, see
|
||
|
// `CommandAnnotationPlugin*`.
|
||
|
func AddPluginCommandStubs(dockerCli command.Cli, cmd *cobra.Command) error {
|
||
|
plugins, err := ListPlugins(dockerCli, cmd)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
for _, p := range plugins {
|
||
|
vendor := p.Vendor
|
||
|
if vendor == "" {
|
||
|
vendor = "unknown"
|
||
|
}
|
||
|
annotations := map[string]string{
|
||
|
CommandAnnotationPlugin: "true",
|
||
|
CommandAnnotationPluginVendor: vendor,
|
||
|
CommandAnnotationPluginVersion: p.Version,
|
||
|
}
|
||
|
if p.Err != nil {
|
||
|
annotations[CommandAnnotationPluginInvalid] = p.Err.Error()
|
||
|
}
|
||
|
cmd.AddCommand(&cobra.Command{
|
||
|
Use: p.Name,
|
||
|
Short: p.ShortDescription,
|
||
|
Run: func(_ *cobra.Command, _ []string) {},
|
||
|
Annotations: annotations,
|
||
|
})
|
||
|
}
|
||
|
return nil
|
||
|
}
|