Changes between Initial Version and Version 1 of GAPI_AM_API_DRAFT


Ignore:
Timestamp:
06/15/11 09:37:05 (13 years ago)
Author:
Aaron Helsinger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GAPI_AM_API_DRAFT

    v1 v1  
     1[[PageOutline]]
     2
     3= GENI Aggregate Manager API Draft Revisions =
     4
     5This page documents DRAFT revisions to the GENI Aggregate Manager API, proposed for the next version of the API.
     6
     7The 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.
     8
     9The current version of the API is 1 and documented on the main API page [wiki:GAPI_AM_API here].
     10
     11This page documents proposed changes for AM API version 2.
     12  * As of June 2011, the latest software from ProtoGENI and SFA (as of code tag 1.0-24) comply with these changes.
     13  * Omni version 1.3 (released June 2011) adds client software support for these changes.
     14
     15== Summary of Proposed Changes ==
     16 * Specify GENI RSpecs as complying with the ProtoGENI V2 RSpecs as documented [http://www.protogeni.net/trac/protogeni/wiki/RSpec here]
     17 * Include additional options in !GetResources and !ListResources to allow aggregates to support the PG RSpecs in addition to their own native format
     18
     19== Proposing Additional Changes ==
     20GENI community members are encouraged to propose changes to the GENI Aggregate Manager API.
     21
     22Technical discussions are generally held on the [mailto:dev@geni.net Developers mailing list]
     23
     24Specific questions may be directed to the software team at the GPO (Tom Mitchell, Aaron Helsinger, and Sarah Edwards) at {tmitchel, ahelsing, sedwards} at geni.net
     25
     26== Proposed Change Details ==
     27
     28=== ProtoGENI V2 RSpecs ===
     29At GEC10 [wiki:GEC10RSpec the GENI community agreed] that GENI RSpecs would be in the [http://www.protogeni.net/trac/protogeni/wiki/RSpec ProtoGENI V2 format]. Aggregates are free to use an alternate format internally, but must accept and produce compliant RSpecs on demand. Note that individual aggregates may use RSpec extensions to describe custom resources or properties of resources. For RSpec extension information, see the ProtoGENI [http://www.protogeni.net/trac/protogeni/wiki/RSpecExtensions2 wiki].
     30
     31For more information:
     32 * [http://www.protogeni.net/trac/protogeni/wiki/RSpec ProtoGENI V2 format]
     33 * [http://www.protogeni.net/trac/protogeni/wiki/RSpecExtensions2 RSpec extension information]
     34 * [http://www.protogeni.net/trac/protogeni/wiki/RSpecSchema2 RSpec schemas]
     35
     36Specific changes include:
     37 * !ListResources: Return value of !ListResources remains an [http://www.xmlrpc.com/spec XMLRPC] string, but its format and meaning are now proscribed.
     38
     39 The return value is an RSpec matching the [http://www.protogeni.net/trac/protogeni/wiki/RSpec ProtoGENI V2] advertisement RSpec [http://www.protogeni.net/resources/rspec/2/ad.xsd schema] in text format if {{{geni_compressed}}} is unspecified or set to {{{false}}}. The return value will be a ZLib compressed and then base 64 encoded string representation of the RSpec if {{{geni_compressed}}} is specified and set to {{{true}}}.
     40
     41 * !CreateSliver: rspec argument remains an [http://www.xmlrpc.com/spec XMLRPC] string, but its format and meaning are now proscribed.
     42
     43  `rspec`::
     44    An RSpec matching the [http://www.protogeni.net/trac/protogeni/wiki/RSpec ProtoGENI V2] advertisement RSpec [http://www.protogeni.net/resources/rspec/2/request.xsd schema] containing the resources that the caller is requesting for allocation to the slice specified in {{{slice_urn}}}. These are expected to be based on resources returned by a previous invocation of [wiki:GAPI_AM_API#ListResources ListResources].
     45
     46 * !CreateSliver: return value remains an [http://www.xmlrpc.com/spec XMLRPC] string, but its format and meaning are now proscribed.
     47
     48 The return value is an RSpec matching the [http://www.protogeni.net/trac/protogeni/wiki/RSpec ProtoGENI V2] manifest RSpec [http://www.protogeni.net/resources/rspec/2/manifest.xsd schema] indicating the resources that were allocated to the slice. The result RSpec may contain additional information about the allocated resources.
     49
     50=== New RSpec Version Options ===
     51In order to allow aggregates to support both a native RSpec format (e.g. the standard !PlanetLab / SFA RSpecs) as well as the GENI-standard format (ProtoGENI V2), we need new options to allow a client to request RSpecs in a particular format.
     52
     53Specifically, aggregates will advertise (in !GetVersion) the list of Advertisement and Request RSpec types they are willing to accept, as well as the default Advertisement RSpec type. And they will produce manifest RSpecs in a format matching the format of the !CreateSliver input request RSpec (e.g. return a ProtoGENI V2 manifest RSpec when given a ProtoGENI V2 request RSpec, and a native !PlanetLab manifest RSpec when given a !PlanetLab request RSpec).
     54
     55==== Contract details ====
     56
     57Aggregates advertise the {{{type}}} and {{{version}}} of RSpec formats that they support. If available, they specify the {{{schema}}}, {{{namespace}}} and {{{extensions}}} combination which is the authoritative definition of that format. Clients of the API should understand that combination in order to know how to understand the resources available at that aggregate.
     58
     59If an aggregate advertises a particular {{{type}}}/{{{version}}} (optionally defined with a combination of {{{schema}}}, {{{namespace}}} and {{{extensions}}}) in the {{{ad_rspec_versions}}} attribute of !GetVersion, then it promises to send a correct Advertisement RSpec in response to a !ListResources call which supplies an {{{rspec_version}}} option containing that {{{type}}}/{{{version}}}. ({{{rspec_version}}} is a {{{struct}}} with 2 members, {{{type}}} and {{{version}}}. {{{type}}} and {{{version}}} are ''case-sensitive'' strings, matching those in {{{ad_rspec_versions}}}).
     60
     61If an Aggregate advertises a particular {{{type}}}/{{{version}}} (optionally defined with a combination of {{{schema}}}, {{{namespace}}} and {{{extensions}}}) in the {{{request_rspec_versions}}} attribute of !GetVersion then it promises to correctly honor a !CreateSliver call containing a request RSpec in the given format, and then to return a Manifest RSpec in the corresponding format (ie a PGV2 request is answered with a PG V2 manifest).
     62
     63The !GetVersion attribute {{{default_ad_rspec}}} will be one of the values in the !GetVersion {{{ad_rspec_versions}}} array.
     64
     65==== New !GetVersion required attributes ====
     66
     67Return the version of the GENI Aggregate API and RSpecs supported by this aggregate.
     68
     69{{{
     70struct GetVersion()
     71}}}
     72
     73The result is an [http://www.xmlrpc.com/spec XMLRPC] struct with at least the following members:
     74
     75{{{
     76{
     77  int geni_api;
     78  array request_rspec_versions of {
     79    string type;
     80    string version;
     81    string schema;
     82    string namespace;
     83    array extensions of string;
     84  };
     85  array ad_rspec_versions of {
     86    string type;
     87    string version;
     88    string schema;
     89    string namespace;
     90    array extensions of string;
     91  };
     92  default_ad_rspec of {
     93    string type;
     94    string version;
     95  };
     96}
     97}}}
     98
     99 `geni_api`::
     100    An integer indicating the revision of the Aggregate Manager API that an aggregate supports. The current version of the API is 2 (two).
     101
     102 `request_rspec_versions`::
     103   An array of data structures indicating the RSpec types accepted by this AM in a request.
     104
     105 `ad_rspec_versions`::
     106   An array of data structures indicating what types of RSpec advertisements may be produced by this AM in !ListResources.
     107
     108 `default_ad_rspec`::
     109   A data structure indicating the default type of advertisement RSpec produced by this AM in !ListResources. Matches one of the values from {{{ad_rspec_versions}}}
     110
     111Elements used within {{{request_rspec_versions}}}, {{{ad_rspec_versions}}}, and {{{default_ad_rspec}}}:
     112 `type`, `version`::
     113   Two ''case-sensitive'' strings which together comprise the type of RSpec. The RSpec `type` should be one of "protogeni", "sfa", "orca", or "orbit" and `version` should be a type-specific version identifier as specified by the appropriate control framework.
     114
     115 `schema`::
     116   An optional URL pointing to a schema which can be used to verify the given type of RSpec.
     117
     118 `namespace`::
     119   An optional XML namespace which the RSpec of the given type belongs to.
     120
     121 `extensions`::
     122   An array of cluster-specific strings denoting which extensions are supported. In the case of ProtoGENI, these are XML namespaces which denote the extension as a whole.
     123
     124Implementations can add additional members to the struct as desired. The prefix {{{geni_}}} is reserved for members that are part of this API specification. Implementation should choose an appropriate prefix to avoid conflicts.
     125
     126This 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.
     127
     128==== New !ListResources Option ====
     129!ListResources will take an additional option, {{{rspec_version}}}, allowing a user to request an Advertisement Rspec in a particular format. This struct must contain a {{{type}}} and {{{version}}} matching one of this Aggregate's advertised {{{ad_rspec_versions}}}.
     130
     131Specifics:
     132
     133Return information about available resources or resources allocated to a slice.
     134
     135{{{
     136string ListResources(string credentials[], struct options)
     137}}}
     138
     139....
     140
     141 `options`::
     142    An [http://www.xmlrpc.com/spec XMLRPC] struct containing members indicating the set of resources the caller is interested in or the format of the result. In addition to the members specified below, callers can pass additional members that specific aggregate manager implementations might honor. The prefix {{{geni_}}} is reserved for members that are part of this API specification. Implementations should choose an appropriate prefix to avoid conflicts.
     143
     144The following members are available for use in the options parameter. All aggregate managers are required to implement these options.
     145
     146{{{
     147{
     148  boolean geni_available;
     149  boolean geni_compressed;
     150  string geni_slice_urn;
     151  struct rspec_version {
     152    string type;
     153    string version;
     154  };
     155}
     156}}}
     157
     158....
     159
     160 `rspec_version`::
     161    An [http://www.xmlrpc.com/spec XMLRPC] struct indicating the type and version of Advertisement RSpec to return. The struct contains 2 members, {{{type}}} and {{{version}}}. {{{type}}} and {{{version}}} are ''case-sensitive'' strings, matching those in {{{ad_rspec_versions}}} as returned by !GetVersion at this aggregate.
     162
     163    If this option is not included in the request, then the returned Ad RSpec will be of the type specified in {{{default_ad_rspec}}}.
     164
     165    If the aggregate cannot support the requested {{{type}}}/{{{version}}} (that pair is not listed in {{{ad_rspec_versions}}}), then the aggregate returns an Exception.
     166
     167==== New !CreateSliver behavior ====
     168If an Aggregate advertises a {{{type}}}/{{{version}}} pair in its {{{request_rspec_versions}}} as returned by !GetVersion, then it promises to correctly honor a !CreateSliver call containing a request RSpec in the given format, and then to return a Manifest RSpec in the corresponding format (ie a PGV2 request is answered with a PG V2 manifest).