Tango VMMS API
This page documents the interface for Tango's Virtual Machine Management Systems' (VMMSs) API and instructions for setting up VMMSs.
See the vmms directory in Tango for example implementations.
We currently provide Docker VMMS and the Amazon EC2 VMMS interfaces. The following API is for developers who intend to use a different kind of VMMS for Tango's autograding purposes.
API
The functions necessary to implement the API are documented here. Note that for certain implementations, some of these methods will be no-ops since the VMMS doesn't require any particular instructions to perform the specified actions. Furthermore, throughout this document, we use the term "VM" liberally to represent any container-like object on which Tango jobs may be run.
initializeVM
initializeVM(self, vm)
Creates a new VM instance for the VMMS based on the fields of vm
, which is a TangoMachine
object defined in tangoObjects.py
.
waitVM
waitVM(self, vm, max_secs)
Waits at most max_secs
for a VM to be ready to run jobs. Returns an error if the VM is not ready after max_secs
.
copyIn
copyIn(self, vm, inputFiles)
Copies the input files for a job into the VM. inputFiles
is a list of InputFile
objects defined in tangoObjects.py
. For each InputFile
object, file.localFile
is the name of the file on the Tango host machine and file.destFile
is what the name of the file should be on the VM.
runJob
runJob(self, vm, runTimeout, maxOutputFileSize)
Runs the autodriver binary on the VM. The autodriver runs make
on the VM (which in turn runs the job via the Makefile
that was provided as a part of the input files for the job). The output from the autodriver most likely should be redirected to some feedback file to be used in the next method of the API.
copyOut
copyOut(self, vm, destFile)
Copies the output file for the job out of the VM into destFile
on the Tango host machine.
destroyVM
destroyVM(self, vm)
Removes a VM from the Tango system.
safeDestroyVM
safeDestroyVM(self, vm)
Removes a VM from the Tango system and makes sure that it has been removed.
getVMs
getVMs(self)
Returns a complete list of VMs associated with this Tango system.