db: Remove nova-network models

There are a number of nova-network tables which we can now drop.

nova-network
  Feature removed entirely in Ussuri.

  - dns_domains
  - fixed_ips
  - floating_ips
  - networks
  - provider_fw_rules
  - security_group_default_rules

Unfortunately we can't get rid of the security group-related entries due
to the unfortunate presence of the 'security_groups' attribute on the
'Instance' object and corresponding table, which in turn brings in a
load of other tables. We'll address that separately. For now, just drop
what we can easily drop.

Change-Id: I8858faa14119f4daa9630b0ff6dcf082d0ff8fba
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane 2021-09-28 17:33:00 +01:00
parent 0a213019d2
commit 7f4c7bfcc1
3 changed files with 17 additions and 197 deletions

View File

@ -88,6 +88,15 @@ REMOVED_TABLES = {
# in Y and the table can be dropped in Z or later
'snapshot_id_mappings',
'volume_id_mappings',
# Tables for the removed nova-network feature. The models were
# removed in Y and the tables can be dropped in Z or later
'dns_domains',
'fixed_ips',
'floating_ips',
'networks',
'provider_fw_rules',
'security_group_default_rules',
}
# we don't configure 'cls' since we have models that don't use the
@ -646,6 +655,8 @@ class BlockDeviceMapping(BASE, NovaBase, models.SoftDeleteMixin):
attachment_id = sa.Column(sa.String(36))
# TODO(stephenfin): Remove once we drop the security_groups field from the
# Instance table. Until then, this is tied to the SecurityGroup table
class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):
__tablename__ = 'security_group_instance_association'
__table_args__ = (
@ -658,6 +669,8 @@ class SecurityGroupInstanceAssociation(BASE, NovaBase, models.SoftDeleteMixin):
instance_uuid = sa.Column(sa.String(36), sa.ForeignKey('instances.uuid'))
# TODO(stephenfin): Remove once we drop the security_groups field from the
# Instance table
class SecurityGroup(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a security group."""
__tablename__ = 'security_groups'
@ -689,8 +702,8 @@ class SecurityGroup(BASE, NovaBase, models.SoftDeleteMixin):
backref='security_groups')
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
# TODO(stephenfin): Remove once we drop the security_groups field from the
# Instance table. Until then, this is tied to the SecurityGroup table
class SecurityGroupIngressRule(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a rule in a security group."""
__tablename__ = 'security_group_rules'
@ -720,32 +733,6 @@ class SecurityGroupIngressRule(BASE, NovaBase, models.SoftDeleteMixin):
'SecurityGroupIngressRule.deleted == 0)')
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
class SecurityGroupIngressDefaultRule(BASE, NovaBase, models.SoftDeleteMixin):
__tablename__ = 'security_group_default_rules'
__table_args__ = ()
id = sa.Column(sa.Integer, primary_key=True, nullable=False)
protocol = sa.Column(sa.String(5)) # "tcp", "udp" or "icmp"
from_port = sa.Column(sa.Integer)
to_port = sa.Column(sa.Integer)
cidr = sa.Column(types.CIDR())
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
class ProviderFirewallRule(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a rule in a security group."""
__tablename__ = 'provider_fw_rules'
__table_args__ = ()
id = sa.Column(sa.Integer, primary_key=True, nullable=False)
protocol = sa.Column(sa.String(5)) # "tcp", "udp", or "icmp"
from_port = sa.Column(sa.Integer)
to_port = sa.Column(sa.Integer)
cidr = sa.Column(types.CIDR())
class Migration(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a running host-to-host migration."""
__tablename__ = 'migrations'
@ -794,60 +781,6 @@ class Migration(BASE, NovaBase, models.SoftDeleteMixin):
'0)')
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
class Network(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a network."""
__tablename__ = 'networks'
__table_args__ = (
schema.UniqueConstraint("vlan", "deleted",
name="uniq_networks0vlan0deleted"),
sa.Index('networks_bridge_deleted_idx', 'bridge', 'deleted'),
sa.Index('networks_host_idx', 'host'),
sa.Index('networks_project_id_deleted_idx', 'project_id', 'deleted'),
sa.Index('networks_uuid_project_id_deleted_idx', 'uuid',
'project_id', 'deleted'),
sa.Index('networks_vlan_deleted_idx', 'vlan', 'deleted'),
sa.Index('networks_cidr_v6_idx', 'cidr_v6')
)
id = sa.Column(sa.Integer, primary_key=True, nullable=False)
label = sa.Column(sa.String(255))
injected = sa.Column(sa.Boolean, default=False)
cidr = sa.Column(types.CIDR())
cidr_v6 = sa.Column(types.CIDR())
multi_host = sa.Column(sa.Boolean, default=False)
gateway_v6 = sa.Column(types.IPAddress())
netmask_v6 = sa.Column(types.IPAddress())
netmask = sa.Column(types.IPAddress())
bridge = sa.Column(sa.String(255))
bridge_interface = sa.Column(sa.String(255))
gateway = sa.Column(types.IPAddress())
broadcast = sa.Column(types.IPAddress())
dns1 = sa.Column(types.IPAddress())
dns2 = sa.Column(types.IPAddress())
vlan = sa.Column(sa.Integer)
vpn_public_address = sa.Column(types.IPAddress())
vpn_public_port = sa.Column(sa.Integer)
vpn_private_address = sa.Column(types.IPAddress())
dhcp_start = sa.Column(types.IPAddress())
rxtx_base = sa.Column(sa.Integer)
project_id = sa.Column(sa.String(255))
priority = sa.Column(sa.Integer)
host = sa.Column(sa.String(255))
uuid = sa.Column(sa.String(36))
mtu = sa.Column(sa.Integer)
dhcp_server = sa.Column(types.IPAddress())
enable_dhcp = sa.Column(sa.Boolean, default=True)
share_address = sa.Column(sa.Boolean, default=False)
class VirtualInterface(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a virtual interface on an instance."""
__tablename__ = 'virtual_interfaces'
@ -866,114 +799,6 @@ class VirtualInterface(BASE, NovaBase, models.SoftDeleteMixin):
tag = sa.Column(sa.String(255))
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
class FixedIp(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a fixed IP for an instance."""
__tablename__ = 'fixed_ips'
__table_args__ = (
schema.UniqueConstraint(
"address", "deleted", name="uniq_fixed_ips0address0deleted"),
sa.Index(
'fixed_ips_virtual_interface_id_fkey', 'virtual_interface_id'),
sa.Index('network_id', 'network_id'),
sa.Index('address', 'address'),
sa.Index('fixed_ips_instance_uuid_fkey', 'instance_uuid'),
sa.Index('fixed_ips_host_idx', 'host'),
sa.Index('fixed_ips_network_id_host_deleted_idx', 'network_id', 'host',
'deleted'),
sa.Index('fixed_ips_address_reserved_network_id_deleted_idx',
'address', 'reserved', 'network_id', 'deleted'),
sa.Index('fixed_ips_deleted_allocated_idx', 'address', 'deleted',
'allocated'),
sa.Index('fixed_ips_deleted_allocated_updated_at_idx', 'deleted',
'allocated', 'updated_at')
)
id = sa.Column(sa.Integer, primary_key=True)
address = sa.Column(types.IPAddress())
network_id = sa.Column(sa.Integer)
virtual_interface_id = sa.Column(sa.Integer)
instance_uuid = sa.Column(sa.String(36), sa.ForeignKey('instances.uuid'))
# associated means that a fixed_ip has its instance_id column set
# allocated means that a fixed_ip has its virtual_interface_id column set
# TODO(sshturm) add default in db
allocated = sa.Column(sa.Boolean, default=False)
# leased means dhcp bridge has leased the ip
# TODO(sshturm) add default in db
leased = sa.Column(sa.Boolean, default=False)
# TODO(sshturm) add default in db
reserved = sa.Column(sa.Boolean, default=False)
host = sa.Column(sa.String(255))
network = orm.relationship(Network,
backref=orm.backref('fixed_ips'),
foreign_keys=network_id,
primaryjoin='and_('
'FixedIp.network_id == Network.id,'
'FixedIp.deleted == 0,'
'Network.deleted == 0)')
instance = orm.relationship(Instance,
foreign_keys=instance_uuid,
primaryjoin='and_('
'FixedIp.instance_uuid == Instance.uuid,'
'FixedIp.deleted == 0,'
'Instance.deleted == 0)')
virtual_interface = orm.relationship(VirtualInterface,
backref=orm.backref('fixed_ips'),
foreign_keys=virtual_interface_id,
primaryjoin='and_('
'FixedIp.virtual_interface_id == '
'VirtualInterface.id,'
'FixedIp.deleted == 0,'
'VirtualInterface.deleted == 0)')
# TODO(stephenfin): Remove this in the V release or later, once we're sure we
# won't want it back (it's for nova-network, so we won't)
class FloatingIp(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a floating IP that dynamically forwards to a fixed IP."""
__tablename__ = 'floating_ips'
__table_args__ = (
schema.UniqueConstraint("address", "deleted",
name="uniq_floating_ips0address0deleted"),
sa.Index('fixed_ip_id', 'fixed_ip_id'),
sa.Index('floating_ips_host_idx', 'host'),
sa.Index('floating_ips_project_id_idx', 'project_id'),
sa.Index('floating_ips_pool_deleted_fixed_ip_id_project_id_idx',
'pool', 'deleted', 'fixed_ip_id', 'project_id')
)
id = sa.Column(sa.Integer, primary_key=True)
address = sa.Column(types.IPAddress())
fixed_ip_id = sa.Column(sa.Integer)
project_id = sa.Column(sa.String(255))
host = sa.Column(sa.String(255))
auto_assigned = sa.Column(sa.Boolean, default=False)
# TODO(sshturm) add default in db
pool = sa.Column(sa.String(255))
interface = sa.Column(sa.String(255))
fixed_ip = orm.relationship(FixedIp,
backref=orm.backref('floating_ips'),
foreign_keys=fixed_ip_id,
primaryjoin='and_('
'FloatingIp.fixed_ip_id == FixedIp.id,'
'FloatingIp.deleted == 0,'
'FixedIp.deleted == 0)')
# TODO(stephenfin): Remove in V or later
class DNSDomain(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a DNS domain with availability zone or project info."""
__tablename__ = 'dns_domains'
__table_args__ = (
sa.Index('dns_domains_project_id_idx', 'project_id'),
sa.Index('dns_domains_domain_deleted_idx', 'domain', 'deleted'),
)
deleted = sa.Column(sa.Boolean, default=False)
domain = sa.Column(sa.String(255), primary_key=True)
scope = sa.Column(sa.String(255))
availability_zone = sa.Column(sa.String(255))
project_id = sa.Column(sa.String(255))
class InstanceMetadata(BASE, NovaBase, models.SoftDeleteMixin):
"""Represents a user-provided metadata key/value pair for an instance."""
__tablename__ = 'instance_metadata'

View File

@ -186,7 +186,8 @@ class Instance(base.NovaPersistentObject, base.NovaObject,
'shutdown_terminate': fields.BooleanField(default=False),
'disable_terminate': fields.BooleanField(default=False),
# TODO(stephenfin): Remove this in version 3.0 of the object
# TODO(stephenfin): Remove this in version 3.0 of the object as it's
# related to cells v1
'cell_name': fields.StringField(nullable=True),
'metadata': fields.DictOfStringsField(),

View File

@ -25,9 +25,6 @@ class TestSoftDeletesDeprecated(test.NoDBTestCase):
'block_device_mapping',
'certificates',
'compute_nodes',
'dns_domains',
'fixed_ips',
'floating_ips',
'instance_actions',
'instance_actions_events',
'instance_extra',
@ -38,16 +35,13 @@ class TestSoftDeletesDeprecated(test.NoDBTestCase):
'instance_system_metadata',
'instances',
'migrations',
'networks',
'pci_devices',
'project_user_quotas',
'provider_fw_rules',
'quota_classes',
'quota_usages',
'quotas',
'reservations',
's3_images',
'security_group_default_rules',
'security_group_instance_association',
'security_group_rules',
'security_groups',