From 2347726f1f6e98566b8fcc196b1711d5c2be9b08 Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Tue, 3 Nov 2020 17:09:06 +0000 Subject: [PATCH 1/6] Add logWriter --- init.go | 6 +++++- script/runner/runner.go | 13 ++++++++++++- scripts/01-lio/enable-lio.sh | 36 +++++++++++++++++++++--------------- scripts/02-limits/limits.sh | 16 +++++++++++----- 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/init.go b/init.go index d40a236..bf642a6 100644 --- a/init.go +++ b/init.go @@ -22,6 +22,9 @@ const ( ) func main() { + log.SetFlags(0) + log.SetOutput(new(logWriter)) + scriptsDir := flag.String("scripts", "", "absolute path of the scripts directory") dsName := flag.String("dsName", "", "name of the StorageOS DaemonSet") dsNamespace := flag.String("dsNamespace", "", "namespace of the StorageOS DaemonSet") @@ -79,10 +82,11 @@ func main() { log.Fatalf("failed to get list of scripts: %v", err) } + log.SetFlags(log.LUTC) log.Println("scripts:", allScripts) // Create a script runner. - run := runner.NewRun() + run := runner.NewRun(new(logWriter)) // Run all the scripts. if err := runScripts(run, allScripts, scriptEnvVar); err != nil { diff --git a/script/runner/runner.go b/script/runner/runner.go index 411388e..0699fc8 100644 --- a/script/runner/runner.go +++ b/script/runner/runner.go @@ -10,10 +10,21 @@ import ( "os/exec" "sync" "syscall" + "time" ) +const timeFormat = time.RFC3339 + +type logWriter struct{} + +func (lw *logWriter) Write(bytes []byte) (int, error) { + return fmt.Print(time.Now().UTC().Format(timeFormat), " ", string(bytes)) +} + // Run implements Runner interface. -type Run struct{} +type Run struct { + lw *logWriter +} // NewRun returns an initialized Run. func NewRun() *Run { diff --git a/scripts/01-lio/enable-lio.sh b/scripts/01-lio/enable-lio.sh index 65e727a..fa669ed 100755 --- a/scripts/01-lio/enable-lio.sh +++ b/scripts/01-lio/enable-lio.sh @@ -2,6 +2,12 @@ set -e +function date_time_in_rfc3339() { + local msg="$1" + timestamp_utc=$(date -u --rfc-3339=seconds) + echo $timestamp_utc $msg +} + function module_error_log() { local mod="$1" local mod_dir="$2" @@ -13,23 +19,23 @@ function module_error_log() { # Configfs can be built in the kernel, hence the module # initstate file will not exist. Even though, the mount # is present and working -echo "Checking configfs" +date_time_in_rfc3339 "Checking configfs" if mount | grep -q "^configfs on /sys/kernel/config"; then - echo "configfs mounted on sys/kernel/config" + date_time_in_rfc3339 "configfs mounted on sys/kernel/config" else - echo "configfs not mounted, checking if kmod is loaded" + date_time_in_rfc3339 "configfs not mounted, checking if kmod is loaded" state_file=/sys/module/configfs/initstate if [ -f "$state_file" ] && grep -q live "$state_file"; then - echo "configfs mod is loaded" + date_time_in_rfc3339 "configfs mod is loaded" else - echo "configfs not loaded, executing: modprobe -b configfs" + date_time_in_rfc3339 "configfs not loaded, executing: modprobe -b configfs" modprobe -b configfs fi if mount | grep -q configfs; then - echo "configfs mounted" + date_time_in_rfc3339 "configfs mounted" else - echo "mounting configfs /sys/kernel/config" + date_time_in_rfc3339 "mounting configfs /sys/kernel/config" mount -t configfs configfs /sys/kernel/config fi fi @@ -44,16 +50,16 @@ loop_dir="$target_dir"/loopback for mod in target_core_mod tcm_loop target_core_file uio target_core_user; do state_file=/sys/module/$mod/initstate if [ -f "$state_file" ] && grep -q live "$state_file"; then - echo "Module $mod is running" + date_time_in_rfc3339 "Module $mod is running" else - echo "Module $mod is not running" - echo "--> executing \"modprobe -b $mod\"" + date_time_in_rfc3339 "Module $mod is not running" + date_time_in_rfc3339 "--> executing \"modprobe -b $mod\"" if ! modprobe -b $mod; then # core_user and uio are not mandatory if [ "$mod" != "target_core_user" ] && [ "$mod" != "uio" ]; then exit 1 else - echo "Couldn't enable $mod" + date_time_in_rfc3339 "Couldn't enable $mod" fi fi # Enable module at boot @@ -65,8 +71,8 @@ done # Check if the modules loaded have its # directories available on top of configfs -[ ! -d "$target_dir" ] && echo "$target_dir doesn't exist" && module_error_log "target_core_mod" "$target_dir" -[ ! -d "$core_dir" ] && echo "$core_dir doesn't exist" && module_error_log "target_core_file" "$core_dir" -[ ! -d "$loop_dir" ] && echo "$loop_dir doesn't exist. Creating dir manually..." && mkdir $loop_dir +[ ! -d "$target_dir" ] && date_time_in_rfc3339 "$target_dir doesn't exist" && module_error_log "target_core_mod" "$target_dir" +[ ! -d "$core_dir" ] && date_time_in_rfc3339 "$core_dir doesn't exist" && module_error_log "target_core_file" "$core_dir" +[ ! -d "$loop_dir" ] && date_time_in_rfc3339 "$loop_dir doesn't exist. Creating dir manually..." && mkdir $loop_dir -echo "LIO set up is ready!" +date_time_in_rfc3339 "LIO set up is ready!" diff --git a/scripts/02-limits/limits.sh b/scripts/02-limits/limits.sh index abcb980..b6383cb 100755 --- a/scripts/02-limits/limits.sh +++ b/scripts/02-limits/limits.sh @@ -2,6 +2,12 @@ set -e +function date_time_in_rfc3339() { + local msg="$1" + timestamp_utc=$(date -u --rfc-3339=seconds) + echo $timestamp_utc $msg +} + # For a directory containeing the cgroup slice information, return the value of # pids.max, or 0 if set to "max". Return -1 exit code if the file doesn't exist. function read_max_pids() { @@ -46,24 +52,24 @@ done # TBC: Don't fail if we can't determine limit. if [ $max_pids_limit -eq $default_max_pids_limit ]; then - echo "WARNING: Unable to determine effective max.pids limit" + date_time_in_rfc3339 "WARNING: Unable to determine effective max.pids limit" exit 0 fi # Fail if MINIMUM_MAX_PIDS_LIMIT is set and is greater than current limit. if [[ -n "${MINIMUM_MAX_PIDS_LIMIT}" && $MINIMUM_MAX_PIDS_LIMIT -gt $max_pids_limit ]]; then - echo "ERROR: Effective max.pids limit ($max_pids_limit) less than MINIMUM_MAX_PIDS_LIMIT ($MINIMUM_MAX_PIDS_LIMIT)" + date_time_in_rfc3339 "ERROR: Effective max.pids limit ($max_pids_limit) less than MINIMUM_MAX_PIDS_LIMIT ($MINIMUM_MAX_PIDS_LIMIT)" exit 1 fi if [ -n "${RECOMMENDED_MAX_PIDS_LIMIT}" ]; then if [ $RECOMMENDED_MAX_PIDS_LIMIT -gt $max_pids_limit ]; then - echo "WARNING: Effective max.pids limit ($max_pids_limit) less than RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" + date_time_in_rfc3339 "WARNING: Effective max.pids limit ($max_pids_limit) less than RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" else - echo "OK: Effective max.pids limit ($max_pids_limit) at least RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" + date_time_in_rfc3339 "OK: Effective max.pids limit ($max_pids_limit) at least RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" fi exit 0 fi # No requirements set, just output current limit. -echo "Effective max.pids limit: $max_pids_limit" +date_time_in_rfc3339 "Effective max.pids limit: $max_pids_limit" From 6d1c206cfdb210ad88545a5f6e5e4a85b52e6870 Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Tue, 3 Nov 2020 17:32:43 +0000 Subject: [PATCH 2/6] Change function name from date_time_in_rfc3339 to log, as it's easier --- scripts/01-lio/enable-lio.sh | 32 ++++++++++++++++---------------- scripts/02-limits/limits.sh | 12 ++++++------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/scripts/01-lio/enable-lio.sh b/scripts/01-lio/enable-lio.sh index fa669ed..436f758 100755 --- a/scripts/01-lio/enable-lio.sh +++ b/scripts/01-lio/enable-lio.sh @@ -2,7 +2,7 @@ set -e -function date_time_in_rfc3339() { +function log() { local msg="$1" timestamp_utc=$(date -u --rfc-3339=seconds) echo $timestamp_utc $msg @@ -19,23 +19,23 @@ function module_error_log() { # Configfs can be built in the kernel, hence the module # initstate file will not exist. Even though, the mount # is present and working -date_time_in_rfc3339 "Checking configfs" +log "Checking configfs" if mount | grep -q "^configfs on /sys/kernel/config"; then - date_time_in_rfc3339 "configfs mounted on sys/kernel/config" + log "configfs mounted on sys/kernel/config" else - date_time_in_rfc3339 "configfs not mounted, checking if kmod is loaded" + log "configfs not mounted, checking if kmod is loaded" state_file=/sys/module/configfs/initstate if [ -f "$state_file" ] && grep -q live "$state_file"; then - date_time_in_rfc3339 "configfs mod is loaded" + log "configfs mod is loaded" else - date_time_in_rfc3339 "configfs not loaded, executing: modprobe -b configfs" + log "configfs not loaded, executing: modprobe -b configfs" modprobe -b configfs fi if mount | grep -q configfs; then - date_time_in_rfc3339 "configfs mounted" + log "configfs mounted" else - date_time_in_rfc3339 "mounting configfs /sys/kernel/config" + log "mounting configfs /sys/kernel/config" mount -t configfs configfs /sys/kernel/config fi fi @@ -50,16 +50,16 @@ loop_dir="$target_dir"/loopback for mod in target_core_mod tcm_loop target_core_file uio target_core_user; do state_file=/sys/module/$mod/initstate if [ -f "$state_file" ] && grep -q live "$state_file"; then - date_time_in_rfc3339 "Module $mod is running" + log "Module $mod is running" else - date_time_in_rfc3339 "Module $mod is not running" - date_time_in_rfc3339 "--> executing \"modprobe -b $mod\"" + log "Module $mod is not running" + log "--> executing \"modprobe -b $mod\"" if ! modprobe -b $mod; then # core_user and uio are not mandatory if [ "$mod" != "target_core_user" ] && [ "$mod" != "uio" ]; then exit 1 else - date_time_in_rfc3339 "Couldn't enable $mod" + log "Couldn't enable $mod" fi fi # Enable module at boot @@ -71,8 +71,8 @@ done # Check if the modules loaded have its # directories available on top of configfs -[ ! -d "$target_dir" ] && date_time_in_rfc3339 "$target_dir doesn't exist" && module_error_log "target_core_mod" "$target_dir" -[ ! -d "$core_dir" ] && date_time_in_rfc3339 "$core_dir doesn't exist" && module_error_log "target_core_file" "$core_dir" -[ ! -d "$loop_dir" ] && date_time_in_rfc3339 "$loop_dir doesn't exist. Creating dir manually..." && mkdir $loop_dir +[ ! -d "$target_dir" ] && log "$target_dir doesn't exist" && module_error_log "target_core_mod" "$target_dir" +[ ! -d "$core_dir" ] && log "$core_dir doesn't exist" && module_error_log "target_core_file" "$core_dir" +[ ! -d "$loop_dir" ] && log "$loop_dir doesn't exist. Creating dir manually..." && mkdir $loop_dir -date_time_in_rfc3339 "LIO set up is ready!" +log "LIO set up is ready!" diff --git a/scripts/02-limits/limits.sh b/scripts/02-limits/limits.sh index b6383cb..d815c86 100755 --- a/scripts/02-limits/limits.sh +++ b/scripts/02-limits/limits.sh @@ -2,7 +2,7 @@ set -e -function date_time_in_rfc3339() { +function log() { local msg="$1" timestamp_utc=$(date -u --rfc-3339=seconds) echo $timestamp_utc $msg @@ -52,24 +52,24 @@ done # TBC: Don't fail if we can't determine limit. if [ $max_pids_limit -eq $default_max_pids_limit ]; then - date_time_in_rfc3339 "WARNING: Unable to determine effective max.pids limit" + log "WARNING: Unable to determine effective max.pids limit" exit 0 fi # Fail if MINIMUM_MAX_PIDS_LIMIT is set and is greater than current limit. if [[ -n "${MINIMUM_MAX_PIDS_LIMIT}" && $MINIMUM_MAX_PIDS_LIMIT -gt $max_pids_limit ]]; then - date_time_in_rfc3339 "ERROR: Effective max.pids limit ($max_pids_limit) less than MINIMUM_MAX_PIDS_LIMIT ($MINIMUM_MAX_PIDS_LIMIT)" + log "ERROR: Effective max.pids limit ($max_pids_limit) less than MINIMUM_MAX_PIDS_LIMIT ($MINIMUM_MAX_PIDS_LIMIT)" exit 1 fi if [ -n "${RECOMMENDED_MAX_PIDS_LIMIT}" ]; then if [ $RECOMMENDED_MAX_PIDS_LIMIT -gt $max_pids_limit ]; then - date_time_in_rfc3339 "WARNING: Effective max.pids limit ($max_pids_limit) less than RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" + log "WARNING: Effective max.pids limit ($max_pids_limit) less than RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" else - date_time_in_rfc3339 "OK: Effective max.pids limit ($max_pids_limit) at least RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" + log "OK: Effective max.pids limit ($max_pids_limit) at least RECOMMENDED_MAX_PIDS_LIMIT ($RECOMMENDED_MAX_PIDS_LIMIT)" fi exit 0 fi # No requirements set, just output current limit. -date_time_in_rfc3339 "Effective max.pids limit: $max_pids_limit" +log "Effective max.pids limit: $max_pids_limit" From 669d4681dda930221effd0d46cb8304731200117 Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Wed, 4 Nov 2020 10:17:10 +0000 Subject: [PATCH 3/6] Use the logger type --- init.go | 14 +++++++++++--- script/runner/runner.go | 13 ++----------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/init.go b/init.go index bf642a6..39e2156 100644 --- a/init.go +++ b/init.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "os" + "time" "github.com/storageos/init/info" "github.com/storageos/init/info/k8s" @@ -21,9 +22,17 @@ const ( nodeImageEnvVar = "NODE_IMAGE" ) +const timeFormat = time.RFC3339 + +type logWriter struct{} + +func (lw *logWriter) Write(bytes []byte) (int, error) { + return fmt.Print(time.Now().UTC().Format(timeFormat), " ", string(bytes)) +} + func main() { + log := log.New(new(logWriter), "", log.LstdFlags) log.SetFlags(0) - log.SetOutput(new(logWriter)) scriptsDir := flag.String("scripts", "", "absolute path of the scripts directory") dsName := flag.String("dsName", "", "name of the StorageOS DaemonSet") @@ -82,11 +91,10 @@ func main() { log.Fatalf("failed to get list of scripts: %v", err) } - log.SetFlags(log.LUTC) log.Println("scripts:", allScripts) // Create a script runner. - run := runner.NewRun(new(logWriter)) + run := runner.NewRun(log) // Run all the scripts. if err := runScripts(run, allScripts, scriptEnvVar); err != nil { diff --git a/script/runner/runner.go b/script/runner/runner.go index 0699fc8..3a98198 100644 --- a/script/runner/runner.go +++ b/script/runner/runner.go @@ -10,24 +10,15 @@ import ( "os/exec" "sync" "syscall" - "time" ) -const timeFormat = time.RFC3339 - -type logWriter struct{} - -func (lw *logWriter) Write(bytes []byte) (int, error) { - return fmt.Print(time.Now().UTC().Format(timeFormat), " ", string(bytes)) -} - // Run implements Runner interface. type Run struct { - lw *logWriter + log *log.Logger } // NewRun returns an initialized Run. -func NewRun() *Run { +func NewRun(*log.Logger) *Run { return &Run{} } From d405a58278e97c93bbe810e0f6162de67d78d8d4 Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Wed, 4 Nov 2020 10:33:27 +0000 Subject: [PATCH 4/6] Add T in date for the bash scripts --- scripts/01-lio/enable-lio.sh | 2 +- scripts/02-limits/limits.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/01-lio/enable-lio.sh b/scripts/01-lio/enable-lio.sh index 436f758..a9aba7c 100755 --- a/scripts/01-lio/enable-lio.sh +++ b/scripts/01-lio/enable-lio.sh @@ -4,7 +4,7 @@ set -e function log() { local msg="$1" - timestamp_utc=$(date -u --rfc-3339=seconds) + timestamp_utc=$(date -u --rfc-3339=seconds | sed 's/ /T/') echo $timestamp_utc $msg } diff --git a/scripts/02-limits/limits.sh b/scripts/02-limits/limits.sh index d815c86..4c42c54 100755 --- a/scripts/02-limits/limits.sh +++ b/scripts/02-limits/limits.sh @@ -4,7 +4,7 @@ set -e function log() { local msg="$1" - timestamp_utc=$(date -u --rfc-3339=seconds) + timestamp_utc=$(date -u --rfc-3339=seconds | sed 's/ /T/') echo $timestamp_utc $msg } From d5445d7870173c32aceca120ca6bcb61d3404a5e Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Wed, 4 Nov 2020 10:38:28 +0000 Subject: [PATCH 5/6] Use ns --- scripts/01-lio/enable-lio.sh | 2 +- scripts/02-limits/limits.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/01-lio/enable-lio.sh b/scripts/01-lio/enable-lio.sh index a9aba7c..8676ea1 100755 --- a/scripts/01-lio/enable-lio.sh +++ b/scripts/01-lio/enable-lio.sh @@ -4,7 +4,7 @@ set -e function log() { local msg="$1" - timestamp_utc=$(date -u --rfc-3339=seconds | sed 's/ /T/') + timestamp_utc=$(date -u --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g') echo $timestamp_utc $msg } diff --git a/scripts/02-limits/limits.sh b/scripts/02-limits/limits.sh index 4c42c54..59fccca 100755 --- a/scripts/02-limits/limits.sh +++ b/scripts/02-limits/limits.sh @@ -4,7 +4,7 @@ set -e function log() { local msg="$1" - timestamp_utc=$(date -u --rfc-3339=seconds | sed 's/ /T/') + timestamp_utc=$(date -u --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g') echo $timestamp_utc $msg } From be6ac45a77ac855110bffaeb707e2febf202f222 Mon Sep 17 00:00:00 2001 From: StellaEngle Date: Wed, 4 Nov 2020 12:20:33 +0000 Subject: [PATCH 6/6] Add parameters for logger --- init.go | 4 ++-- script/runner/runner.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/init.go b/init.go index 39e2156..22b083f 100644 --- a/init.go +++ b/init.go @@ -97,7 +97,7 @@ func main() { run := runner.NewRun(log) // Run all the scripts. - if err := runScripts(run, allScripts, scriptEnvVar); err != nil { + if err := runScripts(log, run, allScripts, scriptEnvVar); err != nil { log.Fatalf("init failed: %v", err) } } @@ -144,7 +144,7 @@ func getParamsForK8SImageInfo(dsName, dsNamespace string) (name, namespace strin // event. // Any preliminary checks that need to be performed before running a script can // be performed here. -func runScripts(run script.Runner, scripts []string, envVars map[string]string) error { +func runScripts(log *log.Logger, run script.Runner, scripts []string, envVars map[string]string) error { for _, script := range scripts { // TODO: Check if the script has any preliminary checks to be performed // before execution. diff --git a/script/runner/runner.go b/script/runner/runner.go index 3a98198..7bfe297 100644 --- a/script/runner/runner.go +++ b/script/runner/runner.go @@ -14,12 +14,12 @@ import ( // Run implements Runner interface. type Run struct { - log *log.Logger + logger *log.Logger } // NewRun returns an initialized Run. -func NewRun(*log.Logger) *Run { - return &Run{} +func NewRun(log *log.Logger) *Run { + return &Run{log} } // RunScript runs a given script with arguments if specified, and attaches a