nfv/nfv/nfv-vim/nfv_vim/events/_vim_image_api_events.py

216 lines
7.5 KiB
Python
Executable File

#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import json
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_image_api_events')
_image_create_operations = dict()
_image_update_operations = dict()
_image_delete_operations = dict()
def _create_image_callback(success, image_uuid, image_name, image_description,
container_format, disk_format, min_disk_size_gb,
min_memory_size_mb, visibility, protected,
avail_status, action, properties):
"""
Handle Create-Image callback
"""
DLOG.verbose("Create image callback, name=%s." % image_name)
connection = _image_create_operations.get(image_name, None)
if connection is not None:
response = rpc.APIResponseCreateImage()
if success:
response.uuid = image_uuid
response.name = image_name
response.description = image_description
response.container_format = container_format
response.disk_format = disk_format
response.min_disk_size_gb = min_disk_size_gb
response.min_memory_size_mb = min_memory_size_mb
response.visibility = visibility
response.protected = protected
response.avail_status = avail_status
response.action = action
response.properties = json.dumps(properties)
else:
response.result = rpc.RPC_MSG_RESULT.FAILED
connection.send(response.serialize())
connection.close()
DLOG.verbose("Sent response=%s" % response)
del _image_create_operations[image_name]
def vim_image_api_create_image(connection, msg):
"""
Handle Create-Image API request
"""
global _image_create_operations
DLOG.verbose("Create image, name=%s." % msg.name)
_image_create_operations[msg.name] = connection
image_director = directors.get_image_director()
image_director.image_create(msg.name, msg.description,
msg.container_format, msg.disk_format,
msg.min_disk_size_gb, msg.min_memory_size_mb,
msg.visibility, msg.protected, msg.properties,
msg.image_data_ref, _create_image_callback)
def _update_image_callback(success, image_uuid, image_name, image_description,
container_format, disk_format, min_disk_size_gb,
min_memory_size_mb, visibility, protected,
avail_status, action, properties):
"""
Handle Update-Image callback
"""
DLOG.verbose("Update image callback, uuid=%s." % image_uuid)
connection = _image_update_operations.get(image_uuid, None)
if connection is not None:
response = rpc.APIResponseUpdateImage()
if success:
response.uuid = image_uuid
response.name = image_name
response.description = image_description
response.container_format = container_format
response.disk_format = disk_format
response.min_disk_size_gb = min_disk_size_gb
response.min_memory_size_mb = min_memory_size_mb
response.visibility = visibility
response.protected = protected
response.avail_status = avail_status
response.action = action
response.properties = json.dumps(properties)
else:
response.result = rpc.RPC_MSG_RESULT.FAILED
connection.send(response.serialize())
connection.close()
DLOG.verbose("Sent response=%s" % response)
del _image_update_operations[image_uuid]
def vim_image_api_update_image(connection, msg):
"""
Handle Update-Image API request
"""
global _image_update_operations
DLOG.verbose("Update image, uuid=%s." % msg.uuid)
_image_update_operations[msg.uuid] = connection
image_director = directors.get_image_director()
image_director.image_update(msg.uuid, msg.description,
msg.min_disk_size_gb, msg.min_memory_size_mb,
msg.visibility, msg.protected, msg.properties,
_update_image_callback)
def _delete_image_callback(success, image_uuid):
"""
Handle Delete-Image callback
"""
DLOG.verbose("Delete image callback, uuid=%s." % image_uuid)
connection = _image_delete_operations.get(image_uuid, None)
if connection is not None:
response = rpc.APIResponseDeleteImage()
if success:
response.uuid = image_uuid
else:
response.result = rpc.RPC_MSG_RESULT.FAILED
connection.send(response.serialize())
connection.close()
DLOG.verbose("Sent response=%s" % response)
del _image_delete_operations[image_uuid]
def vim_image_api_delete_image(connection, msg):
"""
Handle Delete-Image API request
"""
global _image_delete_operations
DLOG.verbose("Delete image, uuid=%s." % msg.uuid)
_image_delete_operations[msg.uuid] = connection
image_director = directors.get_image_director()
image_director.image_delete(msg.uuid, _delete_image_callback)
def vim_image_api_get_image(connection, msg):
"""
Handle Get-Image API request
"""
DLOG.verbose("Get image, filter_by_uuid=%s." % msg.filter_by_uuid)
image_table = tables.tables_get_image_table()
response = rpc.APIResponseGetImage()
image = image_table.get(msg.filter_by_uuid, None)
if image is not None:
response.uuid = image.uuid
response.name = image.name
response.description = image.description
response.container_format = image.container_format
response.disk_format = image.disk_format
response.min_disk_size_gb = image.min_disk_size_gb
response.min_memory_size_mb = image.min_memory_size_mb
response.visibility = image.visibility
response.protected = image.protected
response.avail_status = image.avail_status
response.action = image.action
response.properties = json.dumps(image.properties)
else:
response.result = rpc.RPC_MSG_RESULT.NOT_FOUND
connection.send(response.serialize())
DLOG.verbose("Sent response=%s" % response)
connection.close()
def vim_image_api_get_images(connection, msg):
"""
Handle Get-Images API request
"""
DLOG.verbose("Get image, all=%s." % msg.get_all)
image_table = tables.tables_get_image_table()
for image in image_table.values():
response = rpc.APIResponseGetImage()
response.uuid = image.uuid
response.name = image.name
response.description = image.description
response.container_format = image.container_format
response.disk_format = image.disk_format
response.min_disk_size_gb = image.min_disk_size_gb
response.min_memory_size_mb = image.min_memory_size_mb
response.visibility = image.visibility
response.protected = image.protected
response.avail_status = image.avail_status
response.action = image.action
response.properties = json.dumps(image.properties)
connection.send(response.serialize())
DLOG.verbose("Sent response=%s" % response)
connection.close()
def vim_image_api_initialize():
"""
Initialize VIM Image API Handling
"""
pass
def vim_image_api_finalize():
"""
Finalize VIM Image API Handling
"""
pass