Removing jackson to mitigate cve-2017-4995
[vfc/nfvo/driver/vnfm/svnfm.git] / nokiav2 / driver / src / main / java / org / onap / vfc / nfvo / driver / vnfm / svnfm / nokia / onap / vfc / VfcGrantManager.java
index a268a73..01b7502 100644 (file)
@@ -21,12 +21,11 @@ import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
-import com.nokia.cbam.lcm.v32.ApiException;
 import com.nokia.cbam.lcm.v32.model.VnfInfo;
 import com.nokia.cbam.lcm.v32.model.VnfcResourceInfo;
+import java.util.*;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.IGrantManager;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.spring.Conditions;
-import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CatalogManager;
 import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider;
 import org.onap.vnfmdriver.model.*;
@@ -36,10 +35,9 @@ import org.springframework.context.annotation.Conditional;
 import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
 
-import java.util.*;
-
 import static com.nokia.cbam.lcm.v32.model.InstantiationState.INSTANTIATED;
-import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.fatalFailure;
+import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.buildFatalFailure;
+import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.child;
 import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider.NOKIA_LCM_API_VERSION;
 import static org.onap.vnfmdriver.model.OperationType.TERMINAL;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -77,23 +75,25 @@ public class VfcGrantManager implements IGrantManager {
 
     @Override
     public void requestGrantForScale(String vnfmId, String vnfId, String vimId, String onapCsarId, VnfScaleRequest request, String jobId) {
+        String cbamVnfdId;
         try {
-            OperationType operationType = ScaleDirection.IN.equals(request.getType()) ? OperationType.SCALEIN : OperationType.SCALEOUT;
-            GrantVNFRequest grantRequest = buildGrantRequest(vnfmId, vimId, onapCsarId, jobId, operationType);
-            com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION);
-            String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, vnf.getVnfdId());
-            Set<ResourceChange> resourceChanges = calculateResourceChangeDuringScaling(vnfdContent, request.getAspectId(), Integer.parseInt(request.getNumberOfSteps()));
-            if (request.getType() == ScaleDirection.IN) {
-                grantRequest.getRemoveResource().addAll(resourceChanges);
-
-            } else {
-                grantRequest.getAddResource().addAll(resourceChanges);
-            }
-            grantRequest.setVnfInstanceId(vnfId);
-            requestGrant(grantRequest);
-        } catch (ApiException e) {
-            fatalFailure(logger, "Unable to query VNF " + vnfId, e);
+            com.nokia.cbam.lcm.v32.model.VnfInfo vnf = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdGet(vnfId, NOKIA_LCM_API_VERSION).blockingFirst();
+            cbamVnfdId = vnf.getVnfdId();
+        } catch (Exception e) {
+            throw buildFatalFailure(logger, "Unable to query VNF " + vnfId, e);
+        }
+        OperationType operationType = ScaleDirection.IN.equals(request.getType()) ? OperationType.SCALEIN : OperationType.SCALEOUT;
+        GrantVNFRequest grantRequest = buildGrantRequest(vnfmId, vimId, onapCsarId, jobId, operationType);
+        String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, cbamVnfdId);
+        Set<ResourceChange> resourceChanges = calculateResourceChangeDuringScaling(vnfdContent, request.getAspectId(), Integer.parseInt(request.getNumberOfSteps()));
+        if (request.getType() == ScaleDirection.IN) {
+            grantRequest.getRemoveResource().addAll(resourceChanges);
+
+        } else {
+            grantRequest.getAddResource().addAll(resourceChanges);
         }
+        grantRequest.setVnfInstanceId(vnfId);
+        requestGrant(grantRequest);
     }
 
     @Override
@@ -102,23 +102,28 @@ public class VfcGrantManager implements IGrantManager {
             GrantVNFRequest grantRequest;
             try {
                 grantRequest = buildGrantRequest(vnfmId, vimId, onapVnfdId, jobId, TERMINAL);
-                if (vnf.getInstantiatedVnfInfo().getVnfcResourceInfo() != null) {
-                    for (VnfcResourceInfo vnfc : vnf.getInstantiatedVnfInfo().getVnfcResourceInfo()) {
-                        ResourceChange resourceChange = new ResourceChange();
-                        grantRequest.getRemoveResource().add(resourceChange);
-                        resourceChange.setVdu(vnfc.getVduId());
-                        resourceChange.setType(ChangeType.VDU);
-                        resourceChange.setResourceDefinitionId(UUID.randomUUID().toString());
-                    }
-                }
                 grantRequest.setVnfInstanceId(vnfId);
+                addVnfcsToGrant(vnf, grantRequest);
             } catch (Exception e) {
-                throw fatalFailure(logger, "Unable to prepare grant request for termination", e);
+                throw buildFatalFailure(logger, "Unable to prepare grant request for termination", e);
             }
             requestGrant(grantRequest);
         }
     }
 
+    private void addVnfcsToGrant(VnfInfo vnf, GrantVNFRequest grantRequest) {
+        //VNF is instantiated but has no VNFC
+        if (vnf.getInstantiatedVnfInfo().getVnfcResourceInfo() != null) {
+            for (VnfcResourceInfo vnfc : vnf.getInstantiatedVnfInfo().getVnfcResourceInfo()) {
+                ResourceChange resourceChange = new ResourceChange();
+                grantRequest.getRemoveResource().add(resourceChange);
+                resourceChange.setVdu(vnfc.getVduId());
+                resourceChange.setType(ChangeType.VDU);
+                resourceChange.setResourceDefinitionId(UUID.randomUUID().toString());
+            }
+        }
+    }
+
     @Override
     public GrantVNFResponseVim requestGrantForInstantiate(String vnfmId, String vnfId, String vimId, String onapVnfdId, String instantiationLevelId, String cbamVnfdContent, String jobId) {
         GrantVNFRequest grantRequest;
@@ -128,14 +133,19 @@ public class VfcGrantManager implements IGrantManager {
             grantRequest.setAddResource(new ArrayList<>());
             grantRequest.getAddResource().addAll(calculateResourceChangeDuringInstantiate(cbamVnfdContent, instantiationLevelId));
         } catch (Exception e) {
-            throw fatalFailure(logger, "Unable to prepare grant request for instantiation", e);
+            throw buildFatalFailure(logger, "Unable to prepare grant request for instantiation", e);
         }
         return requestGrant(grantRequest);
     }
 
     private GrantVNFRequest buildGrantRequest(String vnfmId, String vimId, String onapCsarId, String jobId, OperationType operationType) {
-        //FIXME the vimId should not be required for grant request see VFC-603 issue
         GrantVNFRequest grantVNFRequest = new GrantVNFRequest();
+        //FIXME
+        //Currently the grant request sent to VF-C must contain the VIM identifier in the
+        //grant response (normally in ETSI VIM identifier is received in the grant response
+        //from ETSI orchestrator the vimId parameter should be removed from this POJO
+        //to be able to fix this https://jira.onap.org/browse/VFC-603 must be solved
+        //the vimId should be removed from the AdditionalGrantParams structure
         grantVNFRequest.setAdditionalParam(new AdditionalGrantParams(vnfmId, vimId));
         grantVNFRequest.setVnfDescriptorId(onapCsarId);
         grantVNFRequest.setJobId(jobId);
@@ -147,19 +157,19 @@ public class VfcGrantManager implements IGrantManager {
 
     private GrantVNFResponseVim requestGrant(GrantVNFRequest grantRequest) {
         try {
-            return vfcRestApiProvider.getNsLcmApi().grantvnf(grantRequest).getVim();
-        } catch (org.onap.vnfmdriver.ApiException e) {
-            throw fatalFailure(logger, "Unable to request grant", e);
+            return vfcRestApiProvider.getNsLcmApi().grantvnf(grantRequest).execute().body().getVim();
+        } catch (Exception e) {
+            throw buildFatalFailure(logger, "Unable to request grant", e);
         }
     }
 
     private Set<ResourceChange> calculateResourceChangeDuringInstantiate(String vnfdContent, String instantiationLevelId) {
         JsonObject root = new Gson().toJsonTree(new Yaml().load(vnfdContent)).getAsJsonObject();
-        JsonObject capabilities = CbamUtils.child(CbamUtils.child(CbamUtils.child(root, "topology_template"), "substitution_mappings"), "capabilities");
-        JsonObject deploymentFlavorProperties = CbamUtils.child(CbamUtils.child(capabilities, "deployment_flavour"), "properties");
-        JsonObject instantiationLevels = CbamUtils.child(deploymentFlavorProperties, "instantiation_levels");
+        JsonObject capabilities = child(child(child(root, "topology_template"), "substitution_mappings"), "capabilities");
+        JsonObject deploymentFlavorProperties = child(child(capabilities, "deployment_flavour"), "properties");
+        JsonObject instantiationLevels = child(deploymentFlavorProperties, "instantiation_levels");
         Set<ResourceChange> resourceChanges = new HashSet<>();
-        for (Map.Entry<String, JsonElement> vdu_level : CbamUtils.child(CbamUtils.child(instantiationLevels, instantiationLevelId), ("vdu_levels")).entrySet()) {
+        for (Map.Entry<String, JsonElement> vdu_level : child(child(instantiationLevels, instantiationLevelId), ("vdu_levels")).entrySet()) {
             JsonElement numberOfInstances = vdu_level.getValue().getAsJsonObject().get("number_of_instances");
             for (int i = 0; i < numberOfInstances.getAsLong(); i++) {
                 ResourceChange resourceChange = new ResourceChange();
@@ -175,11 +185,11 @@ public class VfcGrantManager implements IGrantManager {
     private Set<ResourceChange> calculateResourceChangeDuringScaling(String vnfdContent, String aspectId, int steps) {
         JsonObject root = new Gson().toJsonTree(new Yaml().load(vnfdContent)).getAsJsonObject();
         Set<ResourceChange> resourceChanges = new HashSet<>();
-        JsonArray policies = CbamUtils.child(root, "topology_template").getAsJsonObject().get("policies").getAsJsonArray();
+        JsonArray policies = child(root, "topology_template").getAsJsonObject().get("policies").getAsJsonArray();
         for (JsonElement policy : policies) {
-            if (policy.getAsJsonObject().entrySet().iterator().next().getKey().equals("heat_mapping")) {
+            if ("heat_mapping".equals(policy.getAsJsonObject().entrySet().iterator().next().getKey())) {
                 JsonObject aspects = policy.getAsJsonObject().entrySet().iterator().next().getValue().getAsJsonObject().get("properties").getAsJsonObject().get("aspects").getAsJsonObject();
-                JsonObject aspect = aspects.get(aspectId).getAsJsonObject();
+                JsonObject aspect = child(aspects, aspectId);
                 if (aspect.has("vdus")) {
                     addChangesForAspect(steps, resourceChanges, aspect);
                 }
@@ -227,11 +237,6 @@ public class VfcGrantManager implements IGrantManager {
          * @return the identifier of the VIM for which the grant is requested
          */
         public String getVimId() {
-            //FIXME
-            //Currently the grant request sent to VF-C must contain the VIM identifier in the
-            //grant response (normally in ETSI VIM identifier is received in the grant response
-            //from ETSI orchestrator the vimId parameter should be removed from this POJO
-            //to be able to fix this https://jira.onap.org/browse/VFC-603 must be solved
             return vimId;
         }
     }