예제 #1
0
def upgrade_with_components():
    op.add_column(
        'plugins',
        sa.Column('components_metadata', fields.JSON(), server_default='[]'))
    op.add_column(
        'releases',
        sa.Column('components_metadata', fields.JSON(), server_default='[]'))
예제 #2
0
def downgrade_remove_vmware():
    op.add_column(
        'releases',
        sa.Column('vmware_attributes_metadata', fields.JSON(), nullable=True))

    op.create_table('vmware_attributes',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('cluster_id', sa.Integer()),
                    sa.Column('editable', fields.JSON()),
                    sa.ForeignKeyConstraint(
                        ['cluster_id'],
                        ['clusters.id'],
                    ), sa.PrimaryKeyConstraint('id'))

    upgrade_enum(
        "cluster_changes",  # table
        "name",  # column
        "possible_changes",  # ENUM name
        cluster_changes_new,  # new options
        cluster_changes_old  # old options
    )

    op.drop_constraint('vmware_attributes_cluster_id_fkey',
                       'vmware_attributes',
                       type_='foreignkey')

    op.create_foreign_key('vmware_attributes_cluster_id_fkey',
                          'vmware_attributes',
                          'clusters', ['cluster_id'], ['id'],
                          ondelete='CASCADE')
예제 #3
0
파일: fuel_7_0.py 프로젝트: blkart/fuel-web
def extend_plugin_model_upgrade():
    op.add_column(
        'plugins',
        sa.Column('attributes_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    op.add_column(
        'plugins',
        sa.Column('volumes_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    op.add_column(
        'plugins',
        sa.Column('roles_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    op.add_column(
        'plugins',
        sa.Column('deployment_tasks',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
    op.add_column(
        'plugins',
        sa.Column('tasks', fields.JSON(), nullable=False, server_default='[]'))
예제 #4
0
def upgrade_deployment_graphs_attributes():
    op.add_column('deployment_graphs',
                  sa.Column('node_filter', sa.String(4096), nullable=True))
    op.add_column('deployment_graphs',
                  sa.Column('on_success', fields.JSON(), nullable=True))
    op.add_column('deployment_graphs',
                  sa.Column('on_error', fields.JSON(), nullable=True))
    op.add_column('deployment_graphs',
                  sa.Column('on_stop', fields.JSON(), nullable=True))
예제 #5
0
파일: fuel_7_0.py 프로젝트: blkart/fuel-web
def extend_node_model_upgrade():
    op.add_column(
        'node_nic_interfaces',
        sa.Column('offloading_modes',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
    op.add_column(
        'node_bond_interfaces',
        sa.Column('offloading_modes',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
예제 #6
0
def networking_templates_upgrade():
    op.add_column(
        'networking_configs',
        sa.Column('configuration_template',
                  fields.JSON(),
                  nullable=True,
                  server_default=None))
    op.add_column(
        'nodes',
        sa.Column('network_template',
                  fields.JSON(),
                  nullable=True,
                  server_default=None))
예제 #7
0
def upgrade_cluster_roles():
    op.add_column(
        'clusters',
        sa.Column('roles_metadata',
                  fields.JSON(),
                  default={},
                  server_default='{}'),
    )
    op.add_column(
        'clusters',
        sa.Column('volumes_metadata',
                  fields.JSON(),
                  default={},
                  server_default='{}'),
    )
예제 #8
0
파일: fuel_7_0.py 프로젝트: nebril/fuel-web
def migrate_volumes_into_extension_downgrade():
    # NOTE(eli): we don't support data downgrade, so we just change
    # schema to represent previous db schema state
    op.drop_table(extensions_migration_buffer_table_name)
    op.add_column(
        'node_attributes',
        sa.Column('volumes', fields.JSON(), nullable=True))
예제 #9
0
def upgrade_node_tagging():
    op.create_table(
        'tags',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('tag', sa.String(64), nullable=False),
        sa.Column('owner_id', sa.Integer(), nullable=False),
        sa.Column('owner_type',
                  sa.Enum(*consts.TAG_OWNER_TYPES, name='tag_owner_type'),
                  nullable=False),
        sa.Column('has_primary', sa.Boolean),
        sa.Column('read_only', sa.Boolean),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('owner_type',
                            'owner_id',
                            'tag',
                            name='__tag_owner_uc'),
    )

    op.create_table(
        'node_tags', sa.Column('id', sa.Integer()),
        sa.Column('node_id', sa.Integer(), nullable=False),
        sa.Column('tag_id', sa.Integer(), nullable=False),
        sa.Column('is_primary', sa.Boolean, default=False),
        sa.ForeignKeyConstraint(['node_id'], ['nodes.id'], ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['tag_id'], ['tags.id'], ondelete='CASCADE'))
    op.add_column(
        'releases',
        sa.Column('tags_metadata', fields.JSON(), nullable=True),
    )
예제 #10
0
def upgrade_node_deployment_info():
    op.create_table(
        'node_deployment_info', sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('node_uid', sa.String(20), nullable=True),
        sa.Column('task_id', sa.Integer(), nullable=False),
        sa.Column('deployment_info', fields.JSON(), nullable=True),
        sa.PrimaryKeyConstraint('id'),
        sa.ForeignKeyConstraint(['task_id'], ['tasks.id'], ondelete='CASCADE'))
    op.create_index('node_deployment_info_task_id_and_node_uid',
                    'node_deployment_info', ['task_id', 'node_uid'])

    connection = op.get_bind()
    select_query = sa.sql.text("""
        SELECT id, deployment_info
        FROM tasks
        WHERE deployment_info IS NOT NULL""")

    insert_query = sa.sql.text("""
        INSERT INTO node_deployment_info
            (task_id, node_uid, deployment_info)
        VALUES
            (:task_id, :node_uid, :deployment_info)""")

    for (task_id, deployment_info_str) in connection.execute(select_query):
        deployment_info = jsonutils.loads(deployment_info_str)
        for node_uid, node_deployment_info in deployment_info.iteritems():
            connection.execute(
                insert_query,
                task_id=task_id,
                node_uid=node_uid,
                deployment_info=jsonutils.dumps(node_deployment_info))

    update_query = sa.sql.text("UPDATE tasks SET deployment_info=NULL")
    connection.execute(update_query)
예제 #11
0
def vms_conf_upgrade():
    op.add_column(
        'node_attributes',
        sa.Column('vms_conf',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
예제 #12
0
파일: fuel_7_0.py 프로젝트: nebril/fuel-web
def migrate_volumes_into_extension_upgrade():
    """Migrate data into intermediate table, from
    which specific extensions will be able to retrieve
    the data. It allows us not to hardcode extension
    tables in core migrations.
    """
    connection = op.get_bind()

    # Create migration buffer table for extensions
    op.create_table(
        extensions_migration_buffer_table_name,
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('extension_name', sa.Text(), nullable=False),
        sa.Column('data', fields.JSON()),
        sa.PrimaryKeyConstraint('id'))

    select_query = sa.sql.text("SELECT node_id, volumes FROM node_attributes")
    insert_query = sa.sql.text(
        "INSERT INTO {0} (extension_name, data)"
        "VALUES (:extension_name, :data)".format(
            extensions_migration_buffer_table_name))

    # Fill in the buffer
    for node_id, volumes in connection.execute(select_query):
        connection.execute(
            insert_query,
            data=jsonutils.dumps({
                'node_id': node_id,
                'volumes': jsonutils.loads(volumes)}),
            extension_name='volume_manager')

    # Drop the table after the data were migrated
    op.drop_column('node_attributes', 'volumes')
예제 #13
0
def upgrade_tags_meta():
    connection = op.get_bind()
    op.add_column(
        'releases',
        sa.Column('tags_metadata',
                  fields.JSON(),
                  server_default='{}',
                  nullable=False),
    )
    op.add_column(
        'clusters',
        sa.Column('tags_metadata',
                  fields.JSON(),
                  server_default='{}',
                  nullable=False),
    )
    op.add_column(
        'plugins',
        sa.Column('tags_metadata',
                  fields.JSON(),
                  server_default='{}',
                  nullable=False),
    )

    q_get_role_meta = "SELECT id, roles_metadata FROM {}"
    q_update_role_tags_meta = '''
        UPDATE {}
        SET roles_metadata = :roles_meta, tags_metadata = :tags_meta
        WHERE id = :obj_id
    '''

    for table in ['releases', 'plugins']:
        for obj_id, roles_meta in connection.execute(
                sa.text(q_get_role_meta.format(table))):
            tags_meta = {}
            roles_meta = jsonutils.loads(roles_meta or '{}')
            for role_name, meta in six.iteritems(roles_meta):
                meta['tags'] = [role_name]
                tags_meta[role_name] = {
                    'has_primary': meta.get('has_primary', False)
                }
            connection.execute(sa.text(q_update_role_tags_meta.format(table)),
                               roles_meta=jsonutils.dumps(roles_meta),
                               tags_meta=jsonutils.dumps(tags_meta),
                               obj_id=obj_id)
예제 #14
0
def upgrade_deployment_sequences():
    op.create_table('deployment_sequences',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('release_id', sa.Integer(), nullable=False),
                    sa.Column('name', sa.String(255), nullable=False),
                    sa.Column('graphs', fields.JSON(), nullable=False),
                    sa.PrimaryKeyConstraint('id'),
                    sa.ForeignKeyConstraint(['release_id'], ['releases.id']),
                    sa.UniqueConstraint('release_id', 'name'))
예제 #15
0
def upgrade_add_baremetal_net():
    op.add_column(
        'neutron_config',
        sa.Column('baremetal_gateway', sa.String(length=25), nullable=True))
    op.add_column(
        'neutron_config',
        sa.Column('baremetal_range',
                  fields.JSON(),
                  nullable=True,
                  server_default='[]'))
예제 #16
0
def upgrade_release_required_component_types():
    op.add_column(
        'releases',
        sa.Column('required_component_types',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
    connection = op.get_bind()
    connection.execute(sa.sql.text(
        "UPDATE releases SET required_component_types = :required_types"),
                       required_types=jsonutils.dumps(
                           ['hypervisor', 'network', 'storage']))
예제 #17
0
def upgrade_schema():
    op.add_column('clusters',
                  sa.Column('deployment_tasks', fields.JSON(), nullable=True))
    op.add_column('releases',
                  sa.Column('deployment_tasks', fields.JSON(), nullable=True))

    upgrade_enum(
        'releases',  # table
        'state',  # column
        'release_state',  # ENUM name
        release_states_old,  # old options
        release_states_new,  # new options
    )
    # OpenStack workload statistics
    op.create_table(
        'oswl_stats', sa.Column('id', sa.Integer, nullable=False),
        sa.Column('cluster_id', sa.Integer, nullable=False, index=True),
        sa.Column('created_date', sa.Date, nullable=False, index=True),
        sa.Column('updated_time', sa.Time, nullable=False),
        sa.Column('resource_type',
                  sa.Enum('vm',
                          'tenant',
                          'volume',
                          'security_group',
                          'keystone_user',
                          'flavor',
                          'cluster_stats',
                          name='oswl_resource_type'),
                  nullable=False,
                  index=True),
        sa.Column('resource_data', fields.JSON(), nullable=True),
        sa.Column('resource_checksum', sa.Text, nullable=True),
        sa.Column('is_sent',
                  sa.Boolean,
                  nullable=False,
                  default=False,
                  index=True), sa.PrimaryKeyConstraint('id'))
예제 #18
0
def upgrade_cluster_ui_settings():
    op.add_column(
        'clusters',
        sa.Column('ui_settings',
                  fields.JSON(),
                  server_default=jsonutils.dumps({
                      "view_mode": "standard",
                      "filter": {},
                      "sort": [{
                          "roles": "asc"
                      }],
                      "search": ""
                  }),
                  nullable=False))
    op.drop_column('clusters', 'grouping')
예제 #19
0
def downgrade_schema():
    # Add interface properties
    op.drop_column('node_bond_interfaces', 'interface_properties')
    op.drop_column('node_nic_interfaces', 'interface_properties')
    # Add bond properties
    op.drop_column('node_bond_interfaces', 'bond_properties')
    op.add_column('node_bond_interfaces',
                  sa.Column('flags', fields.JSON(), nullable=True))
    # Introduce linux bonds
    upgrade_enum(
        'node_bond_interfaces',  # table
        'mode',  # column
        'bond_mode',  # ENUM name
        bond_modes_new,  # new options
        bond_modes_old,  # old options
    )
    # OpenStack workload statistics
    op.drop_table('oswl_stats')
    drop_enum('oswl_resource_type')

    upgrade_enum(
        "cluster_changes",  # table
        "name",  # column
        "possible_changes",  # ENUM name
        cluster_changes_new,  # new options
        cluster_changes_old,  # old options
    )

    upgrade_enum(
        'releases',  # table
        'state',  # column
        'release_state',  # ENUM name
        release_states_new,  # new options
        release_states_old,  # old options
    )

    upgrade_enum(
        "nodes",  # table
        "status",  # column
        "node_status",  # ENUM name
        node_statuses_new,  # old options
        node_statuses_old  # new options
    )

    op.create_table(
        'release_orchestrator_data',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('release_id', sa.Integer(), nullable=False),
        sa.Column('repo_metadata', fields.JSON(), nullable=False),
        sa.Column('puppet_manifests_source', sa.Text(), nullable=False),
        sa.Column('puppet_modules_source', sa.Text(), nullable=False),
        sa.ForeignKeyConstraint(
            ['release_id'],
            ['releases.id'],
        ), sa.PrimaryKeyConstraint('id'))

    op.drop_table('vmware_attributes')
    op.drop_column('releases', 'vmware_attributes_metadata')
    op.drop_column('clusters', 'deployment_tasks')
    op.drop_column('node_nic_interfaces', 'driver')
    op.drop_column('node_nic_interfaces', 'bus_info')
    op.drop_column('releases', 'deployment_tasks')
    op.drop_constraint('node_roles_node_fkey', 'node_roles')
    op.create_foreign_key('node_roles_node_fkey', 'node_roles', 'nodes',
                          ['node'], ['id'])

    op.drop_constraint('pending_node_roles_node_fkey', 'pending_node_roles')
    op.create_foreign_key('pending_node_roles_node_fkey', 'pending_node_roles',
                          'nodes', ['node'], ['id'])

    op.drop_constraint('node_attributes_node_id_fkey', 'node_attributes')
    op.create_foreign_key('node_attributes_node_id_fkey', 'node_attributes',
                          'nodes', ['node_id'], ['id'])
    op.drop_column('ip_addrs', 'vip_type')
    drop_enum('network_vip_types')

    # Plugins table changes
    op.drop_column('plugins', 'groups')
    op.drop_column('plugins', 'authors')
    op.drop_column('plugins', 'licenses')
    op.drop_column('plugins', 'homepage')
예제 #20
0
def upgrade_schema():
    connection = op.get_bind()

    vrouter_enum = sa.Enum('haproxy', 'vrouter', name='network_vip_types')
    vrouter_enum.create(op.get_bind(), checkfirst=False)

    op.add_column('ip_addrs', sa.Column('vip_type',
                                        vrouter_enum,
                                        nullable=True))

    op.add_column('clusters',
                  sa.Column('deployment_tasks', fields.JSON(), nullable=True))
    op.add_column('node_nic_interfaces',
                  sa.Column('driver', sa.Text(), nullable=True))
    op.add_column('node_nic_interfaces',
                  sa.Column('bus_info', sa.Text(), nullable=True))
    op.add_column('releases',
                  sa.Column('deployment_tasks', fields.JSON(), nullable=True))
    op.add_column(
        'releases',
        sa.Column('vmware_attributes_metadata', fields.JSON(), nullable=True))
    op.create_table('vmware_attributes',
                    sa.Column('id', sa.Integer(), nullable=False),
                    sa.Column('cluster_id', sa.Integer()),
                    sa.Column('editable', fields.JSON()),
                    sa.ForeignKeyConstraint(
                        ['cluster_id'],
                        ['clusters.id'],
                    ), sa.PrimaryKeyConstraint('id'))

    upgrade_enum(
        'releases',  # table
        'state',  # column
        'release_state',  # ENUM name
        release_states_old,  # old options
        release_states_new,  # new options
    )

    upgrade_enum(
        "cluster_changes",  # table
        "name",  # column
        "possible_changes",  # ENUM name
        cluster_changes_old,  # old options
        cluster_changes_new  # new options
    )

    upgrade_enum(
        "nodes",  # table
        "status",  # column
        "node_status",  # ENUM name
        node_statuses_old,  # old options
        node_statuses_new  # new options
    )
    # OpenStack workload statistics
    op.create_table(
        'oswl_stats', sa.Column('id', sa.Integer, nullable=False),
        sa.Column('cluster_id', sa.Integer, nullable=False, index=True),
        sa.Column('created_date', sa.Date, nullable=False, index=True),
        sa.Column('updated_time', sa.Time, nullable=False),
        sa.Column('resource_type',
                  sa.Enum('vm',
                          'tenant',
                          'volume',
                          'security_group',
                          'keystone_user',
                          'flavor',
                          'cluster_stats',
                          'image',
                          name='oswl_resource_type'),
                  nullable=False,
                  index=True),
        sa.Column('resource_data', fields.JSON(), nullable=True),
        sa.Column('resource_checksum', sa.Text, nullable=True),
        sa.Column('is_sent',
                  sa.Boolean,
                  nullable=False,
                  default=False,
                  index=True), sa.PrimaryKeyConstraint('id'))

    op.drop_constraint('node_roles_node_fkey', 'node_roles')
    op.create_foreign_key('node_roles_node_fkey',
                          'node_roles',
                          'nodes', ['node'], ['id'],
                          ondelete='CASCADE')

    op.drop_constraint('pending_node_roles_node_fkey', 'pending_node_roles')
    op.create_foreign_key('pending_node_roles_node_fkey',
                          'pending_node_roles',
                          'nodes', ['node'], ['id'],
                          ondelete='CASCADE')

    op.drop_constraint('node_attributes_node_id_fkey', 'node_attributes')
    op.create_foreign_key('node_attributes_node_id_fkey',
                          'node_attributes',
                          'nodes', ['node_id'], ['id'],
                          ondelete='CASCADE')
    # Introduce linux bonds
    upgrade_enum(
        'node_bond_interfaces',  # table
        'mode',  # column
        'bond_mode',  # ENUM name
        bond_modes_old,  # old options
        bond_modes_new,  # new options
    )
    # Add bond properties
    op.drop_column('node_bond_interfaces', 'flags')
    op.add_column(
        'node_bond_interfaces',
        sa.Column('bond_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    # Add interface properties
    op.add_column(
        'node_nic_interfaces',
        sa.Column('interface_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    op.add_column(
        'node_bond_interfaces',
        sa.Column('interface_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    move_orchestrator_data_to_attributes(connection)
    op.drop_table('release_orchestrator_data')

    # Plugins migrations
    op.add_column(
        'plugins',
        sa.Column('groups', fields.JSON(), nullable=False,
                  server_default='[]'))
    op.add_column(
        'plugins',
        sa.Column('authors',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
    op.add_column(
        'plugins',
        sa.Column('licenses',
                  fields.JSON(),
                  nullable=False,
                  server_default='[]'))
    op.add_column('plugins', sa.Column('homepage', sa.Text(), nullable=True))
예제 #21
0
def upgrade_node_labels():
    op.add_column(
        'nodes',
        sa.Column('labels', fields.JSON(), server_default='{}',
                  nullable=False))
예제 #22
0
def upgrade_cluster_plugins():
    op.alter_column('cluster_plugins', 'cluster_id', nullable=False)
    op.drop_constraint('cluster_plugins_cluster_id_fkey',
                       'cluster_plugins',
                       type_='foreignkey')
    op.create_foreign_key('cluster_plugins_cluster_id_fkey',
                          'cluster_plugins',
                          'clusters', ['cluster_id'], ['id'],
                          ondelete='CASCADE')
    op.add_column(
        'cluster_plugins',
        sa.Column('enabled',
                  sa.Boolean,
                  nullable=False,
                  server_default='false'))
    op.add_column(
        'cluster_plugins',
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    # Iterate over all editable cluster attributes,
    # and set entry in 'cluster_plugins' table

    connection = op.get_bind()

    q_get_plugins = sa.text('''
        SELECT id, name FROM plugins
    ''')
    q_get_cluster_attributes = sa.text('''
        SELECT cluster_id, editable FROM attributes
    ''')
    q_update_cluster_attributes = sa.text('''
        UPDATE attributes
        SET editable = :editable
        WHERE cluster_id = :cluster_id
    ''')
    q_get_cluster_plugins = sa.text('''
        SELECT id FROM cluster_plugins
        WHERE cluster_id = :cluster_id AND plugin_id = :plugin_id
    ''')
    q_update_cluster_plugins = sa.text('''
        UPDATE cluster_plugins
        SET enabled = :enabled, attributes = :attributes
        WHERE cluster_id = :cluster_id AND plugin_id = :plugin_id
    ''')
    q_insert_cluster_plugins = sa.text('''
        INSERT INTO cluster_plugins
            (cluster_id, plugin_id, enabled, attributes)
        VALUES
            (:cluster_id, :plugin_id, :enabled, :attributes)
    ''')

    plugins = list(connection.execute(q_get_plugins))
    for cluster_id, editable in connection.execute(q_get_cluster_attributes):
        editable = jsonutils.loads(editable)
        for plugin_id, plugin_name in plugins:
            if plugin_name in editable:
                attributes = editable.pop(plugin_name)
                metadata = attributes.pop('metadata')

                if connection.execute(q_get_cluster_plugins,
                                      cluster_id=cluster_id,
                                      plugin_id=plugin_id).first():
                    action = q_update_cluster_plugins
                else:
                    action = q_insert_cluster_plugins

                connection.execute(action,
                                   cluster_id=cluster_id,
                                   plugin_id=plugin_id,
                                   enabled=metadata['enabled'],
                                   attributes=jsonutils.dumps(attributes))
        connection.execute(q_update_cluster_attributes,
                           cluster_id=cluster_id,
                           editable=jsonutils.dumps(editable))
예제 #23
0
def upgrade_deployment_history_summary():
    op.add_column(
        'deployment_history',
        sa.Column('summary', fields.JSON(), nullable=True,
                  server_default='{}'))
예제 #24
0
def extend_releases_model_upgrade():
    op.add_column(
        'releases',
        sa.Column('network_roles_metadata', fields.JSON(),
                  server_default='[]'))
예제 #25
0
def upgrade_plugin_with_nics_and_nodes_attributes():
    op.add_column(
        'plugins',
        sa.Column('nic_attributes_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'plugins',
        sa.Column('bond_attributes_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'plugins',
        sa.Column('node_attributes_metadata',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'node_nic_interfaces',
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'node_nic_interfaces',
        sa.Column('meta', fields.JSON(), nullable=False, server_default='{}'))

    op.add_column(
        'node_bond_interfaces',
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'releases',
        sa.Column('nic_attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.add_column(
        'releases',
        sa.Column('bond_attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.create_table(
        'node_nic_interface_cluster_plugins',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'),
        sa.Column('cluster_plugin_id', sa.Integer(), nullable=False),
        sa.Column('interface_id', sa.Integer(), nullable=False),
        sa.Column('node_id', sa.Integer(), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.ForeignKeyConstraint(['cluster_plugin_id'], ['cluster_plugins.id'],
                                ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['interface_id'], ['node_nic_interfaces.id'],
                                ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['node_id'], ['nodes.id'], ondelete='CASCADE'))

    op.create_table(
        'node_bond_interface_cluster_plugins',
        sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'),
        sa.Column('cluster_plugin_id', sa.Integer(), nullable=False),
        sa.Column('bond_id', sa.Integer(), nullable=False),
        sa.Column('node_id', sa.Integer(), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.ForeignKeyConstraint(['cluster_plugin_id'], ['cluster_plugins.id'],
                                ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['bond_id'], ['node_bond_interfaces.id'],
                                ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['node_id'], ['nodes.id'], ondelete='CASCADE'))

    op.create_table(
        'node_cluster_plugins', sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('attributes',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'),
        sa.Column('cluster_plugin_id', sa.Integer(), nullable=False),
        sa.Column('node_id', sa.Integer(), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.ForeignKeyConstraint(['cluster_plugin_id'], ['cluster_plugins.id'],
                                ondelete='CASCADE'),
        sa.ForeignKeyConstraint(['node_id'], ['nodes.id'], ondelete='CASCADE'))
예제 #26
0
def upgrade_schema():
    op.add_column(
        'releases',
        sa.Column(
            'is_deployable',
            sa.Boolean(),
            nullable=False,
            server_default='true',
        ))
    op.add_column('node_nic_interfaces',
                  sa.Column('driver', sa.Text(), nullable=True))
    op.add_column('node_nic_interfaces',
                  sa.Column('bus_info', sa.Text(), nullable=True))

    op.drop_column('node_bond_interfaces', 'flags')
    op.add_column(
        'node_bond_interfaces',
        sa.Column('bond_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    # Add interface properties
    op.add_column(
        'node_nic_interfaces',
        sa.Column('interface_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))
    op.add_column(
        'node_bond_interfaces',
        sa.Column('interface_properties',
                  fields.JSON(),
                  nullable=False,
                  server_default='{}'))

    op.create_table(
        'action_logs', sa.Column('id', sa.Integer, nullable=False),
        sa.Column('actor_id', sa.String(length=64), nullable=True),
        sa.Column('action_group', sa.String(length=64), nullable=False),
        sa.Column('action_name', sa.String(length=64), nullable=False),
        sa.Column('action_type',
                  sa.Enum('http_request', 'nailgun_task', name='action_type'),
                  nullable=False),
        sa.Column('start_timestamp', sa.DateTime, nullable=False),
        sa.Column('end_timestamp', sa.DateTime, nullable=True),
        sa.Column('is_sent', sa.Boolean, default=False),
        sa.Column('additional_info', JSON(), nullable=False),
        sa.Column('cluster_id', sa.Integer, nullable=True),
        sa.Column('task_uuid', sa.String(36), nullable=True),
        sa.PrimaryKeyConstraint('id'))
    op.create_table(
        'master_node_settings', sa.Column('id', sa.Integer, nullable=False),
        sa.Column('master_node_uid', sa.String(36), nullable=False),
        sa.Column('settings', JSON(), default={}),
        sa.PrimaryKeyConstraint('id'))
    op.create_table(
        'plugins', sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('name', sa.String(length=100), nullable=False),
        sa.Column('title', sa.String(length=100), nullable=False),
        sa.Column('version', sa.String(length=32), nullable=False),
        sa.Column('description', sa.String(length=400), nullable=True),
        sa.Column('releases', JSON(), nullable=True),
        sa.Column('fuel_version', JSON(), nullable=True),
        sa.Column('package_version', sa.String(length=32), nullable=False),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('name', 'version', name='_name_version_unique'))
    op.create_table(
        'cluster_plugins', sa.Column('id', sa.Integer(), nullable=False),
        sa.Column('plugin_id', sa.Integer(), nullable=False),
        sa.Column('cluster_id', sa.Integer(), nullable=True),
        sa.ForeignKeyConstraint(
            ['cluster_id'],
            ['clusters.id'],
        ),
        sa.ForeignKeyConstraint(['plugin_id'], ['plugins.id'],
                                ondelete='CASCADE'),
        sa.PrimaryKeyConstraint('id'))
    op.create_table('nodegroups', sa.Column('id', sa.Integer(),
                                            nullable=False),
                    sa.Column('cluster_id', sa.Integer(), nullable=True),
                    sa.Column('name', sa.String(length=50), nullable=False),
                    sa.ForeignKeyConstraint(['cluster_id'], ['clusters.id']),
                    sa.PrimaryKeyConstraint('id'))
    op.create_unique_constraint(None, 'clusters', ['name'])
    op.add_column('network_groups',
                  sa.Column('group_id', sa.Integer(), nullable=True))

    op.add_column('nodes', sa.Column('group_id', sa.Integer(), nullable=True))

    # We need this code here because the "upgrade_node_groups" function
    # relies on "cluster_id" column from "network_groups" table.
    connection = op.get_bind()
    upgrade_node_groups(connection)

    op.drop_column('network_groups', 'cluster_id')
    op.add_column(
        'node_roles',
        sa.Column('primary',
                  sa.Boolean(),
                  nullable=False,
                  server_default='false'))
    op.add_column(
        'pending_node_roles',
        sa.Column('primary',
                  sa.Boolean(),
                  nullable=False,
                  server_default='false'))

    upgrade_enum(
        'node_bond_interfaces',  # table
        'mode',  # column
        'bond_mode',  # ENUM name
        bond_modes_old,  # old options
        bond_modes_new,  # new options
    )
예제 #27
0
def upgrade_tasks_snapshot():
    op.add_column('tasks',
                  sa.Column('tasks_snapshot', fields.JSON(), nullable=True))