本文地址:http://blog.youkuaiyun.com/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 sa
from sqlalchemy import orm
from sqlalchemy.orm import exc
from quantum.db import model_base
from quantum.db import models_v2
from quantum.openstack.common import log as logging
from quantum.plugins.openvswitch.extensions import ovsqos
LOG = 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)
数据库很简陋,只有一些基本功能。