blob: 0706491679204c81306ae811c3401b06e8ca392e [file] [log] [blame]
package org.apache.amaterasu.leader.mesos
import org.apache.amaterasu.common.configuration.ClusterConfig
import org.apache.amaterasu.leader.mesos.schedulers.JobScheduler
import org.apache.amaterasu.leader.utilities.{Args, BaseJobLauncher}
import org.apache.log4j.LogManager
import org.apache.mesos.Protos.FrameworkID
import org.apache.mesos.{MesosSchedulerDriver, Protos}
/**
* The JobLauncher allows the execution of a single job, without creating a full
* Amaterasu cluster (no cluster scheduler).
*/
object MesosJobLauncher extends BaseJobLauncher {
override def run(arguments: Args, config: ClusterConfig, resume: Boolean): Unit = {
LogManager.resetConfiguration()
val frameworkBuilder = Protos.FrameworkInfo.newBuilder()
.setName(s"${arguments.name} - Amaterasu Job")
.setFailoverTimeout(config.timeout)
.setUser(config.user)
// TODO: test this
if (resume) {
frameworkBuilder.setId(FrameworkID.newBuilder().setValue(arguments.jobId))
}
val framework = frameworkBuilder.build()
val masterAddress = s"${config.master}:${config.masterPort}"
val scheduler = JobScheduler(
arguments.repo,
arguments.branch,
arguments.env,
resume,
config,
arguments.report,
arguments.home
)
val driver = new MesosSchedulerDriver(scheduler, framework, masterAddress)
log.debug(s"Connecting to master on: $masterAddress")
driver.run()
}
}