aboutsummaryrefslogtreecommitdiffstats
path: root/laas_api_documentation.yaml
blob: d8f61861346c72b5c6d8cbad367cf62a9c898118 (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
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
swagger: '2.0'
info:
  description: |-
    Details for all endpoints for LaaS automation API. This serves to allow users
    to create bookings outside of the web UI hosted at labs.lfnetworking.org. 
    All included setup is referencing the development server hosted while in 
    beta testing for the API. 
  version: 1.0.0
  title: LaaS Automation API
  termsOfService: 'http://labs.lfnetworking.org'
  contact:
    email: opnfv@iol.unh.edu
  license:
    name: MIT License
host: 10.10.30.55
basePath: /api
tags:
  - name: Bookings
    description: View and edit existing bookings
  - name: Resource Inventory
    description: Examine and manage resources in a lab
  - name: Users
    description: All actions for referencing 
schemes:
  - http
security:
  - AutomationAPI: []
paths:
  /booking:
    get:
      tags:
        - Bookings
      summary: Get all bookings belonging to user
      description: Get all bookings belonging to the user authenticated by API key.
      operationId: retrieveBookings
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Booking'
        '401':
          description: Unauthorized API key
  /booking/makeBooking:
    put:
      tags:
        - Bookings
      summary: Make booking by specifying information
      description: Exposes same functionality as quick booking form from dashboard
      operationId: makeBooking
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: booking
          description: the booking to create
          schema:
            $ref: '#/definitions/MakeBookingTemplate'
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Booking'
        '400':
          description: Error in booking info
        '401':
          description: Unauthorized API key
  '/booking/{bookingID}':
    get:
      tags:
        - Bookings
      summary: See all info for specific booking
      description: ''
      operationId: specificBooking
      parameters:
        - in: path
          name: bookingID
          required: true
          type: integer
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Booking'
        '404':
          description: Booking does not exist
        '401':
          description: Unauthorized API key
    delete:
      tags:
        - Bookings
      summary: Cancel booking
      description: ''
      operationId: cancelBooking
      parameters:
        - in: path
          name: bookingID
          required: true
          type: integer
      produces:
        - application/json
      responses:
        '200':
          description: successfully canceled booking
        '404':
          description: Booking does not exist
        '400':
          description: Cannnot cancel booking
        '401':
          description: Unauthorized API key
  '/booking/{bookingID}/details':
    get:
      tags:
        - Bookings
      summary: Get booking details
      description: ''
      operationID: bookingDetails
      parameters:
        - in: path
          name: bookingID
          required: true
          type: integer
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Booking'
        '404':
          description: Booking does not exist
        '401':
          description: Unauthorized API key
  '/booking/{bookingID}/extendBooking/{days}':
    post:
      tags:
        - Bookings
      summary: Extend end date of booking
      description: ''
      operationId: extendBooking
      parameters:
        - in: path
          name: bookingID
          required: true
          type: integer
        - in: path
          name: days
          required: true
          type: integer
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Booking'
        '404':
          description: Booking to extend does not exist
        '400':
          description: Cannot extend Booking
        '401':
          description: Unauthorized API key
  '/resource_inventory/{templateLabID}/images':
    get:
      tags:
        - Resource Inventory
      summary: See valid images for a resource template
      description: ''
      operationId: viewImages
      parameters:
        - in: path
          name: templateLabID
          required: true
          type: integer
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/Image'
        '404':
          description: Resource Template does not exist
        '401':
          description: Unauthorized API key
  /resource_inventory/availableTemplates:
    get:
      tags:
        - Resource Inventory
      summary: All Resource Templates currently available
      description: ''
      operationId: listTemplates
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            $ref: '#/definitions/ResourceTemplate'
        '401':
          description: Unauthorized API key
  /users:
    get:
      tags:
        - Users
      summary: See all public users that can be added to a booking
      description: ''
      operationId: getUsers
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/UserProfile'
        '401':
          description: Unauthorized API key
  /labs:
    get:
      tags:
        - Lab
      summary: List all labs and some of their info
      description: ''
      operationId: listLabs
      produces:
        - application/json
      responses:
        '200':
          description: successful operation
          schema:
            type: array
            items:
              $ref: '#/definitions/Lab'
        '401':
          description: Unauthorized API Key
  /labs/{labID}/users:
    get:
      tags:
        - Lab
      summary: Get all users that are visible to a lab for operational purposes
      description: ''
      operationId: labUsers
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: path
          name: labID
          required: true
          type: string
      responses:
        '200':
          description: successful
          schema: array
          items:
            $ref: '#/definitions/UserProfile'
        '400':
          description: invalid lab id
securityDefinitions:
  AutomationAPI:
    type: apiKey
    in: header
    name: auth-token
definitions:
  Lab:
    type: object
    required:
      - id
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
  MakeBookingTemplate:
    type: object
    required:
      - templateID
      - purpose
      - project
      - collaborators
      - hostname
      - length
      - imageLabID
    properties:
      templateID:
        type: integer
      purpose:
        type: string
      project:
        type: string
      collaborators:
        type: array
        items:
          type: string
          description: username of the referred user
      hostname:
        type: string
      length:
        type: integer
        description: length of the booking in days (max 21, min 1)
      imageLabID:
        type: integer
  Booking:
    type: object
    required:
      - id
      - owner
      - collaborators
      - start
      - end
      - lab
      - purpose
      - project
      - resourceBundle
    properties:
      id:
        type: integer
        format: int64
      owner:
        type: string
      collaborators:
        type: array
        items:
          $ref: '#/definitions/UserProfile'
      start:
        type: string
        format: date-time
      end:
        type: string
        format: date-time
      lab:
        $ref: '#/definitions/Lab'
      purpose:
        type: string
      resourceBundle:
        $ref: '#/definitions/ResourceBundle'
      project:
        type: string
  Image:
    type: object
    required:
      - labID
      - resources
    properties:
      labID:
        type: integer
        format: int64
      name:
        type: string
  ResourceBundle:
    type: object
    required:
      - id
      - resources
    properties:
      id:
        type: integer
        format: int64
      resources:
        type: array
        items:
          $ref: '#/definitions/Server'
  ResourceProfile:
    type: object
    required:
      - id
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
  UserProfile:
    type: object
    required:
      - id
      - name
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
  ResourceTemplate:
    type: object
    required:
      - id
      - name
      - resourceProfiles
    properties:
      id:
        type: integer
        format: int64
      name:
        type: string
      resourceProfiles:
        type: array
        items:
          $ref: '#/definitions/ResourceProfile'
  Server:
    type: object
    required:
      - id
      - labid
      - profile
    properties:
      id:
        type: integer
        format: int64
      profile:
        $ref: '#/definitions/ResourceProfile'
      labid:
        type: string