class BuildRequest(BASE): """Represents the information passed to the scheduler.""" __tablename__ = 'build_requests' __table_args__ = ( sa.Index('build_requests_instance_uuid_idx', 'instance_uuid'), sa.Index('build_requests_project_id_idx', 'project_id'), schema.UniqueConstraint('instance_uuid', name='uniq_build_requests0instance_uuid'), ) id = sa.Column(sa.Integer, primary_key=True) # TODO(mriedem): instance_uuid should be nullable=False instance_uuid = sa.Column(sa.String(36)) project_id = sa.Column(sa.String(255), nullable=False) instance = sa.Column(types.MediumText()) block_device_mappings = sa.Column(types.MediumText()) tags = sa.Column(sa.Text())
class InstanceFault(BASE, NovaBase, models.SoftDeleteMixin): __tablename__ = 'instance_faults' __table_args__ = ( sa.Index('instance_faults_host_idx', 'host'), sa.Index('instance_faults_instance_uuid_deleted_created_at_idx', 'instance_uuid', 'deleted', 'created_at')) id = sa.Column(sa.Integer, primary_key=True, nullable=False) instance_uuid = sa.Column(sa.String(36), sa.ForeignKey('instances.uuid')) code = sa.Column(sa.Integer(), nullable=False) message = sa.Column(sa.String(255)) details = sa.Column(types.MediumText()) host = sa.Column(sa.String(255))
class RequestSpec(BASE): """Represents the information passed to the scheduler.""" __tablename__ = 'request_specs' __table_args__ = ( sa.Index('request_spec_instance_uuid_idx', 'instance_uuid'), schema.UniqueConstraint('instance_uuid', name='uniq_request_specs0instance_uuid'), ) id = sa.Column(sa.Integer, primary_key=True) instance_uuid = sa.Column(sa.String(36), nullable=False) spec = sa.Column(types.MediumText(), nullable=False)
class InstanceInfoCache(BASE, NovaBase, models.SoftDeleteMixin): """Represents a cache of information about an instance """ __tablename__ = 'instance_info_caches' __table_args__ = (schema.UniqueConstraint( "instance_uuid", name="uniq_instance_info_caches0instance_uuid"), ) id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) # text column used for storing a json object of network data for api network_info = sa.Column(types.MediumText()) instance_uuid = sa.Column(sa.String(36), sa.ForeignKey('instances.uuid'), nullable=False) instance = orm.relationship(Instance, backref=orm.backref('info_cache', uselist=False), foreign_keys=instance_uuid, primaryjoin=instance_uuid == Instance.uuid)
class BlockDeviceMapping(BASE, NovaBase, models.SoftDeleteMixin): """Represents block device mapping that is defined by EC2.""" __tablename__ = "block_device_mapping" __table_args__ = ( sa.Index('snapshot_id', 'snapshot_id'), sa.Index('volume_id', 'volume_id'), sa.Index('block_device_mapping_instance_uuid_device_name_idx', 'instance_uuid', 'device_name'), sa.Index('block_device_mapping_instance_uuid_volume_id_idx', 'instance_uuid', 'volume_id'), sa.Index('block_device_mapping_instance_uuid_idx', 'instance_uuid'), schema.UniqueConstraint('uuid', name='uniq_block_device_mapping0uuid'), ) id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) instance_uuid = sa.Column(sa.String(36), sa.ForeignKey('instances.uuid')) # NOTE(mdbooth): The REST API for BDMs includes a UUID field. That uuid # refers to an image, volume, or snapshot which will be used in the # initialisation of the BDM. It is only relevant during the API call, and # is not persisted directly. This is the UUID of the BDM itself. # FIXME(danms): This should eventually be non-nullable, but we need a # transition period first. uuid = sa.Column(sa.String(36)) instance = orm.relationship(Instance, backref=orm.backref('block_device_mapping'), foreign_keys=instance_uuid, primaryjoin='and_(BlockDeviceMapping.' 'instance_uuid==' 'Instance.uuid,' 'BlockDeviceMapping.deleted==' '0)') source_type = sa.Column(sa.String(255)) destination_type = sa.Column(sa.String(255)) guest_format = sa.Column(sa.String(255)) device_type = sa.Column(sa.String(255)) disk_bus = sa.Column(sa.String(255)) boot_index = sa.Column(sa.Integer) device_name = sa.Column(sa.String(255)) # default=False for compatibility of the existing code. # With EC2 API, # default True for ami specified device. # default False for created with other timing. # TODO(sshturm) add default in db delete_on_termination = sa.Column(sa.Boolean, default=False) snapshot_id = sa.Column(sa.String(36)) volume_id = sa.Column(sa.String(36)) volume_size = sa.Column(sa.Integer) volume_type = sa.Column(sa.String(255)) image_id = sa.Column(sa.String(36)) # for no device to suppress devices. no_device = sa.Column(sa.Boolean) connection_info = sa.Column(types.MediumText()) tag = sa.Column(sa.String(255)) attachment_id = sa.Column(sa.String(36))
class Instance(BASE, NovaBase, models.SoftDeleteMixin): """Represents a guest VM.""" __tablename__ = 'instances' __table_args__ = ( sa.Index('uuid', 'uuid', unique=True), sa.Index('instances_project_id_idx', 'project_id'), sa.Index('instances_project_id_deleted_idx', 'project_id', 'deleted'), sa.Index('instances_reservation_id_idx', 'reservation_id'), sa.Index('instances_terminated_at_launched_at_idx', 'terminated_at', 'launched_at'), sa.Index('instances_uuid_deleted_idx', 'uuid', 'deleted'), sa.Index('instances_task_state_updated_at_idx', 'task_state', 'updated_at'), sa.Index('instances_host_node_deleted_idx', 'host', 'node', 'deleted'), sa.Index('instances_host_deleted_cleaned_idx', 'host', 'deleted', 'cleaned'), sa.Index('instances_deleted_created_at_idx', 'deleted', 'created_at'), sa.Index('instances_updated_at_project_id_idx', 'updated_at', 'project_id'), schema.UniqueConstraint('uuid', name='uniq_instances0uuid'), ) injected_files = [] id = sa.Column(sa.Integer, primary_key=True, autoincrement=True) @property def name(self): try: base_name = CONF.instance_name_template % self.id except TypeError: # Support templates like "uuid-%(uuid)s", etc. info = {} # NOTE(russellb): Don't use self.iteritems() here, as it will # result in infinite recursion on the name property. for column in iter(orm.object_mapper(self).columns): key = column.name # prevent recursion if someone specifies %(name)s # %(name)s will not be valid. if key == 'name': continue info[key] = self[key] try: base_name = CONF.instance_name_template % info except KeyError: base_name = self.uuid return base_name @property def _extra_keys(self): return ['name'] user_id = sa.Column(sa.String(255)) project_id = sa.Column(sa.String(255)) image_ref = sa.Column(sa.String(255)) kernel_id = sa.Column(sa.String(255)) ramdisk_id = sa.Column(sa.String(255)) hostname = sa.Column(sa.String(255)) launch_index = sa.Column(sa.Integer) key_name = sa.Column(sa.String(255)) key_data = sa.Column(types.MediumText()) power_state = sa.Column(sa.Integer) vm_state = sa.Column(sa.String(255)) task_state = sa.Column(sa.String(255)) memory_mb = sa.Column(sa.Integer) vcpus = sa.Column(sa.Integer) root_gb = sa.Column(sa.Integer) ephemeral_gb = sa.Column(sa.Integer) ephemeral_key_uuid = sa.Column(sa.String(36)) # This is not related to hostname, above. It refers # to the nova node. host = sa.Column(sa.String(255)) # To identify the "ComputeNode" which the instance resides in. # This equals to ComputeNode.hypervisor_hostname. node = sa.Column(sa.String(255)) # *not* flavorid, this is the internal primary_key instance_type_id = sa.Column(sa.Integer) user_data = sa.Column(types.MediumText()) reservation_id = sa.Column(sa.String(255)) launched_at = sa.Column(sa.DateTime) terminated_at = sa.Column(sa.DateTime) # This always refers to the availability_zone kwarg passed in /servers and # provided as an API option, not at all related to the host AZ the instance # belongs to. availability_zone = sa.Column(sa.String(255)) # User editable field for display in user-facing UIs display_name = sa.Column(sa.String(255)) display_description = sa.Column(sa.String(255)) # To remember on which host an instance booted. # An instance may have moved to another host by live migration. launched_on = sa.Column(types.MediumText()) # locked is superseded by locked_by and locked is not really # necessary but still used in API code so it remains. locked = sa.Column(sa.Boolean) locked_by = sa.Column(sa.Enum('owner', 'admin', name='instances0locked_by')) os_type = sa.Column(sa.String(255)) architecture = sa.Column(sa.String(255)) vm_mode = sa.Column(sa.String(255)) uuid = sa.Column(sa.String(36), nullable=False) root_device_name = sa.Column(sa.String(255)) default_ephemeral_device = sa.Column(sa.String(255)) default_swap_device = sa.Column(sa.String(255)) config_drive = sa.Column(sa.String(255)) # User editable field meant to represent what ip should be used # to connect to the instance access_ip_v4 = sa.Column(types.IPAddress()) access_ip_v6 = sa.Column(types.IPAddress()) auto_disk_config = sa.Column(sa.Boolean()) progress = sa.Column(sa.Integer) # EC2 instance_initiated_shutdown_terminate # True: -> 'terminate' # False: -> 'stop' # Note(maoy): currently Nova will always stop instead of terminate # no matter what the flag says. So we set the default to False. shutdown_terminate = sa.Column(sa.Boolean(), default=False) # EC2 disable_api_termination disable_terminate = sa.Column(sa.Boolean(), default=False) # OpenStack compute cell name. This will only be set at the top of # the cells tree and it'll be a full cell name such as 'api!hop1!hop2' # TODO(stephenfin): Remove this cell_name = sa.Column(sa.String(255)) # NOTE(pumaranikar): internal_id attribute is no longer used (bug 1441242) # Hence, removing from object layer in current release (Ocata) and will # treated as deprecated. The column can be removed from schema with # a migration at the start of next release. # internal_id = sa.Column(sa.Integer) # Records whether an instance has been deleted from disk cleaned = sa.Column(sa.Integer, default=0) hidden = sa.Column(sa.Boolean, default=False)
class ComputeNode(BASE, NovaBase, models.SoftDeleteMixin): """Represents a running compute service on a host.""" __tablename__ = 'compute_nodes' __table_args__ = ( sa.Index('compute_nodes_uuid_idx', 'uuid', unique=True), schema.UniqueConstraint( 'host', 'hypervisor_hostname', 'deleted', name="uniq_compute_nodes0host0hypervisor_hostname0deleted"), ) id = sa.Column(sa.Integer, primary_key=True) service_id = sa.Column(sa.Integer, nullable=True) # FIXME(sbauza: Host field is nullable because some old Juno compute nodes # can still report stats from an old ResourceTracker without setting this # field. # This field has to be set non-nullable in a later cycle (probably Lxxx) # once we are sure that all compute nodes in production report it. host = sa.Column(sa.String(255), nullable=True) uuid = sa.Column(sa.String(36), nullable=True) vcpus = sa.Column(sa.Integer, nullable=False) memory_mb = sa.Column(sa.Integer, nullable=False) local_gb = sa.Column(sa.Integer, nullable=False) vcpus_used = sa.Column(sa.Integer, nullable=False) memory_mb_used = sa.Column(sa.Integer, nullable=False) local_gb_used = sa.Column(sa.Integer, nullable=False) hypervisor_type = sa.Column(types.MediumText(), nullable=False) hypervisor_version = sa.Column(sa.Integer, nullable=False) hypervisor_hostname = sa.Column(sa.String(255)) # Free Ram, amount of activity (resize, migration, boot, etc) and # the number of running VM's are a good starting point for what's # important when making scheduling decisions. free_ram_mb = sa.Column(sa.Integer) free_disk_gb = sa.Column(sa.Integer) current_workload = sa.Column(sa.Integer) running_vms = sa.Column(sa.Integer) # Note(masumotok): Expected Strings example: # # '{"arch":"x86_64", # "model":"Nehalem", # "topology":{"sockets":1, "threads":2, "cores":3}, # "features":["tdtscp", "xtpr"]}' # # Points are "json translatable" and it must have all dictionary keys # above, since it is copied from <cpu> tag of getCapabilities() # (See libvirt.virtConnection). cpu_info = sa.Column(types.MediumText(), nullable=False) disk_available_least = sa.Column(sa.Integer) host_ip = sa.Column(types.IPAddress()) supported_instances = sa.Column(sa.Text) metrics = sa.Column(sa.Text) # Note(yongli): json string PCI Stats # '[{"vendor_id":"8086", "product_id":"1234", "count":3 }, ...]' pci_stats = sa.Column(sa.Text) # extra_resources is a json string containing arbitrary # data about additional resources. extra_resources = sa.Column(sa.Text) # json-encode string containing compute node statistics stats = sa.Column(sa.Text, default='{}') # json-encoded dict that contains NUMA topology as generated by # objects.NUMATopology._to_json() numa_topology = sa.Column(sa.Text) # allocation ratios provided by the RT ram_allocation_ratio = sa.Column(sa.Float, nullable=True) cpu_allocation_ratio = sa.Column(sa.Float, nullable=True) disk_allocation_ratio = sa.Column(sa.Float, nullable=True) mapped = sa.Column(sa.Integer, nullable=True, default=0)
def upgrade(migrate_engine): meta = sa.MetaData() meta.bind = migrate_engine cell_mappings = sa.Table( 'cell_mappings', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('name', sa.String(length=255)), sa.Column('transport_url', sa.Text()), sa.Column('database_connection', sa.Text()), # NOTE(stephenfin): These were originally added by sqlalchemy-migrate # which did not generate the constraints sa.Column('disabled', sa.Boolean(create_constraint=False), default=False), UniqueConstraint('uuid', name='uniq_cell_mappings0uuid'), sa.Index('uuid_idx', 'uuid'), mysql_engine='InnoDB', mysql_charset='utf8') host_mappings = sa.Table('host_mappings', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('cell_id', sa.Integer, nullable=False), sa.Column('host', sa.String(length=255), nullable=False), UniqueConstraint('host', name='uniq_host_mappings0host'), sa.Index('host_idx', 'host'), ForeignKeyConstraint( columns=['cell_id'], refcolumns=[cell_mappings.c.id]), mysql_engine='InnoDB', mysql_charset='utf8') instance_mappings = sa.Table( 'instance_mappings', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('instance_uuid', sa.String(length=36), nullable=False), sa.Column('cell_id', sa.Integer, nullable=True), sa.Column('project_id', sa.String(length=255), nullable=False), # NOTE(stephenfin): These were originally added by sqlalchemy-migrate # which did not generate the constraints sa.Column('queued_for_delete', sa.Boolean(create_constraint=False), default=False), sa.Column('user_id', sa.String(length=255), nullable=True), UniqueConstraint('instance_uuid', name='uniq_instance_mappings0instance_uuid'), sa.Index('instance_uuid_idx', 'instance_uuid'), sa.Index('project_id_idx', 'project_id'), sa.Index('instance_mappings_user_id_project_id_idx', 'user_id', 'project_id'), ForeignKeyConstraint(columns=['cell_id'], refcolumns=[cell_mappings.c.id]), mysql_engine='InnoDB', mysql_charset='utf8') flavors = sa.Table('flavors', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('memory_mb', sa.Integer, nullable=False), sa.Column('vcpus', sa.Integer, nullable=False), sa.Column('swap', sa.Integer, nullable=False), sa.Column('vcpu_weight', sa.Integer), sa.Column('flavorid', sa.String(length=255), nullable=False), sa.Column('rxtx_factor', sa.Float), sa.Column('root_gb', sa.Integer), sa.Column('ephemeral_gb', sa.Integer), sa.Column('disabled', sa.Boolean), sa.Column('is_public', sa.Boolean), sa.Column('description', sa.Text()), UniqueConstraint('flavorid', name='uniq_flavors0flavorid'), UniqueConstraint('name', name='uniq_flavors0name'), mysql_engine='InnoDB', mysql_charset='utf8') flavor_extra_specs = sa.Table( 'flavor_extra_specs', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('flavor_id', sa.Integer, nullable=False), sa.Column('key', sa.String(length=255), nullable=False), sa.Column('value', sa.String(length=255)), UniqueConstraint('flavor_id', 'key', name='uniq_flavor_extra_specs0flavor_id0key'), sa.Index('flavor_extra_specs_flavor_id_key_idx', 'flavor_id', 'key'), ForeignKeyConstraint(columns=['flavor_id'], refcolumns=[flavors.c.id]), mysql_engine='InnoDB', mysql_charset='utf8') flavor_projects = sa.Table( 'flavor_projects', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('flavor_id', sa.Integer, nullable=False), sa.Column('project_id', sa.String(length=255), nullable=False), UniqueConstraint('flavor_id', 'project_id', name='uniq_flavor_projects0flavor_id0project_id'), ForeignKeyConstraint(columns=['flavor_id'], refcolumns=[flavors.c.id]), mysql_engine='InnoDB', mysql_charset='utf8') request_specs = sa.Table( 'request_specs', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('instance_uuid', sa.String(36), nullable=False), sa.Column('spec', types.MediumText(), nullable=False), UniqueConstraint('instance_uuid', name='uniq_request_specs0instance_uuid'), sa.Index('request_spec_instance_uuid_idx', 'instance_uuid'), mysql_engine='InnoDB', mysql_charset='utf8') build_requests = sa.Table( 'build_requests', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('request_spec_id', sa.Integer, nullable=True), sa.Column('project_id', sa.String(length=255), nullable=False), sa.Column('user_id', sa.String(length=255), nullable=True), sa.Column('display_name', sa.String(length=255)), sa.Column('instance_metadata', sa.Text), sa.Column('progress', sa.Integer), sa.Column('vm_state', sa.String(length=255)), sa.Column('task_state', sa.String(length=255)), sa.Column('image_ref', sa.String(length=255)), sa.Column('access_ip_v4', InetSmall()), sa.Column('access_ip_v6', InetSmall()), sa.Column('info_cache', sa.Text), sa.Column('security_groups', sa.Text, nullable=True), sa.Column('config_drive', sa.Boolean, default=False, nullable=True), sa.Column('key_name', sa.String(length=255)), sa.Column('locked_by', sa.Enum('owner', 'admin', name='build_requests0locked_by')), sa.Column('instance_uuid', sa.String(length=36)), sa.Column('instance', types.MediumText()), sa.Column('block_device_mappings', types.MediumText()), sa.Column('tags', sa.Text()), UniqueConstraint('instance_uuid', name='uniq_build_requests0instance_uuid'), sa.Index('build_requests_project_id_idx', 'project_id'), sa.Index('build_requests_instance_uuid_idx', 'instance_uuid'), mysql_engine='InnoDB', mysql_charset='utf8') keypairs = sa.Table('key_pairs', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('name', sa.String(255), nullable=False), sa.Column('user_id', sa.String(255), nullable=False), sa.Column('fingerprint', sa.String(255)), sa.Column('public_key', sa.Text()), sa.Column('type', sa.Enum('ssh', 'x509', metadata=meta, name='keypair_types'), nullable=False, server_default=keypair.KEYPAIR_TYPE_SSH), UniqueConstraint('user_id', 'name', name='uniq_key_pairs0user_id0name'), mysql_engine='InnoDB', mysql_charset='utf8') projects = sa.Table( 'projects', meta, sa.Column('id', sa.Integer, primary_key=True, nullable=False, autoincrement=True), sa.Column('external_id', sa.String(length=255), nullable=False), sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), UniqueConstraint('external_id', name='uniq_projects0external_id'), mysql_engine='InnoDB', mysql_charset='latin1', ) users = sa.Table( 'users', meta, sa.Column('id', sa.Integer, primary_key=True, nullable=False, autoincrement=True), sa.Column('external_id', sa.String(length=255), nullable=False), sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), UniqueConstraint('external_id', name='uniq_users0external_id'), mysql_engine='InnoDB', mysql_charset='latin1', ) resource_classes = sa.Table('resource_classes', meta, sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('name', sa.String(length=255), nullable=False), sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), UniqueConstraint( 'name', name='uniq_resource_classes0name'), mysql_engine='InnoDB', mysql_charset='latin1') nameargs = {} if migrate_engine.name == 'mysql': nameargs['collation'] = 'utf8_bin' resource_providers = sa.Table( 'resource_providers', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(36), nullable=False), sa.Column('name', sa.Unicode(200, **nameargs), nullable=True), sa.Column('generation', sa.Integer, default=0), sa.Column('can_host', sa.Integer, default=0), sa.Column('root_provider_id', sa.Integer, sa.ForeignKey('resource_providers.id')), sa.Column('parent_provider_id', sa.Integer, sa.ForeignKey('resource_providers.id')), UniqueConstraint('uuid', name='uniq_resource_providers0uuid'), UniqueConstraint('name', name='uniq_resource_providers0name'), sa.Index('resource_providers_name_idx', 'name'), sa.Index('resource_providers_uuid_idx', 'uuid'), sa.Index('resource_providers_root_provider_id_idx', 'root_provider_id'), sa.Index('resource_providers_parent_provider_id_idx', 'parent_provider_id'), mysql_engine='InnoDB', mysql_charset='latin1') inventories = sa.Table( 'inventories', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('resource_provider_id', sa.Integer, nullable=False), sa.Column('resource_class_id', sa.Integer, nullable=False), sa.Column('total', sa.Integer, nullable=False), sa.Column('reserved', sa.Integer, nullable=False), sa.Column('min_unit', sa.Integer, nullable=False), sa.Column('max_unit', sa.Integer, nullable=False), sa.Column('step_size', sa.Integer, nullable=False), sa.Column('allocation_ratio', sa.Float, nullable=False), sa.Index('inventories_resource_provider_id_idx', 'resource_provider_id'), sa.Index('inventories_resource_provider_resource_class_idx', 'resource_provider_id', 'resource_class_id'), sa.Index('inventories_resource_class_id_idx', 'resource_class_id'), UniqueConstraint( 'resource_provider_id', 'resource_class_id', name='uniq_inventories0resource_provider_resource_class'), mysql_engine='InnoDB', mysql_charset='latin1') traits = sa.Table( 'traits', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False, autoincrement=True), sa.Column('name', sa.Unicode(255, **nameargs), nullable=False), UniqueConstraint('name', name='uniq_traits0name'), mysql_engine='InnoDB', mysql_charset='latin1', ) allocations = sa.Table( 'allocations', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('resource_provider_id', sa.Integer, nullable=False), sa.Column('consumer_id', sa.String(36), nullable=False), sa.Column('resource_class_id', sa.Integer, nullable=False), sa.Column('used', sa.Integer, nullable=False), sa.Index('allocations_resource_provider_class_used_idx', 'resource_provider_id', 'resource_class_id', 'used'), sa.Index('allocations_resource_class_id_idx', 'resource_class_id'), sa.Index('allocations_consumer_id_idx', 'consumer_id'), mysql_engine='InnoDB', mysql_charset='latin1') consumers = sa.Table( 'consumers', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False, autoincrement=True), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('project_id', sa.Integer, nullable=False), sa.Column('user_id', sa.Integer, nullable=False), sa.Column('generation', sa.Integer, default=0, server_default=sa.text('0'), nullable=False), sa.Index('consumers_project_id_uuid_idx', 'project_id', 'uuid'), sa.Index('consumers_project_id_user_id_uuid_idx', 'project_id', 'user_id', 'uuid'), UniqueConstraint('uuid', name='uniq_consumers0uuid'), mysql_engine='InnoDB', mysql_charset='latin1', ) resource_provider_aggregates = sa.Table( 'resource_provider_aggregates', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('resource_provider_id', sa.Integer, primary_key=True, nullable=False), sa.Column('aggregate_id', sa.Integer, primary_key=True, nullable=False), sa.Index('resource_provider_aggregates_aggregate_id_idx', 'aggregate_id'), mysql_engine='InnoDB', mysql_charset='latin1') resource_provider_traits = sa.Table( 'resource_provider_traits', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('trait_id', sa.Integer, sa.ForeignKey('traits.id'), primary_key=True, nullable=False), sa.Column('resource_provider_id', sa.Integer, primary_key=True, nullable=False), sa.Index('resource_provider_traits_resource_provider_trait_idx', 'resource_provider_id', 'trait_id'), ForeignKeyConstraint(columns=['resource_provider_id'], refcolumns=[resource_providers.c.id]), mysql_engine='InnoDB', mysql_charset='latin1', ) placement_aggregates = sa.Table('placement_aggregates', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), index=True), UniqueConstraint( 'uuid', name='uniq_placement_aggregates0uuid'), mysql_engine='InnoDB', mysql_charset='latin1') aggregates = sa.Table('aggregates', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36)), sa.Column('name', sa.String(length=255)), sa.Index('aggregate_uuid_idx', 'uuid'), UniqueConstraint('name', name='uniq_aggregate0name'), mysql_engine='InnoDB', mysql_charset='utf8') aggregate_hosts = sa.Table( 'aggregate_hosts', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('host', sa.String(length=255)), sa.Column('aggregate_id', sa.Integer, sa.ForeignKey('aggregates.id'), nullable=False), UniqueConstraint('host', 'aggregate_id', name='uniq_aggregate_hosts0host0aggregate_id'), mysql_engine='InnoDB', mysql_charset='utf8') aggregate_metadata = sa.Table( 'aggregate_metadata', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('aggregate_id', sa.Integer, sa.ForeignKey('aggregates.id'), nullable=False), sa.Column('key', sa.String(length=255), nullable=False), sa.Column('value', sa.String(length=255), nullable=False), UniqueConstraint('aggregate_id', 'key', name='uniq_aggregate_metadata0aggregate_id0key'), sa.Index('aggregate_metadata_key_idx', 'key'), mysql_engine='InnoDB', mysql_charset='utf8') groups = sa.Table( 'instance_groups', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('user_id', sa.String(length=255)), sa.Column('project_id', sa.String(length=255)), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('name', sa.String(length=255)), UniqueConstraint('uuid', name='uniq_instance_groups0uuid'), mysql_engine='InnoDB', mysql_charset='utf8', ) group_policy = sa.Table( 'instance_group_policy', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('policy', sa.String(length=255)), sa.Column('group_id', sa.Integer, sa.ForeignKey('instance_groups.id'), nullable=False), sa.Column('rules', sa.Text), sa.Index('instance_group_policy_policy_idx', 'policy'), mysql_engine='InnoDB', mysql_charset='utf8', ) group_member = sa.Table( 'instance_group_member', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('instance_uuid', sa.String(length=255)), sa.Column('group_id', sa.Integer, sa.ForeignKey('instance_groups.id'), nullable=False), sa.Index('instance_group_member_instance_idx', 'instance_uuid'), mysql_engine='InnoDB', mysql_charset='utf8', ) quota_classes = sa.Table( 'quota_classes', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('class_name', sa.String(length=255)), sa.Column('resource', sa.String(length=255)), sa.Column('hard_limit', sa.Integer), sa.Index('quota_classes_class_name_idx', 'class_name'), mysql_engine='InnoDB', mysql_charset='utf8', ) quota_usages = sa.Table( 'quota_usages', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('project_id', sa.String(length=255)), sa.Column('resource', sa.String(length=255), nullable=False), sa.Column('in_use', sa.Integer, nullable=False), sa.Column('reserved', sa.Integer, nullable=False), sa.Column('until_refresh', sa.Integer), sa.Column('user_id', sa.String(length=255)), sa.Index('quota_usages_project_id_idx', 'project_id'), sa.Index('quota_usages_user_id_idx', 'user_id'), mysql_engine='InnoDB', mysql_charset='utf8', ) quotas = sa.Table( 'quotas', meta, sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('project_id', sa.String(length=255)), sa.Column('resource', sa.String(length=255), nullable=False), sa.Column('hard_limit', sa.Integer), UniqueConstraint('project_id', 'resource', name='uniq_quotas0project_id0resource'), mysql_engine='InnoDB', mysql_charset='utf8', ) project_user_quotas = sa.Table( 'project_user_quotas', meta, sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('user_id', sa.String(length=255), nullable=False), sa.Column('project_id', sa.String(length=255), nullable=False), sa.Column('resource', sa.String(length=255), nullable=False), sa.Column('hard_limit', sa.Integer, nullable=True), UniqueConstraint( 'user_id', 'project_id', 'resource', name='uniq_project_user_quotas0user_id0project_id0resource'), sa.Index('project_user_quotas_project_id_idx', 'project_id'), sa.Index('project_user_quotas_user_id_idx', 'user_id'), mysql_engine='InnoDB', mysql_charset='utf8', ) reservations = sa.Table( 'reservations', meta, sa.Column('created_at', sa.DateTime), sa.Column('updated_at', sa.DateTime), sa.Column('id', sa.Integer, primary_key=True, nullable=False), sa.Column('uuid', sa.String(length=36), nullable=False), sa.Column('usage_id', sa.Integer, sa.ForeignKey('quota_usages.id'), nullable=False), sa.Column('project_id', sa.String(length=255)), sa.Column('resource', sa.String(length=255)), sa.Column('delta', sa.Integer, nullable=False), sa.Column('expire', sa.DateTime), sa.Column('user_id', sa.String(length=255)), sa.Index('reservations_project_id_idx', 'project_id'), sa.Index('reservations_uuid_idx', 'uuid'), sa.Index('reservations_expire_idx', 'expire'), sa.Index('reservations_user_id_idx', 'user_id'), mysql_engine='InnoDB', mysql_charset='utf8', ) tables = [ cell_mappings, host_mappings, instance_mappings, flavors, flavor_extra_specs, flavor_projects, request_specs, build_requests, keypairs, projects, users, resource_classes, resource_providers, inventories, traits, allocations, consumers, resource_provider_aggregates, resource_provider_traits, placement_aggregates, aggregates, aggregate_hosts, aggregate_metadata, groups, group_policy, group_member, quota_classes, quota_usages, quotas, project_user_quotas, reservations, ] for table in tables: table.create(checkfirst=True)