plugin_upgrade.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package client // import "github.com/docker/docker/client"
  2. import (
  3. "context"
  4. "io"
  5. "net/http"
  6. "net/url"
  7. "github.com/distribution/reference"
  8. "github.com/docker/docker/api/types"
  9. "github.com/docker/docker/api/types/registry"
  10. "github.com/pkg/errors"
  11. )
  12. // PluginUpgrade upgrades a plugin
  13. func (cli *Client) PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (rc io.ReadCloser, err error) {
  14. if err := cli.NewVersionError(ctx, "1.26", "plugin upgrade"); err != nil {
  15. return nil, err
  16. }
  17. query := url.Values{}
  18. if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil {
  19. return nil, errors.Wrap(err, "invalid remote reference")
  20. }
  21. query.Set("remote", options.RemoteRef)
  22. privileges, err := cli.checkPluginPermissions(ctx, query, options)
  23. if err != nil {
  24. return nil, err
  25. }
  26. resp, err := cli.tryPluginUpgrade(ctx, query, privileges, name, options.RegistryAuth)
  27. if err != nil {
  28. return nil, err
  29. }
  30. return resp.body, nil
  31. }
  32. func (cli *Client) tryPluginUpgrade(ctx context.Context, query url.Values, privileges types.PluginPrivileges, name, registryAuth string) (serverResponse, error) {
  33. return cli.post(ctx, "/plugins/"+name+"/upgrade", query, privileges, http.Header{
  34. registry.AuthHeader: {registryAuth},
  35. })
  36. }