Implement additional functions

1. VM state
2. VM node
3. Lock flush
This commit is contained in:
Joshua Boniface 2019-08-07 14:24:16 -04:00
parent b7546e3711
commit ea2426fa73
3 changed files with 93 additions and 3 deletions

View File

@ -203,6 +203,55 @@ def vm_is_migrated(vm):
retdata = pvc_vm.is_migrated(zk_conn, vm)
return retdata
def vm_state(vm):
"""
Return the state of virtual machine VM.
"""
zk_conn = pvc_common.startZKConnection(config['coordinators'])
retflag, retdata = pvc_vm.get_list(zk_conn, None, None, vm, is_fuzzy=False)
if retflag:
if retdata:
retcode = 200
retdata = {
'name': vm,
'state': retdata[0]['state']
}
else:
retcode = 404
retdata = {
'message': 'VM not found.'
}
else:
retcode = 400
pvc_common.stopZKConnection(zk_conn)
return flask.jsonify(retdata), retcode
def vm_node(vm):
"""
Return the current node of virtual machine VM.
"""
zk_conn = pvc_common.startZKConnection(config['coordinators'])
retflag, retdata = pvc_vm.get_list(zk_conn, None, None, vm, is_fuzzy=False)
if retflag:
if retdata:
retcode = 200
retdata = {
'name': vm,
'node': retdata[0]['node'],
'last_node': retdata[0]['last_node']
}
else:
retcode = 404
retdata = {
'message': 'VM not found.'
}
else:
retcode = 400
pvc_common.stopZKConnection(zk_conn)
return flask.jsonify(retdata), retcode
def vm_list(node=None, state=None, limit=None, is_fuzzy=True):
"""
Return a list of VMs with limit LIMIT.
@ -417,6 +466,23 @@ def vm_unmigrate(name):
}
return flask.jsonify(output), retcode
def vm_flush_locks(name):
"""
Flush locks of a (stopped) VM.
"""
zk_conn = pvc_common.startZKConnection(config['coordinators'])
retflag, retdata = pvc_vm.flush_locks(zk_conn, name)
if retflag:
retcode = 200
else:
retcode = 400
pvc_common.stopZKConnection(zk_conn)
output = {
'message': retdata.replace('\"', '\'')
}
return flask.jsonify(output), retcode
#
# Network functions
#

View File

@ -274,7 +274,7 @@ def api_vm_element(vm):
@authenticator
def api_vm_state(vm):
if flask.request.method == 'GET':
return "Test", 200
return pvcapi.vm_state(vm)
if flask.request.method == 'POST':
if not 'state' in flask.request.values:
@ -294,7 +294,7 @@ def api_vm_state(vm):
@authenticator
def api_vm_node(vm):
if flask.request.method == 'GET':
return "Test", 200
return pvcapi.vm_node(vm)
if flask.request.method == 'POST':
if 'action' in flask.request.values:
@ -335,6 +335,15 @@ def api_vm_node(vm):
flask.abort(400)
@api.route('/api/v1/vm/<vm>/locks', methods=['GET', 'POST'])
@authenticator
def api_vm_locks(vm):
if flask.request.method == 'GET':
return "Not implemented", 400
if flask.request.method == 'POST':
return pvcapi.vm_flush_locks(vm)
#
# Network endpoints

View File

@ -325,7 +325,7 @@ Valid `state` values are: `start`, `shutdown`, `stop`, `restart`
* Mandatory values: N/A
* Optional values: N/A
Return the current host node and previous node, if applicable, for `<vm>`.
Return the current host node, and last host node if applicable, for `<vm>`.
###### `POST`
* Mandatory values: `action`
@ -343,6 +343,21 @@ If `permanent` is specified, the PVC system will not track the previous node and
If `force` is specified, and the VM has been previously migrated, force through a new migration to the selected target and do not update the previous node value.
#### `/api/v1/vm/<vm>/locks`
* Methods: `GET`, `POST`
###### `GET`
* Mandatory values: N/A
* Optional values: N/A
Not yet implemented and not planned. Return the list of RBD locks for the VM.
###### `POST`
* Mandatory values: N/A
* Optional values: N/A
Clear all RBD locks for volumes attached to `<vm>`.
### Network endpoints
These endpoints manage PVC client virtual network state and operation.