sqlmig: support des profils

This commit is contained in:
Jephté Clain 2018-05-04 10:13:21 +04:00
parent 66e1674c00
commit e493b49811
2 changed files with 62 additions and 9 deletions

7
lib/default/sqlmig Normal file
View File

@ -0,0 +1,7 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Mode par défaut: prod ou devel
#MODE=auto
# Répertoire des profils
#PROFILEDIR=/etc/sqlmig

64
sqlmig
View File

@ -39,6 +39,16 @@ OPTIONS
Les options --sid et --nls-lang ne sont valides que pour Oracle. Ces
valeurs remplacent les valeurs par défaut chargées depuis ora.conf
--profile PROFILE
-P, --prod
-T, --test
Activer le profil spécifié. Les options -P et -T sont des aliases pour
les options --profile prod et --profile test respectivement.
Quand un profil est activé, les fichiers de configuration par défaut
deviennent respectivement \$PROFILE-my.cnf et \$PROFILE-ora.conf au lieu
de my.cnf et ora.conf. De plus, ces fichiers sont aussi recherchés dans
le répertoire /etc/sqlmig
--mysql
--oracle
Spécifier le type de base de données à gérer. Par défaut, on gère une
@ -288,11 +298,24 @@ function mysql_after_update() {
fi
}
function mysql_set_adminargs() {
function mysql_get_defaults() {
local dir="$1"
if [ -z "$profile" ]; then
echo "$dir/my.cnf"
elif [ -f "$dir/${profile}-my.cnf" ]; then
echo "$dir/${profile}-my.cnf"
elif [ -f "$PROFILEDIR/${profile}-my.cnf" ]; then
echo "$PROFILEDIR/${profile}-my.cnf"
else
echo "$dir/my.cnf"
fi
}
function mysql_set_adminargs() {
local dir="$1" defaults
adminargs=()
if [ -f "$dir/my.cnf" ]; then
array_add adminargs --defaults-file="$dir/my.cnf"
setx defaults=mysql_get_defaults
if [ -f "$defaults" ]; then
array_add adminargs --defaults-file="$defaults"
if [ -n "$admindefaults" ]; then
array_add adminargs --defaults-extra-file="$admindefaults"
fi
@ -302,10 +325,11 @@ function mysql_set_adminargs() {
[ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8
}
function mysql_set_userargs() {
local dir="$1" dbname="$2"
local dir="$1" dbname="$2" defaults
userargs=()
if [ -f "$dir/my.cnf" ]; then
array_add userargs --defaults-file="$dir/my.cnf"
setx defaults=mysql_get_defaults
if [ -f "$defaults" ]; then
array_add userargs --defaults-file="$defaults"
if [ -n "$userdefaults" ]; then
array_add userargs --defaults-extra-file="$userdefaults"
elif [ -f "$dir/my-${dbname}.cnf" ]; then
@ -573,10 +597,23 @@ function oracle_ensure_opdir() {
>"$SQLMIGLOG"
fi
}
function oracle_get_defaults() {
local dir="$1"
if [ -z "$profile" ]; then
echo "$dir/ora.conf"
elif [ -f "$dir/${profile}-ora.conf" ]; then
echo "$dir/${profile}-ora.conf"
elif [ -f "$PROFILEDIR/${profile}-ora.conf" ]; then
echo "$PROFILEDIR/${profile}-ora.conf"
else
echo "$dir/ora.conf"
fi
}
function oracle_source_adminconf() {
local dir="$1"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
[ -f "$dir/ora.conf" ] && source "$dir/ora.conf"
setx defaults=oracle_get_defaults
[ -f "$defaults" ] && source "$defaults"
[ -n "$admindefaults" ] && {
source "$admindefaults" || die
}
@ -594,7 +631,8 @@ function oracle_source_adminconf() {
function oracle_source_userconf() {
local dir="$1" dbname="$2"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG
[ -f "$dir/ora.conf" ] && source "$dir/ora.conf"
setx defaults=oracle_get_defaults
[ -f "$defaults" ] && source "$defaults"
[ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf"
[ -n "$userdefaults" ] && {
source "$userdefaults" || die
@ -644,6 +682,10 @@ function oracle_user_update() {
################################################################################
MODE=auto
PROFILEDIR=/etc/sqlmig
set_defaults sqlmig
admindefaults=
userdefaults=
user=
@ -655,6 +697,7 @@ socket=
charset=
oracle_sid=
nls_lang=
profile=
type=auto
action=update
updatedir=
@ -662,7 +705,7 @@ exportdir=
dbdir=
dbname=
force=
mode=auto
mode="$MODE"
drop=
drop_only=
create_only=
@ -678,6 +721,9 @@ args=(
--character-set: charset=
-s:,--oracle-sid: oracle_sid=
--nls-lang: nls_lang=
--profile: profile=
-P,--prod profile=prod
-T,--test profile=test
--mysql type=mysql
--oracle type=oracle
-0,--init action=init