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.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;
/**
JSONObject dataObject = VnfmJsonUtil.getJsonFromContexts(context);
LOG.info("function=grantVnfRes, dataObject: {}", dataObject);
- /*if(null == dataObject) {
+ if(null == dataObject) {
LOG.error("function=grantVnfRes, msg=param error");
restJson.put("data", "Params error");
return restJson.toString();
String vnfmId = grantObj.getString("project_id");
- JSONObject resultObj = vnfResourceMgr.grantVnfResource(grantObj, vnfId, vnfmId);*/
+ JSONObject resultObj = vnfResourceMgr.grantVnfResource(grantObj, vnfId, vnfmId);
+ LOG.info("grantVnfResource resultObj:", resultObj);
JSONObject res = new JSONObject();
- res.put("msg","grant success");
+ res.put("msg", "grant success");
return res.toString();
}
@PUT
@Path("/lifecycle_changes_notification")
- public String notify(@Context HttpServletRequest context) {
+ 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 = "";
+ int eventType = dataObject.getInt("event_type");
+ if(1 == eventType) {
+ changeType = "added";
+ operation = "Instantiate";
+ } else if(4 == eventType) {
+ changeType = "removed";
+ operation = "Terminal";
+ } else if(3 == eventType) {
+ changeType = "added";
+ operation = "Scaleout";
+ } else if(2 == eventType) {
+ changeType = "removed";
+ operation = "Scalein";
+ }
+ 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);
+ if((2 == eventType) && ("Active".equalsIgnoreCase(vm.getString("status")))) {
+ continue;
+ }
+ JSONObject affectedVm = new JSONObject();
+ String vimVimId = vm.getString("vim_vm_id");
+ affectedVm.put("vnfcInstanceId", vimVimId);
+ affectedVm.put("changeType", changeType);
+ affectedVm.put("vimid", vimId);
+ affectedVm.put("vmid", vimVimId);
+ affectedVm.put("vmname", vm.getString("vm_name"));
+ affectedVm.put("vduid", vimVimId);
+ LOG.info("function=callLcmNotify, affectedVm: {}", affectedVm);
+ affectedVnfc.add(affectedVm);
+ }
+ if(affectedVnfc.isEmpty()) {
+ LOG.warn("function=callLcmNotify, affectedVnfc is empty.");
+ return;
+ }
+ 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());
+ }
+ }
}