in plugin-azure-server/src/main/kotlin/jetbrains/buildServer/clouds/azure/arm/AzureCloudImage.kt [355:394]
override fun terminateInstance(instance: AzureCloudInstance) {
if (instance.properties.containsKey(AzureConstants.TAG_INVESTIGATION)) {
LOG.info("Could not stop virtual machine ${instance.describe()} under investigation. To do that remove ${AzureConstants.TAG_INVESTIGATION} tag from it.")
return
}
val image = this
instance.status = InstanceStatus.SCHEDULED_TO_STOP
myScope.launch {
try {
instance.provisioningInProgress = true
instance.status = InstanceStatus.STOPPING
val sameVhdImage = isSameImageInstance(instance)
if (myImageDetails.behaviour.isDeleteAfterStop) {
LOG.info("Removing virtual machine ${instance.describe()} due to cloud image settings")
myApiConnector.deleteInstance(instance)
instance.status = InstanceStatus.STOPPED
} else if (!sameVhdImage) {
LOG.info("Removing virtual machine ${instance.describe()} due to cloud image retention policy")
myApiConnector.deleteInstance(instance)
instance.status = InstanceStatus.STOPPED
} else {
LOG.info("Stopping virtual machine ${instance.describe()}")
myApiConnector.stopInstance(instance)
instance.status = InstanceStatus.STOPPED
}
LOG.info("Virtual machine ${instance.describe()} has been successfully terminated")
myInstanceListener.instanceTerminated(instance)
} catch (e: Throwable) {
LOG.warnAndDebugDetails(e.message, e)
instance.status = InstanceStatus.ERROR
instance.updateErrors(TypedCloudErrorInfo.fromException(e))
} finally {
instance.provisioningInProgress = false
}
}
}