From 2c7bea7190aea1b0770732cdccce819979f54811 Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Tue, 20 Nov 2018 09:49:50 -0500 Subject: [PATCH 1/2] Add support for storage opt --- drivers/docker/config.go | 2 ++ drivers/docker/driver.go | 1 + drivers/docker/driver_test.go | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/drivers/docker/config.go b/drivers/docker/config.go index 6d2edae5dbf0..2372fa45cbd2 100644 --- a/drivers/docker/config.go +++ b/drivers/docker/config.go @@ -263,6 +263,7 @@ var ( "readonly_rootfs": hclspec.NewAttr("readonly_rootfs", "bool", false), "security_opt": hclspec.NewAttr("security_opt", "list(string)", false), "shm_size": hclspec.NewAttr("shm_size", "number", false), + "storage_opt": hclspec.NewBlockAttrs("storage_opt", "string", false), "sysctl": hclspec.NewBlockAttrs("sysctl", "string", false), "tty": hclspec.NewAttr("tty", "bool", false), "ulimit": hclspec.NewBlockAttrs("ulimit", "string", false), @@ -319,6 +320,7 @@ type TaskConfig struct { ReadonlyRootfs bool `codec:"readonly_rootfs"` SecurityOpt []string `codec:"security_opt"` ShmSize int64 `codec:"shm_size"` + StorageOpt map[string]string `codec:"storage_opt"` Sysctl map[string]string `codec:"sysctl"` TTY bool `codec:"tty"` Ulimit map[string]string `codec:"ulimit"` diff --git a/drivers/docker/driver.go b/drivers/docker/driver.go index d04e8780090f..fb4cccae30f6 100644 --- a/drivers/docker/driver.go +++ b/drivers/docker/driver.go @@ -627,6 +627,7 @@ func (d *Driver) createContainerConfig(task *drivers.TaskConfig, driverConfig *T // used to share data between different tasks in the same task group. Binds: binds, + StorageOpt: driverConfig.StorageOpt, VolumeDriver: driverConfig.VolumeDriver, PidsLimit: driverConfig.PidsLimit, diff --git a/drivers/docker/driver_test.go b/drivers/docker/driver_test.go index 8714cac6376e..37100a437f32 100644 --- a/drivers/docker/driver_test.go +++ b/drivers/docker/driver_test.go @@ -1122,6 +1122,25 @@ func TestDockerDriver_SecurityOpt(t *testing.T) { require.Exactly(t, cfg.SecurityOpt, container.HostConfig.SecurityOpt) } +func TestDockerDriver_CreateContainerConfig(t *testing.T) { + t.Parallel() + + task, cfg, _ := dockerTask(t) + opt := map[string]string{"size": "120G"} + + cfg.StorageOpt = opt + require.NoError(t, task.EncodeConcreteDriverConfig(cfg)) + + dh := dockerDriverHarness(t, nil) + driver := dh.Impl().(*Driver) + + c, err := driver.createContainerConfig(task, cfg, "org/repo:0.1") + require.NoError(t, err) + + require.Equal(t, "org/repo:0.1", c.Config.Image) + require.EqualValues(t, opt, c.HostConfig.StorageOpt) +} + func TestDockerDriver_Capabilities(t *testing.T) { if !tu.IsTravis() { t.Parallel() From 9b48b09498113337903a250bfb68ded1f7f75a5f Mon Sep 17 00:00:00 2001 From: Mahmood Ali Date: Tue, 20 Nov 2018 09:38:09 -0500 Subject: [PATCH 2/2] document storage opts --- website/source/docs/drivers/docker.html.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/website/source/docs/drivers/docker.html.md b/website/source/docs/drivers/docker.html.md index 0bc12f5ecb41..55b3a4b0e93a 100644 --- a/website/source/docs/drivers/docker.html.md +++ b/website/source/docs/drivers/docker.html.md @@ -227,6 +227,19 @@ The `docker` driver supports the following configuration in the job spec. Only * `shm_size` - (Optional) The size (bytes) of /dev/shm for the container. +* `storage_opt` - (Optional) A key-value map of storage options set to the containers on start. + This overrides the [host dockerd configuration](https://docs.docker.com/engine/reference/commandline/dockerd/#options-per-storage-driver). + For example: + + + ```hcl + config { + storage_opt = { + size = "40G" + } + } + ``` + * `SSL` - (Optional) If this is set to true, Nomad uses SSL to talk to the repository. The default value is `true`. **Deprecated as of 0.5.3**