d662f1e45c13eb4bef5fb5efc80e1d86111dbd80
[osm/vim-emu.git] / src / emuvim / api / sonata / README.md
1 # SONATA dummy gatekeeper API:
2
3 ## Requirements
4
5 * uuid
6 * hashlib
7 * zipfile
8 * yaml
9 * docker-py
10 * flask
11 * flask_restful
12
13 ## Run REST API in standalone mode (without emulator):
14 * `python src/emuvim/api/sonata/dummygatekeeper.py`
15
16 ## Run emulator example with active SONATA dummy gatekeeper:
17 The example starts a small network with two data centers.
18
19 * `sudo python src/emuvim/examples/sonata_y1_demo_topology_1.py`
20
21 ## Upload a package (*.son) file:
22
23 To upload the file `sonata-demo-docker.son` (can be found in `son-emu/misc/`) do:
24
25 * `curl -i -X POST -F package=@sonata-demo-docker.son http://127.0.0.1:5000/packages`
26
27 To list all uploaded packages do:
28
29 * `curl http://127.0.0.1:5000/packages`
30
31 To instantiate (start) a service do:
32
33 * Specific service: `curl -X POST http://127.0.0.1:5000/instantiations -d "{\"service_uuid\":\"59446b64-f941-40a8-b511-effb0512c21b\"}"`
34 * Last uploaded service (makes manual tests easier): `curl -X POST http://127.0.0.1:5000/instantiations -d "{}"`
35
36 To list all running services do:
37
38 * `curl http://127.0.0.1:5000/instantiations`
39
40 ## VNF Requirements
41
42 A VNF container that is used with the dummy gatekeeper should specify a emulator specific entrypoint script in its Dockerfile:
43
44 * `ENV SON_EMU_CMD ./start.sh`
45
46 This script is called by the dummy gatekeeper after a VNF was started and the chaining was done. The script can then be used to trigger the execution of individual VNF software.
47
48 ATTENTION: The specified script must not block!
49
50 ## API definition
51
52 This page describes the dummy gatekeeper API. This gatekeeper fakes the original platform gatekeeper during development SDK tools like son-push. 
53
54 It is also able to deploy our example service package (not any arbitrary service package!) in the emulator for the Y1 demo.
55
56 _Note: This API should converge to the API of the original GK as much as possible!_
57
58 ## REST API:
59 <table>
60 <tr>
61 <th>Endpoint:</th>
62 <th>Method:</th>
63 <th>Header:</th>
64 <th>Body:</th>
65 <th>Response:</th>
66 </tr>
67 <tr>
68 <td>/packages</td>
69 <td>POST</td>
70 <td>-</td>
71 <td>{file-content} as "content-type": "multipart/form-data"</td>
72 <td>{"service_uuid": "c880aaab-f3b9-43ac-ac6b-3d27b46146b7", size=456, sha1=49ee6468dfa4ecbad440d669b249d523a38651be, error: null}</td>
73 </tr>
74 <tr>
75 <td>/packages</td>
76 <td>GET</td>
77 <td>-</td>
78 <td></td>
79 <td>{service_uuid_list: ["c880aaab-f3b9-43ac-ac6b-3d27b46146b7", "c880aaab-f3b9-43ac-ac6b-3d27b46146b8", "c880aaab-f3b9-43ac-ac6b-3d27b46146b9"]}</td>
80 </tr>
81 <tr>
82 <td>/instantiations</td>
83 <td>POST</td>
84 <td>-</td>
85 <td>{service_uuid: "c880aaab-f3b9-43ac-ac6b-3d27b46146b7"}</td>
86 <td>{service_instance_uuid: "de4567-f3b9-43ac-ac6b-3d27b461123"}</td>
87 </tr>
88 <tr>
89 <td>/instantiations</td>
90 <td>GET</td>
91 <td>-</td>
92 <td></td>
93 <td>
94 {
95     "service_instance_list": [
96         [
97             "9da044b3-1f7a-40e6-a9b3-9e83a9834249", 
98             "9371df14-a595-436a-92b5-fc243b74a9d7"
99         ]
100     ]
101 }
102 </td>
103 </tr>
104 </table>
105
106
107
108
109
110 ## Cleanup
111 The dummy GK will store some files in your tmp folder in order to fake "catalogues" and "repositories" etc.
112
113 * ` sudo rm -r /tmp/son-dummy-gk/`