From c410222e42fb9195909390337bc129c6481e2453 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Wed, 9 Nov 2016 17:49:09 -0800 Subject: [PATCH 1/2] move plugins out of experimental Signed-off-by: Victor Vieux --- cli/command/plugin/cmd.go | 1 - client/interface.go | 14 +++++++++++ client/interface_experimental.go | 16 ------------ cmd/dockerd/daemon.go | 3 +++ cmd/dockerd/routes_experimental.go | 4 +-- daemon/daemon.go | 14 +++++++++++ daemon/daemon_experimental.go | 25 +------------------ docs/extend/config.md | 6 ++--- docs/extend/index.md | 4 --- docs/extend/legacy_plugins.md | 4 +-- docs/extend/plugin_api.md | 3 +-- docs/extend/plugins_authorization.md | 4 +-- docs/reference/api/docker_remote_api.md | 10 ++++++++ docs/reference/api/docker_remote_api_v1.25.md | 7 ++---- docs/reference/commandline/plugin_create.md | 7 +++--- docs/reference/commandline/plugin_disable.md | 3 +-- docs/reference/commandline/plugin_enable.md | 3 +-- docs/reference/commandline/plugin_inspect.md | 3 +-- docs/reference/commandline/plugin_install.md | 3 +-- docs/reference/commandline/plugin_ls.md | 3 +-- docs/reference/commandline/plugin_rm.md | 3 +-- docs/reference/commandline/plugin_set.md | 3 +-- .../docker_cli_authz_plugin_v2_test.go | 2 +- ...t.go => docker_cli_daemon_plugins_test.go} | 12 ++++----- integration-cli/docker_cli_events_test.go | 2 +- .../docker_cli_network_unix_test.go | 2 +- integration-cli/docker_cli_plugins_test.go | 18 ++++++------- 27 files changed, 81 insertions(+), 98 deletions(-) rename integration-cli/{docker_cli_daemon_experimental_test.go => docker_cli_daemon_plugins_test.go} (96%) diff --git a/cli/command/plugin/cmd.go b/cli/command/plugin/cmd.go index e55f4ef327..6e1160fd91 100644 --- a/cli/command/plugin/cmd.go +++ b/cli/command/plugin/cmd.go @@ -16,7 +16,6 @@ func NewPluginCommand(dockerCli *command.DockerCli) *cobra.Command { cmd.SetOutput(dockerCli.Err()) cmd.HelpFunc()(cmd, args) }, - Tags: map[string]string{"experimental": ""}, } cmd.AddCommand( diff --git a/client/interface.go b/client/interface.go index 883e8801fa..7a3ebe8b4c 100644 --- a/client/interface.go +++ b/client/interface.go @@ -21,6 +21,7 @@ type CommonAPIClient interface { ImageAPIClient NodeAPIClient NetworkAPIClient + PluginAPIClient ServiceAPIClient SwarmAPIClient SecretAPIClient @@ -104,6 +105,19 @@ type NodeAPIClient interface { NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error } +// PluginAPIClient defines API client methods for the plugins +type PluginAPIClient interface { + PluginList(ctx context.Context) (types.PluginsListResponse, error) + PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error + PluginEnable(ctx context.Context, name string) error + PluginDisable(ctx context.Context, name string) error + PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) error + PluginPush(ctx context.Context, name string, registryAuth string) error + PluginSet(ctx context.Context, name string, args []string) error + PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) + PluginCreate(ctx context.Context, createContext io.Reader, options types.PluginCreateOptions) error +} + // ServiceAPIClient defines API client methods for the services type ServiceAPIClient interface { ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (types.ServiceCreateResponse, error) diff --git a/client/interface_experimental.go b/client/interface_experimental.go index 709b5d8ffb..51da98ecdd 100644 --- a/client/interface_experimental.go +++ b/client/interface_experimental.go @@ -1,15 +1,12 @@ package client import ( - "io" - "github.com/docker/docker/api/types" "golang.org/x/net/context" ) type apiClientExperimental interface { CheckpointAPIClient - PluginAPIClient } // CheckpointAPIClient defines API client methods for the checkpoints @@ -18,16 +15,3 @@ type CheckpointAPIClient interface { CheckpointDelete(ctx context.Context, container string, options types.CheckpointDeleteOptions) error CheckpointList(ctx context.Context, container string, options types.CheckpointListOptions) ([]types.Checkpoint, error) } - -// PluginAPIClient defines API client methods for the plugins -type PluginAPIClient interface { - PluginList(ctx context.Context) (types.PluginsListResponse, error) - PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error - PluginEnable(ctx context.Context, name string) error - PluginDisable(ctx context.Context, name string) error - PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) error - PluginPush(ctx context.Context, name string, registryAuth string) error - PluginSet(ctx context.Context, name string, args []string) error - PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) - PluginCreate(ctx context.Context, createContext io.Reader, options types.PluginCreateOptions) error -} diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go index ec1c348905..a9fc2aebbf 100644 --- a/cmd/dockerd/daemon.go +++ b/cmd/dockerd/daemon.go @@ -19,6 +19,7 @@ import ( "github.com/docker/docker/api/server/router/container" "github.com/docker/docker/api/server/router/image" "github.com/docker/docker/api/server/router/network" + pluginrouter "github.com/docker/docker/api/server/router/plugin" swarmrouter "github.com/docker/docker/api/server/router/swarm" systemrouter "github.com/docker/docker/api/server/router/system" "github.com/docker/docker/api/server/router/volume" @@ -38,6 +39,7 @@ import ( "github.com/docker/docker/pkg/plugingetter" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/system" + "github.com/docker/docker/plugin" "github.com/docker/docker/registry" "github.com/docker/docker/runconfig" "github.com/docker/docker/utils" @@ -457,6 +459,7 @@ func initRouter(s *apiserver.Server, d *daemon.Daemon, c *cluster.Cluster) { volume.NewRouter(d), build.NewRouter(dockerfile.NewBuildManager(d)), swarmrouter.NewRouter(d, c), + pluginrouter.NewRouter(plugin.GetManager()), }...) if d.NetworkControllerEnabled() { diff --git a/cmd/dockerd/routes_experimental.go b/cmd/dockerd/routes_experimental.go index 4a3142ec0f..8c8abf2a3e 100644 --- a/cmd/dockerd/routes_experimental.go +++ b/cmd/dockerd/routes_experimental.go @@ -4,14 +4,12 @@ import ( "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/server/router" checkpointrouter "github.com/docker/docker/api/server/router/checkpoint" - pluginrouter "github.com/docker/docker/api/server/router/plugin" "github.com/docker/docker/daemon" - "github.com/docker/docker/plugin" ) func addExperimentalRouters(routers []router.Router, d *daemon.Daemon, decoder httputils.ContainerDecoder) []router.Router { if !d.HasExperimental() { return []router.Router{} } - return append(routers, checkpointrouter.NewRouter(d, decoder), pluginrouter.NewRouter(plugin.GetManager())) + return append(routers, checkpointrouter.NewRouter(d, decoder)) } diff --git a/daemon/daemon.go b/daemon/daemon.go index c3efbac2bd..c9c29e8314 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -29,6 +29,7 @@ import ( "github.com/docker/docker/daemon/events" "github.com/docker/docker/daemon/exec" "github.com/docker/docker/dockerversion" + "github.com/docker/docker/plugin" "github.com/docker/libnetwork/cluster" // register graph drivers _ "github.com/docker/docker/daemon/graphdriver/register" @@ -1267,3 +1268,16 @@ func (daemon *Daemon) GetCluster() Cluster { func (daemon *Daemon) SetCluster(cluster Cluster) { daemon.cluster = cluster } + +func (daemon *Daemon) pluginInit(cfg *Config, remote libcontainerd.Remote) error { + return plugin.Init(cfg.Root, daemon.PluginStore, remote, daemon.RegistryService, cfg.LiveRestoreEnabled, daemon.LogPluginEvent) +} + +func (daemon *Daemon) pluginShutdown() { + manager := plugin.GetManager() + // Check for a valid manager object. In error conditions, daemon init can fail + // and shutdown called, before plugin manager is initialized. + if manager != nil { + manager.Shutdown() + } +} diff --git a/daemon/daemon_experimental.go b/daemon/daemon_experimental.go index cf38704553..fb0251d4af 100644 --- a/daemon/daemon_experimental.go +++ b/daemon/daemon_experimental.go @@ -1,30 +1,7 @@ package daemon -import ( - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/libcontainerd" - "github.com/docker/docker/plugin" -) +import "github.com/docker/docker/api/types/container" func (daemon *Daemon) verifyExperimentalContainerSettings(hostConfig *container.HostConfig, config *container.Config) ([]string, error) { return nil, nil } - -func (daemon *Daemon) pluginInit(cfg *Config, remote libcontainerd.Remote) error { - if !daemon.HasExperimental() { - return nil - } - return plugin.Init(cfg.Root, daemon.PluginStore, remote, daemon.RegistryService, cfg.LiveRestoreEnabled, daemon.LogPluginEvent) -} - -func (daemon *Daemon) pluginShutdown() { - if !daemon.HasExperimental() { - return - } - manager := plugin.GetManager() - // Check for a valid manager object. In error conditions, daemon init can fail - // and shutdown called, before plugin manager is initialized. - if manager != nil { - manager.Shutdown() - } -} diff --git a/docs/extend/config.md b/docs/extend/config.md index 91dd281475..31c785c8e5 100644 --- a/docs/extend/config.md +++ b/docs/extend/config.md @@ -5,7 +5,6 @@ aliases: [ title: "Plugin config" description: "How develop and use a plugin with the managed plugin system" keywords: "API, Usage, plugins, documentation, developer" -advisory: "experimental" --- ## 3.7 Nodes diff --git a/docs/reference/commandline/plugin_create.md b/docs/reference/commandline/plugin_create.md index 3246e41395..10b3e12138 100644 --- a/docs/reference/commandline/plugin_create.md +++ b/docs/reference/commandline/plugin_create.md @@ -1,8 +1,7 @@ --- -title: "plugin create (experimental)" +title: "plugin create" description: "the plugin create command description and usage" keywords: "plugin, create" -advisory: "experimental" --- +# plugin create + ```markdown Usage: docker plugin create [OPTIONS] reponame[:tag] PATH-TO-ROOTFS -create a plugin from the given PATH-TO-ROOTFS, which contains the plugin's root filesystem and the config file, config.json +Create a plugin from a rootfs and configuration Options: --compress Compress the context using gzip diff --git a/docs/reference/commandline/plugin_disable.md b/docs/reference/commandline/plugin_disable.md index 515fdec5cd..4e4412c01a 100644 --- a/docs/reference/commandline/plugin_disable.md +++ b/docs/reference/commandline/plugin_disable.md @@ -2,7 +2,6 @@ title: "plugin disable" description: "the plugin disable command description and usage" keywords: "plugin, disable" -advisory: "experimental" --- -# plugin disable (experimental) +# plugin disable ```markdown Usage: docker plugin disable PLUGIN diff --git a/docs/reference/commandline/plugin_enable.md b/docs/reference/commandline/plugin_enable.md index d23a6661c6..fdebf5b276 100644 --- a/docs/reference/commandline/plugin_enable.md +++ b/docs/reference/commandline/plugin_enable.md @@ -2,7 +2,6 @@ title: "plugin enable" description: "the plugin enable command description and usage" keywords: "plugin, enable" -advisory: "experimental" --- -# plugin enable (experimental) +# plugin enable ```markdown Usage: docker plugin enable PLUGIN diff --git a/docs/reference/commandline/plugin_inspect.md b/docs/reference/commandline/plugin_inspect.md index 4c81a65142..4ba484b513 100644 --- a/docs/reference/commandline/plugin_inspect.md +++ b/docs/reference/commandline/plugin_inspect.md @@ -2,7 +2,6 @@ title: "plugin inspect" description: "The plugin inspect command description and usage" keywords: "plugin, inspect" -advisory: "experimental" --- -# plugin inspect (experimental) +# plugin inspect ```markdown Usage: docker plugin inspect [OPTIONS] PLUGIN [PLUGIN...] diff --git a/docs/reference/commandline/plugin_install.md b/docs/reference/commandline/plugin_install.md index d3be530f1f..259a1d4444 100644 --- a/docs/reference/commandline/plugin_install.md +++ b/docs/reference/commandline/plugin_install.md @@ -2,7 +2,6 @@ title: "plugin install" description: "the plugin install command description and usage" keywords: "plugin, install" -advisory: "experimental" --- -# plugin install (experimental) +# plugin install ```markdown Usage: docker plugin install [OPTIONS] PLUGIN [KEY=VALUE...] diff --git a/docs/reference/commandline/plugin_ls.md b/docs/reference/commandline/plugin_ls.md index 3afae4f2de..bb2e0bbe53 100644 --- a/docs/reference/commandline/plugin_ls.md +++ b/docs/reference/commandline/plugin_ls.md @@ -2,7 +2,6 @@ title: "plugin ls" description: "The plugin ls command description and usage" keywords: "plugin, list" -advisory: "experimental" --- -# plugin ls (experimental) +# plugin ls ```markdown Usage: docker plugin ls [OPTIONS] diff --git a/docs/reference/commandline/plugin_rm.md b/docs/reference/commandline/plugin_rm.md index ff56ab8d57..29840455a9 100644 --- a/docs/reference/commandline/plugin_rm.md +++ b/docs/reference/commandline/plugin_rm.md @@ -2,7 +2,6 @@ title: "plugin rm" description: "the plugin rm command description and usage" keywords: "plugin, rm" -advisory: "experimental" --- -# plugin rm (experimental) +# plugin rm ```markdown Usage: docker plugin rm [OPTIONS] PLUGIN [PLUGIN...] diff --git a/docs/reference/commandline/plugin_set.md b/docs/reference/commandline/plugin_set.md index 36a24f2061..3873f47c76 100644 --- a/docs/reference/commandline/plugin_set.md +++ b/docs/reference/commandline/plugin_set.md @@ -2,7 +2,6 @@ title: "plugin set" description: "the plugin set command description and usage" keywords: "plugin, set" -advisory: "experimental" --- -# plugin set (experimental) +# plugin set ```markdown Usage: docker plugin set PLUGIN KEY=VALUE [KEY=VALUE...] diff --git a/integration-cli/docker_cli_authz_plugin_v2_test.go b/integration-cli/docker_cli_authz_plugin_v2_test.go index 4a5c17c6a0..ace37ddfc2 100644 --- a/integration-cli/docker_cli_authz_plugin_v2_test.go +++ b/integration-cli/docker_cli_authz_plugin_v2_test.go @@ -30,7 +30,7 @@ type DockerAuthzV2Suite struct { } func (s *DockerAuthzV2Suite) SetUpTest(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) s.d = NewDaemon(c) c.Assert(s.d.Start(), check.IsNil) } diff --git a/integration-cli/docker_cli_daemon_experimental_test.go b/integration-cli/docker_cli_daemon_plugins_test.go similarity index 96% rename from integration-cli/docker_cli_daemon_experimental_test.go rename to integration-cli/docker_cli_daemon_plugins_test.go index 7b1df797c5..2497345603 100644 --- a/integration-cli/docker_cli_daemon_experimental_test.go +++ b/integration-cli/docker_cli_daemon_plugins_test.go @@ -17,7 +17,7 @@ var pluginName = "tiborvass/no-remove" // TestDaemonRestartWithPluginEnabled tests state restore for an enabled plugin func (s *DockerDaemonSuite) TestDaemonRestartWithPluginEnabled(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) if err := s.d.Start(); err != nil { c.Fatalf("Could not start daemon: %v", err) @@ -50,7 +50,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithPluginEnabled(c *check.C) { // TestDaemonRestartWithPluginDisabled tests state restore for a disabled plugin func (s *DockerDaemonSuite) TestDaemonRestartWithPluginDisabled(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) if err := s.d.Start(); err != nil { c.Fatalf("Could not start daemon: %v", err) @@ -81,7 +81,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithPluginDisabled(c *check.C) { // TestDaemonKillLiveRestoreWithPlugins SIGKILLs daemon started with --live-restore. // Plugins should continue to run. func (s *DockerDaemonSuite) TestDaemonKillLiveRestoreWithPlugins(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) if err := s.d.Start("--live-restore"); err != nil { c.Fatalf("Could not start daemon: %v", err) @@ -114,7 +114,7 @@ func (s *DockerDaemonSuite) TestDaemonKillLiveRestoreWithPlugins(c *check.C) { // TestDaemonShutdownLiveRestoreWithPlugins SIGTERMs daemon started with --live-restore. // Plugins should continue to run. func (s *DockerDaemonSuite) TestDaemonShutdownLiveRestoreWithPlugins(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) if err := s.d.Start("--live-restore"); err != nil { c.Fatalf("Could not start daemon: %v", err) @@ -146,7 +146,7 @@ func (s *DockerDaemonSuite) TestDaemonShutdownLiveRestoreWithPlugins(c *check.C) // TestDaemonShutdownWithPlugins shuts down running plugins. func (s *DockerDaemonSuite) TestDaemonShutdownWithPlugins(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) if err := s.d.Start(); err != nil { c.Fatalf("Could not start daemon: %v", err) @@ -185,7 +185,7 @@ func (s *DockerDaemonSuite) TestDaemonShutdownWithPlugins(c *check.C) { // TestVolumePlugin tests volume creation using a plugin. func (s *DockerDaemonSuite) TestVolumePlugin(c *check.C) { - testRequires(c, Network, ExperimentalDaemon) + testRequires(c, Network) volName := "plugin-volume" volRoot := "/data" diff --git a/integration-cli/docker_cli_events_test.go b/integration-cli/docker_cli_events_test.go index bfb33dcce6..5353c98d5e 100644 --- a/integration-cli/docker_cli_events_test.go +++ b/integration-cli/docker_cli_events_test.go @@ -276,7 +276,7 @@ func (s *DockerSuite) TestEventsImageLoad(c *check.C) { } func (s *DockerSuite) TestEventsPluginOps(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon) + testRequires(c, DaemonIsLinux) pluginName := "tiborvass/no-remove:latest" since := daemonUnixTime(c) diff --git a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go index 548ca291d0..0ed0593ed8 100644 --- a/integration-cli/docker_cli_network_unix_test.go +++ b/integration-cli/docker_cli_network_unix_test.go @@ -769,7 +769,7 @@ func (s *DockerNetworkSuite) TestDockerNetworkDriverOptions(c *check.C) { } func (s *DockerNetworkSuite) TestDockerPluginV2NetworkDriver(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) var ( npName = "mavenugo/test-docker-netplugin" diff --git a/integration-cli/docker_cli_plugins_test.go b/integration-cli/docker_cli_plugins_test.go index 05ae9d2d37..0083d160ab 100644 --- a/integration-cli/docker_cli_plugins_test.go +++ b/integration-cli/docker_cli_plugins_test.go @@ -16,7 +16,7 @@ var ( ) func (s *DockerSuite) TestPluginBasicOps(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) _, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", pNameWithTag) c.Assert(err, checker.IsNil) @@ -47,7 +47,7 @@ func (s *DockerSuite) TestPluginBasicOps(c *check.C) { } func (s *DockerSuite) TestPluginForceRemove(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", pNameWithTag) c.Assert(err, checker.IsNil) @@ -60,7 +60,7 @@ func (s *DockerSuite) TestPluginForceRemove(c *check.C) { } func (s *DockerSuite) TestPluginActive(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", pNameWithTag) c.Assert(err, checker.IsNil) @@ -87,7 +87,7 @@ func (s *DockerSuite) TestPluginActive(c *check.C) { } func (s *DockerSuite) TestPluginInstallDisable(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", "--disable", pName) c.Assert(err, checker.IsNil) c.Assert(strings.TrimSpace(out), checker.Contains, pName) @@ -110,7 +110,7 @@ func (s *DockerSuite) TestPluginInstallDisable(c *check.C) { } func (s *DockerSuite) TestPluginInstallDisableVolumeLs(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", "--disable", pName) c.Assert(err, checker.IsNil) c.Assert(strings.TrimSpace(out), checker.Contains, pName) @@ -119,7 +119,7 @@ func (s *DockerSuite) TestPluginInstallDisableVolumeLs(c *check.C) { } func (s *DockerSuite) TestPluginSet(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _ := dockerCmd(c, "plugin", "install", "--grant-all-permissions", "--disable", pName) c.Assert(strings.TrimSpace(out), checker.Contains, pName) @@ -133,7 +133,7 @@ func (s *DockerSuite) TestPluginSet(c *check.C) { } func (s *DockerSuite) TestPluginInstallArgs(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _ := dockerCmd(c, "plugin", "install", "--grant-all-permissions", "--disable", pName, "DEBUG=1") c.Assert(strings.TrimSpace(out), checker.Contains, pName) @@ -142,14 +142,14 @@ func (s *DockerSuite) TestPluginInstallArgs(c *check.C) { } func (s *DockerSuite) TestPluginInstallImage(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon) + testRequires(c, DaemonIsLinux) out, _, err := dockerCmdWithError("plugin", "install", "redis") c.Assert(err, checker.NotNil) c.Assert(out, checker.Contains, "content is not a plugin") } func (s *DockerSuite) TestPluginEnableDisableNegative(c *check.C) { - testRequires(c, DaemonIsLinux, ExperimentalDaemon, Network) + testRequires(c, DaemonIsLinux, Network) out, _, err := dockerCmdWithError("plugin", "install", "--grant-all-permissions", pName) c.Assert(err, checker.IsNil) c.Assert(strings.TrimSpace(out), checker.Contains, pName) From 970b23db2e97e1671c6bf4b57bfe5d1a30e98819 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Thu, 10 Nov 2016 11:55:39 -0800 Subject: [PATCH 2/2] update media_type Signed-off-by: Victor Vieux --- distribution/pull_v2.go | 3 ++- docs/reference/api/docker_remote_api.md | 2 +- plugin/distribution/pull.go | 3 ++- vendor.conf | 2 +- .../docker/distribution/manifest/schema2/manifest.go | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/distribution/pull_v2.go b/distribution/pull_v2.go index 723fbfc14a..3a2015a41e 100644 --- a/distribution/pull_v2.go +++ b/distribution/pull_v2.go @@ -358,7 +358,8 @@ func (p *v2Puller) pullV2Tag(ctx context.Context, ref reference.Named) (tagUpdat } if m, ok := manifest.(*schema2.DeserializedManifest); ok { - if m.Manifest.Config.MediaType == schema2.MediaTypePluginConfig { + if m.Manifest.Config.MediaType == schema2.MediaTypePluginConfig || + m.Manifest.Config.MediaType == "application/vnd.docker.plugin.image.v0+json" { //TODO: remove this v0 before 1.13 GA return false, errMediaTypePlugin } } diff --git a/docs/reference/api/docker_remote_api.md b/docs/reference/api/docker_remote_api.md index c9f0569743..0c83e3b82c 100644 --- a/docs/reference/api/docker_remote_api.md +++ b/docs/reference/api/docker_remote_api.md @@ -190,7 +190,7 @@ This section lists each version from latest to oldest. Each listing includes a * `POST /plugins/(plugin name)/set` configure a plugin. * `POST /plugins/(plugin name)/enable` enable a plugin. * `POST /plugins/(plugin name)/disable` disable a plugin. -* `POST /plugins/(plugin name)/push` push a pluging. +* `POST /plugins/(plugin name)/push` push a plugin. * `POST /plugins/create?name=(plugin name)` create a plugin. * `DELETE /plugins/(plugin name)` delete a plugin. diff --git a/plugin/distribution/pull.go b/plugin/distribution/pull.go index cab0d285c9..5694be0573 100644 --- a/plugin/distribution/pull.go +++ b/plugin/distribution/pull.go @@ -153,7 +153,8 @@ func Pull(ref reference.Named, rs registry.Service, metaheader http.Header, auth logrus.Debugf("pull.go: error in json.Unmarshal(): %v", err) return nil, err } - if m.Config.MediaType != schema2.MediaTypePluginConfig { + if m.Config.MediaType != schema2.MediaTypePluginConfig && + m.Config.MediaType != "application/vnd.docker.plugin.image.v0+json" { //TODO: remove this v0 before 1.13 GA return nil, ErrUnsupportedMediaType } diff --git a/vendor.conf b/vendor.conf index b174d8cbf5..0b9374c474 100644 --- a/vendor.conf +++ b/vendor.conf @@ -44,7 +44,7 @@ github.com/boltdb/bolt fff57c100f4dea1905678da7e90d92429dff2904 github.com/miekg/dns 75e6e86cc601825c5dbcd4e0c209eab180997cd7 # get graph and distribution packages -github.com/docker/distribution fbb70dc3a14ca65cdac3aaf5e5122b03b42f6fbc +github.com/docker/distribution c04791f441f98bcf073353d7317db83663cf3ea2 github.com/vbatts/tar-split v0.10.1 # get go-zfs packages diff --git a/vendor/github.com/docker/distribution/manifest/schema2/manifest.go b/vendor/github.com/docker/distribution/manifest/schema2/manifest.go index 1a12827098..741998d044 100644 --- a/vendor/github.com/docker/distribution/manifest/schema2/manifest.go +++ b/vendor/github.com/docker/distribution/manifest/schema2/manifest.go @@ -18,7 +18,7 @@ const ( MediaTypeConfig = "application/vnd.docker.container.image.v1+json" // MediaTypePluginConfig specifies the mediaType for plugin configuration. - MediaTypePluginConfig = "application/vnd.docker.plugin.image.v0+json" + MediaTypePluginConfig = "application/vnd.docker.plugin.v1+json" // MediaTypeLayer is the mediaType used for layers referenced by the // manifest.