Merge "addvnf support emsUuid"
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / process / VnfMgr.java
1 /*
2  * Copyright 2016-2017 Huawei Technologies Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process;
18
19 import java.io.IOException;
20 import java.util.Map;
21 import java.util.concurrent.ConcurrentHashMap;
22
23 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
28 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
29 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 import net.sf.json.JSONException;
34 import net.sf.json.JSONObject;
35
36 /**
37  * Provide function for instantiate or terminate VNF
38  * <br/>
39  *
40  * @author
41  * @version VFC 1.0 Aug 24, 2016
42  */
43 public class VnfMgr {
44
45     private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
46
47     private VnfmDao vnfmDao;
48
49     public void setVnfmDao(VnfmDao vnfmDao) {
50         this.vnfmDao = vnfmDao;
51     }
52
53     /**
54      * Scale vnf
55      * 
56      * @param vnfObject
57      *            {
58      *            "vnfInstanceId":"5",
59      *            "type":"SCALE_OUT",
60      *            "aspectId":"101",
61      *            "numberOfSteps":"1",
62      *            "additionalParam":{}
63      *            }
64      * @param vnfmId
65      * @param vnfInstanceId
66      * @return
67      */
68     public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
69         JSONObject restJson = new JSONObject();
70         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
71         try {
72
73             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
74                 return restJson;
75             }
76
77             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
78             LOG.info("vnfm info:" + vnfmObjcet);
79             if(vnfmObjcet.isNullObject()) {
80                 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
81                 return restJson;
82             }
83             restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
84         } catch(JSONException e) {
85             LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
86         }
87
88         return restJson;
89     }
90
91     /**
92      * Provide function for instantiate VNF
93      * <br/>
94      *
95      * @param vnfObject
96      * @param vnfmId
97      * @return
98      * @since VFC 1.0
99      */
100     public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
101         JSONObject restJson = new JSONObject();
102         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
103         try {
104
105             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
106                 return restJson;
107             }
108
109             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
110
111             if(vnfmObjcet.isNullObject()) {
112                 return restJson;
113             }
114
115             Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
116             conMap.put("csarid", vnfObject.getString("vnfPackageId"));
117             conMap.put("vnfmid", vnfmId);
118             conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
119
120             JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
121
122             if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
123                 return restJson;
124             }
125
126             JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
127             restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
128             saveVnfInfo(restJson, resObjcet);
129         } catch(JSONException e) {
130             LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
131         }
132
133         return restJson;
134     }
135
136     /**
137      * Provide function for terminate VNF
138      * <br/>
139      *
140      * @param vnfId
141      * @param vnfmId
142      * @param vnfObject
143      * @return
144      * @since VFC 1.0
145      */
146     public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
147         LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
148         JSONObject restJson = new JSONObject();
149         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
150         try {
151             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
152             if(vnfmObjcet.isNullObject()) {
153                 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
154                 return restJson;
155             }
156
157             restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
158         } catch(JSONException e) {
159             LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
160         }
161         return restJson;
162     }
163
164     /**
165      * Provide function for get VNF
166      * <br/>
167      *
168      * @param vnfId
169      * @param vnfmId
170      * @return
171      * @since VFC 1.0
172      */
173     public JSONObject getVnf(String vnfId, String vnfmId) throws IOException {
174         LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
175         JSONObject restJson = new JSONObject();
176         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
177         try {
178             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
179             if(vnfmObjcet.isNullObject()) {
180                 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
181                 return restJson;
182             }
183
184             restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
185             JSONObject ipObj = (new VnfMgrVnfm()).getIp(vnfmObjcet, vnfId);
186
187             return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson, ipObj);
188
189         } catch(JSONException e) {
190             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
191             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
192         }
193         return restJson;
194     }
195
196     private JSONObject getVnfBody(JSONObject restJson, JSONObject ipObj) {
197         try {
198             JSONObject vnfInfoJson = new JSONObject();
199             JSONObject basicInfoJson = new JSONObject();
200
201             JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
202
203             basicInfoJson.put("vnfInstanceId", retJson.getString("vnf_id"));
204             basicInfoJson.put("vnfInstanceName", retJson.getString("vnf_name"));
205             basicInfoJson.put("vnfInstanceDescription", "");
206
207             basicInfoJson.put(Constant.VNFDID, retJson.getString("vnfd_id"));
208             basicInfoJson.put("vnfdPackageId", retJson.getString("vnfd_id"));
209             basicInfoJson.put("version", "1.0");
210             basicInfoJson.put("vnfProvider", "hw");
211             basicInfoJson.put("vnfType", retJson.get("vnf_type"));
212             basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
213             if(ipObj.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
214                 basicInfoJson.put("ipInfo", ipObj.getJSONObject("data"));
215             }
216             vnfInfoJson.put("vnfInfo", basicInfoJson);
217             vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
218             return vnfInfoJson;
219         } catch(JSONException e) {
220             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
221             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
222             return restJson;
223         } catch(IndexOutOfBoundsException e) {
224             LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
225             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
226             return restJson;
227         }
228     }
229
230     @SuppressWarnings("unchecked")
231     private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
232         JSONObject restJson = new JSONObject();
233         JSONObject vappIfno = new JSONObject();
234         restJson.put("vnfd_id", resObject.getString(Constant.VNFDID));
235         restJson.put("plan_id", resObject.getOrDefault("planId", ""));
236         restJson.put("plan_name", resObject.getOrDefault("planName", ""));
237         restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
238         restJson.put("project_id", vnfmId);
239         restJson.put("parameters", resObject.getJSONObject("parameters"));
240         if(resObject.containsKey("emsUuid")) {
241             restJson.put("emsUuid", resObject.getString("emsUuid"));
242         }
243         restJson.put("nfvo_id", "");
244         restJson.put("location", "");
245         restJson.put("vnfm_id", vnfmId);
246         vappIfno.put("vapp_info", restJson);
247         return vappIfno;
248     }
249
250     /**
251      * Provide function for get job
252      * <br/>
253      *
254      * @param jobId
255      * @param vnfmId
256      * @return
257      * @since VFC 1.0
258      */
259     public JSONObject getJob(String jobId, String vnfmId) {
260         LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
261         JSONObject restJson = new JSONObject();
262         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
263         try {
264             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
265             if(vnfmObjcet.isNullObject()) {
266                 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
267                 return restJson;
268             }
269
270             restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
271
272         } catch(JSONException e) {
273             LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
274             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
275         }
276         return restJson;
277     }
278
279     /**
280      * Provide function for save vnfInfo
281      * <br/>
282      *
283      * @param vnfObject
284      * @param resObject
285      * @since VFC 1.0
286      */
287     public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
288         LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
289         if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
290             Vnfm info = new Vnfm();
291             info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
292             info.setVersion(resObject.getString("vnfdVersion"));
293             info.setVnfdId(resObject.getString(Constant.VNFDID));
294             info.setVnfPackageId("");
295             try {
296                 vnfmDao.insertVnfm(info);
297             } catch(Exception e) {
298                 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
299             }
300         }
301     }
302
303     /**
304      * <br>
305      * 
306      * @param jsonObject
307      * @param vnfInstanceId
308      * @param vnfmId
309      * @return
310      * @since VFC 1.0
311      */
312     public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
313         JSONObject restJson = new JSONObject();
314         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
315
316         if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
317             return restJson;
318         }
319
320         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
321         LOG.info("vnfm info:" + vnfmObjcet);
322         if(vnfmObjcet.isNullObject()) {
323             LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
324             return restJson;
325         }
326         restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);
327         return restJson;
328     }
329
330     public JSONObject getJobFromVnfm(String jobId, String vnfmId) {
331         LOG.warn("function=getJobFromVnfm, jobId:{}, vnfmId:{}", jobId, vnfmId);
332         JSONObject restJson = new JSONObject();
333         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
334         if(vnfmObjcet.isNullObject()) {
335             LOG.error("function=getJobFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
336             return restJson;
337         }
338         restJson = (new VnfMgrVnfm()).getJobFromVnfm(vnfmObjcet, jobId);
339         return restJson;
340     }
341
342     public String transferToLcm(JSONObject restJson) {
343         LOG.warn("function=transferToLcm, restJson: {}", restJson);
344         JSONObject responseJson = new JSONObject();
345         JSONObject jobInfoJson = new JSONObject();
346         JSONObject jobInfo = restJson.getJSONObject("data").getJSONObject("job_info");
347         jobInfoJson.put("jobId", jobInfo.getString("job_id"));
348         responseJson.put("progress", jobInfo.getString("task_progress_rate"));
349         responseJson.put("status", jobInfo.getString("task_status"));
350         responseJson.put("errorCode", jobInfo.getString("error_code"));
351         responseJson.put("responseId", jobInfo.getString("task_progress_rate"));
352         jobInfoJson.put("responsedescriptor", responseJson);
353         LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
354         return jobInfoJson.toString();
355     }
356
357     public JSONObject getVmsFromVnfm(String vnfmId, String vnfInstanceId) {
358         JSONObject restJson = new JSONObject();
359         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
360         if(vnfmObjcet.isNullObject()) {
361             LOG.error("function=getVmsFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
362             restJson.put("message", "vnfm not exists");
363             return restJson;
364         }
365         String url = "";
366         if(vnfInstanceId == null) {
367             url = "/v2/vapps/instances/query/vms";
368         } else {
369             url = String.format("/v2/vapps/instances/%s/vms", vnfInstanceId);
370         }
371         restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
372         LOG.info("function=getVmsFromVnfm, restJson: {}", restJson);
373         return restJson;
374     }
375
376 }