Merge "Fix CVE-2018-1271, CVE-2018-10237"
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / rest / VnfResourceRoa.java
index 6dc49af..fa1e4c3 100644 (file)
@@ -16,6 +16,8 @@
 
 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;
@@ -26,11 +28,15 @@ 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;
 
 /**
@@ -96,11 +102,73 @@ public class VnfResourceRoa {
 
     @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());
+        }
+    }
 }