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 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 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 --mysql
--oracle --oracle
Spécifier le type de base de données à gérer. Par défaut, on gère une 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 fi
} }
function mysql_set_adminargs() { function mysql_get_defaults() {
local dir="$1" 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=() adminargs=()
if [ -f "$dir/my.cnf" ]; then setx defaults=mysql_get_defaults
array_add adminargs --defaults-file="$dir/my.cnf" if [ -f "$defaults" ]; then
array_add adminargs --defaults-file="$defaults"
if [ -n "$admindefaults" ]; then if [ -n "$admindefaults" ]; then
array_add adminargs --defaults-extra-file="$admindefaults" array_add adminargs --defaults-extra-file="$admindefaults"
fi fi
@ -302,10 +325,11 @@ function mysql_set_adminargs() {
[ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8 [ ${#adminargs[*]} -gt 0 ] || array_add adminargs --default-character-set utf8
} }
function mysql_set_userargs() { function mysql_set_userargs() {
local dir="$1" dbname="$2" local dir="$1" dbname="$2" defaults
userargs=() userargs=()
if [ -f "$dir/my.cnf" ]; then setx defaults=mysql_get_defaults
array_add userargs --defaults-file="$dir/my.cnf" if [ -f "$defaults" ]; then
array_add userargs --defaults-file="$defaults"
if [ -n "$userdefaults" ]; then if [ -n "$userdefaults" ]; then
array_add userargs --defaults-extra-file="$userdefaults" array_add userargs --defaults-extra-file="$userdefaults"
elif [ -f "$dir/my-${dbname}.cnf" ]; then elif [ -f "$dir/my-${dbname}.cnf" ]; then
@ -573,10 +597,23 @@ function oracle_ensure_opdir() {
>"$SQLMIGLOG" >"$SQLMIGLOG"
fi 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() { function oracle_source_adminconf() {
local dir="$1" local dir="$1"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG 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" ] && { [ -n "$admindefaults" ] && {
source "$admindefaults" || die source "$admindefaults" || die
} }
@ -594,7 +631,8 @@ function oracle_source_adminconf() {
function oracle_source_userconf() { function oracle_source_userconf() {
local dir="$1" dbname="$2" local dir="$1" dbname="$2"
unset ORACLE_SID NLS_LANG ADMINCONNECT USERCONNECT SQLMIGLOG 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" [ -f "$dir/ora-${dbname}.conf" ] && source "$dir/ora-${dbname}.conf"
[ -n "$userdefaults" ] && { [ -n "$userdefaults" ] && {
source "$userdefaults" || die source "$userdefaults" || die
@ -644,6 +682,10 @@ function oracle_user_update() {
################################################################################ ################################################################################
MODE=auto
PROFILEDIR=/etc/sqlmig
set_defaults sqlmig
admindefaults= admindefaults=
userdefaults= userdefaults=
user= user=
@ -655,6 +697,7 @@ socket=
charset= charset=
oracle_sid= oracle_sid=
nls_lang= nls_lang=
profile=
type=auto type=auto
action=update action=update
updatedir= updatedir=
@ -662,7 +705,7 @@ exportdir=
dbdir= dbdir=
dbname= dbname=
force= force=
mode=auto mode="$MODE"
drop= drop=
drop_only= drop_only=
create_only= create_only=
@ -678,6 +721,9 @@ args=(
--character-set: charset= --character-set: charset=
-s:,--oracle-sid: oracle_sid= -s:,--oracle-sid: oracle_sid=
--nls-lang: nls_lang= --nls-lang: nls_lang=
--profile: profile=
-P,--prod profile=prod
-T,--test profile=test
--mysql type=mysql --mysql type=mysql
--oracle type=oracle --oracle type=oracle
-0,--init action=init -0,--init action=init