From 22ac133eabfb002f19c1964aee54d78757730051 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 16:52:27 -0300 Subject: [PATCH 1/6] Custom docker runtime using var ECS_DOCKER_RUNTIME --- agent/api/task/task.go | 9 +++++++++ agent/config/config.go | 1 + agent/config/types.go | 3 +++ 3 files changed, 13 insertions(+) diff --git a/agent/api/task/task.go b/agent/api/task/task.go index dc2f4dfda55..7703df90236 100644 --- a/agent/api/task/task.go +++ b/agent/api/task/task.go @@ -1946,6 +1946,15 @@ func (task *Task) dockerHostConfig(container *apicontainer.Container, dockerCont // overrideContainerRuntime overrides the runtime for the container in host config if needed. func (task *Task) overrideContainerRuntime(container *apicontainer.Container, hostCfg *dockercontainer.HostConfig, cfg *config.Config) *apierrors.HostConfigError { + if cfg.Runtime != "" { + logger.Debug("Setting runtime for container", logger.Fields{ + field.TaskID: task.GetID(), + field.Container: container.Name, + "runTime": cfg.Runtime, + }) + hostCfg.Runtime = cfg.Runtime + } + if task.isGPUEnabled() && task.shouldRequireNvidiaRuntime(container) { if !cfg.External.Enabled() { if task.NvidiaRuntime == "" { diff --git a/agent/config/config.go b/agent/config/config.go index 9350c04909f..58a49b22bc0 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -597,6 +597,7 @@ func environmentConfig() (Config, error) { WarmPoolsSupport: parseBooleanDefaultFalseConfig("ECS_WARM_POOLS_CHECK"), DynamicHostPortRange: parseDynamicHostPortRange("ECS_DYNAMIC_HOST_PORT_RANGE"), TaskPidsLimit: parseTaskPidsLimit(), + Runtime: os.Getenv("ECS_DOCKER_RUNTIME"), }, err } diff --git a/agent/config/types.go b/agent/config/types.go index ced906727c5..178730e7b13 100644 --- a/agent/config/types.go +++ b/agent/config/types.go @@ -376,4 +376,7 @@ type Config struct { // cgroup setting at the ECS task level. // see https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#pid TaskPidsLimit int + + // Runtime specifies a custom docker runtime to be used when launching tasks. + Runtime string } From 841cf6a9b401aab466a73710d1e215e47c5e4c5f Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 16:57:17 -0300 Subject: [PATCH 2/6] Test on push --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5a78786eac7..7b8792b200f 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -1,6 +1,6 @@ name: Linux -on: [pull_request] +on: [push, pull_request] permissions: read-all jobs: From 6f22b74308e5b8288eb8b2db5b861e34f54afbd0 Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 17:01:21 -0300 Subject: [PATCH 3/6] Test custom docker runtime is read from env var --- agent/config/config_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/agent/config/config_test.go b/agent/config/config_test.go index 7b1c08c6679..6048326c88b 100644 --- a/agent/config/config_test.go +++ b/agent/config/config_test.go @@ -162,6 +162,7 @@ func TestEnvironmentConfig(t *testing.T) { defer setTestEnv("ECS_EXCLUDE_IPV6_PORTBINDING", "true")() defer setTestEnv("ECS_WARM_POOLS_CHECK", "false")() defer setTestEnv("ECS_DYNAMIC_HOST_PORT_RANGE", "200-300")() + defer setTestEnv("ECS_DOCKER_RUNTIME", "custom-runtime")() additionalLocalRoutesJSON := `["1.2.3.4/22","5.6.7.8/32"]` setTestEnv("ECS_AWSVPC_ADDITIONAL_LOCAL_ROUTES", additionalLocalRoutesJSON) setTestEnv("ECS_ENABLE_CONTAINER_METADATA", "true") @@ -222,6 +223,7 @@ func TestEnvironmentConfig(t *testing.T) { assert.True(t, conf.ShouldExcludeIPv6PortBinding.Enabled(), "Wrong value for ShouldExcludeIPv6PortBinding") assert.False(t, conf.WarmPoolsSupport.Enabled(), "Wrong value for WarmPoolsSupport") assert.Equal(t, "200-300", conf.DynamicHostPortRange) + assert.Equal(t, "custom-runtime", conf.Runtime) } func TestTrimWhitespaceWhenCreating(t *testing.T) { From 7d6240108ee67bb37c2f72f61704d1bc3b7d04ca Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 17:19:11 -0300 Subject: [PATCH 4/6] Test task config docker custom runtime --- agent/api/task/task_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/agent/api/task/task_test.go b/agent/api/task/task_test.go index fa7eacbec79..cbe352e2dc2 100644 --- a/agent/api/task/task_test.go +++ b/agent/api/task/task_test.go @@ -3542,6 +3542,21 @@ func TestDockerHostConfigNvidiaRuntime(t *testing.T) { assert.Equal(t, testTask.NvidiaRuntime, dockerHostConfig.Runtime) } +func TestDockerHostConfigCustomRuntime(t *testing.T) { + testTask := &Task{ + Arn: "test", + Containers: []*apicontainer.Container{ + { + Name: "myName1", + Image: "image:tag", + }, + }, + + dockerHostConfig, _ := testTask.DockerHostConfig(testTask.Containers[0], dockerMap(testTask), defaultDockerClientAPIVersion, + &config.Config{Runtime: "custom-runtime"}) + assert.Equal(t, "custom-runtime", dockerHostConfig.Runtime) +} + func TestDockerHostConfigRuntimeWithoutGPU(t *testing.T) { testTask := &Task{ Arn: "test", From 2f2c58e5dcf0a161341e56f1075029e03f6305df Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 17:29:13 -0300 Subject: [PATCH 5/6] Fix syntax error in new test --- agent/api/task/task_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/agent/api/task/task_test.go b/agent/api/task/task_test.go index cbe352e2dc2..639024de7a1 100644 --- a/agent/api/task/task_test.go +++ b/agent/api/task/task_test.go @@ -3547,10 +3547,11 @@ func TestDockerHostConfigCustomRuntime(t *testing.T) { Arn: "test", Containers: []*apicontainer.Container{ { - Name: "myName1", - Image: "image:tag", + Name: "myName1", + Image: "image:tag", }, }, + } dockerHostConfig, _ := testTask.DockerHostConfig(testTask.Containers[0], dockerMap(testTask), defaultDockerClientAPIVersion, &config.Config{Runtime: "custom-runtime"}) From 217d69954633c6d8a38f6f9c630dc98c4ba6181d Mon Sep 17 00:00:00 2001 From: Miguel Liezun Date: Sun, 14 Jan 2024 17:39:32 -0300 Subject: [PATCH 6/6] Remove test on push --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 7b8792b200f..5a78786eac7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -1,6 +1,6 @@ name: Linux -on: [push, pull_request] +on: [pull_request] permissions: read-all jobs: