Esempio n. 1
0
    def delete_security_group(self, context, id):
        """Delete chains for Quantum security group."""
        LOG.debug(_("MidonetPluginV2.delete_security_group called: id=%s"), id)

        with context.session.begin(subtransactions=True):
            sg_db_entry = super(MidonetPluginV2,
                                self).get_security_group(context, id)

            if not sg_db_entry:
                raise ext_sg.SecurityGroupNotFound(id=id)

            sg_name = sg_db_entry['name']
            sg_id = sg_db_entry['id']
            tenant_id = sg_db_entry['tenant_id']

            if sg_name == 'default' and not context.is_admin:
                raise ext_sg.SecurityGroupCannotRemoveDefault()

            filters = {'security_group_id': [sg_id]}
            if super(MidonetPluginV2,
                     self)._get_port_security_group_bindings(context, filters):
                raise ext_sg.SecurityGroupInUse(id=sg_id)

            # Delete MidoNet Chains and portgroup for the SG
            self.client.delete_for_sg(tenant_id, sg_id, sg_name)

            return super(MidonetPluginV2,
                         self).delete_security_group(context, id)
Esempio n. 2
0
    def create_security_group_rule_bulk_native(self, context,
                                               security_group_rule):
        r = security_group_rule['security_group_rules']

        scoped_session(context.session)
        security_group_id = self._validate_security_group_rules(
            context, security_group_rule)
        with context.session.begin(subtransactions=True):
            if not self.get_security_group(context, security_group_id):
                raise ext_sg.SecurityGroupNotFound(id=security_group_id)

            self._check_for_duplicate_rules(context, r)
            ret = []
            for rule_dict in r:
                rule = rule_dict['security_group_rule']
                tenant_id = self._get_tenant_id_for_create(context, rule)
                db = SecurityGroupRule(
                    id=uuidutils.generate_uuid(),
                    tenant_id=tenant_id,
                    security_group_id=rule['security_group_id'],
                    direction=rule['direction'],
                    remote_group_id=rule.get('remote_group_id'),
                    ethertype=rule['ethertype'],
                    protocol=rule['protocol'],
                    port_range_min=rule['port_range_min'],
                    port_range_max=rule['port_range_max'],
                    remote_ip_prefix=rule.get('remote_ip_prefix'))
                context.session.add(db)
            ret.append(self._make_security_group_rule_dict(db))
        return ret
Esempio n. 3
0
    def _get_security_group(self, context, id):
        try:
            query = self._model_query(context, SecurityGroup)
            sg = query.filter(SecurityGroup.id == id).one()

        except exc.NoResultFound:
            raise ext_sg.SecurityGroupNotFound(id=id)
        return sg
Esempio n. 4
0
    def _get_security_group(self, context, id):
        try:
            query = self._model_query(context, SecurityGroup)
            if uuidutils.is_uuid_like(id):
                sg = query.filter(SecurityGroup.id == id).one()
            else:
                sg = query.filter(SecurityGroup.external_id == id).one()

        except exc.NoResultFound:
            raise ext_sg.SecurityGroupNotFound(id=id)
        return sg
Esempio n. 5
0
    def _validate_security_groups_on_port(self, context, port):
        p = port['port']
        if not p.get(ext_sg.SECURITYGROUP):
            return

        valid_groups = self.get_security_groups(context, fields={'id': None})
        valid_groups_set = set([x['id'] for x in valid_groups])
        req_sg_set = set(p[ext_sg.SECURITYGROUP])
        invalid_sg_set = req_sg_set - valid_groups_set
        if invalid_sg_set:
            msg = ' '.join(str(x) for x in invalid_sg_set)
            raise ext_sg.SecurityGroupNotFound(id=msg)
Esempio n. 6
0
    def _get_security_groups_on_port(self, context, port):
        """Check that all security groups on port belong to tenant.

        :returns: all security groups IDs on port belonging to tenant.
        """
        p = port['port']
        if not attr.is_attr_set(p.get(ext_sg.SECURITYGROUPS)):
            return
        if p.get('device_owner') and p['device_owner'].startswith('network:'):
            return

        valid_groups = self.get_security_groups(context, fields=['id'])
        valid_group_map = dict((g['id'], g['id']) for g in valid_groups)
        try:
            return set([
                valid_group_map[sg_id]
                for sg_id in p.get(ext_sg.SECURITYGROUPS, [])
            ])
        except KeyError as e:
            raise ext_sg.SecurityGroupNotFound(id=str(e))
Esempio n. 7
0
 def _get_profile_uuid(self, context, remote_group_id):
     """Return profile id from novas group id."""
     security_group = self.get_security_group(context, remote_group_id)
     if not security_group:
         raise ext_sg.SecurityGroupNotFound(id=remote_group_id)
     return security_group['id']