Changes between Initial Version and Version 1 of GAPI_AM_API_DRAFT/Archive


Ignore:
Timestamp:
04/27/12 10:29:49 (12 years ago)
Author:
Aaron Helsinger
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GAPI_AM_API_DRAFT/Archive

    v1 v1  
     1[[PageOutline]]
     2
     3= GENI Aggregate Manager API Archived Proposed Revisions =
     4
     5This page documents archived older DRAFT revisions to the GENI Aggregate Manager API, previously proposed for the API, but then withdrawn, superseded, or postponed.
     6
     7The current officially adopted version of the API is '''2''' and is documented on [wiki:GAPI_AM_API the main API page].
     8
     9Current proposals for the next version of the AM API are on the [GAPI_AM_API_DRAFT AM API Draft wiki page].
     10
     11Proposals on this page:
     12 - [#ChangeSetC:UpdateSlivers Change Set C]: ''On hold'' (waiting for a revised proposal). Add the ability to !UpdateSlivers to immediately modify your reservation
     13 - [#ChangeSetE:Tickets Change Set E: Tickets]: ''On hold'' (waiting for a revised proposal). Add methods using tickets to do negotiated reservations
     14 - [#ChangeSetF1:DefineSliverStates Change Set F1]: ''Superseded'' by F3 and F4: Define sliver states, and the state changes that various methods cause
     15 - [#ChangeSetF2:ActOnSlivers Change Set F2]: ''Superseded'' by F3 and F4: Add a new general !ActOnSlivers method allowing AMs to support AM and resource-type specific operations
     16 - [#ChangeSetH Change Set H]: ''Superseded by F3'': Clarify: A second call to !CreateSlivers without an intervening !DeleteSlivers is an error.
     17 - [#ChangeSetI4 Change Set I4]: ''Superseded by F3 and F4'': !CreateSlivers optionally does not start resources.
     18 - ''Withdrawn'': [#Withdrawn:ChangeSetJ Change Set J]: Support proxy aggregates with 1 new option and 1 new !GetVersion entry
     19 - ''Postponed'': [#ChangeSetL:ChangeSFAcredentialsprivileges Change Set L]: Standardize slice credential privileges
     20
     21
     22-----
     23
     24= Change Set C: !UpdateSlivers =
     25Add an ability for experimenters to modify their allocated resources at an aggregate without deleting (and possibly losing) existing resource allocations.
     26
     27This change was briefly discussed at GEC13, and is a topic for ongoing discussion.
     28
     29== Motivation ==
     30A common complaint among experimenters about the current AM API is that there is no way to add or remove resources from a slice at an aggregate, without completely deleting the slice at that aggregate and recreating it, possibly losing resources to another experimenter and certainly losing state. This proposal aims to address that, by introducing a method to update the slice at an aggregate.
     31
     32The  [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] calls for an !UpdateSlice method, "to request that additional resources—as specified in the RSpec—be allocated to the slice".
     33
     34In the !PlanetLab implementation of the SFA, !UpdateSliver is in fact a synonym for !CreateSliver - the server will ensure that your allocated resources match your request RSpec, adding, removing and modifying resources as needed. It immediately allocates and boots nodes to match the request RSpec.
     35
     36The ProtoGENI CMV2 API has [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2#UpdateSliver UpdateSliver], which is described as the way to "Request a change of resuorces for an existing sliver. The new set of resources that are desired are specified in the rspec." At ProtoGENI as at !PlanetLab, this method takes the full RSpec description of resources the experimenter wants, and the server computes the difference with what the experimenter already has. At ProtoGENI though, this method returns a ticket. The experimenter must then redeem the ticket to actually acquire the resources.
     37
     38This topic was discussed at the [http://groups.geni.net/geni/wiki/GEC12GeniAmAPI GEC12 AM API session] and on the GENI dev mailing list (in [http://lists.geni.net/pipermail/dev/2011-October/000433.html October] and [http://lists.geni.net/pipermail/dev/2011-November/000531.html November]).
     39
     40This topic was also discussed on the geni-dev mailing list here: http://lists.geni.net/pipermail/dev/2012-March/000588.html and here: http://lists.geni.net/pipermail/dev/2012-March/000643.html and elsewhere in March 2012.
     41
     42A competing related proposal from Gary Wong is here: http://www.protogeni.net/trac/protogeni/wiki/AM_API_proposals
     43
     44A further revised proposal is expected from Jon Duerig.
     45
     46== !UpdateSlivers ==
     47This change would add a new method !UpdateSlivers, which takes a full request RSpec of the desired final state of the slice at this aggregate. This proposal calls for adding this functionality in the context of tickets: the !UpdateSlivers method returns a ticket. See [#ChangeSetE:Tickets Change Set E: Tickets] for details.
     48
     49Some points about this change:
     50 - The method takes a full request RSpec - not a diff.
     51  - Note that we want the manifest to be readily modifiable to be a request (include component_ids and sliver_ids), but it is not yet.
     52  - AMs may, as always, return {{{UNSUPPORTED}}} - EG if they are incapable of determining what changes to apply (computing a diff).
     53 - The request is either fully satisfied, or fails (returns an error code).
     54 - AMs must document the level of service they provide: will any state be lost on existing resources?
     55 - Options includes {{{geni_end_time}}}, a RFC3339 requested end time for the reservation. See below for details.
     56  - If omitted, the AM may reserve the resources for the default sliver duration.
     57  - AMs should follow the logic of !RenewSlivers to determine if the requested duration of the sliver is acceptable.
     58  - The request should Fail (return an error code) if the resources cannot be reserved until the requested time.
     59
     60Aggregates and experimenters should use an RSpec extension for specifying a guarantee on state loss per-resource:
     61EG:
     62{{{
     63  <node ... sliver_id="urn:publicid:IDN+jonlab.tbres.emulab.net+sliver+250">
     64    <sliver_type name="raw-pc"/>
     65...
     66    <preserve:preserve guarantee="persistent-state" />
     67  </node>
     68}}}
     69
     70This uses the RNC schema:
     71{{{
     72default namespace = "http://www.protogeni.net/resources/rspec/ext/preserve/1"
     73
     74# This is meant to extend a node or link
     75Preserved = element preserve {
     76  attribute guarantee { "none" | "persistent-state" |
     77                        "dynamic-state" | "no-disruption" }
     78}
     79
     80start = Preserved
     81}}}
     82
     83In the above schema, the states represent increasing levels of state preservation guarantee.
     84
     85{{{
     86struct UpdateSlivers(string slice_urn, string credentials[], string rspec,
     87                                                 struct options)
     88}}}
     89
     90Returns a struct:
     91{{{
     92{
     93  ticket: <string, the ticket>
     94  geni_status: <string, the sliver state - ticketed>,
     95 <others that are AM specific>
     96}
     97}}}
     98
     99See [#ChangeSetE:Tickets Change Set E: Tickets] for details on the ticket returned and ticket semantics.
     100
     101= Change Set E: Tickets =
     102AM APIv3 adds support for negotiated reservations or two-phase commit, by '''add'''ing methods that allow an experimenter to reserve resources for a slice without committing to using them, or forcing the AM to incur the cost of instantiating them.
     103
     104This change is actively under discussion. See for example http://lists.geni.net/pipermail/dev/2012-March/000616.html and http://lists.geni.net/pipermail/dev/2012-March/000648.html
     105
     106For an alternative proposal, see: http://www.protogeni.net/trac/protogeni/wiki/AM_API_proposals
     107
     108The later proposal for allocation states (below) supersedes this. See [wiki:GAPI_AM_API_DRAFT#ChangeSetF3:SliverAllocationStatesandmethods Change Set F3].
     109
     110== Motivation ==
     111This possible change was discussed at the [http://groups.geni.net/geni/wiki/GEC12GeniAmAPI GEC12 AM API session].
     112
     113The [http://svn.planet-lab.org/attachment/wiki/WikiStart/sfa.pdf SFA] defines the concept of a ticket. SFA1.0 section 5.3 says "A component signs an RSpec to produce a ticket, indicating a promise by the component to bind resources to the ticket-holder at some point in time." Tickets are promises to allocate resources.
     114
     115Tickets are used in the [http://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2 ProtoGENI CMV2 interface], and are discussed on  [http://www.protogeni.net/trac/protogeni/wiki/Tickets the PG wiki]. Tickets with a slightly different semantics (and leases) are also used extensively in Orca. For details on the use of leases and tickets in Orca, see [https://geni-orca.renci.org/trac/attachment/wiki/WikiStart/ORCA%20Book.pdf 'the Orca Book']. However, each of these uses of the notion of tickets differs.
     116
     117Tickets would potentially enable a number of useful and possibly critical features:
     118 - Coordinated or negotiated reservations: reserving resources from aggregate B only if aggregate A can give you a complementary resource. For example, a VLAN tag. This is related to stitching, both network stitching and the more general form.
     119 - Two phase commit reservations (similar to the above).
     120 - Scheduled reservations in the future.
     121 - Brokers: 3rd parties consolidating, scheduling and allocating resources on behalf of a number of other aggregates
     122 - Lending resources to other experimenters
     123 - Giving experimenters explicit control over when resources are started, stopped, and restarted (see the discussion on !UpdateSliver).
     124
     125== Tickets semantics ==
     126This proposal would add tickets to the existing AM API, allowing experimenters to reserve (hold) resources temporarily and cheaply. Tickets represent a promise to the named slice to allocate the specified resources, if the ticket is 'redeemed' while the ticket is still valid. Tickets describe a complete specification of the resources that will be allocated to the slice at this aggregate, if the ticket is redeemed.
     127
     128Some key properties of the tickets proposed here:
     129 - Tickets are IOUs from an AM to a slice (not to an experimenter - no delegation is necessary or possible).
     130 - Experimenters do not need to use tickets to reserve resources: existing methods without tickets still work.
     131 - A ticket is a promise by the AM to give the specified resources to the slice if an authorized slice member requests them.
     132  - The aggregate is saying they will not give away these resources to other slices, but only to this slice.
     133  - AMs must document how firm their promises are. See the attribute {{{geni_ticket_service_class}}}. 
     134   - Some aggregates may only offer soft promises, as in PlanetLab.
     135 - Tickets are signed by the AM: non repudiatable.
     136 - Tickets are bound to a slice: they contain the slice certificate.
     137 - Tickets may be passed from 1 researcher on a slice to another freely - no explicit delegation is required.
     138  - Indeed, any experimenter with appropriate slice credentials can retrieve the ticket from the aggregate.
     139  - Tickets may not be delegated to another slice or other entity; these tickets do not support brokers.
     140 - Tickets promise a particular set of resources: they include an RSpec. Note that this may be an unbound RSpec.
     141  - Note that we do not currently have unbound manifest RSpecs. For now we specify only that this is an RSpec.
     142 - Tickets are good for a limited time.
     143  - They must be redeemed by a specified time, {{{redeem_before}}}, after which the aggregate is free to assign the resources elsewhere.
     144   - Aggregates determine {{{redeem_before}}}, which is some epsilon in the near future.
     145   - Aggregates may accept a new option {{{geni_reserve_until}}} which is a request for a particular {{{redeem_before}}}, but are not required to support this (they may ignore the option).
     146  - Tickets specify when the resources will be available from ({{{starts}}}, typically essentially now), and when they will be available until (typically now plus the aggregate-local default sliver expiration time).
     147    - The resources may be available even longer, but that would require a separate !RenewSlivers call.
     148 - Tickets specify the full final state of the slice after applying this ticket.
     149  - Tickets are not incremental changes, and are not additive.
     150  - The implication is that there may be only 1 ticket outstanding for a slice per aggregate (except for scheduled reservations, see below).
     151  - This also implies that these tickets are not suitable for use by brokers.
     152 - Aggregates must attempt to honor their promises. As a result, aggregates must remember all outstanding tickets until they are redeemed or expire.
     153 - All ticket related timestamps must be in the format of RFC3339 (http://www.ietf.org/rfc/rfc3339.txt)
     154  - Full date and time with explicit timezone: offset from UTC or in UTC.
     155  - eg: {{{1985-04-12T23:20:50.52Z}}} or {{{1996-12-19T16:39:57-08:00}}}
     156
     157{{{
     158#!comment
     159
     160== Ticket contents ==
     161Tickets have an ID, the certificate of the slice to whom the resources are promised, an RSpec representing the promised resources, several timestamps, other attributes, and a signature by the aggregate (including the aggregate's certificate).
     162
     163Tickets are externally represented as signed XML documents following the [http://www.w3.org/TR/xmldsig-core/ XML Digital Signatures specification].
     164
     165Tickets contain:
     166 - {{{owner_gid}}} = the certificate of the experimenter who requested the ticket
     167 - {{{target_gid}}} = slice certificate
     168 - {{{uuid}}}
     169  - Unique ID for the ticket, in the hexadecimal digit string format given in [http://www.ietf.org/rfc/rfc4122.txt RFC 4122]
     170 - {{{expires}}} - RFC3339 compliant Date/Time when the resources will no longer be yours per this reservation (eg sliver duration+now)
     171 - {{{redeem_before}}}: RFC3339 compliant Date/Time when you must redeem this reservation, or your resources will be returned to the available pool (eg now+epsilon)
     172 - {{{starts}}} - RFC3339 compliant Date/Time when the resources will be yours, per this reservation (eg now)
     173 - RSpec (not specified as request or manifest)
     174 - Attributes (AM/resource-type specific name/value pairs)
     175  - Including {{{geni_ticket_service_class}}} as defined below, to indicate the firmness of the promise this ticket represents
     176 - signature including issuing AM's certificate
     177
     178More formally:
     179{{{
     180{
     181 owner_gid = <the certificate of the experimenter who requested the ticket>,
     182 target_gid = <slice certificate, following GENI AM API certificate specification>,
     183 uuid = <RFC 4122 compliant string>,
     184 expires = <RFC3339 compliant Date/Time when the resources will no longer be yours per this reservation (eg sliver duration+now)>,
     185 redeem_before = <RFC3339 compliant Date/Time when you must redeem this reservation, or your resources will be returned to the available pool (eg now+epsilon)>,
     186 starts = <RFC3339 compliant Date/Time when the resources will be yours, per this reservation (eg now)>,
     187 rspec = <RSpec (not specified as request or manifest)>,
     188 attributes = {
     189    geni_ticket_service_class = <string>,
     190    <others>
     191  },
     192  signature
     193}
     194}}}
     195
     196Tickets should include the {{{geni_ticket_service_class}}} attribute for advertising the firmness of the promise that a ticket represents (case insensitive string or integer).
     197 - FIXME: Provide definitions for these service classes.
     198 - 1=WEAK_EFFORT
     199 - 2=BEST_EFFORT
     200 - 3=ELASTIC_RESERVATION
     201 - 4=HARD_RESERVATION
     202
     203Tickets will follow a defined schema, to be published on geni.net.
     204
     205Tickets logically have a URN (not included in the ticket): {{{urn:publicid:IDN+<AM name>+ticket+<uuid>}}}
     206
     207For a similar structure in ProtoGENI, see https://www.protogeni.net/trac/protogeni/attachment/wiki/Authentication/credential.rnc
     208
     209== Methods ==
     210 1. !GetTicket
     211{{{
     212struct GetTicket (string slice_urn, string credentials[], string requestRSpec,
     213                           struct options)
     214}}}
     215 - Get a ticket promising resources requested in the rspec.
     216 - If there is already an outstanding ticket for the slice, an error is returned.
     217 - Return: ticket
     218 - Result State: {{{ticketed}}}
     219 - Options may include {{{geni_start_time}}} and {{{geni_end_time}}} (see below)
     220 2. !RedeemTicket
     221{{{
     222struct RedeemTicket(string slice_urn, string credentials[], string ticket,
     223                                 struct users[] (as in CreateSlivers), struct options)
     224}}}
     225 - Return:
     226{{{
     227{
     228 string rspec=<manifest>,
     229 string geni_start_time=<optional (may be omitted altogether): now if not specified>,
     230 string geni_expires=<RFC3339 sliver expiration>,
     231 string geni_status=<sliver state - allocated (or optionally changing or ready)>,
     232 <others that are AM specific>
     233}
     234}}}
     235 - Begin allocating the resources promised in the ticket.
     236 - Option {{{geni_auto_start}}}:
     237  - If supplied and true (boolean: 0 or 1 in XML-RPC), the aggregate automatically start/restarts resources as necessary, as though the experimenter called !ActOnSlivers(start).
     238   - State will be {{{changing}}} and then {{{ready}}}
     239  - If omitted the aggregate does not start resources (default behavior). The final state is {{{allocated}}}, and the experimenter must explicitly start or restart resources using !ActOnSlivers
     240  - Note that resources which do not require a 'start' may already be {{{ready}}} on normal return from !RedeemTicket.
     241 - Omitting the ticket causes the aggregate to redeem the outstanding ticket for this slice if any. If none, return an error code.
     242 - The ticket must be valid: not expired or previously redeemed or replaced. If so, an error is returned.
     243
     244 3. !ReleaseTicket
     245{{{
     246struct ReleaseTicket(string slice_urn, string credentials[], string ticket, struct options)
     247}}}
     248 - Give up the reservation for resources.
     249 - Return: true (1 in XMLRPC) or error
     250 - Omitting the ticket causes the aggregate to release the 0 or 1 outstanding tickets for this slice.
     251 - If this ticket was from !UpdateSlivers, then the sliver returns to the {{{allocated}}} state and existing resources are not modified.
     252
     253 4. !UpdateTicket
     254(atomic release/get)
     255{{{
     256struct UpdateTicket(string slice_urn, string credentials[], string requestRSpec,
     257                                string ticket, struct options)
     258}}}
     259 - For updating a reservation in place, replacing one ticket with a new one. On success, the old ticket is invalid.
     260 - Return: Ticket
     261 - Result State: {{{ticketed}}}
     262 - Options may include {{{geni_start_time}}} and {{{geni_end_time}}} (see below)
     263 - The ticket must be valid: not expired or previously redeemed or replaced. If so, an error is returned.
     264
     265 5. !UpdateSlivers
     266{{{
     267struct UpdateSlivers(string slice_urn, string credentials[], string requestRSpec,
     268                                                 struct options)
     269}}}
     270 - Returns a struct:
     271{{{
     272{
     273  string ticket=<ticket>
     274  string geni_status=<sliver state - ticketed>,
     275 <others that are AM specific>
     276}
     277}}}
     278 - Get a promise for resources that would replace currently allocated resources, as defined in [#ChangeSetC:UpdateSlivers Change Set C].
     279 - Result State: {{{ticketed}}}
     280 - On completion, the slice has both a ticket and a set of slivers at this aggregate. Overall it is both {{{allocated}}} and {{{ticketed}}}, which is called {{{ticketed}}}.
     281 - Options may include {{{geni_start_time}}} and {{{geni_end_time}}}, a RFC3339 requested start and end time for the reservation (option not required).
     282   - The request should Fail (return an error code) if the resources cannot be reserved from or until the requested time.
     283 - The method takes a full request RSpec - not a diff.
     284  - AMs may, as always, return {{{UNSUPPORTED}}} - EG if they are incapable of determining what changes to apply (computing a diff).
     285 - The request is either fully satisfied, or fails (returns an error code).
     286 - For further details on the !UpdateSlivers semantics, see [#ChangeSetC:UpdateSlivers Change Set C].
     287
     288For a similar set of functions in ProtoGENI, see: https://www.protogeni.net/trac/protogeni/wiki/ComponentManagerAPIV2
     289
     290== Other changes to support tickets ==
     291 - !CreateSlivers remains the first call: do not use it to add resources to the slice.
     292 - !ListResources return value changes to be:
     293{{{
     294{
     295   string rspec (ad or Manifest - may be empty though)
     296   string tickets[] (required but may be an empty list)
     297}
     298}}}
     299 - For !ListResources with no {{{slice_urn}}}, {{{tickets}}} shall be an empty list, and rspec shall be an ad RSpec.
     300 - For !ListResources with a {{{slice_urn}}}, {{{rspec}}} is the manifest RSpec for everything belonging to that slice at this AM, if anything is currently allocated (not just a ticket). {{{tickets}}} is then any outstanding ticket(s) for this slice.
     301
     302== Scheduling support using Tickets ==
     303This ticket structure and methods, with small additions, supports using tickets for scheduling. This proposal does not require support for scheduling at aggregates.
     304
     305 - We are not explicitly supporting scheduling, but the timestamps here should be sufficient.
     306 - !GetTicket, !CreateSlivers, !ListResources, !UpdateTicket, !UpdateSlivers all accept new RFC3339 compliant {{{geni_start_time}}} and {{{geni_end_time}}} options to support scheduling in the future.
     307  - For !GetTicket and !CreateSlivers, if left out then the reservation start is 'now or really soon' and the end is start plus the default sliver duration.
     308  - AMs that do not support scheduling return {{{UNSUPPORTED}}} when passed {{{geni_start_time}}}.
     309  - AMs should still support {{{geni_end_time}}}, following the logic of !RenewSlivers to determine if the requested duration of the sliver is acceptable.
     310   - IE at !CreateSlivers and !GetTicket and !UpdateSlivers in particular
     311   - The request should Fail (return an error code) if the resources cannot be reserved until the requested time.
     312 - {{{redeem_before}}} in tickets should be {{{starts}}}+epsilon. That epsilon is AM specific, but typically a small number of minutes.
     313 - Multiple tickets may be outstanding for a single slice at a single AM only for non overlapping time intervals.
     314  - IE you could request 2 tickets: 1 for machines 1-3 on Tuesday and simultaneously request 1 for machines 4-6 on Thursday.
     315 - These options are accepted in !ListResources as well.
     316  - Specifying {{{geni_start_time}}} means tell me what will be available at that time. Default is now.
     317  - Specifying both {{{geni_end_time}}} and {{{geni_start_time}}} means show me only things available for that entire duration.
     318
     319}}}
     320
     321-----
     322
     323= Change Set F: Support AM and resource-type specific methods. =
     324Define the control API (the AM API) as about moving slivers through various states at an AM.
     325
     326The proposal here elicited concerns (the method !ActOnSlivers is an ioctl, and the states mix allocation and operational states).
     327
     328A later alternative proposal, see http://lists.geni.net/pipermail/dev/2012-March/000721.html
     329
     330At the GEC13 coding sprint, a variant on the above was approved. It is documented as [wiki:GAPI_AM_API_DRAFT#ChangeSetF3:SliverAllocationStatesandmethods Change Set F3].
     331
     332A variant on the operational states proposal is defined as Change Set F4 and documented here: https://openflow.stanford.edu/display/FOAM/GENI+-+PerformOperationalAction
     333
     334== Motivation ==
     335AM API methods logically change the state of the slivers at this AM. But the API is not clear what experimenters should expect, and does not provide easy ways for experimenters to control when and how states change. There is in particular no way to move slivers through states and change them in ways otherwise undefined by the API.
     336
     337
     338== Change Set F1: Define Sliver States ==
     339'''This change is superseded by Change Sets F3 and F4.'''
     340
     341Currently the AM API defines several possible states as valid returns in !SliversStatus: {{{configuring}}}, {{{ready}}}, {{{unknown}}}, and {{{failed}}}. This change changes and expands that list of valid states, and explicitly defines the expected states after each AM API method call. Additionally, this change provides a mechanism for aggregates to supply their own states.
     342
     343The GENI AM API can be thought of as manipulating slivers. As such, each method potentially changes the state of 1 or more slivers. With the changes proposed here, several of the methods return a new {{{geni_status}}} field, whose value is one of the standard GENI sliver status values. Aggregates must use one of the standard GENI values for that return.
     344
     345== Change Set F2: !ActOnSlivers ==
     346'''This change is superseded by Change Sets F3 and F4.'''
     347
     348This change introduces a new method, providing a generic way to act on slivers in an AM or resource type specific way. This method shall be used to 'start' or 'stop' or 'restart' resources that have been allocated but not started by !CreateSlivers or !RedeemTicket. It may also be used to change the state of slivers (or their contained resources) in an aggregate or resource specific way. Some aggregates may use this method to change configuration details of allocated resources. This might include changing acceptable login keys.
     349
     350= Changes to existing methods =
     351Modify a few existing methods to make certain operations easier or more experimenter friendly.
     352
     353== Change Sets H&I: Misc other method changes ==
     354
     355=== Change Set H ===
     356A second call to !CreateSlivers without an intervening !DeleteSlivers is an error.
     357 - This change just clarifies expected behavior that was left under-specified in AM API v1.
     358 - !CreateSlivers takes a full Ad RSpec, it is not a way to 'add' resources.
     359 - Silently replacing the existing slivers with new slivers (similar to a call to !UpdateSlivers) is not acceptable.
     360
     361=== Change Set I4 ===
     362!CreateSlivers optionally does not start resources.
     363
     364Currently, !CreateSlivers auto starts resources, moving them from {{{allocated}}} through {{{changing}}} to {{{ready}}}.
     365 - Add a new option {{{geni_donotstart}}}:
     366  - If supplied and true (boolean: 0 or 1 in XML-RPC), final state is {{{allocated}}}, and experimenter must explicitly start resources using !ActOnSlivers.
     367  - If omitted or false ({{{0}}}) (default), AM automatically starts resources as before, and state will be {{{changing}}} and then {{{ready}}}.
     368
     369== Withdrawn: Change Set J ==
     370'''This change set has been withdrawn.'''
     371
     372= Change Set L: Change SFA credentials' privileges =
     373'''This proposal has not been fully discussed and is likely to be postponed.'''
     374
     375Our goal is to simplify and standardize privilege strings used in SFA credentials. Currently there are wildcards, bind, embed, and others. They are confusing. We also want extensibility to use these credentials elsewhere in future.
     376
     377Credentials should support these kinds of operations:
     378 - Learn about the slice
     379 - Add/Modify/Delete resources in the slice
     380 - Read slice details like I&M?
     381 - Use the slice
     382 - Operator shutdown
     383
     384Proposal - Replace all existing privileges with only the following possible strings (case insensitive):
     385 - {{{CanWrite}}}
     386  - If present in a valid slice credential, aggregates may permit !CreateSlivers, !RenewSlivers, !DeleteSlivers, Shutdown, plus new methods !ActOnSlivers, !UpdateSlivers, !GetTicket, !RedeemTicket, !UpdateTicket, !ReleaseTicket
     387  - Thus it replaces {{{bind}}}, {{{embed}}}, {{{control}}}, {{{instantiate}}}, {{{sa}}}, {{{pi}}}, or {{{*}}} in various places
     388 - {{{CanRead}}}
     389  - If present in a valid slice credential, aggregates may permit !ListResources with a {{{slice_urn}}}, !SliversStatus
     390  - Thus it replaces {{{info}}} or {{{*}}} in various places
     391 - {{{CanReadDetails}}}
     392 - {{{CanUse}}}
     393
     394Note that those last 2 may never get used, but are there in case I&M or opt-in make those useful.
     395
     396Note also that operators who wish to shut down a slice would need a slice credential with the {{{CanWrite}}} privilege.
     397
     398Privilege and credential semantics are defined as follows:
     399 - Aggregates may only grant access using current SFA credentials to a method if at least one such valid credential:
     400  - grants the required privilege or privileges (if any)
     401  - to the caller of the API method
     402   - (identified by their SSL client certificate and the {{{owner_gid}}} in the credential)
     403  - over the slice (if any) on which they are operating
     404   - ({{{target_gid}}} in the credential).
     405 - Other privileges may be present in the same or other credentials, and other non-SFA credentials may be used to authorize actions (per [wiki:GAPI_AM_API_DRAFT#ChangeSetG:Credentialsaregeneralauthorizationtokens. Change Set G]).
     406 - Local aggregate policy may grant or deny access to a particular method regardless of the presence of a valid credential granting the required privilege. This depends in part on federation policy governing aggregates.
     407 - Some operations (e.g. !GetVersion) may either simply require a valid credential with no particular privilege, or have no {{{credentials}}} argument at all.
     408
     409Note also that some current AMs do not require any particular privileges to do !ListResources, even with a {{{slice_urn}}}. This change suggests that aggregates require a valid slice credential with {{{CanRead}}} privileges to authorize this operation using current slice credentials.