<s> import abc <EOL> from neutron . api import extensions <EOL> from neutron . api . v2 import attributes as attr <EOL> from neutron . api . v2 import resource_helper <EOL> from neutron . common import exceptions as nexc <EOL> from neutron . plugins . common import constants <EOL> from neutron . quota import resource_registry <EOL> from neutron . services import service_base <EOL> from oslo_config import cfg <EOL> from oslo_log import log as logging <EOL> import six <EOL> import gbpservice . neutron . extensions <EOL> import gbpservice . neutron . extensions . group_policy <EOL> from gbpservice . neutron . services . servicechain . common import constants as scc <EOL> extensions . append_api_extensions_path ( gbpservice . neutron . extensions . __path__ ) <EOL> LOG = logging . getLogger ( __name__ ) <EOL> class ServiceProfileNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class ServiceProfileInUse ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> class ServiceChainNodeNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class ServiceChainSpecNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class ServiceChainInstanceNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class ServiceChainNodeInUse ( nexc . InUse ) : <EOL> message = _ ( "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> class ServiceChainSpecInUse ( nexc . InUse ) : <EOL> message = _ ( "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> class ServiceTypeNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class ServiceTypeNotSupported ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> class PortNotFound ( nexc . NotFound ) : <EOL> message = _ ( "<STR_LIT>" ) <EOL> def _validate_str_list ( data , valid_values = None ) : <EOL> if not isinstance ( data , list ) : <EOL> msg = _ ( "<STR_LIT>" ) % data <EOL> LOG . debug ( msg ) <EOL> return msg <EOL> for item in data : <EOL> msg = attr . _validate_string ( item ) <EOL> if msg : <EOL> LOG . debug ( msg ) <EOL> return msg <EOL> if len ( set ( data ) ) != len ( data ) : <EOL> msg = _ ( "<STR_LIT>" ) % '<STR_LIT:U+002CU+0020>' . join ( data ) <EOL> LOG . debug ( msg ) <EOL> return msg <EOL> attr . validators [ '<STR_LIT>' ] = _validate_str_list <EOL> SERVICECHAIN_NODES = '<STR_LIT>' <EOL> SERVICECHAIN_SPECS = '<STR_LIT>' <EOL> SERVICECHAIN_INSTANCES = '<STR_LIT>' <EOL> SERVICE_PROFILES = '<STR_LIT>' <EOL> RESOURCE_ATTRIBUTE_MAP = { <EOL> SERVICECHAIN_NODES : { <EOL> '<STR_LIT:id>' : { '<STR_LIT>' : False , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , '<STR_LIT>' : True , <EOL> '<STR_LIT:primary_key>' : True } , <EOL> '<STR_LIT:name>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , '<STR_LIT:default>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT:description>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> attr . SHARED : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT:default>' : False , '<STR_LIT>' : attr . convert_to_boolean , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : True } , <EOL> } , <EOL> SERVICECHAIN_SPECS : { <EOL> '<STR_LIT:id>' : { '<STR_LIT>' : False , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , '<STR_LIT>' : True , <EOL> '<STR_LIT:primary_key>' : True } , <EOL> '<STR_LIT:name>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT:default>' : '<STR_LIT>' , '<STR_LIT>' : True } , <EOL> '<STR_LIT:description>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : attr . convert_none_to_empty_list , <EOL> '<STR_LIT:default>' : None , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : False , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT:default>' : [ ] , '<STR_LIT>' : True } , <EOL> attr . SHARED : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT:default>' : False , '<STR_LIT>' : attr . convert_to_boolean , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : True } , <EOL> } , <EOL> SERVICECHAIN_INSTANCES : { <EOL> '<STR_LIT:id>' : { '<STR_LIT>' : False , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , '<STR_LIT>' : True , <EOL> '<STR_LIT:primary_key>' : True } , <EOL> '<STR_LIT:name>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT:default>' : '<STR_LIT>' , '<STR_LIT>' : True } , <EOL> '<STR_LIT:description>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : attr . convert_none_to_empty_list , <EOL> '<STR_LIT:default>' : None , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT:default>' : "<STR_LIT>" , '<STR_LIT>' : True } , <EOL> } , <EOL> SERVICE_PROFILES : { <EOL> '<STR_LIT:id>' : { '<STR_LIT>' : False , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , '<STR_LIT>' : True , <EOL> '<STR_LIT:primary_key>' : True } , <EOL> '<STR_LIT:name>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT:default>' : '<STR_LIT>' , '<STR_LIT>' : True } , <EOL> '<STR_LIT:description>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : False , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> attr . SHARED : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT:default>' : False , '<STR_LIT>' : attr . convert_to_boolean , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : <EOL> scc . VALID_INSERTION_MODES } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : True , '<STR_LIT>' : True , <EOL> '<STR_LIT>' : { '<STR_LIT>' : None } , <EOL> '<STR_LIT>' : True , '<STR_LIT:default>' : None } , <EOL> } , <EOL> } <EOL> service_chain_quota_opts = [ <EOL> cfg . IntOpt ( '<STR_LIT>' , <EOL> default = - <NUM_LIT:1> , <EOL> help = _ ( '<STR_LIT>' <EOL> '<STR_LIT>' ) ) , <EOL> cfg . IntOpt ( '<STR_LIT>' , <EOL> default = - <NUM_LIT:1> , <EOL> help = _ ( '<STR_LIT>' <EOL> '<STR_LIT>' ) ) , <EOL> cfg . IntOpt ( '<STR_LIT>' , <EOL> default = - <NUM_LIT:1> , <EOL> help = _ ( '<STR_LIT>' <EOL> '<STR_LIT>' ) ) , <EOL> cfg . IntOpt ( '<STR_LIT>' , <EOL> default = - <NUM_LIT:1> , <EOL> help = _ ( '<STR_LIT>' <EOL> '<STR_LIT>' ) ) , <EOL> ] <EOL> cfg . CONF . register_opts ( service_chain_quota_opts , '<STR_LIT>' ) <EOL> class Servicechain ( extensions . ExtensionDescriptor ) : <EOL> @ classmethod <EOL> def get_name ( cls ) : <EOL> return "<STR_LIT>" <EOL> @ classmethod <EOL> def get_alias ( cls ) : <EOL> return "<STR_LIT>" <EOL> @ classmethod <EOL> def get_description ( cls ) : <EOL> return "<STR_LIT>" <EOL> @ classmethod <EOL> def get_namespace ( cls ) : <EOL> return "<STR_LIT>" <EOL> @ classmethod <EOL> def get_updated ( cls ) : <EOL> return "<STR_LIT>" <EOL> @ classmethod <EOL> def get_resources ( cls ) : <EOL> plural_mappings = resource_helper . build_plural_mappings ( <EOL> { } , RESOURCE_ATTRIBUTE_MAP ) <EOL> attr . PLURALS . update ( plural_mappings ) <EOL> for resource_name in [ '<STR_LIT>' , '<STR_LIT>' , <EOL> '<STR_LIT>' , '<STR_LIT>' ] : <EOL> resource_registry . register_resource_by_name ( resource_name ) <EOL> return resource_helper . build_resource_info ( plural_mappings , <EOL> RESOURCE_ATTRIBUTE_MAP , <EOL> constants . SERVICECHAIN ) <EOL> @ classmethod <EOL> def get_plugin_interface ( cls ) : <EOL> return ServiceChainPluginBase <EOL> def update_attributes_map ( self , attributes ) : <EOL> super ( Servicechain , self ) . update_attributes_map ( <EOL> attributes , extension_attrs_map = RESOURCE_ATTRIBUTE_MAP ) <EOL> def get_extended_resources ( self , version ) : <EOL> if version == "<STR_LIT>" : <EOL> return RESOURCE_ATTRIBUTE_MAP <EOL> else : <EOL> return { } <EOL> @ six . add_metaclass ( abc . ABCMeta ) <EOL> class ServiceChainPluginBase ( service_base . ServicePluginBase ) : <EOL> def get_plugin_name ( self ) : <EOL> return constants . SERVICECHAIN <EOL> def get_plugin_type ( self ) : <EOL> return constants . SERVICECHAIN <EOL> def get_plugin_description ( self ) : <EOL> return '<STR_LIT>' <EOL> def update_chains_pt_added ( self , context , policy_target , instance_id ) : <EOL> """<STR_LIT>""" <EOL> pass <EOL> def update_chains_pt_removed ( self , context , policy_target , instance_id ) : <EOL> """<STR_LIT>""" <EOL> pass <EOL> def update_chains_consumer_added ( self , context , policy_target_group , <EOL> instance_id ) : <EOL> """<STR_LIT>""" <EOL> pass <EOL> def update_chains_consumer_removed ( self , context , policy_target_group , <EOL> instance_id ) : <EOL> """<STR_LIT>""" <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_nodes ( self , context , filters = None , fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_node ( self , context , servicechain_node_id , <EOL> fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def create_servicechain_node ( self , context , servicechain_node ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def update_servicechain_node ( self , context , servicechain_node_id , <EOL> servicechain_node ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def delete_servicechain_node ( self , context , servicechain_node_id ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_specs ( self , context , filters = None , fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_spec ( self , context , servicechain_spec_id , <EOL> fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def create_servicechain_spec ( self , context , servicechain_spec ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def update_servicechain_spec ( self , context , servicechain_spec_id , <EOL> servicechain_spec ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def delete_servicechain_spec ( self , context , servicechain_spec_id ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_instances ( self , context , filters = None , fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_servicechain_instance ( self , context , servicechain_instance_id , <EOL> fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def create_servicechain_instance ( self , context , servicechain_instance ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def update_servicechain_instance ( self , context , servicechain_instance_id , <EOL> servicechain_instance ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def delete_servicechain_instance ( self , context , servicechain_instance_id ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def create_service_profile ( self , context , service_profile ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def update_service_profile ( self , context , service_profile_id , <EOL> service_profile ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def delete_service_profile ( self , context , service_profile_id ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_service_profile ( self , context , service_profile_id , fields = None ) : <EOL> pass <EOL> @ abc . abstractmethod <EOL> def get_service_profiles ( self , context , filters = None , fields = None ) : <EOL> pass </s>
