modify healVnf vmid
[vfc/nfvo/driver/vnfm/svnfm.git] / huawei / vnfmadapter / VnfmadapterService / service / src / main / java / org / onap / vfc / nfvo / vnfm / svnfm / vnfmadapter / service / csm / vnf / VnfMgrVnfm.java
index e57d23f..92b28f3 100644 (file)
@@ -21,6 +21,7 @@ import java.io.IOException;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
+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.constant.ParamConstants;
 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.UrlConstant;
@@ -50,6 +51,11 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
     @Override
     public JSONObject scaleVnf(JSONObject vnfObject, JSONObject vnfmObject, String vnfmId, String vnfInstanceId) {
         LOG.warn("function=scaleVnf, msg=enter to scale a vnf");
+
+        JSONObject queryVms = ResultRequestUtil.call(vnfmObject,
+                String.format(ParamConstants.VNF_GET_VMINFO, vnfInstanceId), Constant.GET, null, Constant.CERTIFICATE);
+        LOG.info("function=scaleVnf, msg=query vms result=" + queryVms);
+
         JSONObject restJson = new JSONObject();
         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
         String path = String.format(ParamConstants.VNF_SCALE, vnfInstanceId);
@@ -60,7 +66,12 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
         JSONObject scaleInfo = new JSONObject();
         JSONArray vduList = new JSONArray();
         JSONObject vdu = new JSONObject();
-        vdu.put("vdu_type", this.getVduType(vnfmObject, vnfInstanceId));
+
+        if(vnfObject.containsKey("configedVduType")) {
+            vdu.put("vdu_type", vnfObject.getString("configedVduType"));
+        } else {
+            vdu.put("vdu_type", this.getVduType(vnfmObject, queryVms));
+        }
         vdu.put("h_steps", vnfObject.get("numberOfSteps"));
         vduList.add(vdu);
         scaleInfo.put("vnf_id", vnfInstanceId);
@@ -75,12 +86,20 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
             // scale_in
             JSONArray vmList = new JSONArray();
             try {
-                JSONObject additionalParam = vnfObject.getJSONObject("additionalParam");
-                vmList = additionalParam.getJSONArray("vm_list");
+                // JSONObject additionalParam = vnfObject.getJSONObject("additionalParam");
+                // vmList = additionalParam.getJSONArray("vm_list");
+                vmList = ScaleManager.beforeScaleIn(queryVms, vnfInstanceId);
+                if(vmList.isEmpty()) {
+                    vmList = AdapterResourceManager.readScaleInVmIdFromJson().getJSONArray("vm_list");
+                }
             } catch(JSONException e) {
                 LOG.error("the param 'additionalParam' or 'vm_list' not found,please check it", e);
             }
-            scaleInfo.put("vm_list", vmList);
+            if(null != vmList && !vmList.isEmpty()) {
+                scaleInfo.put("vm_list", vmList);
+            }
+        } else if(scaleType == PARAM_ONE) {
+            ScaleManager.beforeScaleOut(queryVms, vnfInstanceId);
         }
         paramJson.put("scale_info", scaleInfo);
         JSONObject queryResult =
@@ -93,7 +112,12 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
                 restJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
                 // restJson.put("data",
                 // queryResult.getJSONObject("data").getJSONObject("scale_info"));
-                JSONObject appInfo = queryResult.getJSONObject("data").getJSONObject("scale_info");
+                JSONObject appInfo = new JSONObject();
+                try {
+                    appInfo = JSONObject.fromObject(queryResult.getString("data")).getJSONObject("scale_info");
+                } catch(JSONException e) {
+                    LOG.error("function=scaleVnf, msg=csm return obj is not a json, e={}.", e);
+                }
                 JSONObject resultObj = new JSONObject();
                 // resultObj.put(Constant.JOBID, vnfInstanceId + "_" + Constant.PUT);
                 handleResponse(resultObj, appInfo, vnfInstanceId, Constant.PUT);
@@ -109,13 +133,9 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
         return restJson;
     }
 
-    private String getVduType(JSONObject vnfmObject, String vnfInstanceId) {
+    private String getVduType(JSONObject vnfmObject, JSONObject queryResult) {
         String vduType = "";
         try {
-            JSONObject queryResult =
-                    ResultRequestUtil.call(vnfmObject, String.format(ParamConstants.VNF_GET_VMINFO, vnfInstanceId),
-                            Constant.GET, null, Constant.CERTIFICATE);
-            LOG.info("getVduType result=" + queryResult);
             vduType = queryResult.getJSONObject("data").getJSONArray("vms").getJSONObject(0).getString("vdu_type");
         } catch(Exception e) {
             LOG.error("get vdu_type failed.", e);
@@ -330,13 +350,13 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
 
         String action = jsonObject.getString("action");
         JSONObject affectedVm = jsonObject.getJSONObject("affectedvm");
-        String vmId = affectedVm.getString("vmid");
+        String vmId = getNativeVmId(affectedVm.getString("vmid"), vnfmObjcet, vnfInstanceId);
         String path = String.format(ParamConstants.HEAL_VNF, vmId);
 
         JSONObject subJsonObject = new JSONObject();
         subJsonObject.put("type", "hard");
         subJsonObject.put("boot_mode", "");
-        if("vmReset".equals(action)) {
+        if("vmReset".equalsIgnoreCase(action)) {
             subJsonObject.put("action", "reset");
         }
         LOG.info("healVnf subJsonObject :" + subJsonObject);
@@ -354,6 +374,22 @@ public class VnfMgrVnfm implements InterfaceVnfMgr {
         return restJson;
     }
 
+    private String getNativeVmId(String vimVmId, JSONObject vnfmObjcet, String vnfInstanceId) {
+        JSONObject queryVms = ResultRequestUtil.call(vnfmObjcet,
+                String.format(ParamConstants.VNF_GET_VMINFO, vnfInstanceId), Constant.GET, null, Constant.CERTIFICATE);
+        LOG.info("function=getNativeVmId, msg=query vms result=" + queryVms);
+        JSONArray vms = queryVms.getJSONObject("data").getJSONArray("vms");
+        for(int i = 0; i < vms.size(); i++) {
+            JSONObject obj = vms.getJSONObject(i);
+            String tmpVimVmId = obj.getString("backend_id");
+            if(vimVmId.equalsIgnoreCase(tmpVimVmId)) {
+                return obj.getString("id");
+            }
+        }
+        LOG.error("function=getNativeVmId, msg=get native vmId failed.");
+        return "";
+    }
+
     public JSONObject getJobFromVnfm(JSONObject vnfmObjcet, String jobId) {
         LOG.warn("function=getJobFromVnfm, jobId: {}", jobId);