wiki:IMInteroperability/GIMIInstaGENITestCase

Version 12 (modified by divyashri.bhat@gmail.com, 6 years ago) (diff)

--

Run an OMF Experiment on an InstaGENI Test Bed

This page provides steps to run an OMF-experiment on an InstaGENI testbed with two nodes.
You can use the GEC16-Tutorial VM to run the experiment as it has the OMF commands pre-installed on them.

1. Create a 2 node topology using the Rspec below.

Note: This rspec is for 2 nodes on the bbninstageni Aggregate manager

For other managers, you can use url=https://boss.instageni.gpolab.bbn.com/image_metadata.php?uuid=2a721653-a868-11e2-921f-029e26f15299
For the same manager, you can use id=urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net:GIMIomf (given below)

<rspec type="request" generated_by="Flack" generated="2013-05-13T17:48:51Z" xsi:schemaLocation="http://www.geni.net/resources/rspec/3 http://www.geni.net/resources/rspec/3/request.xsd " xmlns:flack="http://www.protogeni.net/resources/rspec/ext/flack/1" xmlns:client="http://www.protogeni.net/resources/rspec/ext/client/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.geni.net/resources/rspec/3">
  <node client_id="nodeA" component_manager_id="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm" component_id="urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2" component_name="pc2" exclusive="false">
    <vnode name="pcvm2-2" xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/>
    <location latitude="42.389806" longitude="-71.147599" country="US"/>
    <sliver_type name="emulab-openvz">
      <disk_image name="urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net//GIMIomf"/>
    </sliver_type>
    <services>
      <execute command="sudo sh local/postboot_script.sh" shell="sh"/>
      <install install_path="/local" url="http://emmy9.casa.umass.edu/InstaGENI_Images/install-script.tar.gz"/>
    </services>
    <interface client_id="VM:if0">
      <ip address="10.10.1.1" netmask="" type="ipv4"/>
      <flack:interface_info addressBound="true" bound="false"/>
    </interface>
    <flack:node_info x="152" y="74" unbound="true"/>
  </node>
  <node client_id="nodeB" component_manager_id="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm" component_id="urn:publicid:IDN+instageni.gpolab.bbn.com+node+pc2" component_name="pc2" exclusive="false">
    <vnode name="pcvm2-5" xmlns="http://www.protogeni.net/resources/rspec/ext/emulab/1"/>
    <location latitude="42.389806" longitude="-71.147599" country="US"/>
    <sliver_type name="emulab-openvz">
      <disk_image name="urn:publicid:IDN+instageni.gpolab.bbn.com+image+emulab-net//GIMIomf"/>
    </sliver_type>
    <services>
      <execute command="sudo sh /local/postboot_script.sh" shell="sh"/>
      <install install_path="/local" url="http://emmy9.casa.umass.edu/InstaGENI_Images/install-script.tar.gz"/>
    </services>
    <interface client_id="VM-0:if0">
      <ip address="10.10.1.2" netmask="" type="ipv4"/>
      <flack:interface_info addressBound="true" bound="false"/>
    </interface>
    <flack:node_info x="450" y="104" unbound="true"/>
  </node>
  <link client_id="lan0">
    <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/>
    <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/>
    <flack:link_info x="-1" y="-1" unboundVlantag="true" xmlns="http://www.protogeni.net/resources/rspec/ext/flack/1"/>
    <component_manager name="urn:publicid:IDN+instageni.gpolab.bbn.com+authority+cm"/>
    <interface_ref client_id="VM:if0"/>
    <interface_ref client_id="VM-0:if0"/>
    <property source_id="VM:if0" dest_id="VM-0:if0"/>
    <property source_id="VM-0:if0" dest_id="VM:if0"/>
    <link_type name="lan"/>
    <flack:link_info x="-1" y="-1" unboundVlantag="true"/>
  </link>
  <client:client_info name="Flack" environment="Flash Version: LNX 11,2,202,280, OS: Linux 3.5.0-28-generic, Arch: x86, Screen: 1680x1050 @ 72 DPI with touchscreen type none" version="v14.91" url="https://www.emulab.net/protogeni/flack2/flack.swf"/>
  <flack:slice_info view="graph"/>
</rspec>

2. Change hostnames

Login to each node separately using the SSH button in Flack and change hostname using the following command:

nodeA

sudo hostname nodeA
sudo /etc/init.d/omf-resctl-5.4 restart

node B

sudo hostname nodeB
sudo /etc/init.d/omf-resctl-5.4 restart

3. Edit Experiment Script.

GIMI Simple Experiment script is shown above. In the experiment script you would need to change the host names to the names of your nodes.

defProperty('source1', "nodeA", "ID of a resource")
defProperty('source2', "nodeB", "ID of a resource")
#defProperty('sink2', "nodeB", "ID of a sink")
#defProperty('sink3', "nodeC", "ID of a sink")
#defProperty('sink4', "nodeD", "ID of a sink")
#defProperty('sink5', "nodeE", "ID of a sink")

defProperty('sinkaddr11', '10.10.1.1', "Ping destination address")
defProperty('sinkaddr12', '10.10.1.2', "Ping destination address")

defApplication('ping_app', 'pingmonitor') do |a|
    a.path = "/root/pingWrap.rb" 
    a.version(1, 2, 0)
    a.shortDescription = "Wrapper around ping" 
    a.description = "ping application"
    a.defProperty('dest_addr', 'Address to ping', '-a', {:type => :string, :dynamic => false})
    a.defProperty('count', 'Number of times to ping', '-c', {:type => :integer, :dynamic => false}) 
    a.defProperty('interval', 'Interval between pings in s', '-i', {:type => :integer, :dynamic => false})
   
    a.defMeasurement('myping') do |m|
    #a.defMeasurement('myping', '') do |m|
     m.defMetric('dest_addr',:string) 
     m.defMetric('ttl',:int)
     m.defMetric('rtt',:float)
     m.defMetric('rtt_unit',:string)
    end
end

defGroup('Source1', property.source1) do |node|
  node.addApplication("ping_app") do |app|
    app.setProperty('dest_addr', property.sinkaddr12)
    app.setProperty('count', 30)
    app.setProperty('interval', 1)
    app.measure('myping', :samples => 1)
  end
end
defGroup('Source2', property.source2) do |node|
  node.addApplication("ping_app") do |app|
    app.setProperty('dest_addr', property.sinkaddr11)
    app.setProperty('count', 30)
    app.setProperty('interval', 1)
    app.measure('myping', :samples => 1)
  end

end



#defGroup('Sink1', property.sink1) do |node|
#end

#defGroup('Sink2', property.sink2) do |node|
#end

#defGroup('Sink3', property.sink3) do |node|
#end

#defGroup('Sink4', property.sink4) do |node|
#end

#defGroup('Sink5', property.sink5) do |node|
#end

onEvent(:ALL_UP_AND_INSTALLED) do |event|
  info "Starting the ping"
  allGroups.startApplications
  wait 30
  info "Stopping the ping"
  allGroups.stopApplications
  Experiment.done
end

defGraph 'RTT' do |g|
  g.ms('myping').select(:oml_seq, :dest_addr, :rtt)#.where(:dest_addr => "192.168.5.12")
  g.caption "RTT of received packets."
  g.type 'line_chart3'
  g.mapping :x_axis => :oml_seq, :y_axis => :rtt, :group_by => :dest_addr
#    g.group_by(:dest_addr)
  g.xaxis :legend => 'oml_seq'
  g.yaxis :legend => 'rtt', :ticks => {:format => 's'}
end

4. Run the experiment using the following command

Execute the following command in your tutorial VM.

omf-5.4 exec --no-am -e <exp_name> -S <slice_name> step1-ping_all.rb

For example omf-5.4 exec --no-am -e dbhatinstageni-ping_all -S dbhatinstageni step1-ping_all.rb

The exp_name can be anything you wish to call your experiment. Preferably you could have your exp_name as slicename+exp_name. e.g. dbhatomf_ping_all
The slice_name has to be the slice_name on which you wish to run the experiment.

Shown below is my log after a successful run of the experiment script.


 INFO NodeHandler: OMF Experiment Controller 5.4 (git c005675)
 INFO NodeHandler: Slice ID: dbhatinstageni 
 INFO NodeHandler: Experiment ID: dbhatinstageni-ping_all
 INFO NodeHandler: Message authentication is disabled
 WARN NodeHandler: AM support disabled - any service calls will fail!
 INFO Experiment: load system:exp:stdlib
 INFO property.resetDelay: resetDelay = 210 (Fixnum)
 INFO property.resetTries: resetTries = 1 (Fixnum)
 INFO Experiment: load system:exp:eventlib
 INFO Experiment: load step1-ping_all.rb
 INFO property.source1: source1 = "nodeA" (String)
 INFO property.source2: source2 = "nodeB" (String)
 INFO property.sinkaddr11: sinkaddr11 = "10.10.1.1" (String)
 INFO property.sinkaddr12: sinkaddr12 = "10.10.1.2" (String)
 INFO Topology: Loading topology 'nodeA'.
 INFO Topology: Loading topology 'nodeB'.
 INFO GraphDescription: REPORT:START: RTT
 INFO GraphDescription: REPORT:TYPE: line_chart3
 INFO GraphDescription: REPORT:MS:default: SELECT%20%22oml_seq%22,%20%22dest_addr%22,%20%22rtt%22%20FROM%20%22pingWrap_myping%22
 INFO GraphDescription: REPORT:MAPPING: %7B%22y_axis%22:%22rtt%22,%22group_by%22:%22dest_addr%22,%22x_axis%22:%22oml_seq%22%7D
 INFO GraphDescription: REPORT:AXIS: %7B%22y%22:%7B%22legend%22:%22rtt%22,%22ticks%22:%7B%22format%22:%22s%22%7D%7D,%22x%22:%7B%22legend%22:%22oml_seq%22%7D%7D
 INFO GraphDescription: REPORT:CAPTION: RTT%20of%20received%20packets.
 INFO GraphDescription: REPORT:STOP
 INFO Experiment: Switching ON resources which are OFF
 INFO ALL_UP_AND_INSTALLED: Event triggered. Starting the associated tasks.
 INFO exp: Starting the ping
 INFO exp: Request from Experiment Script: Wait for 30s....
 INFO exp: Stopping the ping
 INFO EXPERIMENT_DONE: Event triggered. Starting the associated tasks.
 INFO NodeHandler: 
 INFO NodeHandler: Shutting down experiment, please wait...
 INFO NodeHandler: 
 INFO run: Experiment dbhatinstageni-ping_all finished after 0:46


Attachments (5)

Download all attachments as: .zip