diff options
author | guillaume.lambert <guillaume.lambert@orange.com> | 2021-12-07 20:21:17 +0100 |
---|---|---|
committer | guillaume.lambert <guillaume.lambert@orange.com> | 2021-12-08 13:59:00 +0100 |
commit | f657a816b9074f5bf2b3d300d93266269c1f05a5 (patch) | |
tree | f639250c0375d2e8a7017e694342e38809155530 /kubernetes/portal/components/portal-mariadb | |
parent | 370c6dc33e55bfee7b3b79bcc21481b02a3f1e24 (diff) |
[COMMON] Fix "local var=XX" bashisms
Variable attribute 'local' is not POSIX but is LSB supported.
It is available in other shells such as ash or dash.
And in ksh, local is the default scope of functions vaiables.
Though, the syntax "local var=XX" is only supported and found in bash.
Sadly, this is not detected by checkbashims.
- fix "local var=XX" bashisms
- add a manual command in tox.ini to detect them in the CI
https://wiki.ubuntu.com/DashAsBinSh#local
https://wiki.ubuntu.com/DashAsBinSh#declare_or_typeset
https://stackoverflow.com/questions/12000949/scope-of-variables-in-ksh
Issue-ID: OOM-2643
Signed-off-by: guillaume.lambert <guillaume.lambert@orange.com>
Change-Id: Iff26e50cd352eeb760d923a4740a6f92184fe0f2
Diffstat (limited to 'kubernetes/portal/components/portal-mariadb')
-rw-r--r-- | kubernetes/portal/components/portal-mariadb/resources/config/mariadb/docker-entrypoint.sh | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/kubernetes/portal/components/portal-mariadb/resources/config/mariadb/docker-entrypoint.sh b/kubernetes/portal/components/portal-mariadb/resources/config/mariadb/docker-entrypoint.sh index a363ab3bb0..fe496bc47d 100644 --- a/kubernetes/portal/components/portal-mariadb/resources/config/mariadb/docker-entrypoint.sh +++ b/kubernetes/portal/components/portal-mariadb/resources/config/mariadb/docker-entrypoint.sh @@ -5,7 +5,8 @@ shopt -s nullglob # logging functions mysql_log() { - local type="$1"; shift + local type + type="$1"; shift printf '%s [%s] [Entrypoint]: %s\n' "$(date --rfc-3339=seconds)" "$type" "$*" } mysql_note() { @@ -24,13 +25,17 @@ mysql_error() { # (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of # "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" + local var + var="$1" + local fileVar + fileVar="${var}_FILE" + local def + def="${2:-}" if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then mysql_error "Both $var and $fileVar are set (but are exclusive)" fi - local val="$def" + local val + val="$def" # val="${!var}" # val="$(< "${!fileVar}")" # eval replacement of the bashism equivalents above presents no security issue here @@ -85,7 +90,9 @@ docker_process_init_files() { } mysql_check_config() { - local toRun=( "$@" --verbose --help --log-bin-index="$(mktemp -u)" ) errors + local toRun + local errors + toRun=( "$@" --verbose --help --log-bin-index="$(mktemp -u)" ) if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then mysql_error "$(printf 'mysqld failed while attempting to check config\n\tcommand was: ')${toRun[*]}$(printf'\n\t')$errors" fi @@ -95,7 +102,8 @@ mysql_check_config() { # We use mysqld --verbose --help instead of my_print_defaults because the # latter only show values present in config files, and not server defaults mysql_get_config() { - local conf="$1"; shift + local conf + conf="$1"; shift "$@" --verbose --help --log-bin-index="$(mktemp -u)" 2>/dev/null \ | awk -v conf="$conf" '$1 == conf && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }' # match "datadir /some/path with/spaces in/it here" but not "--xyz=abc\n datadir (xyz)" @@ -141,7 +149,8 @@ docker_verify_minimum_env() { # creates folders for the database # also ensures permission for user mysql of run as root docker_create_db_directories() { - local user; user="$(id -u)" + local user + user="$(id -u)" # TODO other directories that are used by default? like /var/lib/mysql-files # see https://github.com/docker-library/mysql/issues/562 @@ -216,7 +225,8 @@ docker_setup_db() { # Aria in 10.4+ is slow due to "transactional" (crash safety) # https://jira.mariadb.org/browse/MDEV-23326 # https://github.com/docker-library/mariadb/issues/262 - local tztables=( time_zone time_zone_leap_second time_zone_name time_zone_transition time_zone_transition_type ) + local tztables + tztables=( time_zone time_zone_leap_second time_zone_name time_zone_transition time_zone_transition_type ) for table in "${tztables[@]}"; do echo "/*!100400 ALTER TABLE $table TRANSACTIONAL=0 */;" done @@ -237,7 +247,8 @@ docker_setup_db() { mysql_note "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD" fi # Sets root password and creates root users for non-localhost hosts - local rootCreate= + local rootCreate + rootCreate= # default root to listen for connections from anywhere if [ -n "$MYSQL_ROOT_HOST" ] && [ "$MYSQL_ROOT_HOST" != 'localhost' ]; then # no, we don't care if read finds a terminating character in this heredoc |