override fun runTask()

in aws-ecs-server/src/main/kotlin/jetbrains/buildServer/clouds/ecs/apiConnector/EcsApiConnectorImpl.kt [68:109]


    override fun runTask(
            launchType: LaunchType?,
            taskDefinition: EcsTaskDefinition,
            cluster: String?,
            taskGroup: String?,
            subnets: Collection<String>,
            securityGroups: Collection<String>,
            assignPublicIp: Boolean,
            additionalEnvironment: Map<String, String>,
            startedBy: String?,
            fargatePlatformVersion: String?
    ): List<EcsTask> {
        val containerOverrides = taskDefinition.containers.map {
            containerName -> ContainerOverride()
                                .withName(containerName)
                                .withEnvironment(additionalEnvironment.entries.map { entry -> KeyValuePair().withName(entry.key).withValue(entry.value) })
        }

        var request = RunTaskRequest()
                .withTaskDefinition(taskDefinition.arn)
                .withOverrides(TaskOverride().withContainerOverrides(containerOverrides))
                .withStartedBy(startedBy)
        if (launchType != null){
            request.withLaunchType(launchType)
        }
        if (launchType == LaunchType.FARGATE && fargatePlatformVersion != null){
            request.withPlatformVersion(fargatePlatformVersion)
        }
        if(cluster != null && !cluster.isEmpty()) request = request.withCluster(cluster)
        if(taskGroup != null && !taskGroup.isEmpty()) request = request.withGroup(taskGroup)
        if(!subnets.isEmpty() || !securityGroups.isEmpty()) request = request.withNetworkConfiguration(
                NetworkConfiguration().withAwsvpcConfiguration(
                        AwsVpcConfiguration()
                                .let { if (subnets.isNotEmpty()) it.withSubnets(subnets).withAssignPublicIp(if(assignPublicIp) AssignPublicIp.ENABLED else AssignPublicIp.DISABLED) else it }
                                .let { if (securityGroups.isNotEmpty()) it.withSecurityGroups(securityGroups) else it }))

        val runTaskResult = ecs.runTask(request)
        if (!runTaskResult.failures.isEmpty())
            throw EcsApiCallFailureException(runTaskResult.failures)

        return runTaskResult.tasks.map { it.wrap() }
    }