From 439a19426cd0efc5807e2dbdffc381dd22d779a5 Mon Sep 17 00:00:00 2001 From: JB Arsenault Date: Mon, 11 Jul 2016 11:03:02 -0400 Subject: [PATCH] Add `destroy_grace_seconds` option to stop container before delete (#7513) --- resource_docker_container.go | 5 +++++ resource_docker_container_funcs.go | 8 ++++++++ resource_docker_container_test.go | 1 + 3 files changed, 14 insertions(+) diff --git a/resource_docker_container.go b/resource_docker_container.go index 604b116e..4e61bc2a 100644 --- a/resource_docker_container.go +++ b/resource_docker_container.go @@ -285,6 +285,11 @@ func resourceDockerContainer() *schema.Resource { ForceNew: true, }, + "destroy_grace_seconds": &schema.Schema{ + Type: schema.TypeInt, + Optional: true, + }, + "labels": &schema.Schema{ Type: schema.TypeMap, Optional: true, diff --git a/resource_docker_container_funcs.go b/resource_docker_container_funcs.go index a2aa1479..9668fd0a 100644 --- a/resource_docker_container_funcs.go +++ b/resource_docker_container_funcs.go @@ -265,6 +265,14 @@ func resourceDockerContainerUpdate(d *schema.ResourceData, meta interface{}) err func resourceDockerContainerDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*dc.Client) + // Stop the container before removing if destroy_grace_seconds is defined + if d.Get("destroy_grace_seconds").(int) > 0 { + var timeout = uint(d.Get("destroy_grace_seconds").(int)) + if err := client.StopContainer(d.Id(), timeout); err != nil { + return fmt.Errorf("Error stopping container %s: %s", d.Id(), err) + } + } + removeOpts := dc.RemoveContainerOptions{ ID: d.Id(), RemoveVolumes: true, diff --git a/resource_docker_container_test.go b/resource_docker_container_test.go index a3d7e925..1c4da8cd 100644 --- a/resource_docker_container_test.go +++ b/resource_docker_container_test.go @@ -255,6 +255,7 @@ resource "docker_container" "foo" { entrypoint = ["/bin/bash", "-c", "ping localhost"] user = "root:root" restart = "on-failure" + destroy_grace_seconds = 10 max_retry_count = 5 memory = 512 memory_swap = 2048