Changes between Initial Version and Version 1 of DRAFT_GAPI_AM_API_V2


Ignore:
Timestamp:
12/02/11 17:53:17 (12 years ago)
Author:
Aaron Helsinger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DRAFT_GAPI_AM_API_V2

    v1 v1  
     1[[PageOutline]]
     2
     3= GENI Aggregate Manager API Version 2 =
     4
     5The GENI Aggregate Manager API allows aggregates to advertise resources and to allocate resources to Slices in the form of Slivers. A Sliver is the set of resources allocated by one Aggregate to one Slice.
     6
     7This is the GENI AM API Version '''2'''.
     8
     9See Also:
     10 * [wiki:DRAFT_GAPI_AM_API_V2_DETAILS API Version 2 Details page]
     11 * [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf Slice-based Facility Architecture (SFA) specification]
     12 * [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa-impl.pdf PlanetLab Implementation of the Slice-Based Facility Architecture]
     13 * [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2 ProtoGENI Component Manager API revision 2]
     14 * [wiki:GeniApi GENI API] implementation status
     15 * [wiki:GeniApiCredentials GENI credentials] for authorization
     16 * [wiki:GeniApiCertificates GENI certificates] for authentication. The GENI AM API uses XML-RPC over SSL with client authentication using certificates.
     17 * [wiki:DRAFT_GAPI_AM_API_DRAFT Draft API Revisions] proposed for the next version of this API
     18 * [wiki:DRAFT_GAPI_AM_API_ISSUES Open issues with this API]
     19
     20== Versions ==
     21
     22 * Previous: [wiki:DRAFT_GAPI_AM_API_V1 Version 1]
     23 * Latest: 2 - Documented on this page. Changes since v1 include:
     24  * Includes Change Sets A and B from the [wiki:DRAFT_GAPI_AM_API_V2_DELTAS v2 Deltas page]
     25  * Specify that GENI RSpecs are XML documents following standard schemas published [http://www.geni.net/resources/rspec on geni.net] and documented [http://www.protogeni.net/trac/protogeni/wiki/RSpec on the ProtoGENI wiki]
     26  * Include additional options in !GetVersion and !ListResources to allow aggregates to specify the RSpec formats they support
     27  * Add an 'options' argument, an XML-RPC struct, to all methods with no required values. This allows Aggregates to innovate or support resource-specific functionality.
     28  * Modify all methods to return an XML-RPC struct consisting of at least (1) a return 'code', (2) the 'value' specified by v1 of the API, and (3) a human-readable 'output' on errors. Aggregates are free to innovate by adding additional return values.
     29 * [wiki:DRAFT_GAPI_AM_API_DRAFT Draft change for version 3+
     30  * Covers changes proposed for future versions of this API. Documented changes include:
     31  * Change Set C: Add an !UpdateSliver method to add/remove/modify resources from a slice at an aggregate
     32  * Change Set D: Modify the API methods to explicitly support multiple slivers per slice at an aggregate
     33  * Change Set E: Add the use of Tickets to API methods
     34  * Others to be proposed
     35
     36-----
     37== Changes since Version 1 ==
     38=== Change Set A: RSpecs are XML documents following GENI schemas ===
     39
     40'''Note''': At the GEC12 coding sprint, this change set was modified slightly from that which is widely implemented. This change
     41 - Removed the {{{default_ad_rspec}}} value from !GetVersion
     42 - Made the {{{rspec_version}}} argument to !ListResources required and renamed it {{{geni_rspec_version}}}
     43 - Renamed the other return values from !GetVersion to use the {{{geni_}}} naming prefix
     44
     45Other parts of this change set have been discussed and well behaved aggregates already implement them. The community has agreed to include this change in version 2 of this API. This change will:
     46 * Specify that GENI RSpecs comply with GENI standard XML schemas as posted at http://www.geni.net/resources/rspec. GENI RSpec v3 is what was the ProtoGENI v2 schemas as documented [http://www.protogeni.net/trac/protogeni/wiki/RSpec on the ProtoGENI wiki]. [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#RSpecs Use of RSpecs in the AM API is well proscribed].
     47 * Include additional options in !GetVersion and !ListResources to allow aggregates to support the GENI RSpecs in addition to their own native format.
     48
     49=== Change Set B: Flexible arguments and returns ===
     50
     51This change set was adopted at GEC12 for inclusion in AM API version 2.
     52
     53 * All methods take an ''options'' argument, which is a non null XML-RPC struct. No required options are added with this change - the struct may be empty (except at !ListResources). Details are on the [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#Options version 2 Details wiki page].
     54 * Method returns are modified to return at least 3 name/value pairs, with arbitrary additional such pairs.
     55  * {{{code}}} indicates success or error return. This itself is an XML-RPC struct, whose content is defined.
     56  * {{{value}}} is the return value as specified in AM API v1 or as modified by Change Set A (RSpec, etc), and
     57  * {{{output}}} is a human readable indication of the nature of the return or error.
     58  * Aggregates are free to use other additional name/value pairs in the return struct.
     59  * Commentary on the return structure is [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#ReturnCodes documented].
     60 * Aggregates are free to support additional options and return values, but must document them as [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#DocumentingAggregateAdditions discussed]
     61 * Aggregate may support multiple versions of the AM API, [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#SupportingMultipleAPIVersions as discussed]
     62
     63-----
     64== API Overview ==
     65The GENI Aggregate Manager API is the control plane interface by which experimenters discover, reserve and control resources at resource providers. It does not include resource specific interactions, application level interactions, or monitoring and management functions.
     66
     67=== API Protocols and Data Structures ===
     68
     69GENI specifies that the AM API is provided via [http://www.xmlrpc.com/spec XML-RPC] over an SSL connection. Aggregate Managers shall require client side [wiki:GeniApiCertificates GENI certificates] to authenticate users, accepting only certificates that comply with the adopted [wiki:GeniApiCertificates GENI certificates] standards. The GENI AM API therefore assumes that users have already been authenticated, and that the aggregate manager has available the client certificate to identify the user.
     70
     71Clients are authorized to take actions at aggregates using [wiki:GeniApiCredentials GENI credentials]. To that end, all methods that require authorization take an argument {{{credentials}}}. In particular, operations on a single GENI slice will require a credential that authorizes the client whose certificate was used to authenticate to operate on the slice named by a {{{slice_urn}}} argument to the method.
     72
     73The primary data structure used within this API is a resource specification, known as an RSpec. These XML documents follow a specific set of schemas. They are used by aggregates to list and describe local resources (advertisement RSpecs), by experimenters to describe desired resources (request RSpecs), and then by aggregates to describe reserved resources (manifest RSpecs). For more information on RSpecs, see [wiki:SW_AMAPIV2_Take2_Details#RSpecs the details page].
     74
     75=== Using the GENI AM API ===
     76
     77Clients (experimenters) use the AM API to discover resources (!ListResources), request resources (!CreateSliver), check the status of resources as they are started (!SliverStatus), extend their reservation (!RenewSliver), and then return the resources when done (!DeleteSliver). Client tools may use !GetVersion to ensure aggregates speak a compatible version of the AM API and known formats for RSpecs. Administrators may call Shutdown to stop the resources of a slice at this aggregate, perhaps if that slice is misbehaving.
     78
     79!ListResources returns to the client an advertisement RSpec - a detailed listing of the resources available at that aggregate. From this information, the experimenter may determine which resources to reserve for their use. The RSpec should also have enough information to help the experimenter set the initial configuration for their resources.
     80
     81Once the experimenter has selected the resources they want and how to configure them, they produce a request RSpec, detailing the resources they want and how they should be configured. They separately contact their slice authority to obtain a slice credential, granting them rights to reserve resources for that slice. The experimenter then calls !CreateSliver on this API, passing in both the slice credential and the request RSpec. The aggregate then attempts to satisfy the experimenter's resource request. If the aggregate can satisfy the request, the aggregate reserves the resources for the experimenter. The aggregate then starts the process of instantiating the resources and configuring them as requested in the request RSpec. Once that process has started, the !CreateSliver call returns with a manifest RSpec, listing the resources as reserved and initially configured for the experimenter.
     82
     83The experimenter can then poll the aggregate manager to watch as the resources are configured and become ready for use, by calling !SliverStatus. Once the resources are ready for use, the experimenter will start using the resources. The experimenter will also call !RenewSliver to request that their reservation lasts as long as they require the resources for. When the experimenter is done using the resources, they call !DeleteSliver to end their reservation. The aggregate then stops and clears the resources, freeing them for use by other clients.
     84
     85Client work flow:
     86 0. <Experimenter gets a [wiki:GeniApiCertificates GENI certificate] and slice [wiki:GeniApiCredentials credential]>
     87 1. {{{GetVersion()}}}: learn RSpec formats supported at this aggregate
     88 2. {{{ListResources(<user credential>, options)}}}: get Ad RSpec describing available resources
     89 3. <Experimenter constructs a request RSpec>
     90 4. {{{CreateSliver(<slice URN>, <slice credential>, <request RSpec>, <users struct>, {})}}}:
     91  * Aggregate reserves and starts resources
     92  * Return is a manifest RSpec describing the reserved resources
     93 6. {{{SliverStatus(<slice URN>, <slice credential>, <new time>, {})}}} to check that resources are starting
     94 7. {{{RenewSliver(<slice URN>, <slice credential>, {})}}} to extend reservation
     95 8. <Experimenter uses resources>
     96 9. {{{DeleteSliver(<slice URN>, <slice credential>, {})}}} when done
     97
     98-----
     99== API Methods ==
     100
     101=== !GetVersion ===
     102Get static version and configuration information about this aggregate. Return includes:
     103 * The version of the GENI Aggregate API supported by this aggregate manager instance
     104 * URLs for other versions of this API supported by this aggregate
     105 * The RSpec formats accepted at this aggregate
     106 * Other information about the configuration of this aggregate.
     107
     108For details on the arguments, return structure, and semantics, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#GetVersionDetails the details page].
     109
     110The !GetVersion operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#GetVersion GetVersion] operation. The [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] specification does not include this operation.
     111
     112{{{
     113struct GetVersion([optional: struct options])
     114}}}
     115
     116The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     117
     118{{{
     119{
     120  int geni_api;
     121  struct code = {
     122       int geni_code;
     123       [optional: string am_type;]
     124       [optional: int am_code;]
     125         }
     126  struct value
     127      {
     128        int geni_api;
     129        struct geni_api_versions {
     130             URL <this API version #>;
     131             [optional: other supported API versions and the URLs where they run]
     132             }
     133        array geni_request_rspec_versions of {
     134             string type;
     135             string version;
     136             string schema;
     137             string namespace;
     138             array extensions of string;
     139        };
     140        array geni_ad_rspec_versions of {
     141             string type;
     142             string version;
     143             string schema;
     144             string namespace;
     145             array extensions of string;
     146        };
     147      }
     148  string output;
     149}
     150}}}
     151
     152==== Arguments Summary ====
     153 * {{{options}}}: Optional. [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#DocumentingAggregateAdditions document new options arguments].
     154
     155==== Return Summary ====
     156
     157As with all AM API methods, the return is an XML-RPC struct. For !GetVersion, it includes:
     158 * The standard AM API {{{code}}}, {{{value}}}, and {{{output}}} entries. For details, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#ReturnStruct the Details page]
     159 * {{{geni_api}}}: integer version of this API ('''2'''). Repeated here for backwards compatibility.
     160
     161!GetVersion {{{value}}} return members:
     162 * {{{geni_api}}} = '''2''' (Integer current version of this API).
     163 * List of versions of the API supported by this aggregate. For details on doing this, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#SupportingMultipleAPIVersions the Details page].
     164 * List of request RSpec formats supported by this aggregate. For details on RSpecs, see [wiki:SW_AMAPIV2_Take2_Details#RSpecs the Details page].
     165 * List of advertisement RSpec formats supported by this aggregate. For details on RSpecs, see [wiki:SW_AMAPIV2_Take2_Details#RSpecs the Details page].
     166
     167For details on !GetVersion arguments, returns, and semantics, and a sample minimal return, see [wiki:SW_AMAPIV2_Take2_Details#GetVersionDetails the Details page].
     168
     169----
     170=== !ListResources ===
     171
     172Return a listing and description of available resources at this aggregate, or resources allocated to a named slice at this aggregate. The resource listing and description provides sufficient information for clients to select among available resources, or to use reserved resources. These listings are known as RSpecs.
     173
     174{{{
     175struct ListResources(string credentials[], struct options)
     176}}}
     177
     178The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     179
     180{{{
     181{
     182  struct code = {
     183       int geni_code;
     184       [optional: string am_type;]
     185       [optional: int am_code;]
     186         }
     187  string value;
     188  string output;
     189}
     190}}}
     191
     192This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#DiscoverResources DiscoverResources] operation and to the [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA]'s !GetResources operation (sec. 6.2.4).
     193
     194==== Arguments Summary ====
     195 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     196
     197 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options A NON empty struct with particular semantics described on the Details page].  For this method, options indicate the set of resources that the caller is interested in, or the format of the result. Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     198
     199The following members are available for use in the options parameter. All aggregate managers are required to implement these options. See the details page for an explanation of [wiki:SW_AMAPIV2_Take2_Details#Arguments1 the meaning and semantics of each].
     200
     201{{{
     202{
     203  boolean geni_available;
     204  boolean geni_compressed;
     205  string geni_slice_urn;
     206  struct geni_rspec_version {
     207    string type;
     208    string version;
     209  };
     210}
     211}}}
     212
     213==== Return Summary ====
     214
     215As with all AM API methods, the return is an XML-RPC struct, whose actual content is in the {{{value}} entry. For !ListResources, {{{value}} is an RSpec listing and describing resources at this aggregate. Depending on the arguments, this may be and advertisement RSpec showing all local resources, or one showing only available local resources, or a manifest RSpec of resources reserved for a particular slice.
     216
     217The details page has details on !ListResources arguments, [wiki:SW_AMAPIV2_Take2_Details#Return1 returns], and semantics.
     218----
     219=== !CreateSliver ===
     220
     221Allocate resources as described in a request RSpec argument to a slice with the named URN. This operation is expected to start the allocated resources asynchronously after the operation has successfully completed. Callers can check on the status of the resources using [wiki:GAPI_AM_API#SliverStatus SliverStatus]. Resources will be reserved until a particular time, set by the aggregate according to policy. That expiration time will be no later than the expiration time of the provided slice credential. This method returns a listing and description of the resources reserved for the slice by this operation, in the form of a manifest RSpec.
     222
     223{{{
     224struct CreateSliver(string slice_urn,
     225                    string credentials[],
     226                    string rspec,
     227                    struct users[],
     228                    struct options)
     229}}}
     230
     231The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     232
     233{{{
     234{
     235  struct code = {
     236       int geni_code;
     237       [optional: string am_type;]
     238       [optional: int am_code;]
     239         }
     240  string value;
     241  string output;
     242}
     243}}}
     244
     245This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#CreateSliver CreateSliver] operation and to the [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA]'s !CreateSlice operation (sec. 6.2.1).
     246
     247
     248==== Arguments Summary ====
     249 * {{{slice_urn}}}: The URN of the slice to which the resources specified in {{{rspec}}} will be allocated. For details on GENI AM API URN identifiers, see the [wiki:GeniApiIdentifiers GENI wiki page].
     250
     251 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     252
     253 * {{{rspec}}}: An RSpec matching the [http://www.protogeni.net/trac/protogeni/wiki/RSpec GENI standard] request RSpec [http://www.geni.net/resources/rspec/3/request.xsd schema] containing the resources that the caller is requesting for allocation to the slice specified in {{{slice_urn}}}.
     254
     255 * {{{users[]}}}: An array of user structs, which contain information about the users that might login to the sliver that the AM needs to know about. This struct has particular required members, documented on [wiki:DRAFT_GAPI_AM_API_V2_DETAILS the V2 details page].
     256
     257 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     258
     259==== Return Summary ====
     260!CreateSliver reserves the requested resources if possible. The aggregate then (asynchronously) starts those resources.
     261As with all AM API methods, the return is an XML-RPC struct. The !CreateSliver method returns in the {{{value}} entry a manifest RSpec matching the [http://www.protogeni.net/trac/protogeni/wiki/RSpec GENI standard] manifest RSpec [http://www.geni.net/resources/rspec/3/manifest.xsd schema] listing and describing the resources that were allocated to the slice.
     262
     263For details on !CreateSliver arguments, returns, and semantics see the [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#CreateSliverDetails V2 details page].
     264----
     265=== !DeleteSliver ===
     266
     267Delete any slivers at the given aggregate belonging to the given slice, by stopping the resources if they are still running, and then deallocating the resources associated with the slice.  When complete, this slice will own no resources on this aggregate - any such resources will have been stopped.
     268
     269{{{
     270struct DeleteSliver(string slice_urn, string credentials[], struct options)
     271}}}
     272
     273The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     274
     275{{{
     276{
     277  struct code = {
     278       int geni_code;
     279       [optional: string am_type;]
     280       [optional: int am_code;]
     281         }
     282  boolean value;
     283  string output;
     284}
     285}}}
     286
     287This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#DeleteSliver DeleteSliver] operation and to the [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA]'s !DeleteSlice operation (sec. 6.2.3).
     288
     289==== Arguments Summary ====
     290 * {{{slice_urn}}}: The URN of the slice for which all resources will be freed.
     291
     292 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     293
     294 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     295
     296==== Return Summary ====
     297
     298As with all AM API methods, the return is an XML-RPC struct. !DeleteSliver stops all the slice's resources and removes the reservation. It returns in the {{{value}} slot {{{true}}} or {{{false}}} indicating whether it did this successfully.
     299
     300For details on !DeleteSliver arguments, returns, and semantics, see [wiki:DRAFT_GAPI_AM_API_V2_Details#DeleteSliverDetails the V2 details page].
     301----
     302=== !SliverStatus ===
     303
     304Get the status of a sliver or slivers belonging to the given slice at the given aggregate. Status may include other dynamic reservation or instantiation information as required by the resource type and aggregate. This method is used to provide updates on the state of the resources after the completion of !CreateSliver, which began to asynchronously provision and start the resources.
     305
     306{{{
     307struct SliverStatus(string slice_urn, string credentials[], struct options)
     308}}}
     309
     310The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     311
     312{{{
     313{
     314  struct code = {
     315       int geni_code;
     316       [optional: string am_type;]
     317       [optional: int am_code;]
     318         }
     319  struct value;
     320  string output;
     321}
     322}}}
     323
     324This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#SliverStatus,WaitForStatus SliverStatus] operation. The [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] specification does not include this operation.
     325
     326
     327==== Arguments Summary ====
     328 * {{{slice_urn}}}: The URN of the slice for which the resource status is desired.
     329
     330 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     331
     332 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     333
     334==== Return Summary ====
     335
     336As with all AM API methods, the return is an XML-RPC struct. !SliverStatus returns the status of the overall reservation, and of each addressable resource within the reservation in an XML-RPC struct in the {{{value}}} entry.
     337
     338{{{
     339{
     340  geni_urn: <sliver URN>
     341  geni_status: ready
     342  geni_resources: [ { geni_urn: <resource URN>
     343                      geni_status: ready
     344                      geni_error: ''},
     345                    { geni_urn: <resource URN>
     346                      geni_status: ready
     347                      geni_error: ''}
     348                  ]
     349}
     350}}}
     351
     352For details on !SliverStatus arguments, returns, and semantics, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#SliverStatusDetails the V2 details page].
     353----
     354=== !RenewSliver ===
     355
     356Renews the resources in all slivers at this aggregate belonging to the given slice until the given time, extending the lifetime of the slice. Aggregates may limit how long reservations may be extended. Initial sliver expiration is set by aggregate policy, no later than the slice credential expiration time.
     357
     358{{{
     359struct RenewSliver(string slice_urn,
     360                    string credentials[],
     361                    string expiration_time,
     362                    struct options)
     363}}}
     364
     365The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     366
     367{{{
     368{
     369  struct code = {
     370       int geni_code;
     371       [optional: string am_type;]
     372       [optional: int am_code;]
     373         }
     374  boolean value;
     375  string output;
     376}
     377}}}
     378
     379This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#RenewSlice RenewSlice] operation. The [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] specification does not include this operation.
     380
     381
     382==== Arguments Summary ====
     383 * {{{slice_urn}}}: The URN of the slice for which the resource reservation will be extended.
     384
     385 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     386
     387 * {{{expiration_time}}}: The date-time string in [http://tools.ietf.org/html/rfc3339 RFC 3339] format in UTC when the reservation should be extended until.
     388
     389 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     390
     391==== Return Summary ====
     392
     393As with all AM API methods, the return is an XML-RPC struct. The actual return in {{{value}}} is {{{true}}} or {{{false}}} indicating whether the reservation was successfully extended to the requested date and time.
     394
     395For details on !RenewSliver arguments, returns, and semantics, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#RenewSliverDetails the V2 details wiki page].
     396----
     397=== Shutdown ===
     398
     399Perform an emergency shut down of a sliver or slivers at this aggregate belonging to the given slice. This operation is intended for administrative use. The sliver is shut down but remains available for further forensics.
     400
     401{{{
     402struct Shutdown(string slice_urn, string credentials[], struct options)
     403}}}
     404
     405The result is an [http://www.xmlrpc.com/spec XML-RPC] struct with at least the following members:
     406
     407{{{
     408{
     409  struct code = {
     410       int geni_code;
     411       [optional: string am_type;]
     412       [optional: int am_code;]
     413         }
     414  boolean value;
     415  string output;
     416}
     417}}}
     418
     419This operation is similar to ProtoGENI's [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#Shutdown Shutdown] operation. The [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] specification does not include this operation.
     420
     421
     422==== Arguments Summary ====
     423 * {{{slice_urn}}}: The URN of the slice for which all resources will be halted.
     424
     425 *  {{{credentials[]}}}: [wiki:SW_AMAPIV2_Take2_Details#credentialsArgument An array of credentials granting the caller privileges to perform this operation].
     426
     427 * {{{options}}}: [wiki:SW_AMAPIV2_Take2_Details#Options An empty struct with particular semantics described on the Details page].  Aggregates should [wiki:SW_AMAPIV2_Take2_Details#DocumentingAggregateAdditions document new options arguments].
     428
     429==== Return Summary ====
     430
     431As with all AM API methods, the return is an XML-RPC struct. The {{{value}} return is a boolean indicating whether the resources associated with this reservation were successfully shut down to a state suitable for forensics.
     432
     433For details on Shutdown arguments, returns, and semantics, see [wiki:DRAFT_GAPI_AM_API_V2_DETAILS#ShutdownDetails the V2 details wiki].