From 12485d62eeba27119260dc5eb54ac4fa83c3130b Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Tue, 28 Feb 2017 11:11:48 +0100 Subject: [PATCH] Introduce a CheckContainer to remove duplication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some methods need to get a container *and* validate some conditon on these (is the container running, …). The CheckContainer allows to do that and helps remove some duplication. Signed-off-by: Vincent Demeester --- daemon/container.go | 10 ++++++++++ daemon/container_operations_unix.go | 30 +++++++++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/daemon/container.go b/daemon/container.go index d680f50573..9cbee88f2d 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -55,6 +55,16 @@ func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, e return daemon.containers.Get(containerID), nil } +// checkContainer make sure the specified container validates the specified conditions +func (daemon *Daemon) checkContainer(container *container.Container, conditions ...func(*container.Container) error) error { + for _, condition := range conditions { + if err := condition(container); err != nil { + return err + } + } + return nil +} + // Exists returns a true if a container of the specified ID or name exists, // false otherwise. func (daemon *Daemon) Exists(id string) bool { diff --git a/daemon/container_operations_unix.go b/daemon/container_operations_unix.go index c5e623cdd3..67b3ee38c0 100644 --- a/daemon/container_operations_unix.go +++ b/daemon/container_operations_unix.go @@ -58,32 +58,34 @@ func (daemon *Daemon) setupLinkedContainers(container *container.Container) ([]s func (daemon *Daemon) getIpcContainer(container *container.Container) (*container.Container, error) { containerID := container.HostConfig.IpcMode.Container() - c, err := daemon.GetContainer(containerID) + container, err := daemon.GetContainer(containerID) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "cannot join IPC of a non running container: %s", container.ID) } - if !c.IsRunning() { - return nil, fmt.Errorf("cannot join IPC of a non running container: %s", containerID) - } - if c.IsRestarting() { - return nil, errContainerIsRestarting(container.ID) - } - return c, nil + return container, daemon.checkContainer(container, containerIsRunning, containerIsNotRestarting) } func (daemon *Daemon) getPidContainer(container *container.Container) (*container.Container, error) { containerID := container.HostConfig.PidMode.Container() - c, err := daemon.GetContainer(containerID) + container, err := daemon.GetContainer(containerID) if err != nil { - return nil, err + return nil, errors.Wrapf(err, "cannot join PID of a non running container: %s", container.ID) } + return container, daemon.checkContainer(container, containerIsRunning, containerIsNotRestarting) +} + +func containerIsRunning(c *container.Container) error { if !c.IsRunning() { - return nil, fmt.Errorf("cannot join PID of a non running container: %s", containerID) + return errors.Errorf("container %s is not running", c.ID) } + return nil +} + +func containerIsNotRestarting(c *container.Container) error { if c.IsRestarting() { - return nil, errContainerIsRestarting(container.ID) + return errContainerIsRestarting(c.ID) } - return c, nil + return nil } func (daemon *Daemon) setupIpcDirs(c *container.Container) error {