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']})
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']})
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
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
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
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
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)
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)
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)
def admin_context(self): if not self._admin_context: self._admin_context = utils.admin_context(self.plugin_context) return self._admin_context
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"]})