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='[]'))
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')
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='[]'))
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))
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='[]'))
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))
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='{}'), )
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))
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), )
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)
def vms_conf_upgrade(): op.add_column( 'node_attributes', sa.Column('vms_conf', fields.JSON(), nullable=False, server_default='[]'))
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')
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)
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'))
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='[]'))
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']))
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'))
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')
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')
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))
def upgrade_node_labels(): op.add_column( 'nodes', sa.Column('labels', fields.JSON(), server_default='{}', nullable=False))
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))
def upgrade_deployment_history_summary(): op.add_column( 'deployment_history', sa.Column('summary', fields.JSON(), nullable=True, server_default='{}'))
def extend_releases_model_upgrade(): op.add_column( 'releases', sa.Column('network_roles_metadata', fields.JSON(), server_default='[]'))
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'))
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 )
def upgrade_tasks_snapshot(): op.add_column('tasks', sa.Column('tasks_snapshot', fields.JSON(), nullable=True))