Loading cloudcontrol/server/clients/cli.py +72 −30 Original line number Diff line number Diff line Loading @@ -298,14 +298,11 @@ class CliHandler(RegisteredCCHandler): if tag_name in self.server.RESERVED_TAGS: raise ReservedTagError('Tag %r is read-only' % tag_name) objects = self.client.list(query, show=('a',), method='addtag') objects = self.client.list(query, show=('a', 'p', 'h'), method='addtag') errs = Reporter() with self.conf: for obj in objects: if 'a' not in obj: errs.error(obj['id'], 'not an account') continue if 'a' in obj: # Update the configuration for this account: tags = self.conf.show(obj['a'])['tags'] if tag_name in tags: Loading @@ -320,6 +317,23 @@ class CliHandler(RegisteredCCHandler): dbobj = self.server.db.get(obj['id']) dbobj.register(StaticTag(tag_name, tag_value), override=True) self.conf.add_tag(obj['a'], tag_name, tag_value) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: errs.error(obj['id'], 'hypervisor not connected') else: try: hvcon.proxy.tag_add(obj['h'], tag_name, tag_value) except NameError: errs.error(obj['id'], 'hypervisor does not handle tags on VMs') except Exception, err: errs.error(obj['id'], str(err)) else: errs.success(obj['id'], 'tag set on VM') else: errs.error(obj['id'], 'this object cannot have static tags') continue return errs.get_dict() Loading @@ -334,13 +348,11 @@ class CliHandler(RegisteredCCHandler): if tag_name in self.server.RESERVED_TAGS: raise ReservedTagError('Tag %r is read-only' % tag_name) objects = self.client.list(query, show=('a',), method='deltag') objects = self.client.list(query, show=('a', 'p', 'h'), method='deltag') errs = Reporter() with self.conf: for obj in objects: if 'a' not in obj: errs.error(obj['id'], 'not an account') continue if 'a' in obj: tags = self.conf.show(obj['a'])['tags'] if tag_name in tags: errs.success(obj['id'], 'tag deleted') Loading @@ -349,6 +361,23 @@ class CliHandler(RegisteredCCHandler): else: errs.warn(obj['id'], 'unknown tag') self.server.conf.remove_tag(obj['a'], tag_name) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: errs.error(obj['id'], 'hypervisor not connected') else: try: hvcon.proxy.tag_delete(obj['h'], tag_name) except NameError: errs.error(obj['id'], 'hypervisor does not handle tags on VMs') except Exception, err: errs.error(obj['id'], str(err)) else: errs.success(obj['id'], 'tag deleted on VM') else: errs.error(obj['id'], 'this object cannot have static tags') continue return errs.get_dict() Loading @@ -359,7 +388,7 @@ class CliHandler(RegisteredCCHandler): :param query: the query to select objects """ objects = self.client.list(query, show=('a',), method='tags') objects = self.client.list(query, show=('a', 'p', 'h'), method='tags') tags = [] for obj in objects: o = {'id': obj['id']} Loading @@ -367,6 +396,19 @@ class CliHandler(RegisteredCCHandler): otags = self.server.conf.show(obj['a'])['tags'] otags.update({'id': obj['id']}) o.update(otags) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: pass else: try: otags = hvcon.proxy.tag_show(obj['h']) except: self.logger.exception('Unable to get tags, node error') else: otags.update({'id': obj['id']}) o.update(otags) tags.append(o) return {'objects': tags, 'order': ['id']} Loading Loading
cloudcontrol/server/clients/cli.py +72 −30 Original line number Diff line number Diff line Loading @@ -298,14 +298,11 @@ class CliHandler(RegisteredCCHandler): if tag_name in self.server.RESERVED_TAGS: raise ReservedTagError('Tag %r is read-only' % tag_name) objects = self.client.list(query, show=('a',), method='addtag') objects = self.client.list(query, show=('a', 'p', 'h'), method='addtag') errs = Reporter() with self.conf: for obj in objects: if 'a' not in obj: errs.error(obj['id'], 'not an account') continue if 'a' in obj: # Update the configuration for this account: tags = self.conf.show(obj['a'])['tags'] if tag_name in tags: Loading @@ -320,6 +317,23 @@ class CliHandler(RegisteredCCHandler): dbobj = self.server.db.get(obj['id']) dbobj.register(StaticTag(tag_name, tag_value), override=True) self.conf.add_tag(obj['a'], tag_name, tag_value) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: errs.error(obj['id'], 'hypervisor not connected') else: try: hvcon.proxy.tag_add(obj['h'], tag_name, tag_value) except NameError: errs.error(obj['id'], 'hypervisor does not handle tags on VMs') except Exception, err: errs.error(obj['id'], str(err)) else: errs.success(obj['id'], 'tag set on VM') else: errs.error(obj['id'], 'this object cannot have static tags') continue return errs.get_dict() Loading @@ -334,13 +348,11 @@ class CliHandler(RegisteredCCHandler): if tag_name in self.server.RESERVED_TAGS: raise ReservedTagError('Tag %r is read-only' % tag_name) objects = self.client.list(query, show=('a',), method='deltag') objects = self.client.list(query, show=('a', 'p', 'h'), method='deltag') errs = Reporter() with self.conf: for obj in objects: if 'a' not in obj: errs.error(obj['id'], 'not an account') continue if 'a' in obj: tags = self.conf.show(obj['a'])['tags'] if tag_name in tags: errs.success(obj['id'], 'tag deleted') Loading @@ -349,6 +361,23 @@ class CliHandler(RegisteredCCHandler): else: errs.warn(obj['id'], 'unknown tag') self.server.conf.remove_tag(obj['a'], tag_name) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: errs.error(obj['id'], 'hypervisor not connected') else: try: hvcon.proxy.tag_delete(obj['h'], tag_name) except NameError: errs.error(obj['id'], 'hypervisor does not handle tags on VMs') except Exception, err: errs.error(obj['id'], str(err)) else: errs.success(obj['id'], 'tag deleted on VM') else: errs.error(obj['id'], 'this object cannot have static tags') continue return errs.get_dict() Loading @@ -359,7 +388,7 @@ class CliHandler(RegisteredCCHandler): :param query: the query to select objects """ objects = self.client.list(query, show=('a',), method='tags') objects = self.client.list(query, show=('a', 'p', 'h'), method='tags') tags = [] for obj in objects: o = {'id': obj['id']} Loading @@ -367,6 +396,19 @@ class CliHandler(RegisteredCCHandler): otags = self.server.conf.show(obj['a'])['tags'] otags.update({'id': obj['id']}) o.update(otags) elif 'p' in obj: try: hvcon = self.server.get_client(obj['p']) except KeyError: pass else: try: otags = hvcon.proxy.tag_show(obj['h']) except: self.logger.exception('Unable to get tags, node error') else: otags.update({'id': obj['id']}) o.update(otags) tags.append(o) return {'objects': tags, 'order': ['id']} Loading