From c2a95711da7229691cf9f937377ab7826e265d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20G=C3=B3mez=20Garc=C3=ADa?= Date: Mon, 20 Aug 2018 13:38:54 +0200 Subject: [PATCH] Fixed trying to remove VM when LCM_STATE was "boot" or prior for OpenNebula --- server/src/uds/services/OpenNebula/LiveDeployment.py | 9 ++++++++- server/src/uds/services/OpenNebula/LiveService.py | 6 +++--- server/src/uds/services/OpenNebula/Provider.py | 4 ++-- server/src/uds/services/OpenNebula/on/vm.py | 6 +++--- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/server/src/uds/services/OpenNebula/LiveDeployment.py b/server/src/uds/services/OpenNebula/LiveDeployment.py index 58133a3ab..3c5b641b5 100644 --- a/server/src/uds/services/OpenNebula/LiveDeployment.py +++ b/server/src/uds/services/OpenNebula/LiveDeployment.py @@ -39,7 +39,7 @@ from . import on import pickle import logging -__updated__ = '2018-03-16' +__updated__ = '2018-08-20' logger = logging.getLogger(__name__) @@ -356,6 +356,13 @@ class LiveDeployment(UserDeployment): if state == on.VmState.UNKNOWN: raise Exception('Machine not found') + if state == on.VmState.ACTIVE: + subState = self.service().getMachineSubstate(self._vmid) + if subState < 3: # Less than running + logger.info('Must wait before remove: {}'.format(subState)) + self.__pushFrontOp(opRetry) + return + self.service().removeMachine(self._vmid) def __startMachine(self): diff --git a/server/src/uds/services/OpenNebula/LiveService.py b/server/src/uds/services/OpenNebula/LiveService.py index 97f94c918..a2a9d928f 100644 --- a/server/src/uds/services/OpenNebula/LiveService.py +++ b/server/src/uds/services/OpenNebula/LiveService.py @@ -40,7 +40,7 @@ from uds.core.ui import gui import logging -__updated__ = '2018-03-16' +__updated__ = '2018-08-20' logger = logging.getLogger(__name__) @@ -214,12 +214,12 @@ class LiveService(Service): ''' return self.parent().getMachineState(machineId) - def getMachineSubState(self, machineId): + def getMachineSubstate(self, machineId): ''' On OpenNebula, the machine can be "active" but not "running". Any active machine will have a LCM_STATE, that is what we get here ''' - return self.parent().getMachineSubState(machineId) + return self.parent().getMachineSubstate(machineId) def startMachine(self, machineId): ''' diff --git a/server/src/uds/services/OpenNebula/Provider.py b/server/src/uds/services/OpenNebula/Provider.py index 8bfe2dfc2..e56bec8c3 100644 --- a/server/src/uds/services/OpenNebula/Provider.py +++ b/server/src/uds/services/OpenNebula/Provider.py @@ -49,7 +49,7 @@ import six # Python bindings for OpenNebula # import oca -__updated__ = '2018-03-16' +__updated__ = '2018-08-20' logger = logging.getLogger(__name__) @@ -187,7 +187,7 @@ class Provider(ServiceProvider): ''' return on.vm.getMachineState(self.api, machineId) - def getMachineSubState(self, machineId): + def getMachineSubstate(self, machineId): ''' Returns the LCM_STATE of a machine (must be ready) ''' diff --git a/server/src/uds/services/OpenNebula/on/vm.py b/server/src/uds/services/OpenNebula/on/vm.py index 328ecd790..054ab4ada 100644 --- a/server/src/uds/services/OpenNebula/on/vm.py +++ b/server/src/uds/services/OpenNebula/on/vm.py @@ -39,7 +39,7 @@ from defusedxml import minidom # Python bindings for OpenNebula from .common import VmState -__updated__ = '2018-03-16' +__updated__ = '2018-08-20' logger = logging.getLogger(__name__) @@ -71,7 +71,7 @@ def getMachineSubstate(api, machineId): Returns the lcm_state ''' try: - return api.getVMSubState(machineId) + return api.getVMSubstate(machineId) except Exception as e: logger.error('Error obtaining machine state for {} on OpenNebula: {}'.format(machineId, e)) @@ -156,7 +156,7 @@ def removeMachine(api, machineId): api.deleteVM(machineId) except Exception as e: logger.exception('Error removing machine {} on OpenNebula: {}'.format(machineId, e)) - raise 'Error removing machine {} on OpenNebula: {}'.format(machineId, e) + raise Exception('Error removing machine {} on OpenNebula: {}'.format(machineId, e)) def enumerateMachines(api):