Skip to content. | Skip to navigation

Personal tools

Navigation

You are here: Home / Wiki / Setupplc

Setupplc

Adding A New PLC Instance

This document is intended for Emulab operators who wish to use Emulab's "PlanetLab Portal" interface. Originally, this software supported only PlanetLab, but it now supports MyPLC-based management platforms. You can add multiple PLCs to manage if you desire.

Adding A New PLC Instance

0. Get a PI account on the PLC.

Remember the passwd; we currently use it to create slices and manage them since PLC's privilege model is very coarse-grained at the moment.

1. Get an "emulabman" account at the PLC.

The emulabman user is added to each slice created or managed by the Emulab software. Boss uses the emulabman account to slogin to slivers and run various configuration and management commands. You will need to upload the public half of Boss's passphrase-less root ssh key (/root/.ssh/id_rsa.pub) to this account via the PLC webpage.

2. Add new node types.

You need a physical node type and a virt node type. If your PLC's "name" is PlanetLabFoo, then perhaps use a virt type of 'pcpfoo'. Then, you *MUST* create the physical type by appending 'phys' to the virt type... since this assumption is made in the code. NOTE: you need to set the class for these types to the type name itself!

https://myboss.deine.testbed.emulab.net/editnodetype.php3?new_type=1

For the virt type, you need to set isvirtnode, isdynamic, isremotenode, isplabdslice all to 1. Then, you should make sure to set the default_osid attribute to emulab-ops/RHL-PLAB, which is a dummy osid used for plab nodes since they're not currently imageable. Then set the "rebootable" attribute to 1.

For the phys type, you only need to set isremotenode to 1. Then, for attributes, you should set at least

adminmfs_osid, control_interface, control_network, default_osid, delay_capacity(=0), diskloadmfs_osid, imageable(=1), max_interfaces, power_delay, rebootable(=1), simnode_capacity(=0), trivlink_maxspeed, virtnode_capacity(=1).

3. Configure database state.

You must set a number of plc-related attributes so that Emulab can invoke operations at the PLC and contact nodes to setup slivers.

First, add basic plc information:

insert into plab_plc_info \
  (plc_idx,plc_name,api_url,def_slice_prefix, \
   nodename_prefix,node_type,svc_slice_name) values \
  (NULL,'PlanetFoo','https://server.name/PLCAPI/','foo', \
   'pfoo','pcpfoo','foo_svc_slice')

replacing values as necessary. plc_name is a string WITH NO SPACES. def_slice_prefix is whatever slice prefix the PLC has assigned your site; we will try to create slices using this prefix. When the periodic node discovery script runs, it will add nodes named "<nodename_prefix>N"... i.e., "pfoo12". node_type should be set to the virt type you added in step 2. svc_slice_name should be set to the name of a slice you have created at PLC in delegated mode, and to which you have added the "emulabman" user. We use this slice mainly as a host for software, proxies, etc. NOTE: record the auto-increment idx your plc is assigned once you do the initial insert! You will need it now.

Then, add several plc-wide attributes:

  insert into plab_plc_attributes values \
    (<plc_idx>,'<attrkey>','<attrvalue>')

You need to set the following attributes for each PLC you add:

  syncmethod    Controls how the discovery script synchronizes node state
		  with PLC; can be either 'xmlrpc' or 'sites'.
  auth_method   Controls how our libraries authenticate with PLC; for now,
		  the only accepted value is 'password'.
  username      Username to authenticate with at PLC.
  password      Password to authenticate with at PLC.
  role          Role to authenticate with at PLC.
  nm_username   Username to contact the NodeManager with (note that this
		  value is a slice, just like how you normally login to 
		  your regular slivers).
  nm_key        Public half of an ssh key to use when contacting the NM.
  rootballs     A comma-separated list of tarballs to install in experiment
		  slivers; each tarball may be followed by a ':' and a
		  directory (where they will be unpacked in the sliver)
  emulabman     The emulabman username; we add this user to every slice we
		  create so Boss can always login.

Then add a couple per-slice attributes:

  insert into plab_slice_attributes values \
    (<plc_idx>,'<slicename>','<attrkey>','<attrvalue>')

To get started, you only need to set attributes for your service slice:

  commands      A comma-separated list of commands that is run after the
		  rootballs have been unpacked into the slice.
  rootballs     <see above>

XXX: fill in what this means, how to create the basic rootballs, etc.

4. Create rootballs.

XXX: fill in later.

5. Configure state so that new plc nodes can be discovered and added automatically.

  insert into nextfreenode values ('<nodetype>',nextid,nextid)

where nodetype is the virt node type you added in step 2, and nextid is the next numeric suffix you want to be added to the nodename_prefix you chose above.

6. Run plabdiscover manually once, then put it in cron.

7. Add three experiments:

  1. emulab-ops/plab-monitor
  2. emulab-ops/plab-testing
  3. emulab-ops/plabnodes (use admin mode, no ns file necessary).

Create slices for the first two by inserting entries into the plab_slices table, then adding the slices at PLC (via the PLC web interface, or by using the plabslice command. Best to use the plabslice command, since it will ensure that your EmulabMan username is added, and that various necessary slice attributes are set.

8. Run plabmonitord manually once, see that things are working…

... then startit as a daemon.

Done

Now you can use PLC-based slivers in experiments.