diff --git a/drivers/docker/config.go b/drivers/docker/config.go index 7f673b583ddb..5039f0c5fab1 100644 --- a/drivers/docker/config.go +++ b/drivers/docker/config.go @@ -256,6 +256,7 @@ var ( "load": hclspec.NewAttr("load", "string", false), "logging": hclspec.NewBlock("logging", false, hclspec.NewObject(map[string]*hclspec.Spec{ "type": hclspec.NewAttr("type", "string", false), + "driver": hclspec.NewAttr("driver", "string", false), "config": hclspec.NewAttr("config", "list(map(string))", false), })), "mac_address": hclspec.NewAttr("mac_address", "string", false), @@ -397,6 +398,7 @@ func (d DockerDevice) toDockerDevice() (docker.Device, error) { type DockerLogging struct { Type string `codec:"type"` + Driver string `codec:"driver"` Config hclutils.MapStrStr `codec:"config"` } diff --git a/drivers/docker/config_test.go b/drivers/docker/config_test.go index 95ca5a4e25d0..47c71c55ffb9 100644 --- a/drivers/docker/config_test.go +++ b/drivers/docker/config_test.go @@ -181,7 +181,8 @@ config { } load = "/tmp/image.tar.gz" logging { - type = "json-file" + driver = "json-file-driver" + type = "json-file" config { "max-file" = "3" "max-size" = "10m" @@ -308,7 +309,8 @@ config { }, LoadImage: "/tmp/image.tar.gz", Logging: DockerLogging{ - Type: "json-file", + Driver: "json-file-driver", + Type: "json-file", Config: map[string]string{ "max-file": "3", "max-size": "10m", diff --git a/drivers/docker/driver.go b/drivers/docker/driver.go index 4263409a99ec..a1718b5a7b66 100644 --- a/drivers/docker/driver.go +++ b/drivers/docker/driver.go @@ -706,8 +706,13 @@ func (d *Driver) createContainerConfig(task *drivers.TaskConfig, driverConfig *T hostConfig.MemorySwap = task.Resources.LinuxResources.MemoryLimitBytes // MemorySwap is memory + swap. } + loggingDriver := driverConfig.Logging.Type + if loggingDriver == "" { + loggingDriver = driverConfig.Logging.Driver + } + hostConfig.LogConfig = docker.LogConfig{ - Type: driverConfig.Logging.Type, + Type: loggingDriver, Config: driverConfig.Logging.Config, } diff --git a/drivers/docker/driver_test.go b/drivers/docker/driver_test.go index ea30027ec4ef..c0a9e8fbed38 100644 --- a/drivers/docker/driver_test.go +++ b/drivers/docker/driver_test.go @@ -930,6 +930,52 @@ func TestDockerDriver_CreateContainerConfig(t *testing.T) { require.EqualValues(t, opt, c.HostConfig.StorageOpt) } +func TestDockerDriver_CreateContainerConfig_Logging(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + loggingConfig DockerLogging + expectedDriver string + }{ + { + "simple type", + DockerLogging{Type: "fluentd"}, + "fluentd", + }, + { + "simple driver", + DockerLogging{Driver: "fluentd"}, + "fluentd", + }, + { + "type takes precedence", + DockerLogging{ + Type: "json-file", + Driver: "fluentd", + }, + "json-file", + }, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + task, cfg, _ := dockerTask(t) + + cfg.Logging = c.loggingConfig + require.NoError(t, task.EncodeConcreteDriverConfig(cfg)) + + dh := dockerDriverHarness(t, nil) + driver := dh.Impl().(*Driver) + + cc, err := driver.createContainerConfig(task, cfg, "org/repo:0.1") + require.NoError(t, err) + + require.Equal(t, c.expectedDriver, cc.HostConfig.LogConfig.Type) + }) + } +} + func TestDockerDriver_CreateContainerConfigWithRuntimes(t *testing.T) { if !tu.IsCI() { t.Parallel()