def pprint_volume_in_ganeti(volume, stdout=None, title=None): if stdout is None: stdout = sys.stdout if title is None: title = "State of volume %s in Ganeti" % volume.id vm = volume.machine if vm is None: stdout.write("volume is not attached to any instance.\n") return client = vm.get_client() try: vm_info = client.GetInstance(vm.backend_vm_id) except GanetiApiError as e: if e.code == 404: stdout.write("Volume seems attached to server %s, but" " server does not exist in backend.\n" % vm) return raise e disks = disks_from_instance(vm_info) try: gnt_disk = filter( lambda disk: disk.get("name") == volume.backend_volume_uuid, disks)[0] gnt_disk["instance"] = vm_info["name"] except IndexError: stdout.write("Volume %s is not attached to instance %s\n" % (volume.id, vm.id)) return pprint_table(stdout, gnt_disk.items(), None, separator=" | ", title=title) vm.put_client(client)
def pprint_server_in_ganeti(server, print_jobs=False, stdout=None, title=None): if stdout is None: stdout = sys.stdout if title is None: title = "State of Server %s in Ganeti" % server.id client = server.get_client() try: server_info = client.GetInstance(server.backend_vm_id) except GanetiApiError as e: if e.code == 404: stdout.write("Server '%s' does not exist in backend '%s'\n" % (server.id, server.backend.clustername)) return raise e server.put_client(client) GANETI_INSTANCE_FIELDS = ('name', 'oper_state', 'admin_state', 'status', 'pnode', 'snode', 'network_port', 'disk_template', 'disk_usage', 'oper_ram', 'oper_vcpus', 'mtime') server_dict = OrderedDict([(k, server_info.get(k)) for k in GANETI_INSTANCE_FIELDS]) pprint_table(stdout, server_dict.items(), None, separator=" | ", title=title) stdout.write("\n") nics = nics_from_instance(server_info) nics_keys = ["ip", "mac", "name", "network"] nics_values = [[nic[key] for key in nics_keys] for nic in nics] pprint_table(stdout, nics_values, nics_keys, separator=" | ", title="NICs of Server %s in Ganeti" % server.id) stdout.write("\n") disks = disks_from_instance(server_info) disks_keys = ["name", "size"] disks_values = [[disk[key] for key in disks_keys] for disk in disks] pprint_table(stdout, disks_values, disks_keys, separator=" | ", title="Disks of Server %s in Ganeti" % server.id) if not print_jobs: return client = server.get_client() jobs = client.GetJobs(bulk=True) server_jobs = filter( lambda x: server.backend_vm_id in (" ".join(x.get("summary"))), jobs) GANETI_JOB_FIELDS = ('id', 'status', 'summary', 'opresult', 'opstatus', 'oplog', 'start_ts', 'end_ts') for server_job in server_jobs: stdout.write("\n") values = [server_job.get(k) for k in GANETI_JOB_FIELDS] pprint_table(stdout, zip(GANETI_JOB_FIELDS, values), None, separator=" | ", title="Ganeti Job %s" % server_job["id"]) server.put_client(client)
def pprint_volume_in_ganeti(volume, stdout=None, title=None): if stdout is None: stdout = sys.stdout if title is None: title = "State of volume %s in Ganeti" % volume.id vm = volume.machine if vm is None: stdout.write("volume is not attached to any instance.\n") return client = vm.get_client() try: vm_info = client.GetInstance(vm.backend_vm_id) except GanetiApiError as e: if e.code == 404: stdout.write("Volume seems attached to server %s, but" " server does not exist in backend.\n" % vm) return raise e disks = disks_from_instance(vm_info) try: gnt_disk = filter(lambda disk: disk.get("name") == volume.backend_volume_uuid, disks)[0] gnt_disk["instance"] = vm_info["name"] except IndexError: stdout.write("Volume %s is not attached to instance %s\n" % (volume.id, vm.id)) return pprint_table(stdout, gnt_disk.items(), None, separator=" | ", title=title) vm.put_client(client)