def process_create_port(self, context, data, result):
     """Implementation of abstract method from ExtensionDriver class."""
     port_id = result.get('id')
     policy_profile_attr = data.get(constants.N1KV_PROFILE)
     if not attributes.is_attr_set(policy_profile_attr):
         policy_profile_attr = (cfg.CONF.ml2_cisco_n1kv.
                                default_policy_profile)
     with context.session.begin(subtransactions=True):
         try:
             n1kv_db.get_policy_binding(port_id, context.session)
         except n1kv_exc.PortBindingNotFound:
             if not uuidutils.is_uuid_like(policy_profile_attr):
                 policy_profile = n1kv_db.get_policy_profile_by_name(
                     policy_profile_attr,
                     context.session)
                 if policy_profile:
                     policy_profile_attr = policy_profile.id
                 else:
                     LOG.error(_LE("Policy Profile %(profile)s does "
                                   "not exist."),
                               {"profile": policy_profile_attr})
                     raise ml2_exc.ExtensionDriverError()
             elif not (n1kv_db.get_policy_profile_by_uuid(
                          context.session,
                          policy_profile_attr)):
                 LOG.error(_LE("Policy Profile %(profile)s does not "
                               "exist."),
                           {"profile": policy_profile_attr})
                 raise ml2_exc.ExtensionDriverError()
             n1kv_db.add_policy_binding(port_id,
                                        policy_profile_attr,
                                        context.session)
     result[constants.N1KV_PROFILE] = policy_profile_attr
 def process_create_network(self, context, data, result):
     """Implementation of abstract method from ExtensionDriver class."""
     net_id = result.get('id')
     prov_net_type = data.get(bc.providernet.NETWORK_TYPE)
     net_prof_attr = data.get(constants.N1KV_PROFILE)
     tenant_id = context.tenant_id
     if not bc.is_attr_set(net_prof_attr):
         if not bc.is_attr_set(prov_net_type):
             network_type = cfg.CONF.ml2.tenant_network_types[0]
         else:
             network_type = prov_net_type
         if network_type == p_const.TYPE_VLAN:
             net_prof_attr = constants.DEFAULT_VLAN_NETWORK_PROFILE_NAME
         elif network_type == p_const.TYPE_VXLAN:
             net_prof_attr = constants.DEFAULT_VXLAN_NETWORK_PROFILE_NAME
         else:
             # This network type is not supported with network profiles
             return
     with context.session.begin(subtransactions=True):
         try:
             if not uuidutils.is_uuid_like(net_prof_attr):
                 net_prof_attr = n1kv_db.get_network_profile_by_name(
                     net_prof_attr, context.session)
             else:
                 net_prof_attr = n1kv_db.get_network_profile_by_uuid(
                     net_prof_attr, context.session)
             n1kv_db.get_profile_binding(db_session=context.session,
                                         tenant_id=tenant_id,
                                         profile_id=net_prof_attr.id)
         except n1kv_exc.NetworkProfileNotFound:
             LOG.error("Network Profile %s does "
                       "not exist." % net_prof_attr)
             raise ml2_exc.ExtensionDriverError(driver='N1Kv ML2')
         except n1kv_exc.ProfileTenantBindingNotFound:
             if (cfg.CONF.ml2_cisco_n1kv.restrict_network_profiles and
                     net_prof_attr.name not in [
                         constants.DEFAULT_VLAN_NETWORK_PROFILE_NAME,
                         constants.DEFAULT_VXLAN_NETWORK_PROFILE_NAME]):
                 LOG.error("Network Profile %s is "
                           "not owned by this tenant." %
                           net_prof_attr.name)
                 raise ml2_exc.ExtensionDriverError(driver='N1Kv ML2')
         segment_type = net_prof_attr.segment_type
         n1kv_db.add_network_binding(net_id, segment_type,
                                     0,
                                     net_prof_attr.id,
                                     context.session)
         data[bc.providernet.NETWORK_TYPE] = segment_type
     result[constants.N1KV_PROFILE] = net_prof_attr.id
示例#3
0
 def _call_on_dict_driver(self,
                          method_name,
                          session,
                          base_model,
                          result,
                          extended_only=False):
     for driver in self.ordered_ext_drivers:
         if not extended_only or isinstance(driver.obj,
                                            driver_api.ExtensionDriver):
             try:
                 getattr(driver.obj, method_name)(session, base_model,
                                                  result)
             except Exception as e:
                 if db_api.is_retriable(e):
                     with excutils.save_and_reraise_exception():
                         LOG.debug(
                             "DB exception raised by extension driver "
                             "'%(name)s' in %(method)s", {
                                 'name': driver.name,
                                 'method': method_name
                             },
                             exc_info=e)
                 LOG.exception(
                     "Extension driver '%(name)s' failed in %(method)s", {
                         'name': driver.name,
                         'method': method_name
                     })
                 raise ml2_exc.ExtensionDriverError(driver=driver.name)
示例#4
0
    def _call_on_dict_driver(self, method_name, session, base_model, result,
                             extended_only=False, has_base_model=True):

        # Bulk operations might not be implemented by all drivers
        def noop(*args, **kwargs):
            pass

        for driver in self.ordered_ext_drivers:
            if not extended_only or isinstance(
                    driver.obj, driver_api.ExtensionDriver):
                try:
                    if not has_base_model:
                        getattr(driver.obj, method_name, noop)(session,
                                                               result)
                    else:
                        getattr(driver.obj, method_name, noop)(session,
                                                               base_model,
                                                               result)
                except Exception as e:
                    if db_api.is_retriable(e):
                        with excutils.save_and_reraise_exception():
                            LOG.debug(
                                "DB exception raised by extension driver "
                                "'%(name)s' in %(method)s",
                                {'name': driver.name, 'method': method_name},
                                exc_info=e)
                    LOG.exception(
                        "Extension driver '%(name)s' failed in %(method)s",
                        {'name': driver.name, 'method': method_name})
                    raise ml2_exc.ExtensionDriverError(driver=driver.name)
示例#5
0
 def _call_on_dict_driver(self, method_name, session, base_model, result):
     for driver in self.ordered_ext_drivers:
         try:
             getattr(driver.obj, method_name)(session, base_model, result)
         except Exception:
             LOG.error(_LE("Extension driver '%(name)s' failed in "
                       "%(method)s"),
                       {'name': driver.name, 'method': method_name})
             raise ml2_exc.ExtensionDriverError(driver=driver.name)
 def process_create_port(self, context, data, result):
     """Implementation of abstract method from ExtensionDriver class."""
     port_id = result.get('id')
     policy_profile_attr = data.get(constants.N1KV_PROFILE)
     tenant_id = context.tenant_id or data.get('tenant_id')
     default_policy_profile_name = (cfg.CONF.ml2_cisco_n1kv.
                                    default_policy_profile)
     if not bc.is_attr_set(policy_profile_attr):
         policy_profile_attr = default_policy_profile_name
     with context.session.begin(subtransactions=True):
         try:
             if not uuidutils.is_uuid_like(policy_profile_attr):
                 policy_profile = n1kv_db.get_policy_profile_by_name(
                     policy_profile_attr,
                     context.session)
             else:
                 policy_profile = (n1kv_db.get_policy_profile_by_uuid(
                     context.session,
                     policy_profile_attr))
             n1kv_db.get_profile_binding(db_session=context.session,
                                         tenant_id=tenant_id,
                                         profile_id=policy_profile.id)
         except n1kv_exc.PolicyProfileNotFound:
             LOG.error("Policy Profile %(profile)s does "
                       "not exist.", {"profile": policy_profile_attr})
             raise ml2_exc.ExtensionDriverError(driver='N1Kv ML2')
         except n1kv_exc.ProfileTenantBindingNotFound:
             if context.is_admin:
                 session = context.session
                 n1kv_db.update_policy_profile_binding_with_tenant_id(
                     policy_profile.id, tenant_id, session)
             elif (cfg.CONF.ml2_cisco_n1kv.restrict_policy_profiles and
                     policy_profile.name != default_policy_profile_name):
                 LOG.error("Policy Profile %s is "
                           "not owned by this tenant." %
                           policy_profile_attr)
                 raise ml2_exc.ExtensionDriverError(driver='N1Kv ML2')
         n1kv_db.add_policy_binding(port_id,
                                    policy_profile.id,
                                    context.session)
     result[constants.N1KV_PROFILE] = policy_profile.id
 def process_create_network(self, context, data, result):
     """Implementation of abstract method from ExtensionDriver class."""
     net_id = result.get('id')
     prov_net_type = data.get(providernet.NETWORK_TYPE)
     net_prof_attr = data.get(constants.N1KV_PROFILE)
     if not attributes.is_attr_set(net_prof_attr):
         if not attributes.is_attr_set(prov_net_type):
             network_type = cfg.CONF.ml2.tenant_network_types[0]
         else:
             network_type = prov_net_type
         if network_type == p_const.TYPE_VLAN:
             net_prof_attr = constants.DEFAULT_VLAN_NETWORK_PROFILE_NAME
         elif network_type == p_const.TYPE_VXLAN:
             net_prof_attr = constants.DEFAULT_VXLAN_NETWORK_PROFILE_NAME
         else:
             # This network type is not supported with network profiles
             return
     with context.session.begin(subtransactions=True):
         try:
             if not uuidutils.is_uuid_like(net_prof_attr):
                 net_prof_attr = n1kv_db.get_network_profile_by_name(
                     net_prof_attr, context.session)
             else:
                 net_prof_attr = n1kv_db.get_network_profile_by_uuid(
                     net_prof_attr, context.session)
             # TODO(sopatwar) Handle restrict_network_profiles = True
             # Add logic to check for network profile :: tenant binding
         except n1kv_exc.NetworkProfileNotFound:
             LOG.error(_LE("Network Profile %(profile)s does "
                           "not exist."), {"profile":
                            net_prof_attr})
             raise ml2_exc.ExtensionDriverError()
         segment_type = net_prof_attr.segment_type
         n1kv_db.add_network_binding(net_id, segment_type,
                                     0,
                                     net_prof_attr.id,
                                     context.session)
         data[providernet.NETWORK_TYPE] = segment_type
     result[constants.N1KV_PROFILE] = net_prof_attr.id