aboutsummaryrefslogtreecommitdiffstats
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/client/ASDCController.java88
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java175
2 files changed, 185 insertions, 78 deletions
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 dd159c0b38..ea1d194c68 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
@@ -62,7 +62,9 @@ import org.onap.so.asdc.installer.heat.ToscaResourceInstaller;
import org.onap.so.asdc.tenantIsolation.DistributionStatus;
import org.onap.so.asdc.tenantIsolation.WatchdogDistribution;
import org.onap.so.asdc.util.ASDCNotificationLogging;
+import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
import org.onap.so.db.request.beans.WatchdogDistributionStatus;
+import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
import org.onap.so.db.request.data.repository.WatchdogDistributionStatusRepository;
import org.onap.so.logger.ErrorCode;
import org.onap.so.logger.MessageEnum;
@@ -94,6 +96,9 @@ public class ASDCController {
private WatchdogDistributionStatusRepository wdsRepo;
@Autowired
+ protected WatchdogComponentDistributionStatusRepository watchdogCDStatusRepository;
+
+ @Autowired
private ASDCConfiguration asdcConfig;
@Autowired
@@ -106,6 +111,8 @@ public class ASDCController {
private static final String UUID_PARAM = "(UUID:";
+ protected static final String MSO = "SO";
+
@Autowired
private WatchdogDistribution wd;
@@ -270,6 +277,52 @@ public class ASDCController {
}
}
+ protected void notifyErrorToAsdc(INotificationData iNotif, ToscaResourceStructure toscaResourceStructure,
+ DistributionStatusEnum deployStatus, VfResourceStructure resourceStructure, String errorMessage) {
+ // do csar lever first
+ this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus, errorMessage);
+ // at resource level
+ for (IResourceInstance resource : iNotif.getResources()) {
+ resourceStructure = new VfResourceStructure(iNotif, resource);
+ errorMessage = String.format("Resource with UUID: %s already exists", resource.getResourceUUID());
+ this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus,
+ errorMessage);
+ }
+ }
+
+ protected boolean isCsarAlreadyDeployed(INotificationData iNotif, ToscaResourceStructure toscaResourceStructure) {
+ VfResourceStructure resourceStructure = null;
+ String errorMessage = "";
+ boolean csarAlreadyDeployed = false;
+ DistributionStatusEnum deployStatus = DistributionStatusEnum.DEPLOY_OK;
+ WatchdogComponentDistributionStatus wdStatus =
+ new WatchdogComponentDistributionStatus(iNotif.getDistributionID(), MSO);
+ try {
+ csarAlreadyDeployed = toscaInstaller.isCsarAlreadyDeployed(toscaResourceStructure);
+ if (csarAlreadyDeployed) {
+ deployStatus = DistributionStatusEnum.ALREADY_DEPLOYED;
+ resourceStructure = new VfResourceStructure(iNotif, null);
+ errorMessage = String.format("Csar with UUID: %s already exists",
+ toscaResourceStructure.getToscaArtifact().getArtifactUUID());
+ wdStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
+ watchdogCDStatusRepository.saveAndFlush(wdStatus);
+ logger.error(errorMessage);
+ }
+ } catch (ArtifactInstallerException e) {
+ deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
+ resourceStructure = new VfResourceStructure(iNotif, null);
+ errorMessage = e.getMessage();
+ wdStatus.setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_ERROR.name());
+ watchdogCDStatusRepository.saveAndFlush(wdStatus);
+ logger.warn("Tosca Checksums don't match, Tosca validation check failed", e);
+ }
+
+ if (deployStatus != DistributionStatusEnum.DEPLOY_OK) {
+ notifyErrorToAsdc(iNotif, toscaResourceStructure, deployStatus, resourceStructure, errorMessage);
+ }
+
+ return csarAlreadyDeployed;
+ }
protected IDistributionClientDownloadResult downloadTheArtifact(IArtifactInfo artifact, String distributionId)
throws ASDCDownloadException {
@@ -378,23 +431,14 @@ public class ASDCController {
}
protected void sendCsarDeployNotification(INotificationData iNotif, ResourceStructure resourceStructure,
- ToscaResourceStructure toscaResourceStructure, boolean deploySuccessful, String errorReason) {
+ ToscaResourceStructure toscaResourceStructure, DistributionStatusEnum statusEnum, String errorReason) {
IArtifactInfo csarArtifact = toscaResourceStructure.getToscaArtifact();
- if (deploySuccessful) {
-
- this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(),
- asdcConfig.getConsumerID(), resourceStructure.getNotification().getDistributionID(),
- DistributionStatusEnum.DEPLOY_OK, errorReason, System.currentTimeMillis());
+ this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(), asdcConfig.getConsumerID(),
+ resourceStructure.getNotification().getDistributionID(), statusEnum, errorReason,
+ System.currentTimeMillis());
- } else {
-
- this.sendASDCNotification(NotificationType.DEPLOY, csarArtifact.getArtifactURL(),
- asdcConfig.getConsumerID(), resourceStructure.getNotification().getDistributionID(),
- DistributionStatusEnum.DEPLOY_ERROR, errorReason, System.currentTimeMillis());
-
- }
}
protected void deployResourceStructure(ResourceStructure resourceStructure,
@@ -660,7 +704,7 @@ public class ASDCController {
String msoConfigPath = getMsoConfigPath();
boolean hasVFResource = false;
ToscaResourceStructure toscaResourceStructure = new ToscaResourceStructure(msoConfigPath);
- boolean deploySuccessful = true;
+ DistributionStatusEnum deployStatus = DistributionStatusEnum.DEPLOY_OK;
String errorMessage = null;
boolean serviceDeployed = false;
@@ -672,6 +716,10 @@ public class ASDCController {
File csarFile = new File(filePath);
+ if (isCsarAlreadyDeployed(iNotif, toscaResourceStructure)) {
+ return;
+ }
+
for (IResourceInstance resource : iNotif.getResources()) {
String resourceType = resource.getResourceType();
@@ -679,7 +727,8 @@ public class ASDCController {
logger.info("Processing Resource Type: {}, Model UUID: {}", resourceType, resource.getResourceUUID());
- if ("VF".equals(resourceType)) {
+ if ("VF".equals(resourceType) && resource.getArtifacts() != null
+ && !resource.getArtifacts().isEmpty()) {
resourceStructure = new VfResourceStructure(iNotif, resource);
} else if ("PNF".equals(resourceType)) {
resourceStructure = new PnfResourceStructure(iNotif, resource);
@@ -697,7 +746,8 @@ public class ASDCController {
logger.debug("Processing Resource Type: " + resourceType + " and Model UUID: "
+ resourceStructure.getResourceInstance().getResourceUUID());
- if ("VF".equals(resourceType)) {
+ if ("VF".equals(resourceType) && resource.getArtifacts() != null
+ && !resource.getArtifacts().isEmpty()) {
hasVFResource = true;
for (IArtifactInfo artifact : resource.getArtifacts()) {
IDistributionClientDownloadResult resultArtifact =
@@ -733,7 +783,7 @@ public class ASDCController {
}
} catch (ArtifactInstallerException e) {
- deploySuccessful = false;
+ deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
errorMessage = e.getMessage();
logger.error("Exception occurred", e);
}
@@ -746,12 +796,12 @@ public class ASDCController {
try {
this.deployResourceStructure(resourceStructure, toscaResourceStructure);
} catch (ArtifactInstallerException e) {
- deploySuccessful = false;
+ deployStatus = DistributionStatusEnum.DEPLOY_ERROR;
errorMessage = e.getMessage();
logger.error("Exception occurred", e);
}
}
- this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deploySuccessful,
+ this.sendCsarDeployNotification(iNotif, resourceStructure, toscaResourceStructure, deployStatus,
errorMessage);
}
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 6f8c53085f..179fa44547 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
@@ -108,6 +108,8 @@ import org.onap.so.db.catalog.data.repository.ConfigurationResourceCustomization
import org.onap.so.db.catalog.data.repository.ConfigurationResourceRepository;
import org.onap.so.db.catalog.data.repository.CvnfcCustomizationRepository;
import org.onap.so.db.catalog.data.repository.ExternalServiceToInternalServiceRepository;
+import org.onap.so.db.catalog.data.repository.HeatEnvironmentRepository;
+import org.onap.so.db.catalog.data.repository.HeatFilesRepository;
import org.onap.so.db.catalog.data.repository.HeatTemplateRepository;
import org.onap.so.db.catalog.data.repository.InstanceGroupRepository;
import org.onap.so.db.catalog.data.repository.NetworkResourceCustomizationRepository;
@@ -117,6 +119,7 @@ import org.onap.so.db.catalog.data.repository.PnfResourceRepository;
import org.onap.so.db.catalog.data.repository.ServiceProxyResourceCustomizationRepository;
import org.onap.so.db.catalog.data.repository.ServiceRepository;
import org.onap.so.db.catalog.data.repository.TempNetworkHeatTemplateRepository;
+import org.onap.so.db.catalog.data.repository.ToscaCsarRepository;
import org.onap.so.db.catalog.data.repository.VFModuleCustomizationRepository;
import org.onap.so.db.catalog.data.repository.VFModuleRepository;
import org.onap.so.db.catalog.data.repository.VnfResourceRepository;
@@ -223,6 +226,12 @@ public class ToscaResourceInstaller {
protected HeatTemplateRepository heatRepo;
@Autowired
+ protected HeatEnvironmentRepository heatEnvRepo;
+
+ @Autowired
+ protected HeatFilesRepository heatFilesRepo;
+
+ @Autowired
protected NetworkResourceCustomizationRepository networkCustomizationRepo;
@Autowired
@@ -239,6 +248,9 @@ public class ToscaResourceInstaller {
protected ExternalServiceToInternalServiceRepository externalServiceToInternalServiceRepository;
@Autowired
+ protected ToscaCsarRepository toscaCsarRepo;
+
+ @Autowired
protected PnfResourceRepository pnfResourceRepository;
@Autowired
@@ -249,6 +261,31 @@ public class ToscaResourceInstaller {
protected static final Logger logger = LoggerFactory.getLogger(ToscaResourceInstaller.class);
+ public boolean isCsarAlreadyDeployed(ToscaResourceStructure toscaResourceStructure)
+ throws ArtifactInstallerException {
+ boolean deployed = false;
+ if (toscaResourceStructure == null) {
+ return deployed;
+ }
+
+ IArtifactInfo inputToscaCsar = toscaResourceStructure.getToscaArtifact();
+ String checkSum = inputToscaCsar.getArtifactChecksum();
+ String artifactUuid = inputToscaCsar.getArtifactUUID();
+
+ Optional<ToscaCsar> toscaCsarObj = toscaCsarRepo.findById(artifactUuid);
+ if (toscaCsarObj.isPresent()) {
+ ToscaCsar toscaCsar = toscaCsarObj.get();
+ if (!toscaCsar.getArtifactChecksum().equalsIgnoreCase(checkSum)) {
+ String errorMessage =
+ String.format("Csar with UUID: %s already exists.Their checksums don't match", artifactUuid);
+ throw new ArtifactInstallerException(errorMessage);
+ } else if (toscaCsar.getArtifactChecksum().equalsIgnoreCase(checkSum)) {
+ deployed = true;
+ }
+ }
+ return deployed;
+ }
+
public boolean isResourceAlreadyDeployed(ResourceStructure vfResourceStruct, boolean serviceDeployed)
throws ArtifactInstallerException {
boolean status = false;
@@ -1199,77 +1236,95 @@ public class ToscaResourceInstaller {
protected void createHeatTemplateFromArtifact(VfResourceStructure vfResourceStructure,
ToscaResourceStructure toscaResourceStruct, VfModuleArtifact vfModuleArtifact) {
- HeatTemplate heatTemplate = new HeatTemplate();
- List<String> typeList = new ArrayList<>();
- typeList.add(ASDCConfiguration.HEAT_NESTED);
- typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
- heatTemplate.setTemplateBody(
- verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
- heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+ HeatTemplate existingHeatTemplate =
+ heatRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
- if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
- heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
- } else {
- heatTemplate.setTimeoutMinutes(240);
- }
+ if (existingHeatTemplate == null) {
+ HeatTemplate heatTemplate = new HeatTemplate();
+ List<String> typeList = new ArrayList<>();
+ typeList.add(ASDCConfiguration.HEAT_NESTED);
+ typeList.add(ASDCConfiguration.HEAT_ARTIFACT);
- heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
- heatTemplate.setVersion(BigDecimalVersion
- .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
- heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+ heatTemplate.setTemplateBody(
+ verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
+ heatTemplate.setTemplateName(vfModuleArtifact.getArtifactInfo().getArtifactName());
- if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
- heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
- } else {
- heatTemplate.setArtifactChecksum(MANUAL_RECORD);
- }
+ if (vfModuleArtifact.getArtifactInfo().getArtifactTimeout() != null) {
+ heatTemplate.setTimeoutMinutes(vfModuleArtifact.getArtifactInfo().getArtifactTimeout());
+ } else {
+ heatTemplate.setTimeoutMinutes(240);
+ }
- Set<HeatTemplateParam> heatParam = extractHeatTemplateParameters(vfModuleArtifact.getResult(),
- vfModuleArtifact.getArtifactInfo().getArtifactUUID());
- heatTemplate.setParameters(heatParam);
- vfModuleArtifact.setHeatTemplate(heatTemplate);
+ heatTemplate.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+ heatTemplate.setVersion(BigDecimalVersion
+ .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+ heatTemplate.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+ if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+ heatTemplate.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+ } else {
+ heatTemplate.setArtifactChecksum(MANUAL_RECORD);
+ }
+
+ Set<HeatTemplateParam> heatParam = extractHeatTemplateParameters(vfModuleArtifact.getResult(),
+ vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+ heatTemplate.setParameters(heatParam);
+ vfModuleArtifact.setHeatTemplate(heatTemplate);
+ }
}
protected void createHeatEnvFromArtifact(VfResourceStructure vfResourceStructure,
VfModuleArtifact vfModuleArtifact) {
- HeatEnvironment heatEnvironment = new HeatEnvironment();
- heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
- List<String> typeList = new ArrayList<>();
- typeList.add(ASDCConfiguration.HEAT);
- typeList.add(ASDCConfiguration.HEAT_VOL);
- heatEnvironment.setEnvironment(
- verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
- heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
- heatEnvironment.setVersion(BigDecimalVersion
- .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
- heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
-
- if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
- heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
- } else {
- heatEnvironment.setArtifactChecksum(MANUAL_RECORD);
+
+ HeatEnvironment existingHeatEnvironment =
+ heatEnvRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+ if (existingHeatEnvironment == null) {
+ HeatEnvironment heatEnvironment = new HeatEnvironment();
+ heatEnvironment.setName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+ List<String> typeList = new ArrayList<>();
+ typeList.add(ASDCConfiguration.HEAT);
+ typeList.add(ASDCConfiguration.HEAT_VOL);
+ heatEnvironment.setEnvironment(
+ verifyTheFilePrefixInArtifacts(vfModuleArtifact.getResult(), vfResourceStructure, typeList));
+ heatEnvironment.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+ heatEnvironment.setVersion(BigDecimalVersion
+ .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+ heatEnvironment.setArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+ if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+ heatEnvironment.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+ } else {
+ heatEnvironment.setArtifactChecksum(MANUAL_RECORD);
+ }
+ vfModuleArtifact.setHeatEnvironment(heatEnvironment);
}
- vfModuleArtifact.setHeatEnvironment(heatEnvironment);
}
protected void createHeatFileFromArtifact(VfResourceStructure vfResourceStructure,
VfModuleArtifact vfModuleArtifact, ToscaResourceStructure toscaResourceStruct) {
- HeatFiles heatFile = new HeatFiles();
- heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
- heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
- heatFile.setFileBody(vfModuleArtifact.getResult());
- heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
- heatFile.setVersion(BigDecimalVersion
- .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
- toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
- if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
- heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
- } else {
- heatFile.setArtifactChecksum(MANUAL_RECORD);
+ HeatFiles existingHeatFiles =
+ heatFilesRepo.findByArtifactUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+
+ if (existingHeatFiles == null) {
+ HeatFiles heatFile = new HeatFiles();
+ heatFile.setAsdcUuid(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+ heatFile.setDescription(vfModuleArtifact.getArtifactInfo().getArtifactDescription());
+ heatFile.setFileBody(vfModuleArtifact.getResult());
+ heatFile.setFileName(vfModuleArtifact.getArtifactInfo().getArtifactName());
+ heatFile.setVersion(BigDecimalVersion
+ .castAndCheckNotificationVersionToString(vfModuleArtifact.getArtifactInfo().getArtifactVersion()));
+ toscaResourceStruct.setHeatFilesUUID(vfModuleArtifact.getArtifactInfo().getArtifactUUID());
+ if (vfModuleArtifact.getArtifactInfo().getArtifactChecksum() != null) {
+ heatFile.setArtifactChecksum(vfModuleArtifact.getArtifactInfo().getArtifactChecksum());
+ } else {
+ heatFile.setArtifactChecksum(MANUAL_RECORD);
+ }
+ vfModuleArtifact.setHeatFiles(heatFile);
+
}
- vfModuleArtifact.setHeatFiles(heatFile);
}
protected Service createService(ToscaResourceStructure toscaResourceStructure,
@@ -2263,10 +2318,12 @@ public class ToscaResourceInstaller {
vfModuleCustomization.setVolumeHeatEnv(volVfModuleArtifact.getHeatEnvironment());
vfModuleArtifact.incrementDeployedInDB();
} else if (vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ENV)) {
- if (vfModuleArtifact.getHeatEnvironment().getName().contains("volume")) {
- vfModuleCustomization.setVolumeHeatEnv(vfModuleArtifact.getHeatEnvironment());
- } else {
- vfModuleCustomization.setHeatEnvironment(vfModuleArtifact.getHeatEnvironment());
+ if (vfModuleArtifact.getHeatEnvironment() != null) {
+ if (vfModuleArtifact.getHeatEnvironment().getName().contains("volume")) {
+ vfModuleCustomization.setVolumeHeatEnv(vfModuleArtifact.getHeatEnvironment());
+ } else {
+ vfModuleCustomization.setHeatEnvironment(vfModuleArtifact.getHeatEnvironment());
+ }
}
vfModuleArtifact.incrementDeployedInDB();
} else if (vfModuleArtifact.getArtifactInfo().getArtifactType().equals(ASDCConfiguration.HEAT_ARTIFACT)) {