aboutsummaryrefslogtreecommitdiffstats
path: root/vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt
diff options
context:
space:
mode:
Diffstat (limited to 'vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt')
-rw-r--r--vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt158
1 files changed, 152 insertions, 6 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt b/vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt
index af52fa049..276b00e6f 100644
--- a/vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt
+++ b/vid-app-common/src/main/java/org/onap/vid/job/command/VfmoduleCommand.kt
@@ -5,9 +5,10 @@ import org.onap.vid.job.Job
import org.onap.vid.job.JobAdapter
import org.onap.vid.job.JobCommand
import org.onap.vid.job.JobsBrokerService
-import org.onap.vid.model.Action
+import org.onap.vid.model.*
import org.onap.vid.model.serviceInstantiation.VfModule
import org.onap.vid.mso.RestMsoImplementation
+import org.onap.vid.mso.model.ModelInfo
import org.onap.vid.services.AsyncInstantiationBusinessLogic
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.config.ConfigurableBeanFactory
@@ -16,6 +17,8 @@ import org.springframework.http.HttpMethod
import org.springframework.stereotype.Component
import java.util.*
+typealias ToscaVfm = org.onap.vid.model.VfModule
+
@Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
class VfmoduleCommand @Autowired constructor(
@@ -45,7 +48,7 @@ class VfmoduleCommand @Autowired constructor(
val vnfInstanceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.VNF_INSTANCE_ID)
val vgInstaceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.VG_INSTANCE_ID)
- val instantiatePath = asyncInstantiationBL.getVfmoduleInstantiationPath(serviceInstanceId, vnfInstanceId)
+ val instantiatePath = asyncInstantiationBL.getVfmoduleInstantiationPath(serviceInstanceId, vnfInstanceId)
val requestDetailsWrapper = msoRequestBuilder.generateVfModuleInstantiationRequest(
request as VfModule,
@@ -75,14 +78,16 @@ class VfmoduleCommand @Autowired constructor(
return false
}
- private fun planReplaceMyselfRestCall(commandParentData: CommandParentData, request: JobAdapter.AsyncJobRequest, userId: String, testApi: String?): MsoRestCallPlan {
+ private fun planReplaceMyselfRestCall3(commandParentData: CommandParentData, request: JobAdapter.AsyncJobRequest, userId: String, testApi: String?): MsoRestCallPlan {
val serviceInstanceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.SERVICE_INSTANCE_ID)
val serviceModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.SERVICE_MODEL_INFO)
val vnfModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.VNF_MODEL_INFO)
val vnfInstanceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.VNF_INSTANCE_ID)
val replacePath = asyncInstantiationBL.getVfModuleReplacePath(serviceInstanceId, vnfInstanceId, getRequest().instanceId)
- val requestDetailsWrapper = msoRequestBuilder.generateVfModuleInstantiationRequest(
+ amendModelInfoWithNewestModel(serviceModelInfo, vnfModelInfo, (request as VfModule).modelInfo)
+
+ val requestDetailsWrapper = msoRequestBuilder.generateVfModuleInstantiationRequest(
request as VfModule, serviceModelInfo, serviceInstanceId,vnfModelInfo, vnfInstanceId,null,userId, testApi)
val actionDescription = "replace vfmodule ${request.instanceId}"
@@ -90,9 +95,142 @@ class VfmoduleCommand @Autowired constructor(
return MsoRestCallPlan(HttpMethod.POST, replacePath, Optional.of(requestDetailsWrapper), Optional.of(userId), actionDescription)
}
+ private fun planReplaceMyselfRestCall(commandParentData: CommandParentData): MsoRestCallPlan {
+
+ val newestModel = fetchNewestServiceModel()
+
+ val serviceInstanceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.SERVICE_INSTANCE_ID)
+ val vnfInstanceId = commandParentData.getInstanceId(CommandParentData.CommandDataKey.VNF_INSTANCE_ID)
+
+ val (serviceModelInfo, vnfModelInfo, vfmModelInfo) = newestSelector(newestModel, commandParentData);
+
+ val originalRequestWithNewestVfmModelInfo = getRequest().cloneWith(vfmModelInfo)
+
+ val requestDetailsWrapper = msoRequestBuilder.generateVfModuleInstantiationRequest(
+ originalRequestWithNewestVfmModelInfo, serviceModelInfo, serviceInstanceId,
+ vnfModelInfo, vnfInstanceId, null, sharedData.userId, sharedData.testApi)
+
+
+ val replacePath = asyncInstantiationBL.getVfModuleReplacePath(serviceInstanceId, vnfInstanceId, getRequest().instanceId)
+
+ return MsoRestCallPlan(HttpMethod.POST, replacePath, Optional.of(requestDetailsWrapper), Optional.of(sharedData.userId),
+ "replace vfmodule ${getRequest().instanceId}")
+ }
+
+ data class ModelsInfoTriplet(val serviceModelInfo: ModelInfo, val vnfModelInfo: ModelInfo, val vfmModelInfo: ModelInfo)
+
+ private fun newestSelector(newestModel: ServiceModel, commandParentData: CommandParentData): ModelsInfoTriplet {
+ val serviceModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.SERVICE_MODEL_INFO)
+ val vfmModelInfo = getRequest().modelInfo
+ val vnfModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.VNF_MODEL_INFO)
+
+ val newestServiceModelInfo = newestServiceModelInfo(newestModel)
+ val newestVfmModelInfo = newestVfmModelInfo(newestModel)
+ val newestVnfModelInfo = newestVnfModelInfo(newestModel, commandParentData)
+
+ return if (newestServiceModelInfo == null || newestVfmModelInfo == null || newestVnfModelInfo == null) {
+ ModelsInfoTriplet(serviceModelInfo, vnfModelInfo, vfmModelInfo)
+ } else {
+ ModelsInfoTriplet(newestServiceModelInfo, newestVnfModelInfo, newestVfmModelInfo)
+ }
+ }
+
+ private fun newestServiceModelInfo(newestModel: ServiceModel) = toModelInfo(newestModel.service)
+
+ private fun newestVfmModelInfo(newestModel: ServiceModel): ModelInfo? {
+ val vfmModelInfo = getRequest().modelInfo
+ val newestVfm = selectVfm(newestModel, vfmModelInfo)
+ return toModelInfo(newestVfm)
+ }
+
+ private fun newestVnfModelInfo(newestModel: ServiceModel, commandParentData: CommandParentData): ModelInfo? {
+ val vnfModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.VNF_MODEL_INFO)
+ val newestVnf = selectVnf(newestModel, vnfModelInfo)
+ return toModelInfo(newestVnf)
+ }
+
+ private fun selectVfm(newestModel: ServiceModel, modelInfo: ModelInfo) = newestModel.vfModules[modelInfo.modelCustomizationId]
+
+ private fun selectVnf(newestModel: ServiceModel, modelInfo: ModelInfo) = newestModel.vnfs[modelInfo.modelCustomizationId]
+
+ private fun toModelInfo(toBeConverted: VNF?): ModelInfo? = toBeConverted?.let { toModelInfo(it, "vnf") }
+
+ private fun toModelInfo(toBeConverted: ToscaVfm?): ModelInfo? = toBeConverted?.let { toModelInfo(it, "vfModule") }
+
+ private fun toModelInfo(toBeConverted: MinimalNode, modelType: String): ModelInfo {
+ val targetModelInfo = ModelInfo()
+
+ targetModelInfo.modelType = modelType
+ targetModelInfo.modelName = toBeConverted.name
+ targetModelInfo.modelNameVersionId = null
+ targetModelInfo.modelVersion = toBeConverted.version
+ targetModelInfo.modelVersionId = toBeConverted.uuid
+ targetModelInfo.modelInvariantId = toBeConverted.invariantUuid
+
+ targetModelInfo.modelCustomizationId = when (toBeConverted) {
+ is VNF -> toBeConverted.customizationUuid
+ is ToscaVfm -> toBeConverted.customizationUuid
+ else -> throw IllegalArgumentException()
+ }
+
+ targetModelInfo.modelCustomizationName = when (toBeConverted) {
+ is VNF -> toBeConverted.modelCustomizationName
+ is ToscaVfm -> toBeConverted.modelCustomizationName
+ else -> throw IllegalArgumentException()
+ }
+
+ return targetModelInfo
+ }
+
+ private fun toModelInfo(toBeConverted: Service?): ModelInfo? {
+
+ if (toBeConverted == null)
+ return null
+
+ val targetModelInfo = ModelInfo()
+
+ targetModelInfo.modelVersionId = toBeConverted.uuid
+ targetModelInfo.modelInvariantId = toBeConverted.invariantUuid
+ targetModelInfo.modelVersion = toBeConverted.version
+ //targetModelInfo.modelCustomizationId = toBeConverted.customizationUuid
+ //targetModelInfo.modelCustomizationName = toBeConverted.modelCustomizationName
+ targetModelInfo.modelType = "service"
+ targetModelInfo.modelName = toBeConverted.name
+
+ return targetModelInfo
+ }
+
+ private fun amendModelInfoWithNewestModel(serviceModelInfo: ModelInfo, vnfModelInfo: ModelInfo, vfmModelInfo: ModelInfo) {
+ val newestModel = fetchNewestServiceModel()
+ val newestService = newestModel.service
+
+ val newestVfm = newestModel.vfModules[vfmModelInfo.modelCustomizationId]
+ val newestVnf = newestModel.vnfs[vnfModelInfo.modelCustomizationId]
+
+ if (!(newestService == null || newestVnf == null || newestVfm == null)) {
+
+ serviceModelInfo.modelName = newestService.name
+ serviceModelInfo.modelVersionId = newestService.uuid
+ serviceModelInfo.modelVersion = newestService.version
+
+ vnfModelInfo.modelName = newestVnf.name
+ vnfModelInfo.modelVersionId = newestVnf.uuid
+ vnfModelInfo.modelVersion = newestVnf.version
+ vnfModelInfo.modelCustomizationId = newestVnf.customizationUuid
+ vnfModelInfo.modelCustomizationName = newestVnf.modelCustomizationName
+
+ vfmModelInfo.modelName = newestVfm.name
+ vfmModelInfo.modelVersionId = newestVfm.uuid
+ vfmModelInfo.modelVersion = newestVfm.version
+ vfmModelInfo.modelCustomizationId = newestVfm.customizationUuid
+ vfmModelInfo.modelCustomizationName = newestVfm.modelCustomizationName
+ }
+ }
+
+
override fun replaceMyself(): Job.JobStatus {
try {
- val replaceMyselfCommand = planReplaceMyselfRestCall(commandParentData, sharedData.request, sharedData.userId, sharedData.testApi )
+ val replaceMyselfCommand = planReplaceMyselfRestCall(commandParentData)
return executeAndHandleMsoInstanceRequest(replaceMyselfCommand)
} catch (exception: Exception) {
LOGGER.error("Failed to replace instanceId ${getRequest().instanceId} ", exception)
@@ -101,6 +239,14 @@ class VfmoduleCommand @Autowired constructor(
}
override fun isNeedToReplaceMySelf(): Boolean {
- return getActionType() == Action.Replace
+ return getActionType() == Action.Upgrade
+ }
+
+ private fun fetchNewestServiceModel(): ServiceModel {
+ val serviceModelInfo = commandParentData.getModelInfo(CommandParentData.CommandDataKey.SERVICE_MODEL_INFO)
+ var modelNewestUuid = commandUtils.getNewestModelUuid(serviceModelInfo.modelInvariantId);
+ var serviceNewestModel = commandUtils.getServiceModel(modelNewestUuid);
+
+ return serviceNewestModel;
}
}