# Copyright (c) 2014 OpenStack Foundation. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. """ The module provides all database models. Its purpose is to create comparable metadata with current database schema. Based on this comparison database can be healed with healing migration. Current HEAD commit is 59da928e945ec58836d34fd561d30a8a446e2728 """ import sqlalchemy as sa from sqlalchemy.ext import declarative from sqlalchemy.ext.orderinglist import ordering_list from sqlalchemy import orm from sqlalchemy import schema from neutron.db import model_base from neutron.openstack.common import uuidutils #neutron/plugins/ml2/drivers/mech_arista/db.py UUID_LEN = 36 STR_LEN = 255 #neutron/plugins/cisco/common/cisco_constants.py CISCO_CONSTANTS_NETWORK_TYPE_VLAN = 'vlan' CISCO_CONSTANTS_NETWORK_TYPE_OVERLAY = 'overlay' CISCO_CONSTANTS_NETWORK_TYPE_TRUNK = 'trunk' CISCO_CONSTANTS_NETWORK_TYPE_MULTI_SEGMENT = 'multi-segment' CISCO_CONSTANTS_NETWORK = 'network' CISCO_CONSTANTS_POLICY = 'policy' CISCO_CONSTANTS_TENANT_ID_NOT_SET = 'TENANT_ID_NOT_SET' #neutron/plugins/ml2/models.py BINDING_PROFILE_LEN = 4095 #neutron/extensions/portbindings.py VNIC_NORMAL = 'normal' #neutron/common/constants.py IPV6_SLAAC = 'slaac' DHCPV6_STATEFUL = 'dhcpv6-stateful' DHCPV6_STATELESS = 'dhcpv6-stateless' BASEV2 = declarative.declarative_base(cls=model_base.NeutronBaseV2) #neutron/db/models_v2.py class HasTenant(object): tenant_id = sa.Column(sa.String(255)) #neutron/db/models_v2.py class HasId(object): id = sa.Column(sa.String(36), primary_key=True, default=uuidutils.generate_uuid) #neutron/db/models_v2.py class HasStatusDescription(object): status = sa.Column(sa.String(16), nullable=False) status_description = sa.Column(sa.String(255)) #neutron/db/models_v2.py class IPAvailabilityRange(BASEV2): allocation_pool_id = sa.Column(sa.String(36), sa.ForeignKey('ipallocationpools.id', ondelete="CASCADE"), nullable=False, primary_key=True) first_ip = sa.Column(sa.String(64), nullable=False, primary_key=True) last_ip = sa.Column(sa.String(64), nullable=False, primary_key=True) #neutron/db/models_v2.py class IPAllocationPool(BASEV2, HasId): subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id', ondelete="CASCADE"), nullable=True) first_ip = sa.Column(sa.String(64), nullable=False) last_ip = sa.Column(sa.String(64), nullable=False) available_ranges = orm.relationship(IPAvailabilityRange, backref='ipallocationpool', lazy="joined", cascade='all, delete-orphan') #neutron/db/models_v2.py class IPAllocation(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), nullable=True) ip_address = sa.Column(sa.String(64), nullable=False, primary_key=True) subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id', ondelete="CASCADE"), nullable=False, primary_key=True) network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id", ondelete="CASCADE"), nullable=False, primary_key=True) #neutron/db/models_v2.py class Route(object): destination = sa.Column(sa.String(64), nullable=False, primary_key=True) nexthop = sa.Column(sa.String(64), nullable=False, primary_key=True) #neutron/db/models_v2.py class SubnetRoute(BASEV2, Route): subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id', ondelete="CASCADE"), primary_key=True) #neutron/db/models_v2.py class Port(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"), nullable=False) fixed_ips = orm.relationship(IPAllocation, backref='ports', lazy='joined') mac_address = sa.Column(sa.String(32), nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) status = sa.Column(sa.String(16), nullable=False) device_id = sa.Column(sa.String(255), nullable=False) device_owner = sa.Column(sa.String(255), nullable=False) #neutron/db/models_v2.py class DNSNameServer(BASEV2): address = sa.Column(sa.String(128), nullable=False, primary_key=True) subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id', ondelete="CASCADE"), primary_key=True) #neutron/db/models_v2.py class Subnet(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id')) ip_version = sa.Column(sa.Integer, nullable=False) cidr = sa.Column(sa.String(64), nullable=False) gateway_ip = sa.Column(sa.String(64)) allocation_pools = orm.relationship(IPAllocationPool, backref='subnet', lazy="joined", cascade='delete') enable_dhcp = sa.Column(sa.Boolean()) dns_nameservers = orm.relationship(DNSNameServer, backref='subnet', cascade='all, delete, delete-orphan') routes = orm.relationship(SubnetRoute, backref='subnet', cascade='all, delete, delete-orphan') shared = sa.Column(sa.Boolean) ipv6_ra_mode = sa.Column(sa.Enum(IPV6_SLAAC, DHCPV6_STATEFUL, DHCPV6_STATELESS, name='ipv6_ra_modes'), nullable=True) ipv6_address_mode = sa.Column(sa.Enum(IPV6_SLAAC, DHCPV6_STATEFUL, DHCPV6_STATELESS, name='ipv6_address_modes'), nullable=True) #neutron/db/models_v2.py class Network(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) ports = orm.relationship(Port, backref='networks') subnets = orm.relationship(Subnet, backref='networks', lazy="joined") status = sa.Column(sa.String(16)) admin_state_up = sa.Column(sa.Boolean) shared = sa.Column(sa.Boolean) #neutron/db/agents_db.py class Agent(BASEV2, HasId): __table_args__ = ( sa.UniqueConstraint('agent_type', 'host', name='uniq_agents0agent_type0host'), ) agent_type = sa.Column(sa.String(255), nullable=False) binary = sa.Column(sa.String(255), nullable=False) topic = sa.Column(sa.String(255), nullable=False) host = sa.Column(sa.String(255), nullable=False) admin_state_up = sa.Column(sa.Boolean, default=True, server_default=sa.sql.true(), nullable=False) created_at = sa.Column(sa.DateTime, nullable=False) started_at = sa.Column(sa.DateTime, nullable=False) heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False) description = sa.Column(sa.String(255)) configurations = sa.Column(sa.String(4095), nullable=False) #neutron/db/agentschedulers_db.py class NetworkDhcpAgentBinding(BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id", ondelete='CASCADE'), primary_key=True) dhcp_agent = orm.relation(Agent) dhcp_agent_id = sa.Column(sa.String(36), sa.ForeignKey("agents.id", ondelete='CASCADE'), primary_key=True) #neutron/db/allowedaddresspairs_db.py class AllowedAddressPair(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) mac_address = sa.Column(sa.String(32), nullable=False, primary_key=True) ip_address = sa.Column(sa.String(64), nullable=False, primary_key=True) port = orm.relationship( Port, backref=orm.backref("allowed_address_pairs", lazy="joined", cascade="delete")) #neutron/db/external_net_db.py class ExternalNetwork(BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) network = orm.relationship( Network, backref=orm.backref("external", lazy='joined', uselist=False, cascade='delete')) #neutron/db/extradhcpopt_db.py class ExtraDhcpOpt(BASEV2, HasId): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), nullable=False) opt_name = sa.Column(sa.String(64), nullable=False) opt_value = sa.Column(sa.String(255), nullable=False) __table_args__ = (sa.UniqueConstraint('port_id', 'opt_name', name='uidx_portid_optname'), BASEV2.__table_args__,) ports = orm.relationship( Port, backref=orm.backref("dhcp_opts", lazy='joined', cascade='delete')) #neutron/db/l3_db.py class Router(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) 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')) gw_port = orm.relationship(Port, lazy='joined') enable_snat = sa.Column(sa.Boolean, default=True, server_default=sa.sql.true(), nullable=False) #neutron/db/l3_db.py class FloatingIP(BASEV2, HasId, HasTenant): floating_ip_address = sa.Column(sa.String(64), nullable=False) floating_network_id = sa.Column(sa.String(36), nullable=False) floating_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id'), nullable=False) fixed_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id')) fixed_ip_address = sa.Column(sa.String(64)) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id')) last_known_router_id = sa.Column(sa.String(36)) status = sa.Column(sa.String(16)) #neutron/db/extraroute_db.py class RouterRoute(BASEV2, Route): router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) router = orm.relationship(Router, backref=orm.backref("route_list", lazy='joined', cascade='delete')) #neutron/db/servicetype_db.py class ProviderResourceAssociation(BASEV2): provider_name = sa.Column(sa.String(255), nullable=False, primary_key=True) resource_id = sa.Column(sa.String(36), nullable=False, primary_key=True, unique=True) #neutron/db/firewall/firewall_db.py class FirewallRule(BASEV2, HasId, HasTenant): __tablename__ = 'firewall_rules' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(1024)) firewall_policy_id = sa.Column(sa.String(36), sa.ForeignKey('firewall_policies.id'), nullable=True) shared = sa.Column(sa.Boolean) protocol = sa.Column(sa.String(40)) ip_version = sa.Column(sa.Integer, nullable=False) source_ip_address = sa.Column(sa.String(46)) destination_ip_address = sa.Column(sa.String(46)) source_port_range_min = sa.Column(sa.Integer) source_port_range_max = sa.Column(sa.Integer) destination_port_range_min = sa.Column(sa.Integer) destination_port_range_max = sa.Column(sa.Integer) action = sa.Column(sa.Enum('allow', 'deny', name='firewallrules_action')) enabled = sa.Column(sa.Boolean) position = sa.Column(sa.Integer) #neutron/db/firewall/firewall_db.py class Firewall(BASEV2, HasId, HasTenant): __tablename__ = 'firewalls' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(1024)) shared = sa.Column(sa.Boolean) admin_state_up = sa.Column(sa.Boolean) status = sa.Column(sa.String(16)) firewall_policy_id = sa.Column(sa.String(36), sa.ForeignKey('firewall_policies.id'), nullable=True) #neutron/db/firewall/firewall_db.py class FirewallPolicy(BASEV2, HasId, HasTenant): __tablename__ = 'firewall_policies' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(1024)) shared = sa.Column(sa.Boolean) firewall_rules = orm.relationship( FirewallRule, backref=orm.backref('firewall_policies', cascade='all, delete'), order_by='FirewallRule.position', collection_class=ordering_list('position', count_from=1)) audited = sa.Column(sa.Boolean) firewalls = orm.relationship(Firewall, backref='firewall_policies') #neutron/db/l3_agentschedulers_db.py class RouterL3AgentBinding(BASEV2, HasId): router_id = sa.Column(sa.String(36), sa.ForeignKey("routers.id", ondelete='CASCADE')) l3_agent = orm.relation(Agent) l3_agent_id = sa.Column(sa.String(36), sa.ForeignKey("agents.id", ondelete='CASCADE')) #neutron/db/loadbalancer/loadbalancer_db.py class SessionPersistence(BASEV2): vip_id = sa.Column(sa.String(36), sa.ForeignKey("vips.id"), primary_key=True) type = sa.Column(sa.Enum("SOURCE_IP", "HTTP_COOKIE", "APP_COOKIE", name="sesssionpersistences_type"), nullable=False) cookie_name = sa.Column(sa.String(1024)) #neutron/db/loadbalancer/loadbalancer_db.py class PoolStatistics(BASEV2): pool_id = sa.Column(sa.String(36), sa.ForeignKey("pools.id"), primary_key=True) bytes_in = sa.Column(sa.BigInteger, nullable=False) bytes_out = sa.Column(sa.BigInteger, nullable=False) active_connections = sa.Column(sa.BigInteger, nullable=False) total_connections = sa.Column(sa.BigInteger, nullable=False) #neutron/db/loadbalancer/loadbalancer_db.py class Vip(BASEV2, HasId, HasTenant, HasStatusDescription): name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id')) protocol_port = sa.Column(sa.Integer, nullable=False) protocol = sa.Column(sa.Enum("HTTP", "HTTPS", "TCP", name="lb_protocols"), nullable=False) pool_id = sa.Column(sa.String(36), nullable=False, unique=True) session_persistence = orm.relationship(SessionPersistence, uselist=False, backref="vips", cascade="all, delete-orphan") admin_state_up = sa.Column(sa.Boolean(), nullable=False) connection_limit = sa.Column(sa.Integer) port = orm.relationship(Port) #neutron/db/loadbalancer/loadbalancer_db.py class Member(BASEV2, HasId, HasTenant, HasStatusDescription): __table_args__ = ( sa.schema.UniqueConstraint('pool_id', 'address', 'protocol_port', name='uniq_member0pool_id0address0port'), ) pool_id = sa.Column(sa.String(36), sa.ForeignKey("pools.id"), nullable=False) address = sa.Column(sa.String(64), nullable=False) protocol_port = sa.Column(sa.Integer, nullable=False) weight = sa.Column(sa.Integer, nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) #neutron/db/loadbalancer/loadbalancer_db.py class Pool(BASEV2, HasId, HasTenant, HasStatusDescription): vip_id = sa.Column(sa.String(36), sa.ForeignKey("vips.id")) name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) subnet_id = sa.Column(sa.String(36), nullable=False) protocol = sa.Column(sa.Enum("HTTP", "HTTPS", "TCP", name="lb_protocols"), nullable=False) lb_method = sa.Column(sa.Enum("ROUND_ROBIN", "LEAST_CONNECTIONS", "SOURCE_IP", name="pools_lb_method"), nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) stats = orm.relationship(PoolStatistics, uselist=False, backref="pools", cascade="all, delete-orphan") members = orm.relationship(Member, backref="pools", cascade="all, delete-orphan") monitors = orm.relationship("PoolMonitorAssociation", backref="pools", cascade="all, delete-orphan") vip = orm.relationship(Vip, backref='pool') provider = orm.relationship( ProviderResourceAssociation, uselist=False, lazy="joined", primaryjoin="Pool.id==ProviderResourceAssociation.resource_id", foreign_keys=[ProviderResourceAssociation.resource_id] ) #neutron/db/loadbalancer/loadbalancer_db.py class HealthMonitor(BASEV2, HasId, HasTenant): type = sa.Column(sa.Enum("PING", "TCP", "HTTP", "HTTPS", name="healthmontiors_type"), nullable=False) delay = sa.Column(sa.Integer, nullable=False) timeout = sa.Column(sa.Integer, nullable=False) max_retries = sa.Column(sa.Integer, nullable=False) http_method = sa.Column(sa.String(16)) url_path = sa.Column(sa.String(255)) expected_codes = sa.Column(sa.String(64)) admin_state_up = sa.Column(sa.Boolean(), nullable=False) pools = orm.relationship( "PoolMonitorAssociation", backref="healthmonitor", cascade="all", lazy="joined" ) #neutron/db/loadbalancer/loadbalancer_db.py class PoolMonitorAssociation(BASEV2, HasStatusDescription): pool_id = sa.Column(sa.String(36), sa.ForeignKey("pools.id"), primary_key=True) monitor_id = sa.Column(sa.String(36), sa.ForeignKey("healthmonitors.id"), primary_key=True) #neutron/db/metering/metering_db.py class MeteringLabelRule(BASEV2, HasId): direction = sa.Column(sa.Enum('ingress', 'egress', name='meteringlabels_direction')) remote_ip_prefix = sa.Column(sa.String(64)) metering_label_id = sa.Column(sa.String(36), sa.ForeignKey("meteringlabels.id", ondelete="CASCADE"), nullable=False) excluded = sa.Column(sa.Boolean, default=False, server_default=sa.sql.false()) #neutron/db/metering/metering_db.py class MeteringLabel(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) description = sa.Column(sa.String(1024)) rules = orm.relationship(MeteringLabelRule, backref="label", cascade="delete", lazy="joined") routers = orm.relationship( Router, primaryjoin="MeteringLabel.tenant_id==Router.tenant_id", foreign_keys='MeteringLabel.tenant_id', uselist=True) #neutron/db/portbindings_db.py class PortBindingPort(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) host = sa.Column(sa.String(255), nullable=False) port = orm.relationship( Port, backref=orm.backref("portbinding", lazy='joined', uselist=False, cascade='delete')) #neutron/db/portsecurity_db.py class PortSecurityBinding(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) port_security_enabled = sa.Column(sa.Boolean(), nullable=False) port = orm.relationship( Port, backref=orm.backref("port_security", uselist=False, cascade='delete', lazy='joined')) #neutron/db/portsecurity_db.py class NetworkSecurityBinding(BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) port_security_enabled = sa.Column(sa.Boolean(), nullable=False) network = orm.relationship( Network, backref=orm.backref("port_security", uselist=False, cascade='delete', lazy='joined')) #neutron/db/quota_db.py class Quota(BASEV2, HasId): tenant_id = sa.Column(sa.String(255), index=True) resource = sa.Column(sa.String(255)) limit = sa.Column(sa.Integer) #neutron/db/routedserviceinsertion_db.py class ServiceRouterBinding(BASEV2): resource_id = sa.Column(sa.String(36), primary_key=True) resource_type = sa.Column(sa.String(36), primary_key=True) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id'), nullable=False) #neutron/db/routerservicetype_db.py class RouterServiceTypeBinding(BASEV2): router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) service_type_id = sa.Column(sa.String(36), nullable=False) #neutron/db/securitygroups_db.py class SecurityGroup(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) #neutron/db/securitygroups_db.py class SecurityGroupPortBinding(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey("ports.id", ondelete='CASCADE'), primary_key=True) security_group_id = sa.Column(sa.String(36), sa.ForeignKey("securitygroups.id"), primary_key=True) # Add a relationship to the Port model in order to instruct SQLAlchemy to # eagerly load security group bindings ports = orm.relationship( Port, backref=orm.backref("security_groups", lazy='joined', cascade='delete')) #neutron/db/securitygroups_db.py class SecurityGroupRule(BASEV2, HasId, HasTenant): security_group_id = sa.Column(sa.String(36), sa.ForeignKey("securitygroups.id", ondelete="CASCADE"), nullable=False) remote_group_id = sa.Column(sa.String(36), sa.ForeignKey("securitygroups.id", ondelete="CASCADE"), nullable=True) direction = sa.Column(sa.Enum('ingress', 'egress', name='securitygrouprules_direction')) ethertype = sa.Column(sa.String(40)) protocol = sa.Column(sa.String(40)) port_range_min = sa.Column(sa.Integer) port_range_max = sa.Column(sa.Integer) remote_ip_prefix = sa.Column(sa.String(255)) security_group = orm.relationship( SecurityGroup, backref=orm.backref('rules', cascade='all,delete'), primaryjoin="SecurityGroup.id==SecurityGroupRule.security_group_id") source_group = orm.relationship( SecurityGroup, backref=orm.backref('source_rules', cascade='all,delete'), primaryjoin="SecurityGroup.id==SecurityGroupRule.remote_group_id") #neutron/db/vpn/vpn_db.py class IPsecPeerCidr(BASEV2): cidr = sa.Column(sa.String(32), nullable=False, primary_key=True) ipsec_site_connection_id = sa.Column( sa.String(36), sa.ForeignKey('ipsec_site_connections.id', ondelete="CASCADE"), primary_key=True) #neutron/db/vpn/vpn_db.py class IPsecPolicy(BASEV2, HasId, HasTenant): __tablename__ = 'ipsecpolicies' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) transform_protocol = sa.Column(sa.Enum("esp", "ah", "ah-esp", name="ipsec_transform_protocols"), nullable=False) auth_algorithm = sa.Column(sa.Enum("sha1", name="vpn_auth_algorithms"), nullable=False) encryption_algorithm = sa.Column(sa.Enum("3des", "aes-128", "aes-256", "aes-192", name="vpn_encrypt_algorithms"), nullable=False) encapsulation_mode = sa.Column(sa.Enum("tunnel", "transport", name="ipsec_encapsulations"), nullable=False) lifetime_units = sa.Column(sa.Enum("seconds", "kilobytes", name="vpn_lifetime_units"), nullable=False) lifetime_value = sa.Column(sa.Integer, nullable=False) pfs = sa.Column(sa.Enum("group2", "group5", "group14", name="vpn_pfs"), nullable=False) #neutron/db/vpn/vpn_db.py class IKEPolicy(BASEV2, HasId, HasTenant): __tablename__ = 'ikepolicies' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) auth_algorithm = sa.Column(sa.Enum("sha1", name="vpn_auth_algorithms"), nullable=False) encryption_algorithm = sa.Column(sa.Enum("3des", "aes-128", "aes-256", "aes-192", name="vpn_encrypt_algorithms"), nullable=False) phase1_negotiation_mode = sa.Column(sa.Enum("main", name="ike_phase1_mode"), nullable=False) lifetime_units = sa.Column(sa.Enum("seconds", "kilobytes", name="vpn_lifetime_units"), nullable=False) lifetime_value = sa.Column(sa.Integer, nullable=False) ike_version = sa.Column(sa.Enum("v1", "v2", name="ike_versions"), nullable=False) pfs = sa.Column(sa.Enum("group2", "group5", "group14", name="vpn_pfs"), nullable=False) #neutron/db/vpn/vpn_db.py class IPsecSiteConnection(BASEV2, HasId, HasTenant): __tablename__ = 'ipsec_site_connections' name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) peer_address = sa.Column(sa.String(255), nullable=False) peer_id = sa.Column(sa.String(255), nullable=False) route_mode = sa.Column(sa.String(8), nullable=False) mtu = sa.Column(sa.Integer, nullable=False) initiator = sa.Column(sa.Enum("bi-directional", "response-only", name="vpn_initiators"), nullable=False) auth_mode = sa.Column(sa.String(16), nullable=False) psk = sa.Column(sa.String(255), nullable=False) dpd_action = sa.Column(sa.Enum("hold", "clear", "restart", "disabled", "restart-by-peer", name="vpn_dpd_actions"), nullable=False) dpd_interval = sa.Column(sa.Integer, nullable=False) dpd_timeout = sa.Column(sa.Integer, nullable=False) status = sa.Column(sa.String(16), nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) vpnservice_id = sa.Column(sa.String(36), sa.ForeignKey('vpnservices.id'), nullable=False) ipsecpolicy_id = sa.Column(sa.String(36), sa.ForeignKey('ipsecpolicies.id'), nullable=False) ikepolicy_id = sa.Column(sa.String(36), sa.ForeignKey('ikepolicies.id'), nullable=False) ipsecpolicy = orm.relationship( IPsecPolicy, backref='ipsec_site_connection') ikepolicy = orm.relationship(IKEPolicy, backref='ipsec_site_connection') peer_cidrs = orm.relationship(IPsecPeerCidr, backref='ipsec_site_connection', lazy='joined', cascade='all, delete, delete-orphan') #neutron/db/vpn/vpn_db.py class VPNService(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) description = sa.Column(sa.String(255)) status = sa.Column(sa.String(16), nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id'), nullable=False) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id'), nullable=False) subnet = orm.relationship(Subnet) router = orm.relationship(Router) ipsec_site_connections = orm.relationship( IPsecSiteConnection, backref='vpnservice', cascade="all, delete-orphan") #neutron/plugins/bigswitch/db/consistency_db.py class ConsistencyHash(BASEV2): __tablename__ = 'consistencyhashes' hash_id = sa.Column(sa.String(255), primary_key=True) hash = sa.Column(sa.String(255), nullable=False) #neutron/plugins/bigswitch/routerrule_db.py class RouterRule(BASEV2): id = sa.Column(sa.Integer, primary_key=True) source = sa.Column(sa.String(64), nullable=False) destination = sa.Column(sa.String(64), nullable=False) nexthops = orm.relationship('NextHop', cascade='all,delete') action = sa.Column(sa.String(10), nullable=False) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE")) #neutron/plugins/bigswitch/routerrule_db.py class NextHop(BASEV2): rule_id = sa.Column(sa.Integer, sa.ForeignKey('routerrules.id', ondelete="CASCADE"), primary_key=True) nexthop = sa.Column(sa.String(64), nullable=False, primary_key=True) #neutron/plugins/brocade/db/models.py class BrocadeNetwork(BASEV2, HasId): vlan = sa.Column(sa.String(10)) #neutron/plugins/brocade/db/models.py class BrocadePort(BASEV2): port_id = sa.Column(sa.String(36), primary_key=True, default="", server_default='') network_id = sa.Column(sa.String(36), sa.ForeignKey("brocadenetworks.id"), nullable=False) admin_state_up = sa.Column(sa.Boolean, nullable=False) physical_interface = sa.Column(sa.String(36)) vlan_id = sa.Column(sa.String(36)) tenant_id = sa.Column(sa.String(36)) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvVlanAllocation(BASEV2): __tablename__ = 'cisco_n1kv_vlan_allocations' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False, default=False, server_default=sa.sql.false()) network_profile_id = sa.Column(sa.String(36), sa.ForeignKey('cisco_network_profiles.id', ondelete="CASCADE"), nullable=False) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvVxlanAllocation(BASEV2): __tablename__ = 'cisco_n1kv_vxlan_allocations' vxlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False, default=False, server_default=sa.sql.false()) network_profile_id = sa.Column(sa.String(36), sa.ForeignKey('cisco_network_profiles.id', ondelete="CASCADE"), nullable=False) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvPortBinding(BASEV2): __tablename__ = 'cisco_n1kv_port_bindings' port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) profile_id = sa.Column(sa.String(36), sa.ForeignKey('cisco_policy_profiles.id')) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvNetworkBinding(BASEV2): __tablename__ = 'cisco_n1kv_network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) network_type = sa.Column(sa.String(32), nullable=False) physical_network = sa.Column(sa.String(64)) segmentation_id = sa.Column(sa.Integer) multicast_ip = sa.Column(sa.String(32)) profile_id = sa.Column(sa.String(36), sa.ForeignKey('cisco_network_profiles.id')) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kVmNetwork(BASEV2): __tablename__ = 'cisco_n1kv_vmnetworks' name = sa.Column(sa.String(80), primary_key=True) profile_id = sa.Column(sa.String(36), sa.ForeignKey('cisco_policy_profiles.id')) network_id = sa.Column(sa.String(36)) port_count = sa.Column(sa.Integer) #neutron/plugins/cisco/db/n1kv_models_v2.py class NetworkProfile(BASEV2, HasId): __tablename__ = 'cisco_network_profiles' name = sa.Column(sa.String(255)) segment_type = sa.Column( sa.Enum(CISCO_CONSTANTS_NETWORK_TYPE_VLAN, CISCO_CONSTANTS_NETWORK_TYPE_OVERLAY, CISCO_CONSTANTS_NETWORK_TYPE_TRUNK, CISCO_CONSTANTS_NETWORK_TYPE_MULTI_SEGMENT, name='segment_type'), nullable=False) sub_type = sa.Column(sa.String(255)) segment_range = sa.Column(sa.String(255)) multicast_ip_index = sa.Column(sa.Integer, default=0, server_default='0') multicast_ip_range = sa.Column(sa.String(255)) physical_network = sa.Column(sa.String(255)) #neutron/plugins/cisco/db/n1kv_models_v2.py class PolicyProfile(BASEV2): __tablename__ = 'cisco_policy_profiles' id = sa.Column(sa.String(36), primary_key=True) name = sa.Column(sa.String(255)) #neutron/plugins/cisco/db/n1kv_models_v2.py class ProfileBinding(BASEV2): __tablename__ = 'cisco_n1kv_profile_bindings' profile_type = sa.Column(sa.Enum(CISCO_CONSTANTS_NETWORK, CISCO_CONSTANTS_POLICY, name='profile_type')) tenant_id = sa.Column(sa.String(36), primary_key=True, default=CISCO_CONSTANTS_TENANT_ID_NOT_SET, server_default=CISCO_CONSTANTS_TENANT_ID_NOT_SET) profile_id = sa.Column(sa.String(36), primary_key=True) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvTrunkSegmentBinding(BASEV2): __tablename__ = 'cisco_n1kv_trunk_segments' trunk_segment_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) segment_id = sa.Column(sa.String(36), nullable=False, primary_key=True) dot1qtag = sa.Column(sa.String(36), nullable=False, primary_key=True) #neutron/plugins/cisco/db/n1kv_models_v2.py class N1kvMultiSegmentNetworkBinding(BASEV2): __tablename__ = 'cisco_n1kv_multi_segments' multi_segment_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) segment1_id = sa.Column(sa.String(36), nullable=False, primary_key=True) segment2_id = sa.Column(sa.String(36), nullable=False, primary_key=True) encap_profile_name = sa.Column(sa.String(36)) #neutron/plugins/cisco/db/network_models_v2.py class QoS(BASEV2): __tablename__ = 'cisco_qos_policies' qos_id = sa.Column(sa.String(255)) tenant_id = sa.Column(sa.String(255), primary_key=True) qos_name = sa.Column(sa.String(255), primary_key=True) qos_desc = sa.Column(sa.String(255)) #neutron/plugins/cisco/db/network_models_v2.py class Credential(BASEV2): __tablename__ = 'cisco_credentials' credential_id = sa.Column(sa.String(255)) credential_name = sa.Column(sa.String(255), primary_key=True) user_name = sa.Column(sa.String(255)) password = sa.Column(sa.String(255)) type = sa.Column(sa.String(255)) #neutron/plugins/cisco/db/network_models_v2.py class ProviderNetwork(BASEV2): __tablename__ = 'cisco_provider_networks' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) network_type = sa.Column(sa.String(255), nullable=False) segmentation_id = sa.Column(sa.Integer, nullable=False) #neutron/plugins/cisco/db/nexus_models_v2.py #class was renamed from NexusPortBinding to CiscoNexusPortBinding class CiscoNexusPortBinding(BASEV2): __tablename__ = "cisco_nexusport_bindings" id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) port_id = sa.Column(sa.String(255)) vlan_id = sa.Column(sa.Integer, nullable=False) switch_ip = sa.Column(sa.String(255), nullable=False) instance_id = sa.Column(sa.String(255), nullable=False) #neutron/plugins/hyperv/model.py #class was renamed from VlanAllocation to HyperVVlanAllocation class HyperVVlanAllocation(BASEV2): __tablename__ = 'hyperv_vlan_allocations' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False) #neutron/plugins/hyperv/model.py #class was renamed from NetworkBinding to HyperVNetworkBinding class HyperVNetworkBinding(BASEV2): __tablename__ = 'hyperv_network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) network_type = sa.Column(sa.String(32), nullable=False) physical_network = sa.Column(sa.String(64)) segmentation_id = sa.Column(sa.Integer) #neutron/plugins/linuxbridge/db/l2network_models_v2.py class NetworkState(BASEV2): __tablename__ = 'network_states' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False) #neutron/plugins/linuxbridge/db/l2network_models_v2.py class NetworkBinding(BASEV2): __tablename__ = 'network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) physical_network = sa.Column(sa.String(64)) vlan_id = sa.Column(sa.Integer, nullable=False) #neutron/plugins/metaplugin/meta_models_v2.py class NetworkFlavor(BASEV2): flavor = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) #neutron/plugins/metaplugin/meta_models_v2.py class RouterFlavor(BASEV2): flavor = sa.Column(sa.String(255)) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) #neutron/plugins/ml2/drivers/brocade/db/models.py class ML2_BrocadeNetwork(BASEV2, HasId, HasTenant): vlan = sa.Column(sa.String(10)) segment_id = sa.Column(sa.String(36)) network_type = sa.Column(sa.String(10)) #neutron/plugins/ml2/drivers/brocade/db/models.py class ML2_BrocadePort(BASEV2, HasId, HasTenant): network_id = sa.Column(sa.String(36), sa.ForeignKey("ml2_brocadenetworks.id"), nullable=False) admin_state_up = sa.Column(sa.Boolean, nullable=False) physical_interface = sa.Column(sa.String(36)) vlan_id = sa.Column(sa.String(36)) #neutron/plugins/ml2/drivers/cisco/apic/apic_model.py class NetworkEPG(BASEV2): __tablename__ = 'cisco_ml2_apic_epgs' network_id = sa.Column(sa.String(255), nullable=False, primary_key=True) epg_id = sa.Column(sa.String(64), nullable=False) segmentation_id = sa.Column(sa.String(64), nullable=False) provider = sa.Column(sa.Boolean, default=False, server_default=sa.sql.false(), nullable=False) #neutron/plugins/ml2/drivers/cisco/apic/apic_model.py class PortProfile(BASEV2): __tablename__ = 'cisco_ml2_apic_port_profiles' node_id = sa.Column(sa.String(255), nullable=False, primary_key=True) profile_id = sa.Column(sa.String(64), nullable=False) hpselc_id = sa.Column(sa.String(64), nullable=False) module = sa.Column(sa.String(10), nullable=False) from_port = sa.Column(sa.Integer(), nullable=False) to_port = sa.Column(sa.Integer(), nullable=False) #neutron/plugins/ml2/drivers/cisco/apic/apic_model.py class TenantContract(BASEV2, HasTenant): __tablename__ = 'cisco_ml2_apic_contracts' __table_args__ = (sa.PrimaryKeyConstraint('tenant_id'),) contract_id = sa.Column(sa.String(64), nullable=False) filter_id = sa.Column(sa.String(64), nullable=False) #neutron/plugins/ml2/drivers/cisco/nexus/nexus_models_v2.py #class was renamed from NexusPortBinding to CiscoMl2NexusPortBinding class CiscoMl2NexusPortBinding(BASEV2): __tablename__ = "cisco_ml2_nexusport_bindings" binding_id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) port_id = sa.Column(sa.String(255)) vlan_id = sa.Column(sa.Integer, nullable=False) switch_ip = sa.Column(sa.String(255)) instance_id = sa.Column(sa.String(255)) #neutron/plugins/ml2/drivers/mech_arista/db.py class AristaProvisionedNets(BASEV2, HasId, HasTenant): __tablename__ = 'arista_provisioned_nets' network_id = sa.Column(sa.String(UUID_LEN)) segmentation_id = sa.Column(sa.Integer) #neutron/plugins/ml2/drivers/mech_arista/db.py class AristaProvisionedVms(BASEV2, HasId, HasTenant): __tablename__ = 'arista_provisioned_vms' vm_id = sa.Column(sa.String(STR_LEN)) host_id = sa.Column(sa.String(STR_LEN)) port_id = sa.Column(sa.String(UUID_LEN)) network_id = sa.Column(sa.String(UUID_LEN)) #neutron/plugins/ml2/drivers/mech_arista/db.py class AristaProvisionedTenants(BASEV2, HasId, HasTenant): __tablename__ = 'arista_provisioned_tenants' #neutron/plugins/ml2/drivers/type_flat.py class FlatAllocation(BASEV2): __tablename__ = 'ml2_flat_allocations' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) #neutron/plugins/ml2/drivers/type_gre.py class GreAllocation(BASEV2): __tablename__ = 'ml2_gre_allocations' gre_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False, default=False, server_default=sa.sql.false()) #neutron/plugins/ml2/drivers/type_gre.py class GreEndpoints(BASEV2): __tablename__ = 'ml2_gre_endpoints' ip_address = sa.Column(sa.String(64), primary_key=True) #neutron/plugins/ml2/drivers/type_vlan.py #class was renamed from VlanAllocation to Ml2VlanAllocation class Ml2VlanAllocation(BASEV2): __tablename__ = 'ml2_vlan_allocations' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False) #neutron/plugins/ml2/drivers/type_vxlan.py class VxlanAllocation(BASEV2): __tablename__ = 'ml2_vxlan_allocations' vxlan_vni = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False, default=False, server_default=sa.sql.false()) #neutron/plugins/ml2/drivers/type_vxlan.py class VxlanEndpoints(BASEV2): __tablename__ = 'ml2_vxlan_endpoints' ip_address = sa.Column(sa.String(64), primary_key=True) udp_port = sa.Column(sa.Integer, primary_key=True, nullable=False, autoincrement=False) #neutron/plugins/ml2/models.py class NetworkSegment(BASEV2, HasId): __tablename__ = 'ml2_network_segments' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), nullable=False) network_type = sa.Column(sa.String(32), nullable=False) physical_network = sa.Column(sa.String(64)) segmentation_id = sa.Column(sa.Integer) #neutron/plugins/ml2/models.py class PortBinding(BASEV2): __tablename__ = 'ml2_port_bindings' port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) host = sa.Column(sa.String(255), nullable=False, default='', server_default='') vnic_type = sa.Column(sa.String(64), nullable=False, default=VNIC_NORMAL, server_default=VNIC_NORMAL) profile = sa.Column(sa.String(BINDING_PROFILE_LEN), nullable=False, default='', server_default='') vif_type = sa.Column(sa.String(64), nullable=False) vif_details = sa.Column(sa.String(4095), nullable=False, default='', server_default='') driver = sa.Column(sa.String(64)) segment = sa.Column(sa.String(36), sa.ForeignKey('ml2_network_segments.id', ondelete="SET NULL")) port = orm.relationship( Port, backref=orm.backref("port_binding", lazy='joined', uselist=False, cascade='delete')) #neutron/plugins/mlnx/db/mlnx_models_v2.py class SegmentationIdAllocation(BASEV2): __tablename__ = 'segmentation_id_allocation' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) segmentation_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False, default=False, server_default=sa.sql.false()) #neutron/plugins/mlnx/db/mlnx_models_v2.py #class was renamed from NetworkBinding to MlnxNetworkBinding class MlnxNetworkBinding(BASEV2): __tablename__ = 'mlnx_network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) network_type = sa.Column(sa.String(32), nullable=False) physical_network = sa.Column(sa.String(64)) segmentation_id = sa.Column(sa.Integer, nullable=False) #neutron/plugins/mlnx/db/mlnx_models_v2.py class PortProfileBinding(BASEV2): __tablename__ = 'port_profile' port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) vnic_type = sa.Column(sa.String(32), nullable=False) #neutron/plugins/nec/db/models.py class OFCId(object): ofc_id = sa.Column(sa.String(255), unique=True, nullable=False) #neutron/plugins/nec/db/models.py class NeutronId(object): neutron_id = sa.Column(sa.String(36), primary_key=True) #neutron/plugins/nec/db/models.py class OFCTenantMapping(BASEV2, NeutronId, OFCId): """Represents a Tenant on OpenFlow Network/Controller.""" #neutron/plugins/nec/db/models.py class OFCNetworkMapping(BASEV2, NeutronId, OFCId): """Represents a Network on OpenFlow Network/Controller.""" #neutron/plugins/nec/db/models.py class OFCPortMapping(BASEV2, NeutronId, OFCId): """Represents a Port on OpenFlow Network/Controller.""" #neutron/plugins/nec/db/models.py class OFCRouterMapping(BASEV2, NeutronId, OFCId): """Represents a router on OpenFlow Network/Controller.""" #neutron/plugins/nec/db/models.py class OFCFilterMapping(BASEV2, NeutronId, OFCId): """Represents a Filter on OpenFlow Network/Controller.""" #neutron/plugins/nec/db/models.py class PortInfo(BASEV2): id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) datapath_id = sa.Column(sa.String(36), nullable=False) port_no = sa.Column(sa.Integer, nullable=False) vlan_id = sa.Column(sa.Integer, nullable=False) mac = sa.Column(sa.String(32), nullable=False) port = orm.relationship( Port, backref=orm.backref("portinfo", lazy='joined', uselist=False, cascade='delete')) #neutron/plugins/nec/db/packetfilter.py class PacketFilter(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), nullable=False) priority = sa.Column(sa.Integer, nullable=False) action = sa.Column(sa.String(16), nullable=False) in_port = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), nullable=True) src_mac = sa.Column(sa.String(32), nullable=False) dst_mac = sa.Column(sa.String(32), nullable=False) eth_type = sa.Column(sa.Integer, nullable=False) src_cidr = sa.Column(sa.String(64), nullable=False) dst_cidr = sa.Column(sa.String(64), nullable=False) protocol = sa.Column(sa.String(16), nullable=False) src_port = sa.Column(sa.Integer, nullable=False) dst_port = sa.Column(sa.Integer, nullable=False) admin_state_up = sa.Column(sa.Boolean(), nullable=False) status = sa.Column(sa.String(16), nullable=False) network = orm.relationship( Network, backref=orm.backref('packetfilters', lazy='joined', cascade='delete'), uselist=False) in_port_ref = orm.relationship( Port, backref=orm.backref('packetfilters', lazy='joined', cascade='delete'), primaryjoin="Port.id==PacketFilter.in_port", uselist=False) #neutron/plugins/nec/db/router.py class RouterProvider(BASEV2): provider = sa.Column(sa.String(255)) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) router = orm.relationship(Router, uselist=False, backref=orm.backref('provider', uselist=False, lazy='joined', cascade='delete')) #neutron/plugins/nuage/nuage_models.py class NetPartition(BASEV2, HasId): __tablename__ = 'nuage_net_partitions' name = sa.Column(sa.String(64)) l3dom_tmplt_id = sa.Column(sa.String(36)) l2dom_tmplt_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class NetPartitionRouter(BASEV2): __tablename__ = "nuage_net_partition_router_mapping" net_partition_id = sa.Column(sa.String(36), sa.ForeignKey('nuage_net_partitions.id', ondelete="CASCADE"), primary_key=True) router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) nuage_router_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class RouterZone(BASEV2): __tablename__ = "nuage_router_zone_mapping" router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) nuage_zone_id = sa.Column(sa.String(36)) nuage_user_id = sa.Column(sa.String(36)) nuage_group_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class SubnetL2Domain(BASEV2): __tablename__ = 'nuage_subnet_l2dom_mapping' subnet_id = sa.Column(sa.String(36), sa.ForeignKey('subnets.id', ondelete="CASCADE"), primary_key=True) net_partition_id = sa.Column(sa.String(36), sa.ForeignKey('nuage_net_partitions.id', ondelete="CASCADE")) nuage_subnet_id = sa.Column(sa.String(36)) nuage_l2dom_tmplt_id = sa.Column(sa.String(36)) nuage_user_id = sa.Column(sa.String(36)) nuage_group_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class PortVPortMapping(BASEV2): __tablename__ = 'nuage_port_mapping' port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) nuage_vport_id = sa.Column(sa.String(36)) nuage_vif_id = sa.Column(sa.String(36)) static_ip = sa.Column(sa.Boolean()) #neutron/plugins/nuage/nuage_models.py class RouterRoutesMapping(BASEV2, Route): __tablename__ = 'nuage_routerroutes_mapping' router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True, nullable=False) nuage_route_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class FloatingIPPoolMapping(BASEV2): __tablename__ = "nuage_floatingip_pool_mapping" fip_pool_id = sa.Column(sa.String(36), primary_key=True) net_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE")) router_id = sa.Column(sa.String(36)) #neutron/plugins/nuage/nuage_models.py class FloatingIPMapping(BASEV2): __tablename__ = 'nuage_floatingip_mapping' fip_id = sa.Column(sa.String(36), sa.ForeignKey('floatingips.id', ondelete="CASCADE"), primary_key=True) router_id = sa.Column(sa.String(36)) nuage_fip_id = sa.Column(sa.String(36)) #neutron/plugins/openvswitch/ovs_models_v2.py #class was renamed from VlanAllocation to OvsVlanAllocation class OvsVlanAllocation(BASEV2): __tablename__ = 'ovs_vlan_allocations' physical_network = sa.Column(sa.String(64), nullable=False, primary_key=True) vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False) #neutron/plugins/openvswitch/ovs_models_v2.py class TunnelAllocation(BASEV2): __tablename__ = 'ovs_tunnel_allocations' tunnel_id = sa.Column(sa.Integer, nullable=False, primary_key=True, autoincrement=False) allocated = sa.Column(sa.Boolean, nullable=False) #neutron/plugins/openvswitch/ovs_models_v2.py #class was renamed from NetworkBinding to OvsNetworkBinding class OvsNetworkBinding(BASEV2): __tablename__ = 'ovs_network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) # 'gre', 'vlan', 'flat', 'local' network_type = sa.Column(sa.String(32), nullable=False) physical_network = sa.Column(sa.String(64)) segmentation_id = sa.Column(sa.Integer) # tunnel_id or vlan_id network = orm.relationship( Network, backref=orm.backref("binding", lazy='joined', uselist=False, cascade='delete')) #neutron/plugins/openvswitch/ovs_models_v2.py class TunnelEndpoint(BASEV2): __tablename__ = 'ovs_tunnel_endpoints' __table_args__ = ( schema.UniqueConstraint('id', name='uniq_ovs_tunnel_endpoints0id'), BASEV2.__table_args__, ) ip_address = sa.Column(sa.String(64), primary_key=True) id = sa.Column(sa.Integer, nullable=False) #neutron/plugins/ryu/db/models_v2.py class TunnelKeyLast(BASEV2): last_key = sa.Column(sa.Integer, primary_key=True) #neutron/plugins/ryu/db/models_v2.py class TunnelKey(BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"), nullable=False) tunnel_key = sa.Column(sa.Integer, primary_key=True, nullable=False, autoincrement=False) #neutron/plugins/vmware/dbexts/lsn_db.py class LsnPort(BASEV2): __tablename__ = 'lsn_port' lsn_port_id = sa.Column(sa.String(36), primary_key=True) lsn_id = sa.Column(sa.String(36), sa.ForeignKey('lsn.lsn_id', ondelete="CASCADE"), nullable=False) sub_id = sa.Column(sa.String(36), nullable=False, unique=True) mac_addr = sa.Column(sa.String(32), nullable=False, unique=True) #neutron/plugins/vmware/dbexts/lsn_db.py class Lsn(BASEV2): __tablename__ = 'lsn' lsn_id = sa.Column(sa.String(36), primary_key=True) net_id = sa.Column(sa.String(36), nullable=False) #neutron/plugins/vmware/dbexts/maclearning.py class MacLearningState(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) mac_learning_enabled = sa.Column(sa.Boolean(), nullable=False) port = orm.relationship( Port, backref=orm.backref("mac_learning_state", lazy='joined', uselist=False, cascade='delete')) #neutron/plugins/vmware/dbexts/models.py class TzNetworkBinding(BASEV2): __tablename__ = 'tz_network_bindings' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) binding_type = sa.Column(sa.Enum('flat', 'vlan', 'stt', 'gre', 'l3_ext', name='tz_network_bindings_binding_type'), nullable=False, primary_key=True) phy_uuid = sa.Column(sa.String(36), primary_key=True, nullable=True) vlan_id = sa.Column(sa.Integer, primary_key=True, nullable=True, autoincrement=False) #neutron/plugins/vmware/dbexts/models.py class NeutronNsxNetworkMapping(BASEV2): __tablename__ = 'neutron_nsx_network_mappings' neutron_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete='CASCADE'), primary_key=True) nsx_id = sa.Column(sa.String(36), primary_key=True) #neutron/plugins/vmware/dbexts/models.py class NeutronNsxSecurityGroupMapping(BASEV2): __tablename__ = 'neutron_nsx_security_group_mappings' neutron_id = sa.Column(sa.String(36), sa.ForeignKey('securitygroups.id', ondelete="CASCADE"), primary_key=True) nsx_id = sa.Column(sa.String(36), primary_key=True) #neutron/plugins/vmware/dbexts/models.py class NeutronNsxPortMapping(BASEV2): __tablename__ = 'neutron_nsx_port_mappings' neutron_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete="CASCADE"), primary_key=True) nsx_switch_id = sa.Column(sa.String(36)) nsx_port_id = sa.Column(sa.String(36), nullable=False) #neutron/plugins/vmware/dbexts/models.py class NeutronNsxRouterMapping(BASEV2): __tablename__ = 'neutron_nsx_router_mappings' neutron_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete='CASCADE'), primary_key=True) nsx_id = sa.Column(sa.String(36)) #neutron/plugins/vmware/dbexts/models.py class MultiProviderNetworks(BASEV2): __tablename__ = 'multi_provider_networks' network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), primary_key=True) #neutron/plugins/vmware/dbexts/models.py class NSXRouterExtAttributes(BASEV2): router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', ondelete="CASCADE"), primary_key=True) distributed = sa.Column(sa.Boolean, default=False, server_default=sa.sql.false(), nullable=False) service_router = sa.Column(sa.Boolean, default=False, server_default=sa.sql.false(), nullable=False) router = orm.relationship( Router, backref=orm.backref("nsx_attributes", lazy='joined', uselist=False, cascade='delete')) #neutron/plugins/vmware/dbexts/networkgw_db.py class NetworkConnection(BASEV2, HasTenant): network_gateway_id = sa.Column(sa.String(36), sa.ForeignKey('networkgateways.id', ondelete='CASCADE')) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete='CASCADE')) segmentation_type = sa.Column( sa.Enum('flat', 'vlan', name='networkconnections_segmentation_type')) segmentation_id = sa.Column(sa.Integer) __table_args__ = (sa.UniqueConstraint(network_gateway_id, segmentation_type, segmentation_id),) port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id', ondelete='CASCADE'), primary_key=True) #neutron/plugins/vmware/dbexts/networkgw_db.py class NetworkGatewayDeviceReference(BASEV2): id = sa.Column(sa.String(36), primary_key=True) network_gateway_id = sa.Column(sa.String(36), sa.ForeignKey('networkgateways.id', ondelete='CASCADE'), primary_key=True) interface_name = sa.Column(sa.String(64), primary_key=True) #neutron/plugins/vmware/dbexts/networkgw_db.py class NetworkGatewayDevice(BASEV2, HasId, HasTenant): nsx_id = sa.Column(sa.String(36)) # Optional name for the gateway device name = sa.Column(sa.String(255)) # Transport connector type. Not using enum as range of # connector types might vary with backend version connector_type = sa.Column(sa.String(10)) # Transport connector IP Address connector_ip = sa.Column(sa.String(64)) # operational status status = sa.Column(sa.String(16)) #neutron/plugins/vmware/dbexts/networkgw_db.py class NetworkGateway(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) # Tenant id is nullable for this resource tenant_id = sa.Column(sa.String(36)) default = sa.Column(sa.Boolean()) devices = orm.relationship(NetworkGatewayDeviceReference, backref='networkgateways', cascade='all,delete') network_connections = orm.relationship(NetworkConnection, lazy='joined') #neutron/plugins/vmware/dbexts/qos_db.py class QoSQueue(BASEV2, HasId, HasTenant): name = sa.Column(sa.String(255)) default = sa.Column(sa.Boolean, default=False, server_default=sa.sql.false()) min = sa.Column(sa.Integer, nullable=False) max = sa.Column(sa.Integer, nullable=True) qos_marking = sa.Column(sa.Enum('untrusted', 'trusted', name='qosqueues_qos_marking')) dscp = sa.Column(sa.Integer) #neutron/plugins/vmware/dbexts/qos_db.py class PortQueueMapping(BASEV2): port_id = sa.Column(sa.String(36), sa.ForeignKey("ports.id", ondelete="CASCADE"), primary_key=True) queue_id = sa.Column(sa.String(36), sa.ForeignKey("qosqueues.id"), primary_key=True) # Add a relationship to the Port model adding a backref which will # allow SQLAlchemy for eagerly load the queue binding port = orm.relationship( Port, backref=orm.backref("qos_queue", uselist=False, cascade='delete', lazy='joined')) #neutron/plugins/vmware/dbexts/qos_db.py class NetworkQueueMapping(BASEV2): network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id", ondelete="CASCADE"), primary_key=True) queue_id = sa.Column(sa.String(36), sa.ForeignKey("qosqueues.id", ondelete="CASCADE")) # Add a relationship to the Network model adding a backref which will # allow SQLAlcremy for eagerly load the queue binding network = orm.relationship( Network, backref=orm.backref("qos_queue", uselist=False, cascade='delete', lazy='joined')) #neutron/plugins/vmware/dbexts/vcns_models.py class VcnsRouterBinding(BASEV2, HasStatusDescription): __tablename__ = 'vcns_router_bindings' # no sa.ForeignKey to routers.id because for now, a router can be removed # from routers when delete_router is executed, but the binding is only # removed after the Edge is deleted router_id = sa.Column(sa.String(36), primary_key=True) edge_id = sa.Column(sa.String(16), nullable=True) lswitch_id = sa.Column(sa.String(36), nullable=False) #neutron/plugins/vmware/dbexts/vcns_models.py class VcnsEdgeFirewallRuleBinding(BASEV2): __tablename__ = 'vcns_firewall_rule_bindings' rule_id = sa.Column(sa.String(36), sa.ForeignKey("firewall_rules.id"), primary_key=True) edge_id = sa.Column(sa.String(36), primary_key=True) rule_vseid = sa.Column(sa.String(36)) #neutron/plugins/vmware/dbexts/vcns_models.py class VcnsEdgePoolBinding(BASEV2): __tablename__ = 'vcns_edge_pool_bindings' pool_id = sa.Column(sa.String(36), sa.ForeignKey("pools.id", ondelete="CASCADE"), primary_key=True) edge_id = sa.Column(sa.String(36), primary_key=True) pool_vseid = sa.Column(sa.String(36)) #neutron/plugins/vmware/dbexts/vcns_models.py class VcnsEdgeVipBinding(BASEV2): __tablename__ = 'vcns_edge_vip_bindings' vip_id = sa.Column(sa.String(36), sa.ForeignKey("vips.id", ondelete="CASCADE"), primary_key=True) edge_id = sa.Column(sa.String(36)) vip_vseid = sa.Column(sa.String(36)) app_profileid = sa.Column(sa.String(36)) #neutron/plugins/vmware/dbexts/vcns_models.py class VcnsEdgeMonitorBinding(BASEV2): __tablename__ = 'vcns_edge_monitor_bindings' monitor_id = sa.Column(sa.String(36), sa.ForeignKey("healthmonitors.id", ondelete="CASCADE"), primary_key=True) edge_id = sa.Column(sa.String(36), primary_key=True) monitor_vseid = sa.Column(sa.String(36)) #neutron/services/loadbalancer/agent_scheduler.py class PoolLoadbalancerAgentBinding(BASEV2): pool_id = sa.Column(sa.String(36), sa.ForeignKey("pools.id", ondelete='CASCADE'), primary_key=True) agent = orm.relation(Agent) agent_id = sa.Column(sa.String(36), sa.ForeignKey("agents.id", ondelete='CASCADE'), nullable=False) #neutron/services/loadbalancer/drivers/embrane/models.py class PoolPort(BASEV2): __tablename__ = 'embrane_pool_port' pool_id = sa.Column(sa.String(36), sa.ForeignKey('pools.id'), primary_key=True) port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id'), nullable=False) #neutron/services/vpn/service_drivers/cisco_csr_db.py class IdentifierMap(BASEV2, HasTenant): __tablename__ = 'cisco_csr_identifier_map' ipsec_site_conn_id = sa.Column(sa.String(64), sa.ForeignKey('ipsec_site_connections.id', ondelete="CASCADE"), primary_key=True) csr_tunnel_id = sa.Column(sa.Integer, nullable=False) csr_ike_policy_id = sa.Column(sa.Integer, nullable=False) csr_ipsec_policy_id = sa.Column(sa.Integer, nullable=False) def get_metadata(): return BASEV2.metadata