summaryrefslogtreecommitdiffstats
path: root/asdc-controller/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'asdc-controller/src/main')
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/Application.java17
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/activity/DeployActivitySpecs.java85
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCConfiguration.java20
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java52
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java2
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java2
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java2
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/PnfResourceStructure.java6
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/ResourceStructure.java13
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java6
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/WorkflowArtifact.java65
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java12
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/WorkflowResource.java215
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java154
14 files changed, 506 insertions, 145 deletions
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
index 1f66291283..a05eeea466 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/Application.java
@@ -20,17 +20,25 @@
package org.onap.so.asdc;
+import javax.annotation.PostConstruct;
+import org.onap.so.asdc.activity.DeployActivitySpecs;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication(scanBasePackages = {"org.onap.so"})
@EnableScheduling
+@EnableJpaRepositories("org.onap.so.db.catalog.data.repository")
public class Application {
private static final String MSO_CONFIG_PATH = "mso.config.path";
private static final String LOGS_DIR = "logs_dir";
+ @Autowired
+ DeployActivitySpecs deployActivitySpecs;
+
private static void setLogsDir() {
if (System.getProperty(LOGS_DIR) == null) {
System.getProperties().setProperty(LOGS_DIR, "./logs/asdc/");
@@ -42,6 +50,15 @@ public class Application {
System.getProperties().setProperty(MSO_CONFIG_PATH, ".");
}
+ @PostConstruct
+ private void deployActivities() {
+ try {
+ deployActivitySpecs.deployActivities();
+ } catch (Exception e) {
+ }
+
+ }
+
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.getProperties().setProperty("mso.db", "MARIADB");
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/activity/DeployActivitySpecs.java b/asdc-controller/src/main/java/org/onap/so/asdc/activity/DeployActivitySpecs.java
index 46d0f78e35..87008f1d8f 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/activity/DeployActivitySpecs.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/activity/DeployActivitySpecs.java
@@ -20,14 +20,18 @@
package org.onap.so.asdc.activity;
-import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.onap.so.asdc.activity.beans.ActivitySpec;
-import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.asdc.activity.beans.Input;
+import org.onap.so.asdc.activity.beans.Output;
+import org.onap.so.db.catalog.beans.ActivitySpecActivitySpecCategories;
+import org.onap.so.db.catalog.beans.ActivitySpecActivitySpecParameters;
+import org.onap.so.db.catalog.beans.ActivitySpecParameters;
+import org.onap.so.db.catalog.data.repository.ActivitySpecRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,17 +43,24 @@ public class DeployActivitySpecs {
@Autowired
private Environment env;
+ @Autowired
+ private ActivitySpecRepository activitySpecRepository;
+
private static final String SDC_ENDPOINT = "mso.asdc.config.activity.endpoint";
+ private static final String DIRECTION_INPUT = "input";
+ private static final String DIRECTION_OUTPUT = "output";
protected static final Logger logger = LoggerFactory.getLogger(DeployActivitySpecs.class);
- public void deployActivities() throws Exception {
- String hostname = this.env.getProperty(SDC_ENDPOINT);
- List<ActivitySpec> activitySpecs = new ArrayList<ActivitySpec>();
- // Initialize activitySpecs from Catalog DB
-
- for (ActivitySpec activitySpec : activitySpecs) {
+ public void deployActivities() throws Exception {
+ String hostname = env.getProperty(SDC_ENDPOINT);
+ if (hostname == null || hostname.isEmpty()) {
+ return;
+ }
+ List<org.onap.so.db.catalog.beans.ActivitySpec> activitySpecsFromCatalog = activitySpecRepository.findAll();
+ for (org.onap.so.db.catalog.beans.ActivitySpec activitySpecFromCatalog : activitySpecsFromCatalog) {
+ ActivitySpec activitySpec = mapActivitySpecFromCatalogToSdc(activitySpecFromCatalog);
String activitySpecId = activitySpecsActions.createActivitySpec(hostname, activitySpec);
if (activitySpecId != null) {
logger.info("{} {}", "Successfully created activitySpec", activitySpec.getName());
@@ -64,4 +75,62 @@ public class DeployActivitySpecs {
}
}
}
+
+ public ActivitySpec mapActivitySpecFromCatalogToSdc(
+ org.onap.so.db.catalog.beans.ActivitySpec activitySpecFromCatalog) {
+ ActivitySpec activitySpec = new ActivitySpec();
+ activitySpec.setName(activitySpecFromCatalog.getName());
+ activitySpec.setDescription(activitySpecFromCatalog.getDescription());
+ mapCategoryList(activitySpecFromCatalog.getActivitySpecActivitySpecCategories(), activitySpec);
+ mapInputsAndOutputs(activitySpecFromCatalog.getActivitySpecActivitySpecParameters(), activitySpec);
+ return activitySpec;
+ }
+
+ private void mapCategoryList(List<ActivitySpecActivitySpecCategories> activitySpecActivitySpecCategories,
+ ActivitySpec activitySpec) {
+ if (activitySpecActivitySpecCategories == null || activitySpecActivitySpecCategories.size() == 0) {
+ return;
+ }
+ List<String> categoryList = new ArrayList<String>();
+ for (ActivitySpecActivitySpecCategories activitySpecCat : activitySpecActivitySpecCategories) {
+ if (activitySpecCat != null) {
+ if (activitySpecCat.getActivitySpecCategories() != null) {
+ categoryList.add(activitySpecCat.getActivitySpecCategories().getName());
+ }
+ }
+ }
+ activitySpec.setCategoryList(categoryList);
+ }
+
+ private void mapInputsAndOutputs(List<ActivitySpecActivitySpecParameters> activitySpecActivitySpecParameters,
+ ActivitySpec activitySpec) {
+ if (activitySpecActivitySpecParameters == null || activitySpecActivitySpecParameters.size() == 0) {
+ return;
+ }
+ List<Input> inputs = new ArrayList<Input>();
+ List<Output> outputs = new ArrayList<Output>();
+ for (ActivitySpecActivitySpecParameters activitySpecParam : activitySpecActivitySpecParameters) {
+ if (activitySpecParam != null) {
+ if (activitySpecParam.getActivitySpecParameters() != null) {
+ ActivitySpecParameters activitySpecParameters = activitySpecParam.getActivitySpecParameters();
+ if (activitySpecParameters != null) {
+ if (activitySpecParameters.getDirection().equals(DIRECTION_INPUT)) {
+ Input input = new Input();
+ input.setName(activitySpecParameters.getName());
+ input.setType(activitySpecParameters.getType());
+ inputs.add(input);
+ } else if (activitySpecParameters.getDirection().equals(DIRECTION_OUTPUT)) {
+ Output output = new Output();
+ output.setName(activitySpecParameters.getName());
+ output.setType(activitySpecParameters.getType());
+ outputs.add(output);
+ }
+ }
+ }
+ }
+ }
+ activitySpec.setInputs(inputs);
+ activitySpec.setOutputs(outputs);
+ return;
+ }
}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCConfiguration.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCConfiguration.java
index 7d92c637ad..2eace7587f 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCConfiguration.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCConfiguration.java
@@ -47,24 +47,6 @@ public class ASDCConfiguration implements IConfiguration {
private String asdcControllerName;
- public static final String MSO_PROP_ASDC = "MSO_PROP_ASDC";
- public static final String PARAMETER_PATTERN = "asdc-connections";
- public static final String MSG_BUS_ADDRESS_ATTRIBUTE_NAME = "messageBusAddress";
- public static final String WATCHDOG_TIMEOUT_NAME = "watchDogTimeout";
-
- public static final String CONSUMER_GROUP_ATTRIBUTE_NAME = "consumerGroup";
- public static final String CONSUMER_ID_ATTRIBUTE_NAME = "consumerId";
- public static final String ENVIRONMENT_NAME_ATTRIBUTE_NAME = "environmentName";
- public static final String PASSWORD_ATTRIBUTE_NAME = "password";
- public static final String POLLING_INTERVAL_ATTRIBUTE_NAME = "pollingInterval";
- public static final String RELEVANT_ARTIFACT_TYPES_ATTRIBUTE_NAME = "relevantArtifactTypes";
- public static final String USER_ATTRIBUTE_NAME = "user";
- public static final String ASDC_ADDRESS_ATTRIBUTE_NAME = "asdcAddress";
- public static final String POLLING_TIMEOUT_ATTRIBUTE_NAME = "pollingTimeout";
- public static final String ACTIVATE_SERVER_TLS_AUTH = "activateServerTLSAuth";
- public static final String KEY_STORE_PASSWORD = "keyStorePassword";
- public static final String KEY_STORE_PATH = "keyStorePath";
-
public static final String HEAT = "HEAT";
public static final String HEAT_ARTIFACT = "HEAT_ARTIFACT";
public static final String HEAT_ENV = "HEAT_ENV";
@@ -73,7 +55,7 @@ public class ASDCConfiguration implements IConfiguration {
public static final String HEAT_VOL = "HEAT_VOL";
public static final String OTHER = "OTHER";
public static final String TOSCA_CSAR = "TOSCA_CSAR";
- public static final String WORKFLOWS = "Workflows";
+ public static final String WORKFLOW = "WORKFLOW";
public static final String VF_MODULES_METADATA = "VF_MODULES_METADATA";
private static final String[] SUPPORTED_ARTIFACT_TYPES =
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
index 57e9c173b9..9b838c4d98 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
@@ -47,6 +47,7 @@ import org.onap.sdc.api.results.IDistributionClientResult;
import org.onap.sdc.impl.DistributionClientFactory;
import org.onap.sdc.utils.DistributionActionResultEnum;
import org.onap.sdc.utils.DistributionStatusEnum;
+import org.onap.so.asdc.activity.DeployActivitySpecs;
import org.onap.so.asdc.client.exceptions.ASDCControllerException;
import org.onap.so.asdc.client.exceptions.ASDCDownloadException;
import org.onap.so.asdc.client.exceptions.ASDCParametersException;
@@ -57,7 +58,6 @@ import org.onap.so.asdc.installer.ResourceStructure;
import org.onap.so.asdc.installer.ResourceType;
import org.onap.so.asdc.installer.ToscaResourceStructure;
import org.onap.so.asdc.installer.VfResourceStructure;
-import org.onap.so.asdc.installer.bpmn.BpmnInstaller;
import org.onap.so.asdc.installer.heat.ToscaResourceInstaller;
import org.onap.so.asdc.tenantIsolation.DistributionStatus;
import org.onap.so.asdc.tenantIsolation.WatchdogDistribution;
@@ -89,9 +89,6 @@ public class ASDCController {
private ToscaResourceInstaller toscaInstaller;
@Autowired
- private BpmnInstaller bpmnInstaller;
-
- @Autowired
private WatchdogDistributionStatusRepository wdsRepo;
@Autowired
@@ -110,6 +107,9 @@ public class ASDCController {
@Autowired
private WatchdogDistribution wd;
+ @Autowired
+ DeployActivitySpecs deployActivitySpecs;
+
public int getNbOfNotificationsOngoing() {
return nbOfNotificationsOngoing;
}
@@ -655,6 +655,7 @@ public class ASDCController {
// For each artifact, create a structure describing the VFModule in a ordered flat level
ResourceStructure resourceStructure = null;
String msoConfigPath = getMsoConfigPath();
+ boolean hasVFResource = false;
ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(msoConfigPath);
boolean deploySuccessful = true;
String errorMessage = null;
@@ -667,9 +668,6 @@ public class ASDCController {
msoConfigPath + "/ASDC/" + iArtifact.getArtifactVersion() + "/" + iArtifact.getArtifactName();
File csarFile = new File(filePath);
String csarFilePath = csarFile.getAbsolutePath();
- if (bpmnInstaller.containsWorkflows(csarFilePath)) {
- bpmnInstaller.installBpmn(csarFilePath);
- }
for (IResourceInstance resource : iNotif.getResources()) {
@@ -678,7 +676,7 @@ public class ASDCController {
logger.info("Processing Resource Type: {}, Model UUID: {}", resourceType, resource.getResourceUUID());
- if ("VF".equals(resourceType) && !"Allotted Resource".equalsIgnoreCase(category)) {
+ if ("VF".equals(resourceType)) {
resourceStructure = new VfResourceStructure(iNotif, resource);
} else if ("PNF".equals(resourceType)) {
resourceStructure = new PnfResourceStructure(iNotif, resource);
@@ -696,8 +694,8 @@ public class ASDCController {
logger.debug("Processing Resource Type: " + resourceType + " and Model UUID: "
+ resourceStructure.getResourceInstance().getResourceUUID());
- if ("VF".equals(resourceType) && !"Allotted Resource".equalsIgnoreCase(category)) {
-
+ if ("VF".equals(resourceType)) {
+ hasVFResource = true;
for (IArtifactInfo artifact : resource.getArtifacts()) {
IDistributionClientDownloadResult resultArtifact =
this.downloadTheArtifact(artifact, iNotif.getDistributionID());
@@ -710,8 +708,15 @@ public class ASDCController {
.dumpVfModuleMetaDataList(((VfResourceStructure) resourceStructure)
.decodeVfModuleArtifact(resultArtifact.getArtifactPayload())));
}
- resourceStructure.addArtifactToStructure(distributionClient, artifact,
- resultArtifact);
+ if (!ASDCConfiguration.WORKFLOW.equals(artifact.getArtifactType())) {
+ resourceStructure.addArtifactToStructure(distributionClient, artifact,
+ resultArtifact);
+ } else {
+ writeArtifactToFile(artifact, resultArtifact);
+ logger.debug(
+ "Adding workflow artifact to structure: " + artifact.getArtifactName());
+ resourceStructure.addWorkflowArtifactToStructure(artifact, resultArtifact);
+ }
}
}
@@ -730,16 +735,19 @@ public class ASDCController {
logger.error("Exception occurred", e);
}
- // Deploy VF resource and artifacts
- logger.debug("Preparing to deploy Service: {}", iNotif.getServiceUUID());
- try {
- this.deployResourceStructure(resourceStructure, toscaResourceStructure);
- } catch (ArtifactInstallerException e) {
- deploySuccessful = false;
- errorMessage = e.getMessage();
- logger.error("Exception occurred", e);
- }
+ if (!hasVFResource) {
+
+ logger.debug("No resources found for Service: " + iNotif.getServiceUUID());
+ logger.debug("Preparing to deploy Service: {}", iNotif.getServiceUUID());
+ try {
+ this.deployResourceStructure(resourceStructure, toscaResourceStructure);
+ } catch (ArtifactInstallerException e) {
+ deploySuccessful = false;
+ errorMessage = e.getMessage();
+ logger.error("Exception occurred", e);
+ }
+ }
this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deploySuccessful,
errorMessage);
}
@@ -797,7 +805,7 @@ public class ASDCController {
"processCsarServiceArtifacts", ErrorCode.BusinessProcesssError.getValue(),
"Exception in processCsarServiceArtifacts", e);
}
- } else if (artifact.getArtifactType().equals(ASDCConfiguration.WORKFLOWS)) {
+ } else if (artifact.getArtifactType().equals(ASDCConfiguration.WORKFLOW)) {
try {
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
index b3618a8095..f4cfb1361f 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ArtifactInfoImpl.java
@@ -23,9 +23,11 @@ package org.onap.so.asdc.client.test.emulators;
import java.util.ArrayList;
import java.util.List;
import org.onap.sdc.api.notification.IArtifactInfo;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.EqualsBuilder;
+@JsonIgnoreProperties(ignoreUnknown = true)
public class ArtifactInfoImpl implements IArtifactInfo {
private String artifactName;
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java
index f8d7bb09f5..c61306fb77 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/NotificationDataImpl.java
@@ -29,12 +29,14 @@ import org.onap.sdc.api.notification.INotificationData;
import org.onap.sdc.api.notification.IResourceInstance;
import org.springframework.stereotype.Component;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@Component
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE,
setterVisibility = Visibility.NONE)
+@JsonIgnoreProperties(ignoreUnknown = true)
public class NotificationDataImpl implements INotificationData {
@JsonProperty("distributionID")
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java
index 91597611fd..62d11ffec9 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/client/test/emulators/ResourceInfoImpl.java
@@ -27,7 +27,9 @@ import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.onap.sdc.api.notification.IArtifactInfo;
import org.onap.sdc.api.notification.IResourceInstance;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+@JsonIgnoreProperties(ignoreUnknown = true)
public class ResourceInfoImpl implements IResourceInstance {
public ResourceInfoImpl() {}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/PnfResourceStructure.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/PnfResourceStructure.java
index 8aa9684426..2a6e77ed40 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/PnfResourceStructure.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/PnfResourceStructure.java
@@ -39,6 +39,12 @@ public class PnfResourceStructure extends ResourceStructure {
}
@Override
+ public void addWorkflowArtifactToStructure(IArtifactInfo artifactinfo,
+ IDistributionClientDownloadResult clientResult) throws UnsupportedEncodingException {
+
+ }
+
+ @Override
public void prepareInstall() throws ArtifactInstallerException {
}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/ResourceStructure.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/ResourceStructure.java
index 9965a05294..8be3d6ba06 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/ResourceStructure.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/ResourceStructure.java
@@ -68,10 +68,16 @@ public abstract class ResourceStructure {
*/
protected final Map<String, VfModuleArtifact> artifactsMapByUUID;
+ /**
+ * The list of workflow artifacts existing in this resource
+ */
+ protected final Map<String, WorkflowArtifact> workflowArtifactsMapByUUID;
+
public ResourceStructure(INotificationData notificationData, IResourceInstance resourceInstance) {
this.notificationData = notificationData;
this.resourceInstance = resourceInstance;
artifactsMapByUUID = new HashMap<>();
+ workflowArtifactsMapByUUID = new HashMap<>();
}
/**
@@ -85,6 +91,9 @@ public abstract class ResourceStructure {
public abstract void addArtifactToStructure(IDistributionClient distributionClient, IArtifactInfo artifactinfo,
IDistributionClientDownloadResult clientResult) throws UnsupportedEncodingException;
+ public abstract void addWorkflowArtifactToStructure(IArtifactInfo artifactinfo,
+ IDistributionClientDownloadResult clientResult) throws UnsupportedEncodingException;
+
/**
* Prepare the resource for installation.
*
@@ -144,4 +153,8 @@ public abstract class ResourceStructure {
return artifactsMapByUUID;
}
+ public Map<String, WorkflowArtifact> getWorkflowArtifactsMapByUUID() {
+ return workflowArtifactsMapByUUID;
+ }
+
}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java
index 62408be922..16e9fda7c4 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/VfResourceStructure.java
@@ -98,6 +98,12 @@ public class VfResourceStructure extends ResourceStructure {
}
}
+ public void addWorkflowArtifactToStructure(IArtifactInfo artifactinfo,
+ IDistributionClientDownloadResult clientResult) throws UnsupportedEncodingException {
+ WorkflowArtifact workflowArtifact = new WorkflowArtifact(artifactinfo, clientResult);
+ workflowArtifactsMapByUUID.put(artifactinfo.getArtifactUUID(), workflowArtifact);
+ }
+
protected void addArtifactByType(IArtifactInfo artifactinfo, IDistributionClientDownloadResult clientResult,
VfModuleArtifact vfModuleArtifact) throws UnsupportedEncodingException {
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/WorkflowArtifact.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/WorkflowArtifact.java
new file mode 100644
index 0000000000..83b5614104
--- /dev/null
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/WorkflowArtifact.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.asdc.installer;
+
+
+import java.io.UnsupportedEncodingException;
+import org.onap.so.db.catalog.beans.HeatEnvironment;
+import org.onap.so.db.catalog.beans.HeatFiles;
+import org.onap.so.db.catalog.beans.HeatTemplate;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.results.IDistributionClientDownloadResult;
+
+/**
+ * The structure that contains the artifactInfo and its associated DownloadedResult.
+ *
+ */
+public final class WorkflowArtifact {
+ private final IArtifactInfo artifactInfo;
+ private int deployedInDb = 0;
+ private final String result;
+
+ public WorkflowArtifact(IArtifactInfo artifactinfo, IDistributionClientDownloadResult clientResult)
+ throws UnsupportedEncodingException {
+ result = new String(clientResult.getArtifactPayload(), "UTF-8");
+ artifactInfo = artifactinfo;
+
+ }
+
+ public IArtifactInfo getArtifactInfo() {
+ return artifactInfo;
+ }
+
+ public String getResult() {
+ return result;
+ }
+
+ public int getDeployedInDb() {
+ return deployedInDb;
+ }
+
+ public void incrementDeployedInDB() {
+ ++deployedInDb;
+ }
+
+
+
+}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java
index c98fb9b619..7945ad0174 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/BpmnInstaller.java
@@ -58,7 +58,7 @@ public class BpmnInstaller {
protected static final Logger logger = LoggerFactory.getLogger(BpmnInstaller.class);
private static final String BPMN_SUFFIX = ".bpmn";
private static final String CAMUNDA_URL = "mso.camundaURL";
- private static final String CREATE_DEPLOYMENT_PATH = "/sobpmnengine/deployment/create";
+ private static final String CREATE_DEPLOYMENT_PATH = "sobpmnengine/deployment/create";
@Autowired
private Environment env;
@@ -78,7 +78,7 @@ public class BpmnInstaller {
Path p = Paths.get(name);
String fileName = p.getFileName().toString();
extractBpmnFileFromCsar(csarFile, fileName);
- HttpResponse response = sendDeploymentRequest(fileName);
+ HttpResponse response = sendDeploymentRequest(fileName, "");
logger.debug("Response status line: {}", response.getStatusLine());
logger.debug("Response entity: {}", response.getEntity().toString());
if (response.getStatusLine().getStatusCode() != 200) {
@@ -125,21 +125,21 @@ public class BpmnInstaller {
return workflowsInCsar;
}
- protected HttpResponse sendDeploymentRequest(String bpmnFileName) throws Exception {
+ protected HttpResponse sendDeploymentRequest(String bpmnFileName, String version) throws Exception {
HttpClient client = HttpClientBuilder.create().build();
URI deploymentUri = new URI(this.env.getProperty(CAMUNDA_URL) + CREATE_DEPLOYMENT_PATH);
HttpPost post = new HttpPost(deploymentUri);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000000).setConnectTimeout(1000)
.setConnectionRequestTimeout(1000).build();
post.setConfig(requestConfig);
- HttpEntity requestEntity = buildMimeMultipart(bpmnFileName);
+ HttpEntity requestEntity = buildMimeMultipart(bpmnFileName, version);
post.setEntity(requestEntity);
return client.execute(post);
}
- protected HttpEntity buildMimeMultipart(String bpmnFileName) throws Exception {
+ protected HttpEntity buildMimeMultipart(String bpmnFileName, String version) throws Exception {
FileInputStream bpmnFileStream = new FileInputStream(
- Paths.get(System.getProperty("mso.config.path"), "ASDC", bpmnFileName).normalize().toString());
+ Paths.get(System.getProperty("mso.config.path"), "ASDC", version, bpmnFileName).normalize().toString());
byte[] bytesToSend = IOUtils.toByteArray(bpmnFileStream);
HttpEntity requestEntity =
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/WorkflowResource.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/WorkflowResource.java
new file mode 100644
index 0000000000..daeda2f976
--- /dev/null
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/bpmn/WorkflowResource.java
@@ -0,0 +1,215 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.asdc.installer.bpmn;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.http.HttpResponse;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.so.asdc.installer.VfResourceStructure;
+import org.onap.so.asdc.installer.WorkflowArtifact;
+import org.onap.so.db.catalog.beans.ActivitySpec;
+import org.onap.so.db.catalog.beans.VnfResourceWorkflow;
+import org.onap.so.db.catalog.beans.Workflow;
+import org.onap.so.db.catalog.beans.WorkflowActivitySpecSequence;
+import org.onap.so.db.catalog.data.repository.ActivitySpecRepository;
+import org.onap.so.db.catalog.data.repository.WorkflowRepository;
+import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.MessageEnum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WorkflowResource {
+ protected static final Logger logger = LoggerFactory.getLogger(WorkflowResource.class);
+
+ private static final String pattern = ".*\\\"activity:(.*)\\\" .*";
+ private static final String TARGET_RESOURCE_VNF = "vnf";
+ private static final String SOURCE_SDC = "sdc";
+ private static final String BPMN_SUFFIX = ".bpmn";
+
+ @Autowired
+ protected WorkflowRepository workflowRepo;
+
+ @Autowired
+ protected ActivitySpecRepository activityRepo;
+
+ @Autowired
+ private BpmnInstaller bpmnInstaller;
+
+ public void processWorkflows(VfResourceStructure vfResourceStructure) throws Exception {
+ Map<String, WorkflowArtifact> artifactsMapByUUID = vfResourceStructure.getWorkflowArtifactsMapByUUID();
+ String vfResourceModelUuid = vfResourceStructure.getResourceInstance().getResourceUUID();
+ for (String uuid : artifactsMapByUUID.keySet()) {
+ WorkflowArtifact artifactToInstall = artifactsMapByUUID.get(uuid);
+ if (isLatestVersionAvailable(artifactsMapByUUID, artifactToInstall)) {
+ logger.debug("Installing the BPMN: " + artifactToInstall.getArtifactInfo().getArtifactName());
+ deployWorkflowResourceToCamunda(artifactToInstall);
+ installWorkflowResource(artifactToInstall, vfResourceModelUuid);
+ } else {
+ logger.debug("Skipping installing - not the latest version: "
+ + artifactToInstall.getArtifactInfo().getArtifactName());
+ }
+ }
+ }
+
+ protected void deployWorkflowResourceToCamunda(WorkflowArtifact artifact) throws Exception {
+ String bpmnName = artifact.getArtifactInfo().getArtifactName();
+ String version = artifact.getArtifactInfo().getArtifactVersion();
+ logger.debug("BPMN Name: " + bpmnName);
+ try {
+ HttpResponse response = bpmnInstaller.sendDeploymentRequest(bpmnName, version);
+ logger.debug("Response status line: {}", response.getStatusLine());
+ logger.debug("Response entity: {}", response.getEntity().toString());
+ if (response.getStatusLine().getStatusCode() != 200) {
+ logger.debug("Failed deploying BPMN {}", bpmnName);
+ logger.error("{} {} {} {} {} {}", MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL.toString(), bpmnName,
+ bpmnName, Integer.toString(response.getStatusLine().getStatusCode()),
+ ErrorCode.DataError.getValue(), "ASDC BPMN deploy failed");
+ throw (new Exception("Error from Camunda on deploying the BPMN: " + bpmnName));
+ } else {
+ logger.debug("Successfully deployed to Camunda: {}", bpmnName);
+ }
+ } catch (Exception e) {
+ logger.debug("Exception :", e);
+ logger.error("{} {} {} {} {}", MessageEnum.ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL.toString(), bpmnName,
+ e.getMessage(), ErrorCode.DataError.getValue(), "ASDC BPMN deploy failed");
+ throw e;
+ }
+ }
+
+ protected void installWorkflowResource(WorkflowArtifact artifact, String vfResourceModelUuid) throws Exception {
+ IArtifactInfo artifactInfo = artifact.getArtifactInfo();
+
+ Workflow workflow = new Workflow();
+
+ workflow.setArtifactChecksum(artifactInfo.getArtifactChecksum());
+ workflow.setArtifactName(artifactInfo.getArtifactName());
+ workflow.setArtifactUUID(artifactInfo.getArtifactUUID());
+ workflow.setBody(artifact.getResult());
+ workflow.setDescription(artifactInfo.getArtifactDescription());
+ workflow.setName(getWorkflowNameFromArtifactName(artifactInfo.getArtifactName()));
+ workflow.setResourceTarget(TARGET_RESOURCE_VNF);
+ workflow.setSource(SOURCE_SDC);
+ workflow.setTimeoutMinutes(artifactInfo.getArtifactTimeout());
+ workflow.setOperationName(getWorkflowNameFromArtifactName(artifactInfo.getArtifactName()));
+ workflow.setVersion(getWorkflowVersionFromArtifactName(artifactInfo.getArtifactName()));
+
+ VnfResourceWorkflow vnfResourceWorkflow = new VnfResourceWorkflow();
+ vnfResourceWorkflow.setVnfResourceModelUUID(vfResourceModelUuid);
+ List<VnfResourceWorkflow> vnfResourceWorkflows = new ArrayList<VnfResourceWorkflow>();
+ vnfResourceWorkflows.add(vnfResourceWorkflow);
+
+ workflow.setVnfResourceWorkflow(vnfResourceWorkflows);
+
+ List<String> activityNames = getActivityNameList(artifact.getResult());
+ List<WorkflowActivitySpecSequence> wfss = getWorkflowActivitySpecSequence(activityNames);
+ workflow.setWorkflowActivitySpecSequence(wfss);
+
+ workflowRepo.save(workflow);
+
+ }
+
+ protected boolean isLatestVersionAvailable(Map<String, WorkflowArtifact> artifactsMapByUUID,
+ WorkflowArtifact artifact) {
+ String workflowName = getWorkflowNameFromArtifactName(artifact.getArtifactInfo().getArtifactName());
+ Double workflowVersion = getWorkflowVersionFromArtifactName(artifact.getArtifactInfo().getArtifactName());
+ if (workflowVersion == null) {
+ workflowVersion = 0.0;
+ }
+ for (WorkflowArtifact artifactInMap : artifactsMapByUUID.values()) {
+ Double versionInMap = getWorkflowVersionFromArtifactName(artifactInMap.getArtifactInfo().getArtifactName());
+ if (versionInMap == null) {
+ versionInMap = 0.0;
+ }
+ if (workflowName.equals(getWorkflowNameFromArtifactName(artifactInMap.getArtifactInfo().getArtifactName()))
+ && Double.compare(workflowVersion, versionInMap) < 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected List<String> getActivityNameList(String bpmnContent) {
+ List<String> activityNameList = new ArrayList<String>();
+
+ Pattern p = Pattern.compile(pattern);
+ Matcher m = p.matcher(bpmnContent);
+ while (m.find()) {
+ activityNameList.add(m.group(1));
+ }
+ return activityNameList;
+ }
+
+ protected List<WorkflowActivitySpecSequence> getWorkflowActivitySpecSequence(List<String> activityNames)
+ throws Exception {
+ if (activityNames == null || activityNames.size() == 0) {
+ return null;
+ }
+ List<WorkflowActivitySpecSequence> workflowActivitySpecs = new ArrayList<WorkflowActivitySpecSequence>();
+ for (String activityName : activityNames) {
+ ActivitySpec activitySpec = activityRepo.findByName(activityName);
+ if (activitySpec != null) {
+ WorkflowActivitySpecSequence workflowActivitySpec = new WorkflowActivitySpecSequence();
+ workflowActivitySpec.setActivitySpec(activitySpec);
+ workflowActivitySpecs.add(workflowActivitySpec);
+ }
+ }
+ return workflowActivitySpecs;
+ }
+
+ public String getWorkflowNameFromArtifactName(String artifactName) {
+ if (artifactName == null) {
+ return null;
+ } else {
+ if (artifactName.contains(BPMN_SUFFIX)) {
+ return artifactName.substring(0, artifactName.lastIndexOf(BPMN_SUFFIX)).split("-")[0];
+ } else {
+ return artifactName.split("-")[0];
+ }
+ }
+ }
+
+ public Double getWorkflowVersionFromArtifactName(String artifactName) {
+ if (artifactName == null) {
+ return null;
+ } else {
+ String[] workflowNameParts = null;
+ if (artifactName.contains(BPMN_SUFFIX)) {
+ workflowNameParts = artifactName.substring(0, artifactName.lastIndexOf(BPMN_SUFFIX)).split("-");
+ } else {
+ workflowNameParts = artifactName.split("-");
+ }
+ if (workflowNameParts.length < 2) {
+ return null;
+ } else {
+ return Double.valueOf(workflowNameParts[1].replaceAll("_", "."));
+ }
+ }
+ }
+}
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
index 3bfcd2f8d5..50a555882d 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
@@ -35,6 +35,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
+import org.hibernate.StaleObjectStateException;
import org.hibernate.exception.ConstraintViolationException;
import org.hibernate.exception.LockAcquisitionException;
import org.onap.sdc.api.notification.IArtifactInfo;
@@ -55,7 +56,6 @@ import org.onap.sdc.toscaparser.api.Property;
import org.onap.sdc.toscaparser.api.RequirementAssignment;
import org.onap.sdc.toscaparser.api.RequirementAssignments;
import org.onap.sdc.toscaparser.api.elements.Metadata;
-import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
import org.onap.sdc.toscaparser.api.functions.GetInput;
import org.onap.sdc.toscaparser.api.parameters.Input;
import org.onap.sdc.utils.DistributionStatusEnum;
@@ -70,6 +70,7 @@ import org.onap.so.asdc.installer.ToscaResourceStructure;
import org.onap.so.asdc.installer.VfModuleArtifact;
import org.onap.so.asdc.installer.VfModuleStructure;
import org.onap.so.asdc.installer.VfResourceStructure;
+import org.onap.so.asdc.installer.bpmn.WorkflowResource;
import org.onap.so.asdc.util.YamlEditor;
import org.onap.so.db.catalog.beans.AllottedResource;
import org.onap.so.db.catalog.beans.AllottedResourceCustomization;
@@ -246,6 +247,9 @@ public class ToscaResourceInstaller {
@Autowired
protected PnfCustomizationRepository pnfCustomizationRepository;
+ @Autowired
+ protected WorkflowResource workflowResource;
+
protected static final Logger logger = LoggerFactory.getLogger(ToscaResourceInstaller.class);
public boolean isResourceAlreadyDeployed(ResourceStructure vfResourceStruct, boolean serviceDeployed)
@@ -260,7 +264,7 @@ public class ToscaResourceInstaller {
try {
Service existingService =
serviceRepo.findOneByModelUUID(vfResourceStructure.getNotification().getServiceUUID());
- if (existingService != null && serviceDeployed == false)
+ if (existingService != null && !serviceDeployed)
status = true;
if (status) {
logger.info(vfResourceStructure.getResourceInstance().getResourceInstanceName(),
@@ -307,6 +311,7 @@ public class ToscaResourceInstaller {
}
}
+
@Transactional(rollbackFor = {ArtifactInstallerException.class})
public void installTheResource(ToscaResourceStructure toscaResourceStruct, ResourceStructure resourceStruct)
throws ArtifactInstallerException {
@@ -386,12 +391,11 @@ public class ToscaResourceInstaller {
List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();
try {
createToscaCsar(toscaResourceStruct);
- Service service = createService(toscaResourceStruct, vfResourceStruct);
+ createService(toscaResourceStruct, vfResourceStruct);
+ Service service = toscaResourceStruct.getCatalogService();
List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
-
for (NodeTemplate nodeTemplate : vfNodeTemplatesList) {
-
Metadata metadata = nodeTemplate.getMetaData();
String serviceType = toscaResourceStruct.getCatalogService().getServiceType();
String vfCustomizationCategory = toscaResourceStruct.getSdcCsarHelper()
@@ -400,8 +404,8 @@ public class ToscaResourceInstaller {
vfCustomizationCategory);
}
+ workflowResource.processWorkflows(vfResourceStructure);
processResourceSequence(toscaResourceStruct, service);
- processVFResources(toscaResourceStruct, service, vfResourceStructure);
List<NodeTemplate> allottedResourceList = toscaResourceStruct.getSdcCsarHelper().getAllottedResources();
processAllottedResources(toscaResourceStruct, service, allottedResourceList);
processNetworks(toscaResourceStruct, service);
@@ -410,7 +414,9 @@ public class ToscaResourceInstaller {
// Process Service Proxy & Configuration
processServiceProxyAndConfiguration(toscaResourceStruct, service);
- serviceRepo.save(service);
+ logger.info("Saving Service: {} ", service.getModelName());
+ service = serviceRepo.save(service);
+ correlateConfigCustomResources(service);
WatchdogComponentDistributionStatus status = new WatchdogComponentDistributionStatus(
vfResourceStruct.getNotification().getDistributionID(), MSO);
@@ -638,7 +644,8 @@ public class ToscaResourceInstaller {
}
protected ConfigurationResourceCustomization getConfigurationResourceCustomization(NodeTemplate nodeTemplate,
- ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization) {
+ ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization,
+ Service service) {
Metadata metadata = nodeTemplate.getMetaData();
ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
@@ -661,31 +668,15 @@ public class ToscaResourceInstaller {
.setServiceProxyResourceCustomizationUUID(spResourceCustomization.getModelCustomizationUUID());
configCustomizationResource.setConfigurationResource(configResource);
+ configCustomizationResource.setService(service);
configResourceCustomizationSet.add(configCustomizationResource);
configResource.setConfigurationResourceCustomization(configResourceCustomizationSet);
+
return configCustomizationResource;
}
- protected Optional<ConfigurationResourceCustomization> getVnrNodeTemplate(
- List<NodeTemplate> configurationNodeTemplatesList, ToscaResourceStructure toscaResourceStructure,
- ServiceProxyResourceCustomization spResourceCustomization) {
- Optional<ConfigurationResourceCustomization> configurationResourceCust = Optional.empty();
- for (NodeTemplate nodeTemplate : configurationNodeTemplatesList) {
- StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
- String type = entityType.getType();
-
- if (VLAN_NETWORK_RECEPTOR.equals(type)) {
- configurationResourceCust = Optional.of(getConfigurationResourceCustomization(nodeTemplate,
- toscaResourceStructure, spResourceCustomization));
- break;
- }
- }
-
- return configurationResourceCust;
- }
-
protected void processServiceProxyAndConfiguration(ToscaResourceStructure toscaResourceStruct, Service service) {
List<NodeTemplate> serviceProxyResourceList =
@@ -704,8 +695,6 @@ public class ToscaResourceInstaller {
for (NodeTemplate spNode : serviceProxyResourceList) {
serviceProxy = createServiceProxy(spNode, service, toscaResourceStruct);
serviceProxyList.add(serviceProxy);
- Optional<ConfigurationResourceCustomization> vnrResourceCustomization =
- getVnrNodeTemplate(configurationNodeTemplatesList, toscaResourceStruct, serviceProxy);
for (NodeTemplate configNode : configurationNodeTemplatesList) {
@@ -713,19 +702,21 @@ public class ToscaResourceInstaller {
toscaResourceStruct.getSdcCsarHelper().getRequirementsOf(configNode).getAll();
for (RequirementAssignment requirement : requirementsList) {
if (requirement.getNodeTemplateName().equals(spNode.getName())) {
- ConfigurationResourceCustomization configurationResource = createConfiguration(configNode,
- toscaResourceStruct, serviceProxy, vnrResourceCustomization);
-
- Optional<ConfigurationResourceCustomization> matchingObject = configurationResourceList
- .stream()
- .filter(configurationResourceCustomization -> configNode.getMetaData()
- .getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)
- .equals(configurationResource.getModelCustomizationUUID()))
- .findFirst();
+ ConfigurationResourceCustomization configurationResource =
+ createConfiguration(configNode, toscaResourceStruct, serviceProxy, service);
+
+ Optional<ConfigurationResourceCustomization> matchingObject =
+ configurationResourceList.stream()
+ .filter(configurationResourceCustomization -> configNode.getMetaData()
+ .getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID)
+ .equals(configurationResource.getModelCustomizationUUID()))
+ .filter(configurationResourceCustomization -> configurationResourceCustomization
+ .getModelInstanceName()
+ .equals(configurationResource.getModelInstanceName()))
+ .findFirst();
if (!matchingObject.isPresent()) {
configurationResourceList.add(configurationResource);
}
-
break;
}
}
@@ -738,6 +729,37 @@ public class ToscaResourceInstaller {
service.setServiceProxyCustomizations(serviceProxyList);
}
+ /*
+ * ConfigurationResourceCustomization objects have their IDs auto incremented in the database. Unless we know their
+ * IDs we cannot possibly associate their related records. So these ConfigResourceCustomizations are persisted first
+ * and subsequently correlated.
+ */
+
+ protected void correlateConfigCustomResources(Service service) {
+ /* Assuming that we have only one pair of VRF-VNR */
+ ConfigurationResourceCustomization vrfConfigCustomResource = null;
+ ConfigurationResourceCustomization vnrConfigCustomResource = null;
+ List<ConfigurationResourceCustomization> configCustomList = service.getConfigurationCustomizations();
+ for (ConfigurationResourceCustomization configResource : configCustomList) {
+ String nodeType = configResource.getConfigurationResource().getToscaNodeType();
+ if (NODES_VRF_ENTRY.equalsIgnoreCase(nodeType)) {
+ vrfConfigCustomResource = configResource;
+ } else if (VLAN_NETWORK_RECEPTOR.equalsIgnoreCase(nodeType)) {
+ vnrConfigCustomResource = configResource;
+ }
+ }
+
+ if (vrfConfigCustomResource != null) {
+ vrfConfigCustomResource.setConfigResourceCustomization(vnrConfigCustomResource);
+ configCustomizationRepo.save(vrfConfigCustomResource);
+
+ }
+ if (vnrConfigCustomResource != null) {
+ vnrConfigCustomResource.setConfigResourceCustomization(vrfConfigCustomResource);
+ configCustomizationRepo.save(vnrConfigCustomResource);
+ }
+ }
+
protected void processNetworkCollections(ToscaResourceStructure toscaResourceStruct, Service service) {
List<NodeTemplate> networkCollectionList =
@@ -762,48 +784,6 @@ public class ToscaResourceInstaller {
}
- protected void processVFResources(ToscaResourceStructure toscaResourceStruct, Service service,
- VfResourceStructure vfResourceStructure) throws Exception {
- logger.debug("processVFResources");
-
- List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
- // String servicecategory = toscaResourceStruct.getCatalogService().getCategory();
- // String serviceType = toscaResourceStruct.getCatalogService().getServiceType();
-
- for (NodeTemplate nodeTemplate : vfNodeTemplatesList) {
- Metadata metadata = nodeTemplate.getMetaData();
- String vfCustomizationCategory = metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY);
- logger.debug("VF Category is : " + vfCustomizationCategory);
-
- // Do not treat Allotted Resources as VNF resources
- if (ALLOTTED_RESOURCE.equalsIgnoreCase(vfCustomizationCategory)) {
- continue;
- }
-
- String vfCustomizationUUID = metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
- logger.debug("VFCustomizationUUID=" + vfCustomizationUUID);
-
- IResourceInstance vfNotificationResource = vfResourceStructure.getResourceInstance();
-
- // Make sure the VF ResourceCustomizationUUID from the notification and tosca
- // customizations match before comparing their VF Modules UUID's
- logger.debug("Checking if Notification VF ResourceCustomizationUUID: "
- + vfNotificationResource.getResourceCustomizationUUID() + " matches Tosca VF Customization UUID: "
- + vfCustomizationUUID);
-
- if (vfCustomizationUUID.equals(vfNotificationResource.getResourceCustomizationUUID())) {
- logger.debug("vfCustomizationUUID: " + vfCustomizationUUID
- + " matches vfNotificationResource CustomizationUUID");
-
- processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, metadata,
- vfCustomizationCategory);
- } else {
- logger.debug("Notification VF ResourceCustomizationUUID: "
- + vfNotificationResource.getResourceCustomizationUUID() + " doesn't match "
- + "Tosca VF Customization UUID: " + vfCustomizationUUID);
- }
- }
- }
/**
* This is used to process the PNF specific resource, including resource and resource_customization.
@@ -1272,22 +1252,15 @@ public class ToscaResourceInstaller {
protected ConfigurationResourceCustomization createConfiguration(NodeTemplate nodeTemplate,
ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization,
- Optional<ConfigurationResourceCustomization> vnrResourceCustomization) {
+ Service service) {
- ConfigurationResourceCustomization configCustomizationResource =
- getConfigurationResourceCustomization(nodeTemplate, toscaResourceStructure, spResourceCustomization);
+ ConfigurationResourceCustomization configCustomizationResource = getConfigurationResourceCustomization(
+ nodeTemplate, toscaResourceStructure, spResourceCustomization, service);
ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
Set<ConfigurationResourceCustomization> configResourceCustomizationSet = new HashSet<>();
- StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
- String type = entityType.getType();
-
- if (NODES_VRF_ENTRY.equals(type)) {
- configCustomizationResource.setConfigResourceCustomization(vnrResourceCustomization.orElse(null));
- }
-
configCustomizationResource.setConfigurationResource(configResource);
configResourceCustomizationSet.add(configCustomizationResource);
@@ -1396,6 +1369,7 @@ public class ToscaResourceInstaller {
networkCustomizationRepo.saveAndFlush(networkResourceCustomization);
+
} else if (networkResourceCustomization == null) {
networkResourceCustomization =
createNetworkResourceCustomization(networkNodeTemplate, toscaResourceStructure);