diff --git a/internal/pkg/object/command/ecs/ecs.go b/internal/pkg/object/command/ecs/ecs.go index 19ab71b..6b7ed7e 100644 --- a/internal/pkg/object/command/ecs/ecs.go +++ b/internal/pkg/object/command/ecs/ecs.go @@ -117,9 +117,10 @@ const ( ) var ( - errMissingTemplate = fmt.Errorf("task definition template is required") - cleanupMethod = telemetry.NewMethod("ecs", "cleanup") - handlerMethod = telemetry.NewMethod("ecs", "handler") + errMissingTemplate = fmt.Errorf("task definition template is required") + errNoTasksAvailable = fmt.Errorf("no tasks available to retrieve logs") + cleanupMethod = telemetry.NewMethod("ecs", "cleanup") + handlerMethod = telemetry.NewMethod("ecs", "handler") ) func New(commandCtx *heimdallContext.Context) (plugin.Handler, error) { @@ -213,6 +214,7 @@ func (execCtx *executionContext) startTasks(ctx context.Context, jobID string) e return err } taskName := fmt.Sprintf("%s%s-%d", startedByPrefix, jobID, i) + execCtx.runtime.Stdout.WriteString(fmt.Sprintf("ecs: started task name=%s arn=%s\n", taskName, taskARN)) execCtx.tasks[taskName] = &taskTracker{ Name: taskName, ActiveARN: taskARN, @@ -304,6 +306,7 @@ func (execCtx *executionContext) pollForCompletion(ctx context.Context) error { // Assign the new task ARN to the tracker tracker.ActiveARN = newTaskARN + execCtx.runtime.Stdout.WriteString(fmt.Sprintf("ecs: restarted task name=%s arn=%s retry=%d\n", tracker.Name, newTaskARN, tracker.Retries)) // Task failed but will be restarted, so mark as not complete done = false @@ -642,6 +645,10 @@ func (execCtx *executionContext) retrieveLogs(ctx context.Context) error { writer = execCtx.runtime.Stdout } + if selectedTask == nil { + return errNoTasksAvailable + } + // Extract task ID from ARN arnParts := strings.Split(selectedTask.ActiveARN, "/") if len(arnParts) < 2 {