2 * Copyright 2016-2017 Huawei Technologies Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.rest;
19 import java.util.HashMap;
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import javax.ws.rs.Consumes;
25 import javax.ws.rs.GET;
26 import javax.ws.rs.POST;
27 import javax.ws.rs.Path;
28 import javax.ws.rs.PathParam;
29 import javax.ws.rs.Produces;
30 import javax.ws.rs.QueryParam;
31 import javax.ws.rs.core.Context;
32 import javax.ws.rs.core.MediaType;
34 import org.apache.commons.collections.map.UnmodifiableMap;
35 import org.apache.commons.lang3.StringUtils;
36 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
39 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
43 import net.sf.json.JSONObject;
46 * Provide interfaces for instantiate or terminate VNF.
50 * @version VFC 1.0 Aug 24, 2016
52 @SuppressWarnings("unchecked")
53 @Path("/api/huaweivnfmdriver/v1")
54 @Consumes(MediaType.APPLICATION_JSON)
55 @Produces(MediaType.APPLICATION_JSON)
58 private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
60 private VnfMgr vnfMgr;
62 private static Map<String, String> progressItem;
64 private static Map<String, String> jobstatusItem;
67 Map<String, String> map = new HashMap<>();
68 map.put("Building", "50");
69 map.put("Active", "100");
70 map.put("Stopped", "50");
71 map.put("Error", "100");
72 progressItem = UnmodifiableMap.decorate(map);
74 map = new HashMap<>();
75 map.put("Building", "processing");
76 map.put("Active", "finished");
77 map.put("Stopped", "processing");
78 map.put("Error", "error");
79 jobstatusItem = UnmodifiableMap.decorate(map);
82 public void setVnfMgr(VnfMgr vnfMgr) {
90 * @param vnfInstanceId
94 * "vnfInstanceId":"5",
97 * "numberOfSteps":"1",
98 * "additionalParam":{}
106 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
107 public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
108 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
109 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
110 LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
111 JSONObject result = new JSONObject();
112 if(null == jsonObject) {
113 String msg = "the parameters do not meet the requirements,please check it!";
114 LOG.error("function=scalVnf," + msg);
115 resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
116 result.put("msg", msg);
117 return result.toString();
120 result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
121 LOG.info("function=scaleVNF,result=" + result.toString());
122 if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
123 LOG.error("function=scaleVNF, msg=scaleVnf fail");
124 resp.setStatus(Constant.HTTP_INNERERROR);
125 return result.toString();
127 return JSONObject.fromObject(result.getJSONObject("data")).toString();
131 * Provide function for instantiate VNF
141 @Path("/{vnfmId}/vnfs")
142 public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
143 @PathParam("vnfmId") String vnfmId) {
144 LOG.warn("function=addVnf, msg=enter to add a vnf");
145 JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
146 JSONObject restJson = new JSONObject();
148 if(null == subJsonObject) {
149 LOG.error("function=addVnf, msg=params are insufficient");
150 resp.setStatus(Constant.HTTP_INNERERROR);
151 return restJson.toString();
153 LOG.info("addVnf request info from (LCM):" + subJsonObject);
154 restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
156 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
157 LOG.error("function=addVnf, msg=addvnf fail");
158 resp.setStatus(Constant.HTTP_INNERERROR);
159 return restJson.toString();
162 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
166 * Provide function for terminate VNF
171 * @param vnfInstanceId
177 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
178 public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
179 @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context) {
180 LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
181 JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
182 JSONObject restJson = new JSONObject();
184 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
185 resp.setStatus(Constant.HTTP_INNERERROR);
186 return restJson.toString();
189 restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
190 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
191 LOG.error("function=delVnf, msg=delVnf fail");
192 resp.setStatus(Constant.HTTP_INNERERROR);
193 return restJson.toString();
196 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
200 * Provide function for get VNF
205 * @param vnfInstanceId
211 @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
212 public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
213 @PathParam("vnfInstanceId") String vnfInstanceId) {
214 LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
215 JSONObject restJson = new JSONObject();
217 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
218 resp.setStatus(Constant.HTTP_INNERERROR);
219 return restJson.toString();
222 restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
223 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
224 LOG.error("function=getVnf, msg=getVnf fail");
225 resp.setStatus(Constant.HTTP_INNERERROR);
226 return restJson.toString();
229 restJson.remove(Constant.RETCODE);
230 return restJson.toString();
243 public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
244 LOG.warn("function=getVnfmById, vnfmId: {}", vnfmId);
245 return VnfmUtil.getVnfmById(vnfmId).toString();
249 * Provide function for get job
260 @Path("/{vnfmId}/jobs/{jobId}")
261 public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
262 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
263 LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
264 JSONObject restJson = new JSONObject();
266 if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
267 resp.setStatus(Constant.HTTP_INNERERROR);
268 return restJson.toString();
271 restJson = vnfMgr.getJob(jobId, vnfmId);
272 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
273 LOG.error("function=getJob, msg=getJob fail");
274 resp.setStatus(Constant.HTTP_INNERERROR);
275 return restJson.toString();
278 return getJobBody(restJson);
286 * "action": "vmReset",
288 * "vmid": "804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff",
289 * "vduid": "vdu_100",
290 * "vmname": "ZTE_SSS_111_PP_2_L"
295 * @param vnfInstanceId
300 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
301 public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
302 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId) {
303 LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
304 JSONObject restJson = new JSONObject();
305 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
307 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
308 resp.setStatus(Constant.HTTP_INNERERROR);
309 restJson.put("message", "vnfmId is null or vnfInstanceId is null");
310 return restJson.toString();
313 restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
314 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
315 LOG.error("function=healVnf, msg=healVnf fail");
316 resp.setStatus(Constant.HTTP_INNERERROR);
317 return restJson.toString();
320 restJson.remove(Constant.RETCODE);
321 restJson.put("jobId", vnfInstanceId + "_post");
322 return restJson.toString();
325 private String getJobBody(JSONObject restJson) {
326 LOG.warn("function=getJobBody, restJson: {}", restJson);
327 JSONObject responseJson = new JSONObject();
328 JSONObject jobInfoJson = new JSONObject();
329 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
330 jobInfoJson.put("jobId", retJson.getString("id"));
331 responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
332 responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
333 responseJson.put("errorCode", "null");
334 responseJson.put("responseId", progressItem.get(retJson.getString(Constant.STATUS)));
335 if(retJson.getString(Constant.STATUS) == null || retJson.getString(Constant.STATUS) == "null") {
336 responseJson.put("progress", "100");
337 responseJson.put("status", "finished");
338 responseJson.put("errorCode", "null");
339 responseJson.put("responseId", "100");
341 jobInfoJson.put("responsedescriptor", responseJson);
342 LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
343 return jobInfoJson.toString();
348 * Query vms info from vnfm
355 @Path("/{vnfmId}/vms")
356 public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp) {
357 LOG.info("function=getVms, msg=enter to get vms: vnfmId: {}", vnfmId);
358 JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, null);
359 LOG.info("function=getVms, restJson: {}", restJson);
360 return restJson.getString("data");
365 * Query vms info by vnfId from vnfm
368 * @param vnfInstanceId
373 @Path("/{vnfmId}/{vnfInstanceId}/vms")
374 public String getVmsByVnfId(@PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId,
375 @Context HttpServletResponse resp) {
376 LOG.info("function=getVmsByVnfId, msg=enter to get vms: vnfmId: {}", vnfmId);
377 JSONObject restJson = vnfMgr.getVmsFromVnfm(vnfmId, vnfInstanceId);
378 LOG.info("function=getVmsByVnfId, restJson: {}", restJson);
379 return restJson.getString("data");
384 * Query job status from vnfm version 18.1
392 public String getJobFromVnfm(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
393 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) {
394 LOG.warn("function=getJobFromVnfm, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
395 JSONObject restJson = vnfMgr.getJobFromVnfm(jobId, vnfmId);
397 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
398 LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
399 resp.setStatus(Constant.HTTP_INNERERROR);
400 return restJson.toString();
403 return vnfMgr.transferToLcm(restJson);