Skip to content

Commit 93980d6

Browse files
Ryan Moransophiewigmore
Ryan Moran
authored andcommitted
Adds docker container restart command
1 parent 75b5894 commit 93980d6

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

docker.go

+21-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ type Docker struct {
1818
Container struct {
1919
Inspect DockerContainerInspect
2020
Logs DockerContainerLogs
21-
Run DockerContainerRun
2221
Remove DockerContainerRemove
22+
Restart DockerContainerRestart
23+
Run DockerContainerRun
2324
Stop DockerContainerStop
2425
}
2526

@@ -45,6 +46,7 @@ func NewDocker() Docker {
4546
}
4647

4748
docker.Container.Remove = DockerContainerRemove{executable: executable}
49+
docker.Container.Restart = DockerContainerRestart{executable: executable}
4850
docker.Container.Stop = DockerContainerStop{executable: executable}
4951

5052
docker.Volume.Remove = DockerVolumeRemove{executable: executable}
@@ -60,6 +62,7 @@ func (d Docker) WithExecutable(executable Executable) Docker {
6062

6163
d.Container.Inspect.executable = executable
6264
d.Container.Logs.executable = executable
65+
d.Container.Restart.executable = executable
6366
d.Container.Remove.executable = executable
6467
d.Container.Run.executable = executable
6568
d.Container.Run.inspect = d.Container.Inspect
@@ -277,6 +280,23 @@ func (r DockerContainerRun) Execute(imageID string) (Container, error) {
277280
return r.inspect.Execute(strings.TrimSpace(stdout.String()))
278281
}
279282

283+
type DockerContainerRestart struct {
284+
executable Executable
285+
}
286+
287+
func (r DockerContainerRestart) Execute(containerID string) error {
288+
stderr := bytes.NewBuffer(nil)
289+
err := r.executable.Execute(pexec.Execution{
290+
Args: []string{"container", "restart", containerID},
291+
Stderr: stderr,
292+
})
293+
if err != nil {
294+
return fmt.Errorf("failed to restart docker container: %w: %s", err, strings.TrimSpace(stderr.String()))
295+
}
296+
297+
return nil
298+
}
299+
280300
type DockerContainerRemove struct {
281301
executable Executable
282302
}

docker_test.go

+27
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,33 @@ func testDocker(t *testing.T, context spec.G, it spec.S) {
620620
})
621621
})
622622

623+
context("Restart", func() {
624+
it("restarts a docker container with the given container id", func() {
625+
err := docker.Container.Restart.Execute("some-container-id")
626+
Expect(err).NotTo(HaveOccurred())
627+
628+
Expect(executable.ExecuteCall.Receives.Execution.Args).To(Equal([]string{
629+
"container", "restart", "some-container-id",
630+
}))
631+
})
632+
633+
context("failure cases", func() {
634+
context("when the executable fails", func() {
635+
it.Before(func() {
636+
executable.ExecuteCall.Stub = func(execution pexec.Execution) error {
637+
fmt.Fprintln(execution.Stderr, "Error: No such container: some-container-id")
638+
return errors.New("exit status 1")
639+
}
640+
})
641+
642+
it("returns an error", func() {
643+
err := docker.Container.Restart.Execute("some-container-id")
644+
Expect(err).To(MatchError("failed to restart docker container: exit status 1: Error: No such container: some-container-id"))
645+
})
646+
})
647+
})
648+
})
649+
623650
context("Remove", func() {
624651
it("removes a docker container with the given container id", func() {
625652
err := docker.Container.Remove.Execute("some-container-id")

0 commit comments

Comments
 (0)