func()

in ecs-cli/modules/cli/compose/entity/task/task.go [308:395]


func (t *Task) buildRunTaskInput(taskDefinition string, count int, overrides map[string][]string) (*ecs.RunTaskInput, error) {
	cluster := t.Context().CommandConfig.Cluster
	launchType := t.Context().CommandConfig.LaunchType
	group := entity.GetTaskGroup(t)

	ecsParams := t.ecsContext.ECSParams
	networkConfig, err := composeutils.ConvertToECSNetworkConfiguration(ecsParams)

	if err != nil {
		return nil, err
	}

	placementConstraints, err := composeutils.ConvertToECSPlacementConstraints(ecsParams)
	if err != nil {
		return nil, err
	}

	placementStrategy, err := composeutils.ConvertToECSPlacementStrategy(ecsParams)
	if err != nil {
		return nil, err
	}

	// NOTE: this validation is not useful if called after RegisterTaskDefinition
	if err := entity.ValidateFargateParams(ecsParams, launchType); err != nil {
		return nil, err
	}

	taskOverride, err := convertToECSTaskOverride(overrides)
	if err != nil {
		return nil, err
	}

	runTaskInput := &ecs.RunTaskInput{
		Cluster:        aws.String(cluster),
		TaskDefinition: aws.String(taskDefinition),
		Group:          aws.String(group),
		Count:          aws.Int64(int64(count)),
	}

	if networkConfig != nil {
		runTaskInput.NetworkConfiguration = networkConfig
	}

	if taskOverride != nil {
		runTaskInput.Overrides = taskOverride
	}

	if placementConstraints != nil {
		runTaskInput.PlacementConstraints = placementConstraints
	}

	if placementStrategy != nil {
		runTaskInput.PlacementStrategy = placementStrategy
	}

	if launchType != "" {
		runTaskInput.LaunchType = aws.String(launchType)
	}

	tags, err := t.GetTags()
	if err != nil {
		return nil, err
	}
	if len(tags) > 0 {
		runTaskInput.Tags = tags
	}

	if !t.Context().CLIContext.Bool(flags.DisableECSManagedTagsFlag) {
		enabled, err := isTaskLongARNEnabled(t.Context().ECSClient)
		if err != nil {
			return nil, err
		}
		if enabled {
			log.Info("Auto-enabling ECS Managed Tags")
			runTaskInput.EnableECSManagedTags = aws.Bool(true)
		}
	}

	// TODO: revert to "LATEST" when latest refers to 1.4.0
	if launchType == config.LaunchTypeFargate && ecsParams != nil && len(ecsParams.TaskDefinition.EFSVolumes) > 0 {
		log.Warnf("Detected an EFS Volume in task definition %s", taskDefinition)
		log.Warnf("Using Fargate platform version %s, which includes changes to the networking flows for VPC endpoint customers.", config.PlatformVersion140)
		log.Warn("Learn more: https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/")
		runTaskInput.PlatformVersion = aws.String(config.PlatformVersion140)
	}

	return runTaskInput, nil
}