.. _minimega.testbed_available_mc:

##########################
minimega.testbed_available
##########################

This model component is responsible for ensuring that experiments do not collide with each other.
Currently, it uses the :py:class:`minimegaAPI <firewheel.lib.minimega.api.minimegaAPI>` to check if any VMs are running and the :py:mod:`firewheel.vm_resource_manager.api` to check if an experiment launch time has been set.
If either is true, then it is assumed that an experiment is running, and an :py:exc:`ExistingExperimentError <minimega.testbed_available.ExistingExperimentError>` is thrown.
Otherwise, it uses the :py:mod:`firewheel.vm_resource_manager.api` to set the experiment experiment launch time and proceeds launching the experiment.
Note that the launch time (i.e. the time the experiment was kicked off) differs from the :ref:`start-time` (i.e. when the experiment reaches ``time=0``).

**Attribute Provides:**
    * ``testbed_available``

******
Plugin
******

.. automodule:: minimega.testbed_available_plugin
    :members:
    :undoc-members:
    :special-members:
    :private-members:
    :show-inheritance:
    :exclude-members: __dict__,__weakref__,__module__