update link to upper-constraints.txt
[multicloud/framework.git] / docs / specs / multicloud-SDC-Client-design.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2
3 ===============================================================
4 MultiCloud SDC Client Design for k8s and windRiver/Openstack
5 ===============================================================
6 To support  multicloud plugin access the concerned artifacts, do prepration
7 if necessnary, need registering the artifact management as a sdc client and
8 use shared folder method so that enable user to freely access the artifacts.
9 by configuring such client, user could decide what artifact needs download,
10 what's the actions to do for the downloaded artifact etc.
11
12 after OOM deploy such artifact management, the plugins could access all the
13 downloaded artifacts by shared folder method if necessary.
14
15 Problems Statement
16 ==================
17 the SDC artifacts is part of CSAR, which is downloaded by SDC client.
18 Currently in Casablanca release, some components: SO, Policy, AAI
19 register as a SDC client, could download the concerned artifacts based
20 on the Notification from SDC
21
22 There are two things need support in Dublin release in MultiCloud side:
23 1. support k8s. download k8s related artifacts from SDC, and do specified
24 postprocessing during design-time, artifacts could be used/got during
25 instantiation time
26
27 2. support WindRiver/OpenStack plugin to download HEAT/HEAT_ENV related
28 artifacts from SDC and change the currently API interface between SO and
29 MutliCloud to transfer the indication of these artifacts instead of  the
30 whole content of HEAT/HEAT_ENV. then MutliCloud use the indications from SO,
31 to find the downloaded artifacts during instantiation time
32
33
34 Proposed framework
35 =========================================================
36
37
38 SDC Reception Handler<----> Reception Handler<-->Artifact Management<---->Plugin Handler<---->multicloudPost
39 refer to `SDC Service Architecture
40 <https://wiki.onap.org/display/DW/Policy+Platform+-+SDC+Service+Distribution+Software+Architecture>`_
41
42 Proposed alternative Solutions
43 ==========================================================
44 There would be a artifact management comopnent, which will do below steps once get the
45 notification from SDC during design time.
46
47 1.mandatory step to download concerned artifacts from SDC directly store
48 it locally by specified rule of layout as under "vf-module-model-customization-id" directory
49 the related heat and heat_env file will be put with the name of own uuid, an addtional
50 metadata.json file will be there which includes details description about vf module.
51
52 2.check if subplugin is configurated in the configuration file
53
54 a. configurated: it will invoke the pre-configurated Post API once the concerned
55 artifact has been downloaded. current k8s plugin need leverage such function
56
57 b. not configurated: then its plugin's duty to access the artifacts by shared folder
58 method and parse the metadata information.
59
60
61 leverage the Policy distribution framework by doing below change:
62
63 1.modify the SDC Reception Handler to add its support to download resource level artifacts
64 like HEAT/HEAT_ENV and K8S_CLOUD.
65
66 2.change the SDC client configuration interface by storing the artifact into Database
67
68 3.add a k8s into plugin Handler of the framework which will do the post API
69 on the downloaded artifact which will be put into the locally
70
71 **With respect to k8s artifact**:
72
73 the required input data format for k8s API, suppose resource level too, like VnfId, UUID
74
75 **With respect to openStack/windRiver artifact**:
76
77 the requried input data format for openStack/windRiver API for resource level, it will use
78 "vf-module-model-customization-id" as the key to directive plugins
79
80 Layout example
81 ==============
82 vfmodule-meta.json content
83 --------------------------
84 ::
85
86  [
87   {
88     "vfModuleModelName": "VcpevsVgw0116a..base_vcpe_vgw..module-0",
89     "vfModuleModelInvariantUUID": "718c9883-8fd6-463a-b00d-0c696e0ab475",
90     "vfModuleModelVersion": "1",
91     "vfModuleModelUUID": "585fce63-101f-49f2-95d6-c53423baa48a",
92     "vfModuleModelCustomizationUUID": "4668b783-2dba-444f-b3d8-a508f0d0c0f2",
93     "isBase": true,
94     "artifacts": [
95       "0a38b7ef-93b9-4d48-856d-efb56d53aab8",
96       "4d4a37ef-6a1f-4cb2-b3c9-b380a5940431"
97     ],
98     "properties": {
99       "min_vf_module_instances": "1",
100       "vf_module_label": "base_vcpe_vgw",
101       "max_vf_module_instances": "1",
102       "vfc_list": "",
103       "vf_module_description": "",
104       "vf_module_type": "Base",
105       "availability_zone_count": "",
106       "volume_group": "false",
107       "initial_count": "1"
108     }
109   }
110  ]
111
112 service-meta.json content
113 -------------------------
114 ::
115
116  {
117   "artifacts":
118    [
119     {
120      "artifactName": "base_template.env",
121      "artifactType": "HEAT_ENV",
122      "artifactURL":
123      "/sdc/v1/catalog/services/ead658ee-f224-4e49-9f3f-8b4c49ed18dc/resourceInstances/vfwnextgen0/artifacts/0a38b7ef-93b9-4d48-856d-efb56d53aab8",
124      "artifactDescription": "Auto-generated HEAT Environment deployment artifact",
125      "artifactChecksum": "YzdmZDQxMjdiYjBmZDU1YWQ5YTMxZGExNWM4MjRlYzQ=",
126      "artifactUUID": "0a38b7ef-93b9-4d48-856d-efb56d53aab8",
127      "artifactVersion": "2",
128      "generatedFromUUID": "20b803f5-b137-45aa-9196-6b79f9b9f527.heat4",
129      "artifactLabel": "heat4env",
130      "artifactGroupType": "DEPLOYMENT"
131      },
132      {
133      "artifactName": "base_template.yaml",
134      "artifactType": "HEAT",
135      "artifactURL":
136      "/sdc/v1/catalog/services/ead658ee-f224-4e49-9f3f-8b4c49ed18dc/resourceInstances/vfwnextgen0/artifacts/4d4a37ef-6a1f-4cb2-b3c9-b380a5940431",
137      "artifactDescription": "created from csar",
138      "artifactTimeout": 60,
139      "artifactChecksum": "MGMwNzkwNmZkODExZmFkMTgwMTljMGIwNWMxOWZlODY=",
140      "artifactUUID": "4d4a37ef-6a1f-4cb2-b3c9-b380a5940431",
141      "artifactVersion": "2",
142      "artifactLabel": "heat4",
143      "artifactGroupType": "DEPLOYMENT"
144      }
145    ]
146   }
147
148 the directory layout
149 --------------------
150 under 4668b783-2dba-444f-b3d8-a508f0d0c0f2 dir, there would be 4 files:
151 ::
152
153     base_template.yaml it's a HEAT artifact
154     base_template.env  it's a HEAT_ENV artifact
155     vfmodule-meta.json
156     service-meta.json includes all artifacts details info of the artifact_list
157
158
159 Dependency
160 ==============
161 1. SDC support:
162    SDC-2041 SDC supports K8S plugin to expose APIs to add/delete cloud specific artifacts
163    SDC-2045 create User and Password for MultiCloud component to access secure API
164    A CSAR example including k8s artifact
165 2. SO support:
166    modify the current interface between SO and Mutlicloud
167 3. MutliCloud support:
168    implement the invoke logic  for the downloaded artifact conconered by k8s, clarify all the
169    necessary information needed.
170 4. OOM support:
171    need a configuration for necessary pods during deployment
172    need to define how to the common setting instead of hard-code
173
174 Test Use Cases
175 ==============
176 1. For k8s. the artifacts are Helm chart. need a k8s lab env for validation. need to clarify if there is some connection
177 between the VNFs, like using VirtualLink or just a service which is a simple wrap of one VNF
178
179 2. For OpenStack/WindRiver, use vFW test case with HEAT/HEAT_ENV artifacts.