mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-16 23:35:20 +01:00
Merge pull request #5112 from wy65701436/migrate-clair
Add clair data migration in DB migrator
This commit is contained in:
commit
bb847ce745
@ -23,6 +23,7 @@ set -e
|
|||||||
ISMYSQL=false
|
ISMYSQL=false
|
||||||
ISPGSQL=false
|
ISPGSQL=false
|
||||||
ISNOTARY=false
|
ISNOTARY=false
|
||||||
|
ISCLAIR=false
|
||||||
|
|
||||||
cur_version=""
|
cur_version=""
|
||||||
PGSQL_USR="postgres"
|
PGSQL_USR="postgres"
|
||||||
@ -45,6 +46,10 @@ function init {
|
|||||||
ISPGSQL=true
|
ISPGSQL=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -d "/clair-db" ]; then
|
||||||
|
ISCLAIR=true
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $ISMYSQL == false ] && [ $ISPGSQL == false ]; then
|
if [ $ISMYSQL == false ] && [ $ISPGSQL == false ]; then
|
||||||
echo "No database has been mounted for the migration. Use '-v' to set it in 'docker run'."
|
echo "No database has been mounted for the migration. Use '-v' to set it in 'docker run'."
|
||||||
exit 1
|
exit 1
|
||||||
@ -65,7 +70,11 @@ function init {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $ISPGSQL == true ]; then
|
if [ $ISPGSQL == true ]; then
|
||||||
launch_pgsql $PGSQL_USR
|
if [ $ISCLAIR == true ]; then
|
||||||
|
launch_pgsql $PGSQL_USR "/clair-db"
|
||||||
|
else
|
||||||
|
launch_pgsql $PGSQL_USR
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,6 +139,8 @@ function validate {
|
|||||||
function upgrade {
|
function upgrade {
|
||||||
if [ $ISNOTARY == true ];then
|
if [ $ISNOTARY == true ];then
|
||||||
up_notary $PGSQL_USR
|
up_notary $PGSQL_USR
|
||||||
|
elif [ $ISCLAIR == true ];then
|
||||||
|
up_clair $PGSQL_USR
|
||||||
else
|
else
|
||||||
up_harbor $1
|
up_harbor $1
|
||||||
fi
|
fi
|
||||||
|
@ -55,7 +55,7 @@ function up_notary {
|
|||||||
WARNING: Notary migration will only allow anyone haven't migrated notary or
|
WARNING: Notary migration will only allow anyone haven't migrated notary or
|
||||||
launched harbor yet.
|
launched harbor yet.
|
||||||
If you want to migrate notary data, please delete all the notaryserver
|
If you want to migrate notary data, please delete all the notaryserver
|
||||||
and notarysigner DB tables in pgsql manually fistly.
|
and notarysigner DB tables in pgsql manually firstly.
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
EOF
|
EOF
|
||||||
exit 0
|
exit 0
|
||||||
@ -80,3 +80,35 @@ EOF
|
|||||||
stop_pgsql $1
|
stop_pgsql $1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function up_clair {
|
||||||
|
# clair DB info: user: 'postgres' database: 'postgres'
|
||||||
|
|
||||||
|
set +e
|
||||||
|
if [[ $(psql -U $1 -d postgres -t -c "select count(*) from vulnerability;") -eq 0 ]]; then
|
||||||
|
echo "no vulnerability data needs to be updated."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
pg_dump -U postgres postgres > /harbor-migration/db/schema/clair.pgsql
|
||||||
|
stop_pgsql postgres "/clair-db"
|
||||||
|
|
||||||
|
# it's harbor DB on pgsql.
|
||||||
|
launch_pgsql $1
|
||||||
|
## it's not a clean clair db, so cannot execute the import step.
|
||||||
|
## fail at here to call user to clean DB, then to run clair db migration.
|
||||||
|
if [[ $(psql -U $1 -d postgres -t -c "select count(*) from pg_tables where schemaname='public';") -ne 0 ]]; then
|
||||||
|
cat >&2 <<-EOF
|
||||||
|
*******************************************************************************
|
||||||
|
WARNING: Clair migration will only allow anyone haven't migrated clair or
|
||||||
|
launched harbor yet.
|
||||||
|
If you want to migrate clair data, please delete all the clair DB tables
|
||||||
|
in pgsql manually firstly.
|
||||||
|
*******************************************************************************
|
||||||
|
EOF
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
set -e
|
||||||
|
psql -U $1 -f /harbor-migration/db/schema/clair.pgsql
|
||||||
|
stop_pgsql $1
|
||||||
|
fi
|
||||||
|
}
|
@ -41,16 +41,20 @@ if [ "${1:0:1}" = '-' ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
function launch_pgsql {
|
function launch_pgsql {
|
||||||
|
local pg_data=$2
|
||||||
|
if [ -z $2 ]; then
|
||||||
|
pg_data=$PGDATA
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$1" = 'postgres' ]; then
|
if [ "$1" = 'postgres' ]; then
|
||||||
chown -R postgres:postgres $PGDATA
|
chown -R postgres:postgres $pg_data
|
||||||
# look specifically for PG_VERSION, as it is expected in the DB dir
|
# look specifically for PG_VERSION, as it is expected in the DB dir
|
||||||
if [ ! -s "$PGDATA/PG_VERSION" ]; then
|
if [ ! -s "$pg_data/PG_VERSION" ]; then
|
||||||
file_env 'POSTGRES_INITDB_ARGS'
|
file_env 'POSTGRES_INITDB_ARGS'
|
||||||
if [ "$POSTGRES_INITDB_XLOGDIR" ]; then
|
if [ "$POSTGRES_INITDB_XLOGDIR" ]; then
|
||||||
export POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS --xlogdir $POSTGRES_INITDB_XLOGDIR"
|
export POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS --xlogdir $POSTGRES_INITDB_XLOGDIR"
|
||||||
fi
|
fi
|
||||||
su - $1 -c "initdb -D $PGDATA -U postgres -E UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8 $POSTGRES_INITDB_ARGS"
|
su - $1 -c "initdb -D $pg_data -U postgres -E UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8 $POSTGRES_INITDB_ARGS"
|
||||||
# check password first so we can output the warning before postgres
|
# check password first so we can output the warning before postgres
|
||||||
# messes it up
|
# messes it up
|
||||||
file_env 'POSTGRES_PASSWORD'
|
file_env 'POSTGRES_PASSWORD'
|
||||||
@ -66,10 +70,10 @@ function launch_pgsql {
|
|||||||
{
|
{
|
||||||
echo
|
echo
|
||||||
echo "host all all all $authMethod"
|
echo "host all all all $authMethod"
|
||||||
} >> "$PGDATA/pg_hba.conf"
|
} >> "$pg_data/pg_hba.conf"
|
||||||
# internal start of server in order to allow set-up using psql-client
|
# internal start of server in order to allow set-up using psql-client
|
||||||
# does not listen on external TCP/IP and waits until start finishes
|
# does not listen on external TCP/IP and waits until start finishes
|
||||||
su - $1 -c "pg_ctl -D \"$PGDATA\" -o \"-c listen_addresses='localhost'\" -w start"
|
su - $1 -c "pg_ctl -D \"$pg_data\" -o \"-c listen_addresses='localhost'\" -w start"
|
||||||
|
|
||||||
file_env 'POSTGRES_USER' 'postgres'
|
file_env 'POSTGRES_USER' 'postgres'
|
||||||
file_env 'POSTGRES_DB' "$POSTGRES_USER"
|
file_env 'POSTGRES_DB' "$POSTGRES_USER"
|
||||||
@ -107,19 +111,23 @@ EOSQL
|
|||||||
done
|
done
|
||||||
|
|
||||||
#PGUSER="${PGUSER:-postgres}" \
|
#PGUSER="${PGUSER:-postgres}" \
|
||||||
#su - $1 -c "pg_ctl -D \"$PGDATA\" -m fast -w stop"
|
#su - $1 -c "pg_ctl -D \"$pg_data\" -m fast -w stop"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo 'PostgreSQL init process complete; ready for start up.'
|
echo 'PostgreSQL init process complete; ready for start up.'
|
||||||
echo
|
echo
|
||||||
else
|
else
|
||||||
su - $PGSQL_USR -c "pg_ctl -D \"$PGDATA\" -o \"-c listen_addresses='localhost'\" -w start"
|
su - $PGSQL_USR -c "pg_ctl -D \"$pg_data\" -o \"-c listen_addresses='localhost'\" -w start"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function stop_pgsql {
|
function stop_pgsql {
|
||||||
su - $1 -c "pg_ctl -D \"/var/lib/postgresql/data\" -w stop"
|
local pg_data=$2
|
||||||
|
if [ -z $2 ]; then
|
||||||
|
pg_data=$PGDATA
|
||||||
|
fi
|
||||||
|
su - $1 -c "pg_ctl -D \"$pg_data\" -w stop"
|
||||||
}
|
}
|
||||||
|
|
||||||
function get_version_pgsql {
|
function get_version_pgsql {
|
||||||
|
Loading…
Reference in New Issue
Block a user