Use click.echo_via_pager for VM log output

Addresses #67
This commit is contained in:
Joshua Boniface 2020-01-08 10:06:34 -05:00
parent edbe29d06a
commit 9e7d86d5cf
2 changed files with 6 additions and 14 deletions

View File

@ -311,7 +311,7 @@ def vm_locks(config, vm):
def view_console_log(config, vm, lines=100): def view_console_log(config, vm, lines=100):
""" """
Return console log lines from the API and display them in a pager Return console log lines from the API (and display them in a pager in the main CLI)
API endpoint: GET /vm/{vm}/console API endpoint: GET /vm/{vm}/console
API arguments: lines={lines} API arguments: lines={lines}
@ -334,17 +334,7 @@ def view_console_log(config, vm, lines=100):
shrunk_log = console_log.split('\n')[-lines:] shrunk_log = console_log.split('\n')[-lines:]
loglines = '\n'.join(shrunk_log) loglines = '\n'.join(shrunk_log)
# Show it in the pager (less) return True, loglines
try:
pager = subprocess.Popen(['less', '-R'], stdin=subprocess.PIPE)
pager.communicate(input=loglines.encode('utf8'))
except FileNotFoundError:
ainformation = list()
ainformation.append("Error: `less` pager not found, dumping log ({} lines) to stdout".format(lines))
ainformation.append(loglines)
return False, '\n'.join(ainformation)
return True, ''
def follow_console_log(config, vm, lines=10): def follow_console_log(config, vm, lines=10):
""" """

View File

@ -779,7 +779,7 @@ def vm_flush_locks(domain):
'domain' 'domain'
) )
@click.option( @click.option(
'-l', '--lines', 'lines', default=100, show_default=True, '-l', '--lines', 'lines', default=1000, show_default=True,
help='Display this many log lines from the end of the log buffer.' help='Display this many log lines from the end of the log buffer.'
) )
@click.option( @click.option(
@ -788,13 +788,15 @@ def vm_flush_locks(domain):
) )
def vm_log(domain, lines, follow): def vm_log(domain, lines, follow):
""" """
Show console logs of virtual machine DOMAIN on its current node in the 'less' pager or continuously. DOMAIN may be a UUID or name. Note that migrating a VM to a different node will cause the log buffer to be overwritten by entries from the new node. Show console logs of virtual machine DOMAIN on its current node in a pager or continuously. DOMAIN may be a UUID or name. Note that migrating a VM to a different node will cause the log buffer to be overwritten by entries from the new node.
""" """
if follow: if follow:
retcode, retmsg = pvc_vm.follow_console_log(config, domain, lines) retcode, retmsg = pvc_vm.follow_console_log(config, domain, lines)
else: else:
retcode, retmsg = pvc_vm.view_console_log(config, domain, lines) retcode, retmsg = pvc_vm.view_console_log(config, domain, lines)
click.echo_via_pager(retmsg)
retmsg = ''
cleanup(retcode, retmsg) cleanup(retcode, retmsg)
############################################################################### ###############################################################################