<filename>nfv/nfv-vim/nfv_vim/nfvi/api/v1/_nfvi_guest_api.py
#
# Copyright (c) 2015-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
import abc
import six


@six.add_metaclass(abc.ABCMeta)
class NFVIGuestAPI(object):
    """
    Abstract NFVI Guest API Class Definition
    """
    @abc.abstractproperty
    def name(self):
        """
        Returns the name of plugin
        """
        pass

    @abc.abstractproperty
    def version(self):
        """
        Returns the version of the plugin
        """
        pass

    @abc.abstractproperty
    def provider(self):
        """
        Returns the vendor who created the plugin
        """
        pass

    @abc.abstractproperty
    def signature(self):
        """
        Returns the signature of the plugin
        """
        pass

    @abc.abstractmethod
    def guest_services_create(self, future, instance_uuid, host_name,
                              services, callback):
        """
        Guest Services Create
        """
        pass

    @abc.abstractmethod
    def guest_services_set(self, future, instance_uuid, host_name,
                           services, callback):
        """
        Guest Services Set
        """
        pass

    @abc.abstractmethod
    def guest_services_delete(self, future, instance_uuid, callback):
        """
        Guest Services Delete
        """
        pass

    @abc.abstractmethod
    def guest_services_query(self, future, instance_uuid, callback):
        """
        Guest Services Query
        """
        pass

    @abc.abstractmethod
    def guest_services_vote(self, future, instance_uuid, host_name,
                            action_type, callback):
        """
        Guest Services Vote
        """
        pass

    @abc.abstractmethod
    def guest_services_notify(self, future, instance_uuid, host_name,
                              action_type, pre_notification, callback):
        """
        Guest Services Notify
        """
        pass

    @abc.abstractmethod
    def disable_host_services(self, future, host_uuid, host_name,
                              host_personality, callback):
        """
        Disable guest services on a host using the plugin
        """
        pass

    @abc.abstractmethod
    def enable_host_services(self, future, host_uuid, host_name,
                             host_personality, callback):
        """
        Enable guest services on a host using the plugin
        """
        pass

    @abc.abstractmethod
    def delete_host_services(self, future, host_uuid, host_name,
                             host_personality, callback):
        """
        Delete guest services on a host using the plugin
        """
        pass

    @abc.abstractmethod
    def create_host_services(self, future, host_uuid, host_name,
                             host_personality, callback):
        """
        Create guest services on a host using the plugin
        """
        pass

    @abc.abstractmethod
    def query_host_services(self, future, host_uuid, host_name,
                            host_personality, callback):
        """
        Query guest services on a host using the plugin
        """
        pass

    @abc.abstractmethod
    def register_host_services_query_callback(self, callback):
        """
        Register for Host Services query
        """
        pass

    @abc.abstractmethod
    def register_guest_services_query_callback(self, callback):
        """
        Register for Guest Services query
        """
        pass

    @abc.abstractmethod
    def register_guest_services_state_notify_callback(self, callback):
        """
        Register for Guest Services notify service type event
        """
        pass

    @abc.abstractmethod
    def register_guest_services_alarm_notify_callback(self, callback):
        """
        Register for Guest Services notify for alarm type event
        """
        pass

    @abc.abstractmethod
    def initialize(self, config_file):
        """
        Initialize the plugin
        """
        pass

    @abc.abstractmethod
    def finalize(self):
        """
        Finalize the plugin
        """
        pass
