install.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // +build experimental
  2. package plugin
  3. import (
  4. "fmt"
  5. "github.com/docker/docker/api/client"
  6. "github.com/docker/docker/cli"
  7. "github.com/docker/docker/reference"
  8. "github.com/docker/docker/registry"
  9. "github.com/spf13/cobra"
  10. "golang.org/x/net/context"
  11. )
  12. func newInstallCommand(dockerCli *client.DockerCli) *cobra.Command {
  13. cmd := &cobra.Command{
  14. Use: "install",
  15. Short: "Install a plugin",
  16. Args: cli.RequiresMinArgs(1), // TODO: allow for set args
  17. RunE: func(cmd *cobra.Command, args []string) error {
  18. return runInstall(dockerCli, args[0], args[1:])
  19. },
  20. }
  21. return cmd
  22. }
  23. func runInstall(dockerCli *client.DockerCli, name string, args []string) error {
  24. named, err := reference.ParseNamed(name) // FIXME: validate
  25. if err != nil {
  26. return err
  27. }
  28. named = reference.WithDefaultTag(named)
  29. ref, ok := named.(reference.NamedTagged)
  30. if !ok {
  31. return fmt.Errorf("invalid name: %s", named.String())
  32. }
  33. ctx := context.Background()
  34. repoInfo, err := registry.ParseRepositoryInfo(named)
  35. authConfig := dockerCli.ResolveAuthConfig(ctx, repoInfo.Index)
  36. encodedAuth, err := client.EncodeAuthToBase64(authConfig)
  37. if err != nil {
  38. return err
  39. }
  40. // TODO: pass acceptAllPermissions and noEnable flag
  41. return dockerCli.Client().PluginInstall(ctx, ref.String(), encodedAuth, false, false, dockerCli.In(), dockerCli.Out())
  42. }