2868a45982
This PR modifies the configuration of the networking pause contaier to include the "unless-stopped" restart policy. The pause container should always be restored into a running state until Nomad itself issues a stop command for the container. This is not a _perfect_ fix for #12216 but it should cover the 99% use case - where a pause container gets accidently stopped / killed for some reason. There is still a possibility where the pause container and main task container are stopped and started in the order where the bad behavior persists, but this is fundamentally unavoidable due to how docker itself abstracts and manages the underlying network namespace referenced by the containers. Closes #12216
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package docker
|
|
|
|
import (
|
|
"testing"
|
|
|
|
docker "github.com/fsouza/go-dockerclient"
|
|
"github.com/hashicorp/nomad/ci"
|
|
"github.com/hashicorp/nomad/plugins/drivers"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDriver_createSandboxContainerConfig(t *testing.T) {
|
|
ci.Parallel(t)
|
|
testCases := []struct {
|
|
inputAllocID string
|
|
inputNetworkCreateRequest *drivers.NetworkCreateRequest
|
|
expectedOutputOpts *docker.CreateContainerOptions
|
|
name string
|
|
}{
|
|
{
|
|
inputAllocID: "768b5e8c-a52e-825c-d564-51100230eb62",
|
|
inputNetworkCreateRequest: &drivers.NetworkCreateRequest{
|
|
Hostname: "",
|
|
},
|
|
expectedOutputOpts: &docker.CreateContainerOptions{
|
|
Name: "nomad_init_768b5e8c-a52e-825c-d564-51100230eb62",
|
|
Config: &docker.Config{
|
|
Image: "gcr.io/google_containers/pause-amd64:3.1",
|
|
},
|
|
HostConfig: &docker.HostConfig{
|
|
NetworkMode: "none",
|
|
RestartPolicy: docker.RestartUnlessStopped(),
|
|
},
|
|
},
|
|
name: "no input hostname",
|
|
},
|
|
{
|
|
inputAllocID: "768b5e8c-a52e-825c-d564-51100230eb62",
|
|
inputNetworkCreateRequest: &drivers.NetworkCreateRequest{
|
|
Hostname: "linux",
|
|
},
|
|
expectedOutputOpts: &docker.CreateContainerOptions{
|
|
Name: "nomad_init_768b5e8c-a52e-825c-d564-51100230eb62",
|
|
Config: &docker.Config{
|
|
Image: "gcr.io/google_containers/pause-amd64:3.1",
|
|
Hostname: "linux",
|
|
},
|
|
HostConfig: &docker.HostConfig{
|
|
NetworkMode: "none",
|
|
RestartPolicy: docker.RestartUnlessStopped(),
|
|
},
|
|
},
|
|
name: "supplied input hostname",
|
|
},
|
|
}
|
|
|
|
d := &Driver{
|
|
config: &DriverConfig{
|
|
InfraImage: "gcr.io/google_containers/pause-amd64:3.1",
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
actualOutput, err := d.createSandboxContainerConfig(tc.inputAllocID, tc.inputNetworkCreateRequest)
|
|
assert.Nil(t, err, tc.name)
|
|
assert.Equal(t, tc.expectedOutputOpts, actualOutput, tc.name)
|
|
})
|
|
}
|
|
}
|