自己动手写OpenStack的QoS功能(3)

来源:互联网 发布:统计地图软件 编辑:程序博客网 时间:2024/06/02 04:01

本文地址:http://blog.csdn.net/spch2008/article/details/9281779


创建数据库以及相应的操作:

/usr/share/pyshared/quantum/plugins/openvswitch/ 下创建ovs_qos_db.py,

然后将其连接到/usr/lib/python2.7/dist-packages/quantum/plugins/openvswitch下,可参见Quantum 数据库增加新表 

 

ovs_qos_db.py

import sqlalchemy as safrom sqlalchemy import ormfrom sqlalchemy.orm import excfrom quantum.db import model_basefrom quantum.db import models_v2from quantum.openstack.common import log as loggingfrom quantum.plugins.openvswitch.extensions import ovsqosLOG = logging.getLogger(__name__)class QualityOfServicePortBinding(model_base.BASEV2):        __tablename__ = 'ovs_qos_port_bindings'        port_id = sa.Column(sa.String(255),                        primary_key=True)    rule_id = sa.Column(sa.String(255))class QualityOfServiceRule(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):    __tablename__ = 'ovs_qos_rules'        name = sa.Column(sa.String(255))    rate = sa.Column(sa.Integer)    burst = sa.Column(sa.Integer)class QualityOfServiceDbMixin(ovsqos.OVSPluginBase):      __native_bulk_support = True        def create_ovsqos(self, context, ovsqos):        qos_rule = ovsqos['ovsqos']        with context.session.begin(subtransactions=True):            qos = QualityOfServiceRule(                      name=qos_rule.get('name'),                       rate=qos_rule.get('rate'),                      burst=qos_rule.get('burst'),                      tenant_id=qos_rule.get('tenant_id'))            context.session.add(qos)        return self._make_qos_rule_dict(qos)        def get_ovsqoss(self, context, filters, fields):                return self._get_collection(context, QualityOfServiceRule,                                    self._make_qos_rule_dict,                                    filters=filters, fields=fields)             def get_ovsqos(self, context, rule_id, fields=None):        return self._make_qos_rule_dict(            self._get_ovsqos(context, rule_id), fields)    def _get_ovsqos(self, context, rule_id):        try:            return self._get_by_id(context, QualityOfServiceRule, rule_id)        except exc.NoResultFound:            return None            def delete_ovsqos(self, context, rule_id):        qos = self._get_ovsqos(context, rule_id)        with context.session.begin(subtransactions=True):            context.session.delete(qos)           def update_ovsqos(self, context, rule_id, ovsqos):        rule = ovsqos['ovsqos']        with context.session.begin(subtransactions=True):            qos = self._get_ovsqos(context, rule_id)            qos.update(rule)               return self._make_qos_rule_dict(qos)                def _make_qos_rule_dict(self, qos, fields=None):        res = {'id': qos.id,               'name': qos.name,               'rate': qos.rate,               'burst': qos.burst,               'tenant_id':qos.tenant_id}        return self._fields(res, fields)  


数据库很简陋,只有一些基本功能。