Version 43 (modified by, 5 years ago) (diff)


Get to Know GENI and SAVI

Hello GENI index Hello GENI index Hello GENI index


0. Prerequisites: Get a SAVI account and an Omni bundle

  • Make sure you have ssh keys and ssl certs in the GENI Portal. You can verify this by going to the Profile tab on the Portal.
  • Getting a SAVI account:
  • As a GENI user, scroll down on the GENI portal homepage until you see "Tools". There, hit the SAVI button. Proceed through the remaining prompts until you get an email with you SAVI username and password.
  • Getting an Omni bundle:

  • In the GENI portal, click "Profile" and then "Configure Omni" in the set of tabs on the profile page. There, click the "Download your omni data" button.

1.Use the SAVI Client and the Federation Tool to Create a GENI Slice OMNI Bundle

  • Use scp to transfer the Omni Bundle you downloaded in pre-work to the Downloads folder on From the folder in which you have the Omni bundle, run
$ scp omni.bundle <savi-username>

Windows users can use winscp

  • Using your SAVI credentials, log in to Any ssh tool can be used for this, including Putty and cygwin ssh on Windows, and the builtin terminal tools on any Unix- or Linux-based


$ ssh <savi-username>
  • Once you're logged in, run
    $ omni-configure

to configure Omni. Omni-configure should have placed your ssh keys (geni_portal_key and in your .ssh folder on Check to make sure that the keys are there.

  • Now download and unpack the GENI-SAVI Federation Tool
$ wget
$  tar xvf tutorial.tar

2. Create a slice on GENI and Add Some VMs to it

We will now create a slice on GENI. Use gs-<yourinitials> as the slice name. In the tutorial directory,

$ ./ createslice geni <slice_name>

Now add a VM running Ubuntu 14 at the InstaGENI Rack assigned to you.

$ ./ createvm geni <slice-name > <rack name> Ubuntu-14-04

This will take about a minute. It will then come back with a response of the form

  Result Summary: Got Reserved resources RSpec from ...

 To connect to the created VM please use the hostname="<name>.<rack domain name>"

The machine will now be in a booting state. It will take about 5-10 minutes before you can log in. We'll use the time productively and create a SAVI VM while we wait.

3. Create VMs on SAVI at Toronto and Victoria

The general form of the command to create a VM on SAVI is

$ ./ createvm savi <tenant_name> <location> <os_image_name> <vm-size> <ssh_key> <vm-name>

we have chosen values for all parameters; each group will be given a specific site at the tutorial. The vm-name should be your geni-username, followed by the sitename. E.g., for rickmcg, the name at Toronto will be rickmcg-toronto

$ ./ createvm savi geniUsers <savi site> Ubuntu-14-04-64 small geni_portal_key <geni_username>-<savi sitename>

We now have VMs at a GENI rack one SAVI site. Check the status of your resources on both GENI and SAVI

$ ./ listinstance geni
$ ./ listinstance savi

Take note of the hostname for your GENI VM and the public IP address listed for your SAVI VM, we'll use these in the next step.

Notice that access to the SAVI machines are by IP address.

4. Set up Ansible for your experiment

(a) Create an Ansible Hosts file

An Ansible hosts file is of the form


where group_name is a name for a group of nodes, and a server spec contains login information for a node. An example of a server specification is

    ansible_ssh_host=  ansible_ssh_port=22 ansible_ssh_user=rickmcg_geni ansible_ssh_private_key=~/.ssh/geni_portal_key

Create an Ansible Hosts file named ansible-hosts for your slice.

Your ansible hosts file should look like this:

    <geni_resource_name> ansible_ssh_port=22 ansible_ssh_user=<your_geni_username> ansible_ssh_key=~/.ssh/geni_key_portal
    <savi_resource_ip> ansible_ssh_port=22 ansible_ssh_user=ubuntu ansible_ssh_key=~/.ssh/geni_key_portal

Where geni_resource_name and savi_resource_ip are what you found from the listinstance commands from step 3.

(b) Add private key to SSH agent

In the next step, Ansible will try to do a SSH login to multiple nodes. To save time entering the passphrase for your private key multiple times, add your private key to your ssh agent as folllows.

$ ssh-agent bash
$ ssh-add ~/.ssh/geni_portal_key

(c) The ping module

The ping module simply tries to do a SSH login to a node and reports success or failure. Run the following command on your controller:

$ ansible nodes -i ansible-hosts -m ping

If you don’t see success everywhere then there is something wrong with your setup. Ask one of the tutorial leaders for help.

(d) The shell module

The shell module lets you run arbitrary SSH commands in parallel across a set of hosts. It’s useful for poking around, or if there is no Ansible module with the functionality you need. Try it out:

$ ansible nodes -i ansible-hosts -m shell -a "hostname"

You can replace hostname above with any other Linux command.

(e) The setup module

The setup module gathers a bunch of information about each node and saves it in variables that you can reference in your Ansible playbooks. This will be really useful to do the tutorial! Try it out on a node to see what it collects (replace <your-vm> with your hostname):

$ ansible <geni_hostname> -i ansible-hosts -m setup

5. Create and run an Ansible playbook to install the software you'll need

Now you will use a playbook to install the software you'll need on all the nodes. Below is the ansible playbook you will need. To download this playbook to your client machine, type:


The ansible playbook:

- hosts: nodes
  remote_user: root
  sudo: yes
  - name: Update apt cache
    apt: update_cache=yes

  - name: Install dnsutils (for dig)
    apt: name=dnsutils

  - name: Install geoip-bin (for geoiplookup)
    apt: name=geoip-bin

  - name: Install curl
    apt: name=curl

Run this playbook on your Ansible control machine against all the nodes in your slice.

Pro Tip: use the -f argument to ansible-playbook to speed things up -- it lets you control the number of nodes to operate on in parallel, and the default is 5. Specifying -f 20 will run the playbook's tasks against all your slicelet nodes in parallel.

Next: Run Experiment

Attachments (2)

Download all attachments as: .zip