| 1 | The Omni GENI Client - |
| 2 | |
| 3 | Omni is an end-user GENI client that communicates with GENI Aggregate |
| 4 | Managers and presents their resources with a uniform specification, |
| 5 | known as the omnispec. The Omni client can also communicate with |
| 6 | control frameworks in order to create slices, delete slices, and |
| 7 | enumerate available GENI Aggregate Managers. |
| 8 | Note that Omni also supports using control framework native RSpecs. |
| 9 | |
| 10 | To configure Omni, please copy src/omni_config or /etc/omni/templates/omni_config |
| 11 | to your ~/.gcf directory and fill in the parameters for at least one control |
| 12 | framework. The "omni" section should be filled in with the |
| 13 | certificate and key that you use in your control framework. Note that keys |
| 14 | for the GCF framework are by default stored in ~/.gcf-servers. Embedded |
| 15 | comments describe the meaning of each field. |
| 16 | |
| 17 | The currently supported control frameworks are SFA, PG and GCF. OpenFlow |
| 18 | Aggregate Managers are also supported. |
| 19 | |
| 20 | Omni works by |
| 21 | - The Framework classes know the API for each clearinghouse |
| 22 | - Aggregate Managers are contacted via the GENI API |
| 23 | - RSpecs are converted to a very simple common 'omnispec' |
| 24 | format. Users (hand) edit these and supply these to createsliver calls. |
| 25 | |
| 26 | Omnispecs |
| 27 | --------- |
| 28 | Each OmniResource has a name, a description, a type, booleans |
| 29 | indicating whether the resource is allocated and whether the request |
| 30 | wants to allocate it, and then hashes for options and misc fields. |
| 31 | |
| 32 | Extending Omni |
| 33 | -------------- |
| 34 | Extending Omni to support additional types of Aggregate Managers with |
| 35 | different RSpec formats requires adding a new omnispec/rspec conversion file. |
| 36 | |
| 37 | Extending Omni to support additional frameworks with their own |
| 38 | clearinghouse APIs requires adding a new Framework extension class. |
| 39 | |
| 40 | Omni workflow |
| 41 | ============= |
| 42 | - Pick a Clearinghouse you want to use. That is the control framework you |
| 43 | will use. |
| 44 | |
| 45 | - Be sure the appropriate section of omni config for your framework |
| 46 | (sfa/gcf/pg) has appropriate settings for contacting that Clearinghouse, |
| 47 | and user credentials that are valid for that Clearinghouse. |
| 48 | |
| 49 | - Run omni listresources > avail-resources.omnispec |
| 50 | a) When you do this, Omni will contact your designated Clearinghouse, using |
| 51 | your framework-specific user credentials. |
| 52 | b) The clearinghouse will list the Aggregates it knows about. |
| 53 | EG for GCF, the am_* entries in gcf_config. For SFA, it will return the |
| 54 | contents of /etc/sfa/geni_aggregates.xml. |
| 55 | c) Omni will then contact each of the Aggregates that the Clearinghouse told |
| 56 | it about, and use the GENI AM API to ask each for its resources. |
| 57 | Again, it will use your user credentials. So each Aggregate Manager must |
| 58 | trust the signer of your user credentials, in order for you to talk |
| 59 | to it. This is why you add the CH certificate to /etc/sfa/trusted_roots or to |
| 60 | the -r argument of your GCF gcf-am.py. |
| 61 | d) Omni will then convert the proprietary RSPecs into a single 'omnispec'. |
| 62 | |
| 63 | - Save this to a file. You can then edit this file to reserve resources, |
| 64 | by changing 'allocate: false' to 'allocate: true' wherever the resource |
| 65 | is not already allocated ('allocated: true'). |
| 66 | |
| 67 | - Create a Slice. |
| 68 | Slices are created at your Clearinghouse. Slices are named based on |
| 69 | the Clearinghouse authority that signs for them. Using the shorthand |
| 70 | (just the name of your slice within PG, for example) allows Omni to |
| 71 | ensure your Slice is named correctly. So run: |
| 72 | omni.py createslice MyGreatTestSlice |
| 73 | |
| 74 | - Allocate your Resources |
| 75 | Given a slice, and your edited omnispec file, you are ready to allocate |
| 76 | resources by creating slivers at each of the Aggregate Managers. |
| 77 | Omni will contact your Clearinghouse again, to get the credentials |
| 78 | for your slice. It will parse your omnispec file, converting it back |
| 79 | into framework specific RSpec format as necessary. |
| 80 | It will then contact each Aggregate Manager in your |
| 81 | omnispec where you are reserving resources, calling the GENI AM API |
| 82 | CreateSliver call on each. It will supply your Slice Credentials |
| 83 | (from the Clearinghouse) plus your own user certificate, and the RSpec. |
| 84 | |
| 85 | At this point, you have resources and can do your experiment. |
| 86 | |
| 87 | - Renew or Delete |
| 88 | After a while you may want to Renew your Sliver that is expiring, or |
| 89 | Delete it. Omni will contact the Clearinghouse, get a list of all |
| 90 | Aggregates, and invoke RenewSliver or DeleteSliver on each, for |
| 91 | your slice name. |
| 92 | |
| 93 | Running Omni - |
| 94 | |
| 95 | == The following options are supported: == |
| 96 | |
| 97 | -c FILE -- location of your config file (default ~/.gcf/omni_config) |
| 98 | |
| 99 | -f FRAMEWORK -- control framework to use (e.g. my_sfa), overriding default |
| 100 | in config file. The framework is a section named in the config file. |
| 101 | |
| 102 | --debug -- Enable debug output |
| 103 | |
| 104 | == The following commands are supported: == |
| 105 | |
| 106 | ** createslice |
| 107 | - format: omni.py createslice <slice-name> |
| 108 | - example: omni.py createslice myslice |
| 109 | |
| 110 | Creates the slice in your chosen control framework. |
| 111 | |
| 112 | Default GCF certs require a slice named geni.net:gpo:gcf+slice+<name> |
| 113 | based on the base_name section of gcf_config. The shorthand notation |
| 114 | is available for SFA and PG. Shorthand works if your control framework is GCF |
| 115 | only if you have configured the 'authority' line in the gcf section of |
| 116 | omni_config. |
| 117 | |
| 118 | |
| 119 | ** deleteslice |
| 120 | - format: omni.py deleteslice <slice-name> |
| 121 | - example: omni.py deleteslice myslice |
| 122 | |
| 123 | Deletes the slice in your chosen control framework |
| 124 | |
| 125 | |
| 126 | ** listresources |
| 127 | - format: omni.py listresources [slice-name] [-a AM-URL] [-n] |
| 128 | - example: omni.py listresources |
| 129 | omni.py listresources myslice |
| 130 | omni.py listresources myslice -a http://localhost:12348 |
| 131 | omni.py listresources myslice -a http://localhost:12348 -n |
| 132 | |
| 133 | This command will list the rspecs of all geni aggregates available |
| 134 | through your chosen framework, and present them in omnispec form. |
| 135 | Save the result to a file and edit the allocate value to true |
| 136 | to set up a reservation RSpec, suitable for use in a call to |
| 137 | createsliver. |
| 138 | If a slice name is supplied, then resources for that slice only |
| 139 | will be displayed. |
| 140 | If an Aggregate Manager URL is supplied, only resources |
| 141 | from that AM will be listed. |
| 142 | If the "-n" flag s used the native RSpec is returned instead of an |
| 143 | omnispec. The "-n" flag requires the "-a" flag also be used to |
| 144 | specify an aggregate manager. |
| 145 | |
| 146 | |
| 147 | ** createsliver |
| 148 | - format: omni.py createsliver <slice-name> [-a AM-URL -n] <spec file> |
| 149 | - example: omni.py createsliver myslice resources.ospec |
| 150 | omni.py createsliver myslice -a http://localhost:12348 -n resources.rspec |
| 151 | |
| 152 | - argument: the spec file should have been created by a call to |
| 153 | listresources (e.g. omni.py listresources > resources.ospec) |
| 154 | Then, edit the file and set "allocate": true, for each |
| 155 | resource that you want to allocate. |
| 156 | |
| 157 | This command will allocate the requested resources (those marked |
| 158 | with allocate: true in the rspec). It will send an rspec to each |
| 159 | aggregate manager that a resource is requested for. |
| 160 | This command can also operate in native mode "-n" by sending a |
| 161 | native rspec to a single aggregate specified by the "-a" command. |
| 162 | |
| 163 | |
| 164 | ** deletesliver |
| 165 | - format: omni.py deletesliver <slice-name> |
| 166 | - example: omni.py deletesliver myslice |
| 167 | |
| 168 | This command will free any resources associated with your slice. |
| 169 | |
| 170 | |
| 171 | |
| 172 | ** renewsliver |
| 173 | - format: omni.py renewsliver <slice-name> "<time>" |
| 174 | - example: omni.py renewsliver myslice "12/12/10 4:15pm" |
| 175 | - example: omni.py renewsliver myslice "12/12/10 16:15" |
| 176 | |
| 177 | This command will renew your resources at each aggregate up to the |
| 178 | specified time. This time must be less than or equal to the time |
| 179 | available to the slice. |
| 180 | Times are in UTC. |
| 181 | |
| 182 | |
| 183 | ** sliverstatus |
| 184 | - format: omni.py sliverstatus <slice-name> |
| 185 | - example: omni.py sliverstatus myslice |
| 186 | |
| 187 | This command will get information from each aggregate about the |
| 188 | status of the specified slice |
| 189 | |
| 190 | |
| 191 | ** shutdown |
| 192 | - format: omni.py shutdown <slice-name> |
| 193 | - example: omni.py shutdown myslice |
| 194 | |
| 195 | This command will stop the resources from running, but not delete |
| 196 | their state. This command should not be needed by most users. |