diff options
Diffstat (limited to 'nokiav2/driver/src/main/java/org/onap')
8 files changed, 96 insertions, 29 deletions
diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java index 17060d67..123f263d 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/core/SelfRegistrationManager.java @@ -16,6 +16,7 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.nokia.cbam.lcn.v32.api.SubscriptionsApi; @@ -110,6 +111,7 @@ public class SelfRegistrationManager { * * @param vnfmId the identifier of the VNFM */ + @VisibleForTesting public void assureSubscription(String vnfmId) { if (!vnfmIdToSubscriptionId.containsKey(vnfmId)) { subscribeToLcn(vnfmId); diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java index d0df8a80..164d3a23 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/onap/direct/notification/GenericVnfManager.java @@ -101,6 +101,9 @@ public class GenericVnfManager extends AbstractManager { if (nsId.isPresent()) { addSingletonRelation(vnf.getRelationshipList(), linkToNs(nsId.get())); } + else{ + logger.warn("Not linking VNF with {} identifier to any NS", vnfId); + } aaiRestApiProvider.getNetworkApi().createOrUpdateNetworkGenericVnfsGenericVnf(vnf.getVnfId(), vnf).blockingFirst(); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java index 6a20bc20..406f0033 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapVnfdBuilder.java @@ -102,6 +102,10 @@ public class OnapVnfdBuilder { " name: " + properties.get("product_name").getAsString() + "\n" + " vnfdVersion: " + descriptorVersion + "\n\n" + "topology_template:\n" + + " inputs:\n" + + " etsi_config:\n" + + " type: string\n"+ + " description: The ETSI configuration\n"+ " node_templates:\n"; } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/CbamUtils.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/CbamUtils.java index b4e59151..116420d6 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/CbamUtils.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/util/CbamUtils.java @@ -81,7 +81,7 @@ public class CbamUtils { return new OperationMustBeAborted(msg); } - private static class OperationMustBeAborted extends RuntimeException { + public static class OperationMustBeAborted extends RuntimeException { OperationMustBeAborted(String msg) { super(msg); } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java index c0b5c5b8..5895108f 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/AdditionalParameters.java @@ -31,6 +31,7 @@ public class AdditionalParameters { private List<ExtManagedVirtualLinkData> extManagedVirtualLinks = new ArrayList<>(); private Map<String, List<NetworkAddress>> externalConnectionPointAddresses = new HashMap<>(); private List<ExtVirtualLinkData> extVirtualLinks = new ArrayList<>(); + private List<VnfProperty> extensions = new ArrayList<>(); private Object additionalParams; private String domain; @@ -158,6 +159,28 @@ public class AdditionalParameters { this.extVirtualLinks = extVirtualLinks; } + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + /** + * @return the extensions of the VNF modifiable attributes + */ + public List<VnfProperty> getExtensions() { + return extensions; + } + + /** + * @param extensions the extensions of the VNF modifiable attributes + */ + public void setExtensions(List<VnfProperty> extensions) { + this.extensions = extensions; + } + @Override //generated code. This is the recommended way to formulate equals @SuppressWarnings({"squid:S00122", "squid:S1067"}) @@ -174,20 +197,19 @@ public class AdditionalParameters { Objects.equals(extManagedVirtualLinks, that.extManagedVirtualLinks) && Objects.equals(externalConnectionPointAddresses, that.externalConnectionPointAddresses) && Objects.equals(extVirtualLinks, that.extVirtualLinks) && + Objects.equals(extensions, that.extensions) && Objects.equals(additionalParams, that.additionalParams); } @Override public int hashCode() { - - return Objects.hash(vimType, domain, instantiationLevel, computeResourceFlavours, zones, softwareImages, extManagedVirtualLinks, externalConnectionPointAddresses, extVirtualLinks, additionalParams); + return Objects.hash(vimType, domain, instantiationLevel, computeResourceFlavours, zones, softwareImages, extManagedVirtualLinks, externalConnectionPointAddresses, extVirtualLinks, extensions, additionalParams); } @Override public String toString() { return "AdditionalParameters{" + "vimType=" + vimType + - ", domain='" + domain + '\'' + ", instantiationLevel='" + instantiationLevel + '\'' + ", computeResourceFlavours=" + computeResourceFlavours + ", zones=" + zones + @@ -195,15 +217,9 @@ public class AdditionalParameters { ", extManagedVirtualLinks=" + extManagedVirtualLinks + ", externalConnectionPointAddresses=" + externalConnectionPointAddresses + ", extVirtualLinks=" + extVirtualLinks + + ", extensions=" + extensions + ", additionalParams=" + additionalParams + + ", domain='" + domain + '\'' + '}'; } - - public String getDomain() { - return domain; - } - - public void setDomain(String domain) { - this.domain = domain; - } }
\ No newline at end of file diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java index b826931e..5d65050c 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManager.java @@ -17,6 +17,7 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; +import com.google.common.base.Joiner; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -43,7 +44,9 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static com.google.common.base.Splitter.on; import static com.google.common.collect.Iterables.find; +import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Ordering.natural; import static com.google.common.collect.Sets.newHashSet; import static com.nokia.cbam.lcm.v32.model.InstantiationState.INSTANTIATED; import static com.nokia.cbam.lcm.v32.model.OperationStatus.FINISHED; @@ -67,6 +70,8 @@ public class LifecycleManager { */ public static final String EXTERNAL_VNFM_ID = "externalVnfmId"; public static final String SCALE_OPERATION_NAME = "scale"; + public static final String ETSI_CONFIG = "etsi_config"; + public static final String PROPERTIES = "properties"; private static Logger logger = getLogger(LifecycleManager.class); private final CatalogManager catalogManager; private final IGrantManager grantManager; @@ -214,6 +219,7 @@ public class LifecycleManager { @SuppressWarnings("squid:S00107") //wrapping them into an object makes the code less readable private void instantiateVnf(String vnfmId, List<ExtVirtualLinkInfo> extVirtualLinkInfos, AdditionalParameters additionalParameters, String onapVnfdId, String vnfmVnfdId, String vnfId, String vimId, JobInfo jobInfo) { String vnfdContent = catalogManager.getCbamVnfdContent(vnfmId, vnfmVnfdId); + addSpecifiedExtensions(vnfmId, vnfId, additionalParameters); GrantVNFResponseVim vim = grantManager.requestGrantForInstantiate(vnfmId, vnfId, vimId, onapVnfdId, additionalParameters.getInstantiationLevel(), vnfdContent, jobInfo.getJobId()); handleBackwardIncompatibleApiChangesInVfc(vim); VimInfo vimInfo = vimInfoProvider.getVimInfo(vim.getVimId()); @@ -291,9 +297,23 @@ public class LifecycleManager { } private AdditionalParameters convertInstantiationAdditionalParams(String csarId, Object additionalParams) { - JsonObject inputs = child(new Gson().toJsonTree(additionalParams).getAsJsonObject(), "inputs"); + JsonObject root = new Gson().toJsonTree(additionalParams).getAsJsonObject(); + if(root.has(PROPERTIES)){ + JsonObject properties = new JsonParser().parse(root.get(PROPERTIES).getAsString()).getAsJsonObject(); + if(properties.has(ETSI_CONFIG)){ + JsonElement etsiConfig = properties.get(ETSI_CONFIG); + return new Gson().fromJson(etsiConfig.getAsString(), AdditionalParameters.class); + } + else{ + logger.info("The instantiation input for VNF with {} CSAR id does not have an " + ETSI_CONFIG +" section", csarId); + } + } + else{ + logger.info("The instantiation input for VNF with {} CSAR id does not have a properties section", csarId); + } + JsonObject inputs = child(root, "inputs"); if (!inputs.has(csarId)) { - throw buildFatalFailure(logger, "The additional parameter section does not contain setting for VNF with " + csarId + " CSAR id"); + throw buildFatalFailure(logger, "The additional parameter section does not contain settings for VNF with " + csarId + " CSAR id"); } JsonElement additionalParamsForVnf = new JsonParser().parse(inputs.get(csarId).getAsString()); return new Gson().fromJson(additionalParamsForVnf, AdditionalParameters.class); @@ -302,7 +322,7 @@ public class LifecycleManager { private String getFlavorId(String vnfdContent) { JsonObject root = new Gson().toJsonTree(new Yaml().load(vnfdContent)).getAsJsonObject(); JsonObject capabilities = child(child(child(root, "topology_template"), "substitution_mappings"), "capabilities"); - JsonObject deploymentFlavorProperties = child(child(capabilities, "deployment_flavour"), "properties"); + JsonObject deploymentFlavorProperties = child(child(capabilities, "deployment_flavour"), PROPERTIES); return childElement(deploymentFlavorProperties, "flavour_id").getAsString(); } @@ -330,21 +350,37 @@ public class LifecycleManager { private void addVnfdIdToVnfModifyableAttributeExtensions(String vnfmId, String vnfId, String onapCsarId) { ModifyVnfInfoRequest request = new ModifyVnfInfoRequest(); + request.setExtensions(new ArrayList<>()); VnfProperty onapCsarIdProperty = new VnfProperty(); onapCsarIdProperty.setName(ONAP_CSAR_ID); onapCsarIdProperty.setValue(onapCsarId); - request.setExtensions(new ArrayList<>()); request.getExtensions().add(onapCsarIdProperty); VnfProperty externalVnfmIdProperty = new VnfProperty(); externalVnfmIdProperty.setName(EXTERNAL_VNFM_ID); externalVnfmIdProperty.setValue(vnfmId); request.getExtensions().add(externalVnfmIdProperty); - request.setVnfConfigurableProperties(null); + executeModifyVnfInfo(vnfmId, vnfId, request); + } + + private void executeModifyVnfInfo(String vnfmId, String vnfId, ModifyVnfInfoRequest request) { try { OperationExecution operationExecution = cbamRestApiProvider.getCbamLcmApi(vnfmId).vnfsVnfInstanceIdPatch(vnfId, request, NOKIA_LCM_API_VERSION).blockingFirst(); waitForOperationToFinish(vnfmId, vnfId, operationExecution.getId()); } catch (Exception e) { - throw buildFatalFailure(logger, "Unable to set the " + ONAP_CSAR_ID + " property on the VNF", e); + String properties = Joiner.on(",").join(natural().sortedCopy(transform(request.getExtensions(), VnfProperty::getName))); + throw buildFatalFailure(logger, "Unable to set the " + properties + " properties on the VNF with " + vnfId + " identifier", e); + } + } + + private void addSpecifiedExtensions(String vnfmId, String vnfId, AdditionalParameters additionalParameters){ + if(!additionalParameters.getExtensions().isEmpty()){ + ModifyVnfInfoRequest request = new ModifyVnfInfoRequest(); + request.setExtensions(new ArrayList<>()); + request.getExtensions().addAll(additionalParameters.getExtensions()); + executeModifyVnfInfo(vnfmId, vnfId, request); + } + else{ + logger.info("No extensions specified for VNF with {} identifier", vnfId); } } diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManagerForVfc.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManagerForVfc.java index d2378853..1bda9a3c 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManagerForVfc.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/LifecycleManagerForVfc.java @@ -17,7 +17,6 @@ package org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm; -import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.direct.GrantlessGrantManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc.VfcExternalSystemInfoProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.vfc.VfcGrantManager; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.notification.LifecycleChangeNotificationManagerForVfc; diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java index 9b497343..c4cd4342 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/vnfm/notification/LifecycleChangeNotificationManager.java @@ -28,6 +28,7 @@ import java.util.Optional; import java.util.Set; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.api.INotificationSender; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.onap.core.SelfRegistrationManager; +import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.OperationMustBeAborted; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.SystemFunctions; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.CbamRestApiProvider; import org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.vnfm.ILifecycleChangeNotificationManager; @@ -210,15 +211,20 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif JsonObject operationResult = root.getAsJsonObject().get("operationResult").getAsJsonObject(); if (isAbsent(operationResult, "cbam_pre") || isAbsent(operationResult, "cbam_post")) { - return handleFailure(operationExecution, null); + return handleFailure(operationExecution); } else { return of(new Gson().fromJson(operationResult, ReportedAffectedConnectionPoints.class)); } } else { - return handleFailure(operationExecution, null); + return handleFailure(operationExecution); } - } catch (Exception e) { - return handleFailure(operationExecution, e); + } + catch(OperationMustBeAborted handledFailuire){ + throw handledFailuire; + } + catch (Exception e) { + logger.warn("Unable to build affected connection points", e); + return toleratedFailure(); } } @@ -226,15 +232,16 @@ public class LifecycleChangeNotificationManager implements ILifecycleChangeNotif return !operationResult.has(key) || !operationResult.get(key).isJsonArray(); } - private Optional<ReportedAffectedConnectionPoints> handleFailure(OperationExecution operationExecution, Exception e) { + private Optional<ReportedAffectedConnectionPoints> handleFailure(OperationExecution operationExecution) { if (operationExecution.getStatus() == OperationStatus.FAILED) { - logger.warn("The operation failed and the affected connection points were not reported"); - return empty(); + return toleratedFailure(); } else { - if (e != null) { - throw buildFatalFailure(logger, PROBLEM, e); - } throw buildFatalFailure(logger, PROBLEM); } } + + private Optional<ReportedAffectedConnectionPoints> toleratedFailure() { + logger.warn("The operation failed and the affected connection points were not reported"); + return empty(); + } } |