class NodeGroup(Base): """Represents a NodeGroup.""" __tablename__ = 'nodegroup' __table_args__ = (schema.UniqueConstraint('uuid', name='uniq_nodegroup0uuid'), schema.UniqueConstraint( 'cluster_id', 'name', name='uniq_nodegroup0cluster_id0name'), table_args()) id = Column(Integer, primary_key=True) uuid = Column(String(36)) name = Column(String(255)) cluster_id = Column(String(255)) project_id = Column(String(255)) docker_volume_size = Column(Integer(), nullable=True) labels = Column(JSONEncodedDict, nullable=True) flavor_id = Column(String(255), nullable=True) image_id = Column(String(255), nullable=True) node_addresses = Column(JSONEncodedList, nullable=True) node_count = Column(Integer()) role = Column(String(255)) # NOTE(ttsiouts) We have to define the min and # max number of nodes for each nodegroup max_node_count = Column(Integer()) min_node_count = Column(Integer()) is_default = Column(Boolean, default=False) stack_id = Column(String(255)) status = Column(String(20)) status_reason = Column(Text) version = Column(String(20))
def upgrade(): op.create_table( 'agents', sa.Column('id', sa.String(length=36), nullable=False), sa.Column('agent_type', String(255, mysql_ndb_length=128), nullable=False), sa.Column('binary', String(255, mysql_ndb_type=TINYTEXT), nullable=False), sa.Column('topic', String(255, mysql_ndb_type=TINYTEXT), nullable=False), sa.Column('host', sa.String(length=255), nullable=False), sa.Column('admin_state_up', sa.Boolean(), nullable=False, server_default=sa.sql.true()), sa.Column('created_at', sa.DateTime(), nullable=False), sa.Column('started_at', sa.DateTime(), nullable=False), sa.Column('heartbeat_timestamp', sa.DateTime(), nullable=False), sa.Column('description', sa.String(length=255), nullable=True), sa.Column('configurations', String(4095, mysql_ndb_type=TEXT), nullable=False), sa.Column('load', sa.Integer(), server_default='0', nullable=False), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('agent_type', 'host', name='uniq_agents0agent_type0host'))
def upgrade(): op.add_column( 'baymodel', sa.Column('coe', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) baymodel = sa.sql.table( 'baymodel', sa.sql.column('coe', String(255, mysql_ndb_type=TINYTEXT))) op.execute(baymodel.update().values( {'coe': op.inline_literal("kubernetes")}))
class Quota(Base): """Represents Quota for a resource within a project""" __tablename__ = 'quotas' __table_args__ = (schema.UniqueConstraint( "project_id", "resource", name='uniq_quotas0project_id0resource'), table_args()) id = Column(Integer, primary_key=True) project_id = Column(String(255)) resource = Column(String(255)) hard_limit = Column(Integer())
def upgrade(): op.add_column('cluster', sa.Column('fixed_network', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column('cluster', sa.Column('fixed_subnet', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column('cluster', sa.Column('floating_ip_enabled', sa.Boolean(), default=False))
def upgrade(): op.add_column('baymodel', sa.Column('http_proxy', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column('baymodel', sa.Column('https_proxy', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column('baymodel', sa.Column('no_proxy', String(255, mysql_ndb_type=TINYTEXT), nullable=True))
def upgrade(): op.add_column( 'bay', sa.Column('coe_version', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column( 'bay', sa.Column('container_version', String(255, mysql_ndb_type=TINYTEXT), nullable=True))
def upgrade(): op.add_column( 'cluster', sa.Column('etcd_ca_cert_ref', String(512, mysql_ndb_type=TEXT), nullable=True)) op.add_column( 'cluster', sa.Column('front_proxy_ca_cert_ref', String(512, mysql_ndb_type=TEXT), nullable=True))
def upgrade(): op.alter_column('bay', 'ca_cert_uuid', new_column_name='ca_cert_ref', existing_type=sa.String(length=36), type_=String(512, mysql_ndb_type=TEXT), nullable=True) op.alter_column('bay', 'magnum_cert_uuid', new_column_name='magnum_cert_ref', existing_type=sa.String(length=36), type_=String(512, mysql_ndb_type=TEXT), nullable=True)
class X509KeyPair(Base): """X509KeyPair""" __tablename__ = 'x509keypair' __table_args__ = (schema.UniqueConstraint('uuid', name='uniq_x509keypair0uuid'), table_args()) id = Column(Integer, primary_key=True) uuid = Column(String(36)) certificate = Column(Text()) private_key = Column(Text()) private_key_passphrase = Column(Text()) intermediates = Column(Text()) project_id = Column(String(255)) user_id = Column(String(255))
class DigitalService(Base): """Represents health status of various digital services""" __tablename__ = 'digital_service' __table_args__ = (schema.UniqueConstraint( "host", "binary", name="uniq_digital_service0host0binary"), table_args()) id = Column(Integer, primary_key=True) host = Column(String(255)) binary = Column(String(255)) disabled = Column(Boolean, default=False) disabled_reason = Column(String(255)) last_seen_up = Column(DateTime, nullable=True) forced_down = Column(Boolean, default=False) report_count = Column(Integer, nullable=False, default=0)
def upgrade(): op.add_column('nodegroup', sa.Column('stack_id', String(255))) op.add_column('nodegroup', sa.Column('status', String(20))) op.add_column('nodegroup', sa.Column('status_reason', sa.Text())) op.add_column('nodegroup', sa.Column('version', String(20))) # Populate existing nodegroups with the cluster stack_id connection = op.get_bind() connection.execute( "UPDATE nodegroup " "INNER JOIN cluster ON nodegroup.cluster_id=cluster.uuid " "SET nodegroup.stack_id=cluster.stack_id, " "nodegroup.status=cluster.status, nodegroup.version=0 " "WHERE nodegroup.cluster_id=cluster.uuid")
class Federation(Base): """Represents a Federation.""" __tablename__ = 'federation' __table_args__ = (schema.UniqueConstraint("uuid", name="uniq_federation0uuid"), table_args()) id = Column(Integer, primary_key=True) project_id = Column(String(255)) uuid = Column(String(36)) name = Column(String(255)) hostcluster_id = Column(String(255)) member_ids = Column(JSONEncodedList) status = Column(String(20)) status_reason = Column(Text) properties = Column(JSONEncodedDict)
def upgrade(): op.create_table( 'flavors', sa.Column('id', sa.String(36)), sa.Column('name', sa.String(255)), sa.Column('description', sa.String(1024)), sa.Column('enabled', sa.Boolean, nullable=False, server_default=sa.sql.true()), sa.Column('service_type', sa.String(36), nullable=True), sa.PrimaryKeyConstraint('id')) op.create_table( 'serviceprofiles', sa.Column('id', sa.String(36)), sa.Column('description', sa.String(1024)), sa.Column('driver', sa.String(1024), nullable=False), sa.Column('enabled', sa.Boolean, nullable=False, server_default=sa.sql.true()), sa.Column('metainfo', String(4096, mysql_ndb_type=TEXT)), sa.PrimaryKeyConstraint('id')) op.create_table( 'flavorserviceprofilebindings', sa.Column('service_profile_id', sa.String(36), nullable=False), sa.Column('flavor_id', sa.String(36), nullable=False), sa.ForeignKeyConstraint(['service_profile_id'], ['serviceprofiles.id']), sa.ForeignKeyConstraint(['flavor_id'], ['flavors.id']), sa.PrimaryKeyConstraint('service_profile_id', 'flavor_id'))
def test_non_ndb_string_to_text(self): test_engine = self.test_engine self.assertEqual( "VARCHAR(255)", str( String(255, mysql_ndb_type=TINYTEXT).compile( dialect=test_engine.dialect)))
def test_ndb_string_length(self): test_engine = self.test_engine self.assertEqual( 'VARCHAR(64)', str( String( 255, mysql_ndb_length=64).compile(dialect=test_engine.dialect)))
def test_ndb_string_to_text(self): test_engine = self.test_engine self.assertEqual( "TEXT", str( String( 4096, mysql_ndb_type=TEXT).compile(dialect=test_engine.dialect)))
def test_non_ndb_autostringsize(self): test_engine = self.test_engine self.assertEqual( 'VARCHAR(255)', str( String( 255, mysql_ndb_length=64).compile(dialect=test_engine.dialect)))
def test_non_ndb_autostringtext(self): test_engine = self.test_engine self.assertEqual( "VARCHAR(4096)", str( String( 4096, mysql_ndb_type=TEXT).compile(dialect=test_engine.dialect)))
def upgrade(): op.create_table( 'nodegroup', sa.Column('created_at', sa.DateTime(), nullable=True), sa.Column('updated_at', sa.DateTime(), nullable=True), sa.Column('id', sa.Integer(), nullable=False), sa.Column('uuid', String(length=36), nullable=False), sa.Column('name', String(length=255), nullable=False), sa.Column('cluster_id', String(length=255), nullable=False), sa.Column('project_id', String(length=255), nullable=False), sa.Column('docker_volume_size', sa.Integer(), nullable=True), sa.Column('labels', models.JSONEncodedDict, nullable=True), sa.Column('flavor_id', String(length=255), nullable=True), sa.Column('image_id', String(length=255), nullable=True), sa.Column('node_addresses', models.JSONEncodedList(), nullable=True), sa.Column('node_count', sa.Integer(), nullable=True), sa.Column('max_node_count', sa.Integer(), nullable=True), sa.Column('min_node_count', sa.Integer(), nullable=True), sa.Column('role', String(length=255), nullable=True), sa.Column('is_default', sa.Boolean(create_constraint=False), default=False), sa.PrimaryKeyConstraint('id'), sa.UniqueConstraint('uuid', name='uniq_nodegroup0uuid'), sa.UniqueConstraint('cluster_id', 'name', name='uniq_nodegroup0cluster_id0name'), )
def upgrade(): op.alter_column('bay', 'registry_trust_id', new_column_name='trust_id', existing_type=sa.String(255)) op.add_column( 'bay', sa.Column('trustee_username', String(255, mysql_ndb_type=TINYTEXT), nullable=True)) op.add_column( 'bay', sa.Column('trustee_user_id', sa.String(length=255), nullable=True)) op.add_column( 'bay', sa.Column('trustee_password', String(255, mysql_ndb_type=TINYTEXT), nullable=True))
class ServiceProfile(model_base.BASEV2, model_base.HasId): description = sa.Column(sa.String(db_const.LONG_DESCRIPTION_FIELD_SIZE)) driver = sa.Column(sa.String(1024), nullable=False) enabled = sa.Column(sa.Boolean, nullable=False, default=True, server_default=sa.sql.true()) metainfo = sa.Column(String(4096, mysql_ndb_type=TEXT)) flavors = orm.relationship("FlavorServiceProfileBinding")
def upgrade(): op.create_table( 'dvr_host_macs', sa.Column('host', sa.String(length=255), nullable=False), sa.Column('mac_address', sa.String(length=32), nullable=False, unique=True), sa.PrimaryKeyConstraint('host')) op.create_table( 'ml2_dvr_port_bindings', sa.Column('port_id', sa.String(length=36), nullable=False), sa.Column('host', sa.String(length=255), nullable=False), sa.Column('router_id', sa.String(length=36), nullable=True), sa.Column('vif_type', sa.String(length=64), nullable=False), sa.Column('vif_details', String(4095, mysql_ndb_type=TEXT), nullable=False, server_default=''), sa.Column('vnic_type', sa.String(length=64), nullable=False, server_default='normal'), sa.Column('profile', String(4095, mysql_ndb_type=TEXT), nullable=False, server_default=''), sa.Column(u'status', sa.String(16), nullable=False), sa.ForeignKeyConstraint(['port_id'], ['ports.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('port_id', 'host')) op.create_table( 'csnat_l3_agent_bindings', sa.Column('router_id', sa.String(length=36), nullable=False), sa.Column('l3_agent_id', sa.String(length=36), nullable=False), sa.Column('host_id', sa.String(length=255), nullable=True), sa.Column('csnat_gw_port_id', sa.String(length=36), nullable=True), sa.ForeignKeyConstraint(['l3_agent_id'], ['agents.id'], ondelete='CASCADE'), sa.ForeignKeyConstraint(['router_id'], ['routers.id'], ondelete='CASCADE'), sa.ForeignKeyConstraint(['csnat_gw_port_id'], ['ports.id'], ondelete='CASCADE'), sa.PrimaryKeyConstraint('router_id', 'l3_agent_id'))
class Agent(model_base.BASEV2, model_base.HasId): """Represents agents running in neutron deployments.""" __table_args__ = ( sa.UniqueConstraint('agent_type', 'host', name='uniq_agents0agent_type0host'), model_base.BASEV2.__table_args__ ) # L3 agent, DHCP agent, OVS agent, LinuxBridge agent_type = sa.Column(String(255, mysql_ndb_length=128), nullable=False) binary = sa.Column(String(255, mysql_ndb_type=TINYTEXT), nullable=False) # TOPIC is a fanout exchange topic topic = sa.Column(String(255, mysql_ndb_type=TINYTEXT), nullable=False) # TOPIC.host is a target topic host = sa.Column(sa.String(255), nullable=False) availability_zone = sa.Column(sa.String(255)) admin_state_up = sa.Column(sa.Boolean, default=True, server_default=sql.true(), nullable=False) # the time when first report came from agents created_at = sa.Column(sa.DateTime, nullable=False) # the time when first report came after agents start started_at = sa.Column(sa.DateTime, nullable=False) # updated when agents report heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False) # description is note for admin user description = sa.Column(sa.String(db_const.DESCRIPTION_FIELD_SIZE)) # configurations: a json dict string, I think 4095 is enough configurations = sa.Column(String(4095, mysql_ndb_type=TEXT), nullable=False) # resource_versions: json dict, 8191 allows for ~256 resource versions # assuming ~32byte length "'name': 'ver'," # the whole row limit is 65535 bytes in mysql resource_versions = sa.Column(sa.String(8191)) # load - number of resources hosted by the agent load = sa.Column(sa.Integer, server_default='0', nullable=False) @property def is_active(self): return not utils.is_agent_down(self.heartbeat_timestamp)
def AutoStringSize(length, ndb_size, **kw): return String(length, mysql_ndb_length=ndb_size, **kw)
from sqlalchemy import MetaData from sqlalchemy import Table from sqlalchemy import Text from sqlalchemy import create_engine from sqlalchemy import schema from sqlalchemy.dialects.mysql import TEXT from sqlalchemy.dialects.mysql import TINYTEXT LOG = logging.getLogger(__name__) _MOCK_CONNECTION = 'mysql+pymysql://' _TEST_TABLE = Table("test_ndb", MetaData(), Column('id', Integer, primary_key=True), Column('test1', String(255, mysql_ndb_type=TEXT)), Column('test2', String(4096, mysql_ndb_type=TEXT)), Column('test3', String(255, mysql_ndb_length=64)), mysql_engine='InnoDB') class NDBMockTestBase(test_base.BaseTestCase): def setUp(self): super(NDBMockTestBase, self).setUp() mock_dbapi = mock.Mock() self.test_engine = test_engine = create_engine( _MOCK_CONNECTION, module=mock_dbapi) test_engine.dialect._oslodb_enable_ndb_support = True self.addCleanup( setattr, test_engine.dialect, "_oslodb_enable_ndb_support", False
def upgrade(): op.add_column('baymodel', sa.Column('fixed_subnet', String(255, mysql_ndb_type=TINYTEXT), nullable=True))
def upgrade(): op.add_column( 'baymodel', sa.Column('cluster_distro', String(255, mysql_ndb_type=TINYTEXT), nullable=True))
class ClusterTemplate(Base): """Represents a ClusterTemplate.""" __tablename__ = 'cluster_template' __table_args__ = (schema.UniqueConstraint('uuid', name='uniq_baymodel0uuid'), table_args()) id = Column(Integer, primary_key=True) uuid = Column(String(36)) project_id = Column(String(255)) user_id = Column(String(255)) name = Column(String(255)) image_id = Column(String(255)) flavor_id = Column(String(255)) master_flavor_id = Column(String(255)) keypair_id = Column(String(255)) external_network_id = Column(String(255)) fixed_network = Column(String(255, mysql_ndb_type=TINYTEXT)) fixed_subnet = Column(String(255, mysql_ndb_type=TINYTEXT)) network_driver = Column(String(255, mysql_ndb_type=TINYTEXT)) volume_driver = Column(String(255, mysql_ndb_type=TINYTEXT)) dns_nameserver = Column(String(255, mysql_ndb_type=TINYTEXT)) apiserver_port = Column(Integer()) docker_volume_size = Column(Integer()) docker_storage_driver = Column(String(255)) cluster_distro = Column(String(255, mysql_ndb_type=TINYTEXT)) coe = Column(String(255, mysql_ndb_type=TINYTEXT)) http_proxy = Column(String(255, mysql_ndb_type=TINYTEXT)) https_proxy = Column(String(255, mysql_ndb_type=TINYTEXT)) no_proxy = Column(String(255, mysql_ndb_type=TINYTEXT)) registry_enabled = Column(Boolean, default=False) labels = Column(JSONEncodedDict) tls_disabled = Column(Boolean, default=False) public = Column(Boolean, default=False) server_type = Column(String(255)) insecure_registry = Column(String(255, mysql_ndb_type=TINYTEXT)) master_lb_enabled = Column(Boolean, default=False) floating_ip_enabled = Column(Boolean, default=True) hidden = Column(Boolean, default=False)
class Cluster(Base): """Represents a Cluster.""" __tablename__ = 'cluster' __table_args__ = (schema.UniqueConstraint('uuid', name='uniq_bay0uuid'), table_args()) id = Column(Integer, primary_key=True) project_id = Column(String(255)) user_id = Column(String(255)) uuid = Column(String(36)) name = Column(String(255)) cluster_template_id = Column(String(255)) keypair = Column(String(255)) docker_volume_size = Column(Integer()) labels = Column(JSONEncodedDict) master_flavor_id = Column(String(255)) flavor_id = Column(String(255)) stack_id = Column(String(255)) api_address = Column(String(255)) node_addresses = Column(JSONEncodedList) node_count = Column(Integer()) master_count = Column(Integer()) status = Column(String(20)) status_reason = Column(Text) health_status = Column(String(20)) health_status_reason = Column(JSONEncodedDict) create_timeout = Column(Integer()) discovery_url = Column(String(255, mysql_ndb_type=TINYTEXT)) master_addresses = Column(JSONEncodedList) # TODO(wanghua): encrypt trust_id in db trust_id = Column(String(255)) trustee_username = Column(String(255, mysql_ndb_type=TINYTEXT)) trustee_user_id = Column(String(255)) # TODO(wanghua): encrypt trustee_password in db trustee_password = Column(String(255, mysql_ndb_type=TINYTEXT)) coe_version = Column(String(255, mysql_ndb_type=TINYTEXT)) container_version = Column(String(255, mysql_ndb_type=TINYTEXT)) # (yuanying) if we use barbican, # cert_ref size is determined by below format # * http(s)://${DOMAIN_NAME}/v1/containers/${UUID} # as a result, cert_ref length is estimated to 312 chars. # but we can use another backend to store certs. # so, we use 512 chars to get some buffer. ca_cert_ref = Column(String(512, mysql_ndb_type=mysql_TEXT)) magnum_cert_ref = Column(String(512, mysql_ndb_type=mysql_TEXT))