mirror of https://github.com/docker/cli.git
Enforce zero plugin refcount during disable.
When plugins have a positive refcount, they were not allowed to be removed. However, plugins could still be disabled when volumes referenced it and containers using them were running. This change fixes that by enforcing plugin refcount during disable. A "force" disable option is also added to ignore reference refcounting. Signed-off-by: Anusha Ragunathan <anusha@docker.com>
This commit is contained in:
parent
285710d3c8
commit
bf3250ae0a
|
@ -3,6 +3,7 @@ package plugin
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/cli"
|
"github.com/docker/docker/cli"
|
||||||
"github.com/docker/docker/cli/command"
|
"github.com/docker/docker/cli/command"
|
||||||
"github.com/docker/docker/reference"
|
"github.com/docker/docker/reference"
|
||||||
|
@ -11,19 +12,23 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func newDisableCommand(dockerCli *command.DockerCli) *cobra.Command {
|
func newDisableCommand(dockerCli *command.DockerCli) *cobra.Command {
|
||||||
|
var force bool
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "disable PLUGIN",
|
Use: "disable PLUGIN",
|
||||||
Short: "Disable a plugin",
|
Short: "Disable a plugin",
|
||||||
Args: cli.ExactArgs(1),
|
Args: cli.ExactArgs(1),
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
return runDisable(dockerCli, args[0])
|
return runDisable(dockerCli, args[0], force)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flags := cmd.Flags()
|
||||||
|
flags.BoolVarP(&force, "force", "f", false, "Force the disable of an active plugin")
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func runDisable(dockerCli *command.DockerCli, name string) error {
|
func runDisable(dockerCli *command.DockerCli, name string, force bool) error {
|
||||||
named, err := reference.ParseNamed(name) // FIXME: validate
|
named, err := reference.ParseNamed(name) // FIXME: validate
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -35,7 +40,7 @@ func runDisable(dockerCli *command.DockerCli, name string) error {
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("invalid name: %s", named.String())
|
return fmt.Errorf("invalid name: %s", named.String())
|
||||||
}
|
}
|
||||||
if err := dockerCli.Client().PluginDisable(context.Background(), ref.String()); err != nil {
|
if err := dockerCli.Client().PluginDisable(context.Background(), ref.String(), types.PluginDisableOptions{Force: force}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Fprintln(dockerCli.Out(), name)
|
fmt.Fprintln(dockerCli.Out(), name)
|
||||||
|
|
Loading…
Reference in New Issue