Support providing console log lines from API
This commit is contained in:
parent
8a0a278fe9
commit
1f77b382ef
|
@ -305,6 +305,35 @@ def vm_node(vm):
|
||||||
pvc_common.stopZKConnection(zk_conn)
|
pvc_common.stopZKConnection(zk_conn)
|
||||||
return retdata, retcode
|
return retdata, retcode
|
||||||
|
|
||||||
|
def vm_console(vm, lines=None):
|
||||||
|
"""
|
||||||
|
Return the current console log for VM.
|
||||||
|
"""
|
||||||
|
# Default to 10 lines of log if not set
|
||||||
|
if not lines:
|
||||||
|
lines = 10
|
||||||
|
|
||||||
|
zk_conn = pvc_common.startZKConnection(config['coordinators'])
|
||||||
|
retflag, retdata = pvc_vm.get_console_log(zk_conn, vm, lines)
|
||||||
|
|
||||||
|
if retflag:
|
||||||
|
if retdata:
|
||||||
|
retcode = 200
|
||||||
|
retdata = {
|
||||||
|
'name': vm,
|
||||||
|
'data': retdata
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
retcode = 404
|
||||||
|
retdata = {
|
||||||
|
'message': 'VM not found.'
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
retcode = 400
|
||||||
|
|
||||||
|
pvc_common.stopZKConnection(zk_conn)
|
||||||
|
return retdata ,retcode
|
||||||
|
|
||||||
def vm_list(node=None, state=None, limit=None, is_fuzzy=True):
|
def vm_list(node=None, state=None, limit=None, is_fuzzy=True):
|
||||||
"""
|
"""
|
||||||
Return a list of VMs with limit LIMIT.
|
Return a list of VMs with limit LIMIT.
|
||||||
|
|
|
@ -1292,6 +1292,49 @@ class API_VM_Locks(Resource):
|
||||||
return api_helper.vm_flush_locks(vm)
|
return api_helper.vm_flush_locks(vm)
|
||||||
api.add_resource(API_VM_Locks, '/vm/<vm>/locks')
|
api.add_resource(API_VM_Locks, '/vm/<vm>/locks')
|
||||||
|
|
||||||
|
# /vm/<vm</console
|
||||||
|
class API_VM_Console(Resource):
|
||||||
|
@RequestParser([
|
||||||
|
{ 'name': 'lines' }
|
||||||
|
])
|
||||||
|
@Authenticator
|
||||||
|
def get(self, vm, reqargs):
|
||||||
|
"""
|
||||||
|
Return the recent console log of {vm}
|
||||||
|
---
|
||||||
|
tags:
|
||||||
|
- vm
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
id: VMLog
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: The name of the VM
|
||||||
|
data:
|
||||||
|
type: string
|
||||||
|
description: The recent console log text
|
||||||
|
parameters:
|
||||||
|
- in: query
|
||||||
|
name: lines
|
||||||
|
type: integer
|
||||||
|
required: false
|
||||||
|
description: The number of lines to retrieve
|
||||||
|
404:
|
||||||
|
description: Not found
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
id: Message
|
||||||
|
"""
|
||||||
|
return api_helper.vm_console(
|
||||||
|
vm,
|
||||||
|
int(reqargs.get('lines', None))
|
||||||
|
)
|
||||||
|
api.add_resource(API_VM_Console, '/vm/<vm>/console')
|
||||||
|
|
||||||
|
|
||||||
##########################################################
|
##########################################################
|
||||||
# Client API - Network
|
# Client API - Network
|
||||||
|
|
|
@ -564,19 +564,13 @@ def get_console_log(zk_conn, domain, lines=1000):
|
||||||
|
|
||||||
# Get the data from ZK
|
# Get the data from ZK
|
||||||
console_log = zkhandler.readdata(zk_conn, '/domains/{}/consolelog'.format(dom_uuid))
|
console_log = zkhandler.readdata(zk_conn, '/domains/{}/consolelog'.format(dom_uuid))
|
||||||
|
print(lines)
|
||||||
|
|
||||||
# Shrink the log buffer to length lines
|
# Shrink the log buffer to length lines
|
||||||
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:
|
|
||||||
return False, 'ERROR: The "less" pager is required to view console logs.'
|
|
||||||
|
|
||||||
return True, ''
|
|
||||||
|
|
||||||
def follow_console_log(zk_conn, domain, lines=10):
|
def follow_console_log(zk_conn, domain, lines=10):
|
||||||
# Validate that VM exists in cluster
|
# Validate that VM exists in cluster
|
||||||
|
|
Loading…
Reference in New Issue