The MAGI bootstrap process establishes a networking overlay over which it communicates with the experiment nodes.
The control overlay provides a control plane across heterogeneous resources, such as containers, federation, and specialized hardware, on the DETERLab testbed.
Te control overlay provides a network to reliably propagate discrete control events across the experiment. Hence it is critical to establish a robust and scalable overlay to ensure the experiments are orchestrated correctly.
MAGI provides multi-point to multi-point group communication. A “group” has a set of nodes as members. Each group has a logical name. Any member of the group can send a message to any other member of the group.
By default, one MAGI overlay is established for the experiment, and all the control messages are passed over it.
However, it may be necessary to establish two or more overlays based on the experiment topology embedding, control and data management requirements. The required overlay structure can be explicitly specified during the experiment bootstrap process.
The overlay configuration, Messaging Description Language (mesdl.conf), is a yaml-based configuration of the required overlays and bridges in the experiment. The mesdl.conf defines all the overlays and bridges for the experiment.
The MAGI “overlay” is built on top of the control network on the DETER testbed. Nodes in the overlay can be thought of as being connected by virtual point to point links in magi. The overlay provides a way to communicate with all the magi-enabled nodes across testbed boundaries and even over the internet. “bridges” act as meeting places for all the members of the overlay it serves. ” For example:
# Establish two bridges on node3.
# Typically one is inward facing towards the experiment and one
# is outward facing towards the experimenter to use with magi tools
# magi tools can now connect to the experiment overlay through node3, port 18808
bridges:
- { TCPServer: node3, port: 18808 }
- { TCPServer: node3, port: 28808 }
# Establish two overlays for the experiment.
overlay:
# Members of this overlay rendezvous at node3. All experiment nodes are part of
# this overlay.
- { type: TCPTransport, members: [ '__ALL__' ], server: node3, port: 28808 }
# Members of this overlay rendezvous at node2.
# node4 and node7 are members of this overlay.
- { type: TCPTransport, members: [ 'node4', 'node7' ], server: node2, port: 48808 }
In the absence of the mesdl.conf magi creates a single overlay with all experiment nodes as members. MAGI establishes a bridge as follows:
- if there is a node named “control”, it uses that node as the bridge.
- if not, it establishes the node with the lowest alphanumeric node name as the bridge.
For example, here is the mesdl.conf for the ClientServer Tutorial
bridges:
- {TCPServer: clientnode, port: 18808}
- {TCPServer: clientnode, port: 28808}
overlay:
- members: [__ALL__]
port: 28808
server: clientnode
type: TCPTransport
The magi_bootstrap.py is used to cofigurage the overlay and start MAGI on the experiment nodes.
The magi_bootstrap.py tool it typically called when the node starts as follows:
tb-set-node-startcmd $NodeName "sudo python /share/magi/v100/magi_bootstrap.py -p /share/magi/v100"
The various command line options are as follows:
Usage: magi_bootstrap.py [options]
Description: Bootstrap script that can be used to install, configure, and start MAGI
-h, --help | show this help message and exit |
-n, --nokeys | Option to ignore creation and waiting for SSL certificates |
-p RPATH, --path=RPATH | |
Location of the distribution | |
-q, --quiet | Silence debugging information; default behavior |
-U, --noupdate | Do not update the system before installing Magi |
-N, --noinstall | |
Do not install magi and the supporting libraries | |
-v, --verbose | Include debugging information |
-f, --force | Recreate magi.conf even if present. Cannot use along with -c (see below) |
-m MESDL, --mesdl=MESDL | |
Path to the messaging overlay configuration file | |
-c MAGICONF, --magiconf=MAGICONF | |
Path to the local node magi configuration file. Cannot use along with -f (see above) |