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.PUT;
28 import javax.ws.rs.Path;
29 import javax.ws.rs.PathParam;
30 import javax.ws.rs.Produces;
31 import javax.ws.rs.QueryParam;
32 import javax.ws.rs.core.Context;
33 import javax.ws.rs.core.MediaType;
35 import org.apache.commons.collections.map.UnmodifiableMap;
36 import org.apache.commons.lang3.StringUtils;
37 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil;
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.openo.baseservice.remoteservice.exception.ServiceException;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
44 import net.sf.json.JSONObject;
47 * Provide interfaces for instantiate or terminate VNF.
51 * @version NFVO 0.5 Aug 24, 2016
53 @SuppressWarnings("unchecked")
54 @Path("/api/hwvnfm/v1")
55 @Consumes(MediaType.APPLICATION_JSON)
56 @Produces(MediaType.APPLICATION_JSON)
59 private static final Logger LOG = LoggerFactory.getLogger(VnfRoa.class);
61 private VnfMgr vnfMgr;
63 private static Map<String, String> PROGRESSITEM;
65 private static Map<String, String> JOBSTATUSITEM;
68 Map<String, String> map = new HashMap<>();
69 map.put("Building", "50");
70 map.put("Active", "100");
71 map.put("Stopped", "50");
72 map.put("Error", "100");
73 PROGRESSITEM = UnmodifiableMap.decorate(map);
75 map = new HashMap<>();
76 map.put("Building", "processing");
77 map.put("Active", "finished");
78 map.put("Stopped", "processing");
79 map.put("Error", "error");
80 JOBSTATUSITEM = UnmodifiableMap.decorate(map);
83 public void setVnfMgr(VnfMgr vnfMgr) {
92 * "vnfInstanceId":"5",
95 * "numberOfSteps":"1",
96 * "additionalParam":{}
104 * @throws ServiceException
107 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/scale")
108 public String scaleVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
109 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
110 throws ServiceException {
111 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
112 LOG.info("function=scaleVNF, msg=enter to scale a vnf. request body:" + jsonObject);
113 JSONObject result = new JSONObject();
115 if(null == jsonObject) {
116 msg = "the parameters do not meet the requirements,please check it!";
117 LOG.error("function=scalVnf," + msg);
118 resp.setStatus(Constant.HTTP_NOT_ACCEPTABLE);
119 result.put("msg", msg);
120 return result.toString();
123 result = vnfMgr.scaleVNF(jsonObject, vnfmId, vnfInstanceId);
124 LOG.info("function=scaleVNF,result=" + result.toString());
125 if(result.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
126 LOG.error("function=scaleVNF, msg=scaleVnf fail");
127 resp.setStatus(Constant.HTTP_INNERERROR);
128 return result.toString();
130 return JSONObject.fromObject(result.getJSONObject("data")).toString();
134 * Provide function for instantiate VNF
141 * @throws ServiceException
145 @Path("/{vnfmId}/vnfs")
146 public String addVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
147 @PathParam("vnfmId") String vnfmId) throws ServiceException {
148 LOG.warn("function=addVnf, msg=enter to add a vnf");
149 JSONObject subJsonObject = VnfmJsonUtil.getJsonFromContexts(context);
150 JSONObject restJson = new JSONObject();
152 if(null == subJsonObject) {
153 LOG.error("function=addVnf, msg=params are insufficient");
154 resp.setStatus(Constant.HTTP_INNERERROR);
155 return restJson.toString();
157 LOG.info("addVnf request info from (LCM):" + subJsonObject);
158 restJson = vnfMgr.addVnf(subJsonObject, vnfmId);
160 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
161 LOG.error("function=addVnf, msg=addvnf fail");
162 resp.setStatus(Constant.HTTP_INNERERROR);
163 return restJson.toString();
166 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
170 * Provide function for terminate VNF
175 * @param vnfInstanceId
178 * @throws ServiceException
182 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/terminate")
183 public String delVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
184 @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
185 throws ServiceException {
186 LOG.warn("function=delVnf, msg=enter to delete a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
187 JSONObject vnfObject = VnfmJsonUtil.getJsonFromContexts(context);
188 JSONObject restJson = new JSONObject();
190 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
191 resp.setStatus(Constant.HTTP_INNERERROR);
192 return restJson.toString();
195 restJson = vnfMgr.deleteVnf(vnfInstanceId, vnfmId, vnfObject);
196 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
197 LOG.error("function=delVnf, msg=delVnf fail");
198 resp.setStatus(Constant.HTTP_INNERERROR);
199 return restJson.toString();
202 return JSONObject.fromObject(restJson.getJSONObject("data")).toString();
206 * Provide function for get VNF
211 * @param vnfInstanceId
214 * @throws ServiceException
218 @Path("/{vnfmId}/vnfs/{vnfInstanceId}")
219 public String getVnf(@PathParam("vnfmId") String vnfmId, @Context HttpServletResponse resp,
220 @PathParam("vnfInstanceId") String vnfInstanceId, @Context HttpServletRequest context)
221 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();
242 * Provide function for get job
250 * @throws ServiceException
254 @Path("/{vnfmId}/jobs/{jobId}")
255 public String getJob(@PathParam("jobId") String jobId, @PathParam("vnfmId") String vnfmId,
256 @Context HttpServletResponse resp, @QueryParam("@responseId") String responseId) throws ServiceException {
257 LOG.warn("function=getJob, msg=enter to get a job: jobId: {}", jobId);
258 JSONObject restJson = new JSONObject();
260 if(StringUtils.isEmpty(jobId) || StringUtils.isEmpty(vnfmId)) {
261 resp.setStatus(Constant.HTTP_INNERERROR);
262 return restJson.toString();
265 restJson = vnfMgr.getJob(jobId, vnfmId);
266 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
267 LOG.error("function=getJob, msg=getJob fail");
268 resp.setStatus(Constant.HTTP_INNERERROR);
269 return restJson.toString();
272 return getJobBody(restJson);
280 *
\93action
\94:
\93vmReset
\94,
281 *
\93affectedvm
\94: {
282 *
\93vmid
\94:
\93804cca71 - 9ae9 - 4511 - 8e30 - d1387718caff
\94,
283 *
\93vduid
\94:
\93vdu_100
\94,
284 *
\93vmname
\94:
\93ZTE_SSS_111_PP_2_L
\94
289 * @param vnfInstanceId
291 * @throws ServiceException
295 @Path("/{vnfmId}/vnfs/{vnfInstanceId}/heal")
296 public String healVnf(@Context HttpServletRequest context, @Context HttpServletResponse resp,
297 @PathParam("vnfmId") String vnfmId, @PathParam("vnfInstanceId") String vnfInstanceId)
298 throws ServiceException {
299 LOG.warn("function=healVnf, msg=enter to heal a vnf: vnfInstanceId: {}, vnfmId: {}", vnfInstanceId, vnfmId);
300 JSONObject restJson = new JSONObject();
301 JSONObject jsonObject = VnfmJsonUtil.getJsonFromContexts(context);
303 if(StringUtils.isEmpty(vnfInstanceId) || StringUtils.isEmpty(vnfmId)) {
304 resp.setStatus(Constant.HTTP_INNERERROR);
305 restJson.put("message", "vnfmId is null or vnfInstanceId is null");
306 return restJson.toString();
309 restJson = vnfMgr.healVnf(jsonObject, vnfInstanceId, vnfmId);
310 if(restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
311 LOG.error("function=healVnf, msg=healVnf fail");
312 resp.setStatus(Constant.HTTP_INNERERROR);
313 return restJson.toString();
316 restJson.remove(Constant.RETCODE);
317 return restJson.toString();
320 private String getJobBody(JSONObject restJson) {
321 JSONObject responseJson = new JSONObject();
322 JSONObject jobInfoJson = new JSONObject();
323 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
324 jobInfoJson.put("jobId", retJson.getString("id"));
325 responseJson.put("progress", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
326 responseJson.put("status", JOBSTATUSITEM.get(retJson.getString(Constant.STATUS)));
327 responseJson.put("errorCode", "null");
328 responseJson.put("responseId", PROGRESSITEM.get(retJson.getString(Constant.STATUS)));
329 jobInfoJson.put("responsedescriptor", responseJson);
330 return jobInfoJson.toString();