in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/connector/tasks/DeleteDeploymentTaskImpl.kt [61:103]
override fun create(api: AzureApi, taskContext: AzureTaskContext, parameter: DeleteDeploymentTaskParameter): Single<Unit> {
LOG.debug("Deleting deployment. Name=${parameter.name}, CorellationId=${taskContext.corellationId}")
val genericResourceService = api.genericResources().manager().inner().azureClient.retrofit().create(GenericResourceService::class.java)
return api
.deployments()
.getByResourceGroupAsync(parameter.resourceGroupName, parameter.name)
.onErrorResumeNext {
LOG.debug("Deployment ${parameter.name} in group ${parameter.resourceGroupName} was not found. CorellationId=${taskContext.corellationId}", it)
Observable.empty()
}
.flatMap { deployment: Deployment? ->
if (deployment == null) {
LOG.debug("Could not find deployment ${parameter.name} in group ${parameter.resourceGroupName}. Removing resource directly. CorellationId=${taskContext.corellationId}")
getVMResources(taskContext) {
api
.virtualMachines()
.getByResourceGroupAsync(parameter.resourceGroupName, parameter.name)
}
.concatMap { deleteResource(it, api, genericResourceService, taskContext) }
.takeLast(1)
.concatMap {
val subscriptionId = api.subscriptionId()
if (subscriptionId != null) {
myNotifications.raise(
AzureTaskVirtualMachineRemoved(
api,
taskContext,
getVirtualMachineResource(subscriptionId, parameter).resourceId,
)
)
} else {
Observable.just(Unit)
}
}
} else {
switchDeleteDeploymentStrategy(deployment, api, taskContext, genericResourceService, parameter)
}
}
.defaultIfEmpty(Unit)
.last()
.toSingle()
}