# Used by range check to indicate no limit for a bound.
UNLIMITED = None
-# TODO(watanabe.isao): A fix like in neutron/db/models_v2.py needs to be
-# done in other db modules, to reuse the following constants.
-# Common definitions for maximum string field length
NAME_MAX_LEN = 255
TENANT_ID_MAX_LEN = 255
DESCRIPTION_MAX_LEN = 255
import sqlalchemy as sa
from sqlalchemy.orm import exc
+from neutron.api.v2 import attributes as attr
from neutron.db import model_base
from neutron.db import models_v2
from neutron.extensions import address_scope as ext_address_scope
__tablename__ = "address_scopes"
- name = sa.Column(sa.String(255), nullable=False)
+ name = sa.Column(sa.String(attr.NAME_MAX_LEN), nullable=False)
shared = sa.Column(sa.Boolean, nullable=False)
# updated when agents report
heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False)
# description is note for admin user
- description = sa.Column(sa.String(255))
+ description = sa.Column(sa.String(attributes.DESCRIPTION_MAX_LEN))
# configurations: a json dict string, I think 4095 is enough
configurations = sa.Column(sa.String(4095), nullable=False)
# load - number of resources hosted by the agent
from sqlalchemy import orm
from sqlalchemy.orm import exc as sa_exc
+from neutron.api.v2 import attributes as attr
from neutron.db import common_db_mixin
from neutron.db import model_base
from neutron.db import models_v2
class Flavor(model_base.BASEV2, models_v2.HasId):
- name = sa.Column(sa.String(255))
- description = sa.Column(sa.String(1024))
+ name = sa.Column(sa.String(attr.NAME_MAX_LEN))
+ description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
enabled = sa.Column(sa.Boolean, nullable=False, default=True,
server_default=sa.sql.true())
# Make it True for multi-type flavors
class ServiceProfile(model_base.BASEV2, models_v2.HasId):
- description = sa.Column(sa.String(1024))
+ description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
driver = sa.Column(sa.String(1024), nullable=False)
enabled = sa.Column(sa.Boolean, nullable=False, default=True,
server_default=sa.sql.true())
# queries on router ports, and also prevents potential error-prone
# conditions which might originate from users altering the DEVICE_OWNER
# property of router ports.
- port_type = sa.Column(sa.String(255))
+ port_type = sa.Column(sa.String(attributes.DEVICE_OWNER_MAX_LEN))
port = orm.relationship(
models_v2.Port,
backref=orm.backref('routerport', uselist=False, cascade="all,delete"),
models_v2.HasId, models_v2.HasTenant):
"""Represents a v2 neutron router."""
- name = sa.Column(sa.String(255))
+ name = sa.Column(sa.String(attributes.NAME_MAX_LEN))
status = sa.Column(sa.String(16))
admin_state_up = sa.Column(sa.Boolean)
gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id'))
__tablename__ = 'ha_router_networks'
- tenant_id = sa.Column(sa.String(255), primary_key=True,
- nullable=False)
+ tenant_id = sa.Column(sa.String(attributes.TENANT_ID_MAX_LEN),
+ primary_key=True, nullable=False)
network_id = sa.Column(sa.String(36),
sa.ForeignKey('networks.id', ondelete="CASCADE"),
nullable=False, primary_key=True)
from sqlalchemy import sql
from neutron.api.rpc.agentnotifiers import metering_rpc_agent_api
+from neutron.api.v2 import attributes as attr
from neutron.common import constants
from neutron.db import common_db_mixin as base_db
from neutron.db import l3_db
class MeteringLabel(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
- name = sa.Column(sa.String(255))
- description = sa.Column(sa.String(1024))
+ name = sa.Column(sa.String(attr.NAME_MAX_LEN))
+ description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN))
rules = orm.relationship(MeteringLabelRule, backref="label",
cascade="delete", lazy="joined")
routers = orm.relationship(
"""Represents a neutron subnet pool.
"""
- name = sa.Column(sa.String(255))
+ name = sa.Column(sa.String(attr.NAME_MAX_LEN))
ip_version = sa.Column(sa.Integer, nullable=False)
default_prefixlen = sa.Column(sa.Integer, nullable=False)
min_prefixlen = sa.Column(sa.Integer, nullable=False)
from sqlalchemy import orm
from sqlalchemy import sql
+from neutron.api.v2 import attributes as attr
from neutron.db import model_base
from neutron.db import models_v2
class Reservation(model_base.BASEV2, models_v2.HasId):
- tenant_id = sa.Column(sa.String(255))
+ tenant_id = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN))
expiration = sa.Column(sa.DateTime())
resource_deltas = orm.relationship(ResourceDelta,
backref='reservation',
resource = sa.Column(sa.String(255), nullable=False,
primary_key=True, index=True)
- tenant_id = sa.Column(sa.String(255), nullable=False,
+ tenant_id = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN), nullable=False,
primary_key=True, index=True)
dirty = sa.Column(sa.Boolean, nullable=False, server_default=sql.false())
import sqlalchemy as sa
from sqlalchemy.orm import validates
+from neutron.api.v2 import attributes as attr
from neutron.common import exceptions as n_exc
from neutron.db import model_base
# 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
# neutron gets better integration with keystone
- target_tenant = sa.Column(sa.String(255), nullable=False)
+ target_tenant = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN),
+ nullable=False)
action = sa.Column(sa.String(255), nullable=False)
models_v2.HasId, models_v2.HasTenant):
"""Represents a v2 neutron security group."""
- name = sa.Column(sa.String(255))
- description = sa.Column(sa.String(255))
+ name = sa.Column(sa.String(attributes.NAME_MAX_LEN))
+ description = sa.Column(sa.String(attributes.DESCRIPTION_MAX_LEN))
class DefaultSecurityGroup(model_base.BASEV2):
__tablename__ = 'default_security_group'
- tenant_id = sa.Column(sa.String(255), primary_key=True, nullable=False)
+ tenant_id = sa.Column(sa.String(attributes.TENANT_ID_MAX_LEN),
+ primary_key=True, nullable=False)
security_group_id = sa.Column(sa.String(36),
sa.ForeignKey("securitygroups.id",
ondelete="CASCADE"),
from oslo_log import log as logging
import sqlalchemy as sa
+from neutron.api.v2 import attributes as attr
from neutron.db import model_base
from neutron.services import provider_configuration as pconf
class ProviderResourceAssociation(model_base.BASEV2):
- provider_name = sa.Column(sa.String(255),
+ provider_name = sa.Column(sa.String(attr.NAME_MAX_LEN),
nullable=False, primary_key=True)
# should be manually deleted on resource deletion
resource_id = sa.Column(sa.String(36), nullable=False, primary_key=True,
import stevedore
from neutron._i18n import _LW
+from neutron.api.v2 import attributes as attr
from neutron.common import exceptions as n_exc
LOG = logging.getLogger(__name__)
"""Parse service definition opts and returns result."""
def validate_name(name):
- if len(name) > 255:
+ if len(name) > attr.NAME_MAX_LEN:
raise n_exc.Invalid(
- _("Provider name is limited by 255 characters: %s") % name)
+ _("Provider name %(name)s is limited by %(len)s characters")
+ % {'name': name, 'len': attr.NAME_MAX_LEN})
neutron_mod = NeutronModule(service_module)
svc_providers_opt = neutron_mod.service_providers()
import sqlalchemy
from sqlalchemy import event
+from neutron.api.v2 import attributes as attr
import neutron.db.migration as migration_help
from neutron.db.migration.alembic_migrations import external
from neutron.db.migration import cli as migration
'securitygroups', sqlalchemy.MetaData(),
sqlalchemy.Column('id', sqlalchemy.String(length=36),
nullable=False),
- sqlalchemy.Column('name', sqlalchemy.String(255)),
- sqlalchemy.Column('tenant_id', sqlalchemy.String(255)))
+ sqlalchemy.Column('name', sqlalchemy.String(attr.NAME_MAX_LEN)),
+ sqlalchemy.Column('tenant_id',
+ sqlalchemy.String(attr.TENANT_ID_MAX_LEN)))
with self.engine.connect() as conn:
SecurityGroup.create(conn)