Kobi Ianko has uploaded a new change for review. Change subject: Adding "updateVmPolicy" api ......................................................................
Adding "updateVmPolicy" api Adding an API method "updateVmPolicy". The method will be called from the engine when a VM SLA parameter will change, for now it will support the change of vcpuLimit. Change-Id: Ib6921bf349ce88000539150fc884f1163c738186 Signed-off-by: Kobi Ianko <[email protected]> --- M client/vdsClient.py M debian/vdsm.install M lib/vdsm/define.py M vdsm/API.py M vdsm/BindingXMLRPC.py M vdsm/Makefile.am M vdsm/virt/vm.py M vdsm_api/Bridge.py M vdsm_api/vdsmapi-schema.json 9 files changed, 76 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/90/28190/1 diff --git a/client/vdsClient.py b/client/vdsClient.py index 0235837..d9c53bd 100644 --- a/client/vdsClient.py +++ b/client/vdsClient.py @@ -258,6 +258,10 @@ def setNumberOfCpus(self, args): return self.ExecAndExit(self.s.setNumberOfCpus(args[0], args[1])) + def updateVmPolicy(self, args): + params = {'vmId': args[0], 'vcpuLimit': args[1]} + return self.ExecAndExit(self.s.updateVmPolicy(params)) + def do_changeCD(self, args): vmId = args[0] file = self._parseDriveSpec(args[1]) @@ -2567,6 +2571,11 @@ '<vmId> <numberOfCpus>', 'set the number of cpus for a running VM' )), + 'updateVmPolicy': ( + serv.updateVmPolicy, ( + '<vmId> <vcpuLimit>', + 'set SLA parameter for a VM' + )), } if _glusterEnabled: commands.update(ge.getGlusterCmdDict(serv)) diff --git a/debian/vdsm.install b/debian/vdsm.install index b435fa6..696286d 100644 --- a/debian/vdsm.install +++ b/debian/vdsm.install @@ -17,6 +17,7 @@ ./etc/vdsm/mom.d/01-parameters.policy ./etc/vdsm/mom.d/02-balloon.policy ./etc/vdsm/mom.d/03-ksm.policy +./etc/vdsm/mom.d/04-cputune.policy ./etc/vdsm/svdsm.logger.conf ./etc/vdsm/upgrade.logger.conf ./etc/vdsm/vdsm-tmpfiles.conf diff --git a/lib/vdsm/define.py b/lib/vdsm/define.py index 7e6cadb..025d952 100644 --- a/lib/vdsm/define.py +++ b/lib/vdsm/define.py @@ -138,6 +138,9 @@ 'haErr': {'status': { 'code': 61, 'message': 'Failed to set Hosted Engine HA policy'}}, + 'updateVmPolicyErr': {'status': { + 'code': 62, + 'message': 'Failed to update VM SLA policy'}}, 'recovery': {'status': { 'code': 99, 'message': 'Recovering from crash or Initializing'}}, diff --git a/vdsm/API.py b/vdsm/API.py index 3235a6f..456a083 100644 --- a/vdsm/API.py +++ b/vdsm/API.py @@ -483,6 +483,23 @@ return curVm.setNumberOfCpus(int(numberOfCpus)) + def updateVmPolicy(self, params): + + if params['vmId'] is None or params['vcpuLimit'] is None: + self.log.error('Missing one of required parameters: \ + vmId: (%s), numberOfCpus: (%s)', params['vmId'], + params['vcpuLimit']) + return {'status': {'code': errCode['MissParam']['status']['code'], + 'message': 'Missing one of required ' + 'parameters: vmId, vcpuLimit'}} + try: + curVm = self._cif.vmContainer[self._UUID] + except KeyError: + self.log.warning("vm %s doesn't exist", self._UUID) + return errCode['noVM'] + + return curVm.updateVmPolicy(params) + def migrate(self, params): """ Migrate a VM to a remote host. diff --git a/vdsm/BindingXMLRPC.py b/vdsm/BindingXMLRPC.py index 629ed62..18ded0a 100644 --- a/vdsm/BindingXMLRPC.py +++ b/vdsm/BindingXMLRPC.py @@ -362,6 +362,10 @@ vm = API.VM(vmId) return vm.setNumberOfCpus(vmId, numberOfCpus) + def vmUpdateVmPolicy(self, params): + vm = API.VM(params['vmId']) + return vm.updateVmPolicy(params) + def vmSnapshot(self, vmId, snapDrives, snapMemVolHandle=''): """ Take snapshot of VM @@ -932,7 +936,8 @@ (self.vmHotplugNic, 'hotplugNic'), (self.vmHotunplugNic, 'hotunplugNic'), (self.vmUpdateDevice, 'vmUpdateDevice'), - (self.vmSetNumberOfCpus, 'setNumberOfCpus')) + (self.vmSetNumberOfCpus, 'setNumberOfCpus'), + (self.vmUpdateVmPolicy, 'updateVmPolicy')) def getIrsMethods(self): return ((self.domainActivate, 'activateStorageDomain'), diff --git a/vdsm/Makefile.am b/vdsm/Makefile.am index b72c100..3d6ac9c 100644 --- a/vdsm/Makefile.am +++ b/vdsm/Makefile.am @@ -105,6 +105,7 @@ mom.d/01-parameters.policy \ mom.d/02-balloon.policy \ mom.d/03-ksm.policy \ + mom.d/04-cputune.policy \ sourceRoute.sh \ sudoers.vdsm.in \ svdsm.logger.conf.in \ diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py index 691e952..a5298eb 100644 --- a/vdsm/virt/vm.py +++ b/vdsm/virt/vm.py @@ -3358,6 +3358,26 @@ hooks.after_set_num_of_cpus() return {'status': doneCode, 'vmList': self.status()} + def updateVmPolicy(self, params): + + if self.isMigrating(): + return errCode['migInProgress'] + + try: + metadataType = libvirt.VIR_DOMAIN_METADATA_ELEMENT + self._dom.setMetadata(metadataType, '<vcpulimit>' + + params['vcpuLimit'] + + '</vcpulimit>', 'ovirt', + 'http://ovirt.org/param/vcpu_limit', 0) + except libvirt.libvirtError as e: + self.log.error("updateVmPolicy failed", exc_info=True) + if e.get_error_code() == libvirt.VIR_ERR_NO_DOMAIN: + return errCode['noVM'] + return {'status': {'code': errCode['updateVmPolicyErr'] + ['status']['code'], 'message': e.message}} + + return {'status': doneCode} + def _createTransientDisk(self, diskParams): if diskParams.get('shared', None) != DRIVE_SHARED_TYPE.TRANSIENT: return diff --git a/vdsm_api/Bridge.py b/vdsm_api/Bridge.py index 566587f..dec602b 100644 --- a/vdsm_api/Bridge.py +++ b/vdsm_api/Bridge.py @@ -364,6 +364,7 @@ 'VM_mergeStatus': {'ret': 'mergeStatus'}, 'VM_migrationCreate': {'ret': VM_migrationCreate_Ret}, 'VM_setNumberOfCpus': {'ret': 'vmList'}, + 'VM_updateVmPolicy': {}, 'Volume_copy': {'ret': 'uuid'}, 'Volume_create': {'ret': 'uuid'}, 'Volume_delete': {'ret': 'uuid'}, diff --git a/vdsm_api/vdsmapi-schema.json b/vdsm_api/vdsmapi-schema.json index 28df1e9..c01265c 100644 --- a/vdsm_api/vdsmapi-schema.json +++ b/vdsm_api/vdsmapi-schema.json @@ -7298,7 +7298,6 @@ 'data': {'vmID': 'UUID', 'numberOfCpus': 'int'}, 'returns': 'VmDefinition'} - ## # @VM.setCpuTuneQuota: # @@ -7329,3 +7328,21 @@ {'command': {'class': 'VM', 'name': 'setCpuTunePeriod'}, 'data': {'period': 'int'}, 'returns': 'TasksStatus'} + +## +# @VM.updateVmPolicy: +# +# Set VM SLA parameters +# +# @vmID: The UUID of the VM +# +# @vcpuLimit: vcpu limit to set - the value is a percentage representation +# of the amount of cpu from the Host that the VM can consume +# +# Returns: +# The VM definition, as updated +# +# Since: 4.15.0 +## +{'command': {'class': 'VM', 'name': 'updateVmPolicy'}, + 'data': {'vmID': 'UUID', 'vcpuLimit': 'int'}} -- To view, visit http://gerrit.ovirt.org/28190 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib6921bf349ce88000539150fc884f1163c738186 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Kobi Ianko <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
