From a609fee7551d426cda81620f1d30c525ab73a0b8 Mon Sep 17 00:00:00 2001 From: Tom Scavo Date: Wed, 10 May 2017 17:38:56 -0400 Subject: [PATCH] Refactor bootstrap and init processes using arrays --- bin/process_export_aggregate.sh | 97 ++++++++++++++++++++---------- bin/process_main_aggregate.sh | 101 +++++++++++++++++++++----------- 2 files changed, 132 insertions(+), 66 deletions(-) diff --git a/bin/process_export_aggregate.sh b/bin/process_export_aggregate.sh index e7c5690..60179f4 100755 --- a/bin/process_export_aggregate.sh +++ b/bin/process_export_aggregate.sh @@ -25,8 +25,10 @@ display_help () { This script produces the following files from the InCommon export aggregate: - ${out_filenames[1]} - ${out_filenames[2]} + $( printf " %s\n" ${out_filenames[*]} ) + + The files will be written to the output directory specified on + the command line. The script is intended to be run as a cron job. It can (and should) be run often, to pick up the latest changes to metadata. @@ -58,6 +60,28 @@ display_help () { All of the above environment variables are REQUIRED except LOG_LEVEL, which defaults to LOG_LEVEL=3. + The following environment variables are REQUIRED: + + $( printf " %s\n" ${env_vars[*]} ) + + The following directories MUST exist: + + $( printf " %s\n" ${dir_paths[*]} ) + + The following files MUST exist: + + $( printf " %s\n" $LOG_FILE ) + + CONFIGURATION + + The following source library files MUST be installed in LIB_DIR: + + $( printf " %s\n" ${lib_filenames[*]} ) + + The following XSL scripts MUST be installed in LIB_DIR: + + $( printf " %s\n" ${xsl_filenames[*]} ) + EXAMPLES \$ out_dir=/home/htdocs/www.incommonfederation.org/federation/metadata/ @@ -71,29 +95,35 @@ HELP_MSG script_name=${0##*/} # equivalent to basename $0 -# required directories -env_vars="LIB_DIR -CACHE_DIR -TMPDIR" +# required environment variables +env_vars[1]="LIB_DIR" +env_vars[2]="CACHE_DIR" +env_vars[3]="TMPDIR" +env_vars[4]="LOG_FILE" -# check required directories -for env_var in $env_vars; do +# check environment variables +for env_var in ${env_vars[*]}; do eval "env_var_val=\${$env_var}" if [ -z "$env_var_val" ]; then echo "ERROR: $script_name requires env var $env_var" >&2 exit 2 fi - if [ ! -d "$env_var_val" ]; then - echo "ERROR: $script_name: directory does not exist: $env_var_val" >&2 +done + +# required directories +dir_paths[1]="$LIB_DIR" +dir_paths[2]="$CACHE_DIR" +dir_paths[3]="$TMPDIR" + +# check required directories +for dir_path in ${dir_paths[*]}; do + if [ ! -d "$dir_path" ]; then + echo "ERROR: $script_name: directory does not exist: $dir_path" >&2 exit 2 fi done # check the log file -if [ -z "$LOG_FILE" ]; then - echo "ERROR: $script_name requires env var LOG_FILE" >&2 - exit 2 -fi # devices such as /dev/tty and /dev/null are allowed if [ ! -f "$LOG_FILE" ] && [[ $LOG_FILE != /dev/* ]]; then echo "ERROR: $script_name: file does not exist: $LOG_FILE" >&2 @@ -105,14 +135,32 @@ if [ -z "$LOG_LEVEL" ]; then LOG_LEVEL=3 fi -# library filenames (always list core_lib first) -LIB_FILENAMES="core_lib.sh -http_tools.sh" +# source lib filenames +lib_filenames[1]="core_lib.sh" +lib_filenames[2]="http_tools.sh" + +# check lib files +for lib_filename in ${lib_filenames[*]}; do + lib_file="$LIB_DIR/$lib_filename" + if [ ! -f "$lib_file" ]; then + echo "ERROR: $script_name: lib file does not exist: $lib_file" >&2 + exit 2 + fi +done # XSL filenames xsl_filenames[1]="list_all_IdPs_csv.xsl" xsl_filenames[2]="list_all_SPs_csv.xsl" +# check XSL files +for i in ${!xsl_filenames[*]}; do + xsl_files[$i]=$LIB_DIR/${xsl_filenames[$i]} + if [ ! -f "${xsl_files[$i]}" ]; then + echo "ERROR: $script_name: lib file does not exist: ${xsl_files[$i]}" >&2 + exit 2 + fi +done + # output filenames out_filenames[1]="all-idps-exported.csv" out_filenames[2]="all-sps-exported.csv" @@ -172,12 +220,8 @@ fi ####################################################################### # source lib files -for lib_filename in $LIB_FILENAMES; do +for lib_filename in ${lib_filenames[*]}; do lib_file="$LIB_DIR/$lib_filename" - if [ ! -f "$lib_file" ]; then - echo "ERROR: $script_name: lib file does not exist: $lib_file" >&2 - exit 2 - fi source "$lib_file" status_code=$? if [ $status_code -ne 0 ]; then @@ -186,15 +230,6 @@ for lib_filename in $LIB_FILENAMES; do fi done -# XSL stylesheets must exist -for i in ${!xsl_filenames[*]}; do - xsl_files[$i]=$LIB_DIR/${xsl_filenames[$i]} - if [ ! -f "${xsl_files[$i]}" ]; then - echo "ERROR: $script_name: lib file does not exist: ${xsl_files[$i]}" >&2 - exit 2 - fi -done - # create a temporary subdirectory tmp_dir="${TMPDIR%%/}/${script_name%%.*}_$$" /bin/mkdir "$tmp_dir" diff --git a/bin/process_main_aggregate.sh b/bin/process_main_aggregate.sh index 26750e1..ead8546 100755 --- a/bin/process_main_aggregate.sh +++ b/bin/process_main_aggregate.sh @@ -25,12 +25,10 @@ display_help () { This script produces the following files from the InCommon main aggregate: - ${out_filenames[1]} - ${out_filenames[2]} - ${out_filenames[3]} - ${out_filenames[4]} - ${out_filenames[5]} - ${out_filenames[6]} + $( printf " %s\n" ${out_filenames[*]} ) + + The files will be written to the output directory specified on + the command line. The script is intended to be run as a cron job. It can (and should) be run often, to pick up the latest changes to metadata. @@ -62,6 +60,28 @@ display_help () { All of the above environment variables are REQUIRED except LOG_LEVEL, which defaults to LOG_LEVEL=3. + The following environment variables are REQUIRED: + + $( printf " %s\n" ${env_vars[*]} ) + + The following directories MUST exist: + + $( printf " %s\n" ${dir_paths[*]} ) + + The following files MUST exist: + + $( printf " %s\n" $LOG_FILE ) + + CONFIGURATION + + The following source library files MUST be installed in LIB_DIR: + + $( printf " %s\n" ${lib_filenames[*]} ) + + The following XSL scripts MUST be installed in LIB_DIR: + + $( printf " %s\n" ${xsl_filenames[*]} ) + EXAMPLES \$ out_dir=/home/htdocs/www.incommonfederation.org/federation/metadata/ @@ -75,29 +95,35 @@ HELP_MSG script_name=${0##*/} # equivalent to basename $0 -# required directories -env_vars="LIB_DIR -CACHE_DIR -TMPDIR" +# required environment variables +env_vars[1]="LIB_DIR" +env_vars[2]="CACHE_DIR" +env_vars[3]="TMPDIR" +env_vars[4]="LOG_FILE" -# check required directories -for env_var in $env_vars; do +# check environment variables +for env_var in ${env_vars[*]}; do eval "env_var_val=\${$env_var}" if [ -z "$env_var_val" ]; then echo "ERROR: $script_name requires env var $env_var" >&2 exit 2 fi - if [ ! -d "$env_var_val" ]; then - echo "ERROR: $script_name: directory does not exist: $env_var_val" >&2 +done + +# required directories +dir_paths[1]="$LIB_DIR" +dir_paths[2]="$CACHE_DIR" +dir_paths[3]="$TMPDIR" + +# check required directories +for dir_path in ${dir_paths[*]}; do + if [ ! -d "$dir_path" ]; then + echo "ERROR: $script_name: directory does not exist: $dir_path" >&2 exit 2 fi done # check the log file -if [ -z "$LOG_FILE" ]; then - echo "ERROR: $script_name requires env var LOG_FILE" >&2 - exit 2 -fi # devices such as /dev/tty and /dev/null are allowed if [ ! -f "$LOG_FILE" ] && [[ $LOG_FILE != /dev/* ]]; then echo "ERROR: $script_name: file does not exist: $LOG_FILE" >&2 @@ -109,9 +135,18 @@ if [ -z "$LOG_LEVEL" ]; then LOG_LEVEL=3 fi -# library filenames (always list core_lib first) -LIB_FILENAMES="core_lib.sh -http_tools.sh" +# source lib filenames +lib_filenames[1]="core_lib.sh" +lib_filenames[2]="http_tools.sh" + +# check lib files +for lib_filename in ${lib_filenames[*]}; do + lib_file="$LIB_DIR/$lib_filename" + if [ ! -f "$lib_file" ]; then + echo "ERROR: $script_name: lib file does not exist: $lib_file" >&2 + exit 2 + fi +done # XSL filenames xsl_filenames[1]="list_all_IdP_DisplayNames_csv.xsl" @@ -121,6 +156,15 @@ xsl_filenames[4]="security_contacts_legacy_list_csv.xsl" xsl_filenames[5]="security_contacts_summary_json.xsl" xsl_filenames[6]="security_contacts_summary_local_json.xsl" +# check XSL files +for i in ${!xsl_filenames[*]}; do + xsl_files[$i]=$LIB_DIR/${xsl_filenames[$i]} + if [ ! -f "${xsl_files[$i]}" ]; then + echo "ERROR: $script_name: lib file does not exist: ${xsl_files[$i]}" >&2 + exit 2 + fi +done + # output filenames out_filenames[1]="all-idp-displaynames.csv" out_filenames[2]="all-idps-rands.csv" @@ -184,12 +228,8 @@ fi ####################################################################### # source lib files -for lib_filename in $LIB_FILENAMES; do +for lib_filename in ${lib_filenames[*]}; do lib_file="$LIB_DIR/$lib_filename" - if [ ! -f "$lib_file" ]; then - echo "ERROR: $script_name: lib file does not exist: $lib_file" >&2 - exit 2 - fi source "$lib_file" status_code=$? if [ $status_code -ne 0 ]; then @@ -198,15 +238,6 @@ for lib_filename in $LIB_FILENAMES; do fi done -# XSL stylesheets must exist -for i in ${!xsl_filenames[*]}; do - xsl_files[$i]=$LIB_DIR/${xsl_filenames[$i]} - if [ ! -f "${xsl_files[$i]}" ]; then - echo "ERROR: $script_name: lib file does not exist: ${xsl_files[$i]}" >&2 - exit 2 - fi -done - # create a temporary subdirectory tmp_dir="${TMPDIR%%/}/${script_name%%.*}_$$" /bin/mkdir "$tmp_dir"