From e493b498110c5e454346a3dc97cb067278bfdca7 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Fri, 4 May 2018 10:13:21 +0400 Subject: [PATCH] sqlmig: support des profils --- lib/default/sqlmig | 7 +++++ sqlmig | 64 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 lib/default/sqlmig diff --git a/lib/default/sqlmig b/lib/default/sqlmig new file mode 100644 index 0000000..19a988e --- /dev/null +++ b/lib/default/sqlmig @@ -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 diff --git a/sqlmig b/sqlmig index 683c80c..eb2a05f 100755 --- a/sqlmig +++ b/sqlmig @@ -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