Commit 05a1a8f8 authored by David Johnson's avatar David Johnson

Generalize the CloudLab (OpenStack) tutorial.

(And add it to Emulab, POWDER, and Apt.)
parent 497b8677
......@@ -35,6 +35,7 @@ cloudlab: $(SOURCES)
cp -r $(GENI_LIB_DIR)/docs/build/html cloudlab-manual/geni-lib
scribble --htmls ++style cloudlab-manual.css ++arg --clab ++arg --geni-lib-dir ++arg $(GENI_LIB_DIR) cloudlab-manual.scrbl
scribble --html --dest cloudlab-manual/ ++style cloudlab-manual.css ++arg --single-page ++arg --clab ++arg --geni-lib-dir ++arg $(GENI_LIB_DIR) cloudlab-manual.scrbl
cd cloudlab-manual && ln -sf openstack-tutorial.html cloudlab-tutorial.html
cloudlab-ga: $(SOURCES)
-mkdir cloudlab-manual/
......@@ -42,6 +43,7 @@ cloudlab-ga: $(SOURCES)
-rm -rf cloudlab-manual/geni-lib/
cp -r $(GENI_LIB_DIR)/docs/build/html cloudlab-manual/geni-lib
scribble --htmls ++style cloudlab-manual.css ++arg --ga ++arg --clab ++arg --geni-lib-dir ++arg $(GENI_LIB_DIR) cloudlab-manual.scrbl
cd cloudlab-manual && ln -sf openstack-tutorial.html cloudlab-tutorial.html
phantomnet: $(SOURCES)
-mkdir phantomnet-manual/
......
......@@ -68,4 +68,5 @@ of Utah.
@include-section["advanced-topics.scrbl"]
@include-section["hardware.scrbl"]
@include-section["planned.scrbl"]
@include-section["openstack-tutorial.scrbl"]
@include-section["getting-help.scrbl"]
......@@ -94,7 +94,7 @@ information about how they work.
running experiments. You can get back to this page at any time by
selecting the ``Start Experiment'' link from the ``Actions'' menu.
By default, this page suggests launching the OpenStack profile which
is discribed in detail in the @seclink["cloudlab-tutorial"]{OpenStack tutorial}.
is discribed in detail in the @seclink["openstack-tutorial"]{OpenStack tutorial}.
Go to the list of available profile by clicking ``Change Profile'':
......
......@@ -54,6 +54,6 @@ control system can be found on CloudLab's @hyperlink[(apturl
@include-section["advanced-topics.scrbl"]
@include-section["hardware.scrbl"]
@include-section["planned.scrbl"]
@include-section["cloudlab-tutorial.scrbl"]
@include-section["openstack-tutorial.scrbl"]
@include-section["cloudlab-chef-tutorial.scrbl"]
@include-section["getting-help.scrbl"]
......@@ -74,6 +74,19 @@
(define (clab-only . stuff)
(apt-vs-clab #:clab stuff))
(define (geniusers-only . stuff)
(apt-vs-clab #:clab stuff #:powder stuff))
(define (not-clab . stuff)
(case (tb-mode)
('clab "")
(else stuff)))
(define (not-elab . stuff)
(case (tb-mode)
('elab "")
(else stuff)))
(define (pnet-only . stuff)
(apt-vs-clab #:pnet stuff))
......@@ -92,6 +105,15 @@
('clab "")
(else stuff)))
(define (tb-specific #:apt [apt-version #f] #:clab [clab-version #f] #:pnet [pnet-version #f] #:powder [powder-version #f] #:elab [elab-version #f] #:default [default-version ""])
(decode-flow (list (case (tb-mode)
(('apt and apt-version) apt-version)
(('clab and clab-version) clab-version)
(('pnet and pnet-version) pnet-version)
(('powder and powder-version) powder-version)
(('elab and elab-version) elab-version)
(else default-version)))))
(define apt-base-url
(case (tb-mode)
('apt "https://www.aptlab.net/")
......@@ -100,6 +122,9 @@
('powder "https://www.powderwireless.net/")
('elab "https://www.emulab.net/portal/")))
(define (apt-url path)
(string-append apt-base-url path))
(define apt-doc-url
(case (tb-mode)
('apt "http://docs.aptlab.net/")
......@@ -177,13 +202,31 @@
[scale-factor (* 1.0 (/ screenshot-width width))])
(list (image #:scale scale-factor fullpath fullpath) (linebreak))))
(define (instructionstep step #:screenshot [screenshot-path #f] . body)
(define (any-screenshot where path)
(let* ([anypath (string-append "screenshots/" where "/" path)]
[fullpath (if (file-exists? anypath)
anypath
(cdr (cons (displayln (string-append "WARNING: missing '" where "'screenshot " path)) anypath)))]
[b (make-object bitmap% fullpath)]
[width (send b get-width)]
[scale-factor (* 1.0 (/ screenshot-width width))])
(list (image #:scale scale-factor fullpath fullpath) (linebreak))))
(define (common-screenshot path)
(any-screenshot "common" path))
(define (clab-screenshot path)
(any-screenshot "clab" path))
(define (instructionstep step #:screenshot [screenshot-path #f] #:screenshot-where [screenshot-where #f] . body)
(item (bold (decode-content (list step)))
(linebreak)
(decode-flow body)
(if screenshot-path
(screenshot screenshot-path)
(void))))
(if screenshot-where
(any-screenshot screenshot-where screenshot-path)
(if screenshot-path
(screenshot screenshot-path)
(void)))))
(define (read-sphinx-inventory directory)
(let ([inv-file (string-append directory "/objects.inv")])
......
......@@ -48,4 +48,5 @@ you can apply to start a new project.
@include-section["advanced-topics.scrbl"]
@include-section["emulab-hardware.scrbl"]
@include-section["planned.scrbl"]
@include-section["openstack-tutorial.scrbl"]
@include-section["getting-help.scrbl"]
......@@ -2,7 +2,7 @@
@(require "defs.rkt")
@title[#:tag "cloudlab-tutorial" #:version apt-version]{@(tb) OpenStack Tutorial}
@title[#:tag "openstack-tutorial" #:version apt-version]{@(tb) OpenStack Tutorial}
This tutorial will walk you through the process of creating a small cloud on
@(tb) using OpenStack. Your copy of OpenStack will run on bare-metal machines
......@@ -15,7 +15,7 @@ full ability to customize and/or configure your installation of OpenStack.
In the process of taking this tutorial, you will learn to:
@itemlist[
@item{Log in to CloudLab}
@item{Log in to @(tb)}
@item{Create your own cloud by using a pre-defined profile}
@item{Access resources in a cloud that you create}
@item{Use administrative access to customize your cloud}
......@@ -25,17 +25,23 @@ In the process of taking this tutorial, you will learn to:
@section{Prerequisites}
@clab-only{
This tutorial assumes that:
@itemlist[
@item{You have an existing account on @bold{either}: @itemlist[
@item{CloudLab (Instructions for getting an account can
@item{@(tb) (Instructions for getting an account can
be found @seclink["register"]{here}.)}
@item{The @link["https://portal.geni.net"]{GENI portal}.
(Instructions for getting an account can be found
@link["http://groups.geni.net/geni/wiki/SignMeUp"]{here}.)}
]}
]
}
@not-clab{
This tutorial assumes that you have an existing account on @(tb).
Instructions for getting an account can be found @seclink["register"]{here}.
}
@include-section["tutorial-login-common.scrbl"]
......@@ -51,9 +57,10 @@ the facility, but running on resources that are dedicated to you, which you
have complete control over. This profile uses local disk space on the nodes, so
anything you store there will be lost when the experiment terminates.
@margin-note{The OpenStack cloud we will build in this tutorial is very small, but @(tb)
has @seclink["hardware"]{large clusters} that can be used for larger-scale
experiments.}
@tb-specific[
#:clab @margin-note{The OpenStack cloud we will build in this tutorial is very small, but @(tb) has @seclink["hardware"]{large clusters} that can be used for larger-scale experiments.}
#:default @margin-note{The OpenStack cloud we will build in this tutorial is very small, but @(tb) has @seclink["hardware"]{additional hardware} that can be used for larger-scale experiments.}
]
For this tutorial, we will use a basic profile that brings up a small OpenStack
cloud. The @(tb) staff have built this profile by capturing
......@@ -67,35 +74,36 @@ information about how they work.
@itemlist[#:style 'ordered
@instructionstep["Start Experiment"]{
@screenshot["tutorial/start-experiment-menu.png"]
@clab-screenshot["tutorial/start-experiment-menu.png"]
After logging in, you are taken to your main status
@link["https://www.cloudlab.us/user-dashboard.php"]{dashboard}.
@link[@apt-url["user-dashboard.php"]]{dashboard}.
Select ``Start Experiment'' from
the ``Experiments'' menu.
}
@instructionstep["Select a profile"]{
@screenshot["tutorial/start-experiment.png"]
@clab-screenshot["tutorial/start-experiment.png"]
The ``Start an Experiment'' page is where you will select a profile
to instantiate. We will use the @bold{OpenStack} profile; if
it is not selected, follow
@link["https://cloudlab.us/p/emulab-ops/OpenStack"]{this link}
@link[@apt-url["instantiate.php?project=emulab-ops&profile=OpenStack"]]{this link}
or click the ``Change Profile'' button, and select
``OpenStack'' from the list on the left.
Once you have the correct profile selected, click ``Next''
@screenshot["tutorial/click-next.png"]
@clab-screenshot["tutorial/click-next.png"]
}
@instructionstep["Set parameters"
#:screenshot "tutorial/set-parameters.png"]{
#:screenshot "tutorial/set-parameters.png"
#:screenshot-where "clab"]{
Profiles in CloudLab can have @emph{parameters} that affect how they are
Profiles in @(tb) can have @emph{parameters} that affect how they are
configured; for example, this profile has parameters that allow you to
set the size of your cloud, spread it across multiple clusters, and turn on
and off many OpenStack options.
......@@ -105,7 +113,8 @@ information about how they work.
}
@instructionstep["Select a cluster"
#:screenshot "tutorial/pick-cluster.png"]{
#:screenshot "tutorial/pick-cluster.png"
#:screenshot-where "clab"]{
@(tb) has multiple clusters available to it. Some profiles can run
on any cluster, some can only run on specific ones due to specific hardware
constraints, etc.
......@@ -121,7 +130,8 @@ information about how they work.
}
@instructionstep["Click Finish!"
#:screenshot "tutorial/click-create.png"]{
#:screenshot "tutorial/click-create.png"
#:screenshot-where "clab"]{
When you click the ``finish'' button, @(tb) will start
provisioning the resources that you requested on the cluster that
you selected.
......@@ -131,14 +141,14 @@ information about how they work.
}
@instructionstep["CloudLab instantiates your profile"]{
@instructionstep[@string-append[@(tb) " instantiates your profile"]]{
@(tb) will take a few minutes to bring up your copy of OpenStack, as
many things happen at this stage, including selecting suitable
hardware, loading disk images on local storage, booting bare-metal
machines, re-configuring the network topology, etc. While this is
happening, you will see this status page:
@screenshot["tutorial/status-waiting.png"]
@clab-screenshot["tutorial/status-waiting.png"]
@margin-note{Provisioning is done using the
@link["http://groups.geni.net/geni/wiki/GeniApi"]{GENI APIs}; it
......@@ -152,13 +162,14 @@ information about how they work.
able to log in until they have gone through the process of imaging and
booting.) While you are waiting for your resources to become available,
you may want to have a look at the
@link["http://docs.cloudlab.us"]{@(tb)
@link[apt-doc-url]{@(tb)
user manual}, or use the ``Sliver'' button to watch the logs of the
resources (``slivers'') being provisioned and booting.
}
@instructionstep["Your cloud is ready!"
#:screenshot "tutorial/status-ready.png"]{
#:screenshot "tutorial/status-ready.png"
#:screenshot-where "clab"]{
When the web interface reports the state as ``Booted'', your cloud
is provisioned, and you can proceed to the next section.
......@@ -168,7 +179,7 @@ information about how they work.
OpenStack is fully ready to log in and create virtual machine
instances. You will be able to tell that this has finished when the
status changes from ``Booted'' to ``Ready''. For now, don't attempt to
log in to OpenStack, we will explore the CloudLab experiment first.
log in to OpenStack, we will explore the @(tb) experiment first.
}
......@@ -188,7 +199,7 @@ buttons in this area let you make a copy of the profile (so that you can
@seclink["creating-profiles"]{customize it}), ask to hold on to the resources
for longer, or release them immediately.
@screenshot["tutorial/experiment-status.png"]
@clab-screenshot["tutorial/experiment-status.png"]
Note that the default lifetime for experiments on @(tb) is less than a day;
after this time, the resources will be reclaimed and their disk contents will
......@@ -209,12 +220,12 @@ case, the instructions provide a link to the administrative interface of
OpenStack, and give you passwords to use to log in. (Don't log into OpenStack
yet---for now, let's keep exploring the @(tb) interface.)
@screenshot["tutorial/experiment-instructions.png"]
@clab-screenshot["tutorial/experiment-instructions.png"]
@subsection{Topology View}
At the bottom of the page, you can see the topology of your experiment. This
profile has three nodes connected by a 10 Gigabit LAN, which is represented by
profile has three nodes connected by a LAN, which is represented by
a gray box in the middle of the topology. The names given for each node are
the names assigned as part of the profile; this way, every time you instantiate
a profile, you can refer to the nodes using the same names, regardless of which
......@@ -222,7 +233,7 @@ physical hardware was assigned to them. The green boxes around each node
indicate that they are up; click the ``Refresh Status'' button to initiate a
fresh check.
@screenshot["tutorial/topology-view.png"]
@clab-screenshot["tutorial/topology-view.png"]
If an experiment has ``startup services'' (programs that run at the beginning
of the experiment to set it up), their status is indicated by a small icon in
......@@ -253,7 +264,7 @@ authentication is supported, and you must have set up an @(ssh) keypair on your
account @bold{before} starting the experiment in order for authentication to
work.
@screenshot["tutorial/experiment-list.png"]
@clab-screenshot["tutorial/experiment-list.png"]
@subsection{Manifest View}
......@@ -269,7 +280,7 @@ topology and assigned resources.
@margin-note{Most of the information displayed on the @(tb) status page comes
directly from this manifest; it is parsed and laid out in-browser.}
@screenshot["tutorial/experiment-manifest.png"]
@clab-screenshot["tutorial/experiment-manifest.png"]
@subsection{Graphs View}
......@@ -284,14 +295,14 @@ past this screenshot to see the control and experiment network traffic
graphs. In your experiment, you'll want to wait 20-30 minutes before
expecting to see anything interesting.
@screenshot["tutorial/experiment-graphs.png"]
@clab-screenshot["tutorial/experiment-graphs.png"]
Here are the control network and experiment network packet graphs at the
same time. The spikes at the beginning are produced by OpenStack setup
and configuration, as well as the simple OpenStack tasks you'll perform
later in this profile, like adding a VM.
@screenshot["tutorial/experiment-graphs-nets.png"]
@clab-screenshot["tutorial/experiment-graphs-nets.png"]
@subsection[#:tag "openstack-tutorial-actions"]{Actions}
......@@ -306,7 +317,7 @@ become green again. The @seclink["openstack-tutorial-web-shell"]{shell} and
@seclink["openstack-tutorial-console"]{console} actions are described in more detail
below.
@screenshot["tutorial/experiment-actions.png"]
@clab-screenshot["tutorial/experiment-actions.png"]
@subsection[#:tag "openstack-tutorial-web-shell"]{Web-based Shell}
......@@ -330,7 +341,7 @@ Two things of note:
work, try right-clicking to paste.}
]
@screenshot["tutorial/experiment-shell.png"]
@clab-screenshot["tutorial/experiment-shell.png"]
@subsection[#:tag "openstack-tutorial-console"]{Serial Console}
......@@ -350,7 +361,7 @@ the access menu, and the same caveats listed above apply as well. In addition:
this password changes frequently for security reasons.}
]
@screenshot["tutorial/experiment-console.png"]
@clab-screenshot["tutorial/experiment-console.png"]
@section[#:tag "openstack-tutorial-instances"]{Bringing up Instances in OpenStack}
......@@ -380,7 +391,7 @@ command line interfaces or other APIs as well.}
on the Topology view); when this happens, the experiment state will
also change from ``Booting'' to ``Ready''
@screenshot["tutorial/status-scriptsdone.png"]
@clab-screenshot["tutorial/status-scriptsdone.png"]
If you continue without verifying that the setup scripts are
complete, be aware that you may see temporary errors from the
......@@ -389,7 +400,8 @@ command line interfaces or other APIs as well.}
}
@instructionstep["Visit the OpenStack Horizon web interface"
#:screenshot "tutorial/experiment-password.png"]{
#:screenshot "tutorial/experiment-password.png"
#:screenshot-where "clab"]{
On the status page for your experiment, in the ``Instructions''
panel (click to expand it if it's collapsed), you'll find a link
to the web interface running on the @tt{ctl} node. Open this
......@@ -398,7 +410,8 @@ command line interfaces or other APIs as well.}
}
@instructionstep["Log in to the OpenStack web interface"
#:screenshot "tutorial/os-login.png"]{
#:screenshot "tutorial/os-login.png"
#:screenshot-where "clab"]{
Log in using the username @tt{admin} and the password shown in
the instructions for the profile. Use the domain name @tt{default}
if prompted for a domain.
......@@ -413,7 +426,8 @@ command line interfaces or other APIs as well.}
}
@instructionstep["Launch a new VM instance"
#:screenshot "tutorial/os-launch.png"]{
#:screenshot "tutorial/os-launch.png"
#:screenshot-where "clab"]{
Click the ``Launch Instance'' button on the ``Instances'' page of the
web interface.
}
......@@ -429,13 +443,13 @@ command line interfaces or other APIs as well.}
@tt{Source}, @tt{Flavor}, @tt{Networks}, and @tt{Key Pair}),
as shown in the following screenshots:
@screenshot["tutorial/os-launch-basic.png"]
@clab-screenshot["tutorial/os-launch-basic.png"]
@itemlist[
@item{Pick any ``Instance Name'' you wish}
]
@screenshot["tutorial/os-launch-source.png"]
@clab-screenshot["tutorial/os-launch-source.png"]
@itemlist[
@item{For the ``Image Name'', select ``trusty-server''}
......@@ -448,7 +462,7 @@ command line interfaces or other APIs as well.}
the image import script may not have finished yet; wait a few
minutes, reload the page, and try again.
@screenshot["tutorial/os-launch-flavor.png"]
@clab-screenshot["tutorial/os-launch-flavor.png"]
@itemlist[
@item{Set the ``Flavor'' to @tt{m1.small}---the disk for the
......@@ -459,7 +473,8 @@ command line interfaces or other APIs as well.}
}
@instructionstep["Add a Network to the Instance"
#:screenshot "tutorial/os-launch-net.png"]{
#:screenshot "tutorial/os-launch-net.png"
#:screenshot-where "clab"]{
In order to be able to access your instance, you will need to give
it a network. On the ``Networking'' tab, add the @tt{tun0-net}
to the list of selected networks by clicking the ``+'' button or
......@@ -477,11 +492,12 @@ command line interfaces or other APIs as well.}
}
@instructionstep["Set an SSH Keypair"
#:screenshot "tutorial/os-launch-finish.png"]{
#:screenshot "tutorial/os-launch-finish.png"
#:screenshot-where "clab"]{
On the ``Key Pair'' tab (or ``Access & Security'' in previous versions), you will add an @(ssh) keypair
to log into your node. If you configured an @(ssh) key in your GENI
account, you should find it as one of the options in this
list. You can filter the list by typing your Cloudlab username,
list. You can filter the list by typing your @(tb) username,
or a portion of it, into the filter box to reduce the size of
the list. (By default, we load in public keys for all users in the
project in which you created your experiment, for convenience --
......@@ -498,7 +514,7 @@ command line interfaces or other APIs as well.}
@instructionstep["Add a Public IP Address"]{
@screenshot["tutorial/os-launch-associate.png"]
@clab-screenshot["tutorial/os-launch-associate.png"]
At this point, your instance is up, but it has no connection to the
public Internet. From the menu on the right, select ``Associate
......@@ -532,7 +548,7 @@ command line interfaces or other APIs as well.}
page, and should be able to ping this address from your laptop or
desktop.
@screenshot["tutorial/os-instance-publicip.png"]
@clab-screenshot["tutorial/os-instance-publicip.png"]
}
......@@ -581,18 +597,21 @@ You can define a new network for instances in your cloud to connect to:
@itemlist[#:style 'ordered
@instructionstep["Start the ``Create Network'' wizard"
#:screenshot "tutorial/os-networks.png"]{
#:screenshot "tutorial/os-networks.png"
#:screenshot-where "clab"]{
One the ``Project -> Networks'' page on the OpenStack Horizon
interface, click ``Create Network.''
}
@instructionstep["Give your network a name"
#:screenshot "tutorial/os-network-name.png"]{
#:screenshot "tutorial/os-network-name.png"
#:screenshot-where "clab"]{
Any name will do
}
@instructionstep["Create a subnet for your network"
#:screenshot "tutorial/os-network-subnet.png"]{
#:screenshot "tutorial/os-network-subnet.png"
#:screenshot-where "clab"]{
Give the subnet any name you wish. In the ``Network Address'' field,
put in a subnet definition (address/netmask). @tt{192.0.2.0/24} (the
RFC 5737 TEST-NET-1) works well.
......@@ -606,7 +625,8 @@ You can define a new network for instances in your cloud to connect to:
}
@instructionstep["Enable DHCP"
#:screenshot "tutorial/os-network-dhcp.png"]{
#:screenshot "tutorial/os-network-dhcp.png"
#:screenshot-where "clab"]{
On the final screen, make sure DHCP is enabled, and click the
``Create'' button.
......@@ -658,7 +678,8 @@ watch it through the serial console.
}
@instructionstep["Watch the node boot on the console"
#:screenshot "tutorial/reboot-console.png"]{
#:screenshot "tutorial/reboot-console.png"
#:screenshot-where "clab"]{
Switch back to the console tab you opened earlier, and you
should see the node starting its reboot process.
}
......@@ -669,7 +690,7 @@ watch it through the serial console.
web interface. In Horizon, select ``Hypervisors'' under the ``System''
menu, and switch to the ``Compute Host'' tab.
@screenshot["tutorial/os-node-down.png"]
@clab-screenshot["tutorial/os-node-down.png"]
@bold{Note:} This display can take a few minutes to notice that the
node has gone down, and to notice when it comes back up. Your instances
......@@ -685,7 +706,7 @@ therefore limited and in high demand. When you are done, you should release
them for use by other experimenters. Do this via the ``Terminate'' button on
the @(tb) experiment status page.
@screenshot["tutorial/status-terminate.png"]
@clab-screenshot["tutorial/status-terminate.png"]
@bold{Note:} When you terminate an experiment, all data on the nodes is lost,
so make sure to copy off any data you may need before terminating.
......
......@@ -39,4 +39,5 @@ The Powder facility is built on top of
@include-section["hardware.scrbl"]
@include-section["planned.scrbl"]
@include-section["powder-tutorial.scrbl"]
@include-section["openstack-tutorial.scrbl"]
@include-section["getting-help.scrbl"]
......@@ -4,21 +4,21 @@
@title{Logging In}
The first step is to log in to @(tb); @(tb) is available to all
researchers and educators who work in cloud computing. If you have
an account at one of its federated facilities, like
@geniusers-only{
The first step is to log in to @(tb). @clab-only{@(tb) is available to all researchers and educators who work in cloud computing.}
If you have an account at one of its federated facilities, like
@link["https://www.emulab.net"]{Emulab} or
@link["http://geni.net"]{GENI}, then you already have an account at
@(tb).
@(tb).}
@section{Using a @(tb) Account}
@geniusers-only{@section{Using a @(tb) Account}}
If you have signed up for an account at the @(tb) website, simply
open @url[apt-base-url]in your browser, click the ``Log In'' button,
enter your username and password, and @bold{skip to
the next part of the tutorial}.
open @url[apt-base-url] in your browser, click the ``Log In'' button,
enter your username and password@geniusers-only{, and @bold{skip to the next part of the tutorial}}.
@screenshot["tutorial/front-page.png"]
@geniusers-only{
@clab-screenshot["tutorial/front-page.png"]
@section{Using a GENI Account}
......@@ -28,21 +28,24 @@ features of the @(tb) and GENI portal.
@itemlist[#:style 'ordered
@instructionstep["Open the web interface"
#:screenshot "tutorial/front-page.png"]{
#:screenshot "tutorial/front-page.png"
#:screenshot-where "clab"]{
To log in to @(tb) using a GENI account, start by visiting
@url[apt-base-url] in your browser and using the ``Log In''
button in the upper right.
}
@instructionstep["Click the \"GENI User\" button"
#:screenshot "tutorial/login-page.png"]{
#:screenshot "tutorial/login-page.png"
#:screenshot-where "clab"]{
On the login page that appears, you will use the ``GENI User'' button.
This will start the GENI authorization tool, which lets you connect
your GENI account with @(tb).
}
@instructionstep["Select the GENI portal"
#:screenshot "tutorial/authorization-tool.png"]{
#:screenshot "tutorial/authorization-tool.png"
#:screenshot-where "clab"]{
You will be asked which facility your account is with. Select the GENI
icon, which will take you to the GENI portal. There are several other
facilities that are federated with @(tb), which can be found in the
......@@ -50,7 +53,8 @@ features of the @(tb) and GENI portal.
}
@instructionstep["Log into the GENI portal"
#:screenshot "tutorial/geni-login.png"]{
#:screenshot "tutorial/geni-login.png"
#:screenshot-where "clab"]{
You will be taken to the GENI portal, and will need to select the
institution that is your identity provider. Usually, this is the
university you are affiliated with. If your university is not in
......@@ -63,7 +67,8 @@ features of the @(tb) and GENI portal.
}
@instructionstep["Log into your institution"
#:screenshot "tutorial/utah-login.png"]{
#:screenshot "tutorial/utah-login.png"
#:screenshot-where "clab"]{
This will bring you to your institution's standard login page, which you
likely use to access many on-campus services. (Yours will look different
from this one.)
......@@ -87,13 +92,14 @@ features of the @(tb) and GENI portal.
this step in the future (you will still be asked to log in to
the GENI portal).
@screenshot["tutorial/authorize.png"]
@clab-screenshot["tutorial/authorize.png"]
}
@instructionstep["Set up an SSH keypair in the GENI portal"
#:screenshot "tutorial/portal-keypair.png"]{
#:screenshot "tutorial/portal-keypair.png"
#:screenshot-where "clab"]{
Though not strictly required, many parts of this tutorial will
work better if you have an @(ssh) public key associated with your GENI
Portal account. To upload one, visit
......@@ -108,5 +114,4 @@ features of the @(tb) and GENI portal.
@margin-note{When you create a new experiment, @(tb) grabs the set of @(ssh)
keys you have set up at the time; any @(ssh) keys that you add later are
not added to experiments that are already running.} } ]
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment