192 lines
6.1 KiB
Python
Executable File
192 lines
6.1 KiB
Python
Executable File
#
|
|
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
from nfv_common import debug
|
|
|
|
from nfv_vim import rpc
|
|
from nfv_vim import tables
|
|
from nfv_vim import directors
|
|
|
|
DLOG = debug.debug_get_logger('nfv_vim.vim_volume_api_events')
|
|
|
|
_volume_create_operations = dict()
|
|
_volume_update_operations = dict()
|
|
_volume_delete_operations = dict()
|
|
|
|
|
|
def _create_volume_callback(success, volume_uuid, volume_name,
|
|
volume_description, size_gb, bootable,
|
|
encrypted, avail_status, action):
|
|
"""
|
|
Handle Create-Volume callback
|
|
"""
|
|
DLOG.verbose("Create volume callback, name=%s." % volume_name)
|
|
|
|
connection = _volume_create_operations.get(volume_name, None)
|
|
if connection is not None:
|
|
response = rpc.APIResponseCreateVolume()
|
|
if success:
|
|
response.uuid = volume_uuid
|
|
response.name = volume_name
|
|
response.description = volume_description
|
|
response.size_gb = size_gb
|
|
response.bootable = bootable
|
|
response.encrypted = encrypted
|
|
response.avail_status = avail_status
|
|
response.action = action
|
|
else:
|
|
response.result = rpc.RPC_MSG_RESULT.FAILED
|
|
|
|
connection.send(response.serialize())
|
|
connection.close()
|
|
DLOG.verbose("Sent response=%s" % response)
|
|
del _volume_create_operations[volume_name]
|
|
|
|
|
|
def vim_volume_api_create_volume(connection, msg):
|
|
"""
|
|
Handle Create-Volume API request
|
|
"""
|
|
global _volume_create_operations
|
|
|
|
DLOG.verbose("Create volume, name=%s." % msg.name)
|
|
_volume_create_operations[msg.name] = connection
|
|
volume_director = directors.get_volume_director()
|
|
volume_director.volume_create(msg.name, msg.description, msg.size_gb,
|
|
msg.image_uuid, _create_volume_callback)
|
|
|
|
|
|
def _update_volume_callback(success, volume_uuid, volume_name,
|
|
volume_description, size_gb, bootable,
|
|
encrypted, avail_status, action):
|
|
"""
|
|
Handle Update-Volume callback
|
|
"""
|
|
DLOG.verbose("Update volume callback, uuid=%s." % volume_uuid)
|
|
|
|
connection = _volume_update_operations.get(volume_uuid, None)
|
|
if connection is not None:
|
|
response = rpc.APIResponseUpdateVolume()
|
|
if success:
|
|
response.uuid = volume_uuid
|
|
response.name = volume_name
|
|
response.description = volume_description
|
|
response.size_gb = size_gb
|
|
response.bootable = bootable
|
|
response.encrypted = encrypted
|
|
response.avail_status = avail_status
|
|
response.action = action
|
|
else:
|
|
response.result = rpc.RPC_MSG_RESULT.FAILED
|
|
|
|
connection.send(response.serialize())
|
|
connection.close()
|
|
DLOG.verbose("Sent response=%s" % response)
|
|
del _volume_update_operations[volume_uuid]
|
|
|
|
|
|
def vim_volume_api_update_volume(connection, msg):
|
|
"""
|
|
Handle Update-Volume API request
|
|
"""
|
|
global _volume_update_operations
|
|
|
|
DLOG.verbose("Update volume, uuid=%s." % msg.uuid)
|
|
_volume_update_operations[msg.uuid] = connection
|
|
volume_director = directors.get_volume_director()
|
|
volume_director.volume_update(msg.uuid, msg.description,
|
|
_update_volume_callback)
|
|
|
|
|
|
def _delete_volume_callback(success, volume_uuid):
|
|
"""
|
|
Handle Delete-Volume callback
|
|
"""
|
|
DLOG.verbose("Delete volume callback, uuid=%s." % volume_uuid)
|
|
|
|
connection = _volume_delete_operations.get(volume_uuid, None)
|
|
if connection is not None:
|
|
response = rpc.APIResponseDeleteVolume()
|
|
if success:
|
|
response.uuid = volume_uuid
|
|
else:
|
|
response.result = rpc.RPC_MSG_RESULT.FAILED
|
|
|
|
connection.send(response.serialize())
|
|
connection.close()
|
|
DLOG.verbose("Sent response=%s" % response)
|
|
del _volume_delete_operations[volume_uuid]
|
|
|
|
|
|
def vim_volume_api_delete_volume(connection, msg):
|
|
"""
|
|
Handle Delete-Volume API request
|
|
"""
|
|
global _volume_delete_operations
|
|
|
|
DLOG.verbose("Delete volume, uuid=%s." % msg.uuid)
|
|
_volume_delete_operations[msg.uuid] = connection
|
|
volume_director = directors.get_volume_director()
|
|
volume_director.volume_delete(msg.uuid, _delete_volume_callback)
|
|
|
|
|
|
def vim_volume_api_get_volume(connection, msg):
|
|
"""
|
|
Handle Get-Volume API request
|
|
"""
|
|
DLOG.verbose("Get volume, filter_by_uuid=%s." % msg.filter_by_uuid)
|
|
volume_table = tables.tables_get_volume_table()
|
|
response = rpc.APIResponseGetVolume()
|
|
volume = volume_table.get(msg.filter_by_uuid, None)
|
|
if volume is not None:
|
|
response.uuid = volume.uuid
|
|
response.name = volume.name
|
|
response.description = volume.description
|
|
response.size_gb = volume.size_gb
|
|
response.bootable = volume.bootable
|
|
response.encrypted = volume.encrypted
|
|
response.avail_status = volume.avail_status
|
|
response.action = volume.action
|
|
else:
|
|
response.result = rpc.RPC_MSG_RESULT.NOT_FOUND
|
|
connection.send(response.serialize())
|
|
DLOG.verbose("Sent response=%s" % response)
|
|
connection.close()
|
|
|
|
|
|
def vim_volume_api_get_volumes(connection, msg):
|
|
"""
|
|
Handle Get-Volumes API request
|
|
"""
|
|
DLOG.verbose("Get volume, all=%s." % msg.get_all)
|
|
volume_table = tables.tables_get_volume_table()
|
|
for volume in volume_table.values():
|
|
response = rpc.APIResponseGetVolume()
|
|
response.uuid = volume.uuid
|
|
response.name = volume.name
|
|
response.description = volume.description
|
|
response.size_gb = volume.size_gb
|
|
response.bootable = volume.bootable
|
|
response.encrypted = volume.encrypted
|
|
response.avail_status = volume.avail_status
|
|
response.action = volume.action
|
|
connection.send(response.serialize())
|
|
DLOG.verbose("Sent response=%s" % response)
|
|
connection.close()
|
|
|
|
|
|
def vim_volume_api_initialize():
|
|
"""
|
|
Initialize VIM Volume API Handling
|
|
"""
|
|
pass
|
|
|
|
|
|
def vim_volume_api_finalize():
|
|
"""
|
|
Finalize VIM Volume API Handling
|
|
"""
|
|
pass
|