[[PageOutline(1-2)]] = GENI Racks RSpecs = This page captures findings from using selected RSpecs in both ExoGENI and InstaGENI racks environments. Additionally, notes are captured to highlight any differences in behavior or information of interest about the requests. == Summary of RSpec findings == Detailed explanation of the findings are in sub-sequent sections. This is a summary of test findings, you can find details in subsequent sections for each ''Note'' listed: - '''Note 1:''' The "postBootScript" schema is an ExoGENI-only schema extension. - '''Note 2:''' The client_id is element not required for ExoGENI and can be omitted; The sliver_type element is required for ExoGENI. - '''Note 3:''' If client_id is defined in the RSpec, ExoGENI does not set the hostname to client_id. InstaGENI does set the hostname based on client_id - '''Note 3:''' The sliver_type element is not required for InstaGENI, and if not defined it results in raw-pc node being allocated. - '''Note 4:''' If you want a dedicated raw-pc at a specific ExoGENI site, you must must be specify the component_manager_if for the site and request the resource from the ExoSM. There are no raw-pcs available from the local aggregate. - '''Note 5:''' ExoGENI supports two sliver_types that map to a dedicated PC and they are: {{{}}} and {{{ }}} - '''Note 6:''' ExoGENI will not assign IP addresses if they are not specified in the RSpec. - '''Note 7:''' Once ExoGENI assigns an IP address on the node it cannot be changed. The NEuca agent continously monitors the interfaces and reset the IP settings if changed. - '''Note 8:''' If interfaces are configure and IP addresses are not specified on ExoGENI, the nodes only show eth0 in the ifconfig output, but eth1 is initialized and can be configured and brought up with a user-specified address which is not reset by the NEuca agent. - '''Note 9:''' InstaGENI links that use GRE tunnels must specify and IP address in the RSpec, an address will not be automatically assigned in this case. - '''Note 10:''' Unlike ExoGENI, for InstaGENI aggregates the request is submitted at each of the aggregate in the RSpec, and there is a limited amount of delay allowed between the requests to each aggregates. (few minutes) - '''Note 11:''' The shared VLAN link definition in InstaGENI require one entry for each side of the VLAN. Combining the two link into one link entry fails. - '''Note 12:''' There additional variables that are supported for postBootScript via flukes which are not supported via the GENI AM API. - '''Note 13:''' Once the allocated node is up, you may view the results of the post boot script with the ''neuca-user-script'' command. - '''Note 14:''' ExoGENI node groups are not supported via the GENI AM API, only via flukes. = Common RSpec = A set of common RSpecs were tested to determine the minimum common RSpec definitions for several topologies. Each of the RSpecs listed below use the following request RSpec header: {{{ }}} '''Note 1:''' "postBootScript" is an ExoGENI-only schema extension. == 1 VM RSpec Default OS == === ExoGENI === A simple 1-node scenario for ExoGENI requires "sliver_type" which is not required by InstaGENI, the following request will allocate 1 VM at any ExoGENI local Aggregate (Service Manager (SM)) or at the ExoGENI Global AM (ExoSM): {{{ }}} '''Note 2:''' The client_id is not required for ExoGENI and can be omitted; sliver_type is required. '''Note 3:''' If client_id is defined in the RSpec, ExoGENI does not set the hostname to client_id. InstaGENI does set the hostname based on client_id === InstaGENI === The same 1-node scenario for InstaGENI: {{{ }}} '''Note 3:''' The sliver_type is not required for InstaGENI, and if not defined it results in raw-pc node being allocated. == 1 Raw PC Default OS == === ExoGENI === ExoGENI dedicated PCs are only available via ExoSM and not the Local site AM (aka ExoGENI SM) {{{ }}} '''Note 4:'''If you want a dedicated raw-pc at a specific ExoGENI site, you must must be specify the component_manager_if for the site and request the resource from the ExoSM. There are no raw-pcs available from the local aggregate. For example, if you want 1 dedicated PC in the GPO rack, you must specify: {{{ }}} '''Note 5:''' ExoGENI supports two sliver_types that map to a dedicated PC and they are: {{{ }}} and {{{ }}} === InstaGENI === The following will allocate 1 dedicated PC at the aggregate where the request is submitted. The "sliver_type" is not required, when one is not specified a dedicated PC is allocated. {{{ }}} == 2 VM at 1 site == === ExoGENI === A simple 2-node 1 link scenario for ExoGENI. {{{ }}} '''Note 6:''' The IP addresses are added because ExoGENI will not assign IP addresses if they are not specified in the RSpec. '''Note 7:''' Once the IP address exists is applied on the node, it cannot be changed. The NEuca agent continously monitors the interfaces and reset the IP settings if changed. '''Note 8:''' If IP addressed are not specified, the nodes only show eth0 in the ifconfig output, but eth1 is initialized and can be configured and brought up. In this case, the eth1 interface is not reset by the NEuca agent. === InstaGENI === For InstaGENI, just replace the sliver_type "m1.small" with "emulab-openvz" and the rspec works, there is no need to specify addresses within the same InstaGENI rack or across racks for InstaGENI: '''Note 9:'''Links that use GRE tunnels must specify and IP address in the RSpec, an address will not be automatically assigned in this case. == 2 VMs at 2 sites == === ExoGENI === ExoGENI requests are submitted once to ExoSM for resources at the 2 aggregates. As with InstaGENI, you specify the aggregates in the RSpec to get two different sites, if not specified the VMs allocated will be in the same rack. {{{ }}} === InstaGENI === For InstaGENI replace the sliver_type "m1.small" with "emulab-openvz" and the component_manager. The RSpec will look as follows if a GRE tunnel is used: {{{ }}} '''Note 10:''' Unlike ExoGENI, the request is submitted at each of the aggregate in the RSpec. Another InstaGENI example for 2 VMs at 2 sites using a Layer2 VLAN named "IG-EXP-7": {{{ }}} '''Note 11:''' The shared VLAN link definition in InstaGENI require one entry for each side of the VLAN. Combining the two link into one link entry fails. == 1 VM with OpenFlow == === ExoGENI === Sample ExoGENI Compute Resources RSpec on the !OpenFlow Shared VLAN 1750: {{{ }}} Sample ExoGENI FOAM RSpec on the !OpenFlow Shared VLAN 1750: {{{ }}} === InstaGENI === Sample InstaGENI Compute Resources RSpec on the !OpenFlow Shared VLAN 1750: {{{ }}} Sample InstaGENI FOAM RSpec on the !OpenFlow Shared VLAN 1750: {{{ }}} == Image Support == === ExoGENI === === InstaGENI === = RSpec Services Schema = == Install services == === ExoGENI === The following RSpec can be used on ExoGENI to install a "tar.gz" or a ".tgz" file, unpack it and run the command specified: {{{ }}} === InstaGENI === The following RSpec can be used on InstaGENI to install a "tgz" or "tar.gz" file, unpack it and run the command specified: {{{ }}} == Execute services == === ExoGENI === The following RSpec requests the execution of one command: {{{ }}} ExoGENI also supports a [https://geni-orca.renci.org/trac/wiki/velocity-templates post boot script] schema extension which uses Apache Velocity templates to replace key properties on an allocated node. Following is an example RSpec which lists all supported post boot variables via the AM API that you may use in your script. Two node are requested in order to be able to show the interface (IP/MAC) specific information. {{{ #!/bin/sh set -x IP=$self.IP("center") MAC=$self.MAC("geni1:0") NAME=$self.Name() VM=$self VMNAME=$geni1 SLICE=$sliceName USER=$userDN SLICE=$sliceID }}} '''Note 12:''' There additional variables that are supported for post boot via flukes which are not supported via the GENI AM API. '''Note 13:''' Once the allocated node is up, you may view the ''neuca-user-script'' on the allocated node to view the results of the post boot script. The above script results in the following: {{{ root@debian:~# neuca-user-script #!/bin/sh set -x IP=172.16.1.1 MAC=$self.MAC("geni1:0") NAME=geni1 VM=name: geni1, macs: {center=null}, ips: {center=172.16.1.1/24}, links: [center], group: Not in Group VMNAME=name: geni1, macs: {center=null}, ips: {center=172.16.1.1/24}, links: [center], group: Not in Group SLICE=urn:publicid:IDN+pgeni.gpolab.bbn.com+slice+velo2 USER=[urn:publicid:IDN+pgeni.gpolab.bbn.com+user+lnevers, lnevers@pgeni.gpolab.bbn.com] SLICE=$sliceID root@debian:~# }}} '''Note 15:''' Node groups are not supported via the GENI AM API, only via flukes. === InstaGENI === The following RSpec requests the execution of one command, there is only one difference from ExoGENI, the "sliver_type": {{{ }}} = GIMI RSpecs = == GIMI RSpecs in ExoGENI == == GIMI RSpecs in InstaGENI == = GEMINI RSpecs = == GEMINI RSpec in InstaGENI == == GEMINI RSpecs on ExoGENI ==