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.ResultRequestUtil;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
38 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
39 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.ServiceException;
40 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
41 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfMgr;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
45 import net.sf.json.JSONObject;
48 * Provide interfaces for instantiate or terminate VNF.
52 * @version VFC 1.0 Aug 24, 2016
54 @SuppressWarnings("unchecked")
55 @Path("/api/huaweivnfmdriver/v1")
56 @Consumes(MediaType.APPLICATION_JSON)
57 @Produces(MediaType.APPLICATION_JSON)
60 private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
62 private VnfMgr vnfMgr;
64 private static Map<String, String> progressItem;
66 private static Map<String, String> jobstatusItem;
69 Map<String, String> map = new HashMap<>();
70 map.put("Building", "50");
71 map.put("Active", "100");
72 map.put("Stopped", "50");
73 map.put("Error", "100");
74 progressItem = UnmodifiableMap.decorate(map);
76 map = new HashMap<>();
77 map.put("Building", "processing");
78 map.put("Active", "finished");
79 map.put("Stopped", "processing");
80 map.put("Error", "error");
81 jobstatusItem = UnmodifiableMap.decorate(map);
84 public void setVnfMgr(VnfMgr vnfMgr) {
92 * @param vnfInstanceId
96 * "vnfInstanceId":"5",
99 * "numberOfSteps":"1",
100 * "additionalParam":{}
106 * @throws ServiceException
109 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
110 public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
111 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
112 throws ServiceException {
113 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
114 LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
115 JSONObject result = new JSONObject();
116 if(null == jsonObject) {
117 String msg = "the parameters do not meet the requirements,please check it!";
118 LOG.error("function=scalVnf," + msg);
119 resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
120 result.put("msg", msg);
121 return result.toString();
124 result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
125 LOG.info("function=scaleVNF,result=" + result.toString());
126 if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
127 LOG.error("function=scaleVNF, msg=scaleVnf fail");
128 resp.setStatus(Constant.HTTP_INNERERROR);
129 return result.toString();
131 return JSONObject.fromObject(result.getJSONObject("data")).toString();
135 * Provide function for instantiate VNF
142 * @throws ServiceException
146 @Path("/{vnfmId}/vnfs")
147 public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
148 @PathParam("vnfmId") String vnfmId) throws ServiceException {
149 LOG.warn("function=addVnf, msg=enter to add a vnf");
150 JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
151 JSONObject restJson = new JSONObject();
153 if(null == subJsonObject) {
154 LOG.error("function=addVnf, msg=params are insufficient");
155 resp.setStatus(Constant.HTTP_INNERERROR);
156 return restJson.toString();
158 LOG.info("addVnf request info from (LCM):" + subJsonObject);
159 restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
161 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
162 LOG.error("function=addVnf, msg=addvnf fail");
163 resp.setStatus(Constant.HTTP_INNERERROR);
164 return restJson.toString();
167 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
171 * Provide function for terminate VNF
176 * @param vnfInstanceId
179 * @throws ServiceException
183 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
184 public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
185 @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
186 throws ServiceException {
187 LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
188 JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
189 JSONObject restJson = new JSONObject();
191 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
192 resp.setStatus(Constant.HTTP_INNERERROR);
193 return restJson.toString();
196 restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
197 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
198 LOG.error("function=delVnf, msg=delVnf fail");
199 resp.setStatus(Constant.HTTP_INNERERROR);
200 return restJson.toString();
203 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
207 * Provide function for get VNF
212 * @param vnfInstanceId
215 * @throws ServiceException
219 @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
220 public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
221 @PathParam("vnfInstanceId") String vnfInstanceId) throws ServiceException {
222 LOG.warn("function=getVnf, msg=enter to get a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
223 JSONObject restJson = new JSONObject();
225 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
226 resp.setStatus(Constant.HTTP_INNERERROR);
227 return restJson.toString();
230 restJson = vnfMgr.getVnf(vnfInstanceId, vnfmId);
231 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
232 LOG.error("function=getVnf, msg=getVnf fail");
233 resp.setStatus(Constant.HTTP_INNERERROR);
234 return restJson.toString();
237 restJson.remove(Constant.RETCODE);
238 return restJson.toString();
247 * @throws ServiceException
252 public String getVnfmById(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp)
253 throws ServiceException {
254 LOG.warn("function=getVnfmById, vnfmId: {}", vnfmId);
255 return VnfmUtil.getVnfmById(vnfmId).toString();
259 * Provide function for get job
267 * @throws ServiceException
271 @Path("/{vnfmId}/jobs/{jobId}")
272 public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
273 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
274 LOG.warn("function=getJob, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
275 JSONObject restJson = new JSONObject();
277 if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
278 resp.setStatus(Constant.HTTP_INNERERROR);
279 return restJson.toString();
282 restJson = vnfMgr.getJob(jobId, vnfmId);
283 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
284 LOG.error("function=getJob, msg=getJob fail");
285 resp.setStatus(Constant.HTTP_INNERERROR);
286 return restJson.toString();
289 return getJobBody(restJson);
297 * �action�: �vmReset�,
299 * �vmid�: �804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff�,
300 * �vduid�: �vdu_100�,
301 * �vmname�: �ZTE_SSS_111_PP_2_L�
306 * @param vnfInstanceId
308 * @throws ServiceException
312 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
313 public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
314 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
315 throws ServiceException {
316 LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
317 JSONObject restJson = new JSONObject();
318 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
320 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
321 resp.setStatus(Constant.HTTP_INNERERROR);
322 restJson.put("message", "vnfmId is null or vnfInstanceId is null");
323 return restJson.toString();
326 restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
327 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
328 LOG.error("function=healVnf, msg=healVnf fail");
329 resp.setStatus(Constant.HTTP_INNERERROR);
330 return restJson.toString();
333 restJson.remove(Constant.RETCODE);
334 restJson.put("jobId", vnfInstanceId + "_post");
335 return restJson.toString();
338 private String getJobBody(JSONObject restJson) {
339 LOG.warn("function=getJobBody, restJson: {}", restJson);
340 JSONObject responseJson = new JSONObject();
341 JSONObject jobInfoJson = new JSONObject();
342 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
343 jobInfoJson.put("jobId", retJson.getString("id"));
344 responseJson.put("progress", progressItem.get(retJson.getString(Constant.STATUS)));
345 responseJson.put("status", jobstatusItem.get(retJson.getString(Constant.STATUS)));
346 responseJson.put("errorCode", "null");
347 responseJson.put("responseId", progressItem.get(retJson.getString(Constant.STATUS)));
348 if(retJson.getString(Constant.STATUS) == null || retJson.getString(Constant.STATUS) == "null") {
349 responseJson.put("progress", "100");
350 responseJson.put("status", "finished");
351 responseJson.put("errorCode", "null");
352 responseJson.put("responseId", "100");
354 jobInfoJson.put("responsedescriptor", responseJson);
355 LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
356 return jobInfoJson.toString();
360 @Path("/{vnfmId}/vms")
361 public String getVms(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp)
362 throws ServiceException {
363 LOG.info("function=getVms, msg=enter to get vms: vnfmId: {}", vnfmId);
364 JSONObject restJson = new JSONObject();
365 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
366 if(vnfmObjcet.isNullObject()) {
367 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
368 restJson.put("message", "vnfm not exists");
369 return restJson.toString();
371 String url = "/v2/vapps/instances/query/vms";
372 restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
373 LOG.info("function=getVms, restJson: {}", restJson);
374 return restJson.getString("data");
379 * Query job status from vnfm version 18.1
385 * @throws ServiceException
388 public String getJobFromVnfm(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
389 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
390 LOG.warn("function=getJobFromVnfm, msg=enter to get a job: jobId: {}, responseId: {}", jobId, responseId);
391 JSONObject restJson = vnfMgr.getJobFromVnfm(jobId, vnfmId);
393 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
394 LOG.error("function=getJobFromVnfm, msg=getJobFromVnfm fail");
395 resp.setStatus(Constant.HTTP_INNERERROR);
396 return restJson.toString();
399 return vnfMgr.transferToLcm(restJson);