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() }
}