def define_logic_networks_table(meta):
    logic_networks = Table('logic_networks',
                           meta,
                           Column('id', String(36), primary_key=True,
                                  nullable=False),
                           Column('name', String(255), nullable=False),
                           Column('type', String(36)),
                           Column('physnet_name', String(255)),
                           Column('cluster_id', String(36), ForeignKey(
                               'clusters.id'), nullable=False),
                           Column('segmentation_id', BigInteger()),
                           Column(
                               'segmentation_type', String(64),
                               nullable=False),
                           Column('shared', Boolean(), default=False),
                           Column('created_at', DateTime(), nullable=False),
                           Column('updated_at', DateTime(), nullable=False),
                           Column('deleted_at', DateTime()),
                           Column('deleted',
                                  Boolean(),
                                  nullable=False,
                                  default=False,
                                  index=True),
                           mysql_engine='InnoDB',
                           extend_existing=True)
    return logic_networks
def define_versions_table(meta):
    versions = Table('versions',
                     meta,
                     Column('id', String(36), primary_key=True,
                            nullable=False),
                     Column('name', String(256), nullable=False),
                     Column('size', BigInteger()),
                     Column('status', String(30)),
                     Column('checksum', String(128)),
                     Column('owner', String(256)),
                     Column('version', String(32)),
                     Column('type', String(30)),
                     Column('description', Text()),
                     Column('created_at', DateTime(), nullable=False),
                     Column('updated_at', DateTime(), nullable=False),
                     Column('deleted_at', DateTime()),
                     Column('deleted',
                            Boolean(),
                            nullable=False,
                            default=False,
                            index=True),
                     mysql_engine='InnoDB',
                     extend_existing=True)

    return versions
def define_service_disks_table(meta):
    disks = Table('service_disks',
                  meta,
                  Column('id', String(36), primary_key=True,
                         nullable=False),
                  Column('service', String(255)),
                  Column('role_id',
                         String(36),
                         ForeignKey('roles.id'),
                         nullable=False),
                  Column(
                      'disk_location', String(255),
                      nullable=False, default='local'),
                  Column('lun', Integer()),
                  Column('data_ips', String(255)),
                  Column('size', Integer()),
                  Column('created_at', DateTime(), nullable=False),
                  Column('updated_at', DateTime(), nullable=False),
                  Column('deleted_at', DateTime()),
                  Column('deleted',
                         Boolean(),
                         nullable=False,
                         default=False,
                         index=True),
                  mysql_engine='InnoDB',
                  extend_existing=True)

    return disks
def define_configs_table(meta):
    configs = Table('configs',
                    meta,
                    Column('id', String(36), primary_key=True,
                           nullable=False),
                    Column('section', String(255)),
                    Column('key', String(255), nullable=False),
                    Column('value', String(255)),
                    Column('config_file_id', String(36), ForeignKey(
                        'config_files.id'), nullable=False),
                    Column('config_version', Integer(), default=0),
                    Column('running_version', Integer(), default=0),
                    Column('description', Text()),
                    Column('created_at', DateTime(), nullable=False),
                    Column('updated_at', DateTime(), nullable=False),
                    Column('deleted_at', DateTime()),
                    Column('deleted',
                           Boolean(),
                           nullable=False,
                           default=False,
                           index=True),
                    mysql_engine='InnoDB',
                    extend_existing=True)

    return configs
def define_host_roles_table(meta):
    host_roles = Table('host_roles',
                       meta,
                       Column('id', String(36), primary_key=True,
                              nullable=False),
                       Column('host_id',
                              String(36),
                              ForeignKey('hosts.id'),
                              nullable=False),
                       Column('role_id',
                              String(36),
                              ForeignKey('roles.id'),
                              nullable=False),
                       Column(
                           'status', String(32), nullable=False,
                           default='init'),
                       Column('progress', Integer(), default=0),
                       Column('messages', Text()),
                       Column('created_at', DateTime(), nullable=False),
                       Column('updated_at', DateTime(), nullable=False),
                       Column('deleted_at', DateTime()),
                       Column('deleted',
                              Boolean(),
                              nullable=False,
                              default=False,
                              index=True),
                       mysql_engine='InnoDB',
                       extend_existing=True)

    return host_roles
def define_cinder_volumes_table(meta):
    disks = Table('cinder_volumes',
                  meta,
                  Column('id', String(36), primary_key=True,
                         nullable=False),
                  Column('user_name', String(255)),
                  Column('user_pwd', String(255)),
                  Column('management_ips', String(255)),
                  Column('pools', String(255)),
                  Column('volume_driver', String(255)),
                  Column('volume_type', String(255)),
                  Column('backend_index', String(255)),
                  Column('role_id',
                         String(36),
                         ForeignKey('roles.id'),
                         nullable=False),
                  Column('created_at', DateTime(), nullable=False),
                  Column('updated_at', DateTime(), nullable=False),
                  Column('deleted_at', DateTime()),
                  Column('deleted',
                         Boolean(),
                         nullable=False,
                         default=False,
                         index=True),
                  mysql_engine='InnoDB',
                  extend_existing=True)

    return disks
def define_clusters_table(meta):
    clusters = Table('clusters',
                     meta,
                     Column('id', String(36), primary_key=True,
                            nullable=False),
                     Column(
                         'name', String(255), default='TECS', nullable=False),
                     Column('owner', String(255)),
                     Column('description', Text()),
                     Column('net_l23_provider', String(64)),
                     Column('base_mac', String(128)),
                     Column('gre_id_start', Integer()),
                     Column('gre_id_end', Integer()),
                     Column('vlan_start', Integer()),
                     Column('vlan_end', Integer()),
                     Column('vni_start', BigInteger()),
                     Column('vni_end', BigInteger()),
                     Column('public_vip', String(128)),
                     Column('segmentation_type', String(64)),
                     Column(
                         'auto_scale', Integer(), nullable=False, default=0),
                     Column('created_at', DateTime(), nullable=False),
                     Column('updated_at', DateTime(), nullable=False),
                     Column('deleted_at', DateTime()),
                     Column('deleted',
                            Boolean(),
                            nullable=False,
                            default=False,
                            index=True),
                     mysql_engine='InnoDB',
                     extend_existing=True)

    return clusters
def define_host_interfaces_table(meta):
    host_interfaces = Table('host_interfaces',
                            meta,
                            Column('id', String(36), primary_key=True,
                                   nullable=False),
                            Column('host_id', String(36),
                                   ForeignKey('hosts.id'),
                                   nullable=False),
                            Column('name', String(64)),
                            Column('ip', String(256)),
                            Column('netmask', String(256)),
                            Column('gateway', String(256)),
                            Column('mac', String(256)),
                            Column('pci', String(32)),
                            Column(
                                'type', String(32), nullable=False,
                                default='ether'),
                            Column('slave1', String(32)),
                            Column('slave2', String(32)),
                            Column('mode', String(36)),
                            Column('is_deployment', Boolean(), default=False),
                            Column('created_at', DateTime(), nullable=False),
                            Column('updated_at', DateTime(), nullable=False),
                            Column('deleted_at', DateTime()),
                            Column('deleted',
                                   Boolean(),
                                   nullable=False,
                                   default=False,
                                   index=True),
                            mysql_engine='InnoDB',
                            extend_existing=True)

    return host_interfaces
def define_optical_switchs_table(meta):
    optical_switchs = Table('optical_switchs',
                            meta,
                            Column('id',
                                   String(36),
                                   primary_key=True,
                                   nullable=False),
                            Column('user_name', String(255)),
                            Column('user_pwd', String(255)),
                            Column('switch_ip', String(36)),
                            Column('switch_port', String(36)),
                            Column('role_id', String(36)),
                            Column('fc_driver', String(36)),
                            Column('fc_zoneing_policy', String(36)),
                            Column('created_at', DateTime(), nullable=False),
                            Column('updated_at', DateTime(), nullable=False),
                            Column('deleted_at', DateTime()),
                            Column('deleted',
                                   Boolean(),
                                   nullable=False,
                                   default=False,
                                   index=True),
                            mysql_engine='InnoDB',
                            extend_existing=True)
    return optical_switchs
def define_neutron_backend_table(meta):
    # NOTE(bcwaldon): load the images table for the ForeignKey below
    sqlalchemy.Table('roles', meta, autoload=True)
    neutron_backend = Table('neutron_backend',
                            meta,
                            Column('id',
                                   String(36),
                                   primary_key=True,
                                   nullable=False),
                            Column('role_id',
                                   String(36),
                                   ForeignKey('roles.id'),
                                   nullable=False),
                            Column('user_name', String(255)),
                            Column('user_pwd', String(255)),
                            Column('controller_ip', String(255)),
                            Column('neutron_backends_type', String(255)),
                            Column('sdn_type', String(255)),
                            Column('port', String(255)),
                            Column('created_at', DateTime(), nullable=False),
                            Column('updated_at', DateTime(), nullable=False),
                            Column('deleted_at', DateTime()),
                            Column('deleted',
                                   Boolean(),
                                   nullable=False,
                                   default=False,
                                   index=True),
                            mysql_engine='InnoDB',
                            extend_existing=True)
    return neutron_backend
def define_template_config_roles_table(meta):
    template_config_roles = \
        Table('template_config_roles',
              meta,
              Column('id', String(36), primary_key=True, nullable=False),
              Column('config_id', String(80)),
              Column('role_name', String(36)),
              Column('updated_at', DateTime(), nullable=False),
              Column('deleted_at', DateTime()),
              Column('created_at', DateTime(), nullable=False),
              Column('deleted', Boolean(), nullable=False, default=False,
                     index=True),
              mysql_engine='InnoDB',
              extend_existing=True)
    return template_config_roles
def define_template_service_table(meta):
    template_service = \
        Table('template_service',
              meta,
              Column('id', String(36), primary_key=True, nullable=False),
              Column('service_name', String(100), nullable=False),
              Column('force_type', String(50)),
              Column('updated_at', DateTime(), nullable=False),
              Column('deleted_at', DateTime()),
              Column('created_at', DateTime(), nullable=False),
              Column('deleted', Boolean(), nullable=False, default=False,
                     index=True),
              mysql_engine='InnoDB',
              extend_existing=True)
    return template_service
def define_component_config_table(meta):
    component_config = \
        Table('component_config',
              meta,
              Column('id', String(36), primary_key=True, nullable=False),
              Column('component_id', String(36), nullable=False),
              Column('cluster_id', String(36), nullable=False),
              Column('enable', Integer(), nullable=False, default=0),
              Column('updated_at', DateTime(), nullable=False),
              Column('deleted_at', DateTime()),
              Column('created_at', DateTime(), nullable=False),
              Column('deleted', Boolean(), nullable=False, default=False,
                     index=True),
              mysql_engine='InnoDB',
              extend_existing=True)
    return component_config
def define_config_service_table(meta):
    config_service = \
        Table('config_service',
              meta,
              Column('id', String(36), primary_key=True,
                     nullable=False),
              Column('config_id', String(36)),
              Column('service_id', String(36)),
              Column('updated_at', DateTime(), nullable=False),
              Column('deleted_at', DateTime()),
              Column('created_at', DateTime(), nullable=False),
              Column('deleted', Boolean(), nullable=False, default=False,
                     index=True),
              mysql_engine='InnoDB',
              extend_existing=True)
    return config_service
def define_template_func_table(meta):
    template_func = \
        Table('template_func',
              meta,
              Column('id', String(36), primary_key=True, nullable=False),
              Column('name', String(50), nullable=False),
              Column('ch_desc', Text()),
              Column('en_desc', Text()),
              Column('data_check_script', Text()),
              Column('updated_at', DateTime(), nullable=False),
              Column('deleted_at', DateTime()),
              Column('created_at', DateTime(), nullable=False),
              Column('deleted', Boolean(), nullable=False, default=False,
                     index=True),
              mysql_engine='InnoDB',
              extend_existing=True)
    return template_func
def define_hwm_table(meta):
    hwm = Table('hwm',
                meta,
                Column('id', String(36), primary_key=True, nullable=False),
                Column('hwm_ip', String(36), nullable=False),
                Column('description', Text()),
                Column('updated_at', DateTime(), nullable=False),
                Column('deleted_at', DateTime()),
                Column('created_at', DateTime(), nullable=False),
                Column('deleted',
                       Boolean(),
                       nullable=False,
                       default=False,
                       index=True),
                mysql_engine='InnoDB',
                extend_existing=True)

    return hwm
def define_config_files_table(meta):
    config_files = Table('config_files',
                         meta,
                         Column('id', String(36), primary_key=True,
                                nullable=False),
                         Column('name', String(255), nullable=False),
                         Column('description', Text()),
                         Column('created_at', DateTime(), nullable=False),
                         Column('updated_at', DateTime(), nullable=False),
                         Column('deleted_at', DateTime()),
                         Column('deleted',
                                Boolean(),
                                nullable=False,
                                default=False,
                                index=True),
                         mysql_engine='InnoDB',
                         extend_existing=True)

    return config_files
def define_task_infos_table(meta):
    task_infos = Table('task_infos',
                       meta,
                       Column('task_id', String(36)),
                       Column('input', Text()),
                       Column('result', Text()),
                       Column('message', Text()),
                       Column('created_at', DateTime(), nullable=False),
                       Column('updated_at', DateTime(), nullable=False),
                       Column('deleted_at', DateTime()),
                       Column('deleted',
                              Boolean(),
                              nullable=False,
                              default=False,
                              index=True),
                       mysql_engine='InnoDB',
                       extend_existing=True)

    return task_infos
def define_config_historys_table(meta):
    config_historys = Table('config_historys',
                            meta,
                            Column('id', String(36), primary_key=True,
                                   nullable=False),
                            Column('config_id', String(36)),
                            Column('value', String(255)),
                            Column('version', Integer()),
                            Column('created_at', DateTime(), nullable=False),
                            Column('updated_at', DateTime(), nullable=False),
                            Column('deleted_at', DateTime()),
                            Column('deleted',
                                   Boolean(),
                                   nullable=False,
                                   default=False,
                                   index=True),
                            mysql_engine='InnoDB',
                            extend_existing=True)

    return config_historys
def define_ip_ranges_table(meta):
    ip_ranges = Table('ip_ranges',
                      meta,
                      Column('id', String(36), primary_key=True,
                             nullable=False),
                      Column('start', String(128)),
                      Column('end', String(128)),
                      Column('network_id', String(36)),
                      Column('created_at', DateTime(), nullable=False),
                      Column('updated_at', DateTime(), nullable=False),
                      Column('deleted_at', DateTime()),
                      Column('deleted',
                             Boolean(),
                             nullable=False,
                             default=False,
                             index=True),
                      mysql_engine='InnoDB',
                      extend_existing=True)

    return ip_ranges
def define_tasks_table(meta):
    tasks = Table('tasks',
                  meta,
                  Column('id', String(36), primary_key=True, nullable=False),
                  Column('type', String(30), nullable=False),
                  Column('status', String(30), nullable=False),
                  Column('owner', String(255), nullable=False),
                  Column('expires_at', DateTime()),
                  Column('created_at', DateTime(), nullable=False),
                  Column('updated_at', DateTime(), nullable=False),
                  Column('deleted_at', DateTime()),
                  Column('deleted',
                         Boolean(),
                         nullable=False,
                         default=False,
                         index=True),
                  mysql_engine='InnoDB',
                  extend_existing=True)

    return tasks
def define_host_template_table(meta):
    host_templates = Table('host_templates',
                           meta,
                           Column('id',
                                  String(36),
                                  primary_key=True,
                                  nullable=False),
                           Column('cluster_name', String(36), nullable=False),
                           Column('hosts', Text(), nullable=True),
                           Column('updated_at', DateTime(), nullable=False),
                           Column('deleted_at', DateTime()),
                           Column('created_at', DateTime(), nullable=False),
                           Column('deleted',
                                  Boolean(),
                                  nullable=False,
                                  default=False,
                                  index=True),
                           mysql_engine='InnoDB',
                           extend_existing=True)

    return host_templates
def define_dns_nameservers_table(meta):
    dns_nameservers = Table('dns_nameservers',
                            meta,
                            Column('id', String(36), primary_key=True,
                                   nullable=False),
                            Column('dns', String(128)),
                            Column(
                                'subnet_id', String(36),
                                ForeignKey('subnets.id'), nullable=False),
                            Column('created_at', DateTime(), nullable=False),
                            Column('updated_at', DateTime(), nullable=False),
                            Column('deleted_at', DateTime()),
                            Column('deleted',
                                   Boolean(),
                                   nullable=False,
                                   default=False,
                                   index=True),
                            mysql_engine='InnoDB',
                            extend_existing=True)

    return dns_nameservers
def define_roles_table(meta):
    roles = Table('roles',
                  meta,
                  Column('id',
                         String(36), primary_key=True,
                         nullable=False, index=True),
                  Column('name',
                         String(255),
                         nullable=False),
                  Column('status', String(32), nullable=False, default='init'),
                  Column('progress', Integer(), default=0),
                  Column('config_set_id',
                         String(36),
                         ForeignKey('config_sets.id')),
                  Column('description', Text()),
                  Column('cluster_id', String(36)),
                  Column('type', String(36), nullable=False, default='custom'),
                  Column('vip', String(256)),
                  Column('messages', Text()),
                  Column('db_lv_size', Integer()),
                  Column('glance_lv_size', Integer()),
                  Column('nova_lv_size', Integer(), default=0),
                  Column(
                      'disk_location', String(255), nullable=False,
                      default='local'),
                  Column('deployment_backend', String(36)),
                  Column('config_set_update_progress', Integer(), default=0),
                  Column('ntp_server', String(255)),
                  Column('created_at', DateTime(), nullable=False),
                  Column('updated_at', DateTime(), nullable=False),
                  Column('deleted_at', DateTime()),
                  Column('deleted',
                         Boolean(),
                         nullable=False,
                         default=False,
                         index=True),
                  mysql_engine='InnoDB',
                  extend_existing=True)

    return roles
def define_service_roles_table(meta):
    service_roles = Table('service_roles',
                          meta,
                          Column('id', String(36), primary_key=True,
                                 nullable=False),
                          Column('role_id', String(36), ForeignKey('roles.id'),
                                 nullable=False),
                          Column(
                              'service_id', String(36), ForeignKey(
                                  'services.id'), nullable=False),
                          Column('created_at', DateTime(), nullable=False),
                          Column('updated_at', DateTime(), nullable=False),
                          Column('deleted_at', DateTime()),
                          Column('deleted',
                                 Boolean(),
                                 nullable=False,
                                 default=False,
                                 index=True),
                          mysql_engine='InnoDB',
                          extend_existing=True)

    return service_roles
def define_routers_table(meta):
    routers = Table('routers',
                    meta,
                    Column('id', String(36), primary_key=True,
                           nullable=False),
                    Column('name', String(255)),
                    Column('description', Text()),
                    Column('cluster_id', String(36), ForeignKey(
                        'clusters.id'), nullable=False),
                    Column('external_logic_network', String(255)),
                    Column('created_at', DateTime(), nullable=False),
                    Column('updated_at', DateTime(), nullable=False),
                    Column('deleted_at', DateTime()),
                    Column('deleted',
                           Boolean(),
                           nullable=False,
                           default=False,
                           index=True),
                    mysql_engine='InnoDB',
                    extend_existing=True)

    return routers
def define_subnets_table(meta):
    subnets = Table('subnets',
                    meta,
                    Column('id', String(36), primary_key=True,
                           nullable=False),
                    Column('cidr', String(128)),
                    Column('gateway', String(128)),
                    Column('logic_network_id', String(36), ForeignKey(
                        'logic_networks.id'), nullable=False),
                    Column('name', String(255), nullable=False),
                    Column('router_id', String(36), ForeignKey('routers.id')),
                    Column('created_at', DateTime(), nullable=False),
                    Column('updated_at', DateTime(), nullable=False),
                    Column('deleted_at', DateTime()),
                    Column('deleted',
                           Boolean(),
                           nullable=False,
                           default=False,
                           index=True),
                    mysql_engine='InnoDB',
                    extend_existing=True)
    return subnets
def define_assigned_networks_table(meta):
    assigned_networks = Table('assigned_networks',
                              meta,
                              Column('id', String(36), primary_key=True,
                                     nullable=False),
                              Column('mac', String(128)),
                              Column('network_id', String(36)),
                              Column('interface_id', String(36)),
                              Column('ip', String(256)),
                              Column('vswitch_type', String(256)),
                              Column('created_at', DateTime(), nullable=False),
                              Column('updated_at', DateTime(), nullable=False),
                              Column('deleted_at', DateTime()),
                              Column('deleted',
                                     Boolean(),
                                     nullable=False,
                                     default=False,
                                     index=True),
                              mysql_engine='InnoDB',
                              extend_existing=True)

    return assigned_networks
def define_config_set_items_table(meta):
    config_set_items = Table('config_set_items',
                             meta,
                             Column('id', String(36), primary_key=True,
                                    nullable=False),
                             Column('config_set_id', String(36),
                                    ForeignKey('config_sets.id'),
                                    nullable=False),
                             Column('config_id', String(36), ForeignKey(
                                 'configs.id'), nullable=False),
                             Column('created_at', DateTime(), nullable=False),
                             Column('updated_at', DateTime(), nullable=False),
                             Column('deleted_at', DateTime()),
                             Column('deleted',
                                    Boolean(),
                                    nullable=False,
                                    default=False,
                                    index=True),
                             mysql_engine='InnoDB',
                             extend_existing=True)

    return config_set_items
def define_users_table(meta):
    users = Table('users',
                  meta,
                  Column('id', String(36), primary_key=True,
                         nullable=False),
                  Column('name', String(256), nullable=False),
                  Column('password', String(256)),
                  Column('email', String(256)),
                  Column('phone', String(128)),
                  Column('address', String(256)),
                  Column('created_at', DateTime(), nullable=False),
                  Column('updated_at', DateTime(), nullable=False),
                  Column('deleted_at', DateTime()),
                  Column('deleted',
                         Boolean(),
                         nullable=False,
                         default=False,
                         index=True),
                  mysql_engine='InnoDB',
                  extend_existing=True)

    return users