| package daemon |
| |
| import ( |
| "context" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/client" |
| "gotest.tools/poll" |
| ) |
| |
| // PluginIsRunning provides a poller to check if the specified plugin is running |
| func (d *Daemon) PluginIsRunning(name string) func(poll.LogT) poll.Result { |
| return withClient(d, withPluginInspect(name, func(plugin *types.Plugin, t poll.LogT) poll.Result { |
| if plugin.Enabled { |
| return poll.Success() |
| } |
| return poll.Continue("plugin %q is not enabled", name) |
| })) |
| } |
| |
| // PluginIsNotRunning provides a poller to check if the specified plugin is not running |
| func (d *Daemon) PluginIsNotRunning(name string) func(poll.LogT) poll.Result { |
| return withClient(d, withPluginInspect(name, func(plugin *types.Plugin, t poll.LogT) poll.Result { |
| if !plugin.Enabled { |
| return poll.Success() |
| } |
| return poll.Continue("plugin %q is enabled", name) |
| })) |
| } |
| |
| // PluginIsNotPresent provides a poller to check if the specified plugin is not present |
| func (d *Daemon) PluginIsNotPresent(name string) func(poll.LogT) poll.Result { |
| return withClient(d, func(c client.APIClient, t poll.LogT) poll.Result { |
| _, _, err := c.PluginInspectWithRaw(context.Background(), name) |
| if client.IsErrNotFound(err) { |
| return poll.Success() |
| } |
| if err != nil { |
| return poll.Error(err) |
| } |
| return poll.Continue("plugin %q exists", name) |
| }) |
| } |
| |
| // PluginReferenceIs provides a poller to check if the specified plugin has the specified reference |
| func (d *Daemon) PluginReferenceIs(name, expectedRef string) func(poll.LogT) poll.Result { |
| return withClient(d, withPluginInspect(name, func(plugin *types.Plugin, t poll.LogT) poll.Result { |
| if plugin.PluginReference == expectedRef { |
| return poll.Success() |
| } |
| return poll.Continue("plugin %q reference is not %q", name, expectedRef) |
| })) |
| } |
| |
| func withPluginInspect(name string, f func(*types.Plugin, poll.LogT) poll.Result) func(client.APIClient, poll.LogT) poll.Result { |
| return func(c client.APIClient, t poll.LogT) poll.Result { |
| plugin, _, err := c.PluginInspectWithRaw(context.Background(), name) |
| if client.IsErrNotFound(err) { |
| return poll.Continue("plugin %q not found", name) |
| } |
| if err != nil { |
| return poll.Error(err) |
| } |
| return f(plugin, t) |
| } |
| |
| } |
| |
| func withClient(d *Daemon, f func(client.APIClient, poll.LogT) poll.Result) func(poll.LogT) poll.Result { |
| return func(t poll.LogT) poll.Result { |
| c, err := d.NewClient() |
| if err != nil { |
| poll.Error(err) |
| } |
| return f(c, t) |
| } |
| } |