diff --git a/agent/config/config.go b/agent/config/config.go index 1079684bcfa..20f2f6846e4 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -132,7 +132,6 @@ const ( DefaultTaskMetadataBurstRate = 60 //Known cached image names - CachedImageNamePauseContainer = "amazon/amazon-ecs-pause:0.1.0" CachedImageNameAgentContainer = "amazon/amazon-ecs-agent:latest" // DefaultNvidiaRuntime is the name of the runtime to pass Nvidia GPUs to containers diff --git a/agent/config/config_test.go b/agent/config/config_test.go index e4ae71ab25b..3ac2d9e29bd 100644 --- a/agent/config/config_test.go +++ b/agent/config/config_test.go @@ -419,7 +419,7 @@ func TestValidForImagesCleanupExclusion(t *testing.T) { defer setTestRegion()() defer setTestEnv("ECS_EXCLUDE_UNTRACKED_IMAGE", "amazonlinux:2,amazonlinux:3")() imagesNotDelete := parseImageCleanupExclusionList("ECS_EXCLUDE_UNTRACKED_IMAGE") - expectedImages := []string{"amazonlinux:2", "amazonlinux:3", CachedImageNameAgentContainer, CachedImageNamePauseContainer} + expectedImages := []string{"amazonlinux:2", "amazonlinux:3"} assert.Equal(t, expectedImages, imagesNotDelete, "unexpected imageCleanupExclusionList") } diff --git a/agent/config/parse.go b/agent/config/parse.go index 186f126d3c3..ef1165af42e 100644 --- a/agent/config/parse.go +++ b/agent/config/parse.go @@ -309,16 +309,11 @@ func parseImageCleanupExclusionList(envVar string) []string { var imageCleanupExclusionList []string if imageEnv == "" { seelog.Debugf("Environment variable empty: %s", imageEnv) + return nil } else { imageCleanupExclusionList = strings.Split(imageEnv, ",") } - // append known cached internal images to imageCleanupExclusionLis - imageCleanupExclusionList = append(imageCleanupExclusionList, CachedImageNameAgentContainer, CachedImageNamePauseContainer) - - for _, image := range imageCleanupExclusionList { - seelog.Infof("Image excluded from cleanup: %s", image) - } return imageCleanupExclusionList } diff --git a/agent/engine/docker_image_manager.go b/agent/engine/docker_image_manager.go index 2d57545761b..22815db5311 100644 --- a/agent/engine/docker_image_manager.go +++ b/agent/engine/docker_image_manager.go @@ -81,7 +81,7 @@ func NewImageManager(cfg *config.Config, client dockerapi.DockerClient, state do numImagesToDelete: cfg.NumImagesToDeletePerCycle, imageCleanupTimeInterval: cfg.ImageCleanupInterval, imagePullBehavior: cfg.ImagePullBehavior, - imageCleanupExclusionList: cfg.ImageCleanupExclusionList, + imageCleanupExclusionList: buildImageCleanupExclusionList(cfg), deleteNonECSImagesEnabled: cfg.DeleteNonECSImagesEnabled, nonECSContainerCleanupWaitDuration: cfg.TaskCleanupWaitDuration, numNonECSContainersToDelete: cfg.NumNonECSContainersToDeletePerCycle, @@ -89,6 +89,19 @@ func NewImageManager(cfg *config.Config, client dockerapi.DockerClient, state do } } +func buildImageCleanupExclusionList(cfg *config.Config) []string { + // append known cached internal images to imageCleanupExclusionList + excludedImages := append(cfg.ImageCleanupExclusionList, + cfg.PauseContainerImageName+":"+cfg.PauseContainerTag, + config.DefaultPauseContainerImageName+":"+config.DefaultPauseContainerTag, + config.CachedImageNameAgentContainer, + ) + for _, image := range excludedImages { + seelog.Infof("Image excluded from cleanup: %s", image) + } + return excludedImages +} + func (imageManager *dockerImageManager) SetSaver(stateManager statemanager.Saver) { imageManager.saver = stateManager } diff --git a/agent/engine/docker_image_manager_test.go b/agent/engine/docker_image_manager_test.go index 6fbacba4cda..8a014dc3486 100644 --- a/agent/engine/docker_image_manager_test.go +++ b/agent/engine/docker_image_manager_test.go @@ -44,6 +44,23 @@ func defaultTestConfig() *config.Config { return cfg } +func TestNewImageManagerExcludesCachedImages(t *testing.T) { + cfg := defaultTestConfig() + cfg.PauseContainerImageName = "pause-name" + cfg.PauseContainerTag = "pause-tag" + cfg.ImageCleanupExclusionList = []string{"excluded:1"} + expected := []string{ + "excluded:1", + "pause-name:pause-tag", + config.DefaultPauseContainerImageName + ":" + config.DefaultPauseContainerTag, + config.CachedImageNameAgentContainer, + } + imageManager := NewImageManager(cfg, nil, nil) + dockerImageManager, ok := imageManager.(*dockerImageManager) + require.True(t, ok, "imageManager must be *dockerImageManager") + assert.ElementsMatch(t, expected, dockerImageManager.imageCleanupExclusionList) +} + // TestImagePullRemoveDeadlock tests if there's a deadlock when trying to // pull an image while image clean up is in progress func TestImagePullRemoveDeadlock(t *testing.T) {