def handle(self, *args, **options): if len(args) != 1: raise CommandError("Please provide a server ID") server = get_vm(args[0]) flavor = '%s (%s)' % (server.flavor.id, server.flavor.name) userid = server.userid imageid = server.imageid try: image_name = get_image(imageid, userid).get('name') except: image_name = "None" image = '%s (%s)' % (imageid, image_name) usercache = UserCache(ASTAKOS_BASE_URL, ASTAKOS_TOKEN) kv = { 'id': server.id, 'name': server.name, 'owner_uuid': userid, 'owner_name': usercache.get_name(userid), 'created': utils.format_date(server.created), 'updated': utils.format_date(server.updated), 'image': image, 'host id': server.hostid, 'flavor': flavor, 'deleted': utils.format_bool(server.deleted), 'suspended': utils.format_bool(server.suspended), 'state': format_vm_state(server), } utils.pprint_table(self.stdout, [kv.values()], kv.keys(), options["output_format"], vertical=True)
def handle(self, *args, **options): if len(args) != 1: raise CommandError("Please provide a server ID") server = get_resource("server", args[0]) flavor = '%s (%s)' % (server.flavor.id, server.flavor.name) userid = server.userid imageid = server.imageid try: image_name = get_image(imageid, userid).get('name') except: image_name = "None" image = '%s (%s)' % (imageid, image_name) usercache = UserCache(ASTAKOS_AUTH_URL, ASTAKOS_TOKEN) kv = { 'id': server.id, 'name': server.name, 'owner_uuid': userid, 'owner_name': usercache.get_name(userid), 'project': server.project, 'shared_to_project': server.shared_to_project, 'created': utils.format_date(server.created), 'rescue': server.rescue, 'rescue_image': (server.rescue_image.id if server.rescue_image is not None else None), 'updated': utils.format_date(server.updated), 'image': image, 'host id': server.hostid, 'flavor': flavor, 'deleted': utils.format_bool(server.deleted), 'suspended': utils.format_bool(server.suspended), 'state': format_vm_state(server), 'task': server.task, 'task_job_id': server.task_job_id, } self.pprint_table([kv.values()], kv.keys(), options["output_format"], vertical=True)
def handle(self, *args, **options): if len(args) != 1: raise CommandError("Please provide a server ID") vm = common.get_vm(args[0]) displayname = options['displayname'] ucache = UserCache(ASTAKOS_BASE_URL, ASTAKOS_TOKEN) try: image = common.get_image(vm.imageid, vm.userid)['name'] except: image = vm.imageid sep = '-' * 80 + '\n' labels = filter(lambda x: x is not Omit, ['name', 'owner_uuid', 'owner_name' if displayname else Omit, 'flavor', 'image', 'state', 'backend', 'deleted', 'action', 'backendjobid', 'backendopcode', 'backendjobstatus', 'backend_time']) uuid = vm.userid if displayname: dname = ucache.get_name(uuid) fields = filter(lambda x: x is not Omit, [vm.name, uuid, dname if displayname else Omit, vm.flavor.name, image, common.format_vm_state(vm), str(vm.backend), str(vm.deleted), str(vm.action), str(vm.backendjobid), str(vm.backendopcode), str(vm.backendjobstatus), str(vm.backendtime)]) self.stdout.write(sep) self.stdout.write('State of Server in DB\n') self.stdout.write(sep) for l, f in zip(labels, fields): self.stdout.write(l.ljust(18) + ': ' + f.ljust(20) + '\n') self.stdout.write('\n') for nic in vm.nics.all(): params = (nic.index, nic.ipv4, nic.mac, nic.ipv6, nic.network) self.stdout.write("nic/%d: IPv4: %s, MAC: %s, IPv6:%s," " Network: %s\n" % params) client = vm.get_client() try: g_vm = client.GetInstance(vm.backend_vm_id) self.stdout.write('\n') self.stdout.write(sep) self.stdout.write('State of Server in Ganeti\n') self.stdout.write(sep) for i in GANETI_INSTANCE_FIELDS: try: value = g_vm[i] if i.find('time') != -1: value = datetime.fromtimestamp(value) self.stdout.write(i.ljust(14) + ': ' + str(value) + '\n') except KeyError: pass except GanetiApiError as e: if e.code == 404: self.stdout.write('Server does not exist in backend %s\n' % vm.backend.clustername) else: raise e if not options['jobs']: return self.stdout.write('\n') self.stdout.write(sep) self.stdout.write('Non-archived jobs concerning Server in Ganeti\n') self.stdout.write(sep) jobs = client.GetJobs() for j in jobs: info = client.GetJobStatus(j) summary = ' '.join(info['summary']) job_is_relevant = summary.startswith("INSTANCE") and\ (summary.find(vm.backend_vm_id) != -1) if job_is_relevant: for i in GANETI_JOB_FIELDS: value = info[i] if i.find('_ts') != -1: value = merge_time(value) try: self.stdout.write(i.ljust(14) + ': ' + str(value) + '\n') except KeyError: pass self.stdout.write('\n' + sep) # Return the RAPI client to pool vm.put_client(client)