/* * Copyright 2016-2017 Huawei Technologies Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.rest; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmJsonUtil; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.restclient.RestfulResponse; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.servicetoken.VnfmRestfulUtil; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant; import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.process.VnfResourceMgr; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** * Provide interfaces of resource for VNFM. *
* * @author * @version VFC 1.0 Aug 24, 2016 */ @Path("/rest/vnfmmed/csm/v2/vapps") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class VnfResourceRoa { private static final Logger LOG = LoggerFactory.getLogger(VnfResourceRoa.class); private VnfResourceMgr vnfResourceMgr; public void setVnfResourceMgr(VnfResourceMgr vnfResourceMgr) { this.vnfResourceMgr = vnfResourceMgr; } /** * Provide function of grant resource. *
* * @param context * @param vnfId * @return * @since VFC 1.0 */ @PUT @Path("/instances/{vnfId}/grant") public String grantVnfRes(@Context HttpServletRequest context, @PathParam("vnfId") String vnfId) { LOG.info("function=grantVnfRes, msg=enter to grant vnf resource."); JSONObject restJson = new JSONObject(); restJson.put(Constant.RETCODE, Constant.REST_FAIL); JSONObject dataObject = VnfmJsonUtil.getJsonFromContexts(context); LOG.info("function=grantVnfRes, dataObject: {}", dataObject); if(null == dataObject) { LOG.error("function=grantVnfRes, msg=param error"); restJson.put("data", "Params error"); return restJson.toString(); } JSONObject grantObj = dataObject.getJSONObject("grant"); if(null == grantObj) { LOG.error("function=grantVnfRes, msg=param error"); restJson.put("data", "Grant param error"); return restJson.toString(); } String vnfmId = grantObj.getString("project_id"); JSONObject resultObj = vnfResourceMgr.grantVnfResource(grantObj, vnfId, vnfmId); LOG.info("grantVnfResource resultObj:", resultObj); JSONObject res = new JSONObject(); res.put("msg", "grant success"); return res.toString(); } @PUT @Path("/lifecycle_changes_notification") public String notify(@Context HttpServletRequest context) throws IOException { LOG.info("function=notify, msg=enter to notify vnf resource"); JSONObject dataObject = VnfmJsonUtil.getJsonFromContexts(context); LOG.info("function=notify, dataObject: {}", dataObject); callLcmNotify(dataObject); JSONObject restJson = new JSONObject(); restJson.put(Constant.RETCODE, Constant.REST_SUCCESS); return restJson.toString(); } private void callLcmNotify(JSONObject dataObject) throws IOException { String vnfPkgInfo = AdapterResourceManager.readVfnPkgInfoFromJson(); JSONObject vnfpkgJson = JSONObject.fromObject(vnfPkgInfo); String vnfmId = vnfpkgJson.getString("vnfmid"); String vimId = vnfpkgJson.getString("vimid"); JSONArray affectedVnfc = new JSONArray(); JSONArray vmList = dataObject.getJSONArray("vm_list"); String changeType = ""; String operation = ""; if(1 == dataObject.getInt("event_type")) { changeType = "added"; operation = "Instantiate"; } else { changeType = "removed"; operation = "Terminal"; } String vnfInstanceId = dataObject.getString("vnf_id"); for(int i = 0; i < vmList.size(); i++) { JSONObject vm = vmList.getJSONObject(i); LOG.info("function=callLcmNotify, vm: {}", vm); JSONObject affectedVm = new JSONObject(); affectedVm.put("vnfcInstanceId", vm.getString("vm_id")); affectedVm.put("changeType", changeType); affectedVm.put("vimid", vimId); affectedVm.put("vmid", vm.getString("vm_id")); affectedVm.put("vmname", vm.getString("vm_name")); affectedVm.put("vduid", vm.getString("vm_id")); LOG.info("function=callLcmNotify, affectedVm: {}", affectedVm); affectedVnfc.add(affectedVm); } JSONObject notification = new JSONObject(); notification.put("status", dataObject.getString("vnf_status")); notification.put("vnfInstanceId", vnfInstanceId); notification.put("operation", operation); notification.put("affectedVnfc", affectedVnfc); LOG.info("function=callLcmNotify, notification: {}", notification); String url = "/api/nslcm/v1/ns/" + vnfmId + "/vnfs/" + vnfInstanceId + "/Notify"; LOG.info("function=callLcmNotify, url: {}", url); RestfulResponse rsp = VnfmRestfulUtil.getRemoteResponse(url, VnfmRestfulUtil.TYPE_POST, notification.toString()); if(rsp != null) { LOG.info("function=callLcmNotify, status: {}, content: {}", rsp.getStatus(), rsp.getResponseContent()); } } }