From 992883f9d410a4d3467c621d999a9881e504a6b6 Mon Sep 17 00:00:00 2001 From: Antoine Millet Date: Fri, 18 Mar 2011 15:43:22 +0100 Subject: [PATCH] Added undefine method handler. --- ccserver/handlers.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/ccserver/handlers.py b/ccserver/handlers.py index f2911be..8a737be 100644 --- a/ccserver/handlers.py +++ b/ccserver/handlers.py @@ -242,6 +242,45 @@ class CliHandler(OnlineCCHandler): self._check(conn, 'resume', query) return self._vm_action(query, 'vm_resume') + @listed + def undefine(self, conn, query, delete_storage=True): + ''' + Undefine selected virtual machines. + + :param query: the tql query to select objects. + :param delete_storage: delete storage of vm. + :return: a dict where key is the id of a selected object, and the value + a tuple (errcode, message) where errcode is (success|error|warn) and + message an error message or the output of the command in case of + success. + ''' + + self._check(conn, 'undefine', query) + + #FIXME: When tag globbing will be implemented, the list of tags to + # show will be: r, p, h, disk* + # I ask "all tags" pending implementation. + objects = self._server.list(query, show=set(('*',))) + errs = Reporter() + for obj in objects: + if obj['r'] != 'vm': + errs.error(obj['id'], 'bad role') + continue + try: + hvcon = self._server.get_connection(obj['p']) + except KeyError: + errs.error(obj['id'], 'hypervisor not connected') + else: + if delete_storage: + for disk in obj.get('disk', '').split(): + pool = obj.get('disk%s_pool' % disk) + name = obj.get('disk%s_vol' % disk) + hvcon.proxy.vol_delete(pool, name) + hvcon.proxy.vm_undefine(obj['h']) + errs.success(obj['id'], 'vm undefined') + + return errs.get_dict() + @listed def passwd(self, conn, query, password, method='ssha'): ''' -- GitLab