summaryrefslogtreecommitdiffstats
path: root/requirements/resource_management/07-schemas.rst
blob: 3887cc79a77f68932a9336094aa71e5a6e1fa629 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
Promise YANG Schemas based on StormForge
----------------------------------------

Promise Schema
^^^^^^^^^^^^^^

.. code::

  module opnfv-promise {
    namespace "urn:opnfv:vim:promise";
    prefix prom;

    import opnfv-promise-models { prefix opm; }
    import complex-types { prefix ct; }

    description
      "OPNFV Promise Resource Reservation/Allocation controller module";

    revision 2015-04-16 {
      description
        "Initial revision.";
    }

    // MAIN CONTAINER

    container promise {
      ct:instance-list reservations {
        description
          "Aggregate collection of all registered ResourceReservation
           instances";
        ct:instance-type opm:ResourceReservation;
      }
    }

    rpc list-reservations;
    rpc create-reservation;
    rpc cancel-reservation;

    notification reservation-event;
    notification capacity-event;
    notification allocation-event;
  }

OPNFV Promise YANG Schema
^^^^^^^^^^^^^^^^^^^^^^^^^

.. code::

  module opnfv-promise-models {
    prefix opm;

    import storm-common-models { prefix scm; }
    import complex-types { prefix ct; }

    feature resource-reservation;

    ct:complex-type ResourceReservation {
      ct:extends scm: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 ct:date-and-time; }
      leaf end   { type ct: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 scm:AvailabilityZone; }
      }
      container capacity {
        uses scm:compute-capacity;
        uses scm:networking-capcity;
        uses scm: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 scm: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 scm: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 scm:compute-capacity;
        uses scm:networking-capcity;
        uses scm: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 scm: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 scm:ResourceElement;
      }

      leaf priority {
        description
          "Reflects current priority level of the allocation according to
           classification rules";
        type number;
        config false;
      }
    }
  }

.. -*