ANNEX A: PROMISE YANG SCHEMA BASED ON YANGFORGE =============================================== .. code:: module opnfv-promise { namespace "urn:opnfv:promise"; prefix promise; import complex-types { prefix ct; } import iana-crypt-hash { prefix ianach; } import ietf-inet-types { prefix inet; } import ietf-yang-types { prefix yang; } import opnfv-promise-vim { prefix vim; } feature multi-provider { description ""; } description "OPNFV Promise Resource Reservation/Allocation controller module"; revision 2015-04-16 { description "Initial revision."; } revision 2015-08-06 { description "Updated to incorporate YangForge framework"; } grouping resource-capacity { container capacity { container quota { description 'Conceptual container that should be extended'; } container usage { description 'Conceptual container that should be extended'; config false; } container reserved { description 'Conceptual container that should be extended'; config false; } container available { description 'Conceptual container that should be extended'; config false; } } } grouping compute-capacity { leaf cores { type number; } leaf ram { type number; } leaf instances { type number; } } grouping networking-capacity { leaf network { type number; } leaf port { type number; } leaf router { type number; } leaf subnet { type number; } leaf address { type number; } } ct:complex-type ResourceReservation { ct:extends vim:ResourceElement; description "Contains the capacities of various resource services being reserved along with any resource elements needed to be available at the time of allocation(s)."; reference "OPNFV-PROMISE, Section 3.4.1"; leaf start { type yang:date-and-time; } leaf end { type yang:date-and-time; } leaf expiry { description "Duration in seconds from start when unallocated reserved resources will be released back into the pool"; type number; units "seconds"; } leaf zone { type instance-identifier { ct:instance-type vim:AvailabilityZone; } } container capacity { uses vim:compute-capacity; uses vim:networking-capcity; uses vim:storage-capacity; } leaf-list resources { description "Reference to a collection of existing resource elements required by this reservation. It can contain any instance derived from ResourceElement, such as ServerInstances or even other ResourceReservations. If the ResourceReservation request is accepted, the ResourceElement(s) listed here will be placed into 'protected' mode as to prevent accidental delete."; type instance-identifier { ct:instance-type vim:ResourceElement; } // following 'must' statement applies to each element must "boolean(/provider/elements/*[@id=id])" { error-message "One or more of the ResourceElement(s) does not exist in the provider to be reserved"; } } leaf provider { if-feature multi-provider; config false; description "Reference to a specified existing provider from which this reservation will be drawn if used in the context of multi-provider environment."; type instance-identifier { ct:instance-type vim:ResourceProvider; require-instance true; } } container remaining { config false; description "Provides visibility into total remaining capacity for this reservation based on allocations that took effect utilizing this reservation ID as a reference."; uses vim:compute-capacity; uses vim:networking-capcity; uses vim:storage-capacity; } leaf-list allocations { config false; description "Reference to a collection of consumed allocations referencing this reservation."; type instance-identifier { ct:instance-type ResourceAllocation; } } } ct:complex-type ResourceAllocation { ct:extends vim:ResourceElement; description "Contains a list of resources to be allocated with optional reference to an existing reservation. If reservation is specified but this request is received prior to reservation start timestamp, then it will be rejected unless 'allocate-on-start' is set to true. 'allocate-on-start' allows the allocation to be auto-initiated and scheduled to run in the future. The 'priority' state indicates the classification for dealing with resource starvation scenarios. Lower priority allocations will be forcefully terminated to allow for higher priority allocations to be fulfilled. Allocations without reference to an existing reservation will receive the lowest priority."; reference "OPNFV-PROMISE, Section 3.4.3"; leaf reservation { description "Reference to an existing reservation identifier"; type instance-identifier { ct:instance-type ResourceReservation; require-instance true; } } leaf allocate-on-start { description "If 'allocate-on-start' is set to true, the 'planned' allocations will take effect automatically at the reservation 'start' date/time."; type boolean; default false; } ct:instance-list resources { description "Contains list of new ResourceElements that will be allocated"; ct:instance-type vim:ResourceElement; } leaf priority { description "Reflects current priority level of the allocation according to classification rules"; type number; config false; } } // MAIN CONTAINER container promise { ct:instance-list providers { description "Aggregate collection of all registered ResourceProvider instances"; ct:instance-type vim:ResourceProvider; config false; // augment compute container with capacity elements augment "compute" { uses resource-capacity { augment "capacity/quota" { uses compute-capacity; } augment "capacity/usage" { uses compute-capacity; } augment "capacity/reserved" { uses compute-capacity; } augment "capacity/available" { uses compute-capacity; } } } // augment networking container with capacity elements augment "networking" { uses resource-capacity { if-feature has-networking-capacity; augment "capacity/quota" { uses networking-capacity; } augment "capacity/usage" { uses networking-capacity; } augment "capacity/reserved" { uses networking-capacity; } augment "capacity/available" { uses networking-capacity; } } } // track references to reservations for this resource provider leaf-list reservations { type instance-identifier { ct:instance-type ResourceReservation; } } } ct:instance-list reservations { description "Aggregate collection of all registered ResourceReservation instances"; ct:instance-type ResourceReservation; } ct:instance-list allocations { description "Aggregate collection of all active ResourceAllocation instances"; ct:instance-type ResourceAllocation; } } rpc add-provider { description "This operation allows you to register a new ResourceProvider into promise management service"; input { leaf provider { description "Select a specific resource provider"; mandatory true; type enumeration { enum openstack; enum hp; enum rackspace; enum amazon { status planned; } enum joyent { status planned; } enum azure { status planned; } } } leaf username { type string; mandatory true; } leaf password { type ianach:crypt-hash; mandatory true; } leaf endpoint { type inet:uri; description "The target URL endpoint for the resource provider"; mandatory true; } leaf region { type string; description "Optional specified regsion for the provider"; } } output { leaf id { description "Unique identifier for the newly added provider found in /promise/providers"; type instance-identifier { ct:instance-type ResourceProvider; } } leaf result { type enumeration { enum success; enum error; } } } } rpc remove-provider; rpc list-providers; rpc check-capacity; rpc list-reservations; rpc create-reservation; rpc update-reservation; rpc cancel-reservation; rpc list-allocations; rpc create-allocation; notification reservation-event; notification capacity-event; notification allocation-event; } .. only:: html Revision: 3d658697ff9718eed3ca2e68430b389b8a61ca7c Build date: |today|