This tool was used while building the compact-db-migrations-wallaby series during Wallaby [1]. It might be helpful in the future, so commit it now. Change-Id: Idd556fac96ce621ad095862597c4f11851852fed Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
		
			
				
	
	
		
			124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
#
 | 
						|
# Script to generate schemas for the various versions.
 | 
						|
#
 | 
						|
# Some setup is required, similar to the opportunistic tests.
 | 
						|
#
 | 
						|
# MySQL ->
 | 
						|
#
 | 
						|
# $ mysql -uroot
 | 
						|
# MariaDB [(none)]> CREATE DATABASE nova
 | 
						|
# MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'password';
 | 
						|
# MariaDB [(none)]> quit;
 | 
						|
#
 | 
						|
# Postgres ->
 | 
						|
#
 | 
						|
# $ sudo -u postgres psql
 | 
						|
# postgres=# create user nova with createdb login password 'password';
 | 
						|
# postgres=# create database nova with owner nova;
 | 
						|
# postgres=# quit;
 | 
						|
#
 | 
						|
# Note that you may also have to configure 'pg_hba.conf' to use password-based
 | 
						|
# auth instead of "ident", if you haven't done so already. You can locate this
 | 
						|
# with 'locate pg_hba.conf'. More details at
 | 
						|
# https://ubuntu.com/server/docs/databases-postgresql
 | 
						|
 | 
						|
set -o xtrace
 | 
						|
set -e
 | 
						|
 | 
						|
source .tox/py36/bin/activate
 | 
						|
pushd nova/db/sqlalchemy/migrate_repo
 | 
						|
 | 
						|
INIT_VERSION=$(ls -1 versions/ | head -1 | awk -F_ '{print $1}')
 | 
						|
INIT_VERSION=$(($INIT_VERSION-1))
 | 
						|
 | 
						|
echo "Detected init version of $INIT_VERSION"
 | 
						|
 | 
						|
mkdir -p schemas
 | 
						|
rm -f "schemas/$INIT_VERSION-*.sql"
 | 
						|
 | 
						|
#
 | 
						|
# sqlite
 | 
						|
#
 | 
						|
 | 
						|
# cleanup from previous runs
 | 
						|
 | 
						|
rm -f nova.db
 | 
						|
 | 
						|
# sync schema
 | 
						|
 | 
						|
python manage.py version_control \
 | 
						|
    --database 'sqlite:///nova.db' \
 | 
						|
    --version $INIT_VERSION
 | 
						|
 | 
						|
python manage.py upgrade \
 | 
						|
    --database 'sqlite:///nova.db'
 | 
						|
 | 
						|
# dump the schema
 | 
						|
 | 
						|
sqlite3 nova.db << EOF
 | 
						|
.output "schemas/${INIT_VERSION}-sqlite.sql"
 | 
						|
.schema
 | 
						|
.quit
 | 
						|
EOF
 | 
						|
 | 
						|
rm -f nova.db
 | 
						|
 | 
						|
#
 | 
						|
# mysql
 | 
						|
#
 | 
						|
 | 
						|
# cleanup from previous runs
 | 
						|
 | 
						|
mysql -u nova -ppassword << EOF
 | 
						|
DROP DATABASE IF EXISTS nova;
 | 
						|
CREATE DATABASE nova;
 | 
						|
EOF
 | 
						|
 | 
						|
# sync schema
 | 
						|
 | 
						|
python manage.py version_control \
 | 
						|
    --database 'mysql+pymysql://nova:password@localhost/nova' \
 | 
						|
    --version "$INIT_VERSION"
 | 
						|
 | 
						|
python manage.py upgrade \
 | 
						|
    --database 'mysql+pymysql://nova:password@localhost/nova'
 | 
						|
 | 
						|
# dump the schema
 | 
						|
 | 
						|
mysqldump --no-data --skip-comments -u nova -ppassword \
 | 
						|
    nova > "schemas/${INIT_VERSION}-mysql.sql"
 | 
						|
 | 
						|
mysql -u nova -ppassword << EOF
 | 
						|
DROP DATABASE IF EXISTS nova;
 | 
						|
EOF
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# postgres
 | 
						|
#
 | 
						|
 | 
						|
# cleanup from previous runs
 | 
						|
 | 
						|
sudo -u postgres dropdb --if-exists nova
 | 
						|
sudo -u postgres createdb --owner=nova nova
 | 
						|
 | 
						|
# sync to initial version
 | 
						|
 | 
						|
python manage.py version_control \
 | 
						|
    --database 'postgresql://nova:password@localhost/nova' \
 | 
						|
    --version "$INIT_VERSION"
 | 
						|
 | 
						|
python manage.py upgrade \
 | 
						|
    --database 'postgresql://nova:password@localhost/nova'
 | 
						|
 | 
						|
# dump the schema
 | 
						|
 | 
						|
pg_dump postgresql://nova:password@localhost/nova \
 | 
						|
    --schema-only > "schemas/${INIT_VERSION}-postgres.sql"
 | 
						|
 | 
						|
sudo -u postgres dropdb --if-exists nova
 | 
						|
 | 
						|
popd
 | 
						|
deactivate
 |