From 1477e76f14bcfae5f4ba88b516b15f0e303c833c Mon Sep 17 00:00:00 2001
From: t-kikuc <tkikuchi07f@gmail.com>
Date: Fri, 27 Sep 2024 12:57:56 +0900
Subject: [PATCH] fix: avoid panic when live taskdef does not exist

Signed-off-by: t-kikuc <tkikuchi07f@gmail.com>
---
 pkg/app/piped/driftdetector/ecs/detector.go | 27 ++++++++++++---------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/pkg/app/piped/driftdetector/ecs/detector.go b/pkg/app/piped/driftdetector/ecs/detector.go
index 4ea1f4fa06..3852ae79de 100644
--- a/pkg/app/piped/driftdetector/ecs/detector.go
+++ b/pkg/app/piped/driftdetector/ecs/detector.go
@@ -252,15 +252,18 @@ func ignoreParameters(liveManifests provider.ECSManifests, headManifests provide
 	liveService.TaskSets = nil
 
 	liveTask := liveManifests.TaskDefinition
-	liveTask.RegisteredAt = nil
-	liveTask.RegisteredBy = nil
-	liveTask.RequiresAttributes = nil
-	liveTask.Revision = 0 // TODO: Find a way to compare the revision if possible.
-	liveTask.TaskDefinitionArn = nil
-	for i := range liveTask.ContainerDefinitions {
-		for j := range liveTask.ContainerDefinitions[i].PortMappings {
-			// We ignore diff of HostPort because it has several default values. See https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html#ECS-Type-ContainerDefinition-portMappings.
-			liveTask.ContainerDefinitions[i].PortMappings[j].HostPort = nil
+	// When liveTask does not exist, e.g. right after the service is created.
+	if liveTask != nil {
+		liveTask.RegisteredAt = nil
+		liveTask.RegisteredBy = nil
+		liveTask.RequiresAttributes = nil
+		liveTask.Revision = 0 // TODO: Find a way to compare the revision if possible.
+		liveTask.TaskDefinitionArn = nil
+		for i := range liveTask.ContainerDefinitions {
+			for j := range liveTask.ContainerDefinitions[i].PortMappings {
+				// We ignore diff of HostPort because it has several default values. See https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html#ECS-Type-ContainerDefinition-portMappings.
+				liveTask.ContainerDefinitions[i].PortMappings[j].HostPort = nil
+			}
 		}
 	}
 
@@ -290,8 +293,10 @@ func ignoreParameters(liveManifests provider.ECSManifests, headManifests provide
 	headService.Tags = nil
 
 	headTask := headManifests.TaskDefinition
-	headTask.Status = types.TaskDefinitionStatusActive  // If livestate's status is not ACTIVE, we should re-deploy a new task definition.
-	headTask.Compatibilities = liveTask.Compatibilities // Users can specify Compatibilities in a task definition file, but it is not used when registering a task definition.
+	headTask.Status = types.TaskDefinitionStatusActive // If livestate's status is not ACTIVE, we should re-deploy a new task definition.
+	if liveTask != nil {
+		headTask.Compatibilities = liveTask.Compatibilities // Users can specify Compatibilities in a task definition file, but it is not used when registering a task definition.
+	}
 
 	for i := range headTask.ContainerDefinitions {
 		cd := &headTask.ContainerDefinitions[i]