Use DB field sizes instead of _MAX_LEN constants

Remove The following _MAX_LEN constants from
neutron/api/v2/attributes.py and use the corresponding DB field size
constants from neutron_lib.db.constants instead.

 NAME_MAX_LEN              -->  NAME_FIELD_SIZE
 TENANT_ID_MAX_LEN         -->  PROJECT_ID_FIELD_SIZE
 DESCRIPTION_MAX_LEN       -->  DESCRIPTION_FIELD_SIZE
 LONG_DESCRIPTION_MAX_LEN  -->  LONG_DESCRIPTION_FIELD_SIZE
 DEVICE_ID_MAX_LEN         -->  DEVICE_ID_FIELD_SIZE
 DEVICE_OWNER_MAX_LEN      -->  DEVICE_NAME_FIELD_SIZE

In alembic migration scripts, the raw numerical value is used.

For more information, see:
http://lists.openstack.org/pipermail/openstack-dev/2016-October/105789.html

NeutronLibImpact

Change-Id: I734890372584fe27e5d6ec38c0cad2de882ff11c
This commit is contained in:
Henry Gessau 2016-11-19 17:59:46 -05:00 committed by Armando Migliaccio
parent 07dfea9a02
commit 1c5bf09a03
37 changed files with 156 additions and 142 deletions

View File

@ -16,6 +16,7 @@
from neutron_lib.api import converters as lib_converters from neutron_lib.api import converters as lib_converters
from neutron_lib.api import validators as lib_validators from neutron_lib.api import validators as lib_validators
from neutron_lib import constants from neutron_lib import constants
from neutron_lib.db import constants as db_const
import six import six
import webob.exc import webob.exc
@ -25,14 +26,6 @@ from neutron._i18n import _
# Defining a constant to avoid repeating string literal in several modules # Defining a constant to avoid repeating string literal in several modules
SHARED = 'shared' SHARED = 'shared'
# TODO(HenryG): use DB field sizes (neutron-lib 0.1.1)
NAME_MAX_LEN = 255
TENANT_ID_MAX_LEN = 255
DESCRIPTION_MAX_LEN = 255
LONG_DESCRIPTION_MAX_LEN = 1024
DEVICE_ID_MAX_LEN = 255
DEVICE_OWNER_MAX_LEN = 255
# Define constants for base resource name # Define constants for base resource name
NETWORK = 'network' NETWORK = 'network'
NETWORKS = '%ss' % NETWORK NETWORKS = '%ss' % NETWORK
@ -72,7 +65,7 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'default': '', 'is_visible': True}, 'default': '', 'is_visible': True},
'subnets': {'allow_post': False, 'allow_put': False, 'subnets': {'allow_post': False, 'allow_put': False,
'default': [], 'default': [],
@ -84,7 +77,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'status': {'allow_post': False, 'allow_put': False, 'status': {'allow_post': False, 'allow_put': False,
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'required_by_policy': True,
'is_visible': True}, 'is_visible': True},
SHARED: {'allow_post': True, SHARED: {'allow_post': True,
@ -101,7 +95,7 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'default': '', 'name': {'allow_post': True, 'allow_put': True, 'default': '',
'validate': {'type:string': NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'network_id': {'allow_post': True, 'allow_put': False, 'network_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
@ -124,15 +118,18 @@ RESOURCE_ATTRIBUTE_MAP = {
'enforce_policy': True, 'enforce_policy': True,
'is_visible': True}, 'is_visible': True},
'device_id': {'allow_post': True, 'allow_put': True, 'device_id': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': DEVICE_ID_MAX_LEN}, 'validate': {
'type:string': db_const.DEVICE_ID_FIELD_SIZE},
'default': '', 'default': '',
'is_visible': True}, 'is_visible': True},
'device_owner': {'allow_post': True, 'allow_put': True, 'device_owner': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': DEVICE_OWNER_MAX_LEN}, 'validate': {
'type:string': db_const.DEVICE_OWNER_FIELD_SIZE},
'default': '', 'enforce_policy': True, 'default': '', 'enforce_policy': True,
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'required_by_policy': True,
'is_visible': True}, 'is_visible': True},
'status': {'allow_post': False, 'allow_put': False, 'status': {'allow_post': False, 'allow_put': False,
@ -144,7 +141,7 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'default': '', 'name': {'allow_post': True, 'allow_put': True, 'default': '',
'validate': {'type:string': NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'ip_version': {'allow_post': True, 'allow_put': False, 'ip_version': {'allow_post': True, 'allow_put': False,
'convert_to': lib_converters.convert_to_int, 'convert_to': lib_converters.convert_to_int,
@ -194,7 +191,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'validate': {'type:hostroutes': None}, 'validate': {'type:hostroutes': None},
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'required_by_policy': True,
'is_visible': True}, 'is_visible': True},
'enable_dhcp': {'allow_post': True, 'allow_put': True, 'enable_dhcp': {'allow_post': True, 'allow_put': True,
@ -230,7 +228,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'tenant_id': {'allow_post': True,
'allow_put': False, 'allow_put': False,
'validate': {'type:string': TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'required_by_policy': True,
'is_visible': True}, 'is_visible': True},
'prefixes': {'allow_post': True, 'prefixes': {'allow_post': True,

View File

@ -28,17 +28,15 @@ down_revision = '1b4c6e320f79'
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attrs
def upgrade(): def upgrade():
op.create_table( op.create_table(
'qos_policies', 'qos_policies',
sa.Column('id', sa.String(length=36), primary_key=True), sa.Column('id', sa.String(length=36), primary_key=True),
sa.Column('name', sa.String(length=attrs.NAME_MAX_LEN)), sa.Column('name', sa.String(length=255)),
sa.Column('description', sa.String(length=attrs.DESCRIPTION_MAX_LEN)), sa.Column('description', sa.String(length=255)),
sa.Column('shared', sa.Boolean(), nullable=False), sa.Column('shared', sa.Boolean(), nullable=False),
sa.Column('tenant_id', sa.String(length=attrs.TENANT_ID_MAX_LEN), sa.Column('tenant_id', sa.String(length=255),
index=True)) index=True))
op.create_table( op.create_table(

View File

@ -30,26 +30,24 @@ from alembic import op
from oslo_utils import uuidutils from oslo_utils import uuidutils
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes
# A simple model of the external network table with only the fields needed for # A simple model of the external network table with only the fields needed for
# the migration. # the migration.
external = sa.Table('externalnetworks', sa.MetaData(), external = sa.Table('externalnetworks', sa.MetaData(),
sa.Column('network_id', sa.String(length=36), sa.Column('network_id', sa.String(length=36),
nullable=False)) nullable=False))
TENANT_ID_MAX_LEN = attributes.TENANT_ID_MAX_LEN
network = sa.Table('networks', sa.MetaData(), network = sa.Table('networks', sa.MetaData(),
sa.Column('id', sa.String(length=36), nullable=False), sa.Column('id', sa.String(length=36), nullable=False),
sa.Column('tenant_id', sa.String(length=TENANT_ID_MAX_LEN))) sa.Column('tenant_id', sa.String(length=255)))
networkrbacs = sa.Table( networkrbacs = sa.Table(
'networkrbacs', sa.MetaData(), 'networkrbacs', sa.MetaData(),
sa.Column('id', sa.String(length=36), nullable=False), sa.Column('id', sa.String(length=36), nullable=False),
sa.Column('object_id', sa.String(length=36), nullable=False), sa.Column('object_id', sa.String(length=36), nullable=False),
sa.Column('tenant_id', sa.String(length=TENANT_ID_MAX_LEN), nullable=True, sa.Column('tenant_id', sa.String(length=255), nullable=True,
index=True), index=True),
sa.Column('target_tenant', sa.String(length=TENANT_ID_MAX_LEN), sa.Column('target_tenant', sa.String(length=255),
nullable=False), nullable=False),
sa.Column('action', sa.String(length=255), nullable=False)) sa.Column('action', sa.String(length=255), nullable=False))

View File

@ -25,7 +25,6 @@ from alembic import op
from oslo_utils import uuidutils from oslo_utils import uuidutils
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attrs
from neutron.db import rbac_db_models from neutron.db import rbac_db_models
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
@ -37,9 +36,9 @@ depends_on = ('15e43b934f81',)
qos_rbacs = sa.Table( qos_rbacs = sa.Table(
'qospolicyrbacs', sa.MetaData(), 'qospolicyrbacs', sa.MetaData(),
sa.Column('id', sa.String(length=36), nullable=False), sa.Column('id', sa.String(length=36), nullable=False),
sa.Column('tenant_id', sa.String(length=attrs.TENANT_ID_MAX_LEN), sa.Column('tenant_id', sa.String(length=255),
nullable=True), nullable=True),
sa.Column('target_tenant', sa.String(length=attrs.TENANT_ID_MAX_LEN), sa.Column('target_tenant', sa.String(length=255),
nullable=False), nullable=False),
sa.Column('action', sa.String(length=255), nullable=False), sa.Column('action', sa.String(length=255), nullable=False),
sa.Column('object_id', sa.String(length=36), nullable=False)) sa.Column('object_id', sa.String(length=36), nullable=False))
@ -49,7 +48,7 @@ qos_rbacs = sa.Table(
qos_policy = sa.Table('qos_policies', sa.MetaData(), qos_policy = sa.Table('qos_policies', sa.MetaData(),
sa.Column('id', sa.String(length=36), nullable=False), sa.Column('id', sa.String(length=36), nullable=False),
sa.Column('tenant_id', sa.Column('tenant_id',
sa.String(length=attrs.TENANT_ID_MAX_LEN)), sa.String(length=255)),
sa.Column('shared', sa.Boolean(), nullable=False)) sa.Column('shared', sa.Boolean(), nullable=False))

View File

@ -24,8 +24,6 @@ Create Date: 2015-11-25 18:45:03.819115
from alembic import op from alembic import op
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attrs
# revision identifiers, used by Alembic. # revision identifiers, used by Alembic.
revision = '15e43b934f81' revision = '15e43b934f81'
down_revision = 'b4caf27aae4' down_revision = 'b4caf27aae4'
@ -35,10 +33,10 @@ def upgrade():
op.create_table('qospolicyrbacs', op.create_table('qospolicyrbacs',
sa.Column('id', sa.String(length=36), nullable=False), sa.Column('id', sa.String(length=36), nullable=False),
sa.Column('tenant_id', sa.Column('tenant_id',
sa.String(length=attrs.TENANT_ID_MAX_LEN), sa.String(length=255),
nullable=True), nullable=True),
sa.Column('target_tenant', sa.Column('target_tenant',
sa.String(length=attrs.TENANT_ID_MAX_LEN), sa.String(length=255),
nullable=False), nullable=False),
sa.Column('action', sa.String(length=255), nullable=False), sa.Column('action', sa.String(length=255), nullable=False),
sa.Column('object_id', sa.String(length=36), sa.Column('object_id', sa.String(length=36),

View File

@ -10,17 +10,16 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attr
class AddressScope(model_base.BASEV2, model_base.HasId, model_base.HasProject): class AddressScope(model_base.BASEV2, model_base.HasId, model_base.HasProject):
"""Represents a neutron address scope.""" """Represents a neutron address scope."""
__tablename__ = "address_scopes" __tablename__ = "address_scopes"
name = sa.Column(sa.String(attr.NAME_MAX_LEN), nullable=False) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE), nullable=False)
shared = sa.Column(sa.Boolean, nullable=False) shared = sa.Column(sa.Boolean, nullable=False)
ip_version = sa.Column(sa.Integer(), nullable=False) ip_version = sa.Column(sa.Integer(), nullable=False)

View File

@ -10,12 +10,12 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import sql from sqlalchemy import sql
from neutron.agent.common import utils from neutron.agent.common import utils
from neutron.api.v2 import attributes
class Agent(model_base.BASEV2, model_base.HasId): class Agent(model_base.BASEV2, model_base.HasId):
@ -44,7 +44,7 @@ class Agent(model_base.BASEV2, model_base.HasId):
# updated when agents report # updated when agents report
heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False) heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False)
# description is note for admin user # description is note for admin user
description = sa.Column(sa.String(attributes.DESCRIPTION_MAX_LEN)) description = sa.Column(sa.String(db_const.DESCRIPTION_FIELD_SIZE))
# configurations: a json dict string, I think 4095 is enough # configurations: a json dict string, I think 4095 is enough
configurations = sa.Column(sa.String(4095), nullable=False) configurations = sa.Column(sa.String(4095), nullable=False)
# resource_versions: json dict, 8191 allows for ~256 resource versions # resource_versions: json dict, 8191 allows for ~256 resource versions

View File

@ -10,16 +10,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from neutron.api.v2 import attributes as attr
class Flavor(model_base.BASEV2, model_base.HasId): class Flavor(model_base.BASEV2, model_base.HasId):
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) description = sa.Column(sa.String(db_const.LONG_DESCRIPTION_FIELD_SIZE))
enabled = sa.Column(sa.Boolean, nullable=False, default=True, enabled = sa.Column(sa.Boolean, nullable=False, default=True,
server_default=sa.sql.true()) server_default=sa.sql.true())
# Make it True for multi-type flavors # Make it True for multi-type flavors
@ -29,7 +28,7 @@ class Flavor(model_base.BASEV2, model_base.HasId):
class ServiceProfile(model_base.BASEV2, model_base.HasId): class ServiceProfile(model_base.BASEV2, model_base.HasId):
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) description = sa.Column(sa.String(db_const.LONG_DESCRIPTION_FIELD_SIZE))
driver = sa.Column(sa.String(1024), nullable=False) driver = sa.Column(sa.String(1024), nullable=False)
enabled = sa.Column(sa.Boolean, nullable=False, default=True, enabled = sa.Column(sa.Boolean, nullable=False, default=True,
server_default=sa.sql.true()) server_default=sa.sql.true())

View File

@ -10,11 +10,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from neutron.api.v2 import attributes
from neutron.db.models import l3agent as rb_model from neutron.db.models import l3agent as rb_model
from neutron.db import models_v2 from neutron.db import models_v2
from neutron.db import standard_attr from neutron.db import standard_attr
@ -37,7 +37,7 @@ class RouterPort(model_base.BASEV2):
# queries on router ports, and also prevents potential error-prone # queries on router ports, and also prevents potential error-prone
# conditions which might originate from users altering the DEVICE_OWNER # conditions which might originate from users altering the DEVICE_OWNER
# property of router ports. # property of router ports.
port_type = sa.Column(sa.String(attributes.DEVICE_OWNER_MAX_LEN)) port_type = sa.Column(sa.String(db_const.DEVICE_OWNER_FIELD_SIZE))
port = orm.relationship( port = orm.relationship(
models_v2.Port, models_v2.Port,
backref=orm.backref('routerport', uselist=False, cascade="all,delete"), backref=orm.backref('routerport', uselist=False, cascade="all,delete"),
@ -48,7 +48,7 @@ class Router(standard_attr.HasStandardAttributes, model_base.BASEV2,
model_base.HasId, model_base.HasProject): model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron router.""" """Represents a v2 neutron router."""
name = sa.Column(sa.String(attributes.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
status = sa.Column(sa.String(16)) status = sa.Column(sa.String(16))
admin_state_up = sa.Column(sa.Boolean) admin_state_up = sa.Column(sa.Boolean)
gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id')) gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id'))

View File

@ -10,13 +10,12 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy import sql from sqlalchemy import sql
from neutron.api.v2 import attributes as attr
from neutron.db.models import l3 as l3_models from neutron.db.models import l3 as l3_models
@ -34,8 +33,8 @@ class MeteringLabelRule(model_base.BASEV2, model_base.HasId):
class MeteringLabel(model_base.BASEV2, class MeteringLabel(model_base.BASEV2,
model_base.HasId, model_base.HasId,
model_base.HasProject): model_base.HasProject):
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) description = sa.Column(sa.String(db_const.LONG_DESCRIPTION_FIELD_SIZE))
rules = orm.relationship(MeteringLabelRule, backref="label", rules = orm.relationship(MeteringLabelRule, backref="label",
cascade="delete", lazy="joined") cascade="delete", lazy="joined")
routers = orm.relationship( routers = orm.relationship(

View File

@ -12,11 +12,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from neutron.api.v2 import attributes
from neutron.db import models_v2 from neutron.db import models_v2
from neutron.db import standard_attr from neutron.db import standard_attr
from neutron.extensions import securitygroup as sg from neutron.extensions import securitygroup as sg
@ -26,7 +26,7 @@ class SecurityGroup(standard_attr.HasStandardAttributes, model_base.BASEV2,
model_base.HasId, model_base.HasProject): model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron security group.""" """Represents a v2 neutron security group."""
name = sa.Column(sa.String(attributes.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
api_collections = [sg.SECURITYGROUPS] api_collections = [sg.SECURITYGROUPS]

View File

@ -14,12 +14,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from neutron.api.v2 import attributes
from neutron.db import models_v2 from neutron.db import models_v2
from neutron.db import standard_attr from neutron.db import standard_attr
from neutron.extensions import segment from neutron.extensions import segment
@ -46,7 +45,7 @@ class NetworkSegment(standard_attr.HasStandardAttributes,
is_dynamic = sa.Column(sa.Boolean, default=False, nullable=False, is_dynamic = sa.Column(sa.Boolean, default=False, nullable=False,
server_default=sa.sql.false()) server_default=sa.sql.false())
segment_index = sa.Column(sa.Integer, nullable=False, server_default='0') segment_index = sa.Column(sa.Integer, nullable=False, server_default='0')
name = sa.Column(sa.String(attributes.NAME_MAX_LEN), name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE),
nullable=True) nullable=True)
network = orm.relationship(models_v2.Network, network = orm.relationship(models_v2.Network,
backref=orm.backref("segments", backref=orm.backref("segments",

View File

@ -13,14 +13,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attr
class ProviderResourceAssociation(model_base.BASEV2): class ProviderResourceAssociation(model_base.BASEV2):
provider_name = sa.Column(sa.String(attr.NAME_MAX_LEN), provider_name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE),
nullable=False, primary_key=True) nullable=False, primary_key=True)
# should be manually deleted on resource deletion # should be manually deleted on resource deletion
resource_id = sa.Column(sa.String(36), nullable=False, primary_key=True, resource_id = sa.Column(sa.String(36), nullable=False, primary_key=True,

View File

@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from neutron.api.v2 import attributes
from neutron.db import models_v2 from neutron.db import models_v2
@ -30,7 +30,7 @@ class SubnetServiceType(model_base.BASEV2):
sa.ForeignKey('subnets.id', ondelete="CASCADE")) sa.ForeignKey('subnets.id', ondelete="CASCADE"))
# Service types must be valid device owners, therefore share max length # Service types must be valid device owners, therefore share max length
service_type = sa.Column(sa.String( service_type = sa.Column(sa.String(
length=attributes.DEVICE_OWNER_MAX_LEN)) length=db_const.DEVICE_OWNER_FIELD_SIZE))
subnet = orm.relationship(models_v2.Subnet, subnet = orm.relationship(models_v2.Subnet,
backref=orm.backref('service_types', backref=orm.backref('service_types',
lazy='joined', lazy='joined',

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
from neutron_lib import constants from neutron_lib import constants
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
@ -74,7 +75,7 @@ class Port(standard_attr.HasStandardAttributes, model_base.BASEV2,
model_base.HasId, model_base.HasProject): model_base.HasId, model_base.HasProject):
"""Represents a port on a Neutron v2 network.""" """Represents a port on a Neutron v2 network."""
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"), network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"),
nullable=False) nullable=False)
fixed_ips = orm.relationship(IPAllocation, backref='port', lazy='joined', fixed_ips = orm.relationship(IPAllocation, backref='port', lazy='joined',
@ -85,8 +86,9 @@ class Port(standard_attr.HasStandardAttributes, model_base.BASEV2,
mac_address = sa.Column(sa.String(32), nullable=False) mac_address = sa.Column(sa.String(32), nullable=False)
admin_state_up = sa.Column(sa.Boolean(), nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False)
status = sa.Column(sa.String(16), nullable=False) status = sa.Column(sa.String(16), nullable=False)
device_id = sa.Column(sa.String(attr.DEVICE_ID_MAX_LEN), nullable=False) device_id = sa.Column(sa.String(db_const.DEVICE_ID_FIELD_SIZE),
device_owner = sa.Column(sa.String(attr.DEVICE_OWNER_MAX_LEN), nullable=False)
device_owner = sa.Column(sa.String(db_const.DEVICE_OWNER_FIELD_SIZE),
nullable=False) nullable=False)
ip_allocation = sa.Column(sa.String(16)) ip_allocation = sa.Column(sa.String(16))
@ -143,7 +145,7 @@ class Subnet(standard_attr.HasStandardAttributes, model_base.BASEV2,
are used for the IP allocation. are used for the IP allocation.
""" """
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id')) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id'))
# Added by the segments service plugin # Added by the segments service plugin
segment_id = sa.Column(sa.String(36), sa.ForeignKey('networksegments.id')) segment_id = sa.Column(sa.String(36), sa.ForeignKey('networksegments.id'))
@ -211,7 +213,7 @@ class SubnetPool(standard_attr.HasStandardAttributes, model_base.BASEV2,
"""Represents a neutron subnet pool. """Represents a neutron subnet pool.
""" """
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
ip_version = sa.Column(sa.Integer, nullable=False) ip_version = sa.Column(sa.Integer, nullable=False)
default_prefixlen = sa.Column(sa.Integer, nullable=False) default_prefixlen = sa.Column(sa.Integer, nullable=False)
min_prefixlen = sa.Column(sa.Integer, nullable=False) min_prefixlen = sa.Column(sa.Integer, nullable=False)
@ -233,7 +235,7 @@ class Network(standard_attr.HasStandardAttributes, model_base.BASEV2,
model_base.HasId, model_base.HasProject): model_base.HasId, model_base.HasProject):
"""Represents a v2 neutron network.""" """Represents a v2 neutron network."""
name = sa.Column(sa.String(attr.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
ports = orm.relationship(Port, backref='networks') ports = orm.relationship(Port, backref='networks')
subnets = orm.relationship( subnets = orm.relationship(
Subnet, backref=orm.backref('networks', lazy='subquery'), Subnet, backref=orm.backref('networks', lazy='subquery'),

View File

@ -13,10 +13,10 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from neutron.api.v2 import attributes as attrs
from neutron.common import constants from neutron.common import constants
from neutron.db import models_v2 from neutron.db import models_v2
from neutron.db import rbac_db_models from neutron.db import rbac_db_models
@ -26,7 +26,7 @@ from neutron.db import standard_attr
class QosPolicy(standard_attr.HasStandardAttributes, model_base.BASEV2, class QosPolicy(standard_attr.HasStandardAttributes, model_base.BASEV2,
model_base.HasId, model_base.HasProject): model_base.HasId, model_base.HasProject):
__tablename__ = 'qos_policies' __tablename__ = 'qos_policies'
name = sa.Column(sa.String(attrs.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
rbac_entries = sa.orm.relationship(rbac_db_models.QosPolicyRBAC, rbac_entries = sa.orm.relationship(rbac_db_models.QosPolicyRBAC,
backref='qos_policy', lazy='joined', backref='qos_policy', lazy='joined',
cascade='all, delete, delete-orphan') cascade='all, delete, delete-orphan')

View File

@ -15,6 +15,7 @@
import abc import abc
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
@ -23,7 +24,6 @@ from sqlalchemy.ext import declarative
from sqlalchemy.orm import validates from sqlalchemy.orm import validates
from neutron._i18n import _ from neutron._i18n import _
from neutron.api.v2 import attributes as attr
ACCESS_SHARED = 'access_as_shared' ACCESS_SHARED = 'access_as_shared'
@ -46,7 +46,7 @@ class RBACColumns(model_base.HasId, model_base.HasProject):
# the target_tenant is the subject that the policy will affect. this may # the target_tenant is the subject that the policy will affect. this may
# also be a wildcard '*' to indicate all tenants or it may be a role if # also be a wildcard '*' to indicate all tenants or it may be a role if
# neutron gets better integration with keystone # neutron gets better integration with keystone
target_tenant = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN), target_tenant = sa.Column(sa.String(db_const.PROJECT_ID_FIELD_SIZE),
nullable=False) nullable=False)
action = sa.Column(sa.String(255), nullable=False) action = sa.Column(sa.String(255), nullable=False)

View File

@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
from oslo_utils import timeutils from oslo_utils import timeutils
import sqlalchemy as sa import sqlalchemy as sa
@ -19,7 +20,6 @@ from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.ext import declarative from sqlalchemy.ext import declarative
from neutron._i18n import _LE from neutron._i18n import _LE
from neutron.api.v2 import attributes as attr
from neutron.db import sqlalchemytypes from neutron.db import sqlalchemytypes
@ -51,7 +51,7 @@ class StandardAttribute(model_base.BASEV2):
# before a 2-byte prefix is required. We shouldn't get anywhere near this # before a 2-byte prefix is required. We shouldn't get anywhere near this
# limit with our table names... # limit with our table names...
resource_type = sa.Column(sa.String(255), nullable=False) resource_type = sa.Column(sa.String(255), nullable=False)
description = sa.Column(sa.String(attr.DESCRIPTION_MAX_LEN)) description = sa.Column(sa.String(db_const.DESCRIPTION_FIELD_SIZE))
revision_number = sa.Column( revision_number = sa.Column(
sa.BigInteger().with_variant(sa.Integer(), 'sqlite'), sa.BigInteger().with_variant(sa.Integer(), 'sqlite'),

View File

@ -17,6 +17,7 @@ import abc
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib import constants from neutron_lib import constants
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as nexception from neutron_lib import exceptions as nexception
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
import six import six
@ -43,11 +44,12 @@ RESOURCE_ATTRIBUTE_MAP = {
'name': {'allow_post': True, 'name': {'allow_post': True,
'allow_put': True, 'allow_put': True,
'default': '', 'default': '',
'validate': {'type:string': attr.NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'tenant_id': {'allow_post': True,
'allow_put': False, 'allow_put': False,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'required_by_policy': True,
'is_visible': True}, 'is_visible': True},
attr.SHARED: {'allow_post': True, attr.SHARED: {'allow_post': True,

View File

@ -17,13 +17,13 @@ import abc
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions from neutron_lib import exceptions
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
import six import six
from neutron._i18n import _ from neutron._i18n import _
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base from neutron.api.v2 import base
@ -55,10 +55,11 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'configurations': {'allow_post': False, 'allow_put': False, 'configurations': {'allow_post': False, 'allow_put': False,
'is_visible': True}, 'is_visible': True},
'description': {'allow_post': False, 'allow_put': True, 'description': {
'is_visible': True, 'allow_post': False, 'allow_put': True,
'validate': { 'is_visible': True,
'type:string_or_none': attr.DESCRIPTION_MAX_LEN}}, 'validate': {
'type:string_or_none': db_const.DESCRIPTION_FIELD_SIZE}},
}, },
} }

View File

@ -15,12 +15,12 @@
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib.api import validators from neutron_lib.api import validators
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as nexception from neutron_lib import exceptions as nexception
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from neutron._i18n import _ from neutron._i18n import _
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base from neutron.api.v2 import base
from neutron.api.v2 import resource_helper from neutron.api.v2 import resource_helper
from neutron.plugins.common import constants from neutron.plugins.common import constants
@ -92,11 +92,11 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': attr.NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'description': {'allow_post': True, 'allow_put': True, 'description': {'allow_post': True, 'allow_put': True,
'validate': {'type:string_or_none': 'validate': {'type:string_or_none':
attr.LONG_DESCRIPTION_MAX_LEN}, db_const.LONG_DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'service_type': {'allow_post': True, 'allow_put': False, 'service_type': {'allow_post': True, 'allow_put': False,
'validate': 'validate':
@ -104,7 +104,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'service_profiles': {'allow_post': True, 'allow_put': True, 'service_profiles': {'allow_post': True, 'allow_put': True,
'validate': {'type:uuid_list': None}, 'validate': {'type:uuid_list': None},
@ -121,11 +122,11 @@ RESOURCE_ATTRIBUTE_MAP = {
'primary_key': True}, 'primary_key': True},
'description': {'allow_post': True, 'allow_put': True, 'description': {'allow_post': True, 'allow_put': True,
'validate': {'type:string_or_none': 'validate': {'type:string_or_none':
attr.LONG_DESCRIPTION_MAX_LEN}, db_const.LONG_DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'driver': {'allow_post': True, 'allow_put': True, 'driver': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': 'validate': {'type:string':
attr.LONG_DESCRIPTION_MAX_LEN}, db_const.LONG_DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'is_visible': True,
'default': ''}, 'default': ''},
'metainfo': {'allow_post': True, 'allow_put': True, 'metainfo': {'allow_post': True, 'allow_put': True,
@ -133,7 +134,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'default': ''}, 'default': ''},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'enabled': {'allow_post': True, 'allow_put': True, 'enabled': {'allow_post': True, 'allow_put': True,
'convert_to': converters.convert_to_boolean_if_not_none, 'convert_to': converters.convert_to_boolean_if_not_none,
@ -157,8 +159,9 @@ SUB_RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': 'validate': {
attr.TENANT_ID_MAX_LEN}, 'type:string':
db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}} 'is_visible': True}}
}, },
'service_profiles': { 'service_profiles': {
@ -169,8 +172,9 @@ SUB_RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': 'validate': {
attr.TENANT_ID_MAX_LEN}, 'type:string':
db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}} 'is_visible': True}}
} }
} }

View File

@ -17,11 +17,11 @@ import abc
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions from neutron_lib.api import extensions
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as nexception from neutron_lib import exceptions as nexception
import six import six
from neutron._i18n import _ from neutron._i18n import _
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import resource_helper from neutron.api.v2 import resource_helper
from neutron.conf import quota from neutron.conf import quota
from neutron.plugins.common import constants from neutron.plugins.common import constants
@ -96,7 +96,7 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': attr.NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'admin_state_up': {'allow_post': True, 'allow_put': True, 'admin_state_up': {'allow_post': True, 'allow_put': True,
'default': True, 'default': True,
@ -106,7 +106,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True}, 'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
EXTERNAL_GW_INFO: {'allow_post': True, 'allow_put': True, EXTERNAL_GW_INFO: {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': None, 'is_visible': True, 'default': None,
@ -153,7 +154,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'default': None}, 'is_visible': True, 'default': None},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'status': {'allow_post': False, 'allow_put': False, 'status': {'allow_post': False, 'allow_put': False,
'is_visible': True}, 'is_visible': True},

View File

@ -16,11 +16,11 @@ import abc
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions from neutron_lib.api import extensions
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as nexception from neutron_lib import exceptions as nexception
import six import six
from neutron._i18n import _ from neutron._i18n import _
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import resource_helper from neutron.api.v2 import resource_helper
from neutron.plugins.common import constants from neutron.plugins.common import constants
from neutron.services import service_base from neutron.services import service_base
@ -49,15 +49,17 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'is_visible': True,
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': False, 'name': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': attr.NAME_MAX_LEN}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'description': {'allow_post': True, 'allow_put': False, 'description': {'allow_post': True, 'allow_put': False,
'validate': { 'validate': {
'type:string': attr.LONG_DESCRIPTION_MAX_LEN}, 'type:string':
db_const.LONG_DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'shared': {'allow_post': True, 'allow_put': False, 'shared': {'allow_post': True, 'allow_put': False,
'is_visible': True, 'default': False, 'is_visible': True, 'default': False,
@ -81,7 +83,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'validate': {'type:subnet': None}}, 'validate': {'type:subnet': None}},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True} 'is_visible': True}
} }
} }

View File

@ -19,11 +19,11 @@ import re
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib.db import constants as db_const
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
import six import six
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base from neutron.api.v2 import base
from neutron.api.v2 import resource_helper from neutron.api.v2 import resource_helper
from neutron.common import constants as common_constants from neutron.common import constants as common_constants
@ -52,17 +52,19 @@ RESOURCE_ATTRIBUTE_MAP = {
'is_visible': True, 'primary_key': True}, 'is_visible': True, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'name': {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': '', 'is_visible': True, 'default': '',
'validate': {'type:string': attr.NAME_MAX_LEN}}, 'validate': {'type:string': db_const.NAME_FIELD_SIZE}},
'description': {'allow_post': True, 'allow_put': True, 'description': {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': '', 'is_visible': True, 'default': '',
'validate': 'validate':
{'type:string': attr.LONG_DESCRIPTION_MAX_LEN}}, {'type:string':
db_const.LONG_DESCRIPTION_FIELD_SIZE}},
'shared': {'allow_post': True, 'allow_put': True, 'shared': {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': False, 'is_visible': True, 'default': False,
'convert_to': converters.convert_to_boolean}, 'convert_to': converters.convert_to_boolean},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
'rules': {'allow_post': False, 'allow_put': False, 'is_visible': True}, 'rules': {'allow_post': False, 'allow_put': False, 'is_visible': True},
}, },

View File

@ -14,12 +14,12 @@
# under the License. # under the License.
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from neutron._i18n import _ from neutron._i18n import _
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base from neutron.api.v2 import base
from neutron.conf import quota from neutron.conf import quota
from neutron.db import rbac_db_models from neutron.db import rbac_db_models
@ -63,15 +63,18 @@ RESOURCE_ATTRIBUTE_MAP = {
'validate': {'type:uuid': None}, 'validate': {'type:uuid': None},
'is_visible': True, 'enforce_policy': True}, 'is_visible': True, 'enforce_policy': True},
'target_tenant': {'allow_post': True, 'allow_put': True, 'target_tenant': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True, 'enforce_policy': True}, 'is_visible': True, 'enforce_policy': True},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'required_by_policy': True, 'is_visible': True}, 'required_by_policy': True, 'is_visible': True},
'action': {'allow_post': True, 'allow_put': False, 'action': {'allow_post': True, 'allow_put': False,
# action depends on type so validation has to occur in # action depends on type so validation has to occur in
# the extension # the extension
'validate': {'type:string': attr.DESCRIPTION_MAX_LEN}, 'validate': {
'type:string': db_const.DESCRIPTION_FIELD_SIZE},
# we set enforce_policy so operators can define policies # we set enforce_policy so operators can define policies
# that restrict actions # that restrict actions
'is_visible': True, 'enforce_policy': True} 'is_visible': True, 'enforce_policy': True}

View File

@ -19,6 +19,7 @@ import netaddr
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib.api import validators from neutron_lib.api import validators
from neutron_lib import constants as const from neutron_lib import constants as const
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as nexception from neutron_lib import exceptions as nexception
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from oslo_utils import netutils from oslo_utils import netutils
@ -27,7 +28,6 @@ import six
from neutron._i18n import _ from neutron._i18n import _
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.api.v2 import base from neutron.api.v2 import base
from neutron.common import exceptions from neutron.common import exceptions
from neutron.conf import quota from neutron.conf import quota
@ -224,13 +224,16 @@ RESOURCE_ATTRIBUTE_MAP = {
'primary_key': True}, 'primary_key': True},
'name': {'allow_post': True, 'allow_put': True, 'name': {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': '', 'is_visible': True, 'default': '',
'validate': {'type:name_not_default': attr.NAME_MAX_LEN}}, 'validate': {
'type:name_not_default': db_const.NAME_FIELD_SIZE}},
'description': {'allow_post': True, 'allow_put': True, 'description': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': attr.DESCRIPTION_MAX_LEN}, 'validate': {
'type:string': db_const.DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'default': ''}, 'is_visible': True, 'default': ''},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
SECURITYGROUPRULES: {'allow_post': False, 'allow_put': False, SECURITYGROUPRULES: {'allow_post': False, 'allow_put': False,
'is_visible': True}, 'is_visible': True},
@ -265,7 +268,8 @@ RESOURCE_ATTRIBUTE_MAP = {
'convert_to': convert_ip_prefix_to_cidr}, 'convert_to': convert_ip_prefix_to_cidr},
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attr.TENANT_ID_MAX_LEN}, 'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}, 'is_visible': True},
} }
} }

View File

@ -18,6 +18,7 @@ import six
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.api import extensions as api_extensions from neutron_lib.api import extensions as api_extensions
from neutron_lib import constants from neutron_lib import constants
from neutron_lib.db import constants as db_const
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from neutron.api import extensions from neutron.api import extensions
@ -32,8 +33,8 @@ SEGMENT_ID = 'segment_id'
NETWORK_TYPE = 'network_type' NETWORK_TYPE = 'network_type'
PHYSICAL_NETWORK = 'physical_network' PHYSICAL_NETWORK = 'physical_network'
SEGMENTATION_ID = 'segmentation_id' SEGMENTATION_ID = 'segmentation_id'
NAME_LEN = attributes.NAME_MAX_LEN NAME_LEN = db_const.NAME_FIELD_SIZE
DESC_LEN = attributes.DESCRIPTION_MAX_LEN DESC_LEN = db_const.DESCRIPTION_FIELD_SIZE
# Attribute Map # Attribute Map
RESOURCE_ATTRIBUTE_MAP = { RESOURCE_ATTRIBUTE_MAP = {
@ -46,7 +47,7 @@ RESOURCE_ATTRIBUTE_MAP = {
'tenant_id': {'allow_post': True, 'tenant_id': {'allow_post': True,
'allow_put': False, 'allow_put': False,
'validate': {'type:string': 'validate': {'type:string':
attributes.TENANT_ID_MAX_LEN}, db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': False}, 'is_visible': False},
'network_id': {'allow_post': True, 'network_id': {'allow_post': True,
'allow_put': False, 'allow_put': False,

View File

@ -14,14 +14,15 @@
# under the License. # under the License.
from neutron_lib.api import extensions from neutron_lib.api import extensions
from neutron_lib.db import constants as db_const
from neutron.api.v2 import attributes as attr
from neutron.db import standard_attr from neutron.db import standard_attr
DESCRIPTION_BODY = { DESCRIPTION_BODY = {
'description': {'allow_post': True, 'allow_put': True, 'description': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': attr.DESCRIPTION_MAX_LEN}, 'validate': {
'type:string': db_const.DESCRIPTION_FIELD_SIZE},
'is_visible': True, 'default': ''} 'is_visible': True, 'default': ''}
} }

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
from neutron_lib.api import converters from neutron_lib.api import converters
from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from oslo_config import cfg from oslo_config import cfg
from oslo_utils import importutils from oslo_utils import importutils
@ -32,7 +33,7 @@ TENANT_ID_ATTR = {'tenant_id':
{'allow_post': False, {'allow_post': False,
'allow_put': False, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': attributes.TENANT_ID_MAX_LEN}, 'validate': {'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True}} 'is_visible': True}}

View File

@ -17,7 +17,7 @@ import importlib
import itertools import itertools
import os import os
from neutron.conf.services import provider_configuration as prov_config from neutron_lib.db import constants as db_const
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
@ -25,7 +25,7 @@ from oslo_log import versionutils
import stevedore import stevedore
from neutron._i18n import _, _LW from neutron._i18n import _, _LW
from neutron.api.v2 import attributes as attr from neutron.conf.services import provider_configuration as prov_config
from neutron.db import _utils as db_utils from neutron.db import _utils as db_utils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -160,10 +160,10 @@ def parse_service_provider_opt(service_module='neutron'):
"""Parse service definition opts and returns result.""" """Parse service definition opts and returns result."""
def validate_name(name): def validate_name(name):
if len(name) > attr.NAME_MAX_LEN: if len(name) > db_const.NAME_FIELD_SIZE:
raise n_exc.Invalid( raise n_exc.Invalid(
_("Provider name %(name)s is limited by %(len)s characters") _("Provider name %(name)s is limited by %(len)s characters")
% {'name': name, 'len': attr.NAME_MAX_LEN}) % {'name': name, 'len': db_const.NAME_FIELD_SIZE})
neutron_mod = NeutronModule(service_module) neutron_mod = NeutronModule(service_module)
svc_providers_opt = neutron_mod.service_providers() svc_providers_opt = neutron_mod.service_providers()

View File

@ -13,11 +13,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base from neutron_lib.db import model_base
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import sql from sqlalchemy import sql
from neutron.api.v2 import attributes
from neutron.db import models_v2 from neutron.db import models_v2
from neutron.db import standard_attr from neutron.db import standard_attr
from neutron.services.trunk import constants from neutron.services.trunk import constants
@ -28,7 +28,7 @@ class Trunk(standard_attr.HasStandardAttributes, model_base.BASEV2,
admin_state_up = sa.Column( admin_state_up = sa.Column(
sa.Boolean(), nullable=False, server_default=sql.true()) sa.Boolean(), nullable=False, server_default=sql.true())
name = sa.Column(sa.String(attributes.NAME_MAX_LEN)) name = sa.Column(sa.String(db_const.NAME_FIELD_SIZE))
port_id = sa.Column(sa.String(36), port_id = sa.Column(sa.String(36),
sa.ForeignKey('ports.id', sa.ForeignKey('ports.id',
ondelete='CASCADE'), ondelete='CASCADE'),

View File

@ -14,6 +14,7 @@
# under the License. # under the License.
import mock import mock
from neutron_lib.db import constants as db_const
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from oslo_policy import policy as oslo_policy from oslo_policy import policy as oslo_policy
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
@ -100,7 +101,7 @@ class TestPolicyEnforcementHook(test_functional.PecanFunctionalTest):
'tenant_id': {'allow_post': True, 'allow_put': False, 'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True, 'required_by_policy': True,
'validate': {'type:string': 'validate': {'type:string':
attributes.TENANT_ID_MAX_LEN}, db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True} 'is_visible': True}
} }
} }

View File

@ -12,13 +12,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from tempest.lib.common.utils import data_utils from tempest.lib.common.utils import data_utils
from tempest import test from tempest import test
from neutron.api.v2 import attributes as attr
from neutron.tests.tempest.api import base from neutron.tests.tempest.api import base
LONG_NAME_OK = 'x' * (attr.NAME_MAX_LEN) LONG_NAME_OK = 'x' * db_const.NAME_FIELD_SIZE
class MeteringTestJSON(base.BaseAdminNetworkTest): class MeteringTestJSON(base.BaseAdminNetworkTest):

View File

@ -12,13 +12,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test from tempest import test
from neutron.api.v2 import attributes as attr
from neutron.tests.tempest.api import base from neutron.tests.tempest.api import base
LONG_NAME_NG = 'x' * (attr.NAME_MAX_LEN + 1) LONG_NAME_NG = 'x' * (db_const.NAME_FIELD_SIZE + 1)
class MeteringNegativeTestJSON(base.BaseAdminNetworkTest): class MeteringNegativeTestJSON(base.BaseAdminNetworkTest):

View File

@ -10,15 +10,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutron_lib.db import constants as db_const
from tempest.lib import exceptions as lib_exc from tempest.lib import exceptions as lib_exc
from tempest import test from tempest import test
from neutron.api.v2 import attributes as attr
from neutron.tests.tempest.api import base from neutron.tests.tempest.api import base
LONG_NAME_NG = 'z' * (attr.NAME_MAX_LEN + 1) LONG_NAME_NG = 'z' * (db_const.NAME_FIELD_SIZE + 1)
LONG_DESCRIPTION_NG = 'z' * (attr.LONG_DESCRIPTION_MAX_LEN + 1) LONG_DESCRIPTION_NG = 'z' * (db_const.LONG_DESCRIPTION_FIELD_SIZE + 1)
LONG_TENANT_ID_NG = 'z' * (attr.TENANT_ID_MAX_LEN + 1) LONG_TENANT_ID_NG = 'z' * (db_const.PROJECT_ID_FIELD_SIZE + 1)
class QosNegativeTestJSON(base.BaseAdminNetworkTest): class QosNegativeTestJSON(base.BaseAdminNetworkTest):

View File

@ -15,11 +15,11 @@
import contextlib import contextlib
from neutron_lib import constants as n_consts from neutron_lib import constants as n_consts
from neutron_lib.db import constants as db_const
from oslo_utils import uuidutils from oslo_utils import uuidutils
import webob.exc import webob.exc
from neutron.api import extensions from neutron.api import extensions
from neutron.api.v2 import attributes as attr
from neutron.common import config from neutron.common import config
from neutron import context from neutron import context
import neutron.extensions import neutron.extensions
@ -34,8 +34,8 @@ DB_METERING_PLUGIN_KLASS = (
) )
extensions_path = ':'.join(neutron.extensions.__path__) extensions_path = ':'.join(neutron.extensions.__path__)
_long_description_ok = 'x' * (attr.LONG_DESCRIPTION_MAX_LEN) _long_description_ok = 'x' * (db_const.LONG_DESCRIPTION_FIELD_SIZE)
_long_description_ng = 'x' * (attr.LONG_DESCRIPTION_MAX_LEN + 1) _long_description_ng = 'x' * (db_const.LONG_DESCRIPTION_FIELD_SIZE + 1)
_fake_uuid = uuidutils.generate_uuid _fake_uuid = uuidutils.generate_uuid

View File

@ -17,11 +17,11 @@ import copy
import fixtures import fixtures
import mock import mock
from neutron_lib.db import constants as db_const
from oslo_config import cfg from oslo_config import cfg
from oslo_utils import uuidutils from oslo_utils import uuidutils
from webob import exc from webob import exc
from neutron.api.v2 import attributes as attr
from neutron import context from neutron import context
from neutron.db import api as dbapi from neutron.db import api as dbapi
from neutron.db.models import flavor as flavor_models from neutron.db.models import flavor as flavor_models
@ -42,8 +42,8 @@ _get_path = test_base._get_path
_driver = ('neutron.tests.unit.extensions.test_flavors.' _driver = ('neutron.tests.unit.extensions.test_flavors.'
'DummyServiceDriver') 'DummyServiceDriver')
_provider = 'dummy' _provider = 'dummy'
_long_name = 'x' * (attr.NAME_MAX_LEN + 1) _long_name = 'x' * (db_const.NAME_FIELD_SIZE + 1)
_long_description = 'x' * (attr.LONG_DESCRIPTION_MAX_LEN + 1) _long_description = 'x' * (db_const.LONG_DESCRIPTION_FIELD_SIZE + 1)
class FlavorExtensionTestCase(extension.ExtensionTestCase): class FlavorExtensionTestCase(extension.ExtensionTestCase):