Пример #1
0
 def _get_instance_nodes(self, context, instance):
     context = utils.admin_context(context)
     if not instance['servicechain_specs']:
         return []
     specs = self.get_servicechain_spec(context,
                                        instance['servicechain_specs'][0])
     return self.get_servicechain_nodes(context, {'id': specs['nodes']})
Пример #2
0
 def _get_instance_nodes(self, context, instance):
     context = utils.admin_context(context)
     if not instance['servicechain_specs']:
         return []
     specs = self.get_servicechain_spec(
         context, instance['servicechain_specs'][0])
     return self.get_servicechain_nodes(context, {'id': specs['nodes']})
Пример #3
0
 def _get_node_instances(self, context, node):
     context = utils.admin_context(context)
     specs = self.get_servicechain_specs(context, {"id": node["servicechain_specs"]})
     result = []
     for spec in specs:
         result.extend(self.get_servicechain_instances(context, {"id": spec["instances"]}))
     return result
Пример #4
0
    def _create_servicechain_instance(self, context, servicechain_spec,
                                      parent_servicechain_spec,
                                      provider_ptg_id, consumer_ptg_id,
                                      classifier_id, policy_rule_set):
        sc_spec = [servicechain_spec]
        if parent_servicechain_spec:
            sc_spec.insert(0, parent_servicechain_spec)
        config_param_values = {}
        provider_ptg = context._plugin.get_policy_target_group(
            utils.admin_context(context._plugin_context), provider_ptg_id)
        p_ctx = self._get_chain_admin_context(
            context._plugin_context,
            provider_tenant_id=provider_ptg['tenant_id'])
        session = context._plugin_context.session
        network_service_policy_id = provider_ptg.get(
            "network_service_policy_id")
        if network_service_policy_id:
            nsp = context._plugin.get_network_service_policy(
                p_ctx, network_service_policy_id)
            service_params = nsp.get("network_service_params")
            for service_parameter in service_params:
                param_type = service_parameter.get("type")
                param_value = service_parameter.get("value")
                if param_type == "ip_single" and param_value == "self_subnet":
                    key = service_parameter.get("name")
                    servicepolicy_ptg_ip_map = (
                        self._get_ptg_policy_ipaddress_mapping(
                            session, provider_ptg_id))
                    servicepolicy_ip = servicepolicy_ptg_ip_map.get(
                                                        "ipaddress")
                    config_param_values[key] = servicepolicy_ip
                elif param_type == "ip_single" and param_value == "nat_pool":
                    key = service_parameter.get("name")
                    fip_maps = (
                        self._get_ptg_policy_fip_mapping(
                            context._plugin_context.session,
                            provider_ptg_id))
                    servicepolicy_fip_ids = []
                    for fip_map in fip_maps:
                        servicepolicy_fip_ids.append(fip_map.floatingip_id)
                    config_param_values[key] = servicepolicy_fip_ids
        name = 'gbp_%s_%s' % (policy_rule_set['name'], provider_ptg['name'])

        attrs = {'tenant_id': p_ctx.tenant,
                 'name': name,
                 'description': "",
                 'servicechain_specs': sc_spec,
                 'provider_ptg_id': provider_ptg_id,
                 'consumer_ptg_id': SCI_CONSUMER_NOT_AVAILABLE,
                 'management_ptg_id': None,
                 'classifier_id': classifier_id,
                 'config_param_values': jsonutils.dumps(config_param_values)}
        sc_instance = super(
            ChainMappingDriver, self)._create_servicechain_instance(
                p_ctx, attrs)
        self._set_ptg_servicechain_instance_mapping(
            session, provider_ptg_id, SCI_CONSUMER_NOT_AVAILABLE,
            sc_instance['id'], p_ctx.tenant)
        return sc_instance
Пример #5
0
    def _create_servicechain_instance(self, context, servicechain_spec,
                                      parent_servicechain_spec,
                                      provider_ptg_id, consumer_ptg_id,
                                      classifier_id, policy_rule_set):
        sc_spec = [servicechain_spec]
        if parent_servicechain_spec:
            sc_spec.insert(0, parent_servicechain_spec)
        config_param_values = {}
        provider_ptg = context._plugin.get_policy_target_group(
            utils.admin_context(context._plugin_context), provider_ptg_id)
        p_ctx = self._get_chain_admin_context(
            context._plugin_context,
            provider_tenant_id=provider_ptg['tenant_id'])
        session = context._plugin_context.session
        network_service_policy_id = provider_ptg.get(
            "network_service_policy_id")
        if network_service_policy_id:
            nsp = context._plugin.get_network_service_policy(
                p_ctx, network_service_policy_id)
            service_params = nsp.get("network_service_params")
            for service_parameter in service_params:
                param_type = service_parameter.get("type")
                param_value = service_parameter.get("value")
                if param_type == "ip_single" and param_value == "self_subnet":
                    key = service_parameter.get("name")
                    servicepolicy_ptg_ip_map = (
                        self._get_ptg_policy_ipaddress_mapping(
                            session, provider_ptg_id))
                    servicepolicy_ip = servicepolicy_ptg_ip_map.get(
                                                        "ipaddress")
                    config_param_values[key] = servicepolicy_ip
                elif param_type == "ip_single" and param_value == "nat_pool":
                    key = service_parameter.get("name")
                    fip_maps = (
                        self._get_ptg_policy_fip_mapping(
                            context._plugin_context.session,
                            provider_ptg_id))
                    servicepolicy_fip_ids = []
                    for fip_map in fip_maps:
                        servicepolicy_fip_ids.append(fip_map.floatingip_id)
                    config_param_values[key] = servicepolicy_fip_ids
        name = 'gbp_%s_%s' % (policy_rule_set['name'], provider_ptg['name'])

        attrs = {'tenant_id': p_ctx.tenant,
                 'name': name,
                 'description': "",
                 'servicechain_specs': sc_spec,
                 'provider_ptg_id': provider_ptg_id,
                 'consumer_ptg_id': SCI_CONSUMER_NOT_AVAILABLE,
                 'management_ptg_id': None,
                 'classifier_id': classifier_id,
                 'config_param_values': jsonutils.dumps(config_param_values)}
        sc_instance = super(
            ChainMappingDriver, self)._create_servicechain_instance(
                p_ctx, attrs)
        self._set_ptg_servicechain_instance_mapping(
            session, provider_ptg_id, SCI_CONSUMER_NOT_AVAILABLE,
            sc_instance['id'], p_ctx.tenant)
        return sc_instance
Пример #6
0
 def _get_node_instances(self, context, node):
     context = utils.admin_context(context)
     specs = self.get_servicechain_specs(
         context, {'id': node['servicechain_specs']})
     result = []
     for spec in specs:
         result.extend(self.get_servicechain_instances(
             context, {'id': spec['instances']}))
     return result
Пример #7
0
 def _get_node_instances(self, context, node):
     context = utils.admin_context(context)
     specs = self.get_servicechain_specs(context,
                                         {'id': node['servicechain_specs']})
     result = []
     for spec in specs:
         result.extend(
             self.get_servicechain_instances(context,
                                             {'id': spec['instances']}))
     return result
Пример #8
0
    def _update_chains_pt_modified(self, context, policy_target, action):
        admin_context = utils.admin_context(context)
        scis = self._get_instances_from_policy_target(admin_context, policy_target)

        for sci in scis:
            updaters = self._get_scheduled_drivers(context, sci, "update")
            for update in updaters.values():
                try:
                    getattr(update["driver"], "update_policy_target_" + action)(update["context"], policy_target)
                except exc.NodeDriverError as ex:
                    LOG.error(_("Node Update on policy target modification " "failed, %s"), ex.message)
Пример #9
0
def get_node_driver_context(sc_plugin,
                            context,
                            sc_instance,
                            current_node,
                            original_node=None,
                            management_group=None,
                            service_targets=None):
    admin_context = utils.admin_context(context)
    specs = sc_plugin.get_servicechain_specs(
        admin_context, filters={'id': sc_instance['servicechain_specs']})
    position = _calculate_node_position(specs, current_node['id'])
    provider, _ = _get_ptg_or_ep(admin_context, sc_instance['provider_ptg_id'])
    consumer, is_consumer_external = _get_ptg_or_ep(
        admin_context, sc_instance['consumer_ptg_id'])
    management, _ = _get_ptg_or_ep(admin_context,
                                   sc_instance['management_ptg_id'])
    classifier = get_gbp_plugin().get_policy_classifier(
        admin_context, sc_instance['classifier_id'])
    current_profile = sc_plugin.get_service_profile(
        admin_context, current_node['service_profile_id'])
    original_profile = sc_plugin.get_service_profile(
        admin_context,
        original_node['service_profile_id']) if original_node else None
    if not service_targets:
        service_targets = model.get_service_targets(
            admin_context.session,
            servicechain_instance_id=sc_instance['id'],
            position=position,
            servicechain_node_id=current_node['id'])

    return NodeDriverContext(sc_plugin=sc_plugin,
                             context=context,
                             service_chain_instance=sc_instance,
                             service_chain_specs=specs,
                             current_service_chain_node=current_node,
                             current_service_profile=current_profile,
                             provider_group=provider,
                             consumer_group=consumer,
                             management_group=management,
                             original_service_chain_node=original_node,
                             original_service_profile=original_profile,
                             service_targets=service_targets,
                             position=position,
                             classifier=classifier,
                             is_consumer_external=is_consumer_external)
Пример #10
0
def get_node_driver_context(sc_plugin, context, sc_instance,
                            current_node, original_node=None,
                            management_group=None, service_targets=None):
    admin_context = utils.admin_context(context)
    specs = sc_plugin.get_servicechain_specs(
        admin_context, filters={'id': sc_instance['servicechain_specs']})
    position = _calculate_node_position(specs, current_node['id'])
    provider, _ = _get_ptg_or_ep(
        admin_context, sc_instance['provider_ptg_id'])
    consumer, is_consumer_external = _get_ptg_or_ep(
        admin_context, sc_instance['consumer_ptg_id'])
    management, _ = _get_ptg_or_ep(admin_context,
                                   sc_instance['management_ptg_id'])
    classifier = get_gbp_plugin().get_policy_classifier(
        admin_context, sc_instance['classifier_id'])
    current_profile = sc_plugin.get_service_profile(
        admin_context, current_node['service_profile_id'])
    original_profile = sc_plugin.get_service_profile(
        admin_context,
        original_node['service_profile_id']) if original_node else None
    if not service_targets:
        service_targets = model.get_service_targets(
            admin_context.session, servicechain_instance_id=sc_instance['id'],
            position=position, servicechain_node_id=current_node['id'])

    return NodeDriverContext(sc_plugin=sc_plugin,
                             context=context,
                             service_chain_instance=sc_instance,
                             service_chain_specs=specs,
                             current_service_chain_node=current_node,
                             current_service_profile=current_profile,
                             provider_group=provider,
                             consumer_group=consumer,
                             management_group=management,
                             original_service_chain_node=original_node,
                             original_service_profile=original_profile,
                             service_targets=service_targets,
                             position=position,
                             classifier=classifier,
                             is_consumer_external=is_consumer_external)
Пример #11
0
 def admin_context(self):
     if not self._admin_context:
         self._admin_context = utils.admin_context(self.plugin_context)
     return self._admin_context
Пример #12
0
 def admin_context(self):
     if not self._admin_context:
         self._admin_context = utils.admin_context(self.plugin_context)
     return self._admin_context
Пример #13
0
 def _get_instance_nodes(self, context, instance):
     context = utils.admin_context(context)
     if not instance["servicechain_specs"]:
         return []
     specs = self.get_servicechain_spec(context, instance["servicechain_specs"][0])
     return self.get_servicechain_nodes(context, {"id": specs["nodes"]})