Building a Resource Request

You can request resources on the Virtual Wall via the Aggregate Manager API as used in the Fed4FIRE or GENI federations.

This can be done either via the imec jFed GUI, or by manually creating a request RSpec and submitting this via a CLI tool like the imec jFed CLI or omni

We recommend using the imec jFed GUI when using the Virtual Wall, as this GUI provides a drag-and-drop interface to create the RSpecs discussed below. They can be viewed by switching to the Raw RSpec tab. Only a few advanced features are not supported by the GUI, and must be added manually to the Request RSpec.

This document will discuss some general cases on how to manually create an Request Specification (RSpec), which can then subsequently be used to request the specified resources via the CLI or GUI tools. More specific functionality, like requesting a specific disk image, or requesting public IPv4-address, is covered in the respective sections of this documentation.

Requesting a Bare Metal Server

Simple unbound RSpec

Unbound means that the testbed chooses a node for you. node0 is the name of the node:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Bound RSpec

This means that you choose a specific node, which you specify in the component_id-attribute of the <node>-tag. The node names should be mentioned in the listresources call, e.g. n095-01a in the example below:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_id="urn:publicid:IDN+wall2.ilabt.iminds.be+node+n095-01a" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="raw-pc"/>
  </node>
</rspec>

Install software when provisioning and run a script after provisioning

With the following services parts, you can install tar balls and run scripts after swap in:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec generated="2014-02-01T16:47:22.736+01:00" generated_by="Experimental jFed Rspec Editor" type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd http://www.protogeni.net/resources/rspec/ext/delay/1 http://www.protogeni.net/resources/rspec/ext/delay/1/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:delay="http://www.protogeni.net/resources/rspec/ext/delay/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
     <sliver_type name="raw-pc"/>
     <services>
          <execute shell="sh" command="sudo apt-get install dstat"/>
          <install url="http://download.videolan.org/pub/videolan/vlc/0.5.1/vlc-0.5.1.tar.gz" install_path="/local"/>
     </services>
  </node>
</rspec>

You can repeat execute shell and install url multiple times.

Tip: Debugging your startup scripts

To debug these scripts, you can check the following on a node after it has started:

  • The startup script is referenced in /var/emulab/boot/startupcmd.
  • The output of the commands can be found in more /var/tmp/startup*

For more examples and info, see alo http://www.protogeni.net/wiki/ServicesFaq.

Requesting a Virtual Machine

Requesting a XEN VM

The Virtual Wall also supports XEN VMs, which can be requested by using another sliver_type:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="false">
      <sliver_type name="emulab-xen"/>
  </node>
</rspec>

The XEN hosts also have a unique IPv6 address, so you need IPv6 access to login on them, or you can enable SSH proxy access in jFed to login on them.

Also note that attribute exclusive of <node> has been set to false. By using exclusive="false", the VMs are put on shared physical hosts (together with other experiments). However, if you use exclusive="true" then a new physical host will be set up with virtualization for your experiment only, and you will have full root access to the XEN DOM0 host.

For this: ssh with your same public/private key to the hostname after dropping vm-x. E.g. n096-10bvm-3.wall2.ilabt.iminds.be has n096-10b.wall2.ilabt.iminds.be as DOM0 hostname. You can use XEN xl commands (xl list, xl info, …) to manipulate the VMs.

Binding a XEN VM to a specific host

In the same way as you can bind a physical host to a specific machine by, you can bind also a VM to a specific host (this can be a shared host or a dedicated host) by setting the component_id-attribute of the <node>-tag.

This means that you choose a specific node. The node names should be mentioned in the listresources call, e.g. n095-01a in the example below:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <node client_id="node0" component_id="urn:publicid:IDN+wall2.ilabt.iminds.be+node+n095-01a" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="emulab-xen"/>
  </node>
</rspec>

(in Jfed, just choose your specific node through the dialog box when right clicking on the node)

Changing the CPU/RAM/Disk of a Xen VM

You can tweak the parameters of your VM in the following way (be aware of the xmlns:emulab namespace)):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rspec type="request" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd" xmlns="http://www.geni.net/resources/rspec/3" xmlns:jFed="http://jfed.iminds.be/rspec/ext/jfed/1" xmlns:jFedBonfire="http://jfed.iminds.be/rspec/ext/jfed-bonfire/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1">
  <node client_id="node0" component_manager_id="urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm" exclusive="true">
      <sliver_type name="emulab-xen">
        <emulab:xen cores="10" ram="8192" disk="50"/>
    </sliver_type>
  </node>
</rspec>

As can be seen, the number of cores, RAM and extra disk size (extra partition /dev/xvda is created which you can enable) can be configured.

Take into account the following boundaries:

  • For a VM on a shared host: * RAM bigger then 128 (default 1024MB) * extra disk max 100GB * max 4 cores
  • For a VM on an exclusive host: * RAM, cores, and disk is only limited to the physical host. (e.g. 10 cores, 8GB RAM and 50GB disk for 1 VM is possible). See virtualwallfacility.

If you define extra disk space, it will be available as an extra partition on /dev/xvda.

XEN network topologies

It is also possible to draw topologies between XEN VMs (layer 2 links), in the same way as for physical machines, but you have to specify IP addresses for the links in the 192.168.x.x IP range, otherwise routing will get bad. You define a specific IP addresses on links by using the <ip>-tag in <interface>:

<interface client_id="node2:if0">
   <ip address="192.168.101.3" netmask="255.255.255.0" type="ipv4"/>
</interface>

Request URL’s and URN’s

Virtual Wall 1

The AM of the Virtual Wall is accessible through:

  • GENI AM v2: https://www.wall1.ilabt.iminds.be:12369/protogeni/xmlrpc/am/2.0
  • GENI AM v3: https://www.wall1.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0

The URN of the componentmanager is: urn:publicid:IDN+wall1.ilabt.iminds.be+authority+cm

Virtual Wall 2

The AM of the Virtual Wall is accessible through:

  • GENI AM v2: https://www.wall2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/2.0
  • GENI AM v3: https://www.wall2.ilabt.iminds.be:12369/protogeni/xmlrpc/am/3.0

The URN of the componentmanager is: urn:publicid:IDN+wall2.ilabt.iminds.be+authority+cm