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