aboutsummaryrefslogtreecommitdiffstats
path: root/adapters/mso-openstack-adapters/src/main
diff options
context:
space:
mode:
authorEric Multanen <eric.w.multanen@intel.com>2018-10-01 18:53:43 -0700
committerEric Multanen <eric.w.multanen@intel.com>2018-10-02 00:04:56 -0700
commit6bfb4b9a77b8ed2ebf94c9e8c1ad683b211e680d (patch)
treef98962314ae9b00eaa076c78569e26282a03a64d /adapters/mso-openstack-adapters/src/main
parent170400b8a2bb2c6fe424aa8853cb377c62edfc43 (diff)
Take generic VNF ID and vfModule ID from request
In createVfModule (for multicloud adapter), take the generic VNF ID and vfModuleId from the Web service request. Change-Id: I092e081fef2ccc70c9b71dd6d75bb038c5663fef Issue-ID: SO-1082 Signed-off-by: Eric Multanen <eric.w.multanen@intel.com>
Diffstat (limited to 'adapters/mso-openstack-adapters/src/main')
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java14
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java203
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java154
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java10
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java28
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java40
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java20
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java28
8 files changed, 265 insertions, 232 deletions
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java
index 5efcc2c90d..7c49c9f948 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapter.java
@@ -7,9 +7,9 @@
* 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.
@@ -47,8 +47,8 @@ public interface MsoVnfAdapter
@WebParam(name="tenantId") @XmlElement(required=true) String tenantId,
@WebParam(name="vnfType") @XmlElement(required=true) String vnfType,
@WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion,
- @WebParam(name="vnfName") @XmlElement(required=true) String vnfName,
- @WebParam(name="requestType") @XmlElement(required=false) String requestType,
+ @WebParam(name="vnfName") @XmlElement(required=true) String vnfName,
+ @WebParam(name="requestType") @XmlElement(required=false) String requestType,
@WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId,
@WebParam(name="inputs") Map<String,String> inputs,
@WebParam(name="failIfExists") Boolean failIfExists,
@@ -102,8 +102,10 @@ public interface MsoVnfAdapter
@WebParam(name="tenantId") @XmlElement(required=true) String tenantId,
@WebParam(name="vnfType") @XmlElement(required=true) String vnfType,
@WebParam(name="vnfVersion") @XmlElement(required=false) String vnfVersion,
- @WebParam(name="vnfName") @XmlElement(required=true) String vnfName,
- @WebParam(name="requestType") @XmlElement(required=false) String requestType,
+ @WebParam(name="genericVnfId") @XmlElement(required=true) String genericVnfId,
+ @WebParam(name="vnfName") @XmlElement(required=true) String vnfName,
+ @WebParam(name="vfModuleId") @XmlElement(required=true) String vfModuleId,
+ @WebParam(name="requestType") @XmlElement(required=false) String requestType,
@WebParam(name="volumeGroupHeatStackId") @XmlElement(required=false) String volumeGroupHeatStackId,
@WebParam(name="baseVfHeatStackId") @XmlElement(required=false) String baseVfHeatStackId,
@WebParam(name = "modelCustomizationUuid") @XmlElement(required = false) String modelCustomizationUuid,
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
index 0d7a739d36..19a41ad7a8 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfAdapterImpl.java
@@ -8,9 +8,9 @@
* 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.
@@ -89,10 +89,10 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
@Autowired
private CloudConfig cloudConfig;
-
+
@Autowired
private Environment environment;
-
+
private static final String MSO_CONFIGURATION_ERROR = "MsoConfigurationError";
private static final String VNF_ADAPTER_SERVICE_NAME = "MSO-BPMN:MSO-VnfAdapter.";
private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA,MsoVnfAdapterImpl.class);
@@ -103,21 +103,21 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
private static final String VALET_ENABLED = "org.onap.so.adapters.vnf.valet_enabled";
private static final String FAIL_REQUESTS_ON_VALET_FAILURE = "org.onap.so.adapters.vnf.fail_requests_on_valet_failure";
private static final String SUCCESS_MSG = "Successfully received response from Open Stack";
-
+
@Autowired
private VFModuleCustomizationRepository vfModuleCustomRepo;
-
-
+
+
@Autowired
private VnfResourceRepository vnfResourceRepo;
-
+
@Autowired
private MsoHeatUtilsWithUpdate heatU;
@Autowired
private MsoHeatUtils heat;
@Autowired
private ValetClient vci;
-
+
/**
* DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL.
* @see MsoVnfAdapterImpl#MsoVnfAdapterImpl(MsoPropertiesFactory, CloudConfigFactory)
@@ -126,7 +126,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// Do nothing
//DO NOT use that constructor to instantiate this class, the msoPropertiesfactory will be NULL.
}
-
+
/**
* Health Check web method. Does nothing but return to show the adapter is deployed.
*/
@@ -188,6 +188,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
Holder <String> vnfId,
Holder <Map <String, String>> outputs,
Holder <VnfRollback> rollback) throws VnfException {
+ // parameters used for multicloud adapter
+ String genericVnfId = "";
+ String vfModuleId = "";
// Create a hook here to catch shortcut createVf requests:
if (requestType != null && requestType.startsWith("VFMOD")) {
LOGGER.debug("Calling createVfModule from createVnf -- requestType=" + requestType);
@@ -207,7 +210,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
tenantId,
vnfType,
vnfVersion,
+ genericVnfId,
vnfName,
+ vfModuleId,
newRequestType,
vfVolGroupHeatStackId,
vfBaseHeatStackId,
@@ -229,22 +234,24 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
if (requestType != null) {
newRequestTypeSb.append(requestType);
}
- this.createVfModule(cloudSiteId,
+ this.createVfModule(cloudSiteId,
tenantId,
- vnfType,
- vnfVersion,
+ vnfType,
+ vnfVersion,
+ genericVnfId,
vnfName,
- newRequestTypeSb.toString(),
- vfVolGroupHeatStackId,
- vfBaseHeatStackId,
+ vfModuleId,
+ newRequestTypeSb.toString(),
+ vfVolGroupHeatStackId,
+ vfBaseHeatStackId,
null,
- inputs,
- failIfExists,
+ inputs,
+ failIfExists,
backout,
enableBridge,
- msoRequest,
- vnfId,
- outputs,
+ msoRequest,
+ vnfId,
+ outputs,
rollback);
return;
// End createVf shortcut
@@ -497,7 +504,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug(" HeatBridgeMain.py failed for unknown reasons! " + e);
return false;
}
- }
+ }
private String convertNode(final JsonNode node) {
try {
@@ -565,7 +572,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
String tenantId,
String vnfType,
String vnfVersion,
+ String genericVnfName,
String vnfName,
+ String vfModuleId,
String requestType,
String volumeGroupHeatStackId,
String baseVfHeatStackId,
@@ -730,8 +739,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug(error);
throw new VnfException (error, MsoExceptionCategory.USERDATA);
} else {
- LOGGER.debug("Found nested volume heat stack - copying values to inputs *later*");
- nestedVolumeOutputs = nestedHeatStack.getOutputs();
+ LOGGER.debug("Found nested volume heat stack - copying values to inputs *later*");
+ nestedVolumeOutputs = nestedHeatStack.getOutputs();
}
}
@@ -762,14 +771,14 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug(error);
throw new VnfException (error, MsoExceptionCategory.USERDATA);
} else {
- LOGGER.debug("Found nested base heat stack - these values will be copied to inputs *later*");
- baseStackOutputs = nestedBaseHeatStack.getOutputs();
+ LOGGER.debug("Found nested base heat stack - these values will be copied to inputs *later*");
+ baseStackOutputs = nestedBaseHeatStack.getOutputs();
}
}
// Ready to deploy the new VNF
-
+
try {
// Retrieve the VF
@@ -784,7 +793,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
vf=vfmc.getVfModule();
else
vf=null;
-
+
// 1702 - this will be the new way going forward. We find the vf by mcu - otherwise, code is the same.
if (vf == null) {
LOGGER.debug("Unable to find vfModuleCust with modelCustomizationUuid=" + mcu);
@@ -806,12 +815,12 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
else { // This is to support gamma only - get info from vnf_resource table
if (vfVersion != null && !vfVersion.isEmpty()) {
vnfResource = vnfResourceRepo.findByModelNameAndModelVersion(vnfType, vnfVersion);
} else {
- vnfResource = vnfResourceRepo.findByModelName(vnfType);
+ vnfResource = vnfResourceRepo.findByModelName(vnfType);
}
if (vnfResource == null) {
String error = "Create VNF: Unknown VNF Type: " + vnfType;
@@ -828,7 +837,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
//1607 - Add version check
// First - see if it's in the VnfResource record
// if we have a vf Module - then we have to query to get the VnfResource record.
- if (!oldWay && vf.getVnfResources() != null) {
+ if (!oldWay && vf.getVnfResources() != null) {
vnfResource = vf.getVnfResources();
if (vnfResource == null) {
LOGGER.debug("Unable to find vnfResource will not error for now...");
@@ -874,7 +883,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} catch (Exception e) {
LOGGER.debug("An exception occured while trying to test AIC Version " + e.getMessage() + " - will default to not check",e);
doNotTest = true;
- }
+ }
if (!doNotTest) {
if ((moreThanMin || equalToMin) // aic >= min
&& (equalToMax || !(moreThanMax))) { //aic <= max
@@ -898,9 +907,9 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
// End Version check 1607
-
-
-
+
+
+
// By the time we get here - heatTemplateId and heatEnvtId should be populated (or null)
HeatTemplate heatTemplate = null;
HeatEnvironment heatEnvironment = null;
@@ -919,7 +928,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
if (heatTemplate == null) {
String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" + requestTypeString;
LOGGER.error(MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Template ID", vfModuleType, "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
@@ -930,18 +939,18 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("Got HEAT Template from DB: " + heatTemplate.getHeatTemplate());
}
-
+
if (oldWay) {
//This will handle old Gamma BrocadeVCE VNF
LOGGER.debug ("No environment parameter found for this Type " + vfModuleType);
- } else {
+ } else {
if (heatEnvironment == null) {
String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType;
LOGGER.error (MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Environment ID", "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, error);
// Alarm on this error, configuration must be fixed
alarmLogger.sendAlarm (MSO_CONFIGURATION_ERROR, MsoAlarmLogger.CRITICAL, error);
-
+
throw new VnfException (error, MsoExceptionCategory.INTERNAL);
} else {
LOGGER.debug ("Got Heat Environment from DB: " + heatEnvironment.getEnvironment());
@@ -950,8 +959,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug ("In MsoVnfAdapterImpl, about to call db.getNestedTemplates avec templateId="
+ heatTemplate.getArtifactUuid ());
-
-
+
+
List<HeatTemplate> nestedTemplates = heatTemplate.getChildTemplates();
Map <String, Object> nestedTemplatesChecked = new HashMap <> ();
if (nestedTemplates != null && !nestedTemplates.isEmpty()) {
@@ -965,11 +974,11 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug ("No nested templates found - nothing to do here");
nestedTemplatesChecked = null;
}
-
+
// 1510 - Also add the files: for any get_files associated with this vnf_resource_id
// *if* there are any
List<HeatFiles> heatFiles = null;
-
+
Map<String, Object> heatFilesObjects = new HashMap<>();
// Add ability to turn on adding get_files with volume requests (by property).
@@ -986,7 +995,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
if (!isVolumeRequest || addGetFilesOnVolumeReq) {
if (oldWay) {
- LOGGER.debug("In MsoVnfAdapterImpl createVfModule, this should not happen - old way is gamma only - no heat files!");
+ LOGGER.debug("In MsoVnfAdapterImpl createVfModule, this should not happen - old way is gamma only - no heat files!");
} else {
// 1607 - now use VF_MODULE_TO_HEAT_FILES table
LOGGER.debug("In MsoVnfAdapterImpl createVfModule, about to call db.getHeatFilesForVfModule avec vfModuleId="
@@ -999,7 +1008,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// Map<String, HeatFiles>
// this will match the nested templates format
LOGGER.debug("Contents of heatFiles - to be added to files: on stack");
-
+
for(HeatFiles heatfile : heatFiles){
LOGGER.debug(heatfile.getFileName() + " -> "
+ heatfile.getFileBody());
@@ -1038,10 +1047,10 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// Note this also removes any comments
MsoHeatEnvironmentEntry mhee = null;
if (heatEnvironment != null && heatEnvironment.getEnvironment() != null && heatEnvironment.getEnvironment().contains ("parameters:")) {
-
+
LOGGER.debug("Enhanced environment checking enabled - 1604");
StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment());
-
+
mhee = new MsoHeatEnvironmentEntry(sb);
StringBuilder sb2 = new StringBuilder("\nHeat Template Parameters:\n");
for (HeatTemplateParam parm : heatTemplate.getParameters()) {
@@ -1059,13 +1068,13 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
// New with 1707 - all variables converted to their native object types
Map<String, Object> goldenInputs = null;
-
+
LOGGER.debug("Now handle the inputs....first convert");
ArrayList<String> parameterNames = new ArrayList<>();
HashMap<String, String> aliasToParam = new HashMap<>();
StringBuilder sb = new StringBuilder("\nTemplate Parameters:\n");
int cntr = 0;
- try {
+ try {
for (HeatTemplateParam htp : heatTemplate.getParameters()) {
sb.append("param[" + cntr++ + "]=" + htp.getParamName());
parameterNames.add(htp.getParamName());
@@ -1079,7 +1088,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} catch (Exception e) {
LOGGER.debug("??An exception occurred trying to go through Parameter Names " + e.getMessage(),e);
}
- // Step 1 - convert what we got as inputs (Map<String, String>) to a
+ // Step 1 - convert what we got as inputs (Map<String, String>) to a
// Map<String, Object> - where the object matches the param type identified in the template
// This will also not copy over params that aren't identified in the template
goldenInputs = heat.convertInputMap(inputs, heatTemplate);
@@ -1088,8 +1097,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
heat.copyBaseOutputsToInputs(goldenInputs, baseStackOutputs, parameterNames, aliasToParam);
// Step 3 - add the volume inputs if any
LOGGER.debug("Now add in the volume stack outputs if applicable");
- heat.copyBaseOutputsToInputs(goldenInputs, nestedVolumeOutputs, parameterNames, aliasToParam);
-
+ heat.copyBaseOutputsToInputs(goldenInputs, nestedVolumeOutputs, parameterNames, aliasToParam);
+
for (HeatTemplateParam parm : heatTemplate.getParameters ()) {
LOGGER.debug ("Parameter:'" + parm.getParamName ()
+ "', isRequired="
@@ -1127,17 +1136,17 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("No missing parameters found - ok to proceed");
}
- // We can now remove the recreating of the ENV with only legit params - that check is done for us,
+ // We can now remove the recreating of the ENV with only legit params - that check is done for us,
// and it causes problems with json that has arrays
String newEnvironmentString = null;
if (mhee != null) {
newEnvironmentString = mhee.getRawEntry().toString();
}
-
+
// "Fix" the template if it has CR/LF (getting this from Oracle)
String template = heatTemplate.getHeatTemplate ();
template = template.replaceAll ("\r\n", "\n");
-
+
// Valet - 1806
boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false);
boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false);
@@ -1169,7 +1178,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
if (heat != null) {
LOGGER.debug("heat is not null!!");
-
+
heatStack = heat.createStack (cloudSiteId,
tenantId,
vfModuleName,
@@ -1242,7 +1251,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} catch (Exception e) {
LOGGER.debug("unhandled exception in create VF",e);
throw new VnfException("Exception during create VF " + e.getMessage());
- }
+ }
}
@Override
@@ -1274,7 +1283,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
// call method which handles the conversion from Map<String,Object> to Map<String,String> for our expected Object types
outputs.value = this.convertMapStringObjectToStringString(stackOutputs);
-
+
boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false);
boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false);
LOGGER.debug("isValetEnabled=" + isValetEnabled + ", failRequestsOnValetFailure=" + failRequestOnValetFailure);
@@ -1349,7 +1358,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
MsoLogger.setLogContext (msoRequest.getRequestId (), msoRequest.getServiceInstanceId ());
String serviceName = VNF_ADAPTER_SERVICE_NAME + methodName;
MsoLogger.setServiceName (serviceName);
-
+
StringBuilder sbInit = new StringBuilder();
sbInit.append("updateVfModule: \n");
sbInit.append("cloudSiteId=" + cloudSiteId + "\n");
@@ -1381,7 +1390,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
if (requestType != null && !"".equals(requestType)) {
requestTypeString = requestType;
}
-
+
String nestedStackId = null;
if (volumeGroupHeatStackId != null && !"".equals(volumeGroupHeatStackId) && !"null".equalsIgnoreCase(volumeGroupHeatStackId)) {
nestedStackId = volumeGroupHeatStackId;
@@ -1395,8 +1404,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// Create an empty set of inputs
inputs = new HashMap<>();
LOGGER.debug("inputs == null - setting to empty");
- }
-
+ }
+
boolean isBaseRequest = false;
boolean isVolumeRequest = false;
if (requestTypeString.startsWith("VOLUME")) {
@@ -1423,7 +1432,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
vfRollback.setIsBase(isBaseRequest);
vfRollback.setVfModuleStackId(vfModuleStackId);
vfRollback.setModelCustomizationUuid(mcu);
-
+
StackInfo heatStack = null;
long queryStackStarttime = System.currentTimeMillis ();
LOGGER.debug("UpdateVfModule - querying for " + vfModuleName);
@@ -1484,8 +1493,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
throw new VnfException (error, MsoExceptionCategory.USERDATA);
} else {
LOGGER.debug("Found nested heat stack - copying values to inputs *later*");
- nestedVolumeOutputs = nestedHeatStack.getOutputs();
- heat.copyStringOutputsToInputs(inputs, nestedHeatStack.getOutputs(), false);
+ nestedVolumeOutputs = nestedHeatStack.getOutputs();
+ heat.copyStringOutputsToInputs(inputs, nestedHeatStack.getOutputs(), false);
}
}
// handle a nestedBaseStackId if sent - this is the stack ID of the base.
@@ -1524,8 +1533,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// Ready to deploy the new VNF
-
-
+
+
// Retrieve the VF definition
VnfResource vnfResource = null;
VfModule vf = null;
@@ -1555,19 +1564,19 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
LOGGER.debug("DANGER WILL ROBINSON! This is unexpected - no nestedBaseStackId with this non-base request");
}
}
-
+
//1607 - Add version check
// First - see if it's in the VnfResource record
// if we have a vf Module - then we have to query to get the VnfResource record.
- if (vf.getModelUUID() != null) {
+ if (vf.getModelUUID() != null) {
String vnfResourceModelUuid = vf.getModelUUID();
-
+
vnfResource = vf.getVnfResources();
if (vnfResource == null) {
LOGGER.debug("Unable to find vnfResource at " + vnfResourceModelUuid + " will not error for now...");
}
}
-
+
String minVersionVnf = null;
String maxVersionVnf = null;
if (vnfResource != null) {
@@ -1588,7 +1597,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
if (minVersionVnf != null && maxVersionVnf != null) {
MavenLikeVersioning aicV = new MavenLikeVersioning();
-
+
// double check
if (this.cloudConfig != null) {
Optional<CloudSite> cloudSiteOpt = this.cloudConfig.getCloudSite(cloudSiteId);
@@ -1647,7 +1656,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
heatTemplate = vf.getModuleHeatTemplate();
heatEnvironment = vfmc.getHeatEnvironment();
}
-
+
if (heatTemplate == null) {
String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" + requestTypeString;
LOGGER.error(MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Template ID", vfModuleType, "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
@@ -1658,7 +1667,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("Got HEAT Template from DB: " + heatTemplate.getHeatTemplate());
}
-
+
if (heatEnvironment == null) {
String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType;
LOGGER.error (MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Environment ID", "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
@@ -1670,18 +1679,18 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("Got Heat Environment from DB: " + heatEnvironment.getEnvironment());
}
-
+
LOGGER.debug ("In MsoVnfAdapterImpl, about to call db.getNestedTemplates avec templateId="
+ heatTemplate.getArtifactUuid ());
-
-
+
+
List<HeatTemplate> nestedTemplates = heatTemplate.getChildTemplates();
Map <String, Object> nestedTemplatesChecked = new HashMap <> ();
if (nestedTemplates != null && !nestedTemplates.isEmpty()) {
// for debugging print them out
LOGGER.debug ("Contents of nestedTemplates - to be added to files: on stack:");
for (HeatTemplate entry : nestedTemplates) {
-
+
nestedTemplatesChecked.put (entry.getTemplateName(), entry.getTemplateBody());
LOGGER.debug (entry.getTemplateName() + " -> " + entry.getTemplateBody());
}
@@ -1875,8 +1884,8 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
paramList.add (parm.getParamName ());
}
-
-
+
+
if (missingParams != null) {
// Problem - missing one or more required parameters
if (checkRequiredParameters) {
@@ -1927,7 +1936,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
// "Fix" the template if it has CR/LF (getting this from Oracle)
String template = heatTemplate.getHeatTemplate ();
template = template.replaceAll ("\r\n", "\n");
-
+
boolean isValetEnabled = this.checkBooleanProperty(MsoVnfAdapterImpl.VALET_ENABLED, false);
boolean failRequestOnValetFailure = this.checkBooleanProperty(MsoVnfAdapterImpl.FAIL_REQUESTS_ON_VALET_FAILURE, false);
LOGGER.debug("isValetEnabled=" + isValetEnabled + ", failRequestsOnValetFailure=" + failRequestOnValetFailure);
@@ -1949,7 +1958,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
if (sendResponseToValet) {
goldenInputs = valetModifiedParamsHolder.value;
}
- }
+ }
// Have the tenant. Now deploy the stack itself
// Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions
@@ -1957,16 +1966,16 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
long updateStackStarttime = System.currentTimeMillis ();
try {
heatStack = heatU.updateStack(
- cloudSiteId,
- tenantId,
- vfModuleName,
+ cloudSiteId,
+ tenantId,
+ vfModuleName,
template,
- goldenInputs,
+ goldenInputs,
true,
- heatTemplate.getTimeoutMinutes(),
+ heatTemplate.getTimeoutMinutes(),
newEnvironmentString,
//heatEnvironmentString,
- nestedTemplatesChecked,
+ nestedTemplatesChecked,
heatFilesObjects
);
LOGGER.recordMetricEvent (updateStackStarttime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully receive response from Open Stack", "OpenStack", "UpdateStack", null);
@@ -1988,7 +1997,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
throw new VnfException (me);
}
-
+
// Reach this point if updateStack is successful.
// Populate remaining rollback info and response parameters.
@@ -2048,7 +2057,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
return property;
}
-
+
/*
* Helper method to combine getFiles and nestedTemplates in to a single Map
*/
@@ -2080,12 +2089,12 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
return files;
}
-
+
/*
* Valet Create request
*/
- private boolean valetCreateRequest(String cloudSiteId, String tenantId, Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked,
- String vfModuleName, boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, Map<String, Object> goldenInputs,
+ private boolean valetCreateRequest(String cloudSiteId, String tenantId, Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked,
+ String vfModuleName, boolean backout, HeatTemplate heatTemplate, String newEnvironmentString, Map<String, Object> goldenInputs,
MsoRequest msoRequest, Map<String, String> inputs, boolean failRequestOnValetFailure, Holder<Map<String, Object>> valetModifiedParamsHolder) throws VnfException {
boolean valetSucceeded = false;
String valetErrorMessage = "more detail not available";
@@ -2133,16 +2142,16 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
if (failRequestOnValetFailure && !valetSucceeded) {
// The valet request failed - and property says to fail the request
- //TODO Create a new exception class for valet?
+ //TODO Create a new exception class for valet?
throw new VnfException("A failure occurred with Valet: " + valetErrorMessage);
}
return valetSucceeded;
}
-
+
/*
* Valet update request
*/
-
+
private boolean valetUpdateRequest(String cloudSiteId, String tenantId,
Map<String, Object> heatFilesObjects, Map<String, Object> nestedTemplatesChecked, String vfModuleName,
boolean backout, HeatTemplate heatTemplate, String newEnvironmentString,
@@ -2201,7 +2210,7 @@ public class MsoVnfAdapterImpl implements MsoVnfAdapter {
}
return valetSucceeded;
}
-
+
/*
* Valet delete request
*/
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java
index 459ff2aeba..41da3c2988 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImpl.java
@@ -86,21 +86,21 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
private static final String ADD_GET_FILES_ON_VOLUME_REQ = "org.onap.so.adapters.vnf.addGetFilesOnVolumeReq";
private static final String CLOUDIFY_RESPONSE_SUCCESS="Successfully received response from Cloudify";
private static final String CLOUDIFY="Cloudify";
-
+
private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
-
+
@Autowired
protected CloudConfig cloudConfig;
-
+
@Autowired
private VFModuleCustomizationRepository vfModuleCustomRepo;
-
+
@Autowired
private Environment environment;
@Autowired
protected MsoKeystoneUtils keystoneUtils;
-
+
@Autowired
protected MsoCloudifyUtils cloudifyUtils;
/**
@@ -173,9 +173,9 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
/**
* This is the "Query VNF" web service implementation.
- *
+ *
* This really should be QueryVfModule, but nobody ever changed it.
- *
+ *
* For Cloudify, this will look up a deployment by its deployment ID, which is really the same
* as deployment name, since it assigned by the client when a deployment is created.
* Also, the input cloudSiteId is used only to identify which Cloudify instance to query,
@@ -212,7 +212,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
long subStartTime = System.currentTimeMillis ();
DeploymentInfo deployment = null;
-
+
try {
deployment = cloudifyUtils.queryDeployment(cloudSiteId, tenantId, vnfName);
LOGGER.recordMetricEvent (subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, CLOUDIFY_RESPONSE_SUCCESS, CLOUDIFY, "QueryDeployment", vnfName);
@@ -232,7 +232,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, error);
throw new VnfException (me);
}
-
+
if (deployment != null && deployment.getStatus() != DeploymentStatus.NOTFOUND) {
vnfExists.value = Boolean.TRUE;
status.value = deploymentStatusToVnfStatus(deployment);
@@ -253,7 +253,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
return;
}
-
+
/**
* This is the "Delete VNF" web service implementation.
* This function is now unsupported and will return an error.
@@ -266,7 +266,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
MsoRequest msoRequest) throws VnfException {
MsoLogger.setLogContext (msoRequest);
MsoLogger.setServiceName ("DeleteVnf");
-
+
// This operation is no longer supported at the VNF level. The adapter is only called to deploy modules.
LOGGER.debug ("DeleteVNF command attempted but not supported");
throw new VnfException ("DeleteVNF: Unsupported command", MsoExceptionCategory.USERDATA);
@@ -277,7 +277,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
* A rollback object is returned to the client in a successful creation
* response. The client can pass that object as-is back to the rollbackVnf
* operation to undo the creation.
- *
+ *
* TODO: This should be rollbackVfModule and/or rollbackVolumeGroup,
* but APIs were apparently never updated.
*/
@@ -297,7 +297,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Rollback VF Module - nothing to roll back");
return;
}
-
+
// Get the elements of the VnfRollback object for easier access
String cloudSiteId = rollback.getCloudSiteId ();
String tenantId = rollback.getTenantId ();
@@ -319,7 +319,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
// Go directly to Keystone until APIs could be updated to supply the name.
MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId);
String tenantName = (msoTenant != null? msoTenant.getTenantName() : tenantId);
-
+
// TODO: Get a reasonable timeout. Use a global property, or store the creation timeout in rollback object and use that.
deployment = cloudifyUtils.uninstallAndDeleteDeployment(cloudSiteId, tenantName, vfModuleId, 5);
LOGGER.debug("Rolled back deployment: " + deployment.getId());
@@ -344,7 +344,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
// DeploymentInfo object should be enhanced to report a better status internally.
DeploymentStatus status = deployment.getStatus();
String lastAction = deployment.getLastAction();
-
+
if (status == null || lastAction == null) {
return VnfStatus.UNKNOWN;
}
@@ -365,7 +365,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
return VnfStatus.UNKNOWN;
}
-
+
private Map <String, String> copyStringOutputs (Map <String, Object> stackOutputs) {
Map <String, String> stringOutputs = new HashMap <String, String> ();
for (String key : stackOutputs.keySet ()) {
@@ -425,9 +425,9 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
LOGGER.debug(sb.toString());
- return;
+ return;
}
-
+
private void sendMapToDebug(Map<String, String> inputs) {
int i = 0;
StringBuilder sb = new StringBuilder("inputs:");
@@ -537,7 +537,9 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
* Deprecated - should use modelCustomizationUuid
* @param vnfVersion VNF version key, should match a VNF definition in catalog DB
* Deprecated - VF Module versions also captured by modelCustomizationUuid
+ * @param genericVnfId Generic VNF ID
* @param vfModuleName Name to be assigned to the new VF Module
+ * @param vfModuleId Id of the new VF Module
* @param requestType Indicates if this is a Volume Group or Module request
* @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group
* to attach to a VF Module
@@ -558,7 +560,9 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
String tenantId,
String vfModuleType,
String vnfVersion,
+ String genericVnfId,
String vfModuleName,
+ String vfModuleId,
String requestType,
String volumeGroupId,
String baseVfModuleId,
@@ -575,7 +579,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
{
// Will capture execution time for metrics
long startTime = System.currentTimeMillis ();
-
+
MsoLogger.setLogContext (msoRequest);
MsoLogger.setServiceName ("CreateVfModule");
@@ -588,14 +592,14 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound, error);
throw new VnfException(error, MsoExceptionCategory.USERDATA);
}
-
+
// Clean up some inputs to make comparisons easier
if (requestType == null)
requestType = "";
-
+
if ("".equals(volumeGroupId) || "null".equals(volumeGroupId))
- volumeGroupId = null;
-
+ volumeGroupId = null;
+
if ("".equals(baseVfModuleId) || "null".equals(baseVfModuleId))
baseVfModuleId = null;
@@ -606,7 +610,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
} else {
this.sendMapToDebug(inputs);
}
-
+
// Check if this is for a "Volume" module
boolean isVolumeRequest = false;
if (requestType.startsWith("VOLUME")) {
@@ -626,7 +630,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
vfRollback.setBaseGroupHeatStackId(baseVfModuleId);
vfRollback.setModelCustomizationUuid(modelCustomizationUuid);
vfRollback.setMode("CFY");
-
+
rollback.value = vfRollback; // Default rollback - no updates performed
// Get the VNF/VF Module definition from the Catalog DB first.
@@ -638,7 +642,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
try {
vfmc = vfModuleCustomRepo.findByModelCustomizationUUID(modelCustomizationUuid);
-
+
if (vfmc == null) {
String error = "Create vfModule error: Unable to find vfModuleCust with modelCustomizationUuid=" + modelCustomizationUuid;
LOGGER.debug(error);
@@ -655,7 +659,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
vnfResource = vfmc.getVfModule().getVnfResources();
}
catch (Exception e) {
-
+
LOGGER.debug("unhandled exception in create VF - [Query]" + e.getMessage());
throw new VnfException("Exception during create VF " + e.getMessage());
}
@@ -669,10 +673,10 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
CloudSite cloudSite = cloudSiteOp.get();
MavenLikeVersioning aicV = new MavenLikeVersioning();
aicV.setVersion(cloudSite.getCloudVersion());
-
+
String vnfMin = vnfResource.getAicVersionMin();
String vnfMax = vnfResource.getAicVersionMax();
-
+
if ( (vnfMin != null && !(aicV.isMoreRecentThan(vnfMin) || aicV.isTheSameVersion(vnfMin))) ||
(vnfMax != null && aicV.isMoreRecentThan(vnfMax)))
{
@@ -683,10 +687,10 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
throw new VnfException(error, MsoExceptionCategory.USERDATA);
}
// End Version check
-
-
+
+
DeploymentInfo cloudifyDeployment = null;
-
+
// First, look up to see if the VF already exists.
long subStartTime1 = System.currentTimeMillis ();
@@ -705,13 +709,13 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
me.addContext ("CreateVFModule");
throw new VnfException (me);
}
-
+
// More precise handling/messaging if the Module already exists
if (cloudifyDeployment != null && !(cloudifyDeployment.getStatus () == DeploymentStatus.NOTFOUND)) {
// CREATED, INSTALLED, INSTALLING, FAILED, UNINSTALLING, UNKNOWN
DeploymentStatus status = cloudifyDeployment.getStatus();
LOGGER.debug ("Found Existing Deployment, status=" + status);
-
+
if (status == DeploymentStatus.INSTALLED) {
// fail - it exists
if (failIfExists != null && failIfExists) {
@@ -759,8 +763,8 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
throw new VnfAlreadyExists (vfModuleName, cloudSiteId, tenantId, cloudifyDeployment.getId());
}
}
-
-
+
+
// Collect outputs from Base Modules and Volume Modules
Map<String, Object> baseModuleOutputs = null;
Map<String, Object> volumeGroupOutputs = null;
@@ -784,7 +788,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
me.addContext ("CreateVFModule(QueryVolume)");
throw new VnfException (me);
}
-
+
if (volumeDeployment == null || volumeDeployment.getStatus() == DeploymentStatus.NOTFOUND) {
String error = "Create VFModule: Attached Volume Group DOES NOT EXIST " + volumeGroupId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ;
LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, volumeGroupId, cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(volume)", MsoLogger.ErrorCode.BusinessProcesssError, "Create VFModule: Attached Volume Group DOES NOT EXIST");
@@ -797,7 +801,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
this.sendMapToDebug(volumeGroupOutputs, "volumeGroupOutputs");
}
}
-
+
// If this is an Add-On Module, query the Base Module outputs
// Note: This will be performed whether or not the current request is for an
// Add-On Volume Group or Add-On VF Module
@@ -807,7 +811,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
vfRollback.setIsBase(true);
} else {
LOGGER.debug("This is an Add-On Module request");
-
+
// Add-On Modules should always have a Base, but just treat as a warning if not provided.
// Add-on Volume requests may or may not specify a base.
if (!isVolumeRequest && baseVfModuleId == null) {
@@ -827,12 +831,12 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, baseVfModuleId, cloudSiteId, tenantId, CLOUDIFY, "queryDeployment(Base)", MsoLogger.ErrorCode.DataError, "Exception - queryDeployment(Base)", me);
LOGGER.recordMetricEvent (subStartTime2, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, error, CLOUDIFY, "QueryDeployment(Base)", baseVfModuleId);
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, error);
-
+
// Convert to a generic VnfException
me.addContext ("CreateVFModule(QueryBase)");
throw new VnfException (me);
}
-
+
if (baseDeployment == null || baseDeployment.getStatus() == DeploymentStatus.NOTFOUND) {
String error = "Create VFModule: Base Module DOES NOT EXIST " + baseVfModuleId + " in " + cloudSiteId + "/" + tenantId + " USER ERROR" ;
LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR, baseVfModuleId, cloudSiteId, tenantId, error, CLOUDIFY, "queryDeployment(Base)", MsoLogger.ErrorCode.BusinessProcesssError, "Create VFModule: Base Module DOES NOT EXIST");
@@ -846,15 +850,15 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
// Ready to deploy the new VNF
-
+
// NOTE: For this section, heatTemplate is used for both HEAT templates and Cloudify blueprints.
// In final implementation (post-POC), the template object would either be generic or there would
// be a separate DB Table/Object for Blueprints.
-
+
// NOTE: The template is fixed for the VF Module. The environment is part of the customization.
HeatTemplate heatTemplate = null;
HeatEnvironment heatEnvironment = null;
@@ -865,7 +869,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
heatTemplate = vf.getModuleHeatTemplate();
heatEnvironment = vfmc.getHeatEnvironment();
}
-
+
if (heatTemplate == null) {
String error = "UpdateVF: No Heat Template ID defined in catalog database for " + vfModuleType + ", reqType=" + requestType;
LOGGER.error(MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Template ID", vfModuleType, "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
@@ -876,7 +880,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("Got HEAT Template from DB: " + heatTemplate.getHeatTemplate());
}
-
+
if (heatEnvironment == null) {
String error = "Update VNF: undefined Heat Environment. VF=" + vfModuleType;
LOGGER.error (MessageEnum.RA_VNF_UNKNOWN_PARAM, "Heat Environment ID", "OpenStack", "", MsoLogger.ErrorCode.DataError, error);
@@ -889,7 +893,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.debug ("Got Heat Environment from DB: " + heatEnvironment.getEnvironment());
}
-
+
try {
// All variables converted to their native object types
HashMap<String, Object> goldenInputs = new HashMap<String,Object>();
@@ -898,7 +902,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
// NOTE: SKIP THIS FOR CLOUDIFY for now. Just use what was passed in.
// This whole section needs to be rewritten.
Boolean skipInputChecks = false;
-
+
if (skipInputChecks) {
goldenInputs = new HashMap<String,Object>();
for (String key : inputs.keySet()) {
@@ -908,10 +912,10 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
else {
// Build maps for the parameters (including aliases) to simplify checks
HashMap<String, HeatTemplateParam> params = new HashMap<String, HeatTemplateParam>();
-
+
Set<HeatTemplateParam> paramSet = heatTemplate.getParameters();
LOGGER.debug("paramSet has " + paramSet.size() + " entries");
-
+
for (HeatTemplateParam htp : paramSet) {
params.put(htp.getParamName(), htp);
@@ -921,7 +925,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
params.put(alias, htp);
}
}
-
+
// First, convert all inputs to their "template" type
for (String key : inputs.keySet()) {
if (params.containsKey(key)) {
@@ -936,11 +940,11 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
extraInputs.add(key);
}
}
-
+
if (!extraInputs.isEmpty()) {
LOGGER.debug("Ignoring extra inputs: " + extraInputs);
}
-
+
// Next add in Volume Group Outputs if there are any. Copy directly without conversions.
if (volumeGroupOutputs != null && !volumeGroupOutputs.isEmpty()) {
for (String key : volumeGroupOutputs.keySet()) {
@@ -949,7 +953,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
// Next add in Base Module Outputs if there are any. Copy directly without conversions.
if (baseModuleOutputs != null && !baseModuleOutputs.isEmpty()) {
for (String key : baseModuleOutputs.keySet()) {
@@ -958,15 +962,15 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
// Last, add in values from the "environment" file.
// These are added to the inputs, since Cloudify doesn't pass an environment file like Heat.
-
+
// TODO: This may take a different form for Cloudify, but for now process it
// with Heat environment file syntax
StringBuilder sb = new StringBuilder(heatEnvironment.getEnvironment());
MsoHeatEnvironmentEntry mhee = new MsoHeatEnvironmentEntry (sb);
-
+
if (mhee.getParameters() != null) {
for (MsoHeatEnvironmentParameter envParam : mhee.getParameters()) {
// If this is a template input, copy to golden inputs
@@ -985,7 +989,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
this.sendMapToDebug(goldenInputs, "Final inputs sent to Cloudify");
-
+
// Check that required parameters have been supplied from any of the sources
String missingParams = null;
boolean checkRequiredParameters = true;
@@ -1000,8 +1004,8 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
// No problem - default is true
LOGGER.debug ("An exception occured trying to get property " + MsoVnfCloudifyAdapterImpl.CHECK_REQD_PARAMS, e);
}
-
-
+
+
for (HeatTemplateParam parm : heatTemplate.getParameters ()) {
if (parm.isRequired () && (!goldenInputs.containsKey (parm.getParamName ()))) {
LOGGER.debug ("adding to missing parameters list: " + parm.getParamName ());
@@ -1012,7 +1016,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
}
-
+
if (missingParams != null) {
if (checkRequiredParameters) {
// Problem - missing one or more required parameters
@@ -1026,7 +1030,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
} else {
LOGGER.debug ("No missing parameters found - ok to proceed");
}
-
+
} // NOTE: END PARAMETER CHECKING
// Ready to deploy the VF Module.
@@ -1034,7 +1038,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
String blueprintName = heatTemplate.getTemplateName();
String blueprint = heatTemplate.getTemplateBody();
String blueprintId = blueprintName;
-
+
// Use the main blueprint name as the blueprint ID (strip yaml extensions).
if (blueprintId.endsWith(".yaml"))
blueprintId = blueprintId.substring(0,blueprintId.lastIndexOf(".yaml"));
@@ -1046,7 +1050,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
Map<String,byte[]> blueprintFiles = new HashMap<String,byte[]>();
blueprintFiles.put(blueprintName, blueprint.getBytes());
-
+
// TODO: Implement nested blueprint logic based on Cloudify structures.
// For now, just use the Heat structures.
// The query returns a map of String->Object, where the map keys provide one layer of
@@ -1059,7 +1063,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
}
}
- // TODO: Implement file artifact logic based on Cloudify structures.
+ // TODO: Implement file artifact logic based on Cloudify structures.
// For now, just use the Heat structures.
List<HeatFiles> heatFiles = vf.getHeatFiles();
if (heatFiles != null) {
@@ -1067,22 +1071,22 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
blueprintFiles.put(heatFile.getFileName(), heatFile.getFileBody().getBytes());
}
}
-
+
// Upload the blueprint package
cloudifyUtils.uploadBlueprint(cloudSiteId, blueprintId, blueprintName, blueprintFiles, false);
}
}
-
+
catch (MsoException me) {
me.addContext ("CreateVFModule");
String error = "Create VF Module: Upload blueprint failed. Blueprint=" + blueprintName + ": " + me;
LOGGER.error (MessageEnum.RA_CREATE_VNF_ERR, vfModuleType, cloudSiteId, tenantId, CLOUDIFY, "", MsoLogger.ErrorCode.DataError, "MsoException - uploadBlueprint", me);
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, error);
throw new VnfException (me);
-
+
}
-
+
// Ignore MsoTenantNotFound and MsoStackAlreadyExists exceptions
// because we already checked for those.
long createDeploymentStarttime = System.currentTimeMillis ();
@@ -1091,11 +1095,11 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
// Go directly to Keystone until APIs could be updated to supply the name.
MsoTenant msoTenant = keystoneUtils.queryTenant(tenantId, cloudSiteId);
String tenantName = (msoTenant != null? msoTenant.getTenantName() : tenantId);
-
+
if (backout == null) {
backout = true;
}
-
+
cloudifyDeployment = cloudifyUtils.createAndInstallDeployment (cloudSiteId,
tenantName,
vfModuleName,
@@ -1104,7 +1108,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
true,
heatTemplate.getTimeoutMinutes (),
backout.booleanValue());
-
+
LOGGER.recordMetricEvent (createDeploymentStarttime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, CLOUDIFY_RESPONSE_SUCCESS, CLOUDIFY, "CreateDeployment", vfModuleName);
} catch (MsoException me) {
me.addContext ("CreateVFModule");
@@ -1126,7 +1130,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.debug("unhandled exception at cloudify.createAndInstallDeployment");
LOGGER.recordAuditEvent (startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError, "Exception while creating deployment with Cloudify");
throw new VnfException("Exception during cloudify.createAndInstallDeployment! " + e.getMessage());
- }
+ }
} catch (Exception e) {
LOGGER.debug("unhandled exception in create VF");
throw new VnfException("Exception during create VF " + e.getMessage());
@@ -1138,7 +1142,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
vfRollback.setVnfCreated (true);
vfRollback.setVnfId (cloudifyDeployment.getId());
vnfId.value = cloudifyDeployment.getId();
- outputs.value = copyStringOutputs (cloudifyDeployment.getOutputs ());
+ outputs.value = copyStringOutputs (cloudifyDeployment.getOutputs ());
rollback.value = vfRollback;
@@ -1157,7 +1161,7 @@ public class MsoVnfCloudifyAdapterImpl implements MsoVnfAdapter {
LOGGER.debug ("Deleting VF " + vnfName + " in " + cloudSiteId + "/" + tenantId);
// Will capture execution time for metrics
long startTime = System.currentTimeMillis ();
-
+
// 1702 capture the output parameters on a delete
// so we'll need to query first
DeploymentInfo deployment = null;
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java
index 9a64e62e57..269acb9d6f 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/MsoVnfPluginAdapterImpl.java
@@ -578,7 +578,9 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter {
* Deprecated - should use modelCustomizationUuid
* @param vnfVersion VNF version key, should match a VNF definition in catalog DB
* Deprecated - VF Module versions also captured by modelCustomizationUuid
+ * @param vnfId - VNF ID
* @param vfModuleName Name to be assigned to the new VF Module
+ * @param vfModuleId Id fo the new VF Module
* @param requestType Indicates if this is a Volume Group or Module request
* @param volumeGroupId Identifier (i.e. deployment ID) for a Volume Group
* to attach to a VF Module
@@ -599,7 +601,9 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter {
String tenantId,
String vfModuleType,
String vnfVersion,
+ String genericVnfId,
String vfModuleName,
+ String vfModuleId,
String requestType,
String volumeGroupId,
String baseVfModuleId,
@@ -984,15 +988,21 @@ public class MsoVnfPluginAdapterImpl implements MsoVnfAdapter {
if (!extraInputs.isEmpty()) {
// Add multicloud inputs
+ boolean multicloudInputs = false;
for (String key : MsoMulticloudUtils.MULTICLOUD_INPUTS) {
if (extraInputs.contains(key)) {
goldenInputs.put(key, inputs.get(key));
extraInputs.remove(key);
+ multicloudInputs = true;
if (extraInputs.isEmpty()) {
break;
}
}
}
+ if (multicloudInputs) {
+ goldenInputs.put(MsoMulticloudUtils.GENERIC_VNF_ID, genericVnfId);
+ goldenInputs.put(MsoMulticloudUtils.VF_MODULE_ID, vfModuleId);
+ }
LOGGER.debug("Ignoring extra inputs: " + extraInputs);
}
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java
index a941c7f083..b4adc1ade9 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRest.java
@@ -10,9 +10,9 @@
* 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.
@@ -85,7 +85,7 @@ public class VnfAdapterRest {
private static MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA, VnfAdapterRest.class);
private static final String TESTING_KEYWORD = "___TESTING___";
private static final String RESP=", resp=";
-
+
@Autowired
private MsoVnfAdapterImpl vnfAdapter;
//TODO Logging, SkipAAI, CREATED flags, Integrate with BPEL, Auth,
@@ -93,7 +93,7 @@ public class VnfAdapterRest {
@Autowired
@Qualifier("VnfBpel")
private Provider<BpelRestClient> bpelRestClientProvider;
-
+
/*
* URL:http://localhost:8080/vnfs/rest/v1/vnfs/<aaivnfid>/vf-modules/<aaimodid>
@@ -117,13 +117,13 @@ public class VnfAdapterRest {
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "DeleteVfModule",
+ @ApiOperation(value = "DeleteVfModule",
response = Response.class,
notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully deleted"),
@ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"),
- @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") })
public Response deleteVfModule (
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -238,12 +238,12 @@ public class VnfAdapterRest {
@GET
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "QueryVfModule",
+ @ApiOperation(value = "QueryVfModule",
response = Response.class,
notes = "Query an existing vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully queried"),
- @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") })
public Response queryVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -329,13 +329,13 @@ public class VnfAdapterRest {
@Path("{aaiVnfId}/vf-modules")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "CreateVfModule",
+ @ApiOperation(value = "CreateVfModule",
response = Response.class,
notes = "Create a vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully created"),
@ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") })
public Response createVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -442,7 +442,9 @@ public class VnfAdapterRest {
//req.getVnfType(),
completeVnfVfModuleType,
req.getVnfVersion(),
+ req.getVnfId(),
req.getVfModuleName(),
+ req.getVfModuleId(),
req.getRequestType(),
req.getVolumeGroupStackId(),
req.getBaseVfModuleStackId(),
@@ -481,7 +483,7 @@ public class VnfAdapterRest {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully updated"),
@ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") })
public Response updateVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -604,13 +606,13 @@ public class VnfAdapterRest {
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "RollbackVfModule",
+ @ApiOperation(value = "RollbackVfModule",
response = Response.class,
notes = "Rollback an existing vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"),
@ApiResponse(code = 202, message = "rollback vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") })
public Response rollbackVfModule (
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java
index 7f3bad5b8e..2c189fa8e8 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VnfAdapterRestV2.java
@@ -9,9 +9,9 @@
* 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.
@@ -74,7 +74,7 @@ import io.swagger.annotations.ApiResponses;
* Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default.
* For testing, call with cloudSiteId = ___TESTING___
* To test exceptions, also set tenantId = ___TESTING___
- *
+ *
* V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify)
* based on the target cloud.
*/
@@ -88,7 +88,7 @@ public class VnfAdapterRestV2 {
@Autowired
private VnfAdapterRestUtils vnfAdapterRestUtils;
-
+
@Autowired
@Qualifier("VnfBpel")
private Provider<BpelRestClient> bpelRestClientProvider;
@@ -115,13 +115,13 @@ public class VnfAdapterRestV2 {
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "DeleteVfModule",
+ @ApiOperation(value = "DeleteVfModule",
response = Response.class,
notes = "Delete an existing vnfModule, DeleteVfModuleRequest JSON is required")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully deleted"),
@ApiResponse(code = 202, message = "delete vnfModule request has been accepted (async only)"),
- @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "delete vnfModule failed, examine entity object for details") })
public Response deleteVfModule (
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -149,7 +149,7 @@ public class VnfAdapterRestV2 {
.entity("vfModuleId in URL does not match content")
.build();
}
-
+
DeleteVfModuleTask task = new DeleteVfModuleTask(req, mode);
if (req.isSynchronous()) {
// This is a synchronous request
@@ -243,12 +243,12 @@ public class VnfAdapterRestV2 {
@GET
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "QueryVfModule",
+ @ApiOperation(value = "QueryVfModule",
response = Response.class,
notes = "Query an existing vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully queried"),
- @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "query vnfModule failed, examine entity object for details") })
public Response queryVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -280,7 +280,7 @@ public class VnfAdapterRestV2 {
Holder<String> vfModuleId = new Holder<String>();
Holder<VnfStatus> status = new Holder<VnfStatus>();
Holder<Map<String, String>> outputs = new Holder <Map <String, String>> ();
-
+
// Support different Adapter Implementations
MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl(mode, cloudSiteId);
adapter.queryVnf (cloudSiteId, tenantId, vfModuleName, msoRequest, vnfExists, vfModuleId, status, outputs);
@@ -340,13 +340,13 @@ public class VnfAdapterRestV2 {
@Path("{aaiVnfId}/vf-modules")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "CreateVfModule",
+ @ApiOperation(value = "CreateVfModule",
response = Response.class,
notes = "Create a vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully created"),
@ApiResponse(code = 202, message = "create vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "create vnfModule failed, examine entity object for details") })
public Response createVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -364,7 +364,7 @@ public class VnfAdapterRestV2 {
.entity("vnfid in URL does not match content")
.build();
}
-
+
CreateVfModuleTask task = new CreateVfModuleTask(req, mode);
if (req.isSynchronous()) {
// This is a synchronous request
@@ -427,7 +427,7 @@ public class VnfAdapterRestV2 {
Holder <VnfRollback> vnfRollback = new Holder <VnfRollback> ();
String completeVnfVfModuleType = req.getVnfType() + "::" + req.getVfModuleType();
LOGGER.debug("completeVnfVfModuleType=" + completeVnfVfModuleType);
-
+
String cloudsiteId = req.getCloudSiteId();
if (cloudsiteId != null && cloudsiteId.equals(TESTING_KEYWORD)) {
String tenant = req.getTenantId();
@@ -446,7 +446,9 @@ public class VnfAdapterRestV2 {
req.getTenantId(),
completeVnfVfModuleType,
req.getVnfVersion(),
+ req.getVnfId(),
req.getVfModuleName(),
+ req.getVfModuleId(),
req.getRequestType(),
req.getVolumeGroupStackId(),
req.getBaseVfModuleStackId(),
@@ -484,7 +486,7 @@ public class VnfAdapterRestV2 {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully updated"),
@ApiResponse(code = 202, message = "update vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "update vnfModule failed, examine entity object for details") })
public Response updateVfModule(
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -613,13 +615,13 @@ public class VnfAdapterRestV2 {
@Path("{aaiVnfId}/vf-modules/{aaiVfModuleId}/rollback")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "RollbackVfModule",
+ @ApiOperation(value = "RollbackVfModule",
response = Response.class,
notes = "Rollback an existing vnfModule")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfModule has been successfully rolled back"),
@ApiResponse(code = 202, message = "rollback vnfModule request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "rollback vnfModule failed, examine entity object for details") })
public Response rollbackVfModule (
@ApiParam(value = "aaiVnfId", required = true)
@PathParam("aaiVnfId") String aaiVnfId,
@@ -686,11 +688,11 @@ public class VnfAdapterRestV2 {
VnfRollback vrb = new VnfRollback(
vmr.getVfModuleStackId(), vmr.getTenantId(), vmr.getCloudSiteId(), true, vmr.isVfModuleCreated(),
vmr.getMsoRequest(), null, null, null, null);
-
+
// Support multiple adapter implementations
MsoVnfAdapter adapter = vnfAdapterRestUtils.getVnfAdapterImpl (vmr.getMode(), vmr.getCloudSiteId());
adapter.rollbackVnf (vrb);
-
+
response = new RollbackVfModuleResponse(Boolean.TRUE, req.getMessageId());
} catch (VnfException e) {
LOGGER.error (MessageEnum.RA_ROLLBACK_VNF_ERR, "", "", MsoLogger.ErrorCode.BusinessProcesssError, "Exception - rollbackVfModule", e);
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java
index e7bf3f79ce..cbdd29d83c 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRest.java
@@ -10,9 +10,9 @@
* 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.
@@ -92,7 +92,7 @@ public class VolumeAdapterRest {
@Autowired
@Qualifier("VnfBpel")
private Provider<BpelRestClient> bpelRestClientProvider;
-
+
@POST
@Path("")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@@ -103,7 +103,7 @@ public class VolumeAdapterRest {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully created"),
@ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") })
public Response createVNFVolumes(
@ApiParam(value = "CreateVolumeGroupRequest", required = true)
final CreateVolumeGroupRequest req
@@ -199,7 +199,9 @@ public class VolumeAdapterRest {
//req.getVnfType(), //vnfType,
completeVnfVfModuleType,
req.getVnfVersion(), //vnfVersion,
+ "", // genericVnfId
req.getVolumeGroupName(), //vnfName,
+ "", // vfModuleid
"VOLUME", //requestType,
null, //volumeGroupHeatStackId,
null, //baseVfHeatStackId,
@@ -246,13 +248,13 @@ public class VolumeAdapterRest {
@Path("{aaiVolumeGroupId}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "DeleteVNFVolumes",
+ @ApiOperation(value = "DeleteVNFVolumes",
response = Response.class,
notes = "Delete an existing vnfVolume")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"),
@ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") })
public Response deleteVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -348,7 +350,7 @@ public class VolumeAdapterRest {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"),
@ApiResponse(code = 202, message = "rollback vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") })
public Response rollbackVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -447,7 +449,7 @@ public class VolumeAdapterRest {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully updated"),
@ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") })
public Response updateVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -576,7 +578,7 @@ public class VolumeAdapterRest {
notes = "Query an existing vnfVolume")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully queried"),
- @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") })
public Response queryVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java
index a1ff139707..445f0071a7 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/vnf/VolumeAdapterRestV2.java
@@ -9,9 +9,9 @@
* 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.
@@ -75,7 +75,7 @@ import io.swagger.annotations.ApiResponses;
* Both XML and JSON can be produced/consumed. Set Accept: and Content-Type: headers appropriately. XML is the default.
* For testing, call with cloudSiteId = ___TESTING___
* To test exceptions, also set tenantId = ___TESTING___
- *
+ *
* V2 incorporates run-time selection of sub-orchestrator implementation (Heat or Cloudify)
* based on the target cloud.
*/
@@ -88,14 +88,14 @@ public class VolumeAdapterRestV2 {
private static final String RESP=", resp=";
private static final String EXCEPTION="Exception :";
private static final String VOLUME_GROUPID_MISSING="VolumeGroupId in URL does not match content";
-
+
@Autowired
private VnfAdapterRestUtils vnfAdapterRestUtils;
@Autowired
@Qualifier("VnfBpel")
private Provider<BpelRestClient> bpelRestClientProvider;
-
+
@POST
@Path("")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@@ -106,7 +106,7 @@ public class VolumeAdapterRestV2 {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully created"),
@ApiResponse(code = 202, message = "create vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "create vnfVolume failed, examine entity object for details") })
public Response createVNFVolumes(
@ApiParam(value = "mode", required = true)
@QueryParam("mode") String mode,
@@ -192,7 +192,9 @@ public class VolumeAdapterRestV2 {
req.getTenantId(), //tenantId,
completeVnfVfModuleType, //vnfType,
req.getVnfVersion(), //vnfVersion,
+ "", // genericVnfId
req.getVolumeGroupName(), //vnfName,
+ "", // vfModuleId
"VOLUME", //requestType,
null, //volumeGroupHeatStackId,
null, //baseVfHeatStackId,
@@ -206,7 +208,7 @@ public class VolumeAdapterRestV2 {
outputs,
vnfRollback);
}
-
+
VolumeGroupRollback rb = new VolumeGroupRollback(
req.getVolumeGroupId(),
stackId.value,
@@ -215,7 +217,7 @@ public class VolumeAdapterRestV2 {
req.getCloudSiteId(),
req.getMsoRequest(),
req.getMessageId());
-
+
response = new CreateVolumeGroupResponse(
req.getVolumeGroupId(),
stackId.value,
@@ -241,13 +243,13 @@ public class VolumeAdapterRestV2 {
@Path("{aaiVolumeGroupId}")
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
- @ApiOperation(value = "DeleteVNFVolumes",
+ @ApiOperation(value = "DeleteVNFVolumes",
response = Response.class,
notes = "Delete an existing vnfVolume")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully deleted"),
@ApiResponse(code = 202, message = "delete vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "delete vnfVolume failed, examine entity object for details") })
public Response deleteVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -350,7 +352,7 @@ public class VolumeAdapterRestV2 {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully rolled back"),
@ApiResponse(code = 202, message = "rollback vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "rollback vnfVolume failed, examine entity object for details") })
public Response rollbackVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -452,7 +454,7 @@ public class VolumeAdapterRestV2 {
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully updated"),
@ApiResponse(code = 202, message = "update vnfVolume request has been successfully accepted (async only)"),
- @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "update vnfVolume failed, examine entity object for details") })
public Response updateVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,
@@ -575,7 +577,7 @@ public class VolumeAdapterRestV2 {
notes = "Query an existing vnfVolume")
@ApiResponses({
@ApiResponse(code = 200, message = "vnfVolume has been successfully queried"),
- @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") })
+ @ApiResponse(code = 500, message = "query vnfVolume failed, examine entity object for details") })
public Response queryVNFVolumes(
@ApiParam(value = "aaiVolumeGroupId", required = true)
@PathParam("aaiVolumeGroupId") String aaiVolumeGroupId,