override fun terminateInstance()

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
            }
        }
    }